Skip to content

[BUG]  #113

@ice-jing

Description

@ice-jing

Describe your issue

When I run Example 2 - Draw Your Own Area from map2loop2-notebooks, I get an error!

Minimal reproducing code example

import os
from map2loop.project import Project
from map2loop.m2l_enums import VerboseLevel
from datetime import datetime
import time
import warnings


t0 = time.time()
warnings.filterwarnings('ignore')
nowtime=datetime.now().isoformat(timespec='minutes')   
model_name=nowtime.replace(":","-").replace("T","-")
proj = Project(
                loopdata_state="WA",
                overwrite="true",
                verbose_level=VerboseLevel.NONE,
                project_path=model_name,
                working_projection="EPSG:28350",
                )

proj.update_config(
                    out_dir=model_name,
                    bbox_3d={
                         "minx": mbbox.total_bounds[0], #500000,
                         "miny": mbbox.total_bounds[1], #7490000,
                         "maxx": mbbox.total_bounds[2], #545000,
                         "maxy": mbbox.total_bounds[3], #7520000,
                         "base": -4800,
                         "top": 1200,
                    },
                    #loopFilename='test.loop3d',
                    run_flags={                        
                        'aus': True,
                        'close_dip': -999,
                        'contact_decimate': 5,
                        'contact_dip': -999,
                        'contact_orientation_decimate': 5,
                        'deposits': "Fe,Cu,Au,NONE",
                        'dist_buffer': 10,
                        'dtb': '',
                        'fat_step': 750,
                        'fault_decimate': 5,
                        'fault_dip': -999,
                        'fold_decimate': 5,
                        'interpolation_scheme': 'scipy_rbf',
                        'interpolation_spacing': 500,
                        'intrusion_mode': 0,
                        'max_thickness_allowed': 10000,
                        'min_fault_length': 5000,
                        'misorientation': 30,
                        'null_scheme': 'null',
                        'orientation_decimate': 0,
                        'pluton_dip': 45,
                        'pluton_form': 'domes',
                        'thickness_buffer': 5000,
                        'use_fat': False,
                        'use_interpolations': False,
                        'fault_orientation_clusters':2,
                        'fault_length_clusters':2,
                        'map2graph':True,
                        'granular_map2graph':True
                    },
                  )
proj.config.c_l['intrusive']='intrusive'
#proj.config.c_l['intrusive']='mafic intrusive'
proj.workflow['fold_axial_traces']=False
proj.run()
t1 = time.time()
print("m2l",(t1-t0)/60.0,"minutes")

Error message

ValueError                                Traceback (most recent call last)
Cell In[8], line 21
     12 model_name=nowtime.replace(":","-").replace("T","-")
     13 proj = Project(
     14                 loopdata_state="WA",
     15                 overwrite="true",
   (...)
     18                 working_projection="EPSG:28350",
     19                 )
---> 21 proj.update_config(
     22                     out_dir=model_name,
     23                     bbox_3d={
     24                          "minx": mbbox.total_bounds[0], #500000,
     25                          "miny": mbbox.total_bounds[1], #7490000,
     26                          "maxx": mbbox.total_bounds[2], #545000,
     27                          "maxy": mbbox.total_bounds[3], #7520000,
     28                          "base": -4800,
     29                          "top": 1200,
     30                     },
     31                     #loopFilename='test.loop3d',
     32                     run_flags={                        
     33                         'aus': True,
     34                         'close_dip': -999,
     35                         'contact_decimate': 5,
     36                         'contact_dip': -999,
     37                         'contact_orientation_decimate': 5,
     38                         'deposits': "Fe,Cu,Au,NONE",
     39                         'dist_buffer': 10,
     40                         'dtb': '',
     41                         'fat_step': 750,
     42                         'fault_decimate': 5,
     43                         'fault_dip': -999,
     44                         'fold_decimate': 5,
     45                         'interpolation_scheme': 'scipy_rbf',
     46                         'interpolation_spacing': 500,
     47                         'intrusion_mode': 0,
     48                         'max_thickness_allowed': 10000,
     49                         'min_fault_length': 5000,
     50                         'misorientation': 30,
     51                         'null_scheme': 'null',
     52                         'orientation_decimate': 0,
     53                         'pluton_dip': 45,
     54                         'pluton_form': 'domes',
     55                         'thickness_buffer': 5000,
     56                         'use_fat': False,
     57                         'use_interpolations': False,
     58                         'fault_orientation_clusters':2,
     59                         'fault_length_clusters':2,
     60                         'map2graph':True,
     61                         'granular_map2graph':True
     62                     },
     63                   )
     64 proj.config.c_l['intrusive']='intrusive'
     65 #proj.config.c_l['intrusive']='mafic intrusive'

