Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions eis_toolkit/conversions/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from eis_toolkit.conversions.csv_to_geodataframe import csv_to_geodataframe # noqa: F401
from eis_toolkit.conversions.raster_to_dataframe import raster_to_dataframe # noqa: F401
22 changes: 22 additions & 0 deletions eis_toolkit/exploratory_analyses/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from eis_toolkit.exploratory_analyses.basic_plots_seaborn import barplot # noqa: F401
from eis_toolkit.exploratory_analyses.basic_plots_seaborn import boxplot # noqa: F401
from eis_toolkit.exploratory_analyses.basic_plots_seaborn import ecdfplot # noqa: F401
from eis_toolkit.exploratory_analyses.basic_plots_seaborn import heatmap # noqa: F401
from eis_toolkit.exploratory_analyses.basic_plots_seaborn import histogram # noqa: F401
from eis_toolkit.exploratory_analyses.basic_plots_seaborn import kdeplot # noqa: F401
from eis_toolkit.exploratory_analyses.basic_plots_seaborn import lineplot # noqa: F401
from eis_toolkit.exploratory_analyses.basic_plots_seaborn import pairplot # noqa: F401
from eis_toolkit.exploratory_analyses.basic_plots_seaborn import regplot # noqa: F401
from eis_toolkit.exploratory_analyses.basic_plots_seaborn import scatterplot # noqa: F401
from eis_toolkit.exploratory_analyses.chi_square_test import chi_square_test # noqa: F401
from eis_toolkit.exploratory_analyses.correlation_matrix import correlation_matrix # noqa: F401
from eis_toolkit.exploratory_analyses.covariance_matrix import covariance_matrix # noqa: F401
from eis_toolkit.exploratory_analyses.dbscan import dbscan # noqa: F401
from eis_toolkit.exploratory_analyses.descriptive_statistics import descriptive_statistics_dataframe # noqa: F401
from eis_toolkit.exploratory_analyses.descriptive_statistics import descriptive_statistics_raster # noqa: F401
from eis_toolkit.exploratory_analyses.feature_importance import evaluate_feature_importance # noqa: F401
from eis_toolkit.exploratory_analyses.k_means_cluster import k_means_clustering # noqa: F401
from eis_toolkit.exploratory_analyses.local_morans_i import local_morans_i # noqa: F401
from eis_toolkit.exploratory_analyses.normality_test import normality_test_array, normality_test_dataframe # noqa: F401
from eis_toolkit.exploratory_analyses.parallel_coordinates import plot_parallel_coordinates # noqa: F401
from eis_toolkit.exploratory_analyses.pca import compute_pca, plot_pca # noqa: F401
22 changes: 22 additions & 0 deletions eis_toolkit/prediction/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from eis_toolkit.prediction.fuzzy_overlay import ( # noqa: F401
and_overlay,
gamma_overlay,
or_overlay,
product_overlay,
sum_overlay,
)
from eis_toolkit.prediction.gradient_boosting import gradient_boosting_classifier_train # noqa: F401
from eis_toolkit.prediction.gradient_boosting import gradient_boosting_regressor_train # noqa: F401
from eis_toolkit.prediction.logistic_regression import logistic_regression_train # noqa: F401
from eis_toolkit.prediction.machine_learning_general import evaluate_model # noqa: F401
from eis_toolkit.prediction.machine_learning_general import load_model # noqa: F401
from eis_toolkit.prediction.machine_learning_general import predict # noqa: F401
from eis_toolkit.prediction.machine_learning_general import prepare_data_for_ml # noqa: F401
from eis_toolkit.prediction.machine_learning_general import reshape_predictions # noqa: F401
from eis_toolkit.prediction.machine_learning_general import save_model # noqa: F401
from eis_toolkit.prediction.machine_learning_general import split_data # noqa: F401
from eis_toolkit.prediction.mlp import train_MLP_classifier, train_MLP_regressor # noqa: F401
from eis_toolkit.prediction.random_forests import random_forest_classifier_train # noqa: F401
from eis_toolkit.prediction.random_forests import random_forest_regressor_train # noqa: F401
from eis_toolkit.prediction.weights_of_evidence import weights_of_evidence_calculate_responses # noqa: F401
from eis_toolkit.prediction.weights_of_evidence import weights_of_evidence_calculate_weights # noqa: F401
18 changes: 18 additions & 0 deletions eis_toolkit/raster_processing/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from eis_toolkit.raster_processing.clipping import clip_raster # noqa: F401
from eis_toolkit.raster_processing.create_constant_raster import create_constant_raster # noqa: F401
from eis_toolkit.raster_processing.distance_to_anomaly import distance_to_anomaly # noqa: F401
from eis_toolkit.raster_processing.distance_to_anomaly import distance_to_anomaly_gdal # noqa: F401
from eis_toolkit.raster_processing.extract_values_from_raster import extract_values_from_raster # noqa: F401
from eis_toolkit.raster_processing.reclassify import reclassify_with_defined_intervals # noqa: F401
from eis_toolkit.raster_processing.reclassify import reclassify_with_equal_intervals # noqa: F401
from eis_toolkit.raster_processing.reclassify import reclassify_with_geometrical_intervals # noqa: F401
from eis_toolkit.raster_processing.reclassify import reclassify_with_manual_breaks # noqa: F401
from eis_toolkit.raster_processing.reclassify import reclassify_with_natural_breaks # noqa: F401
from eis_toolkit.raster_processing.reclassify import reclassify_with_quantiles # noqa: F401
from eis_toolkit.raster_processing.reclassify import reclassify_with_standard_deviation # noqa: F401
from eis_toolkit.raster_processing.reprojecting import reproject_raster # noqa: F401
from eis_toolkit.raster_processing.resampling import resample # noqa: F401
from eis_toolkit.raster_processing.snapping import snap_with_raster # noqa: F401
from eis_toolkit.raster_processing.unifying import unify_raster_grids # noqa: F401
from eis_toolkit.raster_processing.unique_combinations import unique_combinations # noqa: F401
from eis_toolkit.raster_processing.windowing import extract_window # noqa: F401
5 changes: 5 additions & 0 deletions eis_toolkit/raster_processing/derivatives/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from eis_toolkit.raster_processing.derivatives.classification import classify_aspect # noqa: F401
from eis_toolkit.raster_processing.derivatives.parameters import first_order as first_order_derivatives # noqa: F401
from eis_toolkit.raster_processing.derivatives.parameters import ( # noqa: F401
second_order_basic_set as second_order_derivatives,
)
8 changes: 8 additions & 0 deletions eis_toolkit/raster_processing/filters/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from eis_toolkit.raster_processing.filters.focal import focal_filter, gaussian_filter, mexican_hat_filter # noqa: F401
from eis_toolkit.raster_processing.filters.speckle import frost_filter # noqa: F401
from eis_toolkit.raster_processing.filters.speckle import gamma_filter # noqa: F401
from eis_toolkit.raster_processing.filters.speckle import kuan_filter # noqa: F401
from eis_toolkit.raster_processing.filters.speckle import lee_additive_multiplicative_noise_filter # noqa: F401
from eis_toolkit.raster_processing.filters.speckle import lee_additive_noise_filter # noqa: F401
from eis_toolkit.raster_processing.filters.speckle import lee_enhanced_filter # noqa: F401
from eis_toolkit.raster_processing.filters.speckle import lee_multiplicative_noise_filter # noqa: F401
7 changes: 7 additions & 0 deletions eis_toolkit/transformations/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from eis_toolkit.transformations.binarize import binarize # noqa: F401
from eis_toolkit.transformations.clip import clip_transform # noqa: F401
from eis_toolkit.transformations.linear import min_max_scaling, z_score_normalization # noqa: F401
from eis_toolkit.transformations.logarithmic import log_transform # noqa: F401
from eis_toolkit.transformations.one_hot_encoding import one_hot_encode # noqa: F401
from eis_toolkit.transformations.sigmoid import sigmoid_transform # noqa: F401
from eis_toolkit.transformations.winsorize import winsorize # noqa: F401
5 changes: 5 additions & 0 deletions eis_toolkit/transformations/coda/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from eis_toolkit.transformations.coda.alr import alr_transform, inverse_alr # noqa: F401
from eis_toolkit.transformations.coda.clr import clr_transform, inverse_clr # noqa: F401
from eis_toolkit.transformations.coda.ilr import single_ilr_transform # noqa: F401
from eis_toolkit.transformations.coda.pairwise import pairwise_logratio, single_pairwise_logratio # noqa: F401
from eis_toolkit.transformations.coda.plr import plr_transform, single_plr_transform # noqa: F401
9 changes: 9 additions & 0 deletions eis_toolkit/vector_processing/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from eis_toolkit.vector_processing.calculate_geometry import calculate_geometry # noqa: F401
from eis_toolkit.vector_processing.cell_based_association import cell_based_association # noqa: F401
from eis_toolkit.vector_processing.distance_computation import distance_computation # noqa: F401
from eis_toolkit.vector_processing.extract_shared_lines import extract_shared_lines # noqa: F401
from eis_toolkit.vector_processing.idw_interpolation import idw # noqa: F401
from eis_toolkit.vector_processing.kriging_interpolation import kriging # noqa: F401
from eis_toolkit.vector_processing.rasterize_vector import rasterize_vector # noqa: F401
from eis_toolkit.vector_processing.reproject_vector import reproject_vector # noqa: F401
from eis_toolkit.vector_processing.vector_density import vector_density # noqa: F401
10 changes: 5 additions & 5 deletions tests/raster_processing/test_distance_to_anomaly.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
from beartype.roar import BeartypeCallHintParamViolation

