Skip to content

Commit

Permalink
Merge pull request #3481 from chiamp:rst
Browse files Browse the repository at this point in the history
PiperOrigin-RevId: 582801007
  • Loading branch information
Flax Authors committed Nov 15, 2023
2 parents 646da5b + 81213ec commit 3c37eed
Showing 1 changed file with 28 additions and 28 deletions.
56 changes: 28 additions & 28 deletions docs/api_reference/flax.cursor.rst
Original file line number Diff line number Diff line change
Expand Up @@ -8,42 +8,42 @@ data structures, compared to making many nested ``dataclasses.replace`` calls.

To illustrate, consider the example below::

from flax.cursor import cursor
import dataclasses
from typing import Any
>>> from flax.cursor import cursor
>>> import dataclasses
>>> from typing import Any

@dataclasses.dataclass(frozen=True)
class A:
x: Any
>>> @dataclasses.dataclass(frozen=True)
>>> class A:
... x: Any

a = A(A(A(A(A(A(A(0)))))))
>>> a = A(A(A(A(A(A(A(0)))))))

To replace the int ``0`` using ``dataclasses.replace``, we would have to write many nested calls::

a2 = dataclasses.replace(
a,
x=dataclasses.replace(
a.x,
x=dataclasses.replace(
a.x.x,
x=dataclasses.replace(
a.x.x.x,
x=dataclasses.replace(
a.x.x.x.x,
x=dataclasses.replace(
a.x.x.x.x.x,
x=dataclasses.replace(a.x.x.x.x.x.x, x=1),
),
),
),
),
),
)
>>> a2 = dataclasses.replace(
... a,
... x=dataclasses.replace(
... a.x,
... x=dataclasses.replace(
... a.x.x,
... x=dataclasses.replace(
... a.x.x.x,
... x=dataclasses.replace(
... a.x.x.x.x,
... x=dataclasses.replace(
... a.x.x.x.x.x,
... x=dataclasses.replace(a.x.x.x.x.x.x, x=1),
... ),
... ),
... ),
... ),
... ),
... )

The equivalent can be achieved much more simply using the Cursor API::

a3 = cursor(a).x.x.x.x.x.x.x.set(1)
assert a2 == a3
>>> a3 = cursor(a).x.x.x.x.x.x.x.set(1)
>>> assert a2 == a3

The Cursor object keeps tracks of changes made to it and when ``.build`` is called,
generates a new object with the accumulated changes. Basic usage involves
Expand Down

0 comments on commit 3c37eed

Please sign in to comment.