File <@beartype(map2loop.project.Project.update_config) at 0x1700519cd30>:48, in update_config(__beartype_func, __beartype_conf, __beartype_get_violation, *args, **kwargs)

File D:\Anaconda3\envs\test39\lib\site-packages\map2loop\project.py:435, in Project.update_config(self, overwrite, bbox_3d, dtm_crs, step_out, clut_path, run_flags, **kwargs)
    432     if self.state in ["WA", "NSW", "VIC", "SA", "QLD", "ACT", "TAS"]:
    433         clut_path = clut_paths[self.state]
--> 435 self.config.update(
    436     self.project_path,
    437     bbox_3d,
    438     polygon,
    439     step_out,
    440     dtm_crs,
    441     self.map_data.working_projection,
    442     self.map_data.get_filename(Datatype.METADATA),
    443     clut_path=clut_path,
    444     run_flags=run_flags,
    445 )
    447 self.map_data.load_all_map_data(self.config)

File <@beartype(map2loop.config.Config.update) at 0x170046715e0>:66, in update(__beartype_func, __beartype_conf, __beartype_get_violation, *args, **kwargs)

File D:\Anaconda3\envs\test39\lib\site-packages\map2loop\config.py:162, in Config.update(self, project_path, bbox_3d, polygon, step_out, dtm_crs, project_crs, metadata_filename, clut_path, run_flags)
    159 self.project_crs = project_crs
    161 self.read_metadata(metadata_filename)
--> 162 self.create_cmap()

File D:\Anaconda3\envs\test39\lib\site-packages\map2loop\config.py:204, in Config.create_cmap(self)
    197 def create_cmap(self):
    198     # Make colours consistent from map to model
    199     formations = sorted(
    200         [
    201             formation.replace(" ", "_").replace("-", "_")
    202             for formation in list(
    203                 set(
--> 204                     self.map_data.get_map_data(Datatype.GEOLOGY)[
    205                         "UNIT_NAME"
    206                     ].to_numpy()
    207                 )
    208             )
    209         ]
    210     )
    211     temp_colours = [""] * len(formations)
    212     self.colour_dict = dict(zip(formations, temp_colours))

File <@beartype(map2loop.mapdata.MapData.get_map_data) at 0x1700502ee50>:31, in get_map_data(__beartype_func, __beartype_conf, __beartype_get_violation, __beartype_object_1580561287408, *args, **kwargs)

File D:\Anaconda3\envs\test39\lib\site-packages\map2loop\mapdata.py:366, in MapData.get_map_data(self, datatype)
    363 @beartype.beartype
    364 def get_map_data(self, datatype: Datatype):
    365     if self.data_states[datatype] != Datastate.COMPLETE:
--> 366         self.load_map_data(datatype)
    367     return self.data[datatype]

File <@beartype(map2loop.mapdata.MapData.load_map_data) at 0x1700502e700>:31, in load_map_data(__beartype_func, __beartype_conf, __beartype_get_violation, __beartype_object_1580561287408, *args, **kwargs)

