{ "cells": [ { "cell_type": "markdown", "id": "personalized-composer", "metadata": {}, "source": [ "## Numba Function - Running a Compiled C Callback Function \n", "This tutorial shows how to run custom operations written as Numba JIT-compiled functions.\n", "\n", "The operator translates the user-defined function into a compiled function callable from external C code, eliminating the Python interpreter overhead.\n", "\n", "Let's start by importing DALI and a handful of utilities." ] }, { "cell_type": "code", "execution_count": 1, "id": "fluid-unemployment", "metadata": {}, "outputs": [], "source": [ "from nvidia.dali import pipeline_def\n", "import nvidia.dali as dali\n", "import nvidia.dali.fn as fn\n", "from nvidia.dali.plugin.numba.fn.experimental import numba_function\n", "import nvidia.dali.types as dali_types\n", "\n", "image_dir = \"../data/images\"\n", "max_batch_size = 8" ] }, { "cell_type": "markdown", "id": "certain-secondary", "metadata": {}, "source": [ "As an example, we'll write a pipeline which rotates images by 90 degrees. Since the output shape will be different than the input shape, we need to implement a setup function as well. In the setup function, we define the output data shapes in terms of the input shapes. Note that the setup function is invoked once for the whole batch. If the setup function is not provided, the operator assumes that the types and shapes of the outputs are the same as in the inputs.\n", "\n", "#### Define the shape function swapping the width and height" ] }, { "cell_type": "markdown", "id": "1d899067", "metadata": {}, "source": [ "