Metadata-Version: 2.4
Name: fastcore
Version: 2.1.13
Summary: Python supercharged for fastai development
Author-email: Jeremy Howard and Sylvain Gugger <infos@fast.ai>
License: Apache-2.0
Project-URL: Repository, https://github.com/AnswerDotAI/fastcore/
Project-URL: Documentation, https://fastcore.fast.ai/
Keywords: python
Classifier: Natural Language :: English
Classifier: Intended Audience :: Developers
Classifier: Development Status :: 5 - Production/Stable
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Provides-Extra: dev
Requires-Dist: numpy; extra == "dev"
Requires-Dist: nbdev>=3.3.2; extra == "dev"
Requires-Dist: matplotlib; extra == "dev"
Requires-Dist: pillow; extra == "dev"
Requires-Dist: torch; extra == "dev"
Requires-Dist: pandas; extra == "dev"
Requires-Dist: nbclassic; extra == "dev"
Requires-Dist: pysym2md>=0.0.6; extra == "dev"
Requires-Dist: llms-txt; extra == "dev"
Requires-Dist: plum-dispatch; extra == "dev"
Requires-Dist: toolslm; extra == "dev"
Requires-Dist: remold; extra == "dev"
Dynamic: license-file

# Welcome to fastcore


<!-- WARNING: THIS FILE WAS AUTOGENERATED! DO NOT EDIT! -->