File D:\Anaconda3\envs\test39\lib\site-packages\map2loop\mapdata.py:196, in MapData.load_map_data(self, datatype)
    193     self.data_states[datatype] = Datastate.CLIPPED
    194 if self.data_states[datatype] == Datastate.CLIPPED:
    195     # Convert column names using codes_and_labels dictionary
--> 196     self.check_map(datatype)
    197     self.data_states[datatype] = Datastate.CONVERTED
    198 if self.data_states[datatype] == Datastate.CONVERTED:

File <@beartype(map2loop.mapdata.MapData.check_map) at 0x1700502e940>:31, in check_map(__beartype_func, __beartype_conf, __beartype_get_violation, __beartype_object_1580561287408, *args, **kwargs)

File D:\Anaconda3\envs\test39\lib\site-packages\map2loop\mapdata.py:256, in MapData.check_map(self, datatype)
    254 _errors = []
    255 if datatype == Datatype.GEOLOGY:
--> 256     self.data[Datatype.GEOLOGY] = m2l_map_checker.check_geology_map(
    257         self.data[Datatype.GEOLOGY],
    258         self.config.c_l,
    259         self.config.run_flags["ignore_codes"],
    260         _warnings,
    261         _errors,
    262         True,
    263         self.config.verbose_level,
    264     )
    265 if datatype == Datatype.STRUCTURE:
    266     self.data[Datatype.STRUCTURE] = m2l_map_checker.check_structure_map(
    267         self.data[Datatype.STRUCTURE],
    268         self.config.c_l,
   (...)
    271         self.config.verbose_level,
    272     )

File D:\Anaconda3\envs\test39\lib\site-packages\map2loop\m2l_map_checker.py:454, in check_geology_map(geology, c_l, ignore_codes, m2l_warnings, m2l_errors, explode_intrusives, verbose_level)
    450 elif len(geology[~geology[c_l["o"]].isnull()] != len(geology)):
    451     vals = geology[geology[c_l["o"]].astype(str).str.isnumeric()][
    452         c_l["o"]
    453     ].astype(int)
--> 454     next_index = int(np.nanmax(vals)) + 1
    455     for ind, layer in geology.iterrows():
    456         if pd.isna(layer[c_l["o"]]):

File <__array_function__ internals>:180, in nanmax(*args, **kwargs)

File D:\Anaconda3\envs\test39\lib\site-packages\numpy\lib\nanfunctions.py:483, in nanmax(a, axis, out, keepdims, initial, where)
    480 else:
    481     # Slow, but safe for subclasses of ndarray
    482     a, mask = _replace_nan(a, -np.inf)
--> 483     res = np.amax(a, axis=axis, out=out, **kwargs)
    484     if mask is None:
    485         return res

File <__array_function__ internals>:180, in amax(*args, **kwargs)

File D:\Anaconda3\envs\test39\lib\site-packages\numpy\core\fromnumeric.py:2793, in amax(a, axis, out, keepdims, initial, where)
   2677 @array_function_dispatch(_amax_dispatcher)
   2678 def amax(a, axis=None, out=None, keepdims=np._NoValue, initial=np._NoValue,
   2679          where=np._NoValue):
   2680     """
   2681     Return the maximum of an array or maximum along an axis.
   2682 
   (...)
   2791     5
   2792     """
-> 2793     return _wrapreduction(a, np.maximum, 'max', axis, None, out,
   2794                           keepdims=keepdims, initial=initial, where=where)

File D:\Anaconda3\envs\test39\lib\site-packages\numpy\core\fromnumeric.py:86, in _wrapreduction(obj, ufunc, method, axis, dtype, out, **kwargs)
     83         else:
     84             return reduction(axis=axis, out=out, **passkwargs)
---> 86 return ufunc.reduce(obj, axis, dtype, out, **passkwargs)

ValueError: zero-size array to reduction operation maximum which has no identity

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions