@lru_cache(maxsize=1)
def _init_dataframes(self) -> None:
    "Internal: Creates boundary dataframes based on boundary data\n\n        Parameters\n        ----------\n\n        Returns\n        -------\n        None\n\n        Notes\n        -----\n        This method doesn't have any return value, but it is cached\n        so that on re-execution it doesn't recalculate.\n        "
    boundaries = self._data
    ocean_boundaries = []
    land_boundaries = []
    interior_boundaries = []
    if (boundaries is not None):
        for (ibtype, bnds) in boundaries.items():
            if (ibtype is None):
                for (bnd_id, data) in bnds.items():
                    indexes = list(map(self.mesh.nodes.get_index_by_id, data['indexes']))
                    ocean_boundaries.append({'id': bnd_id, 'index_id': data['indexes'], 'indexes': indexes, 'geometry': LineString(self.mesh.coord[indexes])})
            elif str(ibtype).endswith('1'):
                for (bnd_id, data) in bnds.items():
                    indexes = list(map(self.mesh.nodes.get_index_by_id, data['indexes']))
                    interior_boundaries.append({'id': bnd_id, 'ibtype': ibtype, 'index_id': data['indexes'], 'indexes': indexes, 'geometry': LineString(self.mesh.coord[indexes])})
            else:
                for (bnd_id, data) in bnds.items():
                    _indexes = np.array(data['indexes'])
                    if (_indexes.ndim > 1):
                        new_indexes = []
                        for (i, line) in enumerate(_indexes.T):
                            if ((i % 2) != 0):
                                new_indexes.extend(np.flip(line))
                            else:
                                new_indexes.extend(line)
                        _indexes = np.array(new_indexes).flatten()
                    else:
                        _indexes = _indexes.flatten()
                    indexes = list(map(self.mesh.nodes.get_index_by_id, _indexes))
                    land_boundaries.append({'id': bnd_id, 'ibtype': ibtype, 'index_id': data['indexes'], 'indexes': indexes, 'geometry': LineString(self.mesh.coord[indexes])})
    self._ocean = gpd.GeoDataFrame(ocean_boundaries)
    self._land = gpd.GeoDataFrame(land_boundaries)
    self._interior = gpd.GeoDataFrame(interior_boundaries)
Internal: Creates boundary dataframes based on boundary data

Parameters
----------

Returns
-------
None

Notes
-----
This method doesn't have any return value, but it is cached
so that on re-execution it doesn't recalculate.
@lru_cache(maxsize=1)
def _init_dataframes(self) -> None:
    "Internal: Creates boundary dataframes based on boundary data\n\n        Parameters\n        ----------\n\n        Returns\n        -------\n        None\n\n        Notes\n        -----\n        This method doesn't have any return value, but it is cached\n        so that on re-execution it doesn't recalculate.\n        "
    boundaries = self._data
    ocean_boundaries = []
    land_boundaries = []
    interior_boundaries = []
    if (boundaries is not None):
        for (ibtype, bnds) in boundaries.items():
            if (ibtype is None):
                for (bnd_id, data) in bnds.items():
                    indexes = list(map(self.mesh.nodes.get_index_by_id, data['indexes']))
                    ocean_boundaries.append({'id': bnd_id, 'index_id': data['indexes'], 'indexes': indexes, 'geometry': LineString(self.mesh.coord[indexes])})
            elif str(ibtype).endswith('1'):
                for (bnd_id, data) in bnds.items():
                    indexes = list(map(self.mesh.nodes.get_index_by_id, data['indexes']))
                    interior_boundaries.append({'id': bnd_id, 'ibtype': ibtype, 'index_id': data['indexes'], 'indexes': indexes, 'geometry': LineString(self.mesh.coord[indexes])})
            else:
                for (bnd_id, data) in bnds.items():
                    _indexes = np.array(data['indexes'])
                    if (_indexes.ndim > 1):
                        new_indexes = []
                        for (i, line) in enumerate(_indexes.T):
                            if ((i % 2) != 0):
                                new_indexes.extend(np.flip(line))
                            else:
                                new_indexes.extend(line)
                        _indexes = np.array(new_indexes).flatten()
                    else:
                        _indexes = _indexes.flatten()
                    indexes = list(map(self.mesh.nodes.get_index_by_id, _indexes))
                    land_boundaries.append({'id': bnd_id, 'ibtype': ibtype, 'index_id': data['indexes'], 'indexes': indexes, 'geometry': LineString(self.mesh.coord[indexes])})
    self._ocean = gpd.GeoDataFrame(ocean_boundaries)
    self._land = gpd.GeoDataFrame(land_boundaries)
    self._interior = gpd.GeoDataFrame(interior_boundaries)