Skip to main content
Ctrl+K
  • Home
  • Get Started
  • Setting up your API key
  • Quickstart
  • Learn the Basics
  • Examples and Demos
  • Motivation
  • Related Work
  • Design
  • Contributing
  • Deep Dive
  • Glossary
  • FAQ
  • One liners
  • Functions
  • Data classes
  • Framework classes
  • Utils
  • Testing
  • Home

The Basics

  • Get Started
  • Setting up your API key
  • Quickstart

Demos

  • Learn the Basics
    • Transpiling Functions from PyTorch to TensorFlow
    • Transpiling Models from PyTorch to TensorFlow
    • Trace code
    • Lazy vs Eager
    • How to use decorators
  • Examples and Demos
    • Accelerating PyTorch models with JAX
    • Training PyTorch ResNet in your TensorFlow Projects
    • Image and Keypoints Augmentations using Kornia and Ivy’s Transpiler
    • Denoise image using Kornia and Ivy’s Transpiler

Background

  • Motivation
    • ML Explosion
    • Why Transpile?
  • Related Work
    • Comparing Ivy with ONNX
    • Graph Tracers
    • Frameworks

Contributors

  • Design
    • Building Blocks
    • Ivy as a Transpiler
  • Contributing
    • Setting Up
    • The Basics
    • Building the Docs
    • Deep Dive
    • Helpful Resources
    • Error Handling
  • Deep Dive
    • Navigating the Code
    • Function Types
    • Superset Behaviour
    • Backend Setting
    • Arrays
    • Containers
    • Data Types
    • Devices
    • Inplace Updates
    • Function Wrapping
    • Formatting
    • Ivy-Lint: Ivy’s Custom Code Formatters
    • Function Arguments
    • Docstrings
    • Docstring Examples
    • Array API Tests
    • Ivy Tests
    • Ivy Frontends
    • Ivy Frontend Tests
    • Exception Handling
    • Gradients
    • Operating Modes
    • Building the Docs Pipeline
    • Fix Failing Tests:
  • Glossary
  • FAQ

