Added Python interface for Arm Ethos-U NPU driver library.

Python `ethosu_driver` could be built as part of Arm Ethos-U Linux
driver library CMake flow.

See driver_library/python/README.md for more details.

Change-Id: I177a890add5c13df9a839f4f43621f972afe5ab1
Signed-off-by: Kshitij Sisodia <kshitij.sisodia@arm.com>
diff --git a/driver_library/python/test/test_capabilities.py b/driver_library/python/test/test_capabilities.py
new file mode 100644
index 0000000..ffb201c
--- /dev/null
+++ b/driver_library/python/test/test_capabilities.py
@@ -0,0 +1,73 @@
+#
+# SPDX-FileCopyrightText: Copyright 2021-2022 Arm Limited and/or its affiliates <open-source-office@arm.com>
+# SPDX-License-Identifier: Apache-2.0
+#
+from ethosu_driver._generated.driver import SemanticVersion
+from ethosu_driver._generated.driver import HardwareId
+from ethosu_driver._generated.driver import HardwareConfiguration
+from ethosu_driver._generated.driver import Capabilities
+
+
+def check_semantic_version(ma, mi, pa, sv):
+    assert ma == sv.major
+    assert mi == sv.minor
+    assert pa == sv.patch
+
+
+def test_semantic_version():
+    sv = SemanticVersion(1, 2, 3)
+    assert '{ major=1, minor=2, patch=3 }' == sv.__str__()
+    check_semantic_version(1, 2, 3, sv)
+
+
+def test_hardware_id():
+    version = SemanticVersion(1, 2, 3)
+    product = SemanticVersion(4, 5, 6)
+    architecture = SemanticVersion(7, 8, 9)
+    hw_id = HardwareId(1, version, product, architecture)
+
+    assert 1 == hw_id.versionStatus
+
+    check_semantic_version(1, 2, 3, hw_id.version)
+    check_semantic_version(4, 5, 6, hw_id.product)
+    check_semantic_version(7, 8, 9, hw_id.architecture)
+
+    assert '{versionStatus=1, version={ major=1, minor=2, patch=3 }, product={ major=4, minor=5, patch=6 }, ' \
+           'architecture={ major=7, minor=8, patch=9 }}' == hw_id.__str__()
+
+
+def test_hw_configuration():
+    hw_cfg = HardwareConfiguration(128, 1, True)
+
+    assert 1 == hw_cfg.cmdStreamVersion
+    assert 128 == hw_cfg.macsPerClockCycle
+    assert hw_cfg.customDma
+
+    assert "{macsPerClockCycle=128, cmdStreamVersion=1, customDma=True}" == hw_cfg.__str__()
+
+
+def test_capabilities():
+    version = SemanticVersion(100, 200, 300)
+    product = SemanticVersion(400, 500, 600)
+    architecture = SemanticVersion(700, 800, 900)
+    hw_id = HardwareId(1, version, product, architecture)
+    hw_cfg = HardwareConfiguration(256, 1000, False)
+    driver_v = SemanticVersion(10, 20, 30)
+
+    cap = Capabilities(hw_id, hw_cfg, driver_v)
+
+    check_semantic_version(10, 20, 30, cap.driver)
+
+    check_semantic_version(100, 200, 300, cap.hwId.version)
+    check_semantic_version(400, 500, 600, cap.hwId.product)
+    check_semantic_version(700, 800, 900, cap.hwId.architecture)
+
+    assert 1000 == cap.hwCfg.cmdStreamVersion
+    assert 256 == cap.hwCfg.macsPerClockCycle
+    assert not cap.hwCfg.customDma
+
+    assert '{hwId={versionStatus=1, version={ major=100, minor=200, patch=300 }, ' \
+           'product={ major=400, minor=500, patch=600 }, ' \
+           'architecture={ major=700, minor=800, patch=900 }}, ' \
+           'hwCfg={macsPerClockCycle=256, cmdStreamVersion=1000, customDma=False}, ' \
+           'driver={ major=10, minor=20, patch=30 }}' == cap.__str__()