# Polygraphy Python API Examples

This directory includes examples that use the Polygraphy Python API.
For examples of the command-line tools, see the [cli](../cli/) directory instead.

You may find it useful to read the [Python API Overview](../../polygraphy/) prior
to looking at the API examples.

## Generating Your Own Examples

In the event that the examples here do not cover a particular use-case, you can typically
use `polygraphy run` to fill the gap; `polygraphy run` is capable of dynamically generating
Python scripts that use the Polygraphy API that do exactly what the tool would otherwise do.

Thus, if `polygraphy run` includes functionality you need, but you cannot find a
corresponding API example, try running:
```bash
polygraphy run --gen - <options...>
```
The argument to `--gen` should be the name of the file in which to write the generated script.
The special value `-` corresponds to `stdout`.

For example, running:
```bash
polygraphy run --gen - model.onnx --trt --onnxrt
```
will display something like this on `stdout`:
```py
#!/usr/bin/env python3
# Template auto-generated by polygraphy [v0.31.0] on 01/01/20 at 10:10:10
# Generation Command: polygraphy run --gen - model.onnx --trt --onnxrt
# This script compares model.onnx between TensorRT and ONNX-Runtime

from polygraphy.logger import G_LOGGER

from polygraphy.backend.onnxrt import OnnxrtRunner, SessionFromOnnx
from polygraphy.backend.trt import EngineFromNetwork, NetworkFromOnnxPath, TrtRunner
from polygraphy.comparator import Comparator
import sys

# Loaders
parse_network_from_onnx = NetworkFromOnnxPath('model.onnx')
build_engine = EngineFromNetwork(parse_network_from_onnx)
build_onnxrt_session = SessionFromOnnx('model.onnx')

# Runners
runners = [
    TrtRunner(build_engine),
    OnnxrtRunner(build_onnxrt_session),
]

# Runner Execution
results = Comparator.run(runners)

success = True
# Accuracy Comparison
success &= bool(Comparator.compare_accuracy(results))

# Report Results
cmd_run = ' '.join(sys.argv)
if not success:
    G_LOGGER.critical(f"FAILED | Command: {cmd_run}"))
G_LOGGER.finish(f"PASSED | Command: {cmd_run}"))
```