API Reference

  • One liners
    • ivy.trace_graph()
    • ivy.transpile()
  • Functions
    • Activations
      • gelu
      • hardswish
      • leaky_relu
      • log_softmax
      • mish
      • relu
      • sigmoid
      • softmax
      • softplus
      • softsign
    • Constants
    • Control flow ops
      • cmp_is
      • cmp_isnot
      • for_loop
      • if_else
      • try_except
      • while_loop
    • Creation
      • arange
      • array
      • asarray
      • complex
      • copy_array
      • empty
      • empty_like
      • eye
      • from_dlpack
      • frombuffer
      • full
      • full_like
      • linspace
      • logspace
      • meshgrid
      • native_array
      • one_hot
      • ones
      • ones_like
      • to_dlpack
      • tril
      • triu
      • triu_indices
      • zeros
      • zeros_like
    • Data type
      • as_ivy_dtype
      • as_native_dtype
      • astype
      • broadcast_arrays
      • broadcast_to
      • can_cast
      • check_float
      • closest_valid_dtype
      • default_complex_dtype
      • default_dtype
      • default_float_dtype
      • default_int_dtype
      • default_uint_dtype
      • dtype
      • dtype_bits
      • finfo
      • function_supported_dtypes
      • function_unsupported_dtypes
      • iinfo
      • infer_default_dtype
      • invalid_dtype
      • is_bool_dtype
      • is_complex_dtype
      • is_float_dtype
      • is_hashable_dtype
      • is_int_dtype
      • is_native_dtype
      • is_uint_dtype
      • promote_types
      • promote_types_of_inputs
      • result_type
      • set_default_complex_dtype
      • set_default_dtype
      • set_default_float_dtype
      • set_default_int_dtype
      • set_default_uint_dtype
      • type_promote_arrays
      • unset_default_complex_dtype
      • unset_default_dtype
      • unset_default_float_dtype
      • unset_default_int_dtype
      • unset_default_uint_dtype
      • valid_dtype
    • Device
      • as_ivy_dev
      • as_native_dev
      • clear_cached_mem_on_dev
      • default_device
      • dev
      • dev_util
      • function_supported_devices
      • function_unsupported_devices
      • get_all_ivy_arrays_on_dev
      • gpu_is_available
      • handle_soft_device_variable
      • num_cpu_cores
      • num_gpus
      • num_ivy_arrays_on_dev
      • percent_used_mem_on_dev
      • print_all_ivy_arrays_on_dev
      • set_default_device
      • set_soft_device_mode
      • set_split_factor
      • split_factor
      • split_func_call
      • to_device
      • total_mem_on_dev
      • tpu_is_available
      • unset_default_device
      • unset_soft_device_mode
      • used_mem_on_dev
    • Elementwise
      • abs
      • acos
      • acosh
      • add
      • angle
      • asin
      • asinh
      • atan
      • atan2
      • atanh
      • bitwise_and
      • bitwise_invert
      • bitwise_left_shift
      • bitwise_or
      • bitwise_right_shift
      • bitwise_xor
      • ceil
      • cos
      • cosh
      • deg2rad
      • divide
      • equal
      • erf
      • exp
      • exp2
      • expm1
      • floor
      • floor_divide
      • fmin
      • fmod
      • gcd
      • greater
      • greater_equal
      • imag
      • isfinite
      • isinf
      • isnan
      • isreal
      • lcm
      • less
      • less_equal
      • log
      • log10
      • log1p
      • log2
      • logaddexp
      • logaddexp2
      • logical_and
      • logical_not
      • logical_or
      • logical_xor
      • maximum
      • minimum
      • multiply
      • nan_to_num
      • negative
      • not_equal
      • positive
      • pow
      • rad2deg
      • real
      • reciprocal
      • remainder
      • round
      • sign
      • sin
      • sinh
      • sqrt
      • square
      • subtract
      • tan
      • tanh
      • trapz
      • trunc
      • trunc_divide
    • Experimental
      • Activations
        • celu
        • elu
        • hardshrink
        • hardsilu
        • hardtanh
        • logit
        • logsigmoid
        • prelu
        • relu6
        • scaled_tanh
        • selu
        • silu
        • softshrink
        • stanh
        • tanhshrink
        • threshold
        • thresholded_relu
      • Constants
      • Creation
        • blackman_window
        • eye_like
        • hamming_window
        • hann_window
        • indices
        • kaiser_bessel_derived_window
        • kaiser_window
        • mel_weight_matrix
        • ndenumerate
        • ndindex
        • polyval
        • random_cp
        • random_parafac2
        • random_tr
        • random_tt
        • random_tucker
        • tril_indices
        • trilu
        • unsorted_segment_mean
        • unsorted_segment_min
        • unsorted_segment_sum
        • vorbis_window
      • Data type
      • Device
      • Elementwise
        • allclose
        • amax
        • amin
        • binarizer
        • conj
        • copysign
        • count_nonzero
        • diff
        • digamma
        • erfc
        • erfinv
        • fix
        • float_power
        • fmax
        • frexp
        • gradient
        • hypot
        • isclose
        • ldexp
        • lerp
        • lgamma
        • modf
        • nansum
        • nextafter
        • signbit
        • sinc
        • sparsify_tensor
        • xlogy
        • zeta
      • General
        • reduce
      • Gradients
        • bind_custom_gradient_function
        • jvp
        • vjp
      • Layers
        • adaptive_avg_pool1d
        • adaptive_avg_pool2d
        • adaptive_max_pool2d
        • adaptive_max_pool3d
        • area_interpolate
        • avg_pool1d
        • avg_pool2d
        • avg_pool3d
        • dct
        • dft
        • dropout1d
        • dropout2d
        • dropout3d
        • embedding
        • fft
        • fft2
        • generate_einsum_equation
        • get_interpolate_kernel
        • idct
        • ifft
        • ifftn
        • interp
        • interpolate
        • max_pool1d
        • max_pool2d
        • max_pool3d
        • max_unpool1d
        • nearest_interpolate
        • pool
        • reduce_window
        • rfft
        • rfftn
        • rnn
        • sliding_window
        • stft
      • Linear algebra
        • adjoint
        • batched_outer
        • cond
        • diagflat
        • dot
        • eig
        • eigh_tridiagonal
        • eigvals
        • general_inner_product
        • higher_order_moment
        • initialize_tucker
        • khatri_rao
        • kron
        • kronecker
        • lu_factor
        • lu_solve
        • make_svd_non_negative
        • matrix_exp
        • mode_dot
        • multi_dot
        • multi_mode_dot
        • partial_tucker
        • solve_triangular
        • svd_flip
        • tensor_train
        • truncated_svd
        • tt_matrix_to_tensor
        • tucker
      • Losses
        • hinge_embedding_loss
        • huber_loss
        • kl_div
        • l1_loss
        • log_poisson_loss
        • poisson_nll_loss
        • smooth_l1_loss
        • soft_margin_loss
      • Manipulation
        • as_strided
        • associative_scan
        • atleast_1d
        • atleast_2d
        • atleast_3d
        • broadcast_shapes
        • check_scalar
        • choose
        • column_stack
        • concat_from_sequence
        • dsplit
        • dstack
        • expand
        • fill_diagonal
        • flatten
        • fliplr
        • flipud
        • fold
        • heaviside
        • hsplit
        • hstack
        • i0
        • matricize
        • moveaxis
        • pad
        • pad_sequence
        • partial_fold
        • partial_tensor_to_vec
        • partial_unfold
        • partial_vec_to_tensor
        • put_along_axis
        • rot90
        • soft_thresholding
        • take
        • take_along_axis
        • top_k
        • trim_zeros
        • unflatten
        • unfold
        • unique_consecutive
        • vsplit
        • vstack
      • Meta
      • Nest
      • Norms
        • batch_norm
        • group_norm
        • instance_norm
        • l1_normalize
        • l2_normalize
        • local_response_norm
        • lp_normalize
      • Random
        • bernoulli
        • beta
        • dirichlet
        • gamma
        • poisson
      • Searching
        • unravel_index
      • Set
      • Sorting
        • invert_permutation
        • lexsort
      • Sparse array
        • is_ivy_sparse_array
        • is_native_sparse_array
        • native_sparse_array
        • native_sparse_array_to_indices_values_and_shape
      • Statistical
        • bincount
        • corrcoef
        • cov
        • cummax
        • cummin
        • histogram
        • igamma
        • median
        • nanmean
        • nanmedian
        • nanmin
        • nanprod
        • quantile
      • Utility
        • optional_get_element
    • General
      • all_equal
      • arg_info
      • arg_names
      • array_equal
      • assert_supports_inplace
      • cache_fn
      • clip_matrix_norm
      • clip_vector_norm
      • container_types
      • current_backend_str
      • default
      • einops_rearrange
      • einops_reduce
      • einops_repeat
      • exists
      • fourier_encode
      • function_supported_devices_and_dtypes
      • function_unsupported_devices_and_dtypes
      • gather
      • gather_nd
      • get_all_arrays_in_memory
      • get_item
      • get_num_dims
      • get_referrers_recursive
      • has_nans
      • inplace_arrays_supported
      • inplace_decrement
      • inplace_increment
      • inplace_update
      • inplace_variables_supported
      • is_array
      • is_ivy_array
      • is_ivy_container
      • is_ivy_nested_array
      • is_native_array
      • isin
      • isscalar
      • itemsize
      • match_kwargs
      • multiprocessing
      • num_arrays_in_memory
      • print_all_arrays_in_memory
      • scatter_flat
      • scatter_nd
      • set_array_mode
      • set_exception_trace_mode
      • set_inplace_mode
      • set_item
      • set_min_base
      • set_min_denominator
      • set_nestable_mode
      • set_precise_mode
      • set_queue_timeout
      • set_shape_array_mode
      • set_show_func_wrapper_trace_mode
      • set_tmp_dir
      • shape
      • size
      • stable_divide
      • stable_pow
      • strides
      • supports_inplace_updates
      • to_ivy_shape
      • to_list
      • to_native_shape
      • to_numpy
      • to_scalar
      • try_else_none
      • unset_array_mode
      • unset_exception_trace_mode
      • unset_inplace_mode
      • unset_min_base
      • unset_min_denominator
      • unset_nestable_mode
      • unset_precise_mode
      • unset_queue_timeout
      • unset_shape_array_mode
      • unset_show_func_wrapper_trace_mode
      • unset_tmp_dir
      • value_is_nan
      • vmap
    • Gradients
      • adam_step
      • adam_update
      • execute_with_gradients
      • grad
      • gradient_descent_update
      • jac
      • lamb_update
      • lars_update
      • optimizer_update
      • requires_gradient
      • stop_gradient
      • value_and_grad
    • Layers
      • conv
      • conv1d
      • conv1d_transpose
      • conv2d
      • conv2d_transpose
      • conv3d
      • conv3d_transpose
      • conv_general_dilated
      • conv_general_transpose
      • depthwise_conv2d
      • dropout
      • linear
      • lstm
      • lstm_update
      • multi_head_attention
      • nms
      • roi_align
      • scaled_dot_product_attention
    • Linear algebra
      • cholesky
      • cross
      • det
      • diag
      • diagonal
      • eig
      • eigh
      • eigvalsh
      • inner
      • inv
      • matmul
      • matrix_norm
      • matrix_power
      • matrix_rank
      • matrix_transpose
      • outer
      • pinv
      • qr
      • slogdet
      • solve
      • svd
      • svdvals
      • tensordot
      • tensorsolve
      • trace
      • vander
      • vecdot
      • vector_norm
      • vector_to_skew_symmetric_matrix
    • Losses
      • binary_cross_entropy
      • cross_entropy
      • sparse_cross_entropy
      • ssim_loss
      • wasserstein_loss_discriminator
      • wasserstein_loss_generator
    • Manipulation
      • clip
      • concat
      • constant_pad
      • expand_dims
      • flip
      • permute_dims
      • repeat
      • reshape
      • roll
      • split
      • squeeze
      • stack
      • swapaxes
      • tile
      • unstack
      • zero_pad
    • Meta
      • fomaml_step
      • maml_step
      • reptile_step
    • Nest
      • all_nested_indices
      • copy_nest
      • duplicate_array_index_chains
      • index_nest
      • insert_into_nest_at_index
      • insert_into_nest_at_indices
      • map
      • map_nest_at_index
      • map_nest_at_indices
      • multi_index_nest
      • nested_any
      • nested_argwhere
      • nested_map
      • nested_multi_map
      • prune_empty
      • prune_nest_at_index
      • prune_nest_at_indices
      • set_nest_at_index
      • set_nest_at_indices
    • Norms
      • layer_norm
    • Random
      • multinomial
      • randint
      • random_normal
      • random_uniform
      • seed
      • shuffle
    • Searching
      • argmax
      • argmin
      • argwhere
      • nonzero
      • where
    • Set
      • unique_all
      • unique_counts
      • unique_inverse
      • unique_values
    • Sorting
      • argsort
      • msort
      • searchsorted
      • sort
    • Statistical
      • cumprod
      • cumsum
      • einsum
      • max
      • mean
      • min
      • prod
      • std
      • sum
      • var
    • Utility
      • all
      • any
      • load
      • save
  • Data classes
    • Array
      • Activations
      • Conversions
      • Creation
      • Data type
      • Device
      • Elementwise
      • Experimental
      • General
      • Gradients
      • Image
      • Layers
      • Linear algebra
      • Losses
      • Manipulation
      • Norms
      • Random
      • Searching
      • Set
      • Sorting
      • Statistical
      • Utility
      • Wrapping
    • Container
      • Activations
      • Base
      • Conversions
      • Creation
      • Data type
      • Device
      • Elementwise
      • Experimental
      • General
      • Gradients
      • Image
      • Layers
      • Linear algebra
      • Losses
      • Manipulation
      • Norms
      • Random
      • Searching
      • Set
      • Sorting
      • Statistical
      • Utility
      • Wrapping
    • Factorized tensor
      • Base
      • Cp tensor
      • Parafac2 tensor
      • Tr tensor
      • Tt tensor
      • Tucker tensor
    • Nested array
      • Base
      • Elementwise
  • Framework classes
    • Activations
    • Converters
    • Helpers
    • Initializers
    • Layers
    • Losses
    • Module
    • Norms
    • Optimizers
    • Sequential
    • Utilities
  • Utils
    • Assertions
    • Backend
      • Ast helpers
      • Handler
      • Sub backend handler
    • Binaries
    • Decorator utils
    • Dynamic import
    • Einsum parser
    • Einsum path helpers
    • Exceptions
    • Inspection
    • Logging
    • Profiler
  • Testing
    • Assertions
    • Available frameworks
    • Function testing
    • Globals
    • Hypothesis helpers
      • Array helpers
      • Dtype helpers
      • General helpers
      • Number helpers
    • Multiprocessing
    • Pipeline helper
    • Structs
    • Test parameter flags
    • Testing helpers
  • Deep Dive
  • Navigating the Code

