{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "c6e0d73b-d3f4-4787-9f15-f8084f6695c8",
   "metadata": {},
   "source": [
    "# Advanced User Guide\n",
    "\n",
    "These tutorials cover more advanced topics. This guide assumes that you have read the [Basic User Guide](../basic_user_guide/basic_user_guide.ipynb), and it builds from those basics to cover more complex topics that will let you get the most out of the framework. Within each section, the tutorials are designed to be read in order, but each section is self-contained enough that you can choose to read only the sections that are useful to you.\n",
    "\n",
    "\n",
    "## Models with Implicit Components\n",
    "\n",
    "- [Building Models with Solvers and Implicit Components](models_implicit_components/models_with_solvers_implicit.ipynb)\n",
    "- [Using BalanceComp to Create Implicit Relationships in Groups](models_implicit_components/implicit_with_balancecomp.ipynb)\n",
    "\n",
    "## Working with Partial Derivatives\n",
    "\n",
    "### Computing Partial Derivatives using JAX\n",
    "- [Overview](../features/experimental/jax_partial_derivs.ipynb)\n",
    "- [Computing Partial Derivatives of Explicit Components](../features/experimental/jax_explicitcomp_api.ipynb)\n",
    "- [Computing Partial Derivatives of Implicit Components](../features/experimental/jax_implicitcomp_api.ipynb)\n",
    "- [Composable functions](../features/building_blocks/jax_subpackage/jax_subpackage.ipynb)\n",
    "\n",
    "### Computing Partial Derivatives using Complex Step\n",
    "- [Using Complex Step to Compute Derivatives](complex_step.ipynb)\n",
    "\n",
    "### Analytic Partial Derivatives\n",
    "- [Defining Partial Derivatives on Explicit Components](analytic_derivatives/partial_derivs_explicit.ipynb)\n",
    "- [Defining Partial Derivatives on Implicit Components](analytic_derivatives/partial_derivs_implicit.ipynb)\n",
    "\n",
    "## Working with Total Derivatives\n",
    "\n",
    "- [Computing Total Derivatives of Coupled Models](analytic_derivatives/derivs_of_coupled_systems.ipynb)\n",
    "\n",
    "## Recording and Reading Data\n",
    "\n",
    "- [Advanced Recording Example](recording/advanced_case_recording.ipynb)\n",
    "\n",
    "## Using OpenMDAO as a Part of a Larger Process\n",
    "- [Cannonball Example with Euler Integration and an External Optimizer](example/euler_integration_example.ipynb)\n",
    "\n",
    "\n",
    "## Using AnalysisError\n",
    "- [Using AnalysisError to avoid a region in the solution space](analysis_errors/analysis_error.ipynb)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": "```{toctree}\n:hidden:\n\nmodels_implicit_components/models_with_solvers_implicit\nmodels_implicit_components/implicit_with_balancecomp\nanalytic_derivatives/derivs_of_coupled_systems\nanalytic_derivatives/partial_derivs_implicit\nanalytic_derivatives/partial_derivs_explicit\nrecording/advanced_case_recording\nexample/euler_integration_example\ncomplex_step\nanalysis_errors/analysis_error\n```"
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