from eis_toolkit.exceptions import EmptyDataException, InvalidParameterValueException
from eis_toolkit.raster_processing import distance_to_anomaly
from eis_toolkit.raster_processing import distance_to_anomaly, distance_to_anomaly_gdal
from tests.raster_processing.clip_test import raster_path as SMALL_RASTER_PATH

with rasterio.open(SMALL_RASTER_PATH) as raster:
Expand Down Expand Up @@ -89,7 +89,7 @@ def test_distance_to_anomaly_expected(

# No np.nan expected in input here
assert not np.any(np.isnan(anomaly_raster_data))
out_image, out_profile = distance_to_anomaly.distance_to_anomaly(
out_image, out_profile = distance_to_anomaly(
anomaly_raster_profile=anomaly_raster_profile,
anomaly_raster_data=anomaly_raster_data,
threshold_criteria_value=threshold_criteria_value,
Expand Down Expand Up @@ -141,7 +141,7 @@ def test_distance_to_anomaly_gdal(
"""Test distance_to_anomaly_gdal."""

output_path = tmp_path / "output.tif"
result = distance_to_anomaly.distance_to_anomaly_gdal(
result = distance_to_anomaly_gdal(
anomaly_raster_profile=anomaly_raster_profile,
anomaly_raster_data=anomaly_raster_data,
threshold_criteria_value=threshold_criteria_value,
Expand Down Expand Up @@ -251,7 +251,7 @@ def test_distance_to_anomaly_check(

anomaly_raster_profile_with_additions = {**anomaly_raster_profile, **profile_additions()}
with raises() as exc_info:
out_image, out_profile = distance_to_anomaly.distance_to_anomaly(
out_image, out_profile = distance_to_anomaly(
anomaly_raster_profile=anomaly_raster_profile_with_additions,
anomaly_raster_data=anomaly_raster_data,
threshold_criteria_value=threshold_criteria_value,
Expand Down Expand Up @@ -305,7 +305,7 @@ def test_distance_to_anomaly_nodata_handling(
anomaly_raster_data_with_nodata = np.where(anomaly_raster_data > nodata_mask_value, np.nan, anomaly_raster_data)
assert np.any(np.isnan(anomaly_raster_data_with_nodata))

out_image, out_profile = distance_to_anomaly.distance_to_anomaly(
out_image, out_profile = distance_to_anomaly(
anomaly_raster_profile=anomaly_raster_profile,
anomaly_raster_data=anomaly_raster_data_with_nodata,
threshold_criteria_value=threshold_criteria_value,
Expand Down
182 changes: 90 additions & 92 deletions tests/vector_processing/cell_based_association_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
import pytest
import rasterio

import eis_toolkit.vector_processing.cell_based_association as cba
from eis_toolkit.exceptions import EmptyDataFrameException, InvalidColumnException, InvalidParameterValueException
from eis_toolkit.vector_processing.cell_based_association import cell_based_association

with TemporaryDirectory() as tmp_dir:
output_file = Path(tmp_dir + "_cba_matrix")
Expand All @@ -25,93 +25,93 @@
lines_file = gpd.GeoDataFrame.from_file(lines_path)


def test_crs():
"""Test that Coordinate Systems for input dataset and output grids are equivalent."""
grid, cba_grid = cba._init_from_vector_data(
cell_size=4000, geodataframe=vector_file, column="Litho", subset_target_attribute_values=None
)
shp_cba_grid = cba._from_vector_file(matrix_path)
assert cba_grid.crs == shp_cba_grid.crs
assert cba_grid.crs == vector_file.crs


def test_gridding():
"""Test that cells indexing is coherent."""
grid, cba_grid = cba._init_from_vector_data(
cell_size=4000, geodataframe=vector_file, column="Litho", subset_target_attribute_values=None
)
shp_cba_grid = cba._from_vector_file(matrix_path)
assert (cba_grid.index == shp_cba_grid.index).all()


def test_code_envs():
"""Test that binary code produced are coherent."""
names = list(vector_file.Litho.unique())
grid, cba_grid = cba._init_from_vector_data(
cell_size=4000, geodataframe=vector_file, column="Litho", subset_target_attribute_values=None
)
shp_cba_grid = cba._from_vector_file(matrix_path)
assert (cba_grid[names] == shp_cba_grid[names]).all().all()


def test_add_points():
"""Test the add_layer() function for points vector file."""
grid, cba_grid = cba._init_from_vector_data(
cell_size=4000, geodataframe=vector_file, column="Litho", subset_target_attribute_values=None
)
cba_grid = cba._add_layer(
cba_grid,
grid,
geodataframe=points_file,
column="",
subset_target_attribute_values=None,
name="Occ",
buffer=False,
)
shp_cba_grid = cba._from_vector_file(matrix_path)
assert (cba_grid["Occ"] == shp_cba_grid["Occ"]).all()


def test_add_points_buffered():
"""Test the add_layer() function for points vector file with buffer option."""
grid, cba_grid = cba._init_from_vector_data(
cell_size=4000, geodataframe=vector_file, column="Litho", subset_target_attribute_values=None
)
cba_grid = cba._add_layer(
cba_grid,
grid,
geodataframe=points_file,
column="",
subset_target_attribute_values=None,
name="Occ",
buffer=4000,
)
shp_cba_grid = cba._from_vector_file(matrix_path)
assert (cba_grid["Occ"] == shp_cba_grid["Occ_B"]).all()


def test_add_lines():
"""Test the add_layer() function for mutltilines vector file."""
grid, cba_grid = cba._init_from_vector_data(
cell_size=4000, geodataframe=vector_file, column="Litho", subset_target_attribute_values=None
)
cba_grid = cba._add_layer(
cba_grid,
grid,
geodataframe=lines_file,
column="Type",
subset_target_attribute_values=["Thrust", "Normal"],
name=None,
buffer=False,
)
shp_cba_grid = cba._from_vector_file(matrix_path)
assert (cba_grid.Normal == shp_cba_grid.Normal).all()
assert (cba_grid.Thrust == shp_cba_grid.Thrust).all()
# def test_crs():
# """Test that Coordinate Systems for input dataset and output grids are equivalent."""
# grid, cba_grid = cba._init_from_vector_data(
# cell_size=4000, geodataframe=vector_file, column="Litho", subset_target_attribute_values=None
# )
# shp_cba_grid = cba._from_vector_file(matrix_path)
# assert cba_grid.crs == shp_cba_grid.crs
# assert cba_grid.crs == vector_file.crs


# def test_gridding():
# """Test that cells indexing is coherent."""
# grid, cba_grid = cba._init_from_vector_data(
# cell_size=4000, geodataframe=vector_file, column="Litho", subset_target_attribute_values=None
# )
# shp_cba_grid = cba._from_vector_file(matrix_path)
# assert (cba_grid.index == shp_cba_grid.index).all()


# def test_code_envs():
# """Test that binary code produced are coherent."""
# names = list(vector_file.Litho.unique())
# grid, cba_grid = cba._init_from_vector_data(
# cell_size=4000, geodataframe=vector_file, column="Litho", subset_target_attribute_values=None
# )
# shp_cba_grid = cba._from_vector_file(matrix_path)
# assert (cba_grid[names] == shp_cba_grid[names]).all().all()


# def test_add_points():
# """Test the add_layer() function for points vector file."""
# grid, cba_grid = cba._init_from_vector_data(
# cell_size=4000, geodataframe=vector_file, column="Litho", subset_target_attribute_values=None
# )
# cba_grid = cba._add_layer(
# cba_grid,
# grid,
# geodataframe=points_file,
# column="",
# subset_target_attribute_values=None,
# name="Occ",
# buffer=False,
# )
# shp_cba_grid = cba._from_vector_file(matrix_path)
# assert (cba_grid["Occ"] == shp_cba_grid["Occ"]).all()


# def test_add_points_buffered():
# """Test the add_layer() function for points vector file with buffer option."""
# grid, cba_grid = cba._init_from_vector_data(
# cell_size=4000, geodataframe=vector_file, column="Litho", subset_target_attribute_values=None
# )
# cba_grid = cba._add_layer(
# cba_grid,
# grid,
# geodataframe=points_file,
# column="",
# subset_target_attribute_values=None,
# name="Occ",
# buffer=4000,
# )
# shp_cba_grid = cba._from_vector_file(matrix_path)
# assert (cba_grid["Occ"] == shp_cba_grid["Occ_B"]).all()


# def test_add_lines():
# """Test the add_layer() function for mutltilines vector file."""
# grid, cba_grid = cba._init_from_vector_data(
# cell_size=4000, geodataframe=vector_file, column="Litho", subset_target_attribute_values=None
# )
# cba_grid = cba._add_layer(
# cba_grid,
# grid,
# geodataframe=lines_file,
# column="Type",
# subset_target_attribute_values=["Thrust", "Normal"],
# name=None,
# buffer=False,
# )
# shp_cba_grid = cba._from_vector_file(matrix_path)
# assert (cba_grid.Normal == shp_cba_grid.Normal).all()
# assert (cba_grid.Thrust == shp_cba_grid.Thrust).all()


def test_cba():
"""Test the cell_based_association() function to produce raster grid."""
cba.cell_based_association(
cell_based_association(
cell_size=5000,
geodata=[vector_file, points_file, points_file, lines_file, lines_file, lines_file],
output_path=str(output_file),
Expand All @@ -131,23 +131,21 @@ def test_empty_geodata():
"""Test that empty Geodataframe raises the correct exception."""
empty_gdf = gpd.GeoDataFrame()
with pytest.raises(EmptyDataFrameException):
cba.cell_based_association(cell_size=5000, geodata=[empty_gdf], output_path=str(output_file), column=["Litho"])
cell_based_association(cell_size=5000, geodata=[empty_gdf], output_path=str(output_file), column=["Litho"])


def test_invalid_cell_size():
"""Test that null and negative cell size raise the correct exception."""
with pytest.raises(InvalidParameterValueException):
cba.cell_based_association(
cell_size=-5000, geodata=[vector_file], output_path=str(output_file), column=["Litho"]
)
cell_based_association(cell_size=-5000, geodata=[vector_file], output_path=str(output_file), column=["Litho"])
with pytest.raises(InvalidParameterValueException):
cba.cell_based_association(cell_size=0, geodata=[vector_file], output_path=str(output_file), column=["Litho"])
cell_based_association(cell_size=0, geodata=[vector_file], output_path=str(output_file), column=["Litho"])


def test_invalid_buffer():
"""Test that negative buffer size raises the correct exception."""
with pytest.raises(InvalidParameterValueException):
cba.cell_based_association(
cell_based_association(
cell_size=5000,
geodata=[vector_file, points_file],
output_path=str(output_file),
Expand All @@ -159,15 +157,15 @@ def test_invalid_buffer():
def test_invalid_column():
"""Test that invalid column name raises the correct exception."""
with pytest.raises(InvalidColumnException):
cba.cell_based_association(
cell_based_association(
cell_size=5000, geodata=[vector_file], output_path=str(output_file), column=["RandomName"]
)


def test_invalid_subset():
"""Test that invalid subset of target attributes raises the correct exception."""
with pytest.raises(InvalidParameterValueException):
cba.cell_based_association(
cell_based_association(
cell_size=5000,
geodata=[vector_file, lines_file],
output_path=str(output_file),
Expand Down