Navigating the Code#

Categorization#

Ivy uses the following categories taken from the Array API Standard:

  • constants

  • creation

  • data_type

  • elementwise

  • linear_algebra

  • manipulation

  • searching

  • set

  • sorting

  • statistical

  • utility

In addition to these, we also add the following categories, used for additional functions in Ivy that are not in the Array API Standard:

  • activations

  • compilation

  • device

  • general

  • gradients

  • layers

  • losses

  • meta

  • nest

  • norms

  • random

Some functions that you’re considering adding might overlap several of these categorizations, and in such cases you should look at the other functions included in each file, and use your best judgement for which categorization is most suitable.

We can always suggest a more suitable location when reviewing your pull request if needed 🙂

Submodule Design#

Ivy is designed so that all methods are called directly from the ivy namespace, such as ivy.matmul(), and not ivy.some_namespace.matmul(). Therefore, inside any of the folders ivy.functional.ivy, ivy.functional.backends.some_backend, ivy.functional.backends.another_backend the functions can be moved to different files or folders without breaking anything at all. This makes it very simple to refactor and re-organize parts of the code structure in an ongoing manner.

The __init__.py inside each of the subfolders are very similar, importing each function via from .file_name import * and also importing each file as a submodule via from . import file_name. For example, an extract from ivy/ivy/functional/ivy/__init__.py is given below:

