# Copyright 2024 The etils Authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """Common lazy imports. Usage: ```python from etils.ecolab.lazy_imports import * ``` To get the list of available modules: ```python lazy_imports.__all__ # List of modules aliases lazy_imports.LAZY_MODULES # Mapping : ``` """ from __future__ import annotations from etils.ecolab import lazy_utils def __dir__() -> list[str]: # pylint: disable=invalid-name """`lazy_imports` public API. Because `globals()` contains hundreds of symbols, we overwrite `dir(module)` to avoid poluting the namespace during auto-completion. Returns: public symbols """ # If modifying this, also update the `lazy_imports/__init__.py`` return [ '__all__', 'LAZY_MODULES', 'print_current_imports', ] def print_current_imports() -> None: """Display the active lazy imports. This can be used before publishing a colab. To convert lazy imports into explicit imports. For convenience, `from etils.ecolab import lazy_imports` is excluded from the current imports. """ print(lazy_utils.current_import_statements(LAZY_MODULES)) _builder = lazy_utils.LazyImportsBuilder(globals()) with _builder.replace_imports(is_std=True): # pylint: disable=g-import-not-at-top,unused-import,reimported import abc import argparse import ast import asyncio import base64 import builtins import collections import colorsys import copy import concurrent.futures import contextlib import contextvars import csv import dataclasses import datetime import difflib import dis import enum import functools import gc import gzip import html import inspect import io import importlib import IPython import itertools import json import logging import math import multiprocessing import os import pathlib import pdb import pickle import pprint import queue import random import re import shutil import stat import string import subprocess import sys import tarfile import textwrap import threading import time import timeit import tomllib # pytype: disable=import-error import traceback import typing # Note we do not import `Any`, `TypeVar`,... import types import urllib import uuid from unittest import mock import warnings import weakref import zipfile # pylint: enable=g-import-not-at-top,unused-import,reimported with _builder.replace_imports(is_std=False): # pylint: disable=g-import-not-at-top,unused-import,reimported # pytype: disable=import-error # ====== Etils ====== from etils import array_types from etils import ecolab from etils import edc from etils import enp from etils import epath from etils import epy from etils import etqdm from etils import etree from etils import exm from etils import g3_utils from etils.ecolab import lazy_imports # ====== Common third party ====== from absl import app from absl import flags import apache_beam as beam import chex import dataclass_array as dca import einops import flask import flax from flax import linen as nn import functorch import gin import grain.python as grain import graphviz import imageio # Even though `import ipywidgets as widgets` is the common alias, widgets # is likely too ambiguous. import ipywidgets import jax from jax import numpy as jnp import jaxtyping import lark import matplotlib import matplotlib as mpl # Standard alias from matplotlib import pyplot as plt import mediapy as media import ml_collections import networkx as nx import numpy as np import optax import orbax from orbax import checkpoint as ocp from orbax import export as oex import pandas as pd import PIL from PIL import Image # Common alias import pycolmap import scipy import seaborn as sns import sklearn import tensorflow as tf import tensorflow.experimental.numpy as tnp import tensorflow_datasets as tfds import torch # from torch import nn # Collision with flax.linen import torchtext import torchvision import tqdm # tqdm import also trigger additional imports. # TODO(epot): Currently pylance might not infer `tqdm.auto` match # `import tqdm.auto` # Could try to explicitly import inside a `if typing.TYPE_CHECKING:` tqdm.auto # pylint: disable=pointless-statement tqdm.notebook # pylint: disable=pointless-statement import tree import typeguard import typing_extensions import plotly from plotly import express as px from plotly import graph_objects as go from pydantic import v1 as pydantic import requests import sunds import visu3d as v3d from xmanager.contrib import flow as xmflow from xmanager import xm # pytype: enable=import-error # pylint: enable=g-import-not-at-top,unused-import,reimported # Sort the lazy modules per their LAZY_MODULES: dict[str, lazy_utils.LazyModule] = dict( sorted( _builder.lazy_modules.items(), key=lambda x: x[1]._etils_state.module_name, # pylint: disable=protected-access ) ) __all__ = sorted(LAZY_MODULES) # Sorted per alias