earthengine-api/python/ee/tests/confusionmatrix_test.py
Google Earth Engine Authors e9cc3423fb v0.1.403
PiperOrigin-RevId: 632474175
2024-05-15 17:59:00 +00:00

216 lines
7.3 KiB
Python

#!/usr/bin/env python3
"""Tests for the ee.ConfusionMatrix module."""
import json
from typing import Any, Dict
import unittest
import ee
from ee import apitestcase
MATRIX = {
'functionInvocationValue': {
'functionName': 'ConfusionMatrix',
'arguments': {
'array': {
'functionInvocationValue': {
'functionName': 'Array',
'arguments': {'values': {'constantValue': [[1]]}},
}
},
'order': {'constantValue': [2]},
},
}
}
def make_expression_graph(
function_invocation_value: Dict[str, Any],
) -> Dict[str, Any]:
return {
'result': '0',
'values': {'0': {'functionInvocationValue': function_invocation_value}},
}
class ConfusionMatrixTest(apitestcase.ApiTestCase):
def test_init(self):
array = ee.Array([[0, 0], [0, 0]])
order = ee.List([2, 1])
confusion_matrix = ee.ConfusionMatrix(array, order)
self.assertEqual({'value': 'fakeValue'}, confusion_matrix.getInfo())
func = ee.ApiFunction.lookup('ConfusionMatrix')
self.assertEqual(func, confusion_matrix.func)
self.assertFalse(confusion_matrix.isVariable())
self.assertEqual({'array': array, 'order': order}, confusion_matrix.args)
def test_init_order_literal(self):
array = ee.Array([[0, 0], [0, 0]])
order = [2, 1]
confusion_matrix = ee.ConfusionMatrix(array, order)
self.assertEqual({'value': 'fakeValue'}, confusion_matrix.getInfo())
func = ee.ApiFunction.lookup('ConfusionMatrix')
self.assertEqual(func, confusion_matrix.func)
self.assertFalse(confusion_matrix.isVariable())
self.assertEqual(
{'array': array, 'order': ee.List(order)}, confusion_matrix.args
)
def test_init_no_order(self):
array = ee.Array([[0, 0], [0, 0]])
confusion_matrix = ee.ConfusionMatrix(array, None)
self.assertEqual({'value': 'fakeValue'}, confusion_matrix.getInfo())
func = ee.ApiFunction.lookup('ConfusionMatrix')
self.assertEqual(func, confusion_matrix.func)
self.assertFalse(confusion_matrix.isVariable())
self.assertEqual({'array': array}, confusion_matrix.args)
def test_serialize(self):
confusion_matrix = ee.ConfusionMatrix(ee.Array([[0, 0], [0, 0]]), [1, 2])
result = json.loads(confusion_matrix.serialize())
expected = {
'result': '0',
'values': {
'1': {'constantValue': [0, 0]},
'0': {
'functionInvocationValue': {
'functionName': 'ConfusionMatrix',
'arguments': {
'array': {
'functionInvocationValue': {
'functionName': 'Array',
'arguments': {
'values': {
'arrayValue': {
'values': [
{'valueReference': '1'},
{'valueReference': '1'},
]
}
}
},
}
},
'order': {'constantValue': [1, 2]},
},
}
},
},
}
self.assertEqual(expected, result)
def test_cast(self):
array = ee.Array([[0, 0], [0, 0]])
order = ee.List([2, 1])
confusion_matrix = ee.ConfusionMatrix(array, order)
result = json.loads(ee.ConfusionMatrix(confusion_matrix).serialize())
expect = {
'result': '0',
'values': {
'1': {'constantValue': [0, 0]},
'0': {
'functionInvocationValue': {
'functionName': 'ConfusionMatrix',
'arguments': {
'array': {
'functionInvocationValue': {
'functionName': 'Array',
'arguments': {
'values': {
'arrayValue': {
'values': [
{'valueReference': '1'},
{'valueReference': '1'},
]
}
}
},
}
},
'order': {'constantValue': [2, 1]},
},
}
},
},
}
self.assertEqual(expect, result)
def test_accuracy(self):
expect = make_expression_graph({
'arguments': {'confusionMatrix': MATRIX},
'functionName': 'ConfusionMatrix.accuracy',
})
expression = ee.ConfusionMatrix(ee.Array([[1]]), [2]).accuracy()
result = json.loads(expression.serialize())
self.assertEqual(expect, result)
def test_array(self):
expect = make_expression_graph({
'arguments': {'confusionMatrix': MATRIX},
'functionName': 'ConfusionMatrix.array',
})
expression = ee.ConfusionMatrix(ee.Array([[1]]), [2]).array()
result = json.loads(expression.serialize())
self.assertEqual(expect, result)
def test_consumersAccuracy(self):
expect = make_expression_graph({
'arguments': {'confusionMatrix': MATRIX},
'functionName': 'ConfusionMatrix.consumersAccuracy',
})
expression = ee.ConfusionMatrix(ee.Array([[1]]), [2]).consumersAccuracy()
result = json.loads(expression.serialize())
self.assertEqual(expect, result)
def test_fscore(self):
expect = make_expression_graph({
'arguments': {
'confusionMatrix': MATRIX,
'beta': {'constantValue': 3},
},
'functionName': 'ConfusionMatrix.fscore',
})
expression = ee.ConfusionMatrix(ee.Array([[1]]), [2]).fscore(3)
result = json.loads(expression.serialize())
self.assertEqual(expect, result)
expression = ee.ConfusionMatrix(ee.Array([[1]]), [2]).fscore(beta=3)
result = json.loads(expression.serialize())
self.assertEqual(expect, result)
def test_kappa(self):
expect = make_expression_graph({
'arguments': {'confusionMatrix': MATRIX},
'functionName': 'ConfusionMatrix.kappa',
})
expression = ee.ConfusionMatrix(ee.Array([[1]]), [2]).kappa()
result = json.loads(expression.serialize())
self.assertEqual(expect, result)
def test_order(self):
expect = make_expression_graph({
'arguments': {'confusionMatrix': MATRIX},
'functionName': 'ConfusionMatrix.order',
})
expression = ee.ConfusionMatrix(ee.Array([[1]]), [2]).order()
result = json.loads(expression.serialize())
self.assertEqual(expect, result)
def test_producersAccuracy(self):
expect = make_expression_graph({
'arguments': {'confusionMatrix': MATRIX},
'functionName': 'ConfusionMatrix.producersAccuracy',
})
expression = ee.ConfusionMatrix(ee.Array([[1]]), [2]).producersAccuracy()
result = json.loads(expression.serialize())
self.assertEqual(expect, result)
if __name__ == '__main__':
unittest.main()