from . import elementwise
from .elementwise import *
from . import general
from .general import *
# etc.

Ivy API#

All function signatures for the Ivy API are defined in the ivy.functional.ivy submodule. Functions written here look something like the following, (explained in much more detail in the following sections):

def my_func(
    x: Union[ivy.Array, ivy.NativeArray],
    /,
    axes: Union[int, Sequence[int]],
    *,
    dtype: Optional[Union[ivy.Dtype, ivy.NativeDtype]] = None,
    device: Optional[Union[ivy.Device, ivy.NativeDevice]] = None,
    out: Optional[ivy.Array] = None
) -> ivy.Array:
    """
    Explanation of the function.

    .. note::
        This is an important note.

    **Special Cases**

    For this particular case,

    - If ``x`` is ``NaN``, do something
    - If ``y`` is ``-0``, do something else
    - etc.

    Parameters
    ----------
    x
        input array. Should have a numeric data type.
    axes
        the axes along which to perform the op.
    dtype
        array data type.
    device
        the device on which to place the new array.
    out
        optional output array, for writing the result to. It must have a shape that the
        inputs broadcast to.

    Returns
    -------
    ret
        an array.

    Examples
    --------

    Some examples go here
    """
    return ivy.current_backend(x).my_func(x, axes, dtype=dtype, device=device, out=out)

