doc: twister: add documentation for pytest plugin

Adding documentation for integration of twister with pytest plugin.

Signed-off-by: Maciej Perkowski <Maciej.Perkowski@nordicsemi.no>
diff --git a/doc/develop/test/index.rst b/doc/develop/test/index.rst
index 8d4b7aa..c8c67d2 100644
--- a/doc/develop/test/index.rst
+++ b/doc/develop/test/index.rst
@@ -8,6 +8,7 @@
 
    ztest
    twister
+   pytest
    coverage
    BabbleSim<bsim>
    ztest_deprecated
diff --git a/doc/develop/test/pytest.rst b/doc/develop/test/pytest.rst
new file mode 100644
index 0000000..8c6448b
--- /dev/null
+++ b/doc/develop/test/pytest.rst
@@ -0,0 +1,82 @@
+.. integration-with-pytest:
+
+Integration with pytest test framework
+######################################
+
+*Please mind that integration of twister with pytest is still work in progress. Not every platform
+type is supported in pytest (yet). If you find any issue with the integration or have an idea for
+an improvement, please, let us know about it and open a GitHub issue/enhancement.*
+
+Introduction
+************
+
+Pytest is a python framework that *“makes it easy to write small, readable tests, and can scale to
+support complex functional testing for applications and libraries”* (`<https://docs.pytest.org/en/7.3.x/>`_).
+Python is known for its free libraries and ease of using it for scripting. In addition, pytest
+utilizes the concept of plugins and fixtures, increasing its expendability and reusability.
+A pytest plugin `pytest-twister-harness` was introduced to provide an integration between pytest
+and twister, allowing Zephyr’s community to utilize pytest functionality with keeping twister as
+the main framework.
+
+Integration with twister
+************************
+
+By default, there is nothing to be done to enable pytest support in twister. The plugin is
+developed as a part of Zephyr’s tree. To enable install-less operation, twister first extends
+``PYTHONPATH`` with path to this plugin, and then during pytest call, it appends the command with
+``-p twister_harness.plugin`` argument. If one prefers to use the installed version of the plugin,
+they must add ``--allow-installed-plugin`` flag to twister’s call.
+
+Pytest-based test suites are discovered the same way as other twister tests, i.e., by a presence
+of testcase/sample.yaml. Inside, a keyword ``harness`` tells twister how to handle a given test.
+In the case of ``harness: pytest``, most of twister workflow (test suites discovery,
+parallelization, building and reporting) remains the same as for other harnesses. The change
+happens during the execution step. The below picture presents a simplified overview of the
+integration.
+
+.. figure:: twister_and_pytest.svg
+   :figclass: align-center
+
+
+If ``harness: pytest`` is used, twister delegates the test execution to pytest, by calling it as
+a subprocess. Required parameters (such as build directory, device to be used, etc.) are passed
+through a CLI command. When pytest is done, twister looks for a pytest report (results.xml) and
+sets the test result accordingly.
+
+How to create a pytest test
+***************************
+
+An example of a pytest test is given at :zephyr_file:`samples/subsys/testsuite/pytest/shell/pytest/test_shell.py`.
+Twister calls pytest for each configuration from the .yaml file which uses ``harness: pytest``.
+By default, it points to ``pytest`` directory, located next to a directory with binary sources.
+A keyword ``pytest_root`` placed under ``harness_config`` section can be used to point to another
+location.
+
+Pytest scans the given folder looking for tests, following its default
+`discovery rules <https://docs.pytest.org/en/7.1.x/explanation/goodpractices.html#conventions-for-python-test-discovery>`_
+One can also pass some extra arguments to the pytest from yaml file using ``pytest_args`` keyword
+under ``harness_config``, e.g.: ``pytest_args: [‘-k=test_method’, ‘--log-level=DEBUG’]``.
+
+Two imports are important to include in .py sources:
+
+.. code-block:: python
+
+   import pytest  # noqa # pylint: disable=unused-import
+   from pytest_twister_harness.device.device_abstract import DeviceAbstract
+
+The first enables pytest-twister-harness plugin indirectly, as it is added with pytest.
+It also gives access to ``dut`` fixture. The second is important for type checking and enabling
+IDE hints for duts. The ``dut`` fixture is the core of pytest harness plugin. When used as an
+argument of a test function it gives access to a DeviceAbstract type object. The fixture yields a
+device prepared according to the requested type (native posix, qemu, hardware, etc.). All types of
+devices share the same API. This allows for writing tests which are device-type-agnostic.
+
+
+Limitations
+***********
+
+* The whole pytest call is reported as one test in the final twister report (xml or json).
+* Device adapters in pytest plugin provide `iter_stdout` method to read from devices. In some
+  cases, it is not the most convenient way, and it will be considered how to improve this
+  (for example replace it with a simple read function with a given byte size and timeout arguments).
+* Not every platform type is supported in the plugin (yet).
diff --git a/doc/develop/test/twister_and_pytest.svg b/doc/develop/test/twister_and_pytest.svg
new file mode 100644
index 0000000..0bf0c28
--- /dev/null
+++ b/doc/develop/test/twister_and_pytest.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Do not edit this file with editors other than draw.io -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="761px" height="769px" viewBox="-0.5 -0.5 761 769" content="&lt;mxfile host=&quot;ac.draw.io&quot; modified=&quot;2023-05-24T14:31:30.050Z&quot; agent=&quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36&quot; etag=&quot;jHyxz68jLz__eLQuaXyV&quot; version=&quot;21.3.3&quot; type=&quot;embed&quot;&gt;&lt;diagram id=&quot;MvR7uPO9wD_Xc5WiqxJS&quot; name=&quot;Page-1&quot;&gt;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&lt;/diagram&gt;&lt;/mxfile&gt;"><defs/><g><rect x="0" y="180" width="760" height="330" fill="#eeeeee" stroke="#36393d" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 758px; height: 1px; padding-top: 187px; margin-left: 2px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Test execution</div></div></div></foreignObject><text x="2" y="199" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">Test execution</text></switch></g><rect x="0" y="0" width="760" height="140" fill="#e1d5e7" stroke="#9673a6" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 758px; height: 1px; padding-top: 7px; margin-left: 2px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Twister</div></div></div></foreignObject><text x="2" y="19" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">Twister</text></switch></g><rect x="40" y="40" width="120" height="60" fill="#b5739d" stroke="#9673a6" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 70px; margin-left: 41px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Collecting tests (basing on yaml files)</div></div></div></foreignObject><text x="100" y="74" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Collecting tests (ba...</text></switch></g><rect x="180" y="40" width="120" height="60" fill="#b5739d" stroke="#9673a6" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 70px; margin-left: 181px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Generation test configuration (test scenario + platform)</div></div></div></foreignObject><text x="240" y="74" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Generation test conf...</text></switch></g><rect x="320" y="40" width="120" height="60" fill="#b5739d" stroke="#9673a6" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 70px; margin-left: 321px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Applying filtration</div></div></div></foreignObject><text x="380" y="74" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Applying filtration</text></switch></g><rect x="460" y="40" width="120" height="60" fill="#b5739d" stroke="#9673a6" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 70px; margin-left: 461px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Spawn workers (parallelization)</div></div></div></foreignObject><text x="520" y="74" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Spawn workers (paral...</text></switch></g><rect x="600" y="40" width="120" height="60" fill="#b5739d" stroke="#9673a6" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 70px; margin-left: 601px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Building</div></div></div></foreignObject><text x="660" y="74" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Building</text></switch></g><path d="M 160 70 L 173.63 70" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 178.88 70 L 171.88 73.5 L 173.63 70 L 171.88 66.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 300 70 L 313.63 70" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 318.88 70 L 311.88 73.5 L 313.63 70 L 311.88 66.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 440 70 L 453.63 70" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 458.88 70 L 451.88 73.5 L 453.63 70 L 451.88 66.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 580 70 L 593.63 70" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 598.88 70 L 591.88 73.5 L 593.63 70 L 591.88 66.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 380 200 L 465 240 L 380 280 L 295 240 Z" fill="#b5739d" stroke="#9673a6" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 168px; height: 1px; padding-top: 240px; margin-left: 296px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Is pytest test?</div></div></div></foreignObject><text x="380" y="244" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Is pytest test?</text></switch></g><path d="M 660 100 L 660 160 L 380 160 L 380 193.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 380 198.88 L 376.5 191.88 L 380 193.63 L 383.5 191.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="60" y="300" width="260" height="180" fill="#d5e8d4" stroke="#82b366" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 258px; height: 1px; padding-top: 307px; margin-left: 61px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Run pytest with <b>pytest-twister-harness</b> plugin<br /><br /><div style="text-align: left;"><span style="background-color: initial;">Execute following actions in any order as many as needed:</span></div><div style="text-align: left;"><span style="background-color: initial;">1. Flash device(s)</span></div><div style="text-align: left;"><span style="background-color: initial;">2. Send something to device(s)</span></div><div style="text-align: left;"><span style="background-color: initial;">3. Parse and verify device(s) outputs</span></div><div style="text-align: left;"><span style="background-color: initial;">4. Perform any additional actions available from the Python level (like run MCUmgr, run external program/server/tool) </span></div></div></div></div></foreignObject><text x="190" y="319" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Run pytest with pytest-twister-harness plug...</text></switch></g><path d="M 295 240 L 190 240 L 190 293.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 190 298.88 L 186.5 291.88 L 190 293.63 L 193.5 291.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 240px; margin-left: 271px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">yes</div></div></div></foreignObject><text x="271" y="243" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">yes</text></switch></g><rect x="465" y="300" width="240" height="90" fill="#b5739d" stroke="#9673a6" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 307px; margin-left: 466px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Execute test directly in Twister with fixed ("classic") order:<br /><br />1. Flash device<br />2. Verify output</div></div></div></foreignObject><text x="585" y="319" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Execute test directly in Twister with fi...</text></switch></g><path d="M 465 240 L 585 240 L 585 293.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 585 298.88 L 581.5 291.88 L 585 293.63 L 588.5 291.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 240px; margin-left: 500px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">no</div></div></div></foreignObject><text x="500" y="243" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">no</text></switch></g><rect x="0" y="560" width="760" height="200" fill="#e1d5e7" stroke="#9673a6" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 758px; height: 1px; padding-top: 567px; margin-left: 2px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Twister</div></div></div></foreignObject><text x="2" y="579" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">Twister</text></switch></g><rect x="320" y="590" width="120" height="60" fill="#b5739d" stroke="#9673a6" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 620px; margin-left: 321px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Collect test results</div></div></div></foreignObject><text x="380" y="624" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Collect test results</text></switch></g><rect x="320" y="670" width="120" height="60" fill="#b5739d" stroke="#9673a6" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 700px; margin-left: 321px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Generate reports</div></div></div></foreignObject><text x="380" y="704" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Generate reports</text></switch></g><path d="M 190 480 L 190 530 L 380 530 L 380 583.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 380 588.88 L 376.5 581.88 L 380 583.63 L 383.5 581.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 585 390 L 585 530 L 380 530 L 380 583.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 380 588.88 L 376.5 581.88 L 380 583.63 L 383.5 581.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 380 650 L 380 663.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 380 668.88 L 376.5 661.88 L 380 663.63 L 383.5 661.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.drawio.com/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg>
\ No newline at end of file