Deep Dive#

For general users of the framework, who are mainly concerned with learning how to use Ivy, then the Design section is the best place to start 🙂

This deep dive section is more targeted at people who would like to dive deeper into how Ivy actually works under the hood 🔧

Going through the sections outlined below will get you right into the weeds of the framework 🌱, and hopefully give you a better understanding of what is actually going on behind the scenes 🎬

It’s best to go through the sub-sections from start to finish, but you can also dive in at any stage! We’re excited for you to get involved! 🦾

A quick tour through the codebase

Primary, compositional, mixed, and nestable functions

Ivy goes for the superset when unifying the backend functions

How the backend is set, and what this means for each function type️

(e) Arrays 🔢
Different types of arrays, and how they’re handled

(f) Containers 🗂
What the ivy.Container does

(g) Data Types 💾
How functions infer the correct data type

(h) Devices 📱
How functions infer the correct device

How the out argument is used to specify the output target

How functions are dynamically wrapped at runtime

(k) Formatting 📋
How the code is automatically formatted

(l) Ivy Lint 🧹
Ivy’s Custom Code Formatters

How to add the correct function arguments

(n) Docstrings 📄
How to properly write docstrings

How to add useful examples to the docstrings

How we’re borrowing the test suite from the Array API Standard

(q) Ivy Tests 🧪
How to add new tests for each Ivy function

How to implement frontend functions

How to add new tests for each frontend function

How to handle exceptions and assertions in a function

Ivy Tests running on the Repository

(v) Gradients 🔁
Everything about our Gradients API

Everything about modes Ivy can operate in, along with their purposes

How are we building our docs