We follow the Array API Standard convention about positional and keyword arguments.

  • Positional parameters must be positional-only parameters. Positional-only parameters have no externally-usable name. When a method accepting positional-only parameters is called, positional arguments are mapped to these parameters based solely on their order.

  • Optional parameters must be keyword-only arguments.

This convention makes it easier for us to modify functions in the future. Keyword-only parameters will mandate the use of argument names when calling functions, and this will increase our flexibility for extending function behaviour in future releases without breaking forward compatibility. Similar arguments can be kept together in the argument list, rather than us needing to add these at the very end to ensure positional argument behaviour remains the same.

The dtype, device and out arguments are always keyword-only. Arrays always have a type hint Union[ivy.Array, ivy.NativeArray] in the input and ivy.Array in the output. All functions which produce a single array include the out argument. The reasons for each of these features are explained in the following sections.

Backend API#

Code in the backend submodules such as ivy.functional.backends.torch should then look something like:

def my_func(
    x: torch.Tensor,
    /,
    axes: Union[int, Sequence[int]],
    *,
    dtype: torch.dtype,
    device: torch.device,
    out: Optional[torch.Tensor] = None
) -> torch.Tensor:
    return torch.function_name(x, axes, dtype, device, out)

The dtype, device and out arguments are again all keyword-only, but dtype and device are now required arguments, rather than optional as they were in the Ivy API. All arrays also now have the same type hint torch.Tensor, rather than Union[ivy.Array, ivy.NativeArray] in the input and ivy.Array in the output. The backend methods also should not add a docstring. Again, the reasons for these features are explained in the following sections.

Submodule Helper Functions#

At times, helper functions specific to the submodule are required to:

  • keep the code clean and readable

  • be imported in their respective backend implementations

To have a better idea on this, let’s look at an example!

