warp-lang 1.4.0__py3-none-manylinux2014_x86_64.whl → 1.4.2__py3-none-manylinux2014_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
warp/sparse.py CHANGED
@@ -106,7 +106,7 @@ class BsrMatrix(Generic[_BlockType]):
106
106
  return
107
107
 
108
108
  BsrMatrix.__setattr__(
109
- self, "_nnz_buf", wp.zeros(dtype=int, shape=(1,), device="cpu", pinned=self.device.is_cuda)
109
+ self, "_nnz_buf", wp.empty(dtype=int, shape=(1,), device="cpu", pinned=self.device.is_cuda)
110
110
  )
111
111
  if self.device.is_cuda:
112
112
  BsrMatrix.__setattr__(self, "_nnz_event", wp.Event(self.device))
@@ -524,7 +524,7 @@ def _bsr_assign_split_blocks(
524
524
  if dest_block >= dest_offsets[dest_row_count]:
525
525
  return
526
526
 
527
- dest_row = wp.lower_bound(dest_offsets, dest_block + 1) - 1
527
+ dest_row = wp.lower_bound(dest_offsets, 0, dest_row_count + 1, dest_block + 1) - 1
528
528
  src_row = dest_row // row_factor
529
529
 
530
530
  dest_col_in_row = dest_block - dest_offsets[dest_row]
@@ -566,7 +566,7 @@ def _bsr_assign_merge_row_col(
566
566
  dest_rows[block] = -1 # invalid
567
567
  dest_cols[block] = -1
568
568
  else:
569
- row = wp.lower_bound(src_offsets, block + 1) - 1
569
+ row = wp.lower_bound(src_offsets, 0, src_row_count + 1, block + 1) - 1
570
570
  dest_rows[block] = row // row_factor
571
571
  dest_cols[block] = src_columns[block] // col_factor
572
572
 
@@ -589,7 +589,7 @@ def _bsr_assign_merge_blocks(
589
589
  if src_block >= src_offsets[src_row_count]:
590
590
  return
591
591
 
592
- src_row = wp.lower_bound(src_offsets, src_block + 1) - 1
592
+ src_row = wp.lower_bound(src_offsets, 0, src_row_count + 1, src_block + 1) - 1
593
593
  src_col = src_columns[src_block]
594
594
 
595
595
  dest_row = src_row // row_factor
@@ -828,7 +828,7 @@ def bsr_copy(
828
828
  block_type=block_type,
829
829
  device=A.device,
830
830
  )
831
- bsr_assign(dest=copy, src=A)
831
+ bsr_assign(dest=copy, src=A, structure_only=structure_only)
832
832
  return copy
833
833
 
834
834
 
@@ -1190,7 +1190,7 @@ def _bsr_get_block_row(dest_offset: int, row_count: int, bsr_offsets: wp.array(d
1190
1190
  if i >= bsr_offsets[row_count]:
1191
1191
  rows[dest_offset + i] = -1 # invalid
1192
1192
  else:
1193
- row = wp.lower_bound(bsr_offsets, i + 1) - 1
1193
+ row = wp.lower_bound(bsr_offsets, 0, row_count + 1, i + 1) - 1
1194
1194
  rows[dest_offset + i] = row
1195
1195
 
1196
1196
 
@@ -1461,13 +1461,14 @@ def _bsr_mm_compute_values(
1461
1461
  y_offsets: wp.array(dtype=int),
1462
1462
  y_columns: wp.array(dtype=int),
1463
1463
  y_values: wp.array(dtype=Any),
1464
+ mm_row_count: int,
1464
1465
  mm_offsets: wp.array(dtype=int),
1465
1466
  mm_cols: wp.array(dtype=int),
1466
1467
  mm_values: wp.array(dtype=Any),
1467
1468
  ):
1468
1469
  mm_block = wp.tid()
1469
1470
 
1470
- row = wp.lower_bound(mm_offsets, mm_block + 1) - 1
1471
+ row = wp.lower_bound(mm_offsets, 0, mm_row_count + 1, mm_block + 1) - 1
1471
1472
  col = mm_cols[mm_block]
1472
1473
 
1473
1474
  mm_val = mm_values.dtype(type(alpha)(0.0))
@@ -1759,6 +1760,7 @@ def bsr_mm(
1759
1760
  work_arrays._old_z_offsets if y == z else y.offsets,
1760
1761
  work_arrays._old_z_columns if y == z else y.columns,
1761
1762
  work_arrays._old_z_values if y == z else y.values,
1763
+ z.nrow,
1762
1764
  z.offsets,
1763
1765
  z.columns,
1764
1766
  mm_values,
warp/stubs.py CHANGED
@@ -785,7 +785,8 @@ def transform_point(mat: Matrix[4, 4, Float], point: Vector[3, Float]) -> Vector
785
785
  """Apply the transform to a point ``point`` treating the homogeneous coordinate as w=1.
786
786
 
787
787
  The transformation is applied treating ``point`` as a column vector, e.g.: ``y = mat*point``.
788
- Note this is in contrast to some libraries, notably USD, which applies transforms to row vectors, ``y^T = point^T*mat^T``.
788
+
789
+ This is in contrast to some libraries, notably USD, which applies transforms to row vectors, ``y^T = point^T*mat^T``.
789
790
  If the transform is coming from a library that uses row-vectors, then users should transpose the transformation
790
791
  matrix before calling this method.
791
792
  """
@@ -802,8 +803,9 @@ def transform_vector(xform: Transformation[Float], vec: Vector[3, Float]) -> Vec
802
803
  def transform_vector(mat: Matrix[4, 4, Float], vec: Vector[3, Float]) -> Vector[3, Float]:
803
804
  """Apply the transform to a vector ``vec`` treating the homogeneous coordinate as w=0.
804
805
 
805
- The transformation is applied treating ``vec`` as a column vector, e.g.: ``y = mat*vec``
806
- note this is in contrast to some libraries, notably USD, which applies transforms to row vectors, ``y^T = vec^T*mat^T``.
806
+ The transformation is applied treating ``vec`` as a column vector, e.g.: ``y = mat*vec``.
807
+
808
+ This is in contrast to some libraries, notably USD, which applies transforms to row vectors, ``y^T = vec^T*mat^T``.
807
809
  If the transform is coming from a library that uses row-vectors, then users should transpose the transformation
808
810
  matrix before calling this method.
809
811
  """
@@ -1638,361 +1640,361 @@ def select(arr: Array[Any], value_if_false: Any, value_if_true: Any) -> Any:
1638
1640
 
1639
1641
 
1640
1642
  @over
1641
- def atomic_add(arr: Array[Any], i: int32, value: Any) -> Any:
1643
+ def atomic_add(arr: Array[Any], i: Int, value: Any) -> Any:
1642
1644
  """Atomically add ``value`` onto ``arr[i]`` and return the old value."""
1643
1645
  ...
1644
1646
 
1645
1647
 
1646
1648
  @over
1647
- def atomic_add(arr: Array[Any], i: int32, j: int32, value: Any) -> Any:
1649
+ def atomic_add(arr: Array[Any], i: Int, j: Int, value: Any) -> Any:
1648
1650
  """Atomically add ``value`` onto ``arr[i,j]`` and return the old value."""
1649
1651
  ...
1650
1652
 
1651
1653
 
1652
1654
  @over
1653
- def atomic_add(arr: Array[Any], i: int32, j: int32, k: int32, value: Any) -> Any:
1655
+ def atomic_add(arr: Array[Any], i: Int, j: Int, k: Int, value: Any) -> Any:
1654
1656
  """Atomically add ``value`` onto ``arr[i,j,k]`` and return the old value."""
1655
1657
  ...
1656
1658
 
1657
1659
 
1658
1660
  @over
1659
- def atomic_add(arr: Array[Any], i: int32, j: int32, k: int32, l: int32, value: Any) -> Any:
1661
+ def atomic_add(arr: Array[Any], i: Int, j: Int, k: Int, l: Int, value: Any) -> Any:
1660
1662
  """Atomically add ``value`` onto ``arr[i,j,k,l]`` and return the old value."""
1661
1663
  ...
1662
1664
 
1663
1665
 
1664
1666
  @over
1665
- def atomic_add(arr: FabricArray[Any], i: int32, value: Any) -> Any:
1667
+ def atomic_add(arr: FabricArray[Any], i: Int, value: Any) -> Any:
1666
1668
  """Atomically add ``value`` onto ``arr[i]`` and return the old value."""
1667
1669
  ...
1668
1670
 
1669
1671
 
1670
1672
  @over
1671
- def atomic_add(arr: FabricArray[Any], i: int32, j: int32, value: Any) -> Any:
1673
+ def atomic_add(arr: FabricArray[Any], i: Int, j: Int, value: Any) -> Any:
1672
1674
  """Atomically add ``value`` onto ``arr[i,j]`` and return the old value."""
1673
1675
  ...
1674
1676
 
1675
1677
 
1676
1678
  @over
1677
- def atomic_add(arr: FabricArray[Any], i: int32, j: int32, k: int32, value: Any) -> Any:
1679
+ def atomic_add(arr: FabricArray[Any], i: Int, j: Int, k: Int, value: Any) -> Any:
1678
1680
  """Atomically add ``value`` onto ``arr[i,j,k]`` and return the old value."""
1679
1681
  ...
1680
1682
 
1681
1683
 
1682
1684
  @over
1683
- def atomic_add(arr: FabricArray[Any], i: int32, j: int32, k: int32, l: int32, value: Any) -> Any:
1685
+ def atomic_add(arr: FabricArray[Any], i: Int, j: Int, k: Int, l: Int, value: Any) -> Any:
1684
1686
  """Atomically add ``value`` onto ``arr[i,j,k,l]`` and return the old value."""
1685
1687
  ...
1686
1688
 
1687
1689
 
1688
1690
  @over
1689
- def atomic_add(arr: IndexedFabricArray[Any], i: int32, value: Any) -> Any:
1691
+ def atomic_add(arr: IndexedFabricArray[Any], i: Int, value: Any) -> Any:
1690
1692
  """Atomically add ``value`` onto ``arr[i]`` and return the old value."""
1691
1693
  ...
1692
1694
 
1693
1695
 
1694
1696
  @over
1695
- def atomic_add(arr: IndexedFabricArray[Any], i: int32, j: int32, value: Any) -> Any:
1697
+ def atomic_add(arr: IndexedFabricArray[Any], i: Int, j: Int, value: Any) -> Any:
1696
1698
  """Atomically add ``value`` onto ``arr[i,j]`` and return the old value."""
1697
1699
  ...
1698
1700
 
1699
1701
 
1700
1702
  @over
1701
- def atomic_add(arr: IndexedFabricArray[Any], i: int32, j: int32, k: int32, value: Any) -> Any:
1703
+ def atomic_add(arr: IndexedFabricArray[Any], i: Int, j: Int, k: Int, value: Any) -> Any:
1702
1704
  """Atomically add ``value`` onto ``arr[i,j,k]`` and return the old value."""
1703
1705
  ...
1704
1706
 
1705
1707
 
1706
1708
  @over
1707
- def atomic_add(arr: IndexedFabricArray[Any], i: int32, j: int32, k: int32, l: int32, value: Any) -> Any:
1709
+ def atomic_add(arr: IndexedFabricArray[Any], i: Int, j: Int, k: Int, l: Int, value: Any) -> Any:
1708
1710
  """Atomically add ``value`` onto ``arr[i,j,k,l]`` and return the old value."""
1709
1711
  ...
1710
1712
 
1711
1713
 
1712
1714
  @over
1713
- def atomic_sub(arr: Array[Any], i: int32, value: Any) -> Any:
1715
+ def atomic_sub(arr: Array[Any], i: Int, value: Any) -> Any:
1714
1716
  """Atomically subtract ``value`` onto ``arr[i]`` and return the old value."""
1715
1717
  ...
1716
1718
 
1717
1719
 
1718
1720
  @over
1719
- def atomic_sub(arr: Array[Any], i: int32, j: int32, value: Any) -> Any:
1721
+ def atomic_sub(arr: Array[Any], i: Int, j: Int, value: Any) -> Any:
1720
1722
  """Atomically subtract ``value`` onto ``arr[i,j]`` and return the old value."""
1721
1723
  ...
1722
1724
 
1723
1725
 
1724
1726
  @over
1725
- def atomic_sub(arr: Array[Any], i: int32, j: int32, k: int32, value: Any) -> Any:
1727
+ def atomic_sub(arr: Array[Any], i: Int, j: Int, k: Int, value: Any) -> Any:
1726
1728
  """Atomically subtract ``value`` onto ``arr[i,j,k]`` and return the old value."""
1727
1729
  ...
1728
1730
 
1729
1731
 
1730
1732
  @over
1731
- def atomic_sub(arr: Array[Any], i: int32, j: int32, k: int32, l: int32, value: Any) -> Any:
1733
+ def atomic_sub(arr: Array[Any], i: Int, j: Int, k: Int, l: Int, value: Any) -> Any:
1732
1734
  """Atomically subtract ``value`` onto ``arr[i,j,k,l]`` and return the old value."""
1733
1735
  ...
1734
1736
 
1735
1737
 
1736
1738
  @over
1737
- def atomic_sub(arr: FabricArray[Any], i: int32, value: Any) -> Any:
1739
+ def atomic_sub(arr: FabricArray[Any], i: Int, value: Any) -> Any:
1738
1740
  """Atomically subtract ``value`` onto ``arr[i]`` and return the old value."""
1739
1741
  ...
1740
1742
 
1741
1743
 
1742
1744
  @over
1743
- def atomic_sub(arr: FabricArray[Any], i: int32, j: int32, value: Any) -> Any:
1745
+ def atomic_sub(arr: FabricArray[Any], i: Int, j: Int, value: Any) -> Any:
1744
1746
  """Atomically subtract ``value`` onto ``arr[i,j]`` and return the old value."""
1745
1747
  ...
1746
1748
 
1747
1749
 
1748
1750
  @over
1749
- def atomic_sub(arr: FabricArray[Any], i: int32, j: int32, k: int32, value: Any) -> Any:
1751
+ def atomic_sub(arr: FabricArray[Any], i: Int, j: Int, k: Int, value: Any) -> Any:
1750
1752
  """Atomically subtract ``value`` onto ``arr[i,j,k]`` and return the old value."""
1751
1753
  ...
1752
1754
 
1753
1755
 
1754
1756
  @over
1755
- def atomic_sub(arr: FabricArray[Any], i: int32, j: int32, k: int32, l: int32, value: Any) -> Any:
1757
+ def atomic_sub(arr: FabricArray[Any], i: Int, j: Int, k: Int, l: Int, value: Any) -> Any:
1756
1758
  """Atomically subtract ``value`` onto ``arr[i,j,k,l]`` and return the old value."""
1757
1759
  ...
1758
1760
 
1759
1761
 
1760
1762
  @over
1761
- def atomic_sub(arr: IndexedFabricArray[Any], i: int32, value: Any) -> Any:
1763
+ def atomic_sub(arr: IndexedFabricArray[Any], i: Int, value: Any) -> Any:
1762
1764
  """Atomically subtract ``value`` onto ``arr[i]`` and return the old value."""
1763
1765
  ...
1764
1766
 
1765
1767
 
1766
1768
  @over
1767
- def atomic_sub(arr: IndexedFabricArray[Any], i: int32, j: int32, value: Any) -> Any:
1769
+ def atomic_sub(arr: IndexedFabricArray[Any], i: Int, j: Int, value: Any) -> Any:
1768
1770
  """Atomically subtract ``value`` onto ``arr[i,j]`` and return the old value."""
1769
1771
  ...
1770
1772
 
1771
1773
 
1772
1774
  @over
1773
- def atomic_sub(arr: IndexedFabricArray[Any], i: int32, j: int32, k: int32, value: Any) -> Any:
1775
+ def atomic_sub(arr: IndexedFabricArray[Any], i: Int, j: Int, k: Int, value: Any) -> Any:
1774
1776
  """Atomically subtract ``value`` onto ``arr[i,j,k]`` and return the old value."""
1775
1777
  ...
1776
1778
 
1777
1779
 
1778
1780
  @over
1779
- def atomic_sub(arr: IndexedFabricArray[Any], i: int32, j: int32, k: int32, l: int32, value: Any) -> Any:
1781
+ def atomic_sub(arr: IndexedFabricArray[Any], i: Int, j: Int, k: Int, l: Int, value: Any) -> Any:
1780
1782
  """Atomically subtract ``value`` onto ``arr[i,j,k,l]`` and return the old value."""
1781
1783
  ...
1782
1784
 
1783
1785
 
1784
1786
  @over
1785
- def atomic_min(arr: Array[Any], i: int32, value: Any) -> Any:
1787
+ def atomic_min(arr: Array[Any], i: Int, value: Any) -> Any:
1786
1788
  """Compute the minimum of ``value`` and ``arr[i]``, atomically update the array, and return the old value.
1787
1789
 
1788
- .. note:: The operation is only atomic on a per-component basis for vectors and matrices.
1790
+ The operation is only atomic on a per-component basis for vectors and matrices.
1789
1791
  """
1790
1792
  ...
1791
1793
 
1792
1794
 
1793
1795
  @over
1794
- def atomic_min(arr: Array[Any], i: int32, j: int32, value: Any) -> Any:
1796
+ def atomic_min(arr: Array[Any], i: Int, j: Int, value: Any) -> Any:
1795
1797
  """Compute the minimum of ``value`` and ``arr[i,j]``, atomically update the array, and return the old value.
1796
1798
 
1797
- .. note:: The operation is only atomic on a per-component basis for vectors and matrices.
1799
+ The operation is only atomic on a per-component basis for vectors and matrices.
1798
1800
  """
1799
1801
  ...
1800
1802
 
1801
1803
 
1802
1804
  @over
1803
- def atomic_min(arr: Array[Any], i: int32, j: int32, k: int32, value: Any) -> Any:
1805
+ def atomic_min(arr: Array[Any], i: Int, j: Int, k: Int, value: Any) -> Any:
1804
1806
  """Compute the minimum of ``value`` and ``arr[i,j,k]``, atomically update the array, and return the old value.
1805
1807
 
1806
- .. note:: The operation is only atomic on a per-component basis for vectors and matrices.
1808
+ The operation is only atomic on a per-component basis for vectors and matrices.
1807
1809
  """
1808
1810
  ...
1809
1811
 
1810
1812
 
1811
1813
  @over
1812
- def atomic_min(arr: Array[Any], i: int32, j: int32, k: int32, l: int32, value: Any) -> Any:
1814
+ def atomic_min(arr: Array[Any], i: Int, j: Int, k: Int, l: Int, value: Any) -> Any:
1813
1815
  """Compute the minimum of ``value`` and ``arr[i,j,k,l]``, atomically update the array, and return the old value.
1814
1816
 
1815
- .. note:: The operation is only atomic on a per-component basis for vectors and matrices.
1817
+ The operation is only atomic on a per-component basis for vectors and matrices.
1816
1818
  """
1817
1819
  ...
1818
1820
 
1819
1821
 
1820
1822
  @over
1821
- def atomic_min(arr: FabricArray[Any], i: int32, value: Any) -> Any:
1823
+ def atomic_min(arr: FabricArray[Any], i: Int, value: Any) -> Any:
1822
1824
  """Compute the minimum of ``value`` and ``arr[i]``, atomically update the array, and return the old value.
1823
1825
 
1824
- .. note:: The operation is only atomic on a per-component basis for vectors and matrices.
1826
+ The operation is only atomic on a per-component basis for vectors and matrices.
1825
1827
  """
1826
1828
  ...
1827
1829
 
1828
1830
 
1829
1831
  @over
1830
- def atomic_min(arr: FabricArray[Any], i: int32, j: int32, value: Any) -> Any:
1832
+ def atomic_min(arr: FabricArray[Any], i: Int, j: Int, value: Any) -> Any:
1831
1833
  """Compute the minimum of ``value`` and ``arr[i,j]``, atomically update the array, and return the old value.
1832
1834
 
1833
- .. note:: The operation is only atomic on a per-component basis for vectors and matrices.
1835
+ The operation is only atomic on a per-component basis for vectors and matrices.
1834
1836
  """
1835
1837
  ...
1836
1838
 
1837
1839
 
1838
1840
  @over
1839
- def atomic_min(arr: FabricArray[Any], i: int32, j: int32, k: int32, value: Any) -> Any:
1841
+ def atomic_min(arr: FabricArray[Any], i: Int, j: Int, k: Int, value: Any) -> Any:
1840
1842
  """Compute the minimum of ``value`` and ``arr[i,j,k]``, atomically update the array, and return the old value.
1841
1843
 
1842
- .. note:: The operation is only atomic on a per-component basis for vectors and matrices.
1844
+ The operation is only atomic on a per-component basis for vectors and matrices.
1843
1845
  """
1844
1846
  ...
1845
1847
 
1846
1848
 
1847
1849
  @over
1848
- def atomic_min(arr: FabricArray[Any], i: int32, j: int32, k: int32, l: int32, value: Any) -> Any:
1850
+ def atomic_min(arr: FabricArray[Any], i: Int, j: Int, k: Int, l: Int, value: Any) -> Any:
1849
1851
  """Compute the minimum of ``value`` and ``arr[i,j,k,l]``, atomically update the array, and return the old value.
1850
1852
 
1851
- .. note:: The operation is only atomic on a per-component basis for vectors and matrices.
1853
+ The operation is only atomic on a per-component basis for vectors and matrices.
1852
1854
  """
1853
1855
  ...
1854
1856
 
1855
1857
 
1856
1858
  @over
1857
- def atomic_min(arr: IndexedFabricArray[Any], i: int32, value: Any) -> Any:
1859
+ def atomic_min(arr: IndexedFabricArray[Any], i: Int, value: Any) -> Any:
1858
1860
  """Compute the minimum of ``value`` and ``arr[i]``, atomically update the array, and return the old value.
1859
1861
 
1860
- .. note:: The operation is only atomic on a per-component basis for vectors and matrices.
1862
+ The operation is only atomic on a per-component basis for vectors and matrices.
1861
1863
  """
1862
1864
  ...
1863
1865
 
1864
1866
 
1865
1867
  @over
1866
- def atomic_min(arr: IndexedFabricArray[Any], i: int32, j: int32, value: Any) -> Any:
1868
+ def atomic_min(arr: IndexedFabricArray[Any], i: Int, j: Int, value: Any) -> Any:
1867
1869
  """Compute the minimum of ``value`` and ``arr[i,j]``, atomically update the array, and return the old value.
1868
1870
 
1869
- .. note:: The operation is only atomic on a per-component basis for vectors and matrices.
1871
+ The operation is only atomic on a per-component basis for vectors and matrices.
1870
1872
  """
1871
1873
  ...
1872
1874
 
1873
1875
 
1874
1876
  @over
1875
- def atomic_min(arr: IndexedFabricArray[Any], i: int32, j: int32, k: int32, value: Any) -> Any:
1877
+ def atomic_min(arr: IndexedFabricArray[Any], i: Int, j: Int, k: Int, value: Any) -> Any:
1876
1878
  """Compute the minimum of ``value`` and ``arr[i,j,k]``, atomically update the array, and return the old value.
1877
1879
 
1878
- .. note:: The operation is only atomic on a per-component basis for vectors and matrices.
1880
+ The operation is only atomic on a per-component basis for vectors and matrices.
1879
1881
  """
1880
1882
  ...
1881
1883
 
1882
1884
 
1883
1885
  @over
1884
- def atomic_min(arr: IndexedFabricArray[Any], i: int32, j: int32, k: int32, l: int32, value: Any) -> Any:
1886
+ def atomic_min(arr: IndexedFabricArray[Any], i: Int, j: Int, k: Int, l: Int, value: Any) -> Any:
1885
1887
  """Compute the minimum of ``value`` and ``arr[i,j,k,l]``, atomically update the array, and return the old value.
1886
1888
 
1887
- .. note:: The operation is only atomic on a per-component basis for vectors and matrices.
1889
+ The operation is only atomic on a per-component basis for vectors and matrices.
1888
1890
  """
1889
1891
  ...
1890
1892
 
1891
1893
 
1892
1894
  @over
1893
- def atomic_max(arr: Array[Any], i: int32, value: Any) -> Any:
1895
+ def atomic_max(arr: Array[Any], i: Int, value: Any) -> Any:
1894
1896
  """Compute the maximum of ``value`` and ``arr[i]``, atomically update the array, and return the old value.
1895
1897
 
1896
- .. note:: The operation is only atomic on a per-component basis for vectors and matrices.
1898
+ The operation is only atomic on a per-component basis for vectors and matrices.
1897
1899
  """
1898
1900
  ...
1899
1901
 
1900
1902
 
1901
1903
  @over
1902
- def atomic_max(arr: Array[Any], i: int32, j: int32, value: Any) -> Any:
1904
+ def atomic_max(arr: Array[Any], i: Int, j: Int, value: Any) -> Any:
1903
1905
  """Compute the maximum of ``value`` and ``arr[i,j]``, atomically update the array, and return the old value.
1904
1906
 
1905
- .. note:: The operation is only atomic on a per-component basis for vectors and matrices.
1907
+ The operation is only atomic on a per-component basis for vectors and matrices.
1906
1908
  """
1907
1909
  ...
1908
1910
 
1909
1911
 
1910
1912
  @over
1911
- def atomic_max(arr: Array[Any], i: int32, j: int32, k: int32, value: Any) -> Any:
1913
+ def atomic_max(arr: Array[Any], i: Int, j: Int, k: Int, value: Any) -> Any:
1912
1914
  """Compute the maximum of ``value`` and ``arr[i,j,k]``, atomically update the array, and return the old value.
1913
1915
 
1914
- .. note:: The operation is only atomic on a per-component basis for vectors and matrices.
1916
+ The operation is only atomic on a per-component basis for vectors and matrices.
1915
1917
  """
1916
1918
  ...
1917
1919
 
1918
1920
 
1919
1921
  @over
1920
- def atomic_max(arr: Array[Any], i: int32, j: int32, k: int32, l: int32, value: Any) -> Any:
1922
+ def atomic_max(arr: Array[Any], i: Int, j: Int, k: Int, l: Int, value: Any) -> Any:
1921
1923
  """Compute the maximum of ``value`` and ``arr[i,j,k,l]``, atomically update the array, and return the old value.
1922
1924
 
1923
- .. note:: The operation is only atomic on a per-component basis for vectors and matrices.
1925
+ The operation is only atomic on a per-component basis for vectors and matrices.
1924
1926
  """
1925
1927
  ...
1926
1928
 
1927
1929
 
1928
1930
  @over
1929
- def atomic_max(arr: FabricArray[Any], i: int32, value: Any) -> Any:
1931
+ def atomic_max(arr: FabricArray[Any], i: Int, value: Any) -> Any:
1930
1932
  """Compute the maximum of ``value`` and ``arr[i]``, atomically update the array, and return the old value.
1931
1933
 
1932
- .. note:: The operation is only atomic on a per-component basis for vectors and matrices.
1934
+ The operation is only atomic on a per-component basis for vectors and matrices.
1933
1935
  """
1934
1936
  ...
1935
1937
 
1936
1938
 
1937
1939
  @over
1938
- def atomic_max(arr: FabricArray[Any], i: int32, j: int32, value: Any) -> Any:
1940
+ def atomic_max(arr: FabricArray[Any], i: Int, j: Int, value: Any) -> Any:
1939
1941
  """Compute the maximum of ``value`` and ``arr[i,j]``, atomically update the array, and return the old value.
1940
1942
 
1941
- .. note:: The operation is only atomic on a per-component basis for vectors and matrices.
1943
+ The operation is only atomic on a per-component basis for vectors and matrices.
1942
1944
  """
1943
1945
  ...
1944
1946
 
1945
1947
 
1946
1948
  @over
1947
- def atomic_max(arr: FabricArray[Any], i: int32, j: int32, k: int32, value: Any) -> Any:
1949
+ def atomic_max(arr: FabricArray[Any], i: Int, j: Int, k: Int, value: Any) -> Any:
1948
1950
  """Compute the maximum of ``value`` and ``arr[i,j,k]``, atomically update the array, and return the old value.
1949
1951
 
1950
- .. note:: The operation is only atomic on a per-component basis for vectors and matrices.
1952
+ The operation is only atomic on a per-component basis for vectors and matrices.
1951
1953
  """
1952
1954
  ...
1953
1955
 
1954
1956
 
1955
1957
  @over
1956
- def atomic_max(arr: FabricArray[Any], i: int32, j: int32, k: int32, l: int32, value: Any) -> Any:
1958
+ def atomic_max(arr: FabricArray[Any], i: Int, j: Int, k: Int, l: Int, value: Any) -> Any:
1957
1959
  """Compute the maximum of ``value`` and ``arr[i,j,k,l]``, atomically update the array, and return the old value.
1958
1960
 
1959
- .. note:: The operation is only atomic on a per-component basis for vectors and matrices.
1961
+ The operation is only atomic on a per-component basis for vectors and matrices.
1960
1962
  """
1961
1963
  ...
1962
1964
 
1963
1965
 
1964
1966
  @over
1965
- def atomic_max(arr: IndexedFabricArray[Any], i: int32, value: Any) -> Any:
1967
+ def atomic_max(arr: IndexedFabricArray[Any], i: Int, value: Any) -> Any:
1966
1968
  """Compute the maximum of ``value`` and ``arr[i]``, atomically update the array, and return the old value.
1967
1969
 
1968
- .. note:: The operation is only atomic on a per-component basis for vectors and matrices.
1970
+ The operation is only atomic on a per-component basis for vectors and matrices.
1969
1971
  """
1970
1972
  ...
1971
1973
 
1972
1974
 
1973
1975
  @over
1974
- def atomic_max(arr: IndexedFabricArray[Any], i: int32, j: int32, value: Any) -> Any:
1976
+ def atomic_max(arr: IndexedFabricArray[Any], i: Int, j: Int, value: Any) -> Any:
1975
1977
  """Compute the maximum of ``value`` and ``arr[i,j]``, atomically update the array, and return the old value.
1976
1978
 
1977
- .. note:: The operation is only atomic on a per-component basis for vectors and matrices.
1979
+ The operation is only atomic on a per-component basis for vectors and matrices.
1978
1980
  """
1979
1981
  ...
1980
1982
 
1981
1983
 
1982
1984
  @over
1983
- def atomic_max(arr: IndexedFabricArray[Any], i: int32, j: int32, k: int32, value: Any) -> Any:
1985
+ def atomic_max(arr: IndexedFabricArray[Any], i: Int, j: Int, k: Int, value: Any) -> Any:
1984
1986
  """Compute the maximum of ``value`` and ``arr[i,j,k]``, atomically update the array, and return the old value.
1985
1987
 
1986
- .. note:: The operation is only atomic on a per-component basis for vectors and matrices.
1988
+ The operation is only atomic on a per-component basis for vectors and matrices.
1987
1989
  """
1988
1990
  ...
1989
1991
 
1990
1992
 
1991
1993
  @over
1992
- def atomic_max(arr: IndexedFabricArray[Any], i: int32, j: int32, k: int32, l: int32, value: Any) -> Any:
1994
+ def atomic_max(arr: IndexedFabricArray[Any], i: Int, j: Int, k: Int, l: Int, value: Any) -> Any:
1993
1995
  """Compute the maximum of ``value`` and ``arr[i,j,k,l]``, atomically update the array, and return the old value.
1994
1996
 
1995
- .. note:: The operation is only atomic on a per-component basis for vectors and matrices.
1997
+ The operation is only atomic on a per-component basis for vectors and matrices.
1996
1998
  """
1997
1999
  ...
1998
2000
 
@@ -2411,12 +2413,11 @@ def unot(a: Array[Any]) -> bool:
2411
2413
  def static(expr: Any) -> Any:
2412
2414
  """Evaluates a static Python expression and replaces it with its result.
2413
2415
 
2414
- See the `codegen.html#static-expressions <section on code generation>`_ for more details.
2416
+ See the :ref:`code generation guide <static_expressions>` for more details.
2415
2417
 
2416
- Note:
2417
- The inner expression must only reference variables that are available from the current scope where the Warp kernel or function containing the expression is defined,
2418
- which includes constant variables and variables captured in the current closure in which the function or kernel is implemented.
2419
- The return type of the expression must be either a Warp function, a string, or a type that is supported inside Warp kernels and functions
2420
- (excluding Warp arrays since they cannot be created in a Warp kernel at the moment).
2418
+ The inner expression must only reference variables that are available from the current scope where the Warp kernel or function containing the expression is defined,
2419
+ which includes constant variables and variables captured in the current closure in which the function or kernel is implemented.
2420
+ The return type of the expression must be either a Warp function, a string, or a type that is supported inside Warp kernels and functions
2421
+ (excluding Warp arrays since they cannot be created in a Warp kernel at the moment).
2421
2422
  """
2422
2423
  ...