> [!NOTE]
>
> ### fastcore v2
>
> In July 2026 we released fastcore v2, which removes or relocates a number of APIs that had accumulated better alternatives. If you use `from fastcore.utils import *` (or `fastcore.all`), most of these changes won’t affect you. The breaking changes: `Param` is gone from `fastcore.script`; use plain type annotations with docments, or `typing.Annotated[type, "help"]`, optionally with a `dict` of argparse arguments for advanced features. [`L`](https://fastcore.fast.ai/foundation.html#l)’s `starmap`, `starfilter`, and the other `star*`/`rstar*` methods are replaced by the [`star`](https://fastcore.fast.ai/foundation.html#star) and [`rstar`](https://fastcore.fast.ai/foundation.html#rstar) function adapters, which compose with every [`L`](https://fastcore.fast.ai/foundation.html#l) method (e.g. `t.map(star(f))`); relatedly, `spread` is replaced by [`star`](https://fastcore.fast.ai/foundation.html#star), and `dspread` is renamed to [`dstar`](https://fastcore.fast.ai/basics.html#dstar). Async helpers now live in the new `fastcore.aio` module: [`run_sync`](https://fastcore.fast.ai/aio.html#run_sync), [`iter_sync`](https://fastcore.fast.ai/aio.html#iter_sync), and [`ctx_sync`](https://fastcore.fast.ai/aio.html#ctx_sync) moved there from `net`, and [`maybe_await`](https://fastcore.fast.ai/aio.html#maybe_await), [`then`](https://fastcore.fast.ai/aio.html#then), [`mapa`](https://fastcore.fast.ai/aio.html#mapa), [`acache`](https://fastcore.fast.ai/aio.html#acache), [`reawaitable`](https://fastcore.fast.ai/aio.html#reawaitable), [`is_async_callable`](https://fastcore.fast.ai/aio.html#is_async_callable), and the other async utilities moved there from `xtras`. [`Config`](https://fastcore.fast.ai/xtras.html#config) and the config file functions moved from `foundation` to `xtras`. `fastcore.net` lost its request builders (`urlrequest`, `urlsend`, `do_request`, `urlcheck`) and `clean_type_str` is gone. `parallel_gen` is removed; the stdlib [`ProcessPoolExecutor`](https://fastcore.fast.ai/parallel.html#processpoolexecutor) `initializer` pattern replaces it (fastai’s `parallel_tokenize` shows the recipe). Python 3.11 or later is now required. If you need the old APIs, pin `fastcore<2`.

Python is a powerful, dynamic language. Rather than bake everything into the language, it lets the programmer customize it to make it work for them. `fastcore` uses this flexibility to add to Python features inspired by other languages we’ve loved, mixins from Ruby, and currying, binding, and more from Haskell. It also adds some “missing features” and cleans up some rough edges in the Python standard library, such as simplifying parallel processing, and bringing ideas from NumPy over to Python’s `list` type.

Here are some tips on using fastcore:

- **Liberal imports**: Use `from fastcore.module import *` freely. The library is designed for safe wildcard imports.
- **Enhanced list operations**: Substitute `list` with [`L`](https://fastcore.fast.ai/foundation.html#l). This provides advanced indexing, method chaining, and additional functionality while maintaining list-like behavior.
- **Extend existing classes**: Apply the `@patch` decorator to add methods to classes, including built-ins, without subclassing.
- **Streamline class initialization**: In `__init__` methods, use [`store_attr()`](https://fastcore.fast.ai/basics.html#store_attr) to efficiently set multiple attributes, reducing repetitive assignment code.
- **Explicit keyword arguments**: Apply the [`delegates`](https://fastcore.fast.ai/meta.html#delegates) decorator to functions to replace `**kwargs` with specific parameters, enhancing IDE support and documentation.
- **Optimize parallel execution**: Use fastcore’s enhanced [`ThreadPoolExecutor`](https://fastcore.fast.ai/parallel.html#threadpoolexecutor) and [`ProcessPoolExecutor`](https://fastcore.fast.ai/parallel.html#processpoolexecutor) for simplified concurrent processing.
- **Expressive testing**: Prefer fastcore’s testing functions like [`test_eq`](https://fastcore.fast.ai/test.html#test_eq), [`test_ne`](https://fastcore.fast.ai/test.html#test_ne), [`test_close`](https://fastcore.fast.ai/test.html#test_close) for more readable and informative test assertions.
- **Advanced file operations**: Use the extended `Path` class, which adds methods like `ls()`, `read_json()`, and others to [`pathlib.Path`](https://docs.python.org/3/library/pathlib.html#pathlib.Path).
- **Flexible data structures**: Convert between dictionaries and attribute-access objects using [`dict2obj`](https://fastcore.fast.ai/xtras.html#dict2obj) and [`obj2dict`](https://fastcore.fast.ai/xtras.html#obj2dict) for more intuitive data handling.
- **Functional programming paradigms**: Use tools like [`compose`](https://fastcore.fast.ai/basics.html#compose), [`maps`](https://fastcore.fast.ai/basics.html#maps), and [`filter_ex`](https://fastcore.fast.ai/basics.html#filter_ex) to write more functional-style Python code.
- **Documentation**: Use [`docments`](https://fastcore.fast.ai/docments.html#docments) where possible to document parameters of functions and methods.
- **Time-aware caching**: Apply the [`timed_cache`](https://fastcore.fast.ai/xtras.html#timed_cache) decorator to add time-based expiration to the standard `lru_cache` functionality.
- **Simplified CLI creation**: Use `fastcore.script` to easily transform Python functions into command-line interfaces.

For example, [`L`](https://fastcore.fast.ai/foundation.html#l) is a drop-in replacement for `list` with extra superpowers:

``` python
x = L(1,2,3,4)
test_eq(x[[0,3]], [1,4])               # index with a collection
test_eq(x.map(lambda o:o*2), [2,4,6,8])
test_eq(x.filter(lambda o:o>2), [3,4])
x += [5]
test_eq(x.unique(), [1,2,3,4,5])
```

## Tutorials

- [Quick tour](https://fastcore.fast.ai/tour.html.md): A quick tour of a few highlights from fastcore.
- [fastcore: an underrated Python library](https://gist.githubusercontent.com/hamelsmu/ea9e0519d9a94a4203bcc36043eb01c5/raw/6c0c96a2823d67aecc103206d6ab21c05dcd520a/fastcore:_an_underrated_python_library.md): A tour of some of the features of fastcore.
- [API list](https://fastcore.fast.ai/apilist.txt): A succinct list of all functions and methods in fastcore.

## Getting started

To install fastcore run: `conda install fastcore -c fastai` (if you use Anaconda, which we recommend) or `pip install fastcore`. For an [editable install](https://stackoverflow.com/questions/35064426/when-would-the-e-editable-option-be-useful-with-pip-install), clone this repo and run: `pip install -e ".[dev]"`. fastcore is tested to work on Ubuntu, macOS and Windows (versions tested are those shown with the `-latest` suffix [here](https://docs.github.com/en/actions/reference/specifications-for-github-hosted-runners#supported-runners-and-hardware-resources)).

`fastcore` contains many features, including:

- `fastcore.test`: Simple testing functions
- `fastcore.foundation`: Mixins, delegation, composition, and more
- `fastcore.xtras`: Utility functions to help with functional-style programming, parallel processing, and more

To get started, we recommend you read through [the fastcore tour](https://fastcore.fast.ai/tour.html).

## Contributing

After you clone this repository, please run `nbdev_install_hooks` in your terminal. This sets up git hooks, which clean up the notebooks to remove the extraneous stuff stored in the notebooks (e.g. which cells you ran) which causes unnecessary merge conflicts.

To run the tests in parallel, launch `nbdev_test`.

Before submitting a PR, check that the local library and notebooks match.

- If you made a change to the notebooks in one of the exported cells, you can export it to the library with `nbdev_prepare`.
- If you made a change to the library, you can export it back to the notebooks with `nbdev_update`.