Helper in Ivy

# in ivy/utils/assertions.py
def check_fill_value_and_dtype_are_compatible(fill_value, dtype):
    if (
        not (
            (ivy.is_int_dtype(dtype) or ivy.is_uint_dtype(dtype))
            and isinstance(fill_value, int)
        )
        and not (
            ivy.is_complex_dtype(dtype) and isinstance(fill_value, (float, complex))
        )
        and not (
            ivy.is_float_dtype(dtype)
            and isinstance(fill_value, (float, np.float32))
            or isinstance(fill_value, bool)
        )
    ):
        raise ivy.utils.exceptions.IvyException(
            f"the fill_value: {fill_value} and data type: {dtype} are not compatible"
        )

In the full_like() function in creation.py, the types of fill_value and dtype has to be verified to avoid errors. This check has to be applied to all backends, which means the related code is common and identical. In this case, we can extract the code to be a helper function on its own, placed in its related submodule (creation.py here). In this example, the helper function is named as check_fill_value_and_dtype_are_compatible().

Then, we import this submodule-specific helper function to the respective backends, where examples for each backend is shown below.

Jax

# in ivy/functional/backends/jax/creation.py

def full_like(
    x: JaxArray,
    /,
    fill_value: Number,
    *,
    dtype: jnp.dtype,
    device: jaxlib.xla_extension.Device,
    out: Optional[JaxArray] = None,
) -> JaxArray:
    ivy.utils.assertions.check_fill_value_and_dtype_are_compatible(fill_value, dtype)
    return _to_device(
        jnp.full_like(x, fill_value, dtype=dtype),
        device=device,
    )

NumPy

# in ivy/functional/backends/numpy/creation.py

def full_like(
    x: np.ndarray,
    /,
    fill_value: Number,
    *,
    dtype: np.dtype,
    device: str,
    out: Optional[np.ndarray] = None,
) -> np.ndarray:
    ivy.utils.assertions.check_fill_value_and_dtype_are_compatible(fill_value, dtype)
    return _to_device(np.full_like(x, fill_value, dtype=dtype), device=device)

TensorFlow

# in ivy/functional/backends/tensorflow/creation.py

def full_like(
    x: Union[tf.Tensor, tf.Variable],
    /,
    fill_value: Number,
    *,
    dtype: tf.DType,
    device: str,
    out: Optional[Union[tf.Tensor, tf.Variable]] = None,
) -> Union[tf.Tensor, tf.Variable]:
    ivy.utils.assertions.check_fill_value_and_dtype_are_compatible(fill_value, dtype)
    with tf.device(device):
        return tf.experimental.numpy.full_like(x, fill_value, dtype=dtype)

Note

We shouldn’t be enabling numpy behaviour in tensorflow as it leads to issues with the bfloat16 datatype in tensorflow implementations

Torch

# in ivy/functional/backends/torch/creation.py

def full_like(
    x: torch.Tensor,
    /,
    fill_value: Number,
    *,
    dtype: torch.dtype,
    device: torch.device,
    out: Optional[torch.Tensor] = None,
) -> torch.Tensor:
    ivy.utils.assertions.check_fill_value_and_dtype_are_compatible(fill_value, dtype)
    return torch.full_like(x, fill_value, dtype=dtype, device=device)

Version Unpinning#

At any point in time, Ivy’s development will be predominantly focused around the latest pypi version (and all prior versions) for each of the backend frameworks.

Earlier we had our versions pinned for each framework to provide stability but later concluded that by unpinnning the versions we would be able to account for the latest breaking changes if any and support the latest version of the framework. Any prior version’s compatibility would be tested by our multiversion testing pipeline, thus keeping us ahead and in light of the latest changes.

This helps to prevent our work from culminating over a fixed version while strides are being made in the said frameworks. Multiversion testing ensures the backward compatibility of the code while this approach ensures we support the latest changes too.

Round Up

This should have hopefully given you a good feel for how to navigate the Ivy codebase.

If you have any questions, please feel free to reach out on discord in the navigating the code thread!

previous

Deep Dive

next

Function Types

On this page
  • Categorization
  • Submodule Design
  • Ivy API
  • Backend API
  • Submodule Helper Functions
  • Version Unpinning

© Copyright 2024 [Ivy], All rights reserved.

Created using Sphinx 7.2.5.

Built with the PyData Sphinx Theme 0.15.2.