mlx/docs/build/html/primitives_8h_source.html
Awni Hannun 50b9530af5 docs up
2025-06-04 01:01:51 +00:00

3011 lines
670 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.10.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/primitives.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">MLX
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.10.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(0); });
/* @license-end */
</script>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle"><div class="title">primitives.h</div></div>
</div><!--header-->
<div class="contents">
<a href="primitives_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// Copyright © 2023-2024 Apple Inc.</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="preprocessor">#pragma once</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span> </div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include &lt;unordered_set&gt;</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span> </div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#include &quot;<a class="code" href="array_8h.html">mlx/array.h</a>&quot;</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &quot;<a class="code" href="device_8h.html">mlx/device.h</a>&quot;</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &quot;<a class="code" href="io_2load_8h.html">mlx/io/load.h</a>&quot;</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#include &quot;<a class="code" href="stream_8h.html">mlx/stream.h</a>&quot;</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> </div>
<div class="foldopen" id="foldopen00012" data-start="" data-end="">
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"><a class="line" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd"> 12</a></span><span class="preprocessor">#define DEFINE_VMAP() \</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor"> virtual std::pair&lt;std::vector&lt;array&gt;, std::vector&lt;int&gt;&gt; vmap( \</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor"> const std::vector&lt;array&gt;&amp; inputs, const std::vector&lt;int&gt;&amp; axes) \</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor"> override;</span></div>
</div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
<div class="foldopen" id="foldopen00017" data-start="" data-end="">
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"><a class="line" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6"> 17</a></span><span class="preprocessor">#define DEFINE_GRADS() \</span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor"> std::vector&lt;array&gt; jvp( \</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor"> const std::vector&lt;array&gt;&amp; primals, \</span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor"> const std::vector&lt;array&gt;&amp; tangents, \</span></div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor"> const std::vector&lt;int&gt;&amp; argnums) override; \</span></div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor"> \</span></div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor"> std::vector&lt;array&gt; vjp( \</span></div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor"> const std::vector&lt;array&gt;&amp; primals, \</span></div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor"> const std::vector&lt;array&gt;&amp; cotangents, \</span></div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor"> const std::vector&lt;int&gt;&amp; argnums, \</span></div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor"> const std::vector&lt;array&gt;&amp; outputs) override;</span></div>
</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
<div class="foldopen" id="foldopen00029" data-start="" data-end="">
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592"> 29</a></span><span class="preprocessor">#define DEFINE_PRINT(PRIMITIVE) \</span></div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="preprocessor"> void print(std::ostream&amp; os) override { \</span></div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="preprocessor"> os &lt;&lt; #PRIMITIVE; \</span></div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="preprocessor"> }</span></div>
</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div>
<div class="foldopen" id="foldopen00034" data-start="" data-end="">
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"><a class="line" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a"> 34</a></span><span class="preprocessor">#define DEFINE_DEFAULT_IS_EQUIVALENT() \</span></div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="preprocessor"> bool is_equivalent(const Primitive&amp; other) const override { \</span></div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="preprocessor"> return true; \</span></div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="preprocessor"> }</span></div>
</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div>
<div class="foldopen" id="foldopen00039" data-start="" data-end="">
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999"> 39</a></span><span class="preprocessor">#define DEFINE_INPUT_OUTPUT_SHAPE() \</span></div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="preprocessor"> std::vector&lt;std::vector&lt;int&gt;&gt; output_shapes( \</span></div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="preprocessor"> const std::vector&lt;array&gt;&amp; inputs) override { \</span></div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="preprocessor"> return {inputs[0].shape()}; \</span></div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="preprocessor"> }</span></div>
</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacemlx_1_1core.html">mlx::core</a> {</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> </div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="comment">// Abstract base class</span></div>
<div class="foldopen" id="foldopen00048" data-start="{" data-end="};">
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_primitive.html"> 48</a></span><span class="keyword">class </span><a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a> {</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_primitive.html#afc69f22ee1f6e8a9ecc2c3a8f43b8fdb"> 50</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#afc69f22ee1f6e8a9ecc2c3a8f43b8fdb">Primitive</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>) : stream_(<a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>) {}</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
<div class="foldopen" id="foldopen00053" data-start="{" data-end="}">
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_primitive.html#a8ae61e3289c4134232a69295268f8261"> 53</a></span> <span class="keyword">const</span> <a class="code hl_struct" href="structmlx_1_1core_1_1_device.html">Device</a>&amp; <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a8ae61e3289c4134232a69295268f8261">device</a>() {</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="keywordflow">return</span> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>().<a class="code hl_variable" href="structmlx_1_1core_1_1_stream.html#a406b1b0162287a4162fab1f70e2ff3bb">device</a>;</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> }</div>
</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> </div>
<div class="foldopen" id="foldopen00058" data-start="{" data-end="}">
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a"> 58</a></span> <span class="keyword">const</span> <a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a>&amp; <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>() {</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="keywordflow">return</span> stream_;</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> }</div>
</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> </div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_primitive.html#a1596dc50b910538eae14878e98f07575"> 69</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a1596dc50b910538eae14878e98f07575">eval_cpu</a>(</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs,</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> std::vector&lt;array&gt;&amp; outputs) = 0;</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_primitive.html#ad217376dcf5eff691d731566faec2ba2"> 72</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#ad217376dcf5eff691d731566faec2ba2">eval_gpu</a>(</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs,</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> std::vector&lt;array&gt;&amp; outputs) = 0;</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> </div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_primitive.html#a9fecf38f53da08ba1947543c2b3158c2"> 79</a></span> <span class="keyword">virtual</span> std::vector&lt;array&gt; <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a9fecf38f53da08ba1947543c2b3158c2">jvp</a>(</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; primals,</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; tangents,</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; argnums);</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> </div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_primitive.html#a1dcb6807326eeab62474c6a0e3836d42"> 87</a></span> <span class="keyword">virtual</span> std::vector&lt;array&gt; <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a1dcb6807326eeab62474c6a0e3836d42">vjp</a>(</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; primals,</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; cotangents,</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; argnums,</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; outputs);</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> </div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_primitive.html#ac632b9619dd7a6a0f177bd36202e8103"> 99</a></span> <span class="keyword">virtual</span> std::pair&lt;std::vector&lt;array&gt;, std::vector&lt;int&gt;&gt; <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#ac632b9619dd7a6a0f177bd36202e8103">vmap</a>(</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs,</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; axes);</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> </div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_primitive.html#ae1aff91354ce036596088a3e19474ecb"> 104</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#ae1aff91354ce036596088a3e19474ecb">print</a>(std::ostream&amp; os) = 0;</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> </div>
<div class="foldopen" id="foldopen00107" data-start="{" data-end="}">
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_primitive.html#a6140a502af4c2bbbc776ab26e9afebcd"> 107</a></span> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a6140a502af4c2bbbc776ab26e9afebcd">is_equivalent</a>(<span class="keyword">const</span> <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other)<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> }</div>
</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> </div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_primitive.html#a8849dc20991398f6f9a24d6785673853"> 113</a></span> <span class="keyword">virtual</span> std::vector&lt;std::vector&lt;int&gt;&gt; <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a8849dc20991398f6f9a24d6785673853">output_shapes</a>(</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs);</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> </div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_primitive.html#a29f70eb2d3b7e6c5fe52779c03f03777"> 116</a></span> <span class="keyword">virtual</span> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a29f70eb2d3b7e6c5fe52779c03f03777">~Primitive</a>() = <span class="keywordflow">default</span>;</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_primitive.html#a3349f745fae50ca7627f79a731a19e32"> 117</a></span> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a3349f745fae50ca7627f79a731a19e32">Primitive</a>(<span class="keyword">const</span> <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) = <span class="keyword">delete</span>;</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_primitive.html#a342da891b9882bdee9a0e0c1ac826eda"> 118</a></span> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a342da891b9882bdee9a0e0c1ac826eda">Primitive</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp;&amp; other) = <span class="keyword">delete</span>;</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_primitive.html#a6b1be7ea92f3a7bb19875c70259dad6b"> 119</a></span> <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a6b1be7ea92f3a7bb19875c70259dad6b">operator=</a>(<span class="keyword">const</span> <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) = <span class="keyword">delete</span>;</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_primitive.html#a50bbddd43e1ba0cf5f127cd7aa756a9e"> 120</a></span> <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a50bbddd43e1ba0cf5f127cd7aa756a9e">operator=</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp;&amp; other) = <span class="keyword">delete</span>;</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> </div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="comment">// Every primitive stores the stream it should run in</span></div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream_;</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span>};</div>
</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> </div>
<div class="foldopen" id="foldopen00127" data-start="{" data-end="};">
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_unary_primitive.html"> 127</a></span><span class="keyword">class </span><a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> : <span class="keyword">public</span> <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a> {</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_unary_primitive.html#a189f6d4ed369f82a4b724a29eb056d4e"> 132</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_unary_primitive.html#a189f6d4ed369f82a4b724a29eb056d4e">UnaryPrimitive</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>) : <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>(<a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>) {}</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> </div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_unary_primitive.html#a7e8f6f5d6ae0a33f6abc0f5a46e0b132"> 134</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_unary_primitive.html#a7e8f6f5d6ae0a33f6abc0f5a46e0b132">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; output) = 0;</div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_unary_primitive.html#a6b7f80abaf038d53ec6ffbb0dfac6adb"> 135</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_unary_primitive.html#a6b7f80abaf038d53ec6ffbb0dfac6adb">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; output) = 0;</div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> </div>
<div class="foldopen" id="foldopen00137" data-start="{" data-end="}">
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_unary_primitive.html#aa0ed6e32c36200a3ff9bc592c9b300db"> 137</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_unary_primitive.html#aa0ed6e32c36200a3ff9bc592c9b300db">eval_cpu</a>(</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs,</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> std::vector&lt;array&gt;&amp; outputs)<span class="keyword"> override </span>{</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <a class="code hl_function" href="classmlx_1_1core_1_1_unary_primitive.html#a7e8f6f5d6ae0a33f6abc0f5a46e0b132">eval_cpu</a>(inputs, outputs[0]);</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> }</div>
</div>
<div class="foldopen" id="foldopen00142" data-start="{" data-end="}">
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_unary_primitive.html#a971fe9ad47f6569118879ce1d0f41447"> 142</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_unary_primitive.html#a971fe9ad47f6569118879ce1d0f41447">eval_gpu</a>(</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs,</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> std::vector&lt;array&gt;&amp; outputs)<span class="keyword"> override </span>{</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <a class="code hl_function" href="classmlx_1_1core_1_1_unary_primitive.html#a6b7f80abaf038d53ec6ffbb0dfac6adb">eval_gpu</a>(inputs, outputs[0]);</div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> }</div>
</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> </div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_unary_primitive.html#ac0677ab99a5ca660ed6ab7902ea364de"> 148</a></span> <span class="keyword">virtual</span> <a class="code hl_function" href="classmlx_1_1core_1_1_unary_primitive.html#ac0677ab99a5ca660ed6ab7902ea364de">~UnaryPrimitive</a>() = <span class="keywordflow">default</span>;</div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_unary_primitive.html#a9935cffc4f246d3d883bc3d26c5163f2"> 149</a></span> <a class="code hl_function" href="classmlx_1_1core_1_1_unary_primitive.html#a9935cffc4f246d3d883bc3d26c5163f2">UnaryPrimitive</a>(<span class="keyword">const</span> <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>&amp; other) = <span class="keyword">delete</span>;</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_unary_primitive.html#a780281fb04e2daf1be630c124bd605e3"> 150</a></span> <a class="code hl_function" href="classmlx_1_1core_1_1_unary_primitive.html#a780281fb04e2daf1be630c124bd605e3">UnaryPrimitive</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>&amp;&amp; other) = <span class="keyword">delete</span>;</div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_unary_primitive.html#a0a859309a4f192f2679e07f2e4ff4d22"> 151</a></span> <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>&amp; <a class="code hl_function" href="classmlx_1_1core_1_1_unary_primitive.html#a0a859309a4f192f2679e07f2e4ff4d22">operator=</a>(<span class="keyword">const</span> <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>&amp; other) = <span class="keyword">delete</span>;</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_unary_primitive.html#ab90b2ea80f1d914be03cf44def5db5a5"> 152</a></span> <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>&amp; <a class="code hl_function" href="classmlx_1_1core_1_1_unary_primitive.html#ab90b2ea80f1d914be03cf44def5db5a5">operator=</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>&amp;&amp; other) = <span class="keyword">delete</span>;</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span>};</div>
</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> </div>
<div class="foldopen" id="foldopen00155" data-start="{" data-end="};">
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_abs.html"> 155</a></span><span class="keyword">class </span><a class="code hl_class" href="classmlx_1_1core_1_1_abs.html">Abs</a> : <span class="keyword">public</span> <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_abs.html#a1247e72feb640fb562d036b2dd1ae4ad"> 157</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_abs.html#a1247e72feb640fb562d036b2dd1ae4ad">Abs</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(<a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>) {}</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> </div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_abs.html#a0d3e697496ef8e842d21195cb3c14e60"> 159</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_abs.html#a0d3e697496ef8e842d21195cb3c14e60">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_abs.html#a0a976e636dd8505b473fbdddf949f514"> 160</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_abs.html#a0a976e636dd8505b473fbdddf949f514">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> </div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_abs.html#a4c9c98f1d71432fd3752ad9a6a8e7f2f"> 162</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_abs.html#a6c1e6eeaf4f5e63898c3487106e88e11"> 163</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_abs.html#a643d6db5116eed978e3208804a992107"> 164</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_abs.html">Abs</a>)</div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_abs.html#ab6f0ec56bc7c048382297e12dabadc67"> 165</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_abs.html#ab6a2b147f58c83439ecefb9189c2da32"> 166</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> </div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> private:</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span>};</div>
</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> </div>
<div class="foldopen" id="foldopen00172" data-start="{" data-end="};">
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_add.html"> 172</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_add.html">Add</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_add.html#ae3fd5483f3454eac3df256e3f5f3cdae"> 174</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_add.html#ae3fd5483f3454eac3df256e3f5f3cdae">Add</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(<a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>) {}</div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> </div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_add.html#a5bacfc51dfa2a5a931bad2dd7bdc7a5f"> 176</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_add.html#a5bacfc51dfa2a5a931bad2dd7bdc7a5f">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_add.html#aa0aacbc1e26b95a2f040f62aa4f69c3d"> 177</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_add.html#aa0aacbc1e26b95a2f040f62aa4f69c3d">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> </div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_add.html#a0e557d4d896153f84a25532562e4c646"> 179</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_add.html#a77230069f76fe60a2fe1007822a277b7"> 180</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_add.html#a8a96345aa63724f22b68bca7b861211d"> 181</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_add.html">Add</a>)</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_add.html#aba0a35410c3aac53d0f7a0c283d9ee3f"> 182</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_add.html#a9884fece6ca4061a65241c985fcf1594"> 183</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> </div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> private:</div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span>};</div>
</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> </div>
<div class="foldopen" id="foldopen00189" data-start="{" data-end="};">
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_add_m_m.html"> 189</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_add_m_m.html">AddMM</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen00191" data-start="{" data-end="}">
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_add_m_m.html#a8ae4372b3f96e72e8a5a06d59de8a550"> 191</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_add_m_m.html#a8ae4372b3f96e72e8a5a06d59de8a550">AddMM</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>, <span class="keywordtype">float</span> alpha, <span class="keywordtype">float</span> beta)</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(<a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>), alpha_(alpha), beta_(beta) {}</div>
</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> </div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_add_m_m.html#a15694e3bf2ed5c193237b2b9ca00867c"> 194</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_add_m_m.html#a15694e3bf2ed5c193237b2b9ca00867c">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_add_m_m.html#a5f933be14baebc32a0be0f9a69148aa9"> 195</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_add_m_m.html#a5f933be14baebc32a0be0f9a69148aa9">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> </div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_add_m_m.html#ac1562a37cec6928e01281926ebeb47c6"> 197</a></span> std::vector&lt;array&gt; <a class="code hl_function" href="classmlx_1_1core_1_1_add_m_m.html#ac1562a37cec6928e01281926ebeb47c6">vjp</a>(</div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; primals,</div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; cotangents,</div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; argnums,</div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; outputs) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> </div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_add_m_m.html#a73ce80b3a37ec2523943028d50ebce81"> 203</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_add_m_m.html#a1262ac2c4c6e9ff6b6047bf7605e5cc9"> 204</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_add_m_m.html">AddMM</a>)</div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> </div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_add_m_m.html#a6e37c6882dba995a63fb6d8dfb01754f"> 206</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classmlx_1_1core_1_1_abs.html#ab6f0ec56bc7c048382297e12dabadc67">is_equivalent</a>(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> </div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> private:</div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> const <span class="keywordtype">float</span> alpha_;</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> const <span class="keywordtype">float</span> beta_;</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span>};</div>
</div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> </div>
<div class="foldopen" id="foldopen00213" data-start="{" data-end="};">
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arange.html"> 213</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_arange.html">Arange</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen00215" data-start="{" data-end="}">
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arange.html#a1a70c3b0b9c67d5a9446c141c5b7c574"> 215</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arange.html#a1a70c3b0b9c67d5a9446c141c5b7c574">Arange</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>, <span class="keywordtype">double</span> start, <span class="keywordtype">double</span> stop, <span class="keywordtype">double</span> step)</div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(<a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>), start_(start), stop_(stop), step_(step) {}</div>
</div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> </div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arange.html#aba44432491cbd599bf72712f5f4267a1"> 218</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arange.html#aba44432491cbd599bf72712f5f4267a1">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arange.html#a7a2e9787c6c3a78b4a6df91206974031"> 219</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arange.html#a7a2e9787c6c3a78b4a6df91206974031">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> </div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arange.html#abd73d2b793da796dc7cf04c9f7d5c19e"> 221</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_arange.html">Arange</a>)</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arange.html#a7b6a45cf9c4b109d4e0373f3fe576c35"> 222</a></span> bool <a class="code hl_function" href="classmlx_1_1core_1_1_abs.html#ab6f0ec56bc7c048382297e12dabadc67">is_equivalent</a>(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> </div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> private:</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="keywordtype">double</span> start_;</div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <span class="keywordtype">double</span> stop_;</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <span class="keywordtype">double</span> step_;</div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> </div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span>};</div>
</div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> </div>
<div class="foldopen" id="foldopen00232" data-start="{" data-end="};">
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_cos.html"> 232</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_arc_cos.html">ArcCos</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_cos.html#a66f4ee841d17923d93241b71ea5103e9"> 234</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arc_cos.html#a66f4ee841d17923d93241b71ea5103e9">ArcCos</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(<a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>) {}</div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> </div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_cos.html#a58dcba9e706cb12bab062bb7fa5fa006"> 236</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arc_cos.html#a58dcba9e706cb12bab062bb7fa5fa006">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_cos.html#a46f72d4af89b0a0f5f203783fb44589c"> 237</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arc_cos.html#a46f72d4af89b0a0f5f203783fb44589c">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> </div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_cos.html#a7548e23ace6827674aa6d284d44ccf83"> 239</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_cos.html#a240079c616f1a1f127aa783308096fe9"> 240</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_cos.html#aa48d8bec4efbac569d809cf11648b739"> 241</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_arc_cos.html">ArcCos</a>)</div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_cos.html#a39557461e3235801886675a9b7d25bf5"> 242</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_cos.html#a8ecd5b9a8cc9cba841768a5b2b497974"> 243</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> </div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> private:</div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span>};</div>
</div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> </div>
<div class="foldopen" id="foldopen00249" data-start="{" data-end="};">
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_cosh.html"> 249</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_arc_cosh.html">ArcCosh</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_cosh.html#a34597054db467941a2a883c653ba4d71"> 251</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arc_cosh.html#a34597054db467941a2a883c653ba4d71">ArcCosh</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(<a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>) {}</div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> </div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_cosh.html#a0f6d989bcbbc38f15ef17a136879a9c9"> 253</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arc_cosh.html#a0f6d989bcbbc38f15ef17a136879a9c9">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_cosh.html#aa6a2587485a0e015ac2d5211d7d045fc"> 254</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arc_cosh.html#aa6a2587485a0e015ac2d5211d7d045fc">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> </div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_cosh.html#af8ff78e910a9e485a203e1d3347bd461"> 256</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_cosh.html#a80fcb790649219c30260af903b76a1d7"> 257</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_cosh.html#a6a9a2ab0cc360d7e2f9676db17f8e630"> 258</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_arc_cosh.html">ArcCosh</a>)</div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_cosh.html#a6928e827b9ac2e86e7d5b02b78150eee"> 259</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_cosh.html#ae5d6660121f7f5a55824b95e7fd3dc6b"> 260</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> </div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> private:</div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span>};</div>
</div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> </div>
<div class="foldopen" id="foldopen00266" data-start="{" data-end="};">
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_sin.html"> 266</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_arc_sin.html">ArcSin</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_sin.html#a97cb8c3d4d9d6abc627dec49a404f013"> 268</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arc_sin.html#a97cb8c3d4d9d6abc627dec49a404f013">ArcSin</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(<a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>) {}</div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> </div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_sin.html#ab3542492c14021329788de8f2a9be1e4"> 270</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arc_sin.html#ab3542492c14021329788de8f2a9be1e4">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_sin.html#a7fa4ae7a85bc8bed97ea258ae30762f3"> 271</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arc_sin.html#a7fa4ae7a85bc8bed97ea258ae30762f3">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> </div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_sin.html#a7cabb1e5a2bda44944378822c671ec82"> 273</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_sin.html#a37affc8c5e84e5c54e73a71fc0821ea4"> 274</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_sin.html#a895a35c9dd22fdb06e7b971bfd6fde87"> 275</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_arc_sin.html">ArcSin</a>)</div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_sin.html#a13b5e39eeccaf32d94b8eb85b3b753ab"> 276</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_sin.html#a1c6e478804eb5d171e4859b872db29f5"> 277</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> </div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> private:</div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span>};</div>
</div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> </div>
<div class="foldopen" id="foldopen00283" data-start="{" data-end="};">
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_sinh.html"> 283</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_arc_sinh.html">ArcSinh</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_sinh.html#a30076b222788deeaaf9ad92d3c535f20"> 285</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arc_sinh.html#a30076b222788deeaaf9ad92d3c535f20">ArcSinh</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(<a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>) {}</div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> </div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_sinh.html#a52574b24d8d16839c58673f51f8ac066"> 287</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arc_sinh.html#a52574b24d8d16839c58673f51f8ac066">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_sinh.html#a79f648a86de4c10386a1ce3b5e38e8ac"> 288</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arc_sinh.html#a79f648a86de4c10386a1ce3b5e38e8ac">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> </div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_sinh.html#a9e72b9751939387c333b5d4e19a37f6d"> 290</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_sinh.html#a79ebf2f6dfecbfbb93170fdd1ca87bf4"> 291</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_sinh.html#aa8b2934a8a0b2eedec8257bbb5726430"> 292</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_arc_sinh.html">ArcSinh</a>)</div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_sinh.html#a63c7a765c7906242dc3371deec094f0f"> 293</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_sinh.html#a6e0319a3cee5f6b9d43a3ac256b2c2ed"> 294</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> </div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> private:</div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span>};</div>
</div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> </div>
<div class="foldopen" id="foldopen00300" data-start="{" data-end="};">
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_tan.html"> 300</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_arc_tan.html">ArcTan</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_tan.html#a3511153bbd421e89fd9294cdb3f79b44"> 302</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arc_tan.html#a3511153bbd421e89fd9294cdb3f79b44">ArcTan</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(<a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>) {}</div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> </div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_tan.html#a1211bc31241227528f04435239ddb9a3"> 304</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arc_tan.html#a1211bc31241227528f04435239ddb9a3">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_tan.html#a77866feb27028865d844070447c9a254"> 305</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arc_tan.html#a77866feb27028865d844070447c9a254">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> </div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_tan.html#a1fb921554544a56498bc54f82e4a0556"> 307</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_tan.html#a0f5590a2297fc133b4b0a15f9dd0c760"> 308</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_tan.html#ab0309e4feca36f221b3d672dc92cac05"> 309</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_arc_tan.html">ArcTan</a>)</div>
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_tan.html#a0e5b5fc7218143ecd0a8666d9137c34c"> 310</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_tan.html#aa5d1e60d50ffa77b1d0e14af8d7e127a"> 311</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> </div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> private:</div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span>};</div>
</div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> </div>
<div class="foldopen" id="foldopen00317" data-start="{" data-end="};">
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_tan2.html"> 317</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_arc_tan2.html">ArcTan2</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_tan2.html#aa1a4ebab9924b6bcc80df5b52ed0121a"> 319</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arc_tan2.html#aa1a4ebab9924b6bcc80df5b52ed0121a">ArcTan2</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(<a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>) {}</div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> </div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_tan2.html#a13094e6b702769928ca0da468f5ce45c"> 321</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arc_tan2.html#a13094e6b702769928ca0da468f5ce45c">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_tan2.html#a76d3f0c29e0ff4642b8d39dac90d3f50"> 322</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arc_tan2.html#a76d3f0c29e0ff4642b8d39dac90d3f50">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> </div>
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_tan2.html#ae02cb9fbf25e93dc1d7fbc9e3fb28634"> 324</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_tan2.html#a01675433f2a4fa466b2f48272dbca738"> 325</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_tan2.html#abdfef9f572d06df1251c28222756a361"> 326</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_arc_tan2.html">ArcTan2</a>)</div>
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_tan2.html#aeaee58cd803d3ebf0b76574a409682cc"> 327</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_tan2.html#a3f4ad806a0c59c2d1ae1c55c9889bf03"> 328</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> </div>
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> private:</div>
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span>};</div>
</div>
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> </div>
<div class="foldopen" id="foldopen00334" data-start="{" data-end="};">
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_tanh.html"> 334</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_arc_tanh.html">ArcTanh</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_tanh.html#a17857bd0e2a3ecf1f7bf8e1a3d354358"> 336</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arc_tanh.html#a17857bd0e2a3ecf1f7bf8e1a3d354358">ArcTanh</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(<a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>) {}</div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> </div>
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_tanh.html#a5af9224e1f1ffec412b0baa0af7e1ecd"> 338</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arc_tanh.html#a5af9224e1f1ffec412b0baa0af7e1ecd">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_tanh.html#a10566b9d3b2c7d090895b46d9040bc1d"> 339</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arc_tanh.html#a10566b9d3b2c7d090895b46d9040bc1d">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> </div>
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_tanh.html#a6ddcae68873559211cb91e7740dfc040"> 341</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_tanh.html#a534ebdbfe77241884630d25021274c4a"> 342</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_tanh.html#aa9549311240d7ba225b84e1df9ad8523"> 343</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_arc_tanh.html">ArcTanh</a>)</div>
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_tanh.html#ac8ecdd640043dab0461d49d7650679a2"> 344</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arc_tanh.html#a30246c56e1d75638c3696f84323861d8"> 345</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> </div>
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> private:</div>
<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span>};</div>
</div>
<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> </div>
<div class="foldopen" id="foldopen00351" data-start="{" data-end="};">
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arg_partition.html"> 351</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_arg_partition.html">ArgPartition</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen00353" data-start="{" data-end="}">
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arg_partition.html#ab54b13dbf92351ba1ac06fd3e5a802df"> 353</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arg_partition.html#ab54b13dbf92351ba1ac06fd3e5a802df">ArgPartition</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>, <span class="keywordtype">int</span> kth, <span class="keywordtype">int</span> axis)</div>
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(<a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>), kth_(kth), axis_(axis) {}</div>
</div>
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> </div>
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arg_partition.html#a896f75c5325798ac3f9093f6a4581828"> 356</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arg_partition.html#a896f75c5325798ac3f9093f6a4581828">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arg_partition.html#a9a60995eaf85f63c877e86b23cbc15fc"> 357</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arg_partition.html#a9a60995eaf85f63c877e86b23cbc15fc">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> </div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arg_partition.html#a441093795bcc31495ab5fbc9957b740a"> 359</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arg_partition.html#aa8678d94fa1571ea71a7bf790cdb8d63"> 360</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_arg_partition.html">ArgPartition</a>)</div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arg_partition.html#a28608aee76a2db25f6455da561526c64"> 361</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arg_partition.html#ad87509ce70b51fb75dfb9c3a05a5b31a"> 362</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classmlx_1_1core_1_1_abs.html#ab6f0ec56bc7c048382297e12dabadc67">is_equivalent</a>(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> </div>
<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> private:</div>
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> <span class="keywordtype">int</span> kth_;</div>
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> <span class="keywordtype">int</span> axis_;</div>
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> </div>
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span>};</div>
</div>
<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span> </div>
<div class="foldopen" id="foldopen00371" data-start="{" data-end="};">
<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arg_reduce.html"> 371</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_arg_reduce.html">ArgReduce</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen00373" data-start="{" data-end="};">
<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arg_reduce.html#a920ed48caaba76683be0d1f1ed4a8bd3"> 373</a></span> <span class="keyword">enum</span> <a class="code hl_enumeration" href="classmlx_1_1core_1_1_arg_reduce.html#a920ed48caaba76683be0d1f1ed4a8bd3">ReduceType</a> {</div>
<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arg_reduce.html#a920ed48caaba76683be0d1f1ed4a8bd3a93a8a9221545ae9518d289d9ac4d09e9"> 374</a></span> <a class="code hl_enumvalue" href="classmlx_1_1core_1_1_arg_reduce.html#a920ed48caaba76683be0d1f1ed4a8bd3a93a8a9221545ae9518d289d9ac4d09e9">ArgMin</a>,</div>
<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arg_reduce.html#a920ed48caaba76683be0d1f1ed4a8bd3acc6659315ab0001abd37cbfcbe837e7e"> 375</a></span> <a class="code hl_enumvalue" href="classmlx_1_1core_1_1_arg_reduce.html#a920ed48caaba76683be0d1f1ed4a8bd3acc6659315ab0001abd37cbfcbe837e7e">ArgMax</a>,</div>
<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> };</div>
</div>
<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span> </div>
<div class="foldopen" id="foldopen00378" data-start="{" data-end="}">
<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arg_reduce.html#aaccf8021dc24895656e25142eb65aa03"> 378</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arg_reduce.html#aaccf8021dc24895656e25142eb65aa03">ArgReduce</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>, <a class="code hl_enumeration" href="classmlx_1_1core_1_1_arg_reduce.html#a920ed48caaba76683be0d1f1ed4a8bd3">ReduceType</a> reduce_type, <span class="keywordtype">int</span> axis)</div>
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(<a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>), reduce_type_(reduce_type), axis_(axis) {}</div>
</div>
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> </div>
<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arg_reduce.html#ad8d48725623ede1ff654fa13eccf2287"> 381</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arg_reduce.html#ad8d48725623ede1ff654fa13eccf2287">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arg_reduce.html#aafa982ce2abc0cd9e81e43aa2c823d29"> 382</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arg_reduce.html#aafa982ce2abc0cd9e81e43aa2c823d29">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> </div>
<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arg_reduce.html#abfec42fa06ea15edaf393593751fb1ba"> 384</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arg_reduce.html#a153a6d8dba7301c4fcd0e429154ead8f"> 385</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_arg_reduce.html">ArgReduce</a>)</div>
<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arg_reduce.html#a03b81a670dcb1e39bf7279e4d4583b97"> 386</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classmlx_1_1core_1_1_abs.html#ab6f0ec56bc7c048382297e12dabadc67">is_equivalent</a>(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arg_reduce.html#a40a047cb3ed8d1445d42100b3fd85179"> 387</a></span> std::vector&lt;std::vector&lt;<span class="keywordtype">int</span>&gt;&gt; <a class="code hl_function" href="classmlx_1_1core_1_1_abs.html#ab6a2b147f58c83439ecefb9189c2da32">output_shapes</a>(</div>
<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span> const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs) override;</div>
<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span> </div>
<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span> private:</div>
<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> <a class="code hl_enumeration" href="classmlx_1_1core_1_1_arg_reduce.html#a920ed48caaba76683be0d1f1ed4a8bd3">ReduceType</a> reduce_type_;</div>
<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> <span class="keywordtype">int</span> axis_;</div>
<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span> </div>
<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span>};</div>
</div>
<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> </div>
<div class="foldopen" id="foldopen00397" data-start="{" data-end="};">
<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arg_sort.html"> 397</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_arg_sort.html">ArgSort</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen00399" data-start="{" data-end="}">
<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arg_sort.html#a38507a8445302a81cb44674c4a5fc0b0"> 399</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arg_sort.html#a38507a8445302a81cb44674c4a5fc0b0">ArgSort</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>, <span class="keywordtype">int</span> axis)</div>
<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(<a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>), axis_(axis) {}</div>
</div>
<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> </div>
<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arg_sort.html#a022079683774bfeb531b3a002cff16fa"> 402</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arg_sort.html#a022079683774bfeb531b3a002cff16fa">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arg_sort.html#abc2d730850ec4ee8d7968b7417911709"> 403</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_arg_sort.html#abc2d730850ec4ee8d7968b7417911709">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> </div>
<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arg_sort.html#a3522bbbe4626a467394c1a8a9d7ac34e"> 405</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arg_sort.html#a0b59ce43e0982d634a01631728b419bd"> 406</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_arg_sort.html">ArgSort</a>)</div>
<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arg_sort.html#ac50e0b76c457aae944425b3a57c33859"> 407</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_arg_sort.html#a048cd09c557d29d1111726f97010a845"> 408</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classmlx_1_1core_1_1_abs.html#ab6f0ec56bc7c048382297e12dabadc67">is_equivalent</a>(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span> </div>
<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> private:</div>
<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> <span class="keywordtype">int</span> axis_;</div>
<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> </div>
<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span>};</div>
</div>
<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> </div>
<div class="foldopen" id="foldopen00416" data-start="{" data-end="};">
<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_as_type.html"> 416</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_as_type.html">AsType</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen00418" data-start="{" data-end="}">
<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_as_type.html#a8c3241d402a8977bb4db037e225f5b47"> 418</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_as_type.html#a8c3241d402a8977bb4db037e225f5b47">AsType</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>, <a class="code hl_struct" href="structmlx_1_1core_1_1_dtype.html">Dtype</a> dtype)</div>
<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(<a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>), dtype_(dtype) {}</div>
</div>
<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> </div>
<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_as_type.html#aa89dbf4d73b00c6a44cffd04d5bb228d"> 421</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_as_type.html#aa89dbf4d73b00c6a44cffd04d5bb228d">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_as_type.html#a5b111b9d74c60d27b4a7ebaa49f96e0b"> 422</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_as_type.html#a5b111b9d74c60d27b4a7ebaa49f96e0b">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> </div>
<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_as_type.html#a7ebaf86fd6cad4a1ecfd7cde1ee0b0cc"> 424</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_as_type.html#a213400967150c57da35795e1c9f65ca0"> 425</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_as_type.html#aa617e29147c14bd5d1fa8ad0bf65af0c"> 426</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_as_type.html">AsType</a>)</div>
<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_as_type.html#a18922e68006b5cf005355f5c9ac57ac4"> 427</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_as_type.html#a8e6c8b2428ab15c4fb43f2e3a8fb38af"> 428</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classmlx_1_1core_1_1_abs.html#ab6f0ec56bc7c048382297e12dabadc67">is_equivalent</a>(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> </div>
<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> private:</div>
<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> <a class="code hl_struct" href="structmlx_1_1core_1_1_dtype.html">Dtype</a> dtype_;</div>
<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span> </div>
<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span>};</div>
</div>
<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span> </div>
<div class="foldopen" id="foldopen00436" data-start="{" data-end="};">
<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_as_strided.html"> 436</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_as_strided.html">AsStrided</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen00438" data-start="{" data-end="}">
<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_as_strided.html#a80c0547f72ed53374eafc57d57b5d4af"> 438</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_as_strided.html#a80c0547f72ed53374eafc57d57b5d4af">AsStrided</a>(</div>
<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span> <a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>,</div>
<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span> std::vector&lt;int&gt; shape,</div>
<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> std::vector&lt;size_t&gt; strides,</div>
<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> <span class="keywordtype">size_t</span> offset)</div>
<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(<a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>),</div>
<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span> shape_(<a class="code hl_function" href="group__ops.html#ga2a466024f8061febc0a64be557644cb0">std</a>::move(shape)),</div>
<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span> strides_(<a class="code hl_function" href="group__ops.html#ga2a466024f8061febc0a64be557644cb0">std</a>::move(strides)),</div>
<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span> offset_(offset) {}</div>
</div>
<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span> </div>
<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_as_strided.html#acdd4705e4503ff0b124215c4676b4193"> 448</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_as_strided.html#acdd4705e4503ff0b124215c4676b4193">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_as_strided.html#ab6771a208323994927ca162ba7bb10ed"> 449</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_as_strided.html#ab6771a208323994927ca162ba7bb10ed">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span> </div>
<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_as_strided.html#a8ff0a398c47b42e08bc1122e07a02b53"> 451</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_as_strided.html#af2e21b77ea9e6c70bca45224967745bf"> 452</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_as_strided.html">AsStrided</a>)</div>
<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_as_strided.html#a1738c6aa0a3a3eb68530f0d5b436e094"> 453</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classmlx_1_1core_1_1_abs.html#ab6f0ec56bc7c048382297e12dabadc67">is_equivalent</a>(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> </div>
<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span> private:</div>
<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span> std::vector&lt;<span class="keywordtype">int</span>&gt; shape_;</div>
<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> std::vector&lt;<span class="keywordtype">size_t</span>&gt; strides_;</div>
<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> <span class="keywordtype">size_t</span> offset_;</div>
<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> </div>
<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span>};</div>
</div>
<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span> </div>
<div class="foldopen" id="foldopen00463" data-start="{" data-end="};">
<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_bitwise_binary.html"> 463</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_bitwise_binary.html">BitwiseBinary</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_bitwise_binary.html#a6f8b5d455d0c1770428a6bef1608f23dab14e7d426f45ae7f029f4e00210fbae4"> 465</a></span> <span class="keyword">enum</span> <a class="code hl_enumeration" href="classmlx_1_1core_1_1_bitwise_binary.html#a6f8b5d455d0c1770428a6bef1608f23d">Op</a> { <a class="code hl_enumvalue" href="classmlx_1_1core_1_1_bitwise_binary.html#a6f8b5d455d0c1770428a6bef1608f23dab14e7d426f45ae7f029f4e00210fbae4">And</a>, <a class="code hl_struct" href="struct_or.html">Or</a>, Xor, <a class="code hl_struct" href="struct_left_shift.html">LeftShift</a>, <a class="code hl_struct" href="struct_right_shift.html">RightShift</a> };</div>
<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span> </div>
<div class="foldopen" id="foldopen00467" data-start="{" data-end="}">
<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_bitwise_binary.html#a0d8b3a94951621ffcdebc6fda748a172"> 467</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_bitwise_binary.html#a0d8b3a94951621ffcdebc6fda748a172">BitwiseBinary</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>, <a class="code hl_enumeration" href="classmlx_1_1core_1_1_bitwise_binary.html#a6f8b5d455d0c1770428a6bef1608f23d">Op</a> <a class="code hl_variable" href="common_2binary_8h.html#a70228731d29946574b238d21fb4b360c">op</a>)</div>
<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(<a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>), op_(<a class="code hl_variable" href="common_2binary_8h.html#a70228731d29946574b238d21fb4b360c">op</a>) {}</div>
</div>
<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span> </div>
<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_bitwise_binary.html#a2194bf585213bda1b2966aa02d2fe283"> 470</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_bitwise_binary.html#a2194bf585213bda1b2966aa02d2fe283">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_bitwise_binary.html#ac831a29fc46701b00bbe63ee33832afd"> 471</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_bitwise_binary.html#ac831a29fc46701b00bbe63ee33832afd">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span> </div>
<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_bitwise_binary.html#aa10be55f05bc1868bf4b375dc475f965"> 473</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_bitwise_binary.html#a1dae6ce5dc0498d20530403fe5c5531d"> 474</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_bitwise_binary.html#a8cd6b916b4838a6c329cf4df8530c3b8"> 475</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classmlx_1_1core_1_1_abs.html#ab6f0ec56bc7c048382297e12dabadc67">is_equivalent</a>(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_bitwise_binary.html#a69b28e239da7fdb89f0a9f9467dd797d"> 476</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_abs.html#a643d6db5116eed978e3208804a992107">print</a>(std::ostream&amp; os) override;</div>
<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_bitwise_binary.html#a7d2dfa8884832fc1a94ce6400d0ed599"> 477</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span> </div>
<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span> private:</div>
<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> <a class="code hl_enumeration" href="classmlx_1_1core_1_1_bitwise_binary.html#a6f8b5d455d0c1770428a6bef1608f23d">Op</a> op_;</div>
<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span>};</div>
</div>
<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> </div>
<div class="foldopen" id="foldopen00483" data-start="{" data-end="};">
<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_block_masked_m_m.html"> 483</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_block_masked_m_m.html">BlockMaskedMM</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen00485" data-start="{" data-end="}">
<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_block_masked_m_m.html#ad26509deb5306d0c5eb72477e9a57477"> 485</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_block_masked_m_m.html#ad26509deb5306d0c5eb72477e9a57477">BlockMaskedMM</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>, <span class="keywordtype">int</span> block_size)</div>
<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(<a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>), block_size_(block_size) {}</div>
</div>
<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span> </div>
<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_block_masked_m_m.html#aa85da478cdc6d4a97be06e5d4abee1f2"> 488</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_block_masked_m_m.html#aa85da478cdc6d4a97be06e5d4abee1f2">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_block_masked_m_m.html#ab372b6df4de00a33795a052a23bb1df9"> 489</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_block_masked_m_m.html#ab372b6df4de00a33795a052a23bb1df9">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span> </div>
<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_block_masked_m_m.html#a1adf20087ee2f685bf39c2724b8e7120"> 491</a></span> std::vector&lt;array&gt; <a class="code hl_function" href="classmlx_1_1core_1_1_block_masked_m_m.html#a1adf20087ee2f685bf39c2724b8e7120">vjp</a>(</div>
<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; primals,</div>
<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; cotangents,</div>
<div class="line"><a id="l00494" name="l00494"></a><span class="lineno"> 494</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; argnums,</div>
<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; outputs) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00496" name="l00496"></a><span class="lineno"> 496</span> </div>
<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_block_masked_m_m.html#a37ecf6fa296d28efb7651a3c510fe159"> 497</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_block_masked_m_m.html">BlockMaskedMM</a>)</div>
<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_block_masked_m_m.html#aef1c303955f9b8f445296372cf181160"> 498</a></span> bool <a class="code hl_function" href="classmlx_1_1core_1_1_abs.html#ab6f0ec56bc7c048382297e12dabadc67">is_equivalent</a>(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</span> </div>
<div class="line"><a id="l00500" name="l00500"></a><span class="lineno"> 500</span> private:</div>
<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</span> <span class="keywordtype">int</span> block_size_;</div>
<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span> </div>
<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span>};</div>
</div>
<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span> </div>
<div class="foldopen" id="foldopen00506" data-start="{" data-end="};">
<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_gather_m_m.html"> 506</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_gather_m_m.html">GatherMM</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_gather_m_m.html#afd9bbc08138181b80e2fb86536ff3f2a"> 508</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_gather_m_m.html#afd9bbc08138181b80e2fb86536ff3f2a">GatherMM</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(<a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>) {}</div>
<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span> </div>
<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_gather_m_m.html#a62352074a480df0e1f879b0bae425730"> 510</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_gather_m_m.html#a62352074a480df0e1f879b0bae425730">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_gather_m_m.html#ad754c35f460a055cc383ad93a5f72da1"> 511</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_gather_m_m.html#ad754c35f460a055cc383ad93a5f72da1">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span> </div>
<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_gather_m_m.html#a76c9f27c57354f6230b43944882e1bda"> 513</a></span> std::vector&lt;array&gt; <a class="code hl_function" href="classmlx_1_1core_1_1_gather_m_m.html#a76c9f27c57354f6230b43944882e1bda">vjp</a>(</div>
<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; primals,</div>
<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; cotangents,</div>
<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; argnums,</div>
<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; outputs) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> </div>
<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_gather_m_m.html#ae7a6f4eecb15e95b21e6c87068ebd758"> 519</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_gather_m_m.html">GatherMM</a>)</div>
<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_gather_m_m.html#a163f17f6ce2c002f22e81b302777342b"> 520</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span> </div>
<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span> private:</div>
<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span>};</div>
</div>
<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> </div>
<div class="foldopen" id="foldopen00526" data-start="{" data-end="};">
<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_broadcast.html"> 526</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_broadcast.html">Broadcast</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen00528" data-start="{" data-end="}">
<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_broadcast.html#accbab8433c93e281608a268d11afaefb"> 528</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_broadcast.html#accbab8433c93e281608a268d11afaefb">Broadcast</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>, <span class="keyword">const</span> std::vector&lt;int&gt;&amp; shape)</div>
<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(<a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>), shape_(shape) {}</div>
</div>
<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span> </div>
<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_broadcast.html#a53d48d9778e2d4c24a124cd767900780"> 531</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_broadcast.html#a53d48d9778e2d4c24a124cd767900780">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_broadcast.html#ab9bd9dbcedcefc9b29c84911b5ce69fe"> 532</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_broadcast.html#ab9bd9dbcedcefc9b29c84911b5ce69fe">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span> </div>
<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_broadcast.html#aee4c71c2588ad01eb57e10f346cd666f"> 534</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_broadcast.html#ae2fc3851a117079244708864be770ece"> 535</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_broadcast.html#a6a610412861c6e472f930b6721b99a11"> 536</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_broadcast.html">Broadcast</a>)</div>
<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_broadcast.html#a0e27692b0090ec451954649a36042616"> 537</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classmlx_1_1core_1_1_abs.html#ab6f0ec56bc7c048382297e12dabadc67">is_equivalent</a>(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span> </div>
<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span> private:</div>
<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span> std::vector&lt;<span class="keywordtype">int</span>&gt; shape_;</div>
<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span> </div>
<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span>};</div>
</div>
<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span> </div>
<div class="foldopen" id="foldopen00545" data-start="{" data-end="};">
<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_ceil.html"> 545</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_ceil.html">Ceil</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_ceil.html#aede38610ca25429f229301546bc9b682"> 547</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_ceil.html#aede38610ca25429f229301546bc9b682">Ceil</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(<a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>) {}</div>
<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span> </div>
<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_ceil.html#a9791801fff3f8b79944e15ac2a45a035"> 549</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_ceil.html#a9791801fff3f8b79944e15ac2a45a035">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_ceil.html#abe178e0058e44b6618be414215e96887"> 550</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_ceil.html#abe178e0058e44b6618be414215e96887">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span> </div>
<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_ceil.html#ae86819990b43bdb0c2b3a25719b3a7a4"> 552</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_ceil.html#a7ad74b27d9f26c886c2af516b845f066"> 553</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_ceil.html#a14a0048dd6496341cacaddada68276ee"> 554</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_ceil.html">Ceil</a>)</div>
<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_ceil.html#aacd90acb56eb0649c1cef807aa21df52"> 555</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_ceil.html#a1eb263c04df810e212855a17af0658ea"> 556</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span> </div>
<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span> private:</div>
<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"> 559</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00560" name="l00560"></a><span class="lineno"> 560</span>};</div>
</div>
<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"> 561</span> </div>
<div class="foldopen" id="foldopen00562" data-start="{" data-end="};">
<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_compiled.html"> 562</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_compiled.html">Compiled</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a> {</div>
<div class="line"><a id="l00563" name="l00563"></a><span class="lineno"> 563</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00564" name="l00564"></a><span class="lineno"> 564</span> <span class="comment">/*</span></div>
<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"> 565</span><span class="comment"> * The inputs, outputs and tape are either tracers or constants.</span></div>
<div class="line"><a id="l00566" name="l00566"></a><span class="lineno"> 566</span><span class="comment"> * - The tape should not contain the inputs, but it should contain the</span></div>
<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"> 567</span><span class="comment"> * outputs.</span></div>
<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"> 568</span><span class="comment"> * - The tape should also have only one array per primitive for multi-output</span></div>
<div class="line"><a id="l00569" name="l00569"></a><span class="lineno"> 569</span><span class="comment"> * primitives.</span></div>
<div class="line"><a id="l00570" name="l00570"></a><span class="lineno"> 570</span><span class="comment"> * - The constant_ids contains ids of arrays in the input list that are safe</span></div>
<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span><span class="comment"> * to treat as scalar constants.</span></div>
<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"> 572</span><span class="comment"> */</span></div>
<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_compiled.html#a2d8cefff835c419a48a077d306b8e051"> 573</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_compiled.html#a2d8cefff835c419a48a077d306b8e051">Compiled</a>(</div>
<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span> <a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> <a class="code hl_function" href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">stream</a>,</div>
<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span> std::vector&lt;array&gt; inputs,</div>
<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span> std::vector&lt;array&gt; outputs,</div>
<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"> 577</span> std::vector&lt;array&gt; tape,</div>
<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span> std::unordered_set&lt;uintptr_t&gt; constant_ids);</div>
<div class="line"><a id="l00579" name="l00579"></a><span class="lineno"> 579</span> </div>
<div class="line"><a id="l00580" name="l00580"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_compiled.html#ac45b1d0fedd85feefbff7ce7e168b151"> 580</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_compiled.html#ac45b1d0fedd85feefbff7ce7e168b151">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, std::vector&lt;array&gt;&amp; outputs)</div>
<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"> 581</span> <span class="keyword">override</span>;</div>
<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_compiled.html#aa3d5ff0f2b3554ad48fbbf2a0f3336d5"> 582</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_compiled.html#aa3d5ff0f2b3554ad48fbbf2a0f3336d5">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, std::vector&lt;array&gt;&amp; outputs)</div>
<div class="line"><a id="l00583" name="l00583"></a><span class="lineno"> 583</span> <span class="keyword">override</span>;</div>
<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"> 584</span> </div>
<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_compiled.html#a732e7548f53977b4513bb7f30a04c30d"> 585</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_compiled.html#aa385fe28626856ca5f57161b47a3c205"> 586</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_compiled.html#a453a10c68b7825def5b53207bc04a71c"> 587</a></span> std::vector&lt;std::vector&lt;<span class="keywordtype">int</span>&gt;&gt; <a class="code hl_function" href="classmlx_1_1core_1_1_abs.html#ab6a2b147f58c83439ecefb9189c2da32">output_shapes</a>(</div>
<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span> const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs) override;</div>
<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_compiled.html#a271521f92eef49c39799f38e26b64a9b"> 589</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_abs.html#a643d6db5116eed978e3208804a992107">print</a>(std::ostream&amp; os) override;</div>
<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_compiled.html#a63e5016458887813b4a59dee5a0a3f10"> 590</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classmlx_1_1core_1_1_abs.html#ab6f0ec56bc7c048382297e12dabadc67">is_equivalent</a>(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span> </div>
<div class="foldopen" id="foldopen00592" data-start="{" data-end="}">
<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_compiled.html#ae5c16cb91ac31b97e7652cc526c07439"> 592</a></span> std::<span class="keywordtype">string</span> lib_name()<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span> <span class="keywordflow">return</span> kernel_lib_;</div>
<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span> }</div>
</div>
<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"> 595</span> </div>
<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"> 597</span> <span class="keyword">const</span> std::vector&lt;array&gt; inputs_;</div>
<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"> 598</span> <span class="keyword">const</span> std::vector&lt;array&gt; outputs_;</div>
<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"> 599</span> <span class="keyword">const</span> std::vector&lt;array&gt; tape_;</div>
<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span> <span class="keyword">const</span> std::unordered_set&lt;uintptr_t&gt; constant_ids_;</div>
<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span> </div>
<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span> std::string kernel_lib_;</div>
<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span>};</div>
</div>
<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span> </div>
<div class="foldopen" id="foldopen00605" data-start="{" data-end="};">
<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_concatenate.html"> 605</a></span><span class="keyword">class </span><a class="code hl_class" href="classmlx_1_1core_1_1_concatenate.html">Concatenate</a> : <span class="keyword">public</span> <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen00607" data-start="{" data-end="}">
<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_concatenate.html#acff07853de2d31faeec7c4ca40ce0888"> 607</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_concatenate.html#acff07853de2d31faeec7c4ca40ce0888">Concatenate</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream, <span class="keywordtype">int</span> axis)</div>
<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream), axis_(axis) {}</div>
</div>
<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span> </div>
<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_concatenate.html#a609e76bede7fc5581ec84ddcb727a258"> 610</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_concatenate.html#a609e76bede7fc5581ec84ddcb727a258">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_concatenate.html#a309a1c50e97f9925866433ee2841c474"> 611</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_concatenate.html#a309a1c50e97f9925866433ee2841c474">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span> </div>
<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_concatenate.html#a58c54dcf8e4b045d25edd3afc2caffc1"> 613</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_concatenate.html#a9f9e7a9dc3a00e02b84c94e1868baff1"> 614</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_concatenate.html#a56f29b585a6d1d958954a68dcc893f33"> 615</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_concatenate.html">Concatenate</a>)</div>
<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_concatenate.html#aaf8a72a0c30114460caf519580cc35d2"> 616</a></span> <span class="keywordtype">bool</span> is_equivalent(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"> 617</span> </div>
<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span> private:</div>
<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"> 619</span> <span class="keywordtype">int</span> axis_;</div>
<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span> </div>
<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span>};</div>
</div>
<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span> </div>
<div class="foldopen" id="foldopen00624" data-start="{" data-end="};">
<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_conjugate.html"> 624</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_conjugate.html">Conjugate</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_conjugate.html#a627f9e6a8729fb3ffb3ca3228d007c87"> 626</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_conjugate.html#a627f9e6a8729fb3ffb3ca3228d007c87">Conjugate</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"> 627</span> </div>
<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_conjugate.html#ae39643e2178f442ffba05139f8609d61"> 628</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_conjugate.html#ae39643e2178f442ffba05139f8609d61">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_conjugate.html#aff0a802166e3724db88ab5d3feb2d3de"> 629</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_conjugate.html#aff0a802166e3724db88ab5d3feb2d3de">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span> </div>
<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_conjugate.html#a2c7632c8ae0ca07777e23a0a79344e60"> 631</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_conjugate.html#a40281539bbd543ac8fd8e28650de17e4"> 632</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_conjugate.html">Conjugate</a>)</div>
<div class="line"><a id="l00633" name="l00633"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_conjugate.html#af42f00a790c6bc5572bd8fe9e5b36c5e"> 633</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_conjugate.html#ada40413e9f210251476a37cc0d0ea37f"> 634</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"> 635</span> </div>
<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"> 636</span> private:</div>
<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"> 638</span>};</div>
</div>
<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span> </div>
<div class="foldopen" id="foldopen00640" data-start="{" data-end="};">
<div class="line"><a id="l00640" name="l00640"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_convolution.html"> 640</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_convolution.html">Convolution</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00641" name="l00641"></a><span class="lineno"> 641</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen00642" data-start="{" data-end="}">
<div class="line"><a id="l00642" name="l00642"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_convolution.html#a6f1de77b719bb13217b0d8c64cabb8ef"> 642</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_convolution.html#a6f1de77b719bb13217b0d8c64cabb8ef">Convolution</a>(</div>
<div class="line"><a id="l00643" name="l00643"></a><span class="lineno"> 643</span> <a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream,</div>
<div class="line"><a id="l00644" name="l00644"></a><span class="lineno"> 644</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; kernel_strides,</div>
<div class="line"><a id="l00645" name="l00645"></a><span class="lineno"> 645</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; padding,</div>
<div class="line"><a id="l00646" name="l00646"></a><span class="lineno"> 646</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; kernel_dilation,</div>
<div class="line"><a id="l00647" name="l00647"></a><span class="lineno"> 647</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; input_dilation,</div>
<div class="line"><a id="l00648" name="l00648"></a><span class="lineno"> 648</span> <span class="keyword">const</span> <span class="keywordtype">int</span> groups = 1,</div>
<div class="line"><a id="l00649" name="l00649"></a><span class="lineno"> 649</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> flip = <span class="keyword">false</span>)</div>
<div class="line"><a id="l00650" name="l00650"></a><span class="lineno"> 650</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream),</div>
<div class="line"><a id="l00651" name="l00651"></a><span class="lineno"> 651</span> padding_(padding),</div>
<div class="line"><a id="l00652" name="l00652"></a><span class="lineno"> 652</span> kernel_strides_(kernel_strides),</div>
<div class="line"><a id="l00653" name="l00653"></a><span class="lineno"> 653</span> kernel_dilation_(kernel_dilation),</div>
<div class="line"><a id="l00654" name="l00654"></a><span class="lineno"> 654</span> input_dilation_(input_dilation),</div>
<div class="line"><a id="l00655" name="l00655"></a><span class="lineno"> 655</span> groups_(groups),</div>
<div class="line"><a id="l00656" name="l00656"></a><span class="lineno"> 656</span> flip_(flip) {}</div>
</div>
<div class="line"><a id="l00657" name="l00657"></a><span class="lineno"> 657</span> </div>
<div class="line"><a id="l00658" name="l00658"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_convolution.html#ac74256068da01730629109fa4fa8432b"> 658</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_convolution.html#ac74256068da01730629109fa4fa8432b">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00659" name="l00659"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_convolution.html#a30b64109eeb1778f002b99447dff9dd2"> 659</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_convolution.html#a30b64109eeb1778f002b99447dff9dd2">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00660" name="l00660"></a><span class="lineno"> 660</span> </div>
<div class="line"><a id="l00661" name="l00661"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_convolution.html#af8eb9c0c055ad20aa74b547016917690"> 661</a></span> std::vector&lt;array&gt; <a class="code hl_function" href="classmlx_1_1core_1_1_convolution.html#af8eb9c0c055ad20aa74b547016917690">vjp</a>(</div>
<div class="line"><a id="l00662" name="l00662"></a><span class="lineno"> 662</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; primals,</div>
<div class="line"><a id="l00663" name="l00663"></a><span class="lineno"> 663</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; cotangents,</div>
<div class="line"><a id="l00664" name="l00664"></a><span class="lineno"> 664</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; argnums,</div>
<div class="line"><a id="l00665" name="l00665"></a><span class="lineno"> 665</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; outputs) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00666" name="l00666"></a><span class="lineno"> 666</span> </div>
<div class="line"><a id="l00667" name="l00667"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_convolution.html#a844eab7c4cc99e775cfb561265ed14fd"> 667</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_convolution.html">Convolution</a>)</div>
<div class="line"><a id="l00668" name="l00668"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_convolution.html#afb87708a5e3aab2e9e663daa9d8863de"> 668</a></span> bool is_equivalent(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="line"><a id="l00669" name="l00669"></a><span class="lineno"> 669</span> </div>
<div class="line"><a id="l00670" name="l00670"></a><span class="lineno"> 670</span> private:</div>
<div class="line"><a id="l00671" name="l00671"></a><span class="lineno"> 671</span> std::vector&lt;<span class="keywordtype">int</span>&gt; padding_;</div>
<div class="line"><a id="l00672" name="l00672"></a><span class="lineno"> 672</span> std::vector&lt;<span class="keywordtype">int</span>&gt; kernel_strides_;</div>
<div class="line"><a id="l00673" name="l00673"></a><span class="lineno"> 673</span> std::vector&lt;<span class="keywordtype">int</span>&gt; kernel_dilation_;</div>
<div class="line"><a id="l00674" name="l00674"></a><span class="lineno"> 674</span> std::vector&lt;<span class="keywordtype">int</span>&gt; input_dilation_;</div>
<div class="line"><a id="l00675" name="l00675"></a><span class="lineno"> 675</span> <span class="keywordtype">int</span> groups_;</div>
<div class="line"><a id="l00676" name="l00676"></a><span class="lineno"> 676</span> <span class="keywordtype">bool</span> flip_;</div>
<div class="line"><a id="l00677" name="l00677"></a><span class="lineno"> 677</span> </div>
<div class="line"><a id="l00678" name="l00678"></a><span class="lineno"> 678</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00679" name="l00679"></a><span class="lineno"> 679</span>};</div>
</div>
<div class="line"><a id="l00680" name="l00680"></a><span class="lineno"> 680</span> </div>
<div class="foldopen" id="foldopen00681" data-start="{" data-end="};">
<div class="line"><a id="l00681" name="l00681"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_copy.html"> 681</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_copy.html">Copy</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00682" name="l00682"></a><span class="lineno"> 682</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00683" name="l00683"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_copy.html#a6243e044af119105ffaaed7d405cd584"> 683</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_copy.html#a6243e044af119105ffaaed7d405cd584">Copy</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l00684" name="l00684"></a><span class="lineno"> 684</span> </div>
<div class="line"><a id="l00685" name="l00685"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_copy.html#af4a0ebec423e84ffe8083a5e9ed0d70c"> 685</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_copy.html#af4a0ebec423e84ffe8083a5e9ed0d70c">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00686" name="l00686"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_copy.html#a1eda7b2ea771a168f67421f0d384b3a1"> 686</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_copy.html#a1eda7b2ea771a168f67421f0d384b3a1">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00687" name="l00687"></a><span class="lineno"> 687</span> </div>
<div class="line"><a id="l00688" name="l00688"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_copy.html#a669b10253c15b769d90058d1ad7d0e61"> 688</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00689" name="l00689"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_copy.html#a5acf02aa360cbefd86749fe9877b29cc"> 689</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l00690" name="l00690"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_copy.html#acfa1a02ab9cdab593e928faa515a8008"> 690</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_copy.html">Copy</a>)</div>
<div class="line"><a id="l00691" name="l00691"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_copy.html#afcfa39465015f638e294aa954ea0f3da"> 691</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l00692" name="l00692"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_copy.html#ac3d13ebc6464403962fa1a9897fe6df3"> 692</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l00693" name="l00693"></a><span class="lineno"> 693</span> </div>
<div class="line"><a id="l00694" name="l00694"></a><span class="lineno"> 694</span> private:</div>
<div class="line"><a id="l00695" name="l00695"></a><span class="lineno"> 695</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00696" name="l00696"></a><span class="lineno"> 696</span>};</div>
</div>
<div class="line"><a id="l00697" name="l00697"></a><span class="lineno"> 697</span> </div>
<div class="foldopen" id="foldopen00698" data-start="{" data-end="};">
<div class="line"><a id="l00698" name="l00698"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_cos.html"> 698</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_cos.html">Cos</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00699" name="l00699"></a><span class="lineno"> 699</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00700" name="l00700"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_cos.html#a2acb9fcf0901462189c476756fd99995"> 700</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_cos.html#a2acb9fcf0901462189c476756fd99995">Cos</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l00701" name="l00701"></a><span class="lineno"> 701</span> </div>
<div class="line"><a id="l00702" name="l00702"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_cos.html#a061fc446268fe56237ae6b20ccf78152"> 702</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_cos.html#a061fc446268fe56237ae6b20ccf78152">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00703" name="l00703"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_cos.html#a5ef41aafad595f6cdd8c535e36e12060"> 703</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_cos.html#a5ef41aafad595f6cdd8c535e36e12060">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00704" name="l00704"></a><span class="lineno"> 704</span> </div>
<div class="line"><a id="l00705" name="l00705"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_cos.html#aec9460daf0131156734013d03b230cd6"> 705</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00706" name="l00706"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_cos.html#a99dd0b7e4aa2c838b77736f1fd539ee1"> 706</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l00707" name="l00707"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_cos.html#a81858457e4bea931a4bc6f6e38b0f696"> 707</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_cos.html">Cos</a>)</div>
<div class="line"><a id="l00708" name="l00708"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_cos.html#ab611ca38c987915659f7ffcce0370417"> 708</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l00709" name="l00709"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_cos.html#a05b2d43942aa1d93a40c20ae8b90a25b"> 709</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l00710" name="l00710"></a><span class="lineno"> 710</span> </div>
<div class="line"><a id="l00711" name="l00711"></a><span class="lineno"> 711</span> private:</div>
<div class="line"><a id="l00712" name="l00712"></a><span class="lineno"> 712</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00713" name="l00713"></a><span class="lineno"> 713</span>};</div>
</div>
<div class="line"><a id="l00714" name="l00714"></a><span class="lineno"> 714</span> </div>
<div class="foldopen" id="foldopen00715" data-start="{" data-end="};">
<div class="line"><a id="l00715" name="l00715"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_cosh.html"> 715</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_cosh.html">Cosh</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00716" name="l00716"></a><span class="lineno"> 716</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00717" name="l00717"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_cosh.html#a44e8ac2e09a55ec32e9dc6641eedc8f1"> 717</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_cosh.html#a44e8ac2e09a55ec32e9dc6641eedc8f1">Cosh</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l00718" name="l00718"></a><span class="lineno"> 718</span> </div>
<div class="line"><a id="l00719" name="l00719"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_cosh.html#ae8702df7e8f0e20cbeccb2a548961d3d"> 719</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_cosh.html#ae8702df7e8f0e20cbeccb2a548961d3d">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00720" name="l00720"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_cosh.html#a23f71b43792934c3ec0ebe9b74f32559"> 720</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_cosh.html#a23f71b43792934c3ec0ebe9b74f32559">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00721" name="l00721"></a><span class="lineno"> 721</span> </div>
<div class="line"><a id="l00722" name="l00722"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_cosh.html#a1ab2386e7d96219b6e4a525f7dac0406"> 722</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00723" name="l00723"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_cosh.html#a79facb0882443533f36a0a18407f5863"> 723</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l00724" name="l00724"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_cosh.html#ac247faad68c1050cda9f72d7d6d040e2"> 724</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_cosh.html">Cosh</a>)</div>
<div class="line"><a id="l00725" name="l00725"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_cosh.html#ae0bacccaf501f5349db0c13cca776ff9"> 725</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l00726" name="l00726"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_cosh.html#a1bef7feac9a387ea80e7fc774f579962"> 726</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l00727" name="l00727"></a><span class="lineno"> 727</span> </div>
<div class="line"><a id="l00728" name="l00728"></a><span class="lineno"> 728</span> private:</div>
<div class="line"><a id="l00729" name="l00729"></a><span class="lineno"> 729</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00730" name="l00730"></a><span class="lineno"> 730</span>};</div>
</div>
<div class="line"><a id="l00731" name="l00731"></a><span class="lineno"> 731</span> </div>
<div class="foldopen" id="foldopen00732" data-start="{" data-end="};">
<div class="line"><a id="l00732" name="l00732"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_custom_transforms.html"> 732</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_custom_transforms.html">CustomTransforms</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a> {</div>
<div class="line"><a id="l00733" name="l00733"></a><span class="lineno"> 733</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen00734" data-start="{" data-end="}">
<div class="line"><a id="l00734" name="l00734"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_custom_transforms.html#ab52abadb9c6f6db83d087c7b751be488"> 734</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_custom_transforms.html#ab52abadb9c6f6db83d087c7b751be488">CustomTransforms</a>(</div>
<div class="line"><a id="l00735" name="l00735"></a><span class="lineno"> 735</span> <a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream,</div>
<div class="line"><a id="l00736" name="l00736"></a><span class="lineno"> 736</span> <span class="keywordtype">int</span> num_outputs,</div>
<div class="line"><a id="l00737" name="l00737"></a><span class="lineno"> 737</span> std::function&lt;std::vector&lt;array&gt;(</div>
<div class="line"><a id="l00738" name="l00738"></a><span class="lineno"> 738</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp;,</div>
<div class="line"><a id="l00739" name="l00739"></a><span class="lineno"> 739</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp;,</div>
<div class="line"><a id="l00740" name="l00740"></a><span class="lineno"> 740</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp;)&gt; vjp,</div>
<div class="line"><a id="l00741" name="l00741"></a><span class="lineno"> 741</span> std::function&lt;std::vector&lt;array&gt;(</div>
<div class="line"><a id="l00742" name="l00742"></a><span class="lineno"> 742</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp;,</div>
<div class="line"><a id="l00743" name="l00743"></a><span class="lineno"> 743</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp;,</div>
<div class="line"><a id="l00744" name="l00744"></a><span class="lineno"> 744</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp;)&gt; jvp,</div>
<div class="line"><a id="l00745" name="l00745"></a><span class="lineno"> 745</span> std::function&lt;std::pair&lt;std::vector&lt;array&gt;, std::vector&lt;int&gt;&gt;(</div>
<div class="line"><a id="l00746" name="l00746"></a><span class="lineno"> 746</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp;,</div>
<div class="line"><a id="l00747" name="l00747"></a><span class="lineno"> 747</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp;)&gt; vmap)</div>
<div class="line"><a id="l00748" name="l00748"></a><span class="lineno"> 748</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>(stream),</div>
<div class="line"><a id="l00749" name="l00749"></a><span class="lineno"> 749</span> num_outputs_(num_outputs),</div>
<div class="line"><a id="l00750" name="l00750"></a><span class="lineno"> 750</span> vjp_fun_(<a class="code hl_function" href="group__ops.html#ga2a466024f8061febc0a64be557644cb0">std</a>::move(<a class="code hl_function" href="namespacemlx_1_1core.html#a1b33e2c2e3471420490cf0be2de6de18">vjp</a>)),</div>
<div class="line"><a id="l00751" name="l00751"></a><span class="lineno"> 751</span> jvp_fun_(<a class="code hl_function" href="group__ops.html#ga2a466024f8061febc0a64be557644cb0">std</a>::move(<a class="code hl_function" href="namespacemlx_1_1core.html#a179a632200366c223d6ab56d3e032592">jvp</a>)),</div>
<div class="line"><a id="l00752" name="l00752"></a><span class="lineno"> 752</span> vmap_fun_(<a class="code hl_function" href="group__ops.html#ga2a466024f8061febc0a64be557644cb0">std</a>::move(<a class="code hl_variable" href="namespacemlx_1_1core.html#a933289d4688479e1c4d8ba04332c406b">vmap</a>)) {}</div>
</div>
<div class="line"><a id="l00753" name="l00753"></a><span class="lineno"> 753</span> </div>
<div class="line"><a id="l00754" name="l00754"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_custom_transforms.html#adba1c40c77a2138df6b5f75483f62184"> 754</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_custom_transforms.html#adba1c40c77a2138df6b5f75483f62184">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, std::vector&lt;array&gt;&amp; outputs)</div>
<div class="line"><a id="l00755" name="l00755"></a><span class="lineno"> 755</span> <span class="keyword">override</span>;</div>
<div class="line"><a id="l00756" name="l00756"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_custom_transforms.html#a7b3538681acbb20af3ed37b0877f6667"> 756</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_custom_transforms.html#a7b3538681acbb20af3ed37b0877f6667">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, std::vector&lt;array&gt;&amp; outputs)</div>
<div class="line"><a id="l00757" name="l00757"></a><span class="lineno"> 757</span> <span class="keyword">override</span>;</div>
<div class="line"><a id="l00758" name="l00758"></a><span class="lineno"> 758</span> </div>
<div class="line"><a id="l00759" name="l00759"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_custom_transforms.html#aa9f695100170d5cae999b3da138ce720"> 759</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>();</div>
<div class="line"><a id="l00760" name="l00760"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_custom_transforms.html#a906a2ff30d9c5281fbf1fa927e4c021b"> 760</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>();</div>
<div class="line"><a id="l00761" name="l00761"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_custom_transforms.html#a2ddbacbc468271b11caee0ad97005298"> 761</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_custom_transforms.html">CustomTransforms</a>);</div>
<div class="line"><a id="l00762" name="l00762"></a><span class="lineno"> 762</span> </div>
<div class="line"><a id="l00763" name="l00763"></a><span class="lineno"> 763</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00764" name="l00764"></a><span class="lineno"> 764</span> <span class="keywordtype">void</span> <a class="code hl_function" href="namespacemlx_1_1core.html#a7d6e097d8effed52f4713672e471f299">eval</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, std::vector&lt;array&gt;&amp; outputs);</div>
<div class="line"><a id="l00765" name="l00765"></a><span class="lineno"> 765</span> </div>
<div class="line"><a id="l00766" name="l00766"></a><span class="lineno"> 766</span> <span class="keywordtype">int</span> num_outputs_;</div>
<div class="line"><a id="l00767" name="l00767"></a><span class="lineno"> 767</span> </div>
<div class="line"><a id="l00768" name="l00768"></a><span class="lineno"> 768</span> std::function&lt;std::vector&lt;array&gt;(</div>
<div class="line"><a id="l00769" name="l00769"></a><span class="lineno"> 769</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp;,</div>
<div class="line"><a id="l00770" name="l00770"></a><span class="lineno"> 770</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp;,</div>
<div class="line"><a id="l00771" name="l00771"></a><span class="lineno"> 771</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp;)&gt;</div>
<div class="line"><a id="l00772" name="l00772"></a><span class="lineno"> 772</span> vjp_fun_;</div>
<div class="line"><a id="l00773" name="l00773"></a><span class="lineno"> 773</span> std::function&lt;std::vector&lt;array&gt;(</div>
<div class="line"><a id="l00774" name="l00774"></a><span class="lineno"> 774</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp;,</div>
<div class="line"><a id="l00775" name="l00775"></a><span class="lineno"> 775</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp;,</div>
<div class="line"><a id="l00776" name="l00776"></a><span class="lineno"> 776</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp;)&gt;</div>
<div class="line"><a id="l00777" name="l00777"></a><span class="lineno"> 777</span> jvp_fun_;</div>
<div class="line"><a id="l00778" name="l00778"></a><span class="lineno"> 778</span> std::function&lt;std::pair&lt;std::vector&lt;array&gt;, std::vector&lt;int&gt;&gt;(</div>
<div class="line"><a id="l00779" name="l00779"></a><span class="lineno"> 779</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp;,</div>
<div class="line"><a id="l00780" name="l00780"></a><span class="lineno"> 780</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp;)&gt;</div>
<div class="line"><a id="l00781" name="l00781"></a><span class="lineno"> 781</span> vmap_fun_;</div>
<div class="line"><a id="l00782" name="l00782"></a><span class="lineno"> 782</span>};</div>
</div>
<div class="line"><a id="l00783" name="l00783"></a><span class="lineno"> 783</span> </div>
<div class="foldopen" id="foldopen00784" data-start="{" data-end="};">
<div class="line"><a id="l00784" name="l00784"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_depends.html"> 784</a></span><span class="keyword">class </span><a class="code hl_class" href="classmlx_1_1core_1_1_depends.html">Depends</a> : <span class="keyword">public</span> <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a> {</div>
<div class="line"><a id="l00785" name="l00785"></a><span class="lineno"> 785</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00786" name="l00786"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_depends.html#a4ccb792c99f5d8d133d3fac29f7d3f62"> 786</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_depends.html#a4ccb792c99f5d8d133d3fac29f7d3f62">Depends</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>(stream) {}</div>
<div class="line"><a id="l00787" name="l00787"></a><span class="lineno"> 787</span> </div>
<div class="line"><a id="l00788" name="l00788"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_depends.html#a0c7ea6db97337591fa53c6e6bde41e5e"> 788</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_depends.html#a0c7ea6db97337591fa53c6e6bde41e5e">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, std::vector&lt;array&gt;&amp; outputs)</div>
<div class="line"><a id="l00789" name="l00789"></a><span class="lineno"> 789</span> <span class="keyword">override</span>;</div>
<div class="line"><a id="l00790" name="l00790"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_depends.html#ae5057f65e69490ad0add8eeda2b75e28"> 790</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_depends.html#ae5057f65e69490ad0add8eeda2b75e28">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, std::vector&lt;array&gt;&amp; outputs)</div>
<div class="line"><a id="l00791" name="l00791"></a><span class="lineno"> 791</span> <span class="keyword">override</span>;</div>
<div class="line"><a id="l00792" name="l00792"></a><span class="lineno"> 792</span> </div>
<div class="line"><a id="l00793" name="l00793"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_depends.html#a02996fa45f01f7cb9f37074d5f8ccab0"> 793</a></span> std::vector&lt;array&gt; <a class="code hl_function" href="classmlx_1_1core_1_1_depends.html#a02996fa45f01f7cb9f37074d5f8ccab0">vjp</a>(</div>
<div class="line"><a id="l00794" name="l00794"></a><span class="lineno"> 794</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; primals,</div>
<div class="line"><a id="l00795" name="l00795"></a><span class="lineno"> 795</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; cotan,</div>
<div class="line"><a id="l00796" name="l00796"></a><span class="lineno"> 796</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; argnums,</div>
<div class="line"><a id="l00797" name="l00797"></a><span class="lineno"> 797</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; outputs) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00798" name="l00798"></a><span class="lineno"> 798</span> </div>
<div class="line"><a id="l00799" name="l00799"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_depends.html#aed575b0d927f4341f60442c70adeeb82"> 799</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_depends.html">Depends</a>);</div>
<div class="line"><a id="l00800" name="l00800"></a><span class="lineno"> 800</span> </div>
<div class="line"><a id="l00801" name="l00801"></a><span class="lineno"> 801</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00802" name="l00802"></a><span class="lineno"> 802</span> <span class="keywordtype">void</span> <a class="code hl_function" href="namespacemlx_1_1core.html#a7d6e097d8effed52f4713672e471f299">eval</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, std::vector&lt;array&gt;&amp; outputs);</div>
<div class="line"><a id="l00803" name="l00803"></a><span class="lineno"> 803</span>};</div>
</div>
<div class="line"><a id="l00804" name="l00804"></a><span class="lineno"> 804</span> </div>
<div class="foldopen" id="foldopen00805" data-start="{" data-end="};">
<div class="line"><a id="l00805" name="l00805"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_divide.html"> 805</a></span><span class="keyword">class </span><a class="code hl_class" href="classmlx_1_1core_1_1_divide.html">Divide</a> : <span class="keyword">public</span> <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00806" name="l00806"></a><span class="lineno"> 806</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00807" name="l00807"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_divide.html#a62fc71e8998be65ff18285dbbd21eedb"> 807</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_divide.html#a62fc71e8998be65ff18285dbbd21eedb">Divide</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l00808" name="l00808"></a><span class="lineno"> 808</span> </div>
<div class="line"><a id="l00809" name="l00809"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_divide.html#a823443c2a8e8b81bbcaeee6ddbcdbf49"> 809</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_divide.html#a823443c2a8e8b81bbcaeee6ddbcdbf49">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00810" name="l00810"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_divide.html#abffda0ce37221ddc28dc9eea794f6bc7"> 810</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_divide.html#abffda0ce37221ddc28dc9eea794f6bc7">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00811" name="l00811"></a><span class="lineno"> 811</span> </div>
<div class="line"><a id="l00812" name="l00812"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_divide.html#a83e7da52831165b3a026e97b63770242"> 812</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00813" name="l00813"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_divide.html#ae1f408c447b17b3c84fe7f951d95559c"> 813</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l00814" name="l00814"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_divide.html#af3c15337ac15522cc34ed98b97895bb6"> 814</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_divide.html">Divide</a>)</div>
<div class="line"><a id="l00815" name="l00815"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_divide.html#a3dda091f05c4164c29bb8129e9712650"> 815</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l00816" name="l00816"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_divide.html#ad514bed77ad94742e26c93e446940994"> 816</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l00817" name="l00817"></a><span class="lineno"> 817</span> </div>
<div class="line"><a id="l00818" name="l00818"></a><span class="lineno"> 818</span> private:</div>
<div class="line"><a id="l00819" name="l00819"></a><span class="lineno"> 819</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00820" name="l00820"></a><span class="lineno"> 820</span>};</div>
</div>
<div class="line"><a id="l00821" name="l00821"></a><span class="lineno"> 821</span> </div>
<div class="foldopen" id="foldopen00822" data-start="{" data-end="};">
<div class="line"><a id="l00822" name="l00822"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_div_mod.html"> 822</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_div_mod.html">DivMod</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a> {</div>
<div class="line"><a id="l00823" name="l00823"></a><span class="lineno"> 823</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00824" name="l00824"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_div_mod.html#a859e3b6149cdceab1c7ccfd2246fb826"> 824</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_div_mod.html#a859e3b6149cdceab1c7ccfd2246fb826">DivMod</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>(stream) {}</div>
<div class="line"><a id="l00825" name="l00825"></a><span class="lineno"> 825</span> </div>
<div class="line"><a id="l00826" name="l00826"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_div_mod.html#ae350b7b93ad128e3133ee14f247193b3"> 826</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_div_mod.html#ae350b7b93ad128e3133ee14f247193b3">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, std::vector&lt;array&gt;&amp; outputs)</div>
<div class="line"><a id="l00827" name="l00827"></a><span class="lineno"> 827</span> <span class="keyword">override</span>;</div>
<div class="line"><a id="l00828" name="l00828"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_div_mod.html#a003117c9ecf3c06a27248f72a76348dc"> 828</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_div_mod.html#a003117c9ecf3c06a27248f72a76348dc">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, std::vector&lt;array&gt;&amp; outputs)</div>
<div class="line"><a id="l00829" name="l00829"></a><span class="lineno"> 829</span> <span class="keyword">override</span>;</div>
<div class="line"><a id="l00830" name="l00830"></a><span class="lineno"> 830</span> </div>
<div class="line"><a id="l00831" name="l00831"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_div_mod.html#ae709e0fdd83994bd1d156e0d0e6a7942"> 831</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00832" name="l00832"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_div_mod.html#a1267401f25f25847888dd0a00b3fe3b9"> 832</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l00833" name="l00833"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_div_mod.html#a7edbed50d07869d921e529157931b7a1"> 833</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_div_mod.html">DivMod</a>)</div>
<div class="line"><a id="l00834" name="l00834"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_div_mod.html#af5fcf8ec8515d46844cbeeab6dafb38a"> 834</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="foldopen" id="foldopen00835" data-start="{" data-end="}">
<div class="line"><a id="l00835" name="l00835"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_div_mod.html#a61d835d777c8063089dc708898ff314b"> 835</a></span> std::vector&lt;std::vector&lt;<span class="keywordtype">int</span>&gt;&gt; output_shapes(</div>
<div class="line"><a id="l00836" name="l00836"></a><span class="lineno"> 836</span> const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs)<span class="keyword"> override </span>{</div>
<div class="line"><a id="l00837" name="l00837"></a><span class="lineno"> 837</span> <span class="keywordflow">return</span> std::vector{inputs[0].shape(), inputs[0].shape()};</div>
<div class="line"><a id="l00838" name="l00838"></a><span class="lineno"> 838</span> }</div>
</div>
<div class="line"><a id="l00839" name="l00839"></a><span class="lineno"> 839</span> </div>
<div class="line"><a id="l00840" name="l00840"></a><span class="lineno"> 840</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00841" name="l00841"></a><span class="lineno"> 841</span> <span class="keywordtype">void</span> <a class="code hl_function" href="namespacemlx_1_1core.html#a7d6e097d8effed52f4713672e471f299">eval</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, std::vector&lt;array&gt;&amp; outputs);</div>
<div class="line"><a id="l00842" name="l00842"></a><span class="lineno"> 842</span>};</div>
</div>
<div class="line"><a id="l00843" name="l00843"></a><span class="lineno"> 843</span> </div>
<div class="foldopen" id="foldopen00844" data-start="{" data-end="};">
<div class="line"><a id="l00844" name="l00844"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_select.html"> 844</a></span><span class="keyword">class </span><a class="code hl_class" href="classmlx_1_1core_1_1_select.html">Select</a> : <span class="keyword">public</span> <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00845" name="l00845"></a><span class="lineno"> 845</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00846" name="l00846"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_select.html#a6f833fe55dd68ad3726bbf9a8f75eec9"> 846</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_select.html#a6f833fe55dd68ad3726bbf9a8f75eec9">Select</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l00847" name="l00847"></a><span class="lineno"> 847</span> </div>
<div class="line"><a id="l00848" name="l00848"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_select.html#aa51aa36e0adbd69e0d23d7c7adf88de2"> 848</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_select.html#aa51aa36e0adbd69e0d23d7c7adf88de2">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00849" name="l00849"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_select.html#a2a82b6cba4c386b2b87f225a4b08ea9b"> 849</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_select.html#a2a82b6cba4c386b2b87f225a4b08ea9b">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00850" name="l00850"></a><span class="lineno"> 850</span> </div>
<div class="line"><a id="l00851" name="l00851"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_select.html#a84e80361c8cf02536b4b98098793550f"> 851</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00852" name="l00852"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_select.html#a172df6812c2ea3e9d3c3fc5d527548d6"> 852</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l00853" name="l00853"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_select.html#a678285f2c0b9dae85692399c3aa692a7"> 853</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_select.html">Select</a>)</div>
<div class="line"><a id="l00854" name="l00854"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_select.html#afc3c333fac7f902c98839921ef2874c8"> 854</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l00855" name="l00855"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_select.html#a295cd22e2284f2216bc93fdcf0b54867"> 855</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l00856" name="l00856"></a><span class="lineno"> 856</span> </div>
<div class="line"><a id="l00857" name="l00857"></a><span class="lineno"> 857</span> private:</div>
<div class="line"><a id="l00858" name="l00858"></a><span class="lineno"> 858</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00859" name="l00859"></a><span class="lineno"> 859</span>};</div>
</div>
<div class="line"><a id="l00860" name="l00860"></a><span class="lineno"> 860</span> </div>
<div class="foldopen" id="foldopen00861" data-start="{" data-end="};">
<div class="line"><a id="l00861" name="l00861"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_remainder.html"> 861</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_remainder.html">Remainder</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00862" name="l00862"></a><span class="lineno"> 862</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00863" name="l00863"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_remainder.html#a4f3eada4a21898af4a77d1d27ce14641"> 863</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_remainder.html#a4f3eada4a21898af4a77d1d27ce14641">Remainder</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l00864" name="l00864"></a><span class="lineno"> 864</span> </div>
<div class="line"><a id="l00865" name="l00865"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_remainder.html#ac6c6c86a0bf02e6e529eb87f6e617ccc"> 865</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_remainder.html#ac6c6c86a0bf02e6e529eb87f6e617ccc">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00866" name="l00866"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_remainder.html#a7919ea9b84e42522d51bf0d5a396e161"> 866</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_remainder.html#a7919ea9b84e42522d51bf0d5a396e161">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00867" name="l00867"></a><span class="lineno"> 867</span> </div>
<div class="line"><a id="l00868" name="l00868"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_remainder.html#a79867e1099a2e3c2d3e87407b2ab6e3d"> 868</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00869" name="l00869"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_remainder.html#a972002173fc00ee86029d12bf1a9ba79"> 869</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l00870" name="l00870"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_remainder.html#aeaecac5ea8e606d7ecd393d8019029e4"> 870</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_remainder.html">Remainder</a>)</div>
<div class="line"><a id="l00871" name="l00871"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_remainder.html#a802039faaa2ed7b763ec3d7debcce814"> 871</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l00872" name="l00872"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_remainder.html#a74bf3a9723b59200573ff8bac9a0b666"> 872</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l00873" name="l00873"></a><span class="lineno"> 873</span> </div>
<div class="line"><a id="l00874" name="l00874"></a><span class="lineno"> 874</span> private:</div>
<div class="line"><a id="l00875" name="l00875"></a><span class="lineno"> 875</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00876" name="l00876"></a><span class="lineno"> 876</span>};</div>
</div>
<div class="line"><a id="l00877" name="l00877"></a><span class="lineno"> 877</span> </div>
<div class="foldopen" id="foldopen00878" data-start="{" data-end="};">
<div class="line"><a id="l00878" name="l00878"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_equal.html"> 878</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_equal.html">Equal</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00879" name="l00879"></a><span class="lineno"> 879</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen00880" data-start="{" data-end="}">
<div class="line"><a id="l00880" name="l00880"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_equal.html#a4af81cf2dd071db5bbf8ce1df95fdf36"> 880</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_equal.html#a4af81cf2dd071db5bbf8ce1df95fdf36">Equal</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream, <span class="keywordtype">bool</span> equal_nan = <span class="keyword">false</span>)</div>
<div class="line"><a id="l00881" name="l00881"></a><span class="lineno"> 881</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream), equal_nan_(equal_nan) {}</div>
</div>
<div class="line"><a id="l00882" name="l00882"></a><span class="lineno"> 882</span> </div>
<div class="line"><a id="l00883" name="l00883"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_equal.html#aabb8aa61fa581defddcdca1274b1b454"> 883</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_equal.html#aabb8aa61fa581defddcdca1274b1b454">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00884" name="l00884"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_equal.html#ac3757001fec42ceb5ece2954df42161c"> 884</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_equal.html#ac3757001fec42ceb5ece2954df42161c">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00885" name="l00885"></a><span class="lineno"> 885</span> </div>
<div class="line"><a id="l00886" name="l00886"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_equal.html#aea9cc3c88924ac824d72c39c2e83b0ca"> 886</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00887" name="l00887"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_equal.html#a659d484589d7cd96d038922a1a98730f"> 887</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l00888" name="l00888"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_equal.html#a58c1c5003e43f47dc0788c1851deaa02"> 888</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l00889" name="l00889"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_equal.html#a2f91e9603f63ad539837356b1ff3e7a9"> 889</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l00890" name="l00890"></a><span class="lineno"> 890</span> </div>
<div class="foldopen" id="foldopen00891" data-start="{" data-end="}">
<div class="line"><a id="l00891" name="l00891"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_equal.html#a0787bf32f0b405a8b2ac809d2d990774"> 891</a></span> <span class="keywordtype">void</span> print(std::ostream&amp; os)<span class="keyword"> override </span>{</div>
<div class="line"><a id="l00892" name="l00892"></a><span class="lineno"> 892</span> <span class="keywordflow">if</span> (equal_nan_) {</div>
<div class="line"><a id="l00893" name="l00893"></a><span class="lineno"> 893</span> os &lt;&lt; <span class="stringliteral">&quot;NaNEqual&quot;</span>;</div>
<div class="line"><a id="l00894" name="l00894"></a><span class="lineno"> 894</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00895" name="l00895"></a><span class="lineno"> 895</span> os &lt;&lt; <span class="stringliteral">&quot;Equal&quot;</span>;</div>
<div class="line"><a id="l00896" name="l00896"></a><span class="lineno"> 896</span> }</div>
<div class="line"><a id="l00897" name="l00897"></a><span class="lineno"> 897</span> }</div>
</div>
<div class="line"><a id="l00898" name="l00898"></a><span class="lineno"> 898</span> </div>
<div class="line"><a id="l00899" name="l00899"></a><span class="lineno"> 899</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00900" name="l00900"></a><span class="lineno"> 900</span> <span class="keywordtype">void</span> <a class="code hl_function" href="namespacemlx_1_1core.html#a7d6e097d8effed52f4713672e471f299">eval</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00901" name="l00901"></a><span class="lineno"> 901</span> <span class="keywordtype">bool</span> equal_nan_;</div>
<div class="line"><a id="l00902" name="l00902"></a><span class="lineno"> 902</span>};</div>
</div>
<div class="line"><a id="l00903" name="l00903"></a><span class="lineno"> 903</span> </div>
<div class="foldopen" id="foldopen00904" data-start="{" data-end="};">
<div class="line"><a id="l00904" name="l00904"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_erf.html"> 904</a></span><span class="keyword">class </span><a class="code hl_class" href="classmlx_1_1core_1_1_erf.html">Erf</a> : <span class="keyword">public</span> <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00905" name="l00905"></a><span class="lineno"> 905</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00906" name="l00906"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_erf.html#a702f76f848928d8d7d3d0881ac6e4c82"> 906</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_erf.html#a702f76f848928d8d7d3d0881ac6e4c82">Erf</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l00907" name="l00907"></a><span class="lineno"> 907</span> </div>
<div class="line"><a id="l00908" name="l00908"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_erf.html#a84ea16e43d5b7f83bbc2d5ece78a3fb6"> 908</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_erf.html#a84ea16e43d5b7f83bbc2d5ece78a3fb6">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00909" name="l00909"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_erf.html#ad8551be664d767dccc3c0d8cc1eca008"> 909</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_erf.html#ad8551be664d767dccc3c0d8cc1eca008">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00910" name="l00910"></a><span class="lineno"> 910</span> </div>
<div class="line"><a id="l00911" name="l00911"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_erf.html#abe554f553356654a3e800ba368108aaa"> 911</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00912" name="l00912"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_erf.html#ac733d605d80277d613954794eb8c46fe"> 912</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l00913" name="l00913"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_erf.html#a186af7b783cf832c3b25eec3a09f5a0c"> 913</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_erf.html">Erf</a>)</div>
<div class="line"><a id="l00914" name="l00914"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_erf.html#abe99dfbc2954c3a7d5dec56ab165ee82"> 914</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l00915" name="l00915"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_erf.html#afa4abbd7786b474c44c336a95481d187"> 915</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l00916" name="l00916"></a><span class="lineno"> 916</span> </div>
<div class="line"><a id="l00917" name="l00917"></a><span class="lineno"> 917</span> private:</div>
<div class="line"><a id="l00918" name="l00918"></a><span class="lineno"> 918</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00919" name="l00919"></a><span class="lineno"> 919</span>};</div>
</div>
<div class="line"><a id="l00920" name="l00920"></a><span class="lineno"> 920</span> </div>
<div class="foldopen" id="foldopen00921" data-start="{" data-end="};">
<div class="line"><a id="l00921" name="l00921"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_erf_inv.html"> 921</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_erf_inv.html">ErfInv</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00922" name="l00922"></a><span class="lineno"> 922</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00923" name="l00923"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_erf_inv.html#a5d0279247b67da4592311559f04e1478"> 923</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_erf_inv.html#a5d0279247b67da4592311559f04e1478">ErfInv</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l00924" name="l00924"></a><span class="lineno"> 924</span> </div>
<div class="line"><a id="l00925" name="l00925"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_erf_inv.html#af579627402af3249565134884701d39e"> 925</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_erf_inv.html#af579627402af3249565134884701d39e">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00926" name="l00926"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_erf_inv.html#a4a2413d0634db1f3dae1806ddfa632db"> 926</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_erf_inv.html#a4a2413d0634db1f3dae1806ddfa632db">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00927" name="l00927"></a><span class="lineno"> 927</span> </div>
<div class="line"><a id="l00928" name="l00928"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_erf_inv.html#ad5d7634e8568af8cc4a54a558a48d0e9"> 928</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00929" name="l00929"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_erf_inv.html#aa52710297ab6f7cd6826418c303e64be"> 929</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l00930" name="l00930"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_erf_inv.html#a0acb31bd5780abf61877bd1a3e0fd4f9"> 930</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_erf_inv.html">ErfInv</a>)</div>
<div class="line"><a id="l00931" name="l00931"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_erf_inv.html#aaac9e3b454ba564f9c6e804ab6562832"> 931</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l00932" name="l00932"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_erf_inv.html#a22a95594e68b43b50c05355c82779639"> 932</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l00933" name="l00933"></a><span class="lineno"> 933</span> </div>
<div class="line"><a id="l00934" name="l00934"></a><span class="lineno"> 934</span> private:</div>
<div class="line"><a id="l00935" name="l00935"></a><span class="lineno"> 935</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00936" name="l00936"></a><span class="lineno"> 936</span>};</div>
</div>
<div class="line"><a id="l00937" name="l00937"></a><span class="lineno"> 937</span> </div>
<div class="foldopen" id="foldopen00938" data-start="{" data-end="};">
<div class="line"><a id="l00938" name="l00938"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_exp.html"> 938</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_exp.html">Exp</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00939" name="l00939"></a><span class="lineno"> 939</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00940" name="l00940"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_exp.html#a1d0a618cbb91ab29ef53b57ff6ed6e06"> 940</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_exp.html#a1d0a618cbb91ab29ef53b57ff6ed6e06">Exp</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l00941" name="l00941"></a><span class="lineno"> 941</span> </div>
<div class="line"><a id="l00942" name="l00942"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_exp.html#a47934c5a5023bc7ae7ae89bff45ebb2c"> 942</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_exp.html#a47934c5a5023bc7ae7ae89bff45ebb2c">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00943" name="l00943"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_exp.html#a7d63695a97a14760fd33b5d4e6590822"> 943</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_exp.html#a7d63695a97a14760fd33b5d4e6590822">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00944" name="l00944"></a><span class="lineno"> 944</span> </div>
<div class="line"><a id="l00945" name="l00945"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_exp.html#a0fcd579fe148b4c3dbc72e514b81bb37"> 945</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00946" name="l00946"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_exp.html#aef6721832fcc283b082e35a7d436fa59"> 946</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l00947" name="l00947"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_exp.html#ad87cc1b2ae595a613b03b0fdca63ae6a"> 947</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_exp.html">Exp</a>)</div>
<div class="line"><a id="l00948" name="l00948"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_exp.html#ac6e44bffe7a643ab4ca51e74c7328357"> 948</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l00949" name="l00949"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_exp.html#aee7ba8d5be4a11f4b8f359b0338ab670"> 949</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l00950" name="l00950"></a><span class="lineno"> 950</span> </div>
<div class="line"><a id="l00951" name="l00951"></a><span class="lineno"> 951</span> private:</div>
<div class="line"><a id="l00952" name="l00952"></a><span class="lineno"> 952</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00953" name="l00953"></a><span class="lineno"> 953</span>};</div>
</div>
<div class="line"><a id="l00954" name="l00954"></a><span class="lineno"> 954</span> </div>
<div class="foldopen" id="foldopen00955" data-start="{" data-end="};">
<div class="line"><a id="l00955" name="l00955"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_expm1.html"> 955</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_expm1.html">Expm1</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00956" name="l00956"></a><span class="lineno"> 956</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00957" name="l00957"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_expm1.html#a47c2a1b2a4ef6bb07ba77c55ddddaec2"> 957</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_expm1.html#a47c2a1b2a4ef6bb07ba77c55ddddaec2">Expm1</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l00958" name="l00958"></a><span class="lineno"> 958</span> </div>
<div class="line"><a id="l00959" name="l00959"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_expm1.html#ab9c8b7aa50fe4592d55f8957baac647a"> 959</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_expm1.html#ab9c8b7aa50fe4592d55f8957baac647a">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00960" name="l00960"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_expm1.html#a82930071f4b77d883b300f77966aff5f"> 960</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_expm1.html#a82930071f4b77d883b300f77966aff5f">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00961" name="l00961"></a><span class="lineno"> 961</span> </div>
<div class="line"><a id="l00962" name="l00962"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_expm1.html#aa4caa848b2ea97e71ee3dd33de039296"> 962</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00963" name="l00963"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_expm1.html#ad463730632a00945d3a8addfdaec67b1"> 963</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l00964" name="l00964"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_expm1.html#af1a99266fc50aa5948cdd298e2916ef1"> 964</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_expm1.html">Expm1</a>)</div>
<div class="line"><a id="l00965" name="l00965"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_expm1.html#ab9dbf34806eb43b928722ed9e8feed08"> 965</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l00966" name="l00966"></a><span class="lineno"> 966</span> </div>
<div class="line"><a id="l00967" name="l00967"></a><span class="lineno"> 967</span> private:</div>
<div class="line"><a id="l00968" name="l00968"></a><span class="lineno"> 968</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00969" name="l00969"></a><span class="lineno"> 969</span>};</div>
</div>
<div class="line"><a id="l00970" name="l00970"></a><span class="lineno"> 970</span> </div>
<div class="foldopen" id="foldopen00971" data-start="{" data-end="};">
<div class="line"><a id="l00971" name="l00971"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_f_f_t.html"> 971</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_f_f_t.html">FFT</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00972" name="l00972"></a><span class="lineno"> 972</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen00973" data-start="{" data-end="}">
<div class="line"><a id="l00973" name="l00973"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_f_f_t.html#a0cdce626ed2c8eeeecc6949418437839"> 973</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_f_f_t.html#a0cdce626ed2c8eeeecc6949418437839">FFT</a>(</div>
<div class="line"><a id="l00974" name="l00974"></a><span class="lineno"> 974</span> <a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream,</div>
<div class="line"><a id="l00975" name="l00975"></a><span class="lineno"> 975</span> <span class="keyword">const</span> std::vector&lt;size_t&gt;&amp; axes,</div>
<div class="line"><a id="l00976" name="l00976"></a><span class="lineno"> 976</span> <span class="keywordtype">bool</span> inverse,</div>
<div class="line"><a id="l00977" name="l00977"></a><span class="lineno"> 977</span> <span class="keywordtype">bool</span> real)</div>
<div class="line"><a id="l00978" name="l00978"></a><span class="lineno"> 978</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream), axes_(axes), inverse_(inverse), real_(real) {}</div>
</div>
<div class="line"><a id="l00979" name="l00979"></a><span class="lineno"> 979</span> </div>
<div class="line"><a id="l00980" name="l00980"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_f_f_t.html#a6bc262a0c2b5d4fe655e3e2e0ff28635"> 980</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_f_f_t.html#a6bc262a0c2b5d4fe655e3e2e0ff28635">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00981" name="l00981"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_f_f_t.html#a1c21b26d1e9ad7c4da78ae845721b2dd"> 981</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_f_f_t.html#a1c21b26d1e9ad7c4da78ae845721b2dd">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00982" name="l00982"></a><span class="lineno"> 982</span> </div>
<div class="line"><a id="l00983" name="l00983"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_f_f_t.html#ac32d6cc9b67289124f855ea68a61ede1"> 983</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l00984" name="l00984"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_f_f_t.html#a34578814b6576f7b7b447541984ecba6"> 984</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l00985" name="l00985"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_f_f_t.html#a15a2a5f7647f5fb78611a251d3270edf"> 985</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_f_f_t.html">FFT</a>)</div>
<div class="line"><a id="l00986" name="l00986"></a><span class="lineno"> 986</span> </div>
<div class="line"><a id="l00987" name="l00987"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_f_f_t.html#a0ede3bc8b6d77d560c0a750b68fddc06"> 987</a></span> <span class="keywordtype">bool</span> is_equivalent(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="line"><a id="l00988" name="l00988"></a><span class="lineno"> 988</span> </div>
<div class="line"><a id="l00989" name="l00989"></a><span class="lineno"> 989</span> private:</div>
<div class="line"><a id="l00990" name="l00990"></a><span class="lineno"> 990</span> std::vector&lt;<span class="keywordtype">size_t</span>&gt; axes_;</div>
<div class="line"><a id="l00991" name="l00991"></a><span class="lineno"> 991</span> <span class="keywordtype">bool</span> inverse_;</div>
<div class="line"><a id="l00992" name="l00992"></a><span class="lineno"> 992</span> <span class="keywordtype">bool</span> real_;</div>
<div class="line"><a id="l00993" name="l00993"></a><span class="lineno"> 993</span> </div>
<div class="line"><a id="l00994" name="l00994"></a><span class="lineno"> 994</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00995" name="l00995"></a><span class="lineno"> 995</span>};</div>
</div>
<div class="line"><a id="l00996" name="l00996"></a><span class="lineno"> 996</span> </div>
<div class="foldopen" id="foldopen00997" data-start="{" data-end="};">
<div class="line"><a id="l00997" name="l00997"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_floor.html"> 997</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_floor.html">Floor</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l00998" name="l00998"></a><span class="lineno"> 998</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00999" name="l00999"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_floor.html#ada4e979b784b732696313d7094e91340"> 999</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_floor.html#ada4e979b784b732696313d7094e91340">Floor</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l01000" name="l01000"></a><span class="lineno"> 1000</span> </div>
<div class="line"><a id="l01001" name="l01001"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_floor.html#a1a7dc5f571b7b73e7ef3cbdc1dd1fcf7"> 1001</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_floor.html#a1a7dc5f571b7b73e7ef3cbdc1dd1fcf7">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01002" name="l01002"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_floor.html#aaa29c83538099eb8f951c95a41f2eb65"> 1002</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_floor.html#aaa29c83538099eb8f951c95a41f2eb65">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01003" name="l01003"></a><span class="lineno"> 1003</span> </div>
<div class="line"><a id="l01004" name="l01004"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_floor.html#aea4dc79a65774990e775ad49519a5d10"> 1004</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01005" name="l01005"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_floor.html#aa47bc360ec563b6e7d93e8b50626d8af"> 1005</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01006" name="l01006"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_floor.html#ac289e87c5fac15e2f491e2513be610f6"> 1006</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_floor.html">Floor</a>)</div>
<div class="line"><a id="l01007" name="l01007"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_floor.html#a24b64feb026c4fcd02fc481cffdb1c94"> 1007</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l01008" name="l01008"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_floor.html#aaf86becc7bfba6ee2af0d1f6d8e25015"> 1008</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l01009" name="l01009"></a><span class="lineno"> 1009</span> </div>
<div class="line"><a id="l01010" name="l01010"></a><span class="lineno"> 1010</span> private:</div>
<div class="line"><a id="l01011" name="l01011"></a><span class="lineno"> 1011</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01012" name="l01012"></a><span class="lineno"> 1012</span>};</div>
</div>
<div class="line"><a id="l01013" name="l01013"></a><span class="lineno"> 1013</span> </div>
<div class="foldopen" id="foldopen01014" data-start="{" data-end="};">
<div class="line"><a id="l01014" name="l01014"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_full.html"> 1014</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_full.html">Full</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01015" name="l01015"></a><span class="lineno"> 1015</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l01016" name="l01016"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_full.html#aafcb86a2e41353853ec48c717e0c54d6"> 1016</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_full.html#aafcb86a2e41353853ec48c717e0c54d6">Full</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l01017" name="l01017"></a><span class="lineno"> 1017</span> </div>
<div class="line"><a id="l01018" name="l01018"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_full.html#a3dccd3756599d7fd018b2af0093b082c"> 1018</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_full.html#a3dccd3756599d7fd018b2af0093b082c">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01019" name="l01019"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_full.html#aa54f99bb4cba12a551392dea56003872"> 1019</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_full.html#aa54f99bb4cba12a551392dea56003872">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01020" name="l01020"></a><span class="lineno"> 1020</span> </div>
<div class="line"><a id="l01021" name="l01021"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_full.html#afc57ab6bd9ebdbbf042af54a59785d95"> 1021</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01022" name="l01022"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_full.html#a281a865d0664596ac8d05ea8e7f26407"> 1022</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01023" name="l01023"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_full.html#a68e08303f4960ab373b84a3312edc013"> 1023</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_full.html">Full</a>)</div>
<div class="line"><a id="l01024" name="l01024"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_full.html#afafcbcae1e28597fe8f7fde289105792"> 1024</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l01025" name="l01025"></a><span class="lineno"> 1025</span> </div>
<div class="line"><a id="l01026" name="l01026"></a><span class="lineno"> 1026</span> private:</div>
<div class="line"><a id="l01027" name="l01027"></a><span class="lineno"> 1027</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01028" name="l01028"></a><span class="lineno"> 1028</span>};</div>
</div>
<div class="line"><a id="l01029" name="l01029"></a><span class="lineno"> 1029</span> </div>
<div class="foldopen" id="foldopen01030" data-start="{" data-end="};">
<div class="line"><a id="l01030" name="l01030"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_gather.html"> 1030</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_gather.html">Gather</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01031" name="l01031"></a><span class="lineno"> 1031</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen01032" data-start="{" data-end="}">
<div class="line"><a id="l01032" name="l01032"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_gather.html#a5b5f47ceff1d43477c87be5116f261d0"> 1032</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_gather.html#a5b5f47ceff1d43477c87be5116f261d0">Gather</a>(</div>
<div class="line"><a id="l01033" name="l01033"></a><span class="lineno"> 1033</span> <a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream,</div>
<div class="line"><a id="l01034" name="l01034"></a><span class="lineno"> 1034</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; axes,</div>
<div class="line"><a id="l01035" name="l01035"></a><span class="lineno"> 1035</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; slice_sizes)</div>
<div class="line"><a id="l01036" name="l01036"></a><span class="lineno"> 1036</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream), axes_(axes), slice_sizes_(slice_sizes) {}</div>
</div>
<div class="line"><a id="l01037" name="l01037"></a><span class="lineno"> 1037</span> </div>
<div class="line"><a id="l01038" name="l01038"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_gather.html#a9ed5587f0d04b59a2b9186c0aac21290"> 1038</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_gather.html#a9ed5587f0d04b59a2b9186c0aac21290">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01039" name="l01039"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_gather.html#aec48ee529cb2449915a7b27a3c4361e8"> 1039</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_gather.html#aec48ee529cb2449915a7b27a3c4361e8">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01040" name="l01040"></a><span class="lineno"> 1040</span> </div>
<div class="line"><a id="l01041" name="l01041"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_gather.html#abab0c4c204e66489825ce80d2194a275"> 1041</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01042" name="l01042"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_gather.html#ac54ef8fac92ab190f1793f3dd95b9e8d"> 1042</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01043" name="l01043"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_gather.html#a9d57637a8a65008683c3847251bdcf91"> 1043</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_gather.html">Gather</a>)</div>
<div class="line"><a id="l01044" name="l01044"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_gather.html#a23ff1406dbf0c770e75ad47440b467aa"> 1044</a></span> <span class="keywordtype">bool</span> is_equivalent(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="line"><a id="l01045" name="l01045"></a><span class="lineno"> 1045</span> </div>
<div class="line"><a id="l01046" name="l01046"></a><span class="lineno"> 1046</span> private:</div>
<div class="line"><a id="l01047" name="l01047"></a><span class="lineno"> 1047</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01048" name="l01048"></a><span class="lineno"> 1048</span> std::vector&lt;<span class="keywordtype">int</span>&gt; axes_;</div>
<div class="line"><a id="l01049" name="l01049"></a><span class="lineno"> 1049</span> std::vector&lt;<span class="keywordtype">int</span>&gt; slice_sizes_;</div>
<div class="line"><a id="l01050" name="l01050"></a><span class="lineno"> 1050</span>};</div>
</div>
<div class="line"><a id="l01051" name="l01051"></a><span class="lineno"> 1051</span> </div>
<div class="foldopen" id="foldopen01052" data-start="{" data-end="};">
<div class="line"><a id="l01052" name="l01052"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_greater.html"> 1052</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_greater.html">Greater</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01053" name="l01053"></a><span class="lineno"> 1053</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l01054" name="l01054"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_greater.html#a1d5992a66c020cd97a70e8e3d8cd1a1b"> 1054</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_greater.html#a1d5992a66c020cd97a70e8e3d8cd1a1b">Greater</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l01055" name="l01055"></a><span class="lineno"> 1055</span> </div>
<div class="line"><a id="l01056" name="l01056"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_greater.html#abe1c03f311d0e0b610f3392a6566f2ae"> 1056</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_greater.html#abe1c03f311d0e0b610f3392a6566f2ae">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01057" name="l01057"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_greater.html#ae8957cccf4c924d941f57a1bb751c878"> 1057</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_greater.html#ae8957cccf4c924d941f57a1bb751c878">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01058" name="l01058"></a><span class="lineno"> 1058</span> </div>
<div class="line"><a id="l01059" name="l01059"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_greater.html#a6d8267411fc4951de781f9e8e6c53aa0"> 1059</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01060" name="l01060"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_greater.html#aa47a9f80f45daf6a405e34f6dc7c99c1"> 1060</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01061" name="l01061"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_greater.html#aa2980e45cd2c79ebfb394012d3108a04"> 1061</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_greater.html">Greater</a>)</div>
<div class="line"><a id="l01062" name="l01062"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_greater.html#a6877a6888614a618dc64296763ccabb1"> 1062</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l01063" name="l01063"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_greater.html#ab2167a38c3baff99f527f17eb4c71d46"> 1063</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l01064" name="l01064"></a><span class="lineno"> 1064</span> </div>
<div class="line"><a id="l01065" name="l01065"></a><span class="lineno"> 1065</span> private:</div>
<div class="line"><a id="l01066" name="l01066"></a><span class="lineno"> 1066</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01067" name="l01067"></a><span class="lineno"> 1067</span>};</div>
</div>
<div class="line"><a id="l01068" name="l01068"></a><span class="lineno"> 1068</span> </div>
<div class="foldopen" id="foldopen01069" data-start="{" data-end="};">
<div class="line"><a id="l01069" name="l01069"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_greater_equal.html"> 1069</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_greater_equal.html">GreaterEqual</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01070" name="l01070"></a><span class="lineno"> 1070</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l01071" name="l01071"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_greater_equal.html#a19a3c49d5a9b40e17da0e56ef6908527"> 1071</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_greater_equal.html#a19a3c49d5a9b40e17da0e56ef6908527">GreaterEqual</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l01072" name="l01072"></a><span class="lineno"> 1072</span> </div>
<div class="line"><a id="l01073" name="l01073"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_greater_equal.html#a15469125b9bea89b64bfeac01590c075"> 1073</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_greater_equal.html#a15469125b9bea89b64bfeac01590c075">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01074" name="l01074"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_greater_equal.html#ac246263b4548126c3d4ab7e392575d24"> 1074</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_greater_equal.html#ac246263b4548126c3d4ab7e392575d24">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01075" name="l01075"></a><span class="lineno"> 1075</span> </div>
<div class="line"><a id="l01076" name="l01076"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_greater_equal.html#ab0e1be93eb01b0ce7fa83e953f5e3e1d"> 1076</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01077" name="l01077"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_greater_equal.html#ac7346080aaaa01d52896127f383f9d20"> 1077</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01078" name="l01078"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_greater_equal.html#ab98045c861d2d2ffb0398c2c1d671cef"> 1078</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_greater_equal.html">GreaterEqual</a>)</div>
<div class="line"><a id="l01079" name="l01079"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_greater_equal.html#a3daef8596b963026b602019bc56fc5fc"> 1079</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l01080" name="l01080"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_greater_equal.html#a636a9cc00b0333e49978f39814af640f"> 1080</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l01081" name="l01081"></a><span class="lineno"> 1081</span> </div>
<div class="line"><a id="l01082" name="l01082"></a><span class="lineno"> 1082</span> private:</div>
<div class="line"><a id="l01083" name="l01083"></a><span class="lineno"> 1083</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01084" name="l01084"></a><span class="lineno"> 1084</span>};</div>
</div>
<div class="line"><a id="l01085" name="l01085"></a><span class="lineno"> 1085</span> </div>
<div class="foldopen" id="foldopen01086" data-start="{" data-end="};">
<div class="line"><a id="l01086" name="l01086"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_hadamard.html"> 1086</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_hadamard.html">Hadamard</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01087" name="l01087"></a><span class="lineno"> 1087</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen01088" data-start="{" data-end="}">
<div class="line"><a id="l01088" name="l01088"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_hadamard.html#abe4a0ed820b126940beec519d4239923"> 1088</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_hadamard.html#abe4a0ed820b126940beec519d4239923">Hadamard</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream, <span class="keywordtype">float</span> scale)</div>
<div class="line"><a id="l01089" name="l01089"></a><span class="lineno"> 1089</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream), scale_(scale) {}</div>
</div>
<div class="line"><a id="l01090" name="l01090"></a><span class="lineno"> 1090</span> </div>
<div class="line"><a id="l01091" name="l01091"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_hadamard.html#ab27d6a9df42b3aab41ace3073a4c880d"> 1091</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_hadamard.html#ab27d6a9df42b3aab41ace3073a4c880d">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01092" name="l01092"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_hadamard.html#a2470feb690f5463138490763c38b5733"> 1092</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_hadamard.html#a2470feb690f5463138490763c38b5733">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01093" name="l01093"></a><span class="lineno"> 1093</span> </div>
<div class="line"><a id="l01094" name="l01094"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_hadamard.html#a9f1a172e6246859e813002abe9b8f99c"> 1094</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01095" name="l01095"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_hadamard.html#a22b9d55ae3ba5eef63505124696e712a"> 1095</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01096" name="l01096"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_hadamard.html#a3df6e7e3b3b71bf50be5f1a05d0870b6"> 1096</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_hadamard.html">Hadamard</a>)</div>
<div class="line"><a id="l01097" name="l01097"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_hadamard.html#a458614bc7820ae56493eb56d813b2cde"> 1097</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l01098" name="l01098"></a><span class="lineno"> 1098</span> </div>
<div class="line"><a id="l01099" name="l01099"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_hadamard.html#a8a528d8d69a7343bdfd704a3e74230b8"> 1099</a></span> <span class="keywordtype">bool</span> is_equivalent(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="line"><a id="l01100" name="l01100"></a><span class="lineno"> 1100</span> </div>
<div class="line"><a id="l01101" name="l01101"></a><span class="lineno"> 1101</span> private:</div>
<div class="line"><a id="l01102" name="l01102"></a><span class="lineno"> 1102</span> <span class="keywordtype">float</span> scale_;</div>
<div class="line"><a id="l01103" name="l01103"></a><span class="lineno"> 1103</span> </div>
<div class="line"><a id="l01104" name="l01104"></a><span class="lineno"> 1104</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01105" name="l01105"></a><span class="lineno"> 1105</span>};</div>
</div>
<div class="line"><a id="l01106" name="l01106"></a><span class="lineno"> 1106</span> </div>
<div class="foldopen" id="foldopen01107" data-start="{" data-end="};">
<div class="line"><a id="l01107" name="l01107"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_less.html"> 1107</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_less.html">Less</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01108" name="l01108"></a><span class="lineno"> 1108</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l01109" name="l01109"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_less.html#aa55c5cfbab0ac30e1b72c080fe9525d7"> 1109</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_less.html#aa55c5cfbab0ac30e1b72c080fe9525d7">Less</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l01110" name="l01110"></a><span class="lineno"> 1110</span> </div>
<div class="line"><a id="l01111" name="l01111"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_less.html#a32624124ffece066f496b3299056bcef"> 1111</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_less.html#a32624124ffece066f496b3299056bcef">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01112" name="l01112"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_less.html#a353335ce06ddbe8498d86d129c835917"> 1112</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_less.html#a353335ce06ddbe8498d86d129c835917">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01113" name="l01113"></a><span class="lineno"> 1113</span> </div>
<div class="line"><a id="l01114" name="l01114"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_less.html#a5fee5956cf087d8405359121aa62ba7e"> 1114</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01115" name="l01115"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_less.html#af1493d566f6d940b8f674aac17f5dfce"> 1115</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01116" name="l01116"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_less.html#ad67e6f66d7b75546fd98dbee6b631d78"> 1116</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_less.html">Less</a>)</div>
<div class="line"><a id="l01117" name="l01117"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_less.html#a7d6ed6353a0dcefebd008026dbd3cd63"> 1117</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l01118" name="l01118"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_less.html#a5e8b56574ccb91c065548f4bda40e278"> 1118</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l01119" name="l01119"></a><span class="lineno"> 1119</span> </div>
<div class="line"><a id="l01120" name="l01120"></a><span class="lineno"> 1120</span> private:</div>
<div class="line"><a id="l01121" name="l01121"></a><span class="lineno"> 1121</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01122" name="l01122"></a><span class="lineno"> 1122</span>};</div>
</div>
<div class="line"><a id="l01123" name="l01123"></a><span class="lineno"> 1123</span> </div>
<div class="foldopen" id="foldopen01124" data-start="{" data-end="};">
<div class="line"><a id="l01124" name="l01124"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_less_equal.html"> 1124</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_less_equal.html">LessEqual</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01125" name="l01125"></a><span class="lineno"> 1125</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l01126" name="l01126"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_less_equal.html#a52492a43224d47e7851beec646c27bbc"> 1126</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_less_equal.html#a52492a43224d47e7851beec646c27bbc">LessEqual</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l01127" name="l01127"></a><span class="lineno"> 1127</span> </div>
<div class="line"><a id="l01128" name="l01128"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_less_equal.html#a55d1352b0e97841a92503bc57c19ed16"> 1128</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_less_equal.html#a55d1352b0e97841a92503bc57c19ed16">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01129" name="l01129"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_less_equal.html#acf035a82b11e6f63742143ea540fedac"> 1129</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_less_equal.html#acf035a82b11e6f63742143ea540fedac">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01130" name="l01130"></a><span class="lineno"> 1130</span> </div>
<div class="line"><a id="l01131" name="l01131"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_less_equal.html#a3d5df21db184f2b7620cda9da1684480"> 1131</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01132" name="l01132"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_less_equal.html#addfe62d3557d216f8307bdf1cbff6a8f"> 1132</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01133" name="l01133"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_less_equal.html#a409842d3862113c53cbbdf7467a06950"> 1133</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_less_equal.html">LessEqual</a>)</div>
<div class="line"><a id="l01134" name="l01134"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_less_equal.html#a76ee1438cf4bd109eae4e0b3472b26af"> 1134</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l01135" name="l01135"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_less_equal.html#a2e259f3de11f97f3bd38a2e65667d78f"> 1135</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l01136" name="l01136"></a><span class="lineno"> 1136</span> </div>
<div class="line"><a id="l01137" name="l01137"></a><span class="lineno"> 1137</span> private:</div>
<div class="line"><a id="l01138" name="l01138"></a><span class="lineno"> 1138</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01139" name="l01139"></a><span class="lineno"> 1139</span>};</div>
</div>
<div class="line"><a id="l01140" name="l01140"></a><span class="lineno"> 1140</span> </div>
<div class="foldopen" id="foldopen01141" data-start="{" data-end="};">
<div class="line"><a id="l01141" name="l01141"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_load.html"> 1141</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_load.html">Load</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01142" name="l01142"></a><span class="lineno"> 1142</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen01143" data-start="{" data-end="}">
<div class="line"><a id="l01143" name="l01143"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_load.html#a3aa8a537cd90bab048df47dca1ed526a"> 1143</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_load.html#a3aa8a537cd90bab048df47dca1ed526a">Load</a>(</div>
<div class="line"><a id="l01144" name="l01144"></a><span class="lineno"> 1144</span> <a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream,</div>
<div class="line"><a id="l01145" name="l01145"></a><span class="lineno"> 1145</span> std::shared_ptr&lt;io::Reader&gt; reader,</div>
<div class="line"><a id="l01146" name="l01146"></a><span class="lineno"> 1146</span> <span class="keywordtype">size_t</span> offset,</div>
<div class="line"><a id="l01147" name="l01147"></a><span class="lineno"> 1147</span> <span class="keywordtype">bool</span> swap_endianness = <span class="keyword">false</span>)</div>
<div class="line"><a id="l01148" name="l01148"></a><span class="lineno"> 1148</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream),</div>
<div class="line"><a id="l01149" name="l01149"></a><span class="lineno"> 1149</span> reader_(<a class="code hl_function" href="group__ops.html#ga2a466024f8061febc0a64be557644cb0">std</a>::move(reader)),</div>
<div class="line"><a id="l01150" name="l01150"></a><span class="lineno"> 1150</span> offset_(offset),</div>
<div class="line"><a id="l01151" name="l01151"></a><span class="lineno"> 1151</span> swap_endianness_(swap_endianness) {</div>
<div class="line"><a id="l01152" name="l01152"></a><span class="lineno"> 1152</span> <span class="keywordflow">if</span> (stream.<a class="code hl_variable" href="structmlx_1_1core_1_1_stream.html#a406b1b0162287a4162fab1f70e2ff3bb">device</a> == Device::gpu) {</div>
<div class="line"><a id="l01153" name="l01153"></a><span class="lineno"> 1153</span> io_stream();</div>
<div class="line"><a id="l01154" name="l01154"></a><span class="lineno"> 1154</span> }</div>
<div class="line"><a id="l01155" name="l01155"></a><span class="lineno"> 1155</span> }</div>
</div>
<div class="line"><a id="l01156" name="l01156"></a><span class="lineno"> 1156</span> </div>
<div class="line"><a id="l01157" name="l01157"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_load.html#ada026ac30566f3109d8182e35d307c0a"> 1157</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_load.html#ada026ac30566f3109d8182e35d307c0a">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01158" name="l01158"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_load.html#a06933e887ea94a4d01d81195c5e07a3d"> 1158</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_load.html#a06933e887ea94a4d01d81195c5e07a3d">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01159" name="l01159"></a><span class="lineno"> 1159</span> </div>
<div class="line"><a id="l01160" name="l01160"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_load.html#a54e08a0ca41b7c9f1a76b00c889f0bfa"> 1160</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_load.html">Load</a>)</div>
<div class="line"><a id="l01161" name="l01161"></a><span class="lineno"> 1161</span> </div>
<div class="line"><a id="l01162" name="l01162"></a><span class="lineno"> 1162</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l01163" name="l01163"></a><span class="lineno"> 1163</span> <a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a>&amp; io_stream() {</div>
<div class="line"><a id="l01164" name="l01164"></a><span class="lineno"> 1164</span> <span class="keyword">static</span> <a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> io_stream = new_stream(Device::cpu);</div>
<div class="line"><a id="l01165" name="l01165"></a><span class="lineno"> 1165</span> <span class="keywordflow">return</span> io_stream;</div>
<div class="line"><a id="l01166" name="l01166"></a><span class="lineno"> 1166</span> };</div>
<div class="line"><a id="l01167" name="l01167"></a><span class="lineno"> 1167</span> <span class="keywordtype">void</span> <a class="code hl_function" href="namespacemlx_1_1core.html#a7d6e097d8effed52f4713672e471f299">eval</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01168" name="l01168"></a><span class="lineno"> 1168</span> std::shared_ptr&lt;io::Reader&gt; reader_;</div>
<div class="line"><a id="l01169" name="l01169"></a><span class="lineno"> 1169</span> <span class="keywordtype">size_t</span> offset_;</div>
<div class="line"><a id="l01170" name="l01170"></a><span class="lineno"> 1170</span> <span class="keywordtype">bool</span> swap_endianness_;</div>
<div class="line"><a id="l01171" name="l01171"></a><span class="lineno"> 1171</span>};</div>
</div>
<div class="line"><a id="l01172" name="l01172"></a><span class="lineno"> 1172</span> </div>
<div class="foldopen" id="foldopen01173" data-start="{" data-end="};">
<div class="line"><a id="l01173" name="l01173"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_log.html"> 1173</a></span><span class="keyword">class </span><a class="code hl_class" href="classmlx_1_1core_1_1_log.html">Log</a> : <span class="keyword">public</span> <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01174" name="l01174"></a><span class="lineno"> 1174</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l01175" name="l01175"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_log.html#a044a23e8b1422984628e1cd5ab506421"> 1175</a></span> <span class="keyword">enum</span> <a class="code hl_enumeration" href="classmlx_1_1core_1_1_log.html#a044a23e8b1422984628e1cd5ab506421">Base</a> { two, ten, e };</div>
<div class="line"><a id="l01176" name="l01176"></a><span class="lineno"> 1176</span> </div>
<div class="foldopen" id="foldopen01177" data-start="{" data-end="}">
<div class="line"><a id="l01177" name="l01177"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_log.html#a663e54790c60b56eb0ff09f4f6635fb9"> 1177</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_log.html#a663e54790c60b56eb0ff09f4f6635fb9">Log</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream, <a class="code hl_enumeration" href="classmlx_1_1core_1_1_log.html#a044a23e8b1422984628e1cd5ab506421">Base</a> base)</div>
<div class="line"><a id="l01178" name="l01178"></a><span class="lineno"> 1178</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream), base_(base) {}</div>
</div>
<div class="line"><a id="l01179" name="l01179"></a><span class="lineno"> 1179</span> </div>
<div class="line"><a id="l01180" name="l01180"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_log.html#aadc7bb4cb24f3ecbbb9ed54a699ab74f"> 1180</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_log.html#aadc7bb4cb24f3ecbbb9ed54a699ab74f">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01181" name="l01181"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_log.html#aaaa49e9455f3a197bc319646b5ca6390"> 1181</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_log.html#aaaa49e9455f3a197bc319646b5ca6390">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01182" name="l01182"></a><span class="lineno"> 1182</span> </div>
<div class="line"><a id="l01183" name="l01183"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_log.html#a007ddbcf911093231f607a8b9ed5cd49"> 1183</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01184" name="l01184"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_log.html#ac646d4155322c34f58183d97301e3832"> 1184</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01185" name="l01185"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_log.html#a2fc58ea4ca744db493b947d1136d05f8"> 1185</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l01186" name="l01186"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_log.html#a113dcc95e2a1a052238b1f5c8935a63d"> 1186</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l01187" name="l01187"></a><span class="lineno"> 1187</span> </div>
<div class="foldopen" id="foldopen01188" data-start="{" data-end="}">
<div class="line"><a id="l01188" name="l01188"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_log.html#a7b946d98d4a228c6be9f606a3bd8a30d"> 1188</a></span> <span class="keywordtype">void</span> print(std::ostream&amp; os)<span class="keyword"> override </span>{</div>
<div class="line"><a id="l01189" name="l01189"></a><span class="lineno"> 1189</span> <span class="keywordflow">switch</span> (base_) {</div>
<div class="line"><a id="l01190" name="l01190"></a><span class="lineno"> 1190</span> <span class="keywordflow">case</span> e:</div>
<div class="line"><a id="l01191" name="l01191"></a><span class="lineno"> 1191</span> os &lt;&lt; <span class="stringliteral">&quot;Log&quot;</span>;</div>
<div class="line"><a id="l01192" name="l01192"></a><span class="lineno"> 1192</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01193" name="l01193"></a><span class="lineno"> 1193</span> <span class="keywordflow">case</span> two:</div>
<div class="line"><a id="l01194" name="l01194"></a><span class="lineno"> 1194</span> os &lt;&lt; <span class="stringliteral">&quot;Log2&quot;</span>;</div>
<div class="line"><a id="l01195" name="l01195"></a><span class="lineno"> 1195</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01196" name="l01196"></a><span class="lineno"> 1196</span> <span class="keywordflow">case</span> ten:</div>
<div class="line"><a id="l01197" name="l01197"></a><span class="lineno"> 1197</span> os &lt;&lt; <span class="stringliteral">&quot;Log10&quot;</span>;</div>
<div class="line"><a id="l01198" name="l01198"></a><span class="lineno"> 1198</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01199" name="l01199"></a><span class="lineno"> 1199</span> }</div>
<div class="line"><a id="l01200" name="l01200"></a><span class="lineno"> 1200</span> }</div>
</div>
<div class="line"><a id="l01201" name="l01201"></a><span class="lineno"> 1201</span> </div>
<div class="line"><a id="l01202" name="l01202"></a><span class="lineno"> 1202</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l01203" name="l01203"></a><span class="lineno"> 1203</span> Base base_;</div>
<div class="line"><a id="l01204" name="l01204"></a><span class="lineno"> 1204</span> <span class="keywordtype">void</span> <a class="code hl_function" href="namespacemlx_1_1core.html#a7d6e097d8effed52f4713672e471f299">eval</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01205" name="l01205"></a><span class="lineno"> 1205</span>};</div>
</div>
<div class="line"><a id="l01206" name="l01206"></a><span class="lineno"> 1206</span> </div>
<div class="foldopen" id="foldopen01207" data-start="{" data-end="};">
<div class="line"><a id="l01207" name="l01207"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_log1p.html"> 1207</a></span><span class="keyword">class </span><a class="code hl_class" href="classmlx_1_1core_1_1_log1p.html">Log1p</a> : <span class="keyword">public</span> <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01208" name="l01208"></a><span class="lineno"> 1208</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l01209" name="l01209"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_log1p.html#ab0d6eb90c6f98775fce56f3446ff127a"> 1209</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_log1p.html#ab0d6eb90c6f98775fce56f3446ff127a">Log1p</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l01210" name="l01210"></a><span class="lineno"> 1210</span> </div>
<div class="line"><a id="l01211" name="l01211"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_log1p.html#a8192e5438de99c4cda056987935cba23"> 1211</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_log1p.html#a8192e5438de99c4cda056987935cba23">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01212" name="l01212"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_log1p.html#a1b97decae7338d46874e736c95fa7431"> 1212</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_log1p.html#a1b97decae7338d46874e736c95fa7431">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01213" name="l01213"></a><span class="lineno"> 1213</span> </div>
<div class="line"><a id="l01214" name="l01214"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_log1p.html#a7122576f95ce479926bbbbc690891f71"> 1214</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01215" name="l01215"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_log1p.html#a537e44c7c993daf48698082e75e71ba2"> 1215</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01216" name="l01216"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_log1p.html#a8a1569dde30440ce11ea466ccc69d2d4"> 1216</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_log1p.html">Log1p</a>)</div>
<div class="line"><a id="l01217" name="l01217"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_log1p.html#aebf8f5b6670f55fa24283a934f4b25df"> 1217</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l01218" name="l01218"></a><span class="lineno"> 1218</span> </div>
<div class="line"><a id="l01219" name="l01219"></a><span class="lineno"> 1219</span> private:</div>
<div class="line"><a id="l01220" name="l01220"></a><span class="lineno"> 1220</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01221" name="l01221"></a><span class="lineno"> 1221</span>};</div>
</div>
<div class="line"><a id="l01222" name="l01222"></a><span class="lineno"> 1222</span> </div>
<div class="foldopen" id="foldopen01223" data-start="{" data-end="};">
<div class="line"><a id="l01223" name="l01223"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_logical_not.html"> 1223</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_logical_not.html">LogicalNot</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01224" name="l01224"></a><span class="lineno"> 1224</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l01225" name="l01225"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_logical_not.html#a6f5850b4c78b83d5e2c0d37437fc79b7"> 1225</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_logical_not.html#a6f5850b4c78b83d5e2c0d37437fc79b7">LogicalNot</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l01226" name="l01226"></a><span class="lineno"> 1226</span> </div>
<div class="line"><a id="l01227" name="l01227"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_logical_not.html#acf3f7b3b20ca69533536e0e0a05725b3"> 1227</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_logical_not.html#acf3f7b3b20ca69533536e0e0a05725b3">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01228" name="l01228"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_logical_not.html#a1d0d2bc93f935eca6c85ef7bf67f2d6a"> 1228</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_logical_not.html#a1d0d2bc93f935eca6c85ef7bf67f2d6a">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01229" name="l01229"></a><span class="lineno"> 1229</span> </div>
<div class="line"><a id="l01230" name="l01230"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_logical_not.html#a5308a271619ee74df561b0aaf525915d"> 1230</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01231" name="l01231"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_logical_not.html#a4838c483ced707cfda3d6cd24bf4667c"> 1231</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01232" name="l01232"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_logical_not.html#a001ff3eca46440f0d8a287e0b98a8a2c"> 1232</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_logical_not.html">LogicalNot</a>)</div>
<div class="line"><a id="l01233" name="l01233"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_logical_not.html#aba53675da351cd9b71a73d475b4bbe99"> 1233</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l01234" name="l01234"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_logical_not.html#a4a40511a052a6627085be378bbebe69c"> 1234</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l01235" name="l01235"></a><span class="lineno"> 1235</span> </div>
<div class="line"><a id="l01236" name="l01236"></a><span class="lineno"> 1236</span> private:</div>
<div class="line"><a id="l01237" name="l01237"></a><span class="lineno"> 1237</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01238" name="l01238"></a><span class="lineno"> 1238</span>};</div>
</div>
<div class="line"><a id="l01239" name="l01239"></a><span class="lineno"> 1239</span> </div>
<div class="foldopen" id="foldopen01240" data-start="{" data-end="};">
<div class="line"><a id="l01240" name="l01240"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_logical_and.html"> 1240</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_logical_and.html">LogicalAnd</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01241" name="l01241"></a><span class="lineno"> 1241</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l01242" name="l01242"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_logical_and.html#aaf2cab8ffcf6606b8babfef60fc06fb3"> 1242</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_logical_and.html#aaf2cab8ffcf6606b8babfef60fc06fb3">LogicalAnd</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l01243" name="l01243"></a><span class="lineno"> 1243</span> </div>
<div class="line"><a id="l01244" name="l01244"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_logical_and.html#adbe1c1785af1a8b827289d22b0d170b3"> 1244</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_logical_and.html#adbe1c1785af1a8b827289d22b0d170b3">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01245" name="l01245"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_logical_and.html#a132b2eedaa3978de5a5350da3c2ca40f"> 1245</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_logical_and.html#a132b2eedaa3978de5a5350da3c2ca40f">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01246" name="l01246"></a><span class="lineno"> 1246</span> </div>
<div class="line"><a id="l01247" name="l01247"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_logical_and.html#aacc5f6f53ffc327b7771485e3da2a4e5"> 1247</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01248" name="l01248"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_logical_and.html#a78d3be71da224ea19158cf9e8c4cf434"> 1248</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01249" name="l01249"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_logical_and.html#a9a5220eb56e1fd94fd879394ee5ad397"> 1249</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_logical_and.html">LogicalAnd</a>)</div>
<div class="line"><a id="l01250" name="l01250"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_logical_and.html#a9572c35f72e0db2f7f86bbf42438a6be"> 1250</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l01251" name="l01251"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_logical_and.html#a191d69d92c01ed5ad82d4688f1de2617"> 1251</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l01252" name="l01252"></a><span class="lineno"> 1252</span> </div>
<div class="line"><a id="l01253" name="l01253"></a><span class="lineno"> 1253</span> private:</div>
<div class="line"><a id="l01254" name="l01254"></a><span class="lineno"> 1254</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01255" name="l01255"></a><span class="lineno"> 1255</span>};</div>
</div>
<div class="line"><a id="l01256" name="l01256"></a><span class="lineno"> 1256</span> </div>
<div class="foldopen" id="foldopen01257" data-start="{" data-end="};">
<div class="line"><a id="l01257" name="l01257"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_logical_or.html"> 1257</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_logical_or.html">LogicalOr</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01258" name="l01258"></a><span class="lineno"> 1258</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l01259" name="l01259"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_logical_or.html#a269c22daca1c15ad010bb860bce93918"> 1259</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_logical_or.html#a269c22daca1c15ad010bb860bce93918">LogicalOr</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l01260" name="l01260"></a><span class="lineno"> 1260</span> </div>
<div class="line"><a id="l01261" name="l01261"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_logical_or.html#a13cd4cbf26589287e85aeaaca42d7f62"> 1261</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_logical_or.html#a13cd4cbf26589287e85aeaaca42d7f62">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01262" name="l01262"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_logical_or.html#a3be1da328f0f8620de2e4fc1d22a077a"> 1262</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_logical_or.html#a3be1da328f0f8620de2e4fc1d22a077a">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01263" name="l01263"></a><span class="lineno"> 1263</span> </div>
<div class="line"><a id="l01264" name="l01264"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_logical_or.html#a6e2e77e6aaf47872b2e96b151c32daf3"> 1264</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01265" name="l01265"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_logical_or.html#a292de6001c551214c8152a7a5b0e6bd4"> 1265</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01266" name="l01266"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_logical_or.html#a6becc5fbfadde850de9857099dcd5003"> 1266</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_logical_or.html">LogicalOr</a>)</div>
<div class="line"><a id="l01267" name="l01267"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_logical_or.html#a9c8b10a5cf5c69fdc2362390197e4e71"> 1267</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l01268" name="l01268"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_logical_or.html#a26259843be2de75d5e07cb7ea94fcfe4"> 1268</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l01269" name="l01269"></a><span class="lineno"> 1269</span> </div>
<div class="line"><a id="l01270" name="l01270"></a><span class="lineno"> 1270</span> private:</div>
<div class="line"><a id="l01271" name="l01271"></a><span class="lineno"> 1271</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01272" name="l01272"></a><span class="lineno"> 1272</span>};</div>
</div>
<div class="line"><a id="l01273" name="l01273"></a><span class="lineno"> 1273</span> </div>
<div class="foldopen" id="foldopen01274" data-start="{" data-end="};">
<div class="line"><a id="l01274" name="l01274"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_log_add_exp.html"> 1274</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_log_add_exp.html">LogAddExp</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01275" name="l01275"></a><span class="lineno"> 1275</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l01276" name="l01276"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_log_add_exp.html#ad8938ca90ccf1a3259973fc68902975a"> 1276</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_log_add_exp.html#ad8938ca90ccf1a3259973fc68902975a">LogAddExp</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l01277" name="l01277"></a><span class="lineno"> 1277</span> </div>
<div class="line"><a id="l01278" name="l01278"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_log_add_exp.html#abef17fb590b1a8d356f2a580e45d41f0"> 1278</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_log_add_exp.html#abef17fb590b1a8d356f2a580e45d41f0">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01279" name="l01279"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_log_add_exp.html#acace355b62ec00df649f9f99e8f2eb7a"> 1279</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_log_add_exp.html#acace355b62ec00df649f9f99e8f2eb7a">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01280" name="l01280"></a><span class="lineno"> 1280</span> </div>
<div class="line"><a id="l01281" name="l01281"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_log_add_exp.html#a82190aa1421a9734b6e9480debffac78"> 1281</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01282" name="l01282"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_log_add_exp.html#aea2d1d58794e86f3488219ed3fa14329"> 1282</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01283" name="l01283"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_log_add_exp.html#a702a2eff0bd1ae7b6fb829dd0b0b11b9"> 1283</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_log_add_exp.html">LogAddExp</a>)</div>
<div class="line"><a id="l01284" name="l01284"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_log_add_exp.html#a3cf9a202c05aff39919d713d6e2b32e4"> 1284</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l01285" name="l01285"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_log_add_exp.html#ac35cf432ecdd141d957b55fc4bff6635"> 1285</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l01286" name="l01286"></a><span class="lineno"> 1286</span> </div>
<div class="line"><a id="l01287" name="l01287"></a><span class="lineno"> 1287</span> private:</div>
<div class="line"><a id="l01288" name="l01288"></a><span class="lineno"> 1288</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01289" name="l01289"></a><span class="lineno"> 1289</span>};</div>
</div>
<div class="line"><a id="l01290" name="l01290"></a><span class="lineno"> 1290</span> </div>
<div class="foldopen" id="foldopen01291" data-start="{" data-end="};">
<div class="line"><a id="l01291" name="l01291"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_matmul.html"> 1291</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_matmul.html">Matmul</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01292" name="l01292"></a><span class="lineno"> 1292</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l01293" name="l01293"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_matmul.html#adef92f30ab35e540ccb316ea6b94e6f7"> 1293</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_matmul.html#adef92f30ab35e540ccb316ea6b94e6f7">Matmul</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l01294" name="l01294"></a><span class="lineno"> 1294</span> </div>
<div class="line"><a id="l01295" name="l01295"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_matmul.html#a357a7f57a2a220a91977f810a69413fc"> 1295</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_matmul.html#a357a7f57a2a220a91977f810a69413fc">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01296" name="l01296"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_matmul.html#a8707a4e9b75c769e8f1dbca15c6a1ae7"> 1296</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_matmul.html#a8707a4e9b75c769e8f1dbca15c6a1ae7">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01297" name="l01297"></a><span class="lineno"> 1297</span> </div>
<div class="line"><a id="l01298" name="l01298"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_matmul.html#a524136cca481598ea20894d85ca66bb0"> 1298</a></span> std::vector&lt;array&gt; <a class="code hl_function" href="classmlx_1_1core_1_1_matmul.html#a524136cca481598ea20894d85ca66bb0">vjp</a>(</div>
<div class="line"><a id="l01299" name="l01299"></a><span class="lineno"> 1299</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; primals,</div>
<div class="line"><a id="l01300" name="l01300"></a><span class="lineno"> 1300</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; cotangents,</div>
<div class="line"><a id="l01301" name="l01301"></a><span class="lineno"> 1301</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; argnums,</div>
<div class="line"><a id="l01302" name="l01302"></a><span class="lineno"> 1302</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; outputs) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01303" name="l01303"></a><span class="lineno"> 1303</span> </div>
<div class="line"><a id="l01304" name="l01304"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_matmul.html#a3a1c6e70bac300240760fe41a58340c2"> 1304</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01305" name="l01305"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_matmul.html#abb4a16a265a05d56a2f5d2e89d6f9dfd"> 1305</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_matmul.html">Matmul</a>)</div>
<div class="line"><a id="l01306" name="l01306"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_matmul.html#aab372b59eae0840fc4f75ef5719a2630"> 1306</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l01307" name="l01307"></a><span class="lineno"> 1307</span>};</div>
</div>
<div class="line"><a id="l01308" name="l01308"></a><span class="lineno"> 1308</span> </div>
<div class="foldopen" id="foldopen01309" data-start="{" data-end="};">
<div class="line"><a id="l01309" name="l01309"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_maximum.html"> 1309</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_maximum.html">Maximum</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01310" name="l01310"></a><span class="lineno"> 1310</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l01311" name="l01311"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_maximum.html#a28389307e385efe1b2955b86b115e816"> 1311</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_maximum.html#a28389307e385efe1b2955b86b115e816">Maximum</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l01312" name="l01312"></a><span class="lineno"> 1312</span> </div>
<div class="line"><a id="l01313" name="l01313"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_maximum.html#a62b38fbe5f96db58c2b60165ac4eadcf"> 1313</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_maximum.html#a62b38fbe5f96db58c2b60165ac4eadcf">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01314" name="l01314"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_maximum.html#ade0f721b10a6b3a12bdadd34c48f72a7"> 1314</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_maximum.html#ade0f721b10a6b3a12bdadd34c48f72a7">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01315" name="l01315"></a><span class="lineno"> 1315</span> </div>
<div class="line"><a id="l01316" name="l01316"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_maximum.html#ab664918e0d71cfec1318a9879e78c5d3"> 1316</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01317" name="l01317"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_maximum.html#a25ac5d5b453e571bf7240aa8de103c39"> 1317</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01318" name="l01318"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_maximum.html#a3b708a1d6b526719c62850294776f8ca"> 1318</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_maximum.html">Maximum</a>)</div>
<div class="line"><a id="l01319" name="l01319"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_maximum.html#a21fe93fbd7799682f481260aee8bdb46"> 1319</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l01320" name="l01320"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_maximum.html#a7bb80360ba4b74d0b0f3f74a5ff90d1b"> 1320</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l01321" name="l01321"></a><span class="lineno"> 1321</span> </div>
<div class="line"><a id="l01322" name="l01322"></a><span class="lineno"> 1322</span> private:</div>
<div class="line"><a id="l01323" name="l01323"></a><span class="lineno"> 1323</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01324" name="l01324"></a><span class="lineno"> 1324</span>};</div>
</div>
<div class="line"><a id="l01325" name="l01325"></a><span class="lineno"> 1325</span> </div>
<div class="foldopen" id="foldopen01326" data-start="{" data-end="};">
<div class="line"><a id="l01326" name="l01326"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_minimum.html"> 1326</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_minimum.html">Minimum</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01327" name="l01327"></a><span class="lineno"> 1327</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l01328" name="l01328"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_minimum.html#ab0f2ce17108df44b82cff68886b0f6f5"> 1328</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_minimum.html#ab0f2ce17108df44b82cff68886b0f6f5">Minimum</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l01329" name="l01329"></a><span class="lineno"> 1329</span> </div>
<div class="line"><a id="l01330" name="l01330"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_minimum.html#a6b93f493ee87089943a8085fe59dfc6e"> 1330</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_minimum.html#a6b93f493ee87089943a8085fe59dfc6e">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01331" name="l01331"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_minimum.html#aadc68afa0afbe2103f19d161f5e0a2ba"> 1331</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_minimum.html#aadc68afa0afbe2103f19d161f5e0a2ba">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01332" name="l01332"></a><span class="lineno"> 1332</span> </div>
<div class="line"><a id="l01333" name="l01333"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_minimum.html#adab0f31acf68075a0be908d8eb882980"> 1333</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01334" name="l01334"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_minimum.html#a10acf4fef35eed7ca55d131b5ae2d038"> 1334</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01335" name="l01335"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_minimum.html#a137677bf32c626a768b732a7b8575512"> 1335</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_minimum.html">Minimum</a>)</div>
<div class="line"><a id="l01336" name="l01336"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_minimum.html#a56c54ee3293cc2cd84462b9ec7ac36b4"> 1336</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l01337" name="l01337"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_minimum.html#ab4a85741dffaa64d8ead028f11539d70"> 1337</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l01338" name="l01338"></a><span class="lineno"> 1338</span> </div>
<div class="line"><a id="l01339" name="l01339"></a><span class="lineno"> 1339</span> private:</div>
<div class="line"><a id="l01340" name="l01340"></a><span class="lineno"> 1340</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01341" name="l01341"></a><span class="lineno"> 1341</span>};</div>
</div>
<div class="line"><a id="l01342" name="l01342"></a><span class="lineno"> 1342</span> </div>
<div class="foldopen" id="foldopen01343" data-start="{" data-end="};">
<div class="line"><a id="l01343" name="l01343"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_multiply.html"> 1343</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_multiply.html">Multiply</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01344" name="l01344"></a><span class="lineno"> 1344</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l01345" name="l01345"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_multiply.html#aca5c50f900321f3eb4d6fbcbc225c00c"> 1345</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_multiply.html#aca5c50f900321f3eb4d6fbcbc225c00c">Multiply</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l01346" name="l01346"></a><span class="lineno"> 1346</span> </div>
<div class="line"><a id="l01347" name="l01347"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_multiply.html#a624fce06c047cdc4dfdbdcaaddb25f34"> 1347</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_multiply.html#a624fce06c047cdc4dfdbdcaaddb25f34">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01348" name="l01348"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_multiply.html#a634fcb4e981d8d3f4d94252caf25bee0"> 1348</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_multiply.html#a634fcb4e981d8d3f4d94252caf25bee0">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01349" name="l01349"></a><span class="lineno"> 1349</span> </div>
<div class="line"><a id="l01350" name="l01350"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_multiply.html#ae7e82c8fc8cbaf4e00c27eb54fac7dbf"> 1350</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01351" name="l01351"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_multiply.html#a79f7f0bb70de2e3e41a66c96285325b4"> 1351</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01352" name="l01352"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_multiply.html#aa4f1f7af68346ce80c2636df415c9909"> 1352</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_multiply.html">Multiply</a>)</div>
<div class="line"><a id="l01353" name="l01353"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_multiply.html#ae288159fa2d6d35087a85aca8eafa9b2"> 1353</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l01354" name="l01354"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_multiply.html#a072de3911113247c95c28d3b52400061"> 1354</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l01355" name="l01355"></a><span class="lineno"> 1355</span> </div>
<div class="line"><a id="l01356" name="l01356"></a><span class="lineno"> 1356</span> private:</div>
<div class="line"><a id="l01357" name="l01357"></a><span class="lineno"> 1357</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01358" name="l01358"></a><span class="lineno"> 1358</span>};</div>
</div>
<div class="line"><a id="l01359" name="l01359"></a><span class="lineno"> 1359</span> </div>
<div class="foldopen" id="foldopen01360" data-start="{" data-end="};">
<div class="line"><a id="l01360" name="l01360"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_negative.html"> 1360</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_negative.html">Negative</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01361" name="l01361"></a><span class="lineno"> 1361</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l01362" name="l01362"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_negative.html#aa3b73395d9fa5b7215dca488bc0d3c70"> 1362</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_negative.html#aa3b73395d9fa5b7215dca488bc0d3c70">Negative</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l01363" name="l01363"></a><span class="lineno"> 1363</span> </div>
<div class="line"><a id="l01364" name="l01364"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_negative.html#af43553dc418c8ebe75fa9cdcba103c3b"> 1364</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_negative.html#af43553dc418c8ebe75fa9cdcba103c3b">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01365" name="l01365"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_negative.html#a97f1b316eace0c6d9e576d766940c75b"> 1365</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_negative.html#a97f1b316eace0c6d9e576d766940c75b">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01366" name="l01366"></a><span class="lineno"> 1366</span> </div>
<div class="line"><a id="l01367" name="l01367"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_negative.html#a1f8a6079e272f1a0599f88a1a8419cf0"> 1367</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01368" name="l01368"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_negative.html#a7d918f9b26b8fb7b047a27d85ebab979"> 1368</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01369" name="l01369"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_negative.html#a0d5c30e267ff6468d64f1987f9f83f91"> 1369</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_negative.html">Negative</a>)</div>
<div class="line"><a id="l01370" name="l01370"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_negative.html#ac2a4d8159c548639d6289980c8975823"> 1370</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l01371" name="l01371"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_negative.html#a253c08c7461bf2dce05f555c8dbf0014"> 1371</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l01372" name="l01372"></a><span class="lineno"> 1372</span> </div>
<div class="line"><a id="l01373" name="l01373"></a><span class="lineno"> 1373</span> private:</div>
<div class="line"><a id="l01374" name="l01374"></a><span class="lineno"> 1374</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01375" name="l01375"></a><span class="lineno"> 1375</span>};</div>
</div>
<div class="line"><a id="l01376" name="l01376"></a><span class="lineno"> 1376</span> </div>
<div class="foldopen" id="foldopen01377" data-start="{" data-end="};">
<div class="line"><a id="l01377" name="l01377"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_not_equal.html"> 1377</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_not_equal.html">NotEqual</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01378" name="l01378"></a><span class="lineno"> 1378</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l01379" name="l01379"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_not_equal.html#ac568397bd17b5d9f25ad1a0ebadedbb9"> 1379</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_not_equal.html#ac568397bd17b5d9f25ad1a0ebadedbb9">NotEqual</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l01380" name="l01380"></a><span class="lineno"> 1380</span> </div>
<div class="line"><a id="l01381" name="l01381"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_not_equal.html#a8f95f8b5873850b875b1641df8196047"> 1381</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_not_equal.html#a8f95f8b5873850b875b1641df8196047">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01382" name="l01382"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_not_equal.html#a61179747e34e203150e9c660dfddb5f2"> 1382</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_not_equal.html#a61179747e34e203150e9c660dfddb5f2">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01383" name="l01383"></a><span class="lineno"> 1383</span> </div>
<div class="line"><a id="l01384" name="l01384"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_not_equal.html#ab8b57932f03c8eee664bf89adeaa43b5"> 1384</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01385" name="l01385"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_not_equal.html#ae2d3e5776efaefed7f4c73f679b02f17"> 1385</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01386" name="l01386"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_not_equal.html#a12aa2f764880d29e627540610b63af09"> 1386</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_not_equal.html">NotEqual</a>)</div>
<div class="line"><a id="l01387" name="l01387"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_not_equal.html#ac12fd6b3e2f2e7e4e622b59badf2c73d"> 1387</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l01388" name="l01388"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_not_equal.html#a5b10e99bc564197e7b16dccb0577d89a"> 1388</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l01389" name="l01389"></a><span class="lineno"> 1389</span> </div>
<div class="line"><a id="l01390" name="l01390"></a><span class="lineno"> 1390</span> private:</div>
<div class="line"><a id="l01391" name="l01391"></a><span class="lineno"> 1391</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01392" name="l01392"></a><span class="lineno"> 1392</span>};</div>
</div>
<div class="line"><a id="l01393" name="l01393"></a><span class="lineno"> 1393</span> </div>
<div class="foldopen" id="foldopen01394" data-start="{" data-end="};">
<div class="line"><a id="l01394" name="l01394"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_number_of_elements.html"> 1394</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_number_of_elements.html">NumberOfElements</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01395" name="l01395"></a><span class="lineno"> 1395</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen01396" data-start="{" data-end="}">
<div class="line"><a id="l01396" name="l01396"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_number_of_elements.html#ac64d7c40ae29d687f8b7d2fa33e13b06"> 1396</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_number_of_elements.html#ac64d7c40ae29d687f8b7d2fa33e13b06">NumberOfElements</a>(</div>
<div class="line"><a id="l01397" name="l01397"></a><span class="lineno"> 1397</span> <a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream,</div>
<div class="line"><a id="l01398" name="l01398"></a><span class="lineno"> 1398</span> std::vector&lt;int&gt; axes,</div>
<div class="line"><a id="l01399" name="l01399"></a><span class="lineno"> 1399</span> <span class="keywordtype">bool</span> inverted,</div>
<div class="line"><a id="l01400" name="l01400"></a><span class="lineno"> 1400</span> <a class="code hl_struct" href="structmlx_1_1core_1_1_dtype.html">Dtype</a> dtype)</div>
<div class="line"><a id="l01401" name="l01401"></a><span class="lineno"> 1401</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream),</div>
<div class="line"><a id="l01402" name="l01402"></a><span class="lineno"> 1402</span> axes_(<a class="code hl_function" href="group__ops.html#ga2a466024f8061febc0a64be557644cb0">std</a>::move(axes)),</div>
<div class="line"><a id="l01403" name="l01403"></a><span class="lineno"> 1403</span> inverted_(inverted),</div>
<div class="line"><a id="l01404" name="l01404"></a><span class="lineno"> 1404</span> dtype_(dtype) {}</div>
</div>
<div class="line"><a id="l01405" name="l01405"></a><span class="lineno"> 1405</span> </div>
<div class="line"><a id="l01406" name="l01406"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_number_of_elements.html#acc328321cf5300874ee884367cbede3f"> 1406</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_number_of_elements.html#acc328321cf5300874ee884367cbede3f">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01407" name="l01407"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_number_of_elements.html#a2c98c42915fb2bfe12f5c99ea553eff5"> 1407</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_number_of_elements.html#a2c98c42915fb2bfe12f5c99ea553eff5">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01408" name="l01408"></a><span class="lineno"> 1408</span> </div>
<div class="line"><a id="l01409" name="l01409"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_number_of_elements.html#a977d83eae845b8bd8c0b98b48cb1c6c2"> 1409</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01410" name="l01410"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_number_of_elements.html#aecde30826970938f3aa688979a668f52"> 1410</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_number_of_elements.html">NumberOfElements</a>)</div>
<div class="line"><a id="l01411" name="l01411"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_number_of_elements.html#ad6a32565ccc64499e368e15bba0b438f"> 1411</a></span> <span class="keywordtype">bool</span> is_equivalent(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="foldopen" id="foldopen01412" data-start="{" data-end="}">
<div class="line"><a id="l01412" name="l01412"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_number_of_elements.html#aae36bb1e125c0a2d7cd54e78be0f2af8"> 1412</a></span> std::vector&lt;std::vector&lt;<span class="keywordtype">int</span>&gt;&gt; output_shapes(</div>
<div class="line"><a id="l01413" name="l01413"></a><span class="lineno"> 1413</span> const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs)<span class="keyword"> override </span>{</div>
<div class="line"><a id="l01414" name="l01414"></a><span class="lineno"> 1414</span> <span class="keywordflow">return</span> {{}};</div>
<div class="line"><a id="l01415" name="l01415"></a><span class="lineno"> 1415</span> }</div>
</div>
<div class="line"><a id="l01416" name="l01416"></a><span class="lineno"> 1416</span> </div>
<div class="line"><a id="l01417" name="l01417"></a><span class="lineno"> 1417</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l01418" name="l01418"></a><span class="lineno"> 1418</span> std::vector&lt;int&gt; axes_;</div>
<div class="line"><a id="l01419" name="l01419"></a><span class="lineno"> 1419</span> <span class="keywordtype">bool</span> inverted_;</div>
<div class="line"><a id="l01420" name="l01420"></a><span class="lineno"> 1420</span> <a class="code hl_struct" href="structmlx_1_1core_1_1_dtype.html">Dtype</a> dtype_;</div>
<div class="line"><a id="l01421" name="l01421"></a><span class="lineno"> 1421</span> </div>
<div class="line"><a id="l01422" name="l01422"></a><span class="lineno"> 1422</span> <span class="keywordtype">void</span> <a class="code hl_function" href="namespacemlx_1_1core.html#a7d6e097d8effed52f4713672e471f299">eval</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01423" name="l01423"></a><span class="lineno"> 1423</span>};</div>
</div>
<div class="line"><a id="l01424" name="l01424"></a><span class="lineno"> 1424</span> </div>
<div class="foldopen" id="foldopen01425" data-start="{" data-end="};">
<div class="line"><a id="l01425" name="l01425"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_pad.html"> 1425</a></span><span class="keyword">class </span><a class="code hl_class" href="classmlx_1_1core_1_1_pad.html">Pad</a> : <span class="keyword">public</span> <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01426" name="l01426"></a><span class="lineno"> 1426</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen01427" data-start="{" data-end="}">
<div class="line"><a id="l01427" name="l01427"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_pad.html#ad03da2c40b1e1f2fdf2649d00fa4ab43"> 1427</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_pad.html#ad03da2c40b1e1f2fdf2649d00fa4ab43">Pad</a>(</div>
<div class="line"><a id="l01428" name="l01428"></a><span class="lineno"> 1428</span> <a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream,</div>
<div class="line"><a id="l01429" name="l01429"></a><span class="lineno"> 1429</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; axes,</div>
<div class="line"><a id="l01430" name="l01430"></a><span class="lineno"> 1430</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; low_pad_size,</div>
<div class="line"><a id="l01431" name="l01431"></a><span class="lineno"> 1431</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; high_pad_size)</div>
<div class="line"><a id="l01432" name="l01432"></a><span class="lineno"> 1432</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream),</div>
<div class="line"><a id="l01433" name="l01433"></a><span class="lineno"> 1433</span> axes_(axes),</div>
<div class="line"><a id="l01434" name="l01434"></a><span class="lineno"> 1434</span> low_pad_size_(low_pad_size),</div>
<div class="line"><a id="l01435" name="l01435"></a><span class="lineno"> 1435</span> high_pad_size_(high_pad_size) {}</div>
</div>
<div class="line"><a id="l01436" name="l01436"></a><span class="lineno"> 1436</span> </div>
<div class="line"><a id="l01437" name="l01437"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_pad.html#aaf82dd163cd536fbf97304f8b29080cb"> 1437</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_pad.html#aaf82dd163cd536fbf97304f8b29080cb">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01438" name="l01438"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_pad.html#aefd4d3a5bd8b6b35b266c9e558ada153"> 1438</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_pad.html#aefd4d3a5bd8b6b35b266c9e558ada153">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01439" name="l01439"></a><span class="lineno"> 1439</span> </div>
<div class="line"><a id="l01440" name="l01440"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_pad.html#a85658812a0f3275ba3eb74b7c75686cf"> 1440</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01441" name="l01441"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_pad.html#a6e43a42032ef11497e8d91290574ec72"> 1441</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01442" name="l01442"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_pad.html#af87754daaf51f6a6cf8bd4949ca1e70a"> 1442</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_pad.html">Pad</a>)</div>
<div class="line"><a id="l01443" name="l01443"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_pad.html#aad7c3bfecafe435d6a8e807de4c7ea9b"> 1443</a></span> <span class="keywordtype">bool</span> is_equivalent(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="line"><a id="l01444" name="l01444"></a><span class="lineno"> 1444</span> </div>
<div class="line"><a id="l01445" name="l01445"></a><span class="lineno"> 1445</span> private:</div>
<div class="line"><a id="l01446" name="l01446"></a><span class="lineno"> 1446</span> std::vector&lt;<span class="keywordtype">int</span>&gt; axes_;</div>
<div class="line"><a id="l01447" name="l01447"></a><span class="lineno"> 1447</span> std::vector&lt;<span class="keywordtype">int</span>&gt; low_pad_size_;</div>
<div class="line"><a id="l01448" name="l01448"></a><span class="lineno"> 1448</span> std::vector&lt;<span class="keywordtype">int</span>&gt; high_pad_size_;</div>
<div class="line"><a id="l01449" name="l01449"></a><span class="lineno"> 1449</span> </div>
<div class="line"><a id="l01450" name="l01450"></a><span class="lineno"> 1450</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01451" name="l01451"></a><span class="lineno"> 1451</span>};</div>
</div>
<div class="line"><a id="l01452" name="l01452"></a><span class="lineno"> 1452</span> </div>
<div class="foldopen" id="foldopen01453" data-start="{" data-end="};">
<div class="line"><a id="l01453" name="l01453"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_partition.html"> 1453</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_partition.html">Partition</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01454" name="l01454"></a><span class="lineno"> 1454</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen01455" data-start="{" data-end="}">
<div class="line"><a id="l01455" name="l01455"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_partition.html#a7b82ca3895b6654308fac566b277ac0d"> 1455</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_partition.html#a7b82ca3895b6654308fac566b277ac0d">Partition</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream, <span class="keywordtype">int</span> kth, <span class="keywordtype">int</span> axis)</div>
<div class="line"><a id="l01456" name="l01456"></a><span class="lineno"> 1456</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream), kth_(kth), axis_(axis) {}</div>
</div>
<div class="line"><a id="l01457" name="l01457"></a><span class="lineno"> 1457</span> </div>
<div class="line"><a id="l01458" name="l01458"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_partition.html#a784596ab567f9f3cb4fe1a69466523d8"> 1458</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_partition.html#a784596ab567f9f3cb4fe1a69466523d8">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01459" name="l01459"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_partition.html#a8eca1be21ae9ccfda46e6f3e85f506ef"> 1459</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_partition.html#a8eca1be21ae9ccfda46e6f3e85f506ef">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01460" name="l01460"></a><span class="lineno"> 1460</span> </div>
<div class="line"><a id="l01461" name="l01461"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_partition.html#aa0cc55e4d4d2cb5d129d32832321df2c"> 1461</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01462" name="l01462"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_partition.html#a310f569a163958940ed02cf52079746a"> 1462</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01463" name="l01463"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_partition.html#ab5c7aa4fed325475b33d4004649f0dc0"> 1463</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_partition.html">Partition</a>)</div>
<div class="line"><a id="l01464" name="l01464"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_partition.html#ae5b792df683bc14dde89f75ac6bcbeaf"> 1464</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l01465" name="l01465"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_partition.html#aabdf6ef4f2159b2bfe93e0e87d4772f8"> 1465</a></span> <span class="keywordtype">bool</span> is_equivalent(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="line"><a id="l01466" name="l01466"></a><span class="lineno"> 1466</span> </div>
<div class="line"><a id="l01467" name="l01467"></a><span class="lineno"> 1467</span> private:</div>
<div class="line"><a id="l01468" name="l01468"></a><span class="lineno"> 1468</span> <span class="keywordtype">int</span> kth_;</div>
<div class="line"><a id="l01469" name="l01469"></a><span class="lineno"> 1469</span> <span class="keywordtype">int</span> axis_;</div>
<div class="line"><a id="l01470" name="l01470"></a><span class="lineno"> 1470</span> </div>
<div class="line"><a id="l01471" name="l01471"></a><span class="lineno"> 1471</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01472" name="l01472"></a><span class="lineno"> 1472</span>};</div>
</div>
<div class="line"><a id="l01473" name="l01473"></a><span class="lineno"> 1473</span> </div>
<div class="foldopen" id="foldopen01474" data-start="{" data-end="};">
<div class="line"><a id="l01474" name="l01474"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_power.html"> 1474</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_power.html">Power</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01475" name="l01475"></a><span class="lineno"> 1475</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l01476" name="l01476"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_power.html#a7bc6c64179b7a2aef56fe1dafb6459b2"> 1476</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_power.html#a7bc6c64179b7a2aef56fe1dafb6459b2">Power</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l01477" name="l01477"></a><span class="lineno"> 1477</span> </div>
<div class="line"><a id="l01478" name="l01478"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_power.html#a6783da16fb6ff393aaa57737f1973206"> 1478</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_power.html#a6783da16fb6ff393aaa57737f1973206">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01479" name="l01479"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_power.html#a80577d4c0853c24027777c90a1ec7e11"> 1479</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_power.html#a80577d4c0853c24027777c90a1ec7e11">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01480" name="l01480"></a><span class="lineno"> 1480</span> </div>
<div class="line"><a id="l01481" name="l01481"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_power.html#a5e22749592413a9adbdc877b03b87c8f"> 1481</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01482" name="l01482"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_power.html#a3e78b06453faa4fd149fd19c0e7a300a"> 1482</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01483" name="l01483"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_power.html#a33e2d7ff078426fe66ea2370ceb5af60"> 1483</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_power.html">Power</a>)</div>
<div class="line"><a id="l01484" name="l01484"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_power.html#a76b4ec9d1ff07f06189e414480453d68"> 1484</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l01485" name="l01485"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_power.html#a1c17867ea1bad8899adb38185c9423c1"> 1485</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l01486" name="l01486"></a><span class="lineno"> 1486</span> </div>
<div class="line"><a id="l01487" name="l01487"></a><span class="lineno"> 1487</span> private:</div>
<div class="line"><a id="l01488" name="l01488"></a><span class="lineno"> 1488</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01489" name="l01489"></a><span class="lineno"> 1489</span>};</div>
</div>
<div class="line"><a id="l01490" name="l01490"></a><span class="lineno"> 1490</span> </div>
<div class="foldopen" id="foldopen01491" data-start="{" data-end="};">
<div class="line"><a id="l01491" name="l01491"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_quantized_matmul.html"> 1491</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_quantized_matmul.html">QuantizedMatmul</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01492" name="l01492"></a><span class="lineno"> 1492</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen01493" data-start="{" data-end="}">
<div class="line"><a id="l01493" name="l01493"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_quantized_matmul.html#a5bd164d038d9dc21919f7e0bfdeaa25c"> 1493</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_quantized_matmul.html#a5bd164d038d9dc21919f7e0bfdeaa25c">QuantizedMatmul</a>(</div>
<div class="line"><a id="l01494" name="l01494"></a><span class="lineno"> 1494</span> <a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream,</div>
<div class="line"><a id="l01495" name="l01495"></a><span class="lineno"> 1495</span> <span class="keywordtype">int</span> group_size,</div>
<div class="line"><a id="l01496" name="l01496"></a><span class="lineno"> 1496</span> <span class="keywordtype">int</span> bits,</div>
<div class="line"><a id="l01497" name="l01497"></a><span class="lineno"> 1497</span> <span class="keywordtype">bool</span> transpose)</div>
<div class="line"><a id="l01498" name="l01498"></a><span class="lineno"> 1498</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream),</div>
<div class="line"><a id="l01499" name="l01499"></a><span class="lineno"> 1499</span> group_size_(group_size),</div>
<div class="line"><a id="l01500" name="l01500"></a><span class="lineno"> 1500</span> bits_(bits),</div>
<div class="line"><a id="l01501" name="l01501"></a><span class="lineno"> 1501</span> transpose_(<a class="code hl_function" href="group__ops.html#gac1869f3b7094869b44fe7ac4ce58638b">transpose</a>) {}</div>
</div>
<div class="line"><a id="l01502" name="l01502"></a><span class="lineno"> 1502</span> </div>
<div class="line"><a id="l01503" name="l01503"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_quantized_matmul.html#ab3dfa73b74d8f4f2e9ab4f0eb016b0e3"> 1503</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_quantized_matmul.html#ab3dfa73b74d8f4f2e9ab4f0eb016b0e3">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01504" name="l01504"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_quantized_matmul.html#a2812ad007d695ed1aaf9cf706fb9c4b3"> 1504</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_quantized_matmul.html#a2812ad007d695ed1aaf9cf706fb9c4b3">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01505" name="l01505"></a><span class="lineno"> 1505</span> </div>
<div class="line"><a id="l01506" name="l01506"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_quantized_matmul.html#a3434394140177b285f971c9ffe7e8763"> 1506</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01507" name="l01507"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_quantized_matmul.html#ae51fdd0b81dd26c6687577567c126e23"> 1507</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01508" name="l01508"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_quantized_matmul.html#aaef8c96d4d40b4fa08ced540d341a4db"> 1508</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_quantized_matmul.html">QuantizedMatmul</a>)</div>
<div class="line"><a id="l01509" name="l01509"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_quantized_matmul.html#af28b36e3f40ea41785387800326cc8e1"> 1509</a></span> <span class="keywordtype">bool</span> is_equivalent(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="line"><a id="l01510" name="l01510"></a><span class="lineno"> 1510</span> </div>
<div class="line"><a id="l01511" name="l01511"></a><span class="lineno"> 1511</span> private:</div>
<div class="line"><a id="l01512" name="l01512"></a><span class="lineno"> 1512</span> <span class="keywordtype">int</span> group_size_;</div>
<div class="line"><a id="l01513" name="l01513"></a><span class="lineno"> 1513</span> <span class="keywordtype">int</span> bits_;</div>
<div class="line"><a id="l01514" name="l01514"></a><span class="lineno"> 1514</span> <span class="keywordtype">bool</span> transpose_;</div>
<div class="line"><a id="l01515" name="l01515"></a><span class="lineno"> 1515</span> </div>
<div class="line"><a id="l01516" name="l01516"></a><span class="lineno"> 1516</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01517" name="l01517"></a><span class="lineno"> 1517</span>};</div>
</div>
<div class="line"><a id="l01518" name="l01518"></a><span class="lineno"> 1518</span> </div>
<div class="foldopen" id="foldopen01519" data-start="{" data-end="};">
<div class="line"><a id="l01519" name="l01519"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_gather_q_m_m.html"> 1519</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_gather_q_m_m.html">GatherQMM</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01520" name="l01520"></a><span class="lineno"> 1520</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen01521" data-start="{" data-end="}">
<div class="line"><a id="l01521" name="l01521"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_gather_q_m_m.html#a60ed2ade7f10dd9c9314913a810f9360"> 1521</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_gather_q_m_m.html#a60ed2ade7f10dd9c9314913a810f9360">GatherQMM</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream, <span class="keywordtype">int</span> group_size, <span class="keywordtype">int</span> bits, <span class="keywordtype">bool</span> transpose)</div>
<div class="line"><a id="l01522" name="l01522"></a><span class="lineno"> 1522</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream),</div>
<div class="line"><a id="l01523" name="l01523"></a><span class="lineno"> 1523</span> group_size_(group_size),</div>
<div class="line"><a id="l01524" name="l01524"></a><span class="lineno"> 1524</span> bits_(bits),</div>
<div class="line"><a id="l01525" name="l01525"></a><span class="lineno"> 1525</span> transpose_(<a class="code hl_function" href="group__ops.html#gac1869f3b7094869b44fe7ac4ce58638b">transpose</a>) {}</div>
</div>
<div class="line"><a id="l01526" name="l01526"></a><span class="lineno"> 1526</span> </div>
<div class="line"><a id="l01527" name="l01527"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_gather_q_m_m.html#a89aae98bfbdd6563df44ef7d70f0bf8c"> 1527</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_gather_q_m_m.html#a89aae98bfbdd6563df44ef7d70f0bf8c">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01528" name="l01528"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_gather_q_m_m.html#a86eb048afc95646b2e96ec5493e3d887"> 1528</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_gather_q_m_m.html#a86eb048afc95646b2e96ec5493e3d887">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01529" name="l01529"></a><span class="lineno"> 1529</span> </div>
<div class="line"><a id="l01530" name="l01530"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_gather_q_m_m.html#a13ce5e138ebddb8780a034452f68892f"> 1530</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01531" name="l01531"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_gather_q_m_m.html#adc579058752b927c71b45a962d4869e0"> 1531</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01532" name="l01532"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_gather_q_m_m.html#a53c3fa7beb51ce2e1c2da28633406fe0"> 1532</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_gather_q_m_m.html">GatherQMM</a>)</div>
<div class="line"><a id="l01533" name="l01533"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_gather_q_m_m.html#a6a7da6bcf657fcdb157c45bf35fdec11"> 1533</a></span> <span class="keywordtype">bool</span> is_equivalent(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="line"><a id="l01534" name="l01534"></a><span class="lineno"> 1534</span> </div>
<div class="line"><a id="l01535" name="l01535"></a><span class="lineno"> 1535</span> private:</div>
<div class="line"><a id="l01536" name="l01536"></a><span class="lineno"> 1536</span> <span class="keywordtype">int</span> group_size_;</div>
<div class="line"><a id="l01537" name="l01537"></a><span class="lineno"> 1537</span> <span class="keywordtype">int</span> bits_;</div>
<div class="line"><a id="l01538" name="l01538"></a><span class="lineno"> 1538</span> <span class="keywordtype">bool</span> transpose_;</div>
<div class="line"><a id="l01539" name="l01539"></a><span class="lineno"> 1539</span> </div>
<div class="line"><a id="l01540" name="l01540"></a><span class="lineno"> 1540</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01541" name="l01541"></a><span class="lineno"> 1541</span>};</div>
</div>
<div class="line"><a id="l01542" name="l01542"></a><span class="lineno"> 1542</span> </div>
<div class="foldopen" id="foldopen01543" data-start="{" data-end="};">
<div class="line"><a id="l01543" name="l01543"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_random_bits.html"> 1543</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_random_bits.html">RandomBits</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01544" name="l01544"></a><span class="lineno"> 1544</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen01545" data-start="{" data-end="}">
<div class="line"><a id="l01545" name="l01545"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_random_bits.html#a7dd5ed03f2a4ab45d1d5e8e2b587de6b"> 1545</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_random_bits.html#a7dd5ed03f2a4ab45d1d5e8e2b587de6b">RandomBits</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream, <span class="keyword">const</span> std::vector&lt;int&gt;&amp; shape, <span class="keywordtype">int</span> width)</div>
<div class="line"><a id="l01546" name="l01546"></a><span class="lineno"> 1546</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream), shape_(shape), width_(width) {}</div>
</div>
<div class="line"><a id="l01547" name="l01547"></a><span class="lineno"> 1547</span> </div>
<div class="line"><a id="l01548" name="l01548"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_random_bits.html#a5752d051cd16cf5f8d4754c0a656f0d2"> 1548</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_random_bits.html#a5752d051cd16cf5f8d4754c0a656f0d2">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01549" name="l01549"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_random_bits.html#a578756866665358577418e4cdd94aa3a"> 1549</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_random_bits.html#a578756866665358577418e4cdd94aa3a">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01550" name="l01550"></a><span class="lineno"> 1550</span> </div>
<div class="line"><a id="l01551" name="l01551"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_random_bits.html#a0dc12f053c6492f934bc18031412c415"> 1551</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01552" name="l01552"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_random_bits.html#a8a5593c34fd868d94b36a8ced1390271"> 1552</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_random_bits.html">RandomBits</a>)</div>
<div class="line"><a id="l01553" name="l01553"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_random_bits.html#a72ec915debf5823e7c0463045b2894e6"> 1553</a></span> <span class="keywordtype">bool</span> is_equivalent(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="line"><a id="l01554" name="l01554"></a><span class="lineno"> 1554</span> </div>
<div class="line"><a id="l01555" name="l01555"></a><span class="lineno"> 1555</span> private:</div>
<div class="line"><a id="l01556" name="l01556"></a><span class="lineno"> 1556</span> std::vector&lt;<span class="keywordtype">int</span>&gt; shape_;</div>
<div class="line"><a id="l01557" name="l01557"></a><span class="lineno"> 1557</span> <span class="keywordtype">int</span> width_;</div>
<div class="line"><a id="l01558" name="l01558"></a><span class="lineno"> 1558</span> </div>
<div class="line"><a id="l01559" name="l01559"></a><span class="lineno"> 1559</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01560" name="l01560"></a><span class="lineno"> 1560</span>};</div>
</div>
<div class="line"><a id="l01561" name="l01561"></a><span class="lineno"> 1561</span> </div>
<div class="foldopen" id="foldopen01562" data-start="{" data-end="};">
<div class="line"><a id="l01562" name="l01562"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_reshape.html"> 1562</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_reshape.html">Reshape</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01563" name="l01563"></a><span class="lineno"> 1563</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen01564" data-start="{" data-end="}">
<div class="line"><a id="l01564" name="l01564"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_reshape.html#aa7c5a6e18d0615ad36102de01929eb26"> 1564</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_reshape.html#aa7c5a6e18d0615ad36102de01929eb26">Reshape</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream, <span class="keyword">const</span> std::vector&lt;int&gt;&amp; shape)</div>
<div class="line"><a id="l01565" name="l01565"></a><span class="lineno"> 1565</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream), shape_(shape) {}</div>
</div>
<div class="line"><a id="l01566" name="l01566"></a><span class="lineno"> 1566</span> </div>
<div class="line"><a id="l01567" name="l01567"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_reshape.html#a658de2c5f710991b48e14b2bd19b229f"> 1567</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_reshape.html#a658de2c5f710991b48e14b2bd19b229f">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01568" name="l01568"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_reshape.html#aa1e85f28471875750c47351520b56059"> 1568</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_reshape.html#aa1e85f28471875750c47351520b56059">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01569" name="l01569"></a><span class="lineno"> 1569</span> </div>
<div class="line"><a id="l01570" name="l01570"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_reshape.html#ae239dd3c6cab147e4af572dc58204f9d"> 1570</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01571" name="l01571"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_reshape.html#ab8fc28748991017cc3e29f93c91087a5"> 1571</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01572" name="l01572"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_reshape.html#a0f2323d5d67ece0eb25ecff565b21862"> 1572</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_reshape.html">Reshape</a>)</div>
<div class="line"><a id="l01573" name="l01573"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_reshape.html#abd07c53af476777a04307e0423784cf3"> 1573</a></span> <span class="keywordtype">bool</span> is_equivalent(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="line"><a id="l01574" name="l01574"></a><span class="lineno"> 1574</span> </div>
<div class="line"><a id="l01575" name="l01575"></a><span class="lineno"> 1575</span> private:</div>
<div class="line"><a id="l01576" name="l01576"></a><span class="lineno"> 1576</span> std::vector&lt;<span class="keywordtype">int</span>&gt; shape_;</div>
<div class="line"><a id="l01577" name="l01577"></a><span class="lineno"> 1577</span> </div>
<div class="line"><a id="l01578" name="l01578"></a><span class="lineno"> 1578</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01579" name="l01579"></a><span class="lineno"> 1579</span> </div>
<div class="line"><a id="l01580" name="l01580"></a><span class="lineno"> 1580</span> std::pair&lt;<span class="keywordtype">bool</span>, std::vector&lt;<span class="keywordtype">size_t</span>&gt;&gt; prepare_reshape(</div>
<div class="line"><a id="l01581" name="l01581"></a><span class="lineno"> 1581</span> const <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; in,</div>
<div class="line"><a id="l01582" name="l01582"></a><span class="lineno"> 1582</span> const <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01583" name="l01583"></a><span class="lineno"> 1583</span> <span class="keywordtype">void</span> shared_buffer_reshape(</div>
<div class="line"><a id="l01584" name="l01584"></a><span class="lineno"> 1584</span> const <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; in,</div>
<div class="line"><a id="l01585" name="l01585"></a><span class="lineno"> 1585</span> const std::vector&lt;<span class="keywordtype">size_t</span>&gt;&amp; out_strides,</div>
<div class="line"><a id="l01586" name="l01586"></a><span class="lineno"> 1586</span> <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01587" name="l01587"></a><span class="lineno"> 1587</span>};</div>
</div>
<div class="line"><a id="l01588" name="l01588"></a><span class="lineno"> 1588</span> </div>
<div class="foldopen" id="foldopen01589" data-start="{" data-end="};">
<div class="line"><a id="l01589" name="l01589"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_reduce.html"> 1589</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_reduce.html">Reduce</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01590" name="l01590"></a><span class="lineno"> 1590</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l01591" name="l01591"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_reduce.html#a0848518b16ae6d4043d6be247bdf31c9a5cc3412a1f243dcb11661bca42daea93"> 1591</a></span> <span class="keyword">enum</span> <a class="code hl_enumeration" href="classmlx_1_1core_1_1_reduce.html#a0848518b16ae6d4043d6be247bdf31c9">ReduceType</a> { <a class="code hl_enumvalue" href="classmlx_1_1core_1_1_reduce.html#a0848518b16ae6d4043d6be247bdf31c9a5cc3412a1f243dcb11661bca42daea93">And</a>, <a class="code hl_struct" href="struct_or.html">Or</a>, <a class="code hl_struct" href="struct_sum.html">Sum</a>, <a class="code hl_struct" href="struct_prod.html">Prod</a>, <a class="code hl_struct" href="struct_min.html">Min</a>, <a class="code hl_struct" href="struct_max.html">Max</a> };</div>
<div class="line"><a id="l01592" name="l01592"></a><span class="lineno"> 1592</span> </div>
<div class="foldopen" id="foldopen01593" data-start="{" data-end="}">
<div class="line"><a id="l01593" name="l01593"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_reduce.html#a055368c1d036fb953a23ef230e33dcbf"> 1593</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_reduce.html#a055368c1d036fb953a23ef230e33dcbf">Reduce</a>(</div>
<div class="line"><a id="l01594" name="l01594"></a><span class="lineno"> 1594</span> <a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream,</div>
<div class="line"><a id="l01595" name="l01595"></a><span class="lineno"> 1595</span> <a class="code hl_enumeration" href="classmlx_1_1core_1_1_reduce.html#a0848518b16ae6d4043d6be247bdf31c9">ReduceType</a> reduce_type,</div>
<div class="line"><a id="l01596" name="l01596"></a><span class="lineno"> 1596</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; axes)</div>
<div class="line"><a id="l01597" name="l01597"></a><span class="lineno"> 1597</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream), reduce_type_(reduce_type), axes_(axes) {}</div>
</div>
<div class="line"><a id="l01598" name="l01598"></a><span class="lineno"> 1598</span> </div>
<div class="line"><a id="l01599" name="l01599"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_reduce.html#aeb8a58b560c0a09ae3a695df7829acfa"> 1599</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_reduce.html#aeb8a58b560c0a09ae3a695df7829acfa">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01600" name="l01600"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_reduce.html#ae9caaf42edadfe73ea208d98f526890f"> 1600</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_reduce.html#ae9caaf42edadfe73ea208d98f526890f">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01601" name="l01601"></a><span class="lineno"> 1601</span> </div>
<div class="line"><a id="l01602" name="l01602"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_reduce.html#abab1b5aa01ccad44f213f510c3596b38"> 1602</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01603" name="l01603"></a><span class="lineno"> 1603</span> </div>
<div class="line"><a id="l01604" name="l01604"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_reduce.html#a684883d2a96315f548ca769510e28e4e"> 1604</a></span> std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt; vjp(</div>
<div class="line"><a id="l01605" name="l01605"></a><span class="lineno"> 1605</span> const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; primals,</div>
<div class="line"><a id="l01606" name="l01606"></a><span class="lineno"> 1606</span> const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; cotangents,</div>
<div class="line"><a id="l01607" name="l01607"></a><span class="lineno"> 1607</span> const std::vector&lt;<span class="keywordtype">int</span>&gt;&amp; argnums,</div>
<div class="line"><a id="l01608" name="l01608"></a><span class="lineno"> 1608</span> const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; outputs) override;</div>
<div class="line"><a id="l01609" name="l01609"></a><span class="lineno"> 1609</span> </div>
<div class="line"><a id="l01610" name="l01610"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_reduce.html#a0f73c2a55dc324145e11020c9b4d9a65"> 1610</a></span> std::vector&lt;std::vector&lt;<span class="keywordtype">int</span>&gt;&gt; output_shapes(</div>
<div class="line"><a id="l01611" name="l01611"></a><span class="lineno"> 1611</span> const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs) override;</div>
<div class="line"><a id="l01612" name="l01612"></a><span class="lineno"> 1612</span> </div>
<div class="foldopen" id="foldopen01613" data-start="{" data-end="}">
<div class="line"><a id="l01613" name="l01613"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_reduce.html#a399be3a89553787a0a687706881f03cd"> 1613</a></span> <span class="keywordtype">void</span> print(std::ostream&amp; os)<span class="keyword"> override </span>{</div>
<div class="line"><a id="l01614" name="l01614"></a><span class="lineno"> 1614</span> <span class="keywordflow">switch</span> (reduce_type_) {</div>
<div class="line"><a id="l01615" name="l01615"></a><span class="lineno"> 1615</span> <span class="keywordflow">case</span> <a class="code hl_struct" href="struct_and.html">And</a>:</div>
<div class="line"><a id="l01616" name="l01616"></a><span class="lineno"> 1616</span> os &lt;&lt; <span class="stringliteral">&quot;And&quot;</span>;</div>
<div class="line"><a id="l01617" name="l01617"></a><span class="lineno"> 1617</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01618" name="l01618"></a><span class="lineno"> 1618</span> <span class="keywordflow">case</span> <a class="code hl_struct" href="struct_or.html">Or</a>:</div>
<div class="line"><a id="l01619" name="l01619"></a><span class="lineno"> 1619</span> os &lt;&lt; <span class="stringliteral">&quot;Or&quot;</span>;</div>
<div class="line"><a id="l01620" name="l01620"></a><span class="lineno"> 1620</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01621" name="l01621"></a><span class="lineno"> 1621</span> <span class="keywordflow">case</span> <a class="code hl_struct" href="struct_sum.html">Sum</a>:</div>
<div class="line"><a id="l01622" name="l01622"></a><span class="lineno"> 1622</span> os &lt;&lt; <span class="stringliteral">&quot;Sum&quot;</span>;</div>
<div class="line"><a id="l01623" name="l01623"></a><span class="lineno"> 1623</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01624" name="l01624"></a><span class="lineno"> 1624</span> <span class="keywordflow">case</span> <a class="code hl_struct" href="struct_prod.html">Prod</a>:</div>
<div class="line"><a id="l01625" name="l01625"></a><span class="lineno"> 1625</span> os &lt;&lt; <span class="stringliteral">&quot;Prod&quot;</span>;</div>
<div class="line"><a id="l01626" name="l01626"></a><span class="lineno"> 1626</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01627" name="l01627"></a><span class="lineno"> 1627</span> <span class="keywordflow">case</span> <a class="code hl_struct" href="struct_min.html">Min</a>:</div>
<div class="line"><a id="l01628" name="l01628"></a><span class="lineno"> 1628</span> os &lt;&lt; <span class="stringliteral">&quot;Min&quot;</span>;</div>
<div class="line"><a id="l01629" name="l01629"></a><span class="lineno"> 1629</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01630" name="l01630"></a><span class="lineno"> 1630</span> <span class="keywordflow">case</span> <a class="code hl_struct" href="struct_max.html">Max</a>:</div>
<div class="line"><a id="l01631" name="l01631"></a><span class="lineno"> 1631</span> os &lt;&lt; <span class="stringliteral">&quot;Max&quot;</span>;</div>
<div class="line"><a id="l01632" name="l01632"></a><span class="lineno"> 1632</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01633" name="l01633"></a><span class="lineno"> 1633</span> }</div>
<div class="line"><a id="l01634" name="l01634"></a><span class="lineno"> 1634</span> }</div>
</div>
<div class="line"><a id="l01635" name="l01635"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_reduce.html#abe8f3327d617d0dd7438f066497ae08e"> 1635</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classmlx_1_1core_1_1_reduce.html#abe8f3327d617d0dd7438f066497ae08e">is_equivalent</a>(<span class="keyword">const</span> <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) <span class="keyword">const override</span>;</div>
<div class="line"><a id="l01636" name="l01636"></a><span class="lineno"> 1636</span> </div>
<div class="line"><a id="l01637" name="l01637"></a><span class="lineno"> 1637</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l01638" name="l01638"></a><span class="lineno"> 1638</span> <a class="code hl_enumeration" href="classmlx_1_1core_1_1_reduce.html#a0848518b16ae6d4043d6be247bdf31c9">ReduceType</a> reduce_type_;</div>
<div class="line"><a id="l01639" name="l01639"></a><span class="lineno"> 1639</span> std::vector&lt;int&gt; axes_;</div>
<div class="line"><a id="l01640" name="l01640"></a><span class="lineno"> 1640</span> </div>
<div class="line"><a id="l01641" name="l01641"></a><span class="lineno"> 1641</span> <span class="keywordtype">void</span> <a class="code hl_function" href="namespacemlx_1_1core.html#a7d6e097d8effed52f4713672e471f299">eval</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01642" name="l01642"></a><span class="lineno"> 1642</span>};</div>
</div>
<div class="line"><a id="l01643" name="l01643"></a><span class="lineno"> 1643</span> </div>
<div class="foldopen" id="foldopen01644" data-start="{" data-end="};">
<div class="line"><a id="l01644" name="l01644"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_round.html"> 1644</a></span><span class="keyword">class </span><a class="code hl_class" href="classmlx_1_1core_1_1_round.html">Round</a> : <span class="keyword">public</span> <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01645" name="l01645"></a><span class="lineno"> 1645</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l01646" name="l01646"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_round.html#a1327a359b2aed91f576145a0e70d1dde"> 1646</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_round.html#a1327a359b2aed91f576145a0e70d1dde">Round</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l01647" name="l01647"></a><span class="lineno"> 1647</span> </div>
<div class="line"><a id="l01648" name="l01648"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_round.html#ad066b0944b437f64ab546025efa00007"> 1648</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_round.html#ad066b0944b437f64ab546025efa00007">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01649" name="l01649"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_round.html#af7fe5ff8f3db166c203b4be4b07f13ec"> 1649</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_round.html#af7fe5ff8f3db166c203b4be4b07f13ec">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01650" name="l01650"></a><span class="lineno"> 1650</span> </div>
<div class="line"><a id="l01651" name="l01651"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_round.html#a6fad8799a7982e1ccbe05be7cc38a7fd"> 1651</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01652" name="l01652"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_round.html#a032075a7d0dde2dba6189636d216c5e7"> 1652</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01653" name="l01653"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_round.html#af0dfe8943109c936b35ab0082f566f72"> 1653</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_round.html">Round</a>)</div>
<div class="line"><a id="l01654" name="l01654"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_round.html#aeb3d8607bbba7345a3142d4cbd4e6927"> 1654</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l01655" name="l01655"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_round.html#ad9a26817864dfc94b56e66bc6d80b047"> 1655</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l01656" name="l01656"></a><span class="lineno"> 1656</span> </div>
<div class="line"><a id="l01657" name="l01657"></a><span class="lineno"> 1657</span> private:</div>
<div class="line"><a id="l01658" name="l01658"></a><span class="lineno"> 1658</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01659" name="l01659"></a><span class="lineno"> 1659</span>};</div>
</div>
<div class="line"><a id="l01660" name="l01660"></a><span class="lineno"> 1660</span> </div>
<div class="foldopen" id="foldopen01661" data-start="{" data-end="};">
<div class="line"><a id="l01661" name="l01661"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_scan.html"> 1661</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_scan.html">Scan</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01662" name="l01662"></a><span class="lineno"> 1662</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l01663" name="l01663"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_scan.html#a47bf2ec54ead4b8f00f9f188518630f1ad54b2905015a390708f79bae6cdac56d"> 1663</a></span> <span class="keyword">enum</span> <a class="code hl_enumeration" href="classmlx_1_1core_1_1_scan.html#a47bf2ec54ead4b8f00f9f188518630f1">ReduceType</a> { <a class="code hl_enumvalue" href="classmlx_1_1core_1_1_scan.html#a47bf2ec54ead4b8f00f9f188518630f1ad54b2905015a390708f79bae6cdac56d">Max</a>, <a class="code hl_struct" href="struct_min.html">Min</a>, <a class="code hl_struct" href="struct_sum.html">Sum</a>, <a class="code hl_struct" href="struct_prod.html">Prod</a> };</div>
<div class="line"><a id="l01664" name="l01664"></a><span class="lineno"> 1664</span> </div>
<div class="foldopen" id="foldopen01665" data-start="{" data-end="}">
<div class="line"><a id="l01665" name="l01665"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_scan.html#ac93e8f9c6771de825d2186ef34fa7087"> 1665</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_scan.html#ac93e8f9c6771de825d2186ef34fa7087">Scan</a>(</div>
<div class="line"><a id="l01666" name="l01666"></a><span class="lineno"> 1666</span> <a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream,</div>
<div class="line"><a id="l01667" name="l01667"></a><span class="lineno"> 1667</span> <a class="code hl_enumeration" href="classmlx_1_1core_1_1_scan.html#a47bf2ec54ead4b8f00f9f188518630f1">ReduceType</a> reduce_type,</div>
<div class="line"><a id="l01668" name="l01668"></a><span class="lineno"> 1668</span> <span class="keywordtype">int</span> axis,</div>
<div class="line"><a id="l01669" name="l01669"></a><span class="lineno"> 1669</span> <span class="keywordtype">bool</span> reverse,</div>
<div class="line"><a id="l01670" name="l01670"></a><span class="lineno"> 1670</span> <span class="keywordtype">bool</span> inclusive)</div>
<div class="line"><a id="l01671" name="l01671"></a><span class="lineno"> 1671</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream),</div>
<div class="line"><a id="l01672" name="l01672"></a><span class="lineno"> 1672</span> reduce_type_(reduce_type),</div>
<div class="line"><a id="l01673" name="l01673"></a><span class="lineno"> 1673</span> axis_(axis),</div>
<div class="line"><a id="l01674" name="l01674"></a><span class="lineno"> 1674</span> reverse_(reverse),</div>
<div class="line"><a id="l01675" name="l01675"></a><span class="lineno"> 1675</span> inclusive_(inclusive) {}</div>
</div>
<div class="line"><a id="l01676" name="l01676"></a><span class="lineno"> 1676</span> </div>
<div class="line"><a id="l01677" name="l01677"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_scan.html#a15676d9fd066e935782a923fba3e940b"> 1677</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_scan.html#a15676d9fd066e935782a923fba3e940b">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01678" name="l01678"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_scan.html#aef22c6fc2b2cb2a907cd8965c7413dde"> 1678</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_scan.html#aef22c6fc2b2cb2a907cd8965c7413dde">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01679" name="l01679"></a><span class="lineno"> 1679</span> </div>
<div class="line"><a id="l01680" name="l01680"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_scan.html#a297c7cc89c9bf9d186ebdebb634c7804"> 1680</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01681" name="l01681"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_scan.html#a6f9c862f4fbc7eaf430a361cdd8933ee"> 1681</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>();</div>
<div class="line"><a id="l01682" name="l01682"></a><span class="lineno"> 1682</span> </div>
<div class="foldopen" id="foldopen01683" data-start="{" data-end="}">
<div class="line"><a id="l01683" name="l01683"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_scan.html#ad5b6308c79e9b985a49df35eadd15b22"> 1683</a></span> <span class="keywordtype">void</span> print(std::ostream&amp; os)<span class="keyword"> override </span>{</div>
<div class="line"><a id="l01684" name="l01684"></a><span class="lineno"> 1684</span> os &lt;&lt; <span class="stringliteral">&quot;Cum&quot;</span>;</div>
<div class="line"><a id="l01685" name="l01685"></a><span class="lineno"> 1685</span> <span class="keywordflow">switch</span> (reduce_type_) {</div>
<div class="line"><a id="l01686" name="l01686"></a><span class="lineno"> 1686</span> <span class="keywordflow">case</span> <a class="code hl_struct" href="struct_sum.html">Sum</a>:</div>
<div class="line"><a id="l01687" name="l01687"></a><span class="lineno"> 1687</span> os &lt;&lt; <span class="stringliteral">&quot;Sum&quot;</span>;</div>
<div class="line"><a id="l01688" name="l01688"></a><span class="lineno"> 1688</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01689" name="l01689"></a><span class="lineno"> 1689</span> <span class="keywordflow">case</span> <a class="code hl_struct" href="struct_prod.html">Prod</a>:</div>
<div class="line"><a id="l01690" name="l01690"></a><span class="lineno"> 1690</span> os &lt;&lt; <span class="stringliteral">&quot;Prod&quot;</span>;</div>
<div class="line"><a id="l01691" name="l01691"></a><span class="lineno"> 1691</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01692" name="l01692"></a><span class="lineno"> 1692</span> <span class="keywordflow">case</span> <a class="code hl_struct" href="struct_min.html">Min</a>:</div>
<div class="line"><a id="l01693" name="l01693"></a><span class="lineno"> 1693</span> os &lt;&lt; <span class="stringliteral">&quot;Min&quot;</span>;</div>
<div class="line"><a id="l01694" name="l01694"></a><span class="lineno"> 1694</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01695" name="l01695"></a><span class="lineno"> 1695</span> <span class="keywordflow">case</span> <a class="code hl_struct" href="struct_max.html">Max</a>:</div>
<div class="line"><a id="l01696" name="l01696"></a><span class="lineno"> 1696</span> os &lt;&lt; <span class="stringliteral">&quot;Max&quot;</span>;</div>
<div class="line"><a id="l01697" name="l01697"></a><span class="lineno"> 1697</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01698" name="l01698"></a><span class="lineno"> 1698</span> }</div>
<div class="line"><a id="l01699" name="l01699"></a><span class="lineno"> 1699</span> }</div>
</div>
<div class="line"><a id="l01700" name="l01700"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_scan.html#a54445a4d677ca4fe2a58d08eb5223ac6"> 1700</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classmlx_1_1core_1_1_scan.html#a54445a4d677ca4fe2a58d08eb5223ac6">is_equivalent</a>(<span class="keyword">const</span> <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) <span class="keyword">const override</span>;</div>
<div class="line"><a id="l01701" name="l01701"></a><span class="lineno"> 1701</span> </div>
<div class="line"><a id="l01702" name="l01702"></a><span class="lineno"> 1702</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l01703" name="l01703"></a><span class="lineno"> 1703</span> <a class="code hl_enumeration" href="classmlx_1_1core_1_1_scan.html#a47bf2ec54ead4b8f00f9f188518630f1">ReduceType</a> reduce_type_;</div>
<div class="line"><a id="l01704" name="l01704"></a><span class="lineno"> 1704</span> <span class="keywordtype">int</span> axis_;</div>
<div class="line"><a id="l01705" name="l01705"></a><span class="lineno"> 1705</span> <span class="keywordtype">bool</span> reverse_;</div>
<div class="line"><a id="l01706" name="l01706"></a><span class="lineno"> 1706</span> <span class="keywordtype">bool</span> inclusive_;</div>
<div class="line"><a id="l01707" name="l01707"></a><span class="lineno"> 1707</span> </div>
<div class="line"><a id="l01708" name="l01708"></a><span class="lineno"> 1708</span> <span class="keywordtype">void</span> <a class="code hl_function" href="namespacemlx_1_1core.html#a7d6e097d8effed52f4713672e471f299">eval</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01709" name="l01709"></a><span class="lineno"> 1709</span>};</div>
</div>
<div class="line"><a id="l01710" name="l01710"></a><span class="lineno"> 1710</span> </div>
<div class="foldopen" id="foldopen01711" data-start="{" data-end="};">
<div class="line"><a id="l01711" name="l01711"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_scatter.html"> 1711</a></span><span class="keyword">class </span><a class="code hl_class" href="classmlx_1_1core_1_1_scatter.html">Scatter</a> : <span class="keyword">public</span> <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01712" name="l01712"></a><span class="lineno"> 1712</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l01713" name="l01713"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_scatter.html#a614d19af11dc30644b2b4941033b613ca1c2da7b96d743296fe660f5fc4072f16"> 1713</a></span> <span class="keyword">enum</span> <a class="code hl_enumeration" href="classmlx_1_1core_1_1_scatter.html#a614d19af11dc30644b2b4941033b613c">ReduceType</a> { <a class="code hl_enumvalue" href="classmlx_1_1core_1_1_scatter.html#a614d19af11dc30644b2b4941033b613ca1c2da7b96d743296fe660f5fc4072f16">Max</a>, <a class="code hl_struct" href="struct_min.html">Min</a>, <a class="code hl_struct" href="struct_sum.html">Sum</a>, <a class="code hl_struct" href="struct_prod.html">Prod</a>, <a class="code hl_struct" href="struct_none.html">None</a> };</div>
<div class="line"><a id="l01714" name="l01714"></a><span class="lineno"> 1714</span> </div>
<div class="foldopen" id="foldopen01715" data-start="{" data-end="}">
<div class="line"><a id="l01715" name="l01715"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_scatter.html#ac9b3eff67389ef9aa820753379ffeaa3"> 1715</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_scatter.html#ac9b3eff67389ef9aa820753379ffeaa3">Scatter</a>(</div>
<div class="line"><a id="l01716" name="l01716"></a><span class="lineno"> 1716</span> <a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream,</div>
<div class="line"><a id="l01717" name="l01717"></a><span class="lineno"> 1717</span> <a class="code hl_enumeration" href="classmlx_1_1core_1_1_scatter.html#a614d19af11dc30644b2b4941033b613c">ReduceType</a> reduce_type,</div>
<div class="line"><a id="l01718" name="l01718"></a><span class="lineno"> 1718</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; axes)</div>
<div class="line"><a id="l01719" name="l01719"></a><span class="lineno"> 1719</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream), reduce_type_(reduce_type), axes_(axes) {}</div>
</div>
<div class="line"><a id="l01720" name="l01720"></a><span class="lineno"> 1720</span> </div>
<div class="line"><a id="l01721" name="l01721"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_scatter.html#a7623f590f8b77167b5ebb4f14bc9dc97"> 1721</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_scatter.html#a7623f590f8b77167b5ebb4f14bc9dc97">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01722" name="l01722"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_scatter.html#ab304345db3d8cfeea15e27461ae2e678"> 1722</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_scatter.html#ab304345db3d8cfeea15e27461ae2e678">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01723" name="l01723"></a><span class="lineno"> 1723</span> </div>
<div class="line"><a id="l01724" name="l01724"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_scatter.html#a696c38b373a7a7c71bc112bd1117e322"> 1724</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>();</div>
<div class="line"><a id="l01725" name="l01725"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_scatter.html#a270fa8ccf36ce4bbbc23875139223934"> 1725</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>();</div>
<div class="line"><a id="l01726" name="l01726"></a><span class="lineno"> 1726</span> </div>
<div class="foldopen" id="foldopen01727" data-start="{" data-end="}">
<div class="line"><a id="l01727" name="l01727"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_scatter.html#aa9d45cbfb27b814517f6016092b30efa"> 1727</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_scatter.html#aa9d45cbfb27b814517f6016092b30efa">print</a>(std::ostream&amp; os)<span class="keyword"> override </span>{</div>
<div class="line"><a id="l01728" name="l01728"></a><span class="lineno"> 1728</span> os &lt;&lt; <span class="stringliteral">&quot;Scatter&quot;</span>;</div>
<div class="line"><a id="l01729" name="l01729"></a><span class="lineno"> 1729</span> <span class="keywordflow">switch</span> (reduce_type_) {</div>
<div class="line"><a id="l01730" name="l01730"></a><span class="lineno"> 1730</span> <span class="keywordflow">case</span> <a class="code hl_struct" href="struct_sum.html">Sum</a>:</div>
<div class="line"><a id="l01731" name="l01731"></a><span class="lineno"> 1731</span> os &lt;&lt; <span class="stringliteral">&quot; Sum&quot;</span>;</div>
<div class="line"><a id="l01732" name="l01732"></a><span class="lineno"> 1732</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01733" name="l01733"></a><span class="lineno"> 1733</span> <span class="keywordflow">case</span> <a class="code hl_struct" href="struct_prod.html">Prod</a>:</div>
<div class="line"><a id="l01734" name="l01734"></a><span class="lineno"> 1734</span> os &lt;&lt; <span class="stringliteral">&quot; Prod&quot;</span>;</div>
<div class="line"><a id="l01735" name="l01735"></a><span class="lineno"> 1735</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01736" name="l01736"></a><span class="lineno"> 1736</span> <span class="keywordflow">case</span> <a class="code hl_struct" href="struct_min.html">Min</a>:</div>
<div class="line"><a id="l01737" name="l01737"></a><span class="lineno"> 1737</span> os &lt;&lt; <span class="stringliteral">&quot; Min&quot;</span>;</div>
<div class="line"><a id="l01738" name="l01738"></a><span class="lineno"> 1738</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01739" name="l01739"></a><span class="lineno"> 1739</span> <span class="keywordflow">case</span> <a class="code hl_struct" href="struct_max.html">Max</a>:</div>
<div class="line"><a id="l01740" name="l01740"></a><span class="lineno"> 1740</span> os &lt;&lt; <span class="stringliteral">&quot; Max&quot;</span>;</div>
<div class="line"><a id="l01741" name="l01741"></a><span class="lineno"> 1741</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01742" name="l01742"></a><span class="lineno"> 1742</span> <span class="keywordflow">case</span> <a class="code hl_struct" href="struct_none.html">None</a>:</div>
<div class="line"><a id="l01743" name="l01743"></a><span class="lineno"> 1743</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01744" name="l01744"></a><span class="lineno"> 1744</span> }</div>
<div class="line"><a id="l01745" name="l01745"></a><span class="lineno"> 1745</span> }</div>
</div>
<div class="line"><a id="l01746" name="l01746"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_scatter.html#a0208172562abdc90472e6eb5f84c987f"> 1746</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classmlx_1_1core_1_1_scatter.html#a0208172562abdc90472e6eb5f84c987f">is_equivalent</a>(<span class="keyword">const</span> <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) <span class="keyword">const override</span>;</div>
<div class="line"><a id="l01747" name="l01747"></a><span class="lineno"> 1747</span> </div>
<div class="line"><a id="l01748" name="l01748"></a><span class="lineno"> 1748</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l01749" name="l01749"></a><span class="lineno"> 1749</span> <span class="keywordtype">void</span> <a class="code hl_function" href="namespacemlx_1_1core.html#a7d6e097d8effed52f4713672e471f299">eval</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01750" name="l01750"></a><span class="lineno"> 1750</span> <a class="code hl_enumeration" href="classmlx_1_1core_1_1_scatter.html#a614d19af11dc30644b2b4941033b613c">ReduceType</a> reduce_type_;</div>
<div class="line"><a id="l01751" name="l01751"></a><span class="lineno"> 1751</span> std::vector&lt;int&gt; axes_;</div>
<div class="line"><a id="l01752" name="l01752"></a><span class="lineno"> 1752</span>};</div>
</div>
<div class="line"><a id="l01753" name="l01753"></a><span class="lineno"> 1753</span> </div>
<div class="foldopen" id="foldopen01754" data-start="{" data-end="};">
<div class="line"><a id="l01754" name="l01754"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sigmoid.html"> 1754</a></span><span class="keyword">class </span><a class="code hl_class" href="classmlx_1_1core_1_1_sigmoid.html">Sigmoid</a> : <span class="keyword">public</span> <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01755" name="l01755"></a><span class="lineno"> 1755</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l01756" name="l01756"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sigmoid.html#a47eca99113ec19f0eb60b6a0472c592b"> 1756</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_sigmoid.html#a47eca99113ec19f0eb60b6a0472c592b">Sigmoid</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l01757" name="l01757"></a><span class="lineno"> 1757</span> </div>
<div class="line"><a id="l01758" name="l01758"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sigmoid.html#aa930ce05734cca529ebcb8d0ca8e1255"> 1758</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_sigmoid.html#aa930ce05734cca529ebcb8d0ca8e1255">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01759" name="l01759"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sigmoid.html#a7a6bd0222d51d7f25f2719a91ccdfeca"> 1759</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_sigmoid.html#a7a6bd0222d51d7f25f2719a91ccdfeca">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01760" name="l01760"></a><span class="lineno"> 1760</span> </div>
<div class="line"><a id="l01761" name="l01761"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sigmoid.html#a12712c23037e38192cbccd2d4b14cc85"> 1761</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01762" name="l01762"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sigmoid.html#a62ca1c440896e32958c77af3340847db"> 1762</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01763" name="l01763"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sigmoid.html#ad4cd19938e5159754aa7516f405580c2"> 1763</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_sigmoid.html">Sigmoid</a>)</div>
<div class="line"><a id="l01764" name="l01764"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sigmoid.html#a04814ba1b0edf8299d5ca1bcb8749d8e"> 1764</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l01765" name="l01765"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sigmoid.html#a34572023c8748971289c2cb109ff9a43"> 1765</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l01766" name="l01766"></a><span class="lineno"> 1766</span> </div>
<div class="line"><a id="l01767" name="l01767"></a><span class="lineno"> 1767</span> private:</div>
<div class="line"><a id="l01768" name="l01768"></a><span class="lineno"> 1768</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01769" name="l01769"></a><span class="lineno"> 1769</span>};</div>
</div>
<div class="line"><a id="l01770" name="l01770"></a><span class="lineno"> 1770</span> </div>
<div class="foldopen" id="foldopen01771" data-start="{" data-end="};">
<div class="line"><a id="l01771" name="l01771"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sign.html"> 1771</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_sign.html">Sign</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01772" name="l01772"></a><span class="lineno"> 1772</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l01773" name="l01773"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sign.html#afe951e50907bc23a601ec5fa9eae5763"> 1773</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_sign.html#afe951e50907bc23a601ec5fa9eae5763">Sign</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l01774" name="l01774"></a><span class="lineno"> 1774</span> </div>
<div class="line"><a id="l01775" name="l01775"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sign.html#a7498ec993b66879be30c5d9762c45a97"> 1775</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_sign.html#a7498ec993b66879be30c5d9762c45a97">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01776" name="l01776"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sign.html#afa2b48b99a194106006b44af69ffda8b"> 1776</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_sign.html#afa2b48b99a194106006b44af69ffda8b">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01777" name="l01777"></a><span class="lineno"> 1777</span> </div>
<div class="line"><a id="l01778" name="l01778"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sign.html#aa7296045907015b4e0ae8a93e5e6e295"> 1778</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01779" name="l01779"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sign.html#a957992c7aa0e86cf06f861a94372086b"> 1779</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01780" name="l01780"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sign.html#a2aa0720fe0a6d2408eb43c25d3d45b0a"> 1780</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_sign.html">Sign</a>)</div>
<div class="line"><a id="l01781" name="l01781"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sign.html#a8c0934acbcc4b146e5aacd35a8c445bb"> 1781</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l01782" name="l01782"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sign.html#a719709b3c5d6b15a75614bdadd185f67"> 1782</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l01783" name="l01783"></a><span class="lineno"> 1783</span> </div>
<div class="line"><a id="l01784" name="l01784"></a><span class="lineno"> 1784</span> private:</div>
<div class="line"><a id="l01785" name="l01785"></a><span class="lineno"> 1785</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01786" name="l01786"></a><span class="lineno"> 1786</span>};</div>
</div>
<div class="line"><a id="l01787" name="l01787"></a><span class="lineno"> 1787</span> </div>
<div class="foldopen" id="foldopen01788" data-start="{" data-end="};">
<div class="line"><a id="l01788" name="l01788"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sin.html"> 1788</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_sin.html">Sin</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01789" name="l01789"></a><span class="lineno"> 1789</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l01790" name="l01790"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sin.html#a10d1ecc0ca96e79cdf55b57073d126ea"> 1790</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_sin.html#a10d1ecc0ca96e79cdf55b57073d126ea">Sin</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l01791" name="l01791"></a><span class="lineno"> 1791</span> </div>
<div class="line"><a id="l01792" name="l01792"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sin.html#ab34f9cebc2aed55a0b6ab4c991f02eb5"> 1792</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_sin.html#ab34f9cebc2aed55a0b6ab4c991f02eb5">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01793" name="l01793"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sin.html#a6b59f1156cf8bdad8d45acd1d825cb5e"> 1793</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_sin.html#a6b59f1156cf8bdad8d45acd1d825cb5e">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01794" name="l01794"></a><span class="lineno"> 1794</span> </div>
<div class="line"><a id="l01795" name="l01795"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sin.html#a45533996f3d72d9dd97d4c61cd684fba"> 1795</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01796" name="l01796"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sin.html#af662d10180967399820496477ff050de"> 1796</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01797" name="l01797"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sin.html#a73b31005551015897f15c00e8b0222e4"> 1797</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_sin.html">Sin</a>)</div>
<div class="line"><a id="l01798" name="l01798"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sin.html#af00b0e5516f884996ce7a97e6c1e3e6a"> 1798</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l01799" name="l01799"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sin.html#a46f059f04fd540f175f6031d28dc9f3a"> 1799</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l01800" name="l01800"></a><span class="lineno"> 1800</span> </div>
<div class="line"><a id="l01801" name="l01801"></a><span class="lineno"> 1801</span> private:</div>
<div class="line"><a id="l01802" name="l01802"></a><span class="lineno"> 1802</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01803" name="l01803"></a><span class="lineno"> 1803</span>};</div>
</div>
<div class="line"><a id="l01804" name="l01804"></a><span class="lineno"> 1804</span> </div>
<div class="foldopen" id="foldopen01805" data-start="{" data-end="};">
<div class="line"><a id="l01805" name="l01805"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sinh.html"> 1805</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_sinh.html">Sinh</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01806" name="l01806"></a><span class="lineno"> 1806</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l01807" name="l01807"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sinh.html#a4a4f6814d403c2ce5d6c574b0dca3c96"> 1807</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_sinh.html#a4a4f6814d403c2ce5d6c574b0dca3c96">Sinh</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l01808" name="l01808"></a><span class="lineno"> 1808</span> </div>
<div class="line"><a id="l01809" name="l01809"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sinh.html#ab6d5f6f40d177f6435f6a51c71b939dd"> 1809</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_sinh.html#ab6d5f6f40d177f6435f6a51c71b939dd">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01810" name="l01810"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sinh.html#a5a1af2399f166d5b228b5e83a1837c75"> 1810</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_sinh.html#a5a1af2399f166d5b228b5e83a1837c75">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01811" name="l01811"></a><span class="lineno"> 1811</span> </div>
<div class="line"><a id="l01812" name="l01812"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sinh.html#ae171df22bc34c32e31b8135dc4caa788"> 1812</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01813" name="l01813"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sinh.html#a86e2b37823daf20a4c74c9f273215f9c"> 1813</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01814" name="l01814"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sinh.html#a5b4753d52e80799d4fea0b9172d25a77"> 1814</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_sinh.html">Sinh</a>)</div>
<div class="line"><a id="l01815" name="l01815"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sinh.html#adcb1878996fd4902cd550042dd6ad70d"> 1815</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l01816" name="l01816"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sinh.html#a4f10e7e6daf500575d97e077901e7d28"> 1816</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l01817" name="l01817"></a><span class="lineno"> 1817</span> </div>
<div class="line"><a id="l01818" name="l01818"></a><span class="lineno"> 1818</span> private:</div>
<div class="line"><a id="l01819" name="l01819"></a><span class="lineno"> 1819</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01820" name="l01820"></a><span class="lineno"> 1820</span>};</div>
</div>
<div class="line"><a id="l01821" name="l01821"></a><span class="lineno"> 1821</span> </div>
<div class="foldopen" id="foldopen01822" data-start="{" data-end="};">
<div class="line"><a id="l01822" name="l01822"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_slice.html"> 1822</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_slice.html">Slice</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01823" name="l01823"></a><span class="lineno"> 1823</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen01824" data-start="{" data-end="}">
<div class="line"><a id="l01824" name="l01824"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_slice.html#a8a38feb7bb6b72bdeebb83f053e2fd7f"> 1824</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_slice.html#a8a38feb7bb6b72bdeebb83f053e2fd7f">Slice</a>(</div>
<div class="line"><a id="l01825" name="l01825"></a><span class="lineno"> 1825</span> <a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream,</div>
<div class="line"><a id="l01826" name="l01826"></a><span class="lineno"> 1826</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; start_indices,</div>
<div class="line"><a id="l01827" name="l01827"></a><span class="lineno"> 1827</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; end_indices,</div>
<div class="line"><a id="l01828" name="l01828"></a><span class="lineno"> 1828</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; strides)</div>
<div class="line"><a id="l01829" name="l01829"></a><span class="lineno"> 1829</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream),</div>
<div class="line"><a id="l01830" name="l01830"></a><span class="lineno"> 1830</span> start_indices_(start_indices),</div>
<div class="line"><a id="l01831" name="l01831"></a><span class="lineno"> 1831</span> end_indices_(end_indices),</div>
<div class="line"><a id="l01832" name="l01832"></a><span class="lineno"> 1832</span> strides_(strides) {}</div>
</div>
<div class="line"><a id="l01833" name="l01833"></a><span class="lineno"> 1833</span> </div>
<div class="line"><a id="l01834" name="l01834"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_slice.html#a4b13503f5b2f5c6a90d394b020f9b3f2"> 1834</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_slice.html#a4b13503f5b2f5c6a90d394b020f9b3f2">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01835" name="l01835"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_slice.html#aa53c21ff06a7c659e889af6b97d10a4a"> 1835</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_slice.html#aa53c21ff06a7c659e889af6b97d10a4a">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01836" name="l01836"></a><span class="lineno"> 1836</span> </div>
<div class="line"><a id="l01837" name="l01837"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_slice.html#ae33583b0db22fcfeae34dfe1c0e3eaa2"> 1837</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01838" name="l01838"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_slice.html#a8288324045ab21d6c97b1695ce86ef36"> 1838</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01839" name="l01839"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_slice.html#a50851148948d924b71817cfbd4401504"> 1839</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_slice.html">Slice</a>)</div>
<div class="line"><a id="l01840" name="l01840"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_slice.html#a43202c3b8966ae1db9ab82072e4918b0"> 1840</a></span> <span class="keywordtype">bool</span> is_equivalent(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="line"><a id="l01841" name="l01841"></a><span class="lineno"> 1841</span> </div>
<div class="line"><a id="l01842" name="l01842"></a><span class="lineno"> 1842</span> private:</div>
<div class="line"><a id="l01843" name="l01843"></a><span class="lineno"> 1843</span> std::vector&lt;<span class="keywordtype">int</span>&gt; start_indices_;</div>
<div class="line"><a id="l01844" name="l01844"></a><span class="lineno"> 1844</span> std::vector&lt;<span class="keywordtype">int</span>&gt; end_indices_;</div>
<div class="line"><a id="l01845" name="l01845"></a><span class="lineno"> 1845</span> std::vector&lt;<span class="keywordtype">int</span>&gt; strides_;</div>
<div class="line"><a id="l01846" name="l01846"></a><span class="lineno"> 1846</span> </div>
<div class="line"><a id="l01847" name="l01847"></a><span class="lineno"> 1847</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01848" name="l01848"></a><span class="lineno"> 1848</span>};</div>
</div>
<div class="line"><a id="l01849" name="l01849"></a><span class="lineno"> 1849</span> </div>
<div class="foldopen" id="foldopen01850" data-start="{" data-end="};">
<div class="line"><a id="l01850" name="l01850"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_slice_update.html"> 1850</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_slice_update.html">SliceUpdate</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01851" name="l01851"></a><span class="lineno"> 1851</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen01852" data-start="{" data-end="}">
<div class="line"><a id="l01852" name="l01852"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_slice_update.html#aa30a7f22f557c56e1a2b5fcf44488990"> 1852</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_slice_update.html#aa30a7f22f557c56e1a2b5fcf44488990">SliceUpdate</a>(</div>
<div class="line"><a id="l01853" name="l01853"></a><span class="lineno"> 1853</span> <a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream,</div>
<div class="line"><a id="l01854" name="l01854"></a><span class="lineno"> 1854</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; start_indices,</div>
<div class="line"><a id="l01855" name="l01855"></a><span class="lineno"> 1855</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; end_indices,</div>
<div class="line"><a id="l01856" name="l01856"></a><span class="lineno"> 1856</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; strides)</div>
<div class="line"><a id="l01857" name="l01857"></a><span class="lineno"> 1857</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream),</div>
<div class="line"><a id="l01858" name="l01858"></a><span class="lineno"> 1858</span> start_indices_(start_indices),</div>
<div class="line"><a id="l01859" name="l01859"></a><span class="lineno"> 1859</span> end_indices_(end_indices),</div>
<div class="line"><a id="l01860" name="l01860"></a><span class="lineno"> 1860</span> strides_(strides) {}</div>
</div>
<div class="line"><a id="l01861" name="l01861"></a><span class="lineno"> 1861</span> </div>
<div class="line"><a id="l01862" name="l01862"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_slice_update.html#ad82ca0e3ab88a0e086431050deea831b"> 1862</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_slice_update.html#ad82ca0e3ab88a0e086431050deea831b">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01863" name="l01863"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_slice_update.html#aac1a1d122e5697be057d63552141032b"> 1863</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_slice_update.html#aac1a1d122e5697be057d63552141032b">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01864" name="l01864"></a><span class="lineno"> 1864</span> </div>
<div class="line"><a id="l01865" name="l01865"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_slice_update.html#adbf1c76de6ab2f986758530d351d6fa3"> 1865</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01866" name="l01866"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_slice_update.html#a0ce3248cc61dae2b51d7aa8ee4197611"> 1866</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01867" name="l01867"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_slice_update.html#a751eefb9922c56479b4b0de2ad45439b"> 1867</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_slice_update.html">SliceUpdate</a>)</div>
<div class="line"><a id="l01868" name="l01868"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_slice_update.html#a60f588acced42391e6e5615ae8d16119"> 1868</a></span> <span class="keywordtype">bool</span> is_equivalent(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="line"><a id="l01869" name="l01869"></a><span class="lineno"> 1869</span> </div>
<div class="line"><a id="l01870" name="l01870"></a><span class="lineno"> 1870</span> private:</div>
<div class="line"><a id="l01871" name="l01871"></a><span class="lineno"> 1871</span> std::vector&lt;<span class="keywordtype">int</span>&gt; start_indices_;</div>
<div class="line"><a id="l01872" name="l01872"></a><span class="lineno"> 1872</span> std::vector&lt;<span class="keywordtype">int</span>&gt; end_indices_;</div>
<div class="line"><a id="l01873" name="l01873"></a><span class="lineno"> 1873</span> std::vector&lt;<span class="keywordtype">int</span>&gt; strides_;</div>
<div class="line"><a id="l01874" name="l01874"></a><span class="lineno"> 1874</span> </div>
<div class="line"><a id="l01875" name="l01875"></a><span class="lineno"> 1875</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01876" name="l01876"></a><span class="lineno"> 1876</span> </div>
<div class="line"><a id="l01877" name="l01877"></a><span class="lineno"> 1877</span> std::tuple&lt;int64_t, std::vector&lt;int64_t&gt;&gt; prepare_slice(const <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; in);</div>
<div class="line"><a id="l01878" name="l01878"></a><span class="lineno"> 1878</span>};</div>
</div>
<div class="line"><a id="l01879" name="l01879"></a><span class="lineno"> 1879</span> </div>
<div class="foldopen" id="foldopen01880" data-start="{" data-end="};">
<div class="line"><a id="l01880" name="l01880"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_softmax.html"> 1880</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_softmax.html">Softmax</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01881" name="l01881"></a><span class="lineno"> 1881</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen01882" data-start="{" data-end="}">
<div class="line"><a id="l01882" name="l01882"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_softmax.html#a4ec686aac4e06f0dfe2cbd6801af40eb"> 1882</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_softmax.html#a4ec686aac4e06f0dfe2cbd6801af40eb">Softmax</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream, <span class="keywordtype">bool</span> precise)</div>
<div class="line"><a id="l01883" name="l01883"></a><span class="lineno"> 1883</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream), precise_(precise) {}</div>
</div>
<div class="line"><a id="l01884" name="l01884"></a><span class="lineno"> 1884</span> </div>
<div class="line"><a id="l01885" name="l01885"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_softmax.html#ac9ebc2eab1683b682e689ed8f4622b79"> 1885</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_softmax.html#ac9ebc2eab1683b682e689ed8f4622b79">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01886" name="l01886"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_softmax.html#a35dac69ddcc7e2ec0e1a76fe93db85af"> 1886</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_softmax.html#a35dac69ddcc7e2ec0e1a76fe93db85af">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01887" name="l01887"></a><span class="lineno"> 1887</span> </div>
<div class="line"><a id="l01888" name="l01888"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_softmax.html#ad22d3dcc71054d3dba529cf2dc981e19"> 1888</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01889" name="l01889"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_softmax.html#af96172634a24332b0fc8d7ca7e73f19f"> 1889</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01890" name="l01890"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_softmax.html#aa783610ef6b82b92681e78fc99412d83"> 1890</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_softmax.html">Softmax</a>)</div>
<div class="line"><a id="l01891" name="l01891"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_softmax.html#afea757ba328b9d8f35058793eae73e35"> 1891</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l01892" name="l01892"></a><span class="lineno"> 1892</span> </div>
<div class="line"><a id="l01893" name="l01893"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_softmax.html#a9215ed7bd36bc11276c58dfb9808d728"> 1893</a></span> <span class="keywordtype">bool</span> is_equivalent(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="line"><a id="l01894" name="l01894"></a><span class="lineno"> 1894</span> </div>
<div class="line"><a id="l01895" name="l01895"></a><span class="lineno"> 1895</span> private:</div>
<div class="line"><a id="l01896" name="l01896"></a><span class="lineno"> 1896</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01897" name="l01897"></a><span class="lineno"> 1897</span> <span class="keywordtype">bool</span> precise_;</div>
<div class="line"><a id="l01898" name="l01898"></a><span class="lineno"> 1898</span>};</div>
</div>
<div class="line"><a id="l01899" name="l01899"></a><span class="lineno"> 1899</span> </div>
<div class="foldopen" id="foldopen01900" data-start="{" data-end="};">
<div class="line"><a id="l01900" name="l01900"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sort.html"> 1900</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_sort.html">Sort</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01901" name="l01901"></a><span class="lineno"> 1901</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen01902" data-start="{" data-end="}">
<div class="line"><a id="l01902" name="l01902"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sort.html#a62943032dbd72e85ceb9b4b7211f4a44"> 1902</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_sort.html#a62943032dbd72e85ceb9b4b7211f4a44">Sort</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream, <span class="keywordtype">int</span> axis)</div>
<div class="line"><a id="l01903" name="l01903"></a><span class="lineno"> 1903</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream), axis_(axis) {}</div>
</div>
<div class="line"><a id="l01904" name="l01904"></a><span class="lineno"> 1904</span> </div>
<div class="line"><a id="l01905" name="l01905"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sort.html#a459769a0241b2620e55bedaba19827cd"> 1905</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_sort.html#a459769a0241b2620e55bedaba19827cd">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01906" name="l01906"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sort.html#a4141c48f0e8670c728663f3722675382"> 1906</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_sort.html#a4141c48f0e8670c728663f3722675382">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01907" name="l01907"></a><span class="lineno"> 1907</span> </div>
<div class="line"><a id="l01908" name="l01908"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sort.html#abfabb9e625cc0cb9335c7454ed27505c"> 1908</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01909" name="l01909"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sort.html#af113ac983473433eec851c8fddfcba62"> 1909</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01910" name="l01910"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sort.html#ada81b9343f80958174eba708452927a2"> 1910</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_sort.html">Sort</a>)</div>
<div class="line"><a id="l01911" name="l01911"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sort.html#a271545b66607b22e5f06a0fefe69f22d"> 1911</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l01912" name="l01912"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sort.html#ae48f07cf641d54234fc4fb6529a33511"> 1912</a></span> <span class="keywordtype">bool</span> is_equivalent(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="line"><a id="l01913" name="l01913"></a><span class="lineno"> 1913</span> </div>
<div class="line"><a id="l01914" name="l01914"></a><span class="lineno"> 1914</span> private:</div>
<div class="line"><a id="l01915" name="l01915"></a><span class="lineno"> 1915</span> <span class="keywordtype">int</span> axis_;</div>
<div class="line"><a id="l01916" name="l01916"></a><span class="lineno"> 1916</span> </div>
<div class="line"><a id="l01917" name="l01917"></a><span class="lineno"> 1917</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01918" name="l01918"></a><span class="lineno"> 1918</span>};</div>
</div>
<div class="line"><a id="l01919" name="l01919"></a><span class="lineno"> 1919</span> </div>
<div class="foldopen" id="foldopen01920" data-start="{" data-end="};">
<div class="line"><a id="l01920" name="l01920"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_split.html"> 1920</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_split.html">Split</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a> {</div>
<div class="line"><a id="l01921" name="l01921"></a><span class="lineno"> 1921</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen01922" data-start="{" data-end="}">
<div class="line"><a id="l01922" name="l01922"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_split.html#a897c746ecfdff5119cc5ae3f20499385"> 1922</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_split.html#a897c746ecfdff5119cc5ae3f20499385">Split</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream, <span class="keyword">const</span> std::vector&lt;int&gt;&amp; indices, <span class="keywordtype">int</span> axis)</div>
<div class="line"><a id="l01923" name="l01923"></a><span class="lineno"> 1923</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>(stream), indices_(indices), axis_(axis) {}</div>
</div>
<div class="line"><a id="l01924" name="l01924"></a><span class="lineno"> 1924</span> </div>
<div class="line"><a id="l01925" name="l01925"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_split.html#aff2889cb9074f0fda53edf8fa40b1fd4"> 1925</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_split.html#aff2889cb9074f0fda53edf8fa40b1fd4">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, std::vector&lt;array&gt;&amp; outputs)</div>
<div class="line"><a id="l01926" name="l01926"></a><span class="lineno"> 1926</span> <span class="keyword">override</span>;</div>
<div class="line"><a id="l01927" name="l01927"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_split.html#a78ddda89c4daee73c74cfbc1e44656df"> 1927</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_split.html#a78ddda89c4daee73c74cfbc1e44656df">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, std::vector&lt;array&gt;&amp; outputs)</div>
<div class="line"><a id="l01928" name="l01928"></a><span class="lineno"> 1928</span> <span class="keyword">override</span>;</div>
<div class="line"><a id="l01929" name="l01929"></a><span class="lineno"> 1929</span> </div>
<div class="line"><a id="l01930" name="l01930"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_split.html#ab7c40e02a842e83bdb4698608472c7a6"> 1930</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01931" name="l01931"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_split.html#ab8a8d30fd1ebf0891f41f3c32eabe282"> 1931</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01932" name="l01932"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_split.html#ad0c31fe5972643cc75fde10445fc47f2"> 1932</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_split.html">Split</a>)</div>
<div class="line"><a id="l01933" name="l01933"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_split.html#af25a0cc259573b9dce60d285eee18345"> 1933</a></span> <span class="keywordtype">bool</span> is_equivalent(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="line"><a id="l01934" name="l01934"></a><span class="lineno"> 1934</span> </div>
<div class="line"><a id="l01935" name="l01935"></a><span class="lineno"> 1935</span> private:</div>
<div class="line"><a id="l01936" name="l01936"></a><span class="lineno"> 1936</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; outputs);</div>
<div class="line"><a id="l01937" name="l01937"></a><span class="lineno"> 1937</span> </div>
<div class="line"><a id="l01938" name="l01938"></a><span class="lineno"> 1938</span> std::vector&lt;<span class="keywordtype">int</span>&gt; indices_;</div>
<div class="line"><a id="l01939" name="l01939"></a><span class="lineno"> 1939</span> <span class="keywordtype">int</span> axis_;</div>
<div class="line"><a id="l01940" name="l01940"></a><span class="lineno"> 1940</span>};</div>
</div>
<div class="line"><a id="l01941" name="l01941"></a><span class="lineno"> 1941</span> </div>
<div class="foldopen" id="foldopen01942" data-start="{" data-end="};">
<div class="line"><a id="l01942" name="l01942"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_square.html"> 1942</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_square.html">Square</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01943" name="l01943"></a><span class="lineno"> 1943</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l01944" name="l01944"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_square.html#ab94e28d5c92e6febc1c74e525f730dc4"> 1944</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_square.html#ab94e28d5c92e6febc1c74e525f730dc4">Square</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l01945" name="l01945"></a><span class="lineno"> 1945</span> </div>
<div class="line"><a id="l01946" name="l01946"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_square.html#a1f4d327a705950616da63b83c2829e59"> 1946</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_square.html#a1f4d327a705950616da63b83c2829e59">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01947" name="l01947"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_square.html#a0ea2a78a5bb52daa4103263bf2f98045"> 1947</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_square.html#a0ea2a78a5bb52daa4103263bf2f98045">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01948" name="l01948"></a><span class="lineno"> 1948</span> </div>
<div class="line"><a id="l01949" name="l01949"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_square.html#a55bf43f878d4741c57a08d5fef472ea5"> 1949</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01950" name="l01950"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_square.html#a822629b93b91e2bef29959431d95e22d"> 1950</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01951" name="l01951"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_square.html#a75feb558cd1d615e96309dd7d1e81384"> 1951</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_square.html">Square</a>)</div>
<div class="line"><a id="l01952" name="l01952"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_square.html#a6abc881d44071019aa15481e5ea75ab2"> 1952</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l01953" name="l01953"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_square.html#ac4c4927639cab1c5b91a074e7f68da02"> 1953</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l01954" name="l01954"></a><span class="lineno"> 1954</span> </div>
<div class="line"><a id="l01955" name="l01955"></a><span class="lineno"> 1955</span> private:</div>
<div class="line"><a id="l01956" name="l01956"></a><span class="lineno"> 1956</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01957" name="l01957"></a><span class="lineno"> 1957</span>};</div>
</div>
<div class="line"><a id="l01958" name="l01958"></a><span class="lineno"> 1958</span> </div>
<div class="foldopen" id="foldopen01959" data-start="{" data-end="};">
<div class="line"><a id="l01959" name="l01959"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sqrt.html"> 1959</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_sqrt.html">Sqrt</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01960" name="l01960"></a><span class="lineno"> 1960</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen01961" data-start="{" data-end="}">
<div class="line"><a id="l01961" name="l01961"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sqrt.html#a6682a7c31ca427c9d2c5ddb6a479bf29"> 1961</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_sqrt.html#a6682a7c31ca427c9d2c5ddb6a479bf29">Sqrt</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream, <span class="keywordtype">bool</span> recip = <span class="keyword">false</span>)</div>
<div class="line"><a id="l01962" name="l01962"></a><span class="lineno"> 1962</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream), recip_(recip) {}</div>
</div>
<div class="line"><a id="l01963" name="l01963"></a><span class="lineno"> 1963</span> </div>
<div class="line"><a id="l01964" name="l01964"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sqrt.html#a5a64ecc4eef1e30a2963435dca7cefd5"> 1964</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_sqrt.html#a5a64ecc4eef1e30a2963435dca7cefd5">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01965" name="l01965"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sqrt.html#a6d205e679a593d1ba20206c5c47ba501"> 1965</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_sqrt.html#a6d205e679a593d1ba20206c5c47ba501">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01966" name="l01966"></a><span class="lineno"> 1966</span> </div>
<div class="line"><a id="l01967" name="l01967"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sqrt.html#a9d30e306ce08980c27d98c898577017e"> 1967</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01968" name="l01968"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sqrt.html#a78544b1fb5da0c14bce3051ffd177818"> 1968</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l01969" name="l01969"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sqrt.html#ae3d4f99729a7e72be7decf5a56d095d5"> 1969</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l01970" name="l01970"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sqrt.html#ab871c2b8ab4a27a3f782a005d0e87c46"> 1970</a></span> <span class="keywordtype">bool</span> is_equivalent(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="line"><a id="l01971" name="l01971"></a><span class="lineno"> 1971</span> </div>
<div class="foldopen" id="foldopen01972" data-start="{" data-end="}">
<div class="line"><a id="l01972" name="l01972"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_sqrt.html#a8681c8de2f50049848d320c47f713c0f"> 1972</a></span> <span class="keywordtype">void</span> print(std::ostream&amp; os)<span class="keyword"> override </span>{</div>
<div class="line"><a id="l01973" name="l01973"></a><span class="lineno"> 1973</span> <span class="keywordflow">if</span> (recip_) {</div>
<div class="line"><a id="l01974" name="l01974"></a><span class="lineno"> 1974</span> os &lt;&lt; <span class="stringliteral">&quot;Rsqrt&quot;</span>;</div>
<div class="line"><a id="l01975" name="l01975"></a><span class="lineno"> 1975</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l01976" name="l01976"></a><span class="lineno"> 1976</span> os &lt;&lt; <span class="stringliteral">&quot;Sqrt&quot;</span>;</div>
<div class="line"><a id="l01977" name="l01977"></a><span class="lineno"> 1977</span> }</div>
<div class="line"><a id="l01978" name="l01978"></a><span class="lineno"> 1978</span> }</div>
</div>
<div class="line"><a id="l01979" name="l01979"></a><span class="lineno"> 1979</span> </div>
<div class="line"><a id="l01980" name="l01980"></a><span class="lineno"> 1980</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l01981" name="l01981"></a><span class="lineno"> 1981</span> <span class="keywordtype">void</span> <a class="code hl_function" href="namespacemlx_1_1core.html#a7d6e097d8effed52f4713672e471f299">eval</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01982" name="l01982"></a><span class="lineno"> 1982</span> <span class="keywordtype">bool</span> recip_;</div>
<div class="line"><a id="l01983" name="l01983"></a><span class="lineno"> 1983</span>};</div>
</div>
<div class="line"><a id="l01984" name="l01984"></a><span class="lineno"> 1984</span> </div>
<div class="foldopen" id="foldopen01985" data-start="{" data-end="};">
<div class="line"><a id="l01985" name="l01985"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_stop_gradient.html"> 1985</a></span><span class="keyword">class </span><a class="code hl_class" href="classmlx_1_1core_1_1_stop_gradient.html">StopGradient</a> : <span class="keyword">public</span> <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l01986" name="l01986"></a><span class="lineno"> 1986</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l01987" name="l01987"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_stop_gradient.html#ac70d1ab819d04e00f76bc25aeebaf84f"> 1987</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_stop_gradient.html#ac70d1ab819d04e00f76bc25aeebaf84f">StopGradient</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l01988" name="l01988"></a><span class="lineno"> 1988</span> </div>
<div class="line"><a id="l01989" name="l01989"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_stop_gradient.html#a56207714d374b08f60e4d9cdbc7340b2"> 1989</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_stop_gradient.html#a56207714d374b08f60e4d9cdbc7340b2">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01990" name="l01990"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_stop_gradient.html#a907b96f0a1ce608e211d87ccf2b9ca89"> 1990</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_stop_gradient.html#a907b96f0a1ce608e211d87ccf2b9ca89">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l01991" name="l01991"></a><span class="lineno"> 1991</span> </div>
<div class="line"><a id="l01992" name="l01992"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_stop_gradient.html#aca680c8befef81da414c4375b11b16b0"> 1992</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l01993" name="l01993"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_stop_gradient.html#acc7a7d51cbf014dae8ba3d20bedcad50"> 1993</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_stop_gradient.html">StopGradient</a>)</div>
<div class="line"><a id="l01994" name="l01994"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_stop_gradient.html#a327539298b21d800d26482b94fce41b3"> 1994</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l01995" name="l01995"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_stop_gradient.html#a12e7f55e087aea58b2a56f239c69bb4e"> 1995</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l01996" name="l01996"></a><span class="lineno"> 1996</span> </div>
<div class="line"><a id="l01997" name="l01997"></a><span class="lineno"> 1997</span> private:</div>
<div class="line"><a id="l01998" name="l01998"></a><span class="lineno"> 1998</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l01999" name="l01999"></a><span class="lineno"> 1999</span>};</div>
</div>
<div class="line"><a id="l02000" name="l02000"></a><span class="lineno"> 2000</span> </div>
<div class="foldopen" id="foldopen02001" data-start="{" data-end="};">
<div class="line"><a id="l02001" name="l02001"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_subtract.html"> 2001</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_subtract.html">Subtract</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l02002" name="l02002"></a><span class="lineno"> 2002</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l02003" name="l02003"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_subtract.html#a834854757394f8de7082af65bf86ed9c"> 2003</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_subtract.html#a834854757394f8de7082af65bf86ed9c">Subtract</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l02004" name="l02004"></a><span class="lineno"> 2004</span> </div>
<div class="line"><a id="l02005" name="l02005"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_subtract.html#a47574258b6c95f8ad260c114d6d36a12"> 2005</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_subtract.html#a47574258b6c95f8ad260c114d6d36a12">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l02006" name="l02006"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_subtract.html#a69021b23daf061764d97fabbc0f4f06c"> 2006</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_subtract.html#a69021b23daf061764d97fabbc0f4f06c">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l02007" name="l02007"></a><span class="lineno"> 2007</span> </div>
<div class="line"><a id="l02008" name="l02008"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_subtract.html#aa98f960e621a767c8a03624fd292f098"> 2008</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l02009" name="l02009"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_subtract.html#a8100081a99df5166f02efc76d6641220"> 2009</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l02010" name="l02010"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_subtract.html#a3834fd305435fb5a8e512566832e372b"> 2010</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_subtract.html">Subtract</a>)</div>
<div class="line"><a id="l02011" name="l02011"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_subtract.html#af1c05e1e3f703ba916d54f8ccbbd102b"> 2011</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l02012" name="l02012"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_subtract.html#a0fbf4bc9a0c76edc37ebb4083d98f3fc"> 2012</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l02013" name="l02013"></a><span class="lineno"> 2013</span> </div>
<div class="line"><a id="l02014" name="l02014"></a><span class="lineno"> 2014</span> private:</div>
<div class="line"><a id="l02015" name="l02015"></a><span class="lineno"> 2015</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l02016" name="l02016"></a><span class="lineno"> 2016</span>};</div>
</div>
<div class="line"><a id="l02017" name="l02017"></a><span class="lineno"> 2017</span> </div>
<div class="foldopen" id="foldopen02018" data-start="{" data-end="};">
<div class="line"><a id="l02018" name="l02018"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_tan.html"> 2018</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_tan.html">Tan</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l02019" name="l02019"></a><span class="lineno"> 2019</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l02020" name="l02020"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_tan.html#a8dcc9ff660210ccf05134dd95f47de08"> 2020</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_tan.html#a8dcc9ff660210ccf05134dd95f47de08">Tan</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l02021" name="l02021"></a><span class="lineno"> 2021</span> </div>
<div class="line"><a id="l02022" name="l02022"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_tan.html#a9c9a731158fa60eef30067fe0da9f3e9"> 2022</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_tan.html#a9c9a731158fa60eef30067fe0da9f3e9">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l02023" name="l02023"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_tan.html#aca7dbb4836507005a2032ac957a04d3f"> 2023</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_tan.html#aca7dbb4836507005a2032ac957a04d3f">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l02024" name="l02024"></a><span class="lineno"> 2024</span> </div>
<div class="line"><a id="l02025" name="l02025"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_tan.html#ae2f67ca2adc83b10009cf28498bf58b7"> 2025</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l02026" name="l02026"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_tan.html#a5d7c76122d63619df17b0e45450bc8f2"> 2026</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l02027" name="l02027"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_tan.html#aeea7c284d595a2a928d5f28a55e9be7f"> 2027</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_tan.html">Tan</a>)</div>
<div class="line"><a id="l02028" name="l02028"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_tan.html#afdf46288e7f60ea7f878688347dff7e4"> 2028</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l02029" name="l02029"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_tan.html#a7be9fd77491a48b07b6e126ab68bdf37"> 2029</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l02030" name="l02030"></a><span class="lineno"> 2030</span> </div>
<div class="line"><a id="l02031" name="l02031"></a><span class="lineno"> 2031</span> private:</div>
<div class="line"><a id="l02032" name="l02032"></a><span class="lineno"> 2032</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l02033" name="l02033"></a><span class="lineno"> 2033</span>};</div>
</div>
<div class="line"><a id="l02034" name="l02034"></a><span class="lineno"> 2034</span> </div>
<div class="foldopen" id="foldopen02035" data-start="{" data-end="};">
<div class="line"><a id="l02035" name="l02035"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_tanh.html"> 2035</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_tanh.html">Tanh</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l02036" name="l02036"></a><span class="lineno"> 2036</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l02037" name="l02037"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_tanh.html#ae551297bf573e1802fb831440276dee4"> 2037</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_tanh.html#ae551297bf573e1802fb831440276dee4">Tanh</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l02038" name="l02038"></a><span class="lineno"> 2038</span> </div>
<div class="line"><a id="l02039" name="l02039"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_tanh.html#af7ed4345f622da069e5b0284067923f5"> 2039</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_tanh.html#af7ed4345f622da069e5b0284067923f5">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l02040" name="l02040"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_tanh.html#a48df896599ae93dbce84a5c0f50cf761"> 2040</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_tanh.html#a48df896599ae93dbce84a5c0f50cf761">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l02041" name="l02041"></a><span class="lineno"> 2041</span> </div>
<div class="line"><a id="l02042" name="l02042"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_tanh.html#a32df3564c1ecb858c1ba9f855376762f"> 2042</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l02043" name="l02043"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_tanh.html#ae0fbb5370dc1c3a4fb0dd02ca28a832a"> 2043</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l02044" name="l02044"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_tanh.html#a73f4976d641daf697cc1a231d773d78e"> 2044</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_tanh.html">Tanh</a>)</div>
<div class="line"><a id="l02045" name="l02045"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_tanh.html#a0692a1de2373b86eb394252ed4fecfda"> 2045</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l02046" name="l02046"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_tanh.html#a0392f51a9e51915d4691615757ba4325"> 2046</a></span> <a class="code hl_define" href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a>()</div>
<div class="line"><a id="l02047" name="l02047"></a><span class="lineno"> 2047</span> </div>
<div class="line"><a id="l02048" name="l02048"></a><span class="lineno"> 2048</span> private:</div>
<div class="line"><a id="l02049" name="l02049"></a><span class="lineno"> 2049</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l02050" name="l02050"></a><span class="lineno"> 2050</span>};</div>
</div>
<div class="line"><a id="l02051" name="l02051"></a><span class="lineno"> 2051</span> </div>
<div class="foldopen" id="foldopen02052" data-start="{" data-end="};">
<div class="line"><a id="l02052" name="l02052"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_uniform.html"> 2052</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_uniform.html">Uniform</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l02053" name="l02053"></a><span class="lineno"> 2053</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l02054" name="l02054"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_uniform.html#a626aa1091aa77b4a32c02290106b85e1"> 2054</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_uniform.html#a626aa1091aa77b4a32c02290106b85e1">Uniform</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream) {}</div>
<div class="line"><a id="l02055" name="l02055"></a><span class="lineno"> 2055</span> </div>
<div class="line"><a id="l02056" name="l02056"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_uniform.html#a037a2c96b79b70a64f2b637c9f1a432f"> 2056</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_uniform.html#a037a2c96b79b70a64f2b637c9f1a432f">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l02057" name="l02057"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_uniform.html#a5f88cbf2495f24f87cefd99aaaebe4d0"> 2057</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_uniform.html#a5f88cbf2495f24f87cefd99aaaebe4d0">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l02058" name="l02058"></a><span class="lineno"> 2058</span> </div>
<div class="line"><a id="l02059" name="l02059"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_uniform.html#ad795037d5b1820e98f4268f166609926"> 2059</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l02060" name="l02060"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_uniform.html#a01510998719b19df137451cc37850b8d"> 2060</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_uniform.html">Uniform</a>)</div>
<div class="line"><a id="l02061" name="l02061"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_uniform.html#abb6048807a7c5b2e35a77e06a17f801b"> 2061</a></span> <a class="code hl_define" href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a>()</div>
<div class="line"><a id="l02062" name="l02062"></a><span class="lineno"> 2062</span> </div>
<div class="line"><a id="l02063" name="l02063"></a><span class="lineno"> 2063</span> private:</div>
<div class="line"><a id="l02064" name="l02064"></a><span class="lineno"> 2064</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l02065" name="l02065"></a><span class="lineno"> 2065</span>};</div>
</div>
<div class="line"><a id="l02066" name="l02066"></a><span class="lineno"> 2066</span> </div>
<div class="foldopen" id="foldopen02067" data-start="{" data-end="};">
<div class="line"><a id="l02067" name="l02067"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_view.html"> 2067</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_view.html">View</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l02068" name="l02068"></a><span class="lineno"> 2068</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen02069" data-start="{" data-end="}">
<div class="line"><a id="l02069" name="l02069"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_view.html#ad7eed156c308e9a29a8b41f965ec941e"> 2069</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_view.html#ad7eed156c308e9a29a8b41f965ec941e">View</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream, <a class="code hl_struct" href="structmlx_1_1core_1_1_dtype.html">Dtype</a> dtype)</div>
<div class="line"><a id="l02070" name="l02070"></a><span class="lineno"> 2070</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream), dtype_(dtype) {}</div>
</div>
<div class="line"><a id="l02071" name="l02071"></a><span class="lineno"> 2071</span> </div>
<div class="line"><a id="l02072" name="l02072"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_view.html#a0ad6deb11914a242f10e8039fcb02497"> 2072</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_view.html#a0ad6deb11914a242f10e8039fcb02497">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l02073" name="l02073"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_view.html#add6e12ff1e476fe1db7718b14f21b075"> 2073</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_view.html#add6e12ff1e476fe1db7718b14f21b075">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l02074" name="l02074"></a><span class="lineno"> 2074</span> </div>
<div class="line"><a id="l02075" name="l02075"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_view.html#a2230d3e5f434fb2b888de50b529ac121"> 2075</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l02076" name="l02076"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_view.html#a513b034919a8a494add3155f910a360c"> 2076</a></span> void print(std::ostream&amp; os) override;</div>
<div class="line"><a id="l02077" name="l02077"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_view.html#a7cb8403a96a47cb258caac4e3b850f64"> 2077</a></span> <span class="keywordtype">bool</span> is_equivalent(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="line"><a id="l02078" name="l02078"></a><span class="lineno"> 2078</span> </div>
<div class="line"><a id="l02079" name="l02079"></a><span class="lineno"> 2079</span> private:</div>
<div class="line"><a id="l02080" name="l02080"></a><span class="lineno"> 2080</span> <a class="code hl_struct" href="structmlx_1_1core_1_1_dtype.html">Dtype</a> dtype_;</div>
<div class="line"><a id="l02081" name="l02081"></a><span class="lineno"> 2081</span>};</div>
</div>
<div class="line"><a id="l02082" name="l02082"></a><span class="lineno"> 2082</span> </div>
<div class="foldopen" id="foldopen02083" data-start="{" data-end="};">
<div class="line"><a id="l02083" name="l02083"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_transpose.html"> 2083</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_transpose.html">Transpose</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l02084" name="l02084"></a><span class="lineno"> 2084</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen02085" data-start="{" data-end="}">
<div class="line"><a id="l02085" name="l02085"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_transpose.html#a1a9ba023584c61c7ac93d6dce536760a"> 2085</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_transpose.html#a1a9ba023584c61c7ac93d6dce536760a">Transpose</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream, <span class="keyword">const</span> std::vector&lt;int&gt;&amp; axes)</div>
<div class="line"><a id="l02086" name="l02086"></a><span class="lineno"> 2086</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream), axes_(axes) {}</div>
</div>
<div class="line"><a id="l02087" name="l02087"></a><span class="lineno"> 2087</span> </div>
<div class="line"><a id="l02088" name="l02088"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_transpose.html#a1fbcfcca43f9ec06c63a3c14708c30f8"> 2088</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_transpose.html#a1fbcfcca43f9ec06c63a3c14708c30f8">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l02089" name="l02089"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_transpose.html#a38d25739c08aa594a6775015a1d7d92e"> 2089</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_transpose.html#a38d25739c08aa594a6775015a1d7d92e">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l02090" name="l02090"></a><span class="lineno"> 2090</span> </div>
<div class="line"><a id="l02091" name="l02091"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_transpose.html#a5ef848b69def9a246665b67e6e3ffdfe"> 2091</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l02092" name="l02092"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_transpose.html#ac1a523e25ab7fd9df4da363a922afbe1"> 2092</a></span> <a class="code hl_define" href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a>()</div>
<div class="line"><a id="l02093" name="l02093"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_transpose.html#ac6c87b850f4e5560aa13a5e1e9f9fe04"> 2093</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_transpose.html">Transpose</a>)</div>
<div class="line"><a id="l02094" name="l02094"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_transpose.html#a799ec3c3fa9f1b9e6177c755252a3eab"> 2094</a></span> <span class="keywordtype">bool</span> is_equivalent(const <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>&amp; other) const override;</div>
<div class="line"><a id="l02095" name="l02095"></a><span class="lineno"> 2095</span> </div>
<div class="line"><a id="l02096" name="l02096"></a><span class="lineno"> 2096</span> private:</div>
<div class="line"><a id="l02097" name="l02097"></a><span class="lineno"> 2097</span> std::vector&lt;<span class="keywordtype">int</span>&gt; axes_;</div>
<div class="line"><a id="l02098" name="l02098"></a><span class="lineno"> 2098</span> </div>
<div class="line"><a id="l02099" name="l02099"></a><span class="lineno"> 2099</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l02100" name="l02100"></a><span class="lineno"> 2100</span>};</div>
</div>
<div class="line"><a id="l02101" name="l02101"></a><span class="lineno"> 2101</span> </div>
<div class="line"><a id="l02102" name="l02102"></a><span class="lineno"> 2102</span><span class="comment">/* QR Factorization primitive. */</span></div>
<div class="foldopen" id="foldopen02103" data-start="{" data-end="};">
<div class="line"><a id="l02103" name="l02103"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_q_r_f.html"> 2103</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_q_r_f.html">QRF</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a> {</div>
<div class="line"><a id="l02104" name="l02104"></a><span class="lineno"> 2104</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l02105" name="l02105"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_q_r_f.html#a44ed2924dc574c4aeb79b1188b5c3983"> 2105</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_q_r_f.html#a44ed2924dc574c4aeb79b1188b5c3983">QRF</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>(stream) {}</div>
<div class="line"><a id="l02106" name="l02106"></a><span class="lineno"> 2106</span> </div>
<div class="line"><a id="l02107" name="l02107"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_q_r_f.html#a48493887395d65a27f04de1804d277d2"> 2107</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_q_r_f.html#a48493887395d65a27f04de1804d277d2">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, std::vector&lt;array&gt;&amp; outputs)</div>
<div class="line"><a id="l02108" name="l02108"></a><span class="lineno"> 2108</span> <span class="keyword">override</span>;</div>
<div class="line"><a id="l02109" name="l02109"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_q_r_f.html#ae5fa3482192f4713605cd07e7fc1c6c9"> 2109</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_q_r_f.html#ae5fa3482192f4713605cd07e7fc1c6c9">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, std::vector&lt;array&gt;&amp; outputs)</div>
<div class="line"><a id="l02110" name="l02110"></a><span class="lineno"> 2110</span> <span class="keyword">override</span>;</div>
<div class="line"><a id="l02111" name="l02111"></a><span class="lineno"> 2111</span> </div>
<div class="line"><a id="l02112" name="l02112"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_q_r_f.html#aba3526722b3a52b41fa8103b909f7f3b"> 2112</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_q_r_f.html">QRF</a>)</div>
<div class="line"><a id="l02113" name="l02113"></a><span class="lineno"> 2113</span> </div>
<div class="line"><a id="l02114" name="l02114"></a><span class="lineno"> 2114</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l02115" name="l02115"></a><span class="lineno"> 2115</span> <span class="keywordtype">void</span> <a class="code hl_function" href="namespacemlx_1_1core.html#a7d6e097d8effed52f4713672e471f299">eval</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, std::vector&lt;array&gt;&amp; outputs);</div>
<div class="line"><a id="l02116" name="l02116"></a><span class="lineno"> 2116</span>};</div>
</div>
<div class="line"><a id="l02117" name="l02117"></a><span class="lineno"> 2117</span> </div>
<div class="line"><a id="l02118" name="l02118"></a><span class="lineno"> 2118</span><span class="comment">/* SVD primitive. */</span></div>
<div class="foldopen" id="foldopen02119" data-start="{" data-end="};">
<div class="line"><a id="l02119" name="l02119"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_s_v_d.html"> 2119</a></span><span class="keyword">class </span><a class="code hl_class" href="classmlx_1_1core_1_1_s_v_d.html">SVD</a> : <span class="keyword">public</span> <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a> {</div>
<div class="line"><a id="l02120" name="l02120"></a><span class="lineno"> 2120</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l02121" name="l02121"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_s_v_d.html#ae89ff583e34fa894cccb8e7a475ee6d1"> 2121</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_s_v_d.html#ae89ff583e34fa894cccb8e7a475ee6d1">SVD</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream) : <a class="code hl_class" href="classmlx_1_1core_1_1_primitive.html">Primitive</a>(stream) {}</div>
<div class="line"><a id="l02122" name="l02122"></a><span class="lineno"> 2122</span> </div>
<div class="line"><a id="l02123" name="l02123"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_s_v_d.html#a637f5c39fa8b10722c04a066f6c1ada6"> 2123</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_s_v_d.html#a637f5c39fa8b10722c04a066f6c1ada6">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, std::vector&lt;array&gt;&amp; outputs)</div>
<div class="line"><a id="l02124" name="l02124"></a><span class="lineno"> 2124</span> <span class="keyword">override</span>;</div>
<div class="line"><a id="l02125" name="l02125"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_s_v_d.html#a7067b2207f826a25549d571856b94e83"> 2125</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_s_v_d.html#a7067b2207f826a25549d571856b94e83">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, std::vector&lt;array&gt;&amp; outputs)</div>
<div class="line"><a id="l02126" name="l02126"></a><span class="lineno"> 2126</span> <span class="keyword">override</span>;</div>
<div class="line"><a id="l02127" name="l02127"></a><span class="lineno"> 2127</span> </div>
<div class="line"><a id="l02128" name="l02128"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_s_v_d.html#a0366c958f6cdac8d1d9e1a4eda53fae8"> 2128</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l02129" name="l02129"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_s_v_d.html#ab87a4e7ef857936bea66ba9e24662f53"> 2129</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_s_v_d.html">SVD</a>)</div>
<div class="line"><a id="l02130" name="l02130"></a><span class="lineno"> 2130</span> </div>
<div class="line"><a id="l02131" name="l02131"></a><span class="lineno"> 2131</span> private:</div>
<div class="line"><a id="l02132" name="l02132"></a><span class="lineno"> 2132</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; outputs);</div>
<div class="line"><a id="l02133" name="l02133"></a><span class="lineno"> 2133</span>};</div>
</div>
<div class="line"><a id="l02134" name="l02134"></a><span class="lineno"> 2134</span> </div>
<div class="line"><a id="l02135" name="l02135"></a><span class="lineno"> 2135</span><span class="comment">/* Matrix inversion primitive. */</span></div>
<div class="foldopen" id="foldopen02136" data-start="{" data-end="};">
<div class="line"><a id="l02136" name="l02136"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_inverse.html"> 2136</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_inverse.html">Inverse</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l02137" name="l02137"></a><span class="lineno"> 2137</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen02138" data-start="{" data-end="}">
<div class="line"><a id="l02138" name="l02138"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_inverse.html#a71467681e523abb725724490bfeb76ad"> 2138</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_inverse.html#a71467681e523abb725724490bfeb76ad">Inverse</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream, <span class="keywordtype">bool</span> tri, <span class="keywordtype">bool</span> upper)</div>
<div class="line"><a id="l02139" name="l02139"></a><span class="lineno"> 2139</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream), tri_(<a class="code hl_function" href="group__ops.html#ga4f3389e5b89e70e862e7d2b40d6c7f78">tri</a>), upper_(upper) {}</div>
</div>
<div class="line"><a id="l02140" name="l02140"></a><span class="lineno"> 2140</span> </div>
<div class="line"><a id="l02141" name="l02141"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_inverse.html#aeb1d8dc9bc4052a616023f65b3c7bb81"> 2141</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_inverse.html#aeb1d8dc9bc4052a616023f65b3c7bb81">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; output) <span class="keyword">override</span>;</div>
<div class="line"><a id="l02142" name="l02142"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_inverse.html#a086fbbc947ad232e01686ad063a78ed2"> 2142</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_inverse.html#a086fbbc947ad232e01686ad063a78ed2">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; output) <span class="keyword">override</span>;</div>
<div class="line"><a id="l02143" name="l02143"></a><span class="lineno"> 2143</span> </div>
<div class="line"><a id="l02144" name="l02144"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_inverse.html#a98419b9f0b8a6c9185fe012d523552c2"> 2144</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l02145" name="l02145"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_inverse.html#a543f18f1ce5c06c897141091e95a66e9"> 2145</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_inverse.html">Inverse</a>)</div>
<div class="line"><a id="l02146" name="l02146"></a><span class="lineno"> 2146</span> </div>
<div class="line"><a id="l02147" name="l02147"></a><span class="lineno"> 2147</span> private:</div>
<div class="line"><a id="l02148" name="l02148"></a><span class="lineno"> 2148</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; output);</div>
<div class="line"><a id="l02149" name="l02149"></a><span class="lineno"> 2149</span> <span class="keywordtype">bool</span> tri_;</div>
<div class="line"><a id="l02150" name="l02150"></a><span class="lineno"> 2150</span> <span class="keywordtype">bool</span> upper_;</div>
<div class="line"><a id="l02151" name="l02151"></a><span class="lineno"> 2151</span>};</div>
</div>
<div class="line"><a id="l02152" name="l02152"></a><span class="lineno"> 2152</span> </div>
<div class="foldopen" id="foldopen02153" data-start="{" data-end="};">
<div class="line"><a id="l02153" name="l02153"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_cholesky.html"> 2153</a></span>class <a class="code hl_class" href="classmlx_1_1core_1_1_cholesky.html">Cholesky</a> : public <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a> {</div>
<div class="line"><a id="l02154" name="l02154"></a><span class="lineno"> 2154</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen02155" data-start="{" data-end="}">
<div class="line"><a id="l02155" name="l02155"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_cholesky.html#a6ae2e30b85f99f4f0d7f14c7949818ab"> 2155</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classmlx_1_1core_1_1_cholesky.html#a6ae2e30b85f99f4f0d7f14c7949818ab">Cholesky</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1_stream.html">Stream</a> stream, <span class="keywordtype">bool</span> upper)</div>
<div class="line"><a id="l02156" name="l02156"></a><span class="lineno"> 2156</span> : <a class="code hl_class" href="classmlx_1_1core_1_1_unary_primitive.html">UnaryPrimitive</a>(stream), upper_(upper) {}</div>
</div>
<div class="line"><a id="l02157" name="l02157"></a><span class="lineno"> 2157</span> </div>
<div class="line"><a id="l02158" name="l02158"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_cholesky.html#a4bdec36c1cc99aadf9a4a39d4c57bea5"> 2158</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_cholesky.html#a4bdec36c1cc99aadf9a4a39d4c57bea5">eval_cpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l02159" name="l02159"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_cholesky.html#a8c918594bf129888044ef37fcae56795"> 2159</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1_cholesky.html#a8c918594bf129888044ef37fcae56795">eval_gpu</a>(<span class="keyword">const</span> std::vector&lt;array&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) <span class="keyword">override</span>;</div>
<div class="line"><a id="l02160" name="l02160"></a><span class="lineno"> 2160</span> </div>
<div class="line"><a id="l02161" name="l02161"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_cholesky.html#ab5c3f6199ec3b399c91243a05d116aa5"> 2161</a></span> <a class="code hl_define" href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a>()</div>
<div class="line"><a id="l02162" name="l02162"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1_cholesky.html#a0a8b51ff7f5369d22bdc58910d4aaf84"> 2162</a></span> <a class="code hl_define" href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a>(<a class="code hl_class" href="classmlx_1_1core_1_1_cholesky.html">Cholesky</a>)</div>
<div class="line"><a id="l02163" name="l02163"></a><span class="lineno"> 2163</span> </div>
<div class="line"><a id="l02164" name="l02164"></a><span class="lineno"> 2164</span> private:</div>
<div class="line"><a id="l02165" name="l02165"></a><span class="lineno"> 2165</span> <span class="keywordtype">void</span> eval(const std::vector&lt;<a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&gt;&amp; inputs, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; output);</div>
<div class="line"><a id="l02166" name="l02166"></a><span class="lineno"> 2166</span> <span class="keywordtype">bool</span> upper_;</div>
<div class="line"><a id="l02167" name="l02167"></a><span class="lineno"> 2167</span>};</div>
</div>
<div class="line"><a id="l02168" name="l02168"></a><span class="lineno"> 2168</span> </div>
<div class="line"><a id="l02169" name="l02169"></a><span class="lineno"> 2169</span>} <span class="comment">// namespace mlx::core</span></div>
<div class="ttc" id="aarray_8h_html"><div class="ttname"><a href="array_8h.html">array.h</a></div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_abs_html"><div class="ttname"><a href="classmlx_1_1core_1_1_abs.html">mlx::core::Abs</a></div><div class="ttdef"><b>Definition</b> primitives.h:155</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_abs_html_a0a976e636dd8505b473fbdddf949f514"><div class="ttname"><a href="classmlx_1_1core_1_1_abs.html#a0a976e636dd8505b473fbdddf949f514">mlx::core::Abs::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_abs_html_a0d3e697496ef8e842d21195cb3c14e60"><div class="ttname"><a href="classmlx_1_1core_1_1_abs.html#a0d3e697496ef8e842d21195cb3c14e60">mlx::core::Abs::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_abs_html_a1247e72feb640fb562d036b2dd1ae4ad"><div class="ttname"><a href="classmlx_1_1core_1_1_abs.html#a1247e72feb640fb562d036b2dd1ae4ad">mlx::core::Abs::Abs</a></div><div class="ttdeci">Abs(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:157</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_abs_html_a643d6db5116eed978e3208804a992107"><div class="ttname"><a href="classmlx_1_1core_1_1_abs.html#a643d6db5116eed978e3208804a992107">mlx::core::Abs::print</a></div><div class="ttdeci">void print(std::ostream &amp;os) override</div><div class="ttdoc">Print the primitive.</div><div class="ttdef"><b>Definition</b> primitives.h:164</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_abs_html_ab6a2b147f58c83439ecefb9189c2da32"><div class="ttname"><a href="classmlx_1_1core_1_1_abs.html#ab6a2b147f58c83439ecefb9189c2da32">mlx::core::Abs::output_shapes</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; int &gt; &gt; output_shapes(const std::vector&lt; array &gt; &amp;inputs) override</div><div class="ttdoc">Get the output shapes of the primitive.</div><div class="ttdef"><b>Definition</b> primitives.h:166</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_abs_html_ab6f0ec56bc7c048382297e12dabadc67"><div class="ttname"><a href="classmlx_1_1core_1_1_abs.html#ab6f0ec56bc7c048382297e12dabadc67">mlx::core::Abs::is_equivalent</a></div><div class="ttdeci">bool is_equivalent(const Primitive &amp;other) const override</div><div class="ttdoc">Equivalence check defaults to false unless overridden by the primitive.</div><div class="ttdef"><b>Definition</b> primitives.h:165</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_add_html"><div class="ttname"><a href="classmlx_1_1core_1_1_add.html">mlx::core::Add</a></div><div class="ttdef"><b>Definition</b> primitives.h:172</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_add_html_a5bacfc51dfa2a5a931bad2dd7bdc7a5f"><div class="ttname"><a href="classmlx_1_1core_1_1_add.html#a5bacfc51dfa2a5a931bad2dd7bdc7a5f">mlx::core::Add::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_add_html_aa0aacbc1e26b95a2f040f62aa4f69c3d"><div class="ttname"><a href="classmlx_1_1core_1_1_add.html#aa0aacbc1e26b95a2f040f62aa4f69c3d">mlx::core::Add::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_add_html_ae3fd5483f3454eac3df256e3f5f3cdae"><div class="ttname"><a href="classmlx_1_1core_1_1_add.html#ae3fd5483f3454eac3df256e3f5f3cdae">mlx::core::Add::Add</a></div><div class="ttdeci">Add(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:174</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_add_m_m_html"><div class="ttname"><a href="classmlx_1_1core_1_1_add_m_m.html">mlx::core::AddMM</a></div><div class="ttdef"><b>Definition</b> primitives.h:189</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_add_m_m_html_a15694e3bf2ed5c193237b2b9ca00867c"><div class="ttname"><a href="classmlx_1_1core_1_1_add_m_m.html#a15694e3bf2ed5c193237b2b9ca00867c">mlx::core::AddMM::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_add_m_m_html_a5f933be14baebc32a0be0f9a69148aa9"><div class="ttname"><a href="classmlx_1_1core_1_1_add_m_m.html#a5f933be14baebc32a0be0f9a69148aa9">mlx::core::AddMM::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_add_m_m_html_a8ae4372b3f96e72e8a5a06d59de8a550"><div class="ttname"><a href="classmlx_1_1core_1_1_add_m_m.html#a8ae4372b3f96e72e8a5a06d59de8a550">mlx::core::AddMM::AddMM</a></div><div class="ttdeci">AddMM(Stream stream, float alpha, float beta)</div><div class="ttdef"><b>Definition</b> primitives.h:191</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_add_m_m_html_ac1562a37cec6928e01281926ebeb47c6"><div class="ttname"><a href="classmlx_1_1core_1_1_add_m_m.html#ac1562a37cec6928e01281926ebeb47c6">mlx::core::AddMM::vjp</a></div><div class="ttdeci">std::vector&lt; array &gt; vjp(const std::vector&lt; array &gt; &amp;primals, const std::vector&lt; array &gt; &amp;cotangents, const std::vector&lt; int &gt; &amp;argnums, const std::vector&lt; array &gt; &amp;outputs) override</div><div class="ttdoc">The vector-Jacobian product.</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arange_html"><div class="ttname"><a href="classmlx_1_1core_1_1_arange.html">mlx::core::Arange</a></div><div class="ttdef"><b>Definition</b> primitives.h:213</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arange_html_a1a70c3b0b9c67d5a9446c141c5b7c574"><div class="ttname"><a href="classmlx_1_1core_1_1_arange.html#a1a70c3b0b9c67d5a9446c141c5b7c574">mlx::core::Arange::Arange</a></div><div class="ttdeci">Arange(Stream stream, double start, double stop, double step)</div><div class="ttdef"><b>Definition</b> primitives.h:215</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arange_html_a7a2e9787c6c3a78b4a6df91206974031"><div class="ttname"><a href="classmlx_1_1core_1_1_arange.html#a7a2e9787c6c3a78b4a6df91206974031">mlx::core::Arange::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arange_html_aba44432491cbd599bf72712f5f4267a1"><div class="ttname"><a href="classmlx_1_1core_1_1_arange.html#aba44432491cbd599bf72712f5f4267a1">mlx::core::Arange::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arc_cos_html"><div class="ttname"><a href="classmlx_1_1core_1_1_arc_cos.html">mlx::core::ArcCos</a></div><div class="ttdef"><b>Definition</b> primitives.h:232</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arc_cos_html_a46f72d4af89b0a0f5f203783fb44589c"><div class="ttname"><a href="classmlx_1_1core_1_1_arc_cos.html#a46f72d4af89b0a0f5f203783fb44589c">mlx::core::ArcCos::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arc_cos_html_a58dcba9e706cb12bab062bb7fa5fa006"><div class="ttname"><a href="classmlx_1_1core_1_1_arc_cos.html#a58dcba9e706cb12bab062bb7fa5fa006">mlx::core::ArcCos::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arc_cos_html_a66f4ee841d17923d93241b71ea5103e9"><div class="ttname"><a href="classmlx_1_1core_1_1_arc_cos.html#a66f4ee841d17923d93241b71ea5103e9">mlx::core::ArcCos::ArcCos</a></div><div class="ttdeci">ArcCos(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:234</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arc_cosh_html"><div class="ttname"><a href="classmlx_1_1core_1_1_arc_cosh.html">mlx::core::ArcCosh</a></div><div class="ttdef"><b>Definition</b> primitives.h:249</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arc_cosh_html_a0f6d989bcbbc38f15ef17a136879a9c9"><div class="ttname"><a href="classmlx_1_1core_1_1_arc_cosh.html#a0f6d989bcbbc38f15ef17a136879a9c9">mlx::core::ArcCosh::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arc_cosh_html_a34597054db467941a2a883c653ba4d71"><div class="ttname"><a href="classmlx_1_1core_1_1_arc_cosh.html#a34597054db467941a2a883c653ba4d71">mlx::core::ArcCosh::ArcCosh</a></div><div class="ttdeci">ArcCosh(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:251</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arc_cosh_html_aa6a2587485a0e015ac2d5211d7d045fc"><div class="ttname"><a href="classmlx_1_1core_1_1_arc_cosh.html#aa6a2587485a0e015ac2d5211d7d045fc">mlx::core::ArcCosh::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arc_sin_html"><div class="ttname"><a href="classmlx_1_1core_1_1_arc_sin.html">mlx::core::ArcSin</a></div><div class="ttdef"><b>Definition</b> primitives.h:266</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arc_sin_html_a7fa4ae7a85bc8bed97ea258ae30762f3"><div class="ttname"><a href="classmlx_1_1core_1_1_arc_sin.html#a7fa4ae7a85bc8bed97ea258ae30762f3">mlx::core::ArcSin::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arc_sin_html_a97cb8c3d4d9d6abc627dec49a404f013"><div class="ttname"><a href="classmlx_1_1core_1_1_arc_sin.html#a97cb8c3d4d9d6abc627dec49a404f013">mlx::core::ArcSin::ArcSin</a></div><div class="ttdeci">ArcSin(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:268</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arc_sin_html_ab3542492c14021329788de8f2a9be1e4"><div class="ttname"><a href="classmlx_1_1core_1_1_arc_sin.html#ab3542492c14021329788de8f2a9be1e4">mlx::core::ArcSin::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arc_sinh_html"><div class="ttname"><a href="classmlx_1_1core_1_1_arc_sinh.html">mlx::core::ArcSinh</a></div><div class="ttdef"><b>Definition</b> primitives.h:283</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arc_sinh_html_a30076b222788deeaaf9ad92d3c535f20"><div class="ttname"><a href="classmlx_1_1core_1_1_arc_sinh.html#a30076b222788deeaaf9ad92d3c535f20">mlx::core::ArcSinh::ArcSinh</a></div><div class="ttdeci">ArcSinh(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:285</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arc_sinh_html_a52574b24d8d16839c58673f51f8ac066"><div class="ttname"><a href="classmlx_1_1core_1_1_arc_sinh.html#a52574b24d8d16839c58673f51f8ac066">mlx::core::ArcSinh::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arc_sinh_html_a79f648a86de4c10386a1ce3b5e38e8ac"><div class="ttname"><a href="classmlx_1_1core_1_1_arc_sinh.html#a79f648a86de4c10386a1ce3b5e38e8ac">mlx::core::ArcSinh::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arc_tan2_html"><div class="ttname"><a href="classmlx_1_1core_1_1_arc_tan2.html">mlx::core::ArcTan2</a></div><div class="ttdef"><b>Definition</b> primitives.h:317</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arc_tan2_html_a13094e6b702769928ca0da468f5ce45c"><div class="ttname"><a href="classmlx_1_1core_1_1_arc_tan2.html#a13094e6b702769928ca0da468f5ce45c">mlx::core::ArcTan2::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arc_tan2_html_a76d3f0c29e0ff4642b8d39dac90d3f50"><div class="ttname"><a href="classmlx_1_1core_1_1_arc_tan2.html#a76d3f0c29e0ff4642b8d39dac90d3f50">mlx::core::ArcTan2::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arc_tan2_html_aa1a4ebab9924b6bcc80df5b52ed0121a"><div class="ttname"><a href="classmlx_1_1core_1_1_arc_tan2.html#aa1a4ebab9924b6bcc80df5b52ed0121a">mlx::core::ArcTan2::ArcTan2</a></div><div class="ttdeci">ArcTan2(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:319</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arc_tan_html"><div class="ttname"><a href="classmlx_1_1core_1_1_arc_tan.html">mlx::core::ArcTan</a></div><div class="ttdef"><b>Definition</b> primitives.h:300</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arc_tan_html_a1211bc31241227528f04435239ddb9a3"><div class="ttname"><a href="classmlx_1_1core_1_1_arc_tan.html#a1211bc31241227528f04435239ddb9a3">mlx::core::ArcTan::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arc_tan_html_a3511153bbd421e89fd9294cdb3f79b44"><div class="ttname"><a href="classmlx_1_1core_1_1_arc_tan.html#a3511153bbd421e89fd9294cdb3f79b44">mlx::core::ArcTan::ArcTan</a></div><div class="ttdeci">ArcTan(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:302</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arc_tan_html_a77866feb27028865d844070447c9a254"><div class="ttname"><a href="classmlx_1_1core_1_1_arc_tan.html#a77866feb27028865d844070447c9a254">mlx::core::ArcTan::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arc_tanh_html"><div class="ttname"><a href="classmlx_1_1core_1_1_arc_tanh.html">mlx::core::ArcTanh</a></div><div class="ttdef"><b>Definition</b> primitives.h:334</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arc_tanh_html_a10566b9d3b2c7d090895b46d9040bc1d"><div class="ttname"><a href="classmlx_1_1core_1_1_arc_tanh.html#a10566b9d3b2c7d090895b46d9040bc1d">mlx::core::ArcTanh::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arc_tanh_html_a17857bd0e2a3ecf1f7bf8e1a3d354358"><div class="ttname"><a href="classmlx_1_1core_1_1_arc_tanh.html#a17857bd0e2a3ecf1f7bf8e1a3d354358">mlx::core::ArcTanh::ArcTanh</a></div><div class="ttdeci">ArcTanh(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:336</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arc_tanh_html_a5af9224e1f1ffec412b0baa0af7e1ecd"><div class="ttname"><a href="classmlx_1_1core_1_1_arc_tanh.html#a5af9224e1f1ffec412b0baa0af7e1ecd">mlx::core::ArcTanh::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arg_partition_html"><div class="ttname"><a href="classmlx_1_1core_1_1_arg_partition.html">mlx::core::ArgPartition</a></div><div class="ttdef"><b>Definition</b> primitives.h:351</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arg_partition_html_a896f75c5325798ac3f9093f6a4581828"><div class="ttname"><a href="classmlx_1_1core_1_1_arg_partition.html#a896f75c5325798ac3f9093f6a4581828">mlx::core::ArgPartition::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arg_partition_html_a9a60995eaf85f63c877e86b23cbc15fc"><div class="ttname"><a href="classmlx_1_1core_1_1_arg_partition.html#a9a60995eaf85f63c877e86b23cbc15fc">mlx::core::ArgPartition::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arg_partition_html_ab54b13dbf92351ba1ac06fd3e5a802df"><div class="ttname"><a href="classmlx_1_1core_1_1_arg_partition.html#ab54b13dbf92351ba1ac06fd3e5a802df">mlx::core::ArgPartition::ArgPartition</a></div><div class="ttdeci">ArgPartition(Stream stream, int kth, int axis)</div><div class="ttdef"><b>Definition</b> primitives.h:353</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arg_reduce_html"><div class="ttname"><a href="classmlx_1_1core_1_1_arg_reduce.html">mlx::core::ArgReduce</a></div><div class="ttdef"><b>Definition</b> primitives.h:371</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arg_reduce_html_a920ed48caaba76683be0d1f1ed4a8bd3"><div class="ttname"><a href="classmlx_1_1core_1_1_arg_reduce.html#a920ed48caaba76683be0d1f1ed4a8bd3">mlx::core::ArgReduce::ReduceType</a></div><div class="ttdeci">ReduceType</div><div class="ttdef"><b>Definition</b> primitives.h:373</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arg_reduce_html_a920ed48caaba76683be0d1f1ed4a8bd3a93a8a9221545ae9518d289d9ac4d09e9"><div class="ttname"><a href="classmlx_1_1core_1_1_arg_reduce.html#a920ed48caaba76683be0d1f1ed4a8bd3a93a8a9221545ae9518d289d9ac4d09e9">mlx::core::ArgReduce::ArgMin</a></div><div class="ttdeci">@ ArgMin</div><div class="ttdef"><b>Definition</b> primitives.h:374</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arg_reduce_html_a920ed48caaba76683be0d1f1ed4a8bd3acc6659315ab0001abd37cbfcbe837e7e"><div class="ttname"><a href="classmlx_1_1core_1_1_arg_reduce.html#a920ed48caaba76683be0d1f1ed4a8bd3acc6659315ab0001abd37cbfcbe837e7e">mlx::core::ArgReduce::ArgMax</a></div><div class="ttdeci">@ ArgMax</div><div class="ttdef"><b>Definition</b> primitives.h:375</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arg_reduce_html_aaccf8021dc24895656e25142eb65aa03"><div class="ttname"><a href="classmlx_1_1core_1_1_arg_reduce.html#aaccf8021dc24895656e25142eb65aa03">mlx::core::ArgReduce::ArgReduce</a></div><div class="ttdeci">ArgReduce(Stream stream, ReduceType reduce_type, int axis)</div><div class="ttdef"><b>Definition</b> primitives.h:378</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arg_reduce_html_aafa982ce2abc0cd9e81e43aa2c823d29"><div class="ttname"><a href="classmlx_1_1core_1_1_arg_reduce.html#aafa982ce2abc0cd9e81e43aa2c823d29">mlx::core::ArgReduce::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arg_reduce_html_ad8d48725623ede1ff654fa13eccf2287"><div class="ttname"><a href="classmlx_1_1core_1_1_arg_reduce.html#ad8d48725623ede1ff654fa13eccf2287">mlx::core::ArgReduce::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arg_sort_html"><div class="ttname"><a href="classmlx_1_1core_1_1_arg_sort.html">mlx::core::ArgSort</a></div><div class="ttdef"><b>Definition</b> primitives.h:397</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arg_sort_html_a022079683774bfeb531b3a002cff16fa"><div class="ttname"><a href="classmlx_1_1core_1_1_arg_sort.html#a022079683774bfeb531b3a002cff16fa">mlx::core::ArgSort::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arg_sort_html_a38507a8445302a81cb44674c4a5fc0b0"><div class="ttname"><a href="classmlx_1_1core_1_1_arg_sort.html#a38507a8445302a81cb44674c4a5fc0b0">mlx::core::ArgSort::ArgSort</a></div><div class="ttdeci">ArgSort(Stream stream, int axis)</div><div class="ttdef"><b>Definition</b> primitives.h:399</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_arg_sort_html_abc2d730850ec4ee8d7968b7417911709"><div class="ttname"><a href="classmlx_1_1core_1_1_arg_sort.html#abc2d730850ec4ee8d7968b7417911709">mlx::core::ArgSort::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_as_strided_html"><div class="ttname"><a href="classmlx_1_1core_1_1_as_strided.html">mlx::core::AsStrided</a></div><div class="ttdef"><b>Definition</b> primitives.h:436</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_as_strided_html_a80c0547f72ed53374eafc57d57b5d4af"><div class="ttname"><a href="classmlx_1_1core_1_1_as_strided.html#a80c0547f72ed53374eafc57d57b5d4af">mlx::core::AsStrided::AsStrided</a></div><div class="ttdeci">AsStrided(Stream stream, std::vector&lt; int &gt; shape, std::vector&lt; size_t &gt; strides, size_t offset)</div><div class="ttdef"><b>Definition</b> primitives.h:438</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_as_strided_html_ab6771a208323994927ca162ba7bb10ed"><div class="ttname"><a href="classmlx_1_1core_1_1_as_strided.html#ab6771a208323994927ca162ba7bb10ed">mlx::core::AsStrided::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_as_strided_html_acdd4705e4503ff0b124215c4676b4193"><div class="ttname"><a href="classmlx_1_1core_1_1_as_strided.html#acdd4705e4503ff0b124215c4676b4193">mlx::core::AsStrided::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_as_type_html"><div class="ttname"><a href="classmlx_1_1core_1_1_as_type.html">mlx::core::AsType</a></div><div class="ttdef"><b>Definition</b> primitives.h:416</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_as_type_html_a5b111b9d74c60d27b4a7ebaa49f96e0b"><div class="ttname"><a href="classmlx_1_1core_1_1_as_type.html#a5b111b9d74c60d27b4a7ebaa49f96e0b">mlx::core::AsType::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_as_type_html_a8c3241d402a8977bb4db037e225f5b47"><div class="ttname"><a href="classmlx_1_1core_1_1_as_type.html#a8c3241d402a8977bb4db037e225f5b47">mlx::core::AsType::AsType</a></div><div class="ttdeci">AsType(Stream stream, Dtype dtype)</div><div class="ttdef"><b>Definition</b> primitives.h:418</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_as_type_html_aa89dbf4d73b00c6a44cffd04d5bb228d"><div class="ttname"><a href="classmlx_1_1core_1_1_as_type.html#aa89dbf4d73b00c6a44cffd04d5bb228d">mlx::core::AsType::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_bitwise_binary_html"><div class="ttname"><a href="classmlx_1_1core_1_1_bitwise_binary.html">mlx::core::BitwiseBinary</a></div><div class="ttdef"><b>Definition</b> primitives.h:463</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_bitwise_binary_html_a0d8b3a94951621ffcdebc6fda748a172"><div class="ttname"><a href="classmlx_1_1core_1_1_bitwise_binary.html#a0d8b3a94951621ffcdebc6fda748a172">mlx::core::BitwiseBinary::BitwiseBinary</a></div><div class="ttdeci">BitwiseBinary(Stream stream, Op op)</div><div class="ttdef"><b>Definition</b> primitives.h:467</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_bitwise_binary_html_a2194bf585213bda1b2966aa02d2fe283"><div class="ttname"><a href="classmlx_1_1core_1_1_bitwise_binary.html#a2194bf585213bda1b2966aa02d2fe283">mlx::core::BitwiseBinary::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_bitwise_binary_html_a6f8b5d455d0c1770428a6bef1608f23d"><div class="ttname"><a href="classmlx_1_1core_1_1_bitwise_binary.html#a6f8b5d455d0c1770428a6bef1608f23d">mlx::core::BitwiseBinary::Op</a></div><div class="ttdeci">Op</div><div class="ttdef"><b>Definition</b> primitives.h:465</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_bitwise_binary_html_a6f8b5d455d0c1770428a6bef1608f23dab14e7d426f45ae7f029f4e00210fbae4"><div class="ttname"><a href="classmlx_1_1core_1_1_bitwise_binary.html#a6f8b5d455d0c1770428a6bef1608f23dab14e7d426f45ae7f029f4e00210fbae4">mlx::core::BitwiseBinary::And</a></div><div class="ttdeci">@ And</div><div class="ttdef"><b>Definition</b> primitives.h:465</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_bitwise_binary_html_ac831a29fc46701b00bbe63ee33832afd"><div class="ttname"><a href="classmlx_1_1core_1_1_bitwise_binary.html#ac831a29fc46701b00bbe63ee33832afd">mlx::core::BitwiseBinary::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_block_masked_m_m_html"><div class="ttname"><a href="classmlx_1_1core_1_1_block_masked_m_m.html">mlx::core::BlockMaskedMM</a></div><div class="ttdef"><b>Definition</b> primitives.h:483</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_block_masked_m_m_html_a1adf20087ee2f685bf39c2724b8e7120"><div class="ttname"><a href="classmlx_1_1core_1_1_block_masked_m_m.html#a1adf20087ee2f685bf39c2724b8e7120">mlx::core::BlockMaskedMM::vjp</a></div><div class="ttdeci">std::vector&lt; array &gt; vjp(const std::vector&lt; array &gt; &amp;primals, const std::vector&lt; array &gt; &amp;cotangents, const std::vector&lt; int &gt; &amp;argnums, const std::vector&lt; array &gt; &amp;outputs) override</div><div class="ttdoc">The vector-Jacobian product.</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_block_masked_m_m_html_aa85da478cdc6d4a97be06e5d4abee1f2"><div class="ttname"><a href="classmlx_1_1core_1_1_block_masked_m_m.html#aa85da478cdc6d4a97be06e5d4abee1f2">mlx::core::BlockMaskedMM::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_block_masked_m_m_html_ab372b6df4de00a33795a052a23bb1df9"><div class="ttname"><a href="classmlx_1_1core_1_1_block_masked_m_m.html#ab372b6df4de00a33795a052a23bb1df9">mlx::core::BlockMaskedMM::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_block_masked_m_m_html_ad26509deb5306d0c5eb72477e9a57477"><div class="ttname"><a href="classmlx_1_1core_1_1_block_masked_m_m.html#ad26509deb5306d0c5eb72477e9a57477">mlx::core::BlockMaskedMM::BlockMaskedMM</a></div><div class="ttdeci">BlockMaskedMM(Stream stream, int block_size)</div><div class="ttdef"><b>Definition</b> primitives.h:485</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_broadcast_html"><div class="ttname"><a href="classmlx_1_1core_1_1_broadcast.html">mlx::core::Broadcast</a></div><div class="ttdef"><b>Definition</b> primitives.h:526</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_broadcast_html_a53d48d9778e2d4c24a124cd767900780"><div class="ttname"><a href="classmlx_1_1core_1_1_broadcast.html#a53d48d9778e2d4c24a124cd767900780">mlx::core::Broadcast::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_broadcast_html_ab9bd9dbcedcefc9b29c84911b5ce69fe"><div class="ttname"><a href="classmlx_1_1core_1_1_broadcast.html#ab9bd9dbcedcefc9b29c84911b5ce69fe">mlx::core::Broadcast::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_broadcast_html_accbab8433c93e281608a268d11afaefb"><div class="ttname"><a href="classmlx_1_1core_1_1_broadcast.html#accbab8433c93e281608a268d11afaefb">mlx::core::Broadcast::Broadcast</a></div><div class="ttdeci">Broadcast(Stream stream, const std::vector&lt; int &gt; &amp;shape)</div><div class="ttdef"><b>Definition</b> primitives.h:528</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_ceil_html"><div class="ttname"><a href="classmlx_1_1core_1_1_ceil.html">mlx::core::Ceil</a></div><div class="ttdef"><b>Definition</b> primitives.h:545</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_ceil_html_a9791801fff3f8b79944e15ac2a45a035"><div class="ttname"><a href="classmlx_1_1core_1_1_ceil.html#a9791801fff3f8b79944e15ac2a45a035">mlx::core::Ceil::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_ceil_html_abe178e0058e44b6618be414215e96887"><div class="ttname"><a href="classmlx_1_1core_1_1_ceil.html#abe178e0058e44b6618be414215e96887">mlx::core::Ceil::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_ceil_html_aede38610ca25429f229301546bc9b682"><div class="ttname"><a href="classmlx_1_1core_1_1_ceil.html#aede38610ca25429f229301546bc9b682">mlx::core::Ceil::Ceil</a></div><div class="ttdeci">Ceil(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:547</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_cholesky_html"><div class="ttname"><a href="classmlx_1_1core_1_1_cholesky.html">mlx::core::Cholesky</a></div><div class="ttdef"><b>Definition</b> primitives.h:2153</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_cholesky_html_a4bdec36c1cc99aadf9a4a39d4c57bea5"><div class="ttname"><a href="classmlx_1_1core_1_1_cholesky.html#a4bdec36c1cc99aadf9a4a39d4c57bea5">mlx::core::Cholesky::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_cholesky_html_a6ae2e30b85f99f4f0d7f14c7949818ab"><div class="ttname"><a href="classmlx_1_1core_1_1_cholesky.html#a6ae2e30b85f99f4f0d7f14c7949818ab">mlx::core::Cholesky::Cholesky</a></div><div class="ttdeci">Cholesky(Stream stream, bool upper)</div><div class="ttdef"><b>Definition</b> primitives.h:2155</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_cholesky_html_a8c918594bf129888044ef37fcae56795"><div class="ttname"><a href="classmlx_1_1core_1_1_cholesky.html#a8c918594bf129888044ef37fcae56795">mlx::core::Cholesky::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_compiled_html"><div class="ttname"><a href="classmlx_1_1core_1_1_compiled.html">mlx::core::Compiled</a></div><div class="ttdef"><b>Definition</b> primitives.h:562</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_compiled_html_a2d8cefff835c419a48a077d306b8e051"><div class="ttname"><a href="classmlx_1_1core_1_1_compiled.html#a2d8cefff835c419a48a077d306b8e051">mlx::core::Compiled::Compiled</a></div><div class="ttdeci">Compiled(Stream stream, std::vector&lt; array &gt; inputs, std::vector&lt; array &gt; outputs, std::vector&lt; array &gt; tape, std::unordered_set&lt; uintptr_t &gt; constant_ids)</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_compiled_html_aa3d5ff0f2b3554ad48fbbf2a0f3336d5"><div class="ttname"><a href="classmlx_1_1core_1_1_compiled.html#aa3d5ff0f2b3554ad48fbbf2a0f3336d5">mlx::core::Compiled::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, std::vector&lt; array &gt; &amp;outputs) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_compiled_html_ac45b1d0fedd85feefbff7ce7e168b151"><div class="ttname"><a href="classmlx_1_1core_1_1_compiled.html#ac45b1d0fedd85feefbff7ce7e168b151">mlx::core::Compiled::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, std::vector&lt; array &gt; &amp;outputs) override</div><div class="ttdoc">A primitive must know how to evaluate itself on the CPU/GPU for the given inputs and populate the out...</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_concatenate_html"><div class="ttname"><a href="classmlx_1_1core_1_1_concatenate.html">mlx::core::Concatenate</a></div><div class="ttdef"><b>Definition</b> primitives.h:605</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_concatenate_html_a309a1c50e97f9925866433ee2841c474"><div class="ttname"><a href="classmlx_1_1core_1_1_concatenate.html#a309a1c50e97f9925866433ee2841c474">mlx::core::Concatenate::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_concatenate_html_a609e76bede7fc5581ec84ddcb727a258"><div class="ttname"><a href="classmlx_1_1core_1_1_concatenate.html#a609e76bede7fc5581ec84ddcb727a258">mlx::core::Concatenate::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_concatenate_html_acff07853de2d31faeec7c4ca40ce0888"><div class="ttname"><a href="classmlx_1_1core_1_1_concatenate.html#acff07853de2d31faeec7c4ca40ce0888">mlx::core::Concatenate::Concatenate</a></div><div class="ttdeci">Concatenate(Stream stream, int axis)</div><div class="ttdef"><b>Definition</b> primitives.h:607</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_conjugate_html"><div class="ttname"><a href="classmlx_1_1core_1_1_conjugate.html">mlx::core::Conjugate</a></div><div class="ttdef"><b>Definition</b> primitives.h:624</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_conjugate_html_a627f9e6a8729fb3ffb3ca3228d007c87"><div class="ttname"><a href="classmlx_1_1core_1_1_conjugate.html#a627f9e6a8729fb3ffb3ca3228d007c87">mlx::core::Conjugate::Conjugate</a></div><div class="ttdeci">Conjugate(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:626</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_conjugate_html_ae39643e2178f442ffba05139f8609d61"><div class="ttname"><a href="classmlx_1_1core_1_1_conjugate.html#ae39643e2178f442ffba05139f8609d61">mlx::core::Conjugate::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_conjugate_html_aff0a802166e3724db88ab5d3feb2d3de"><div class="ttname"><a href="classmlx_1_1core_1_1_conjugate.html#aff0a802166e3724db88ab5d3feb2d3de">mlx::core::Conjugate::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_convolution_html"><div class="ttname"><a href="classmlx_1_1core_1_1_convolution.html">mlx::core::Convolution</a></div><div class="ttdef"><b>Definition</b> primitives.h:640</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_convolution_html_a30b64109eeb1778f002b99447dff9dd2"><div class="ttname"><a href="classmlx_1_1core_1_1_convolution.html#a30b64109eeb1778f002b99447dff9dd2">mlx::core::Convolution::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_convolution_html_a6f1de77b719bb13217b0d8c64cabb8ef"><div class="ttname"><a href="classmlx_1_1core_1_1_convolution.html#a6f1de77b719bb13217b0d8c64cabb8ef">mlx::core::Convolution::Convolution</a></div><div class="ttdeci">Convolution(Stream stream, const std::vector&lt; int &gt; &amp;kernel_strides, const std::vector&lt; int &gt; &amp;padding, const std::vector&lt; int &gt; &amp;kernel_dilation, const std::vector&lt; int &gt; &amp;input_dilation, const int groups=1, const bool flip=false)</div><div class="ttdef"><b>Definition</b> primitives.h:642</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_convolution_html_ac74256068da01730629109fa4fa8432b"><div class="ttname"><a href="classmlx_1_1core_1_1_convolution.html#ac74256068da01730629109fa4fa8432b">mlx::core::Convolution::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_convolution_html_af8eb9c0c055ad20aa74b547016917690"><div class="ttname"><a href="classmlx_1_1core_1_1_convolution.html#af8eb9c0c055ad20aa74b547016917690">mlx::core::Convolution::vjp</a></div><div class="ttdeci">std::vector&lt; array &gt; vjp(const std::vector&lt; array &gt; &amp;primals, const std::vector&lt; array &gt; &amp;cotangents, const std::vector&lt; int &gt; &amp;argnums, const std::vector&lt; array &gt; &amp;outputs) override</div><div class="ttdoc">The vector-Jacobian product.</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_copy_html"><div class="ttname"><a href="classmlx_1_1core_1_1_copy.html">mlx::core::Copy</a></div><div class="ttdef"><b>Definition</b> primitives.h:681</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_copy_html_a1eda7b2ea771a168f67421f0d384b3a1"><div class="ttname"><a href="classmlx_1_1core_1_1_copy.html#a1eda7b2ea771a168f67421f0d384b3a1">mlx::core::Copy::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_copy_html_a6243e044af119105ffaaed7d405cd584"><div class="ttname"><a href="classmlx_1_1core_1_1_copy.html#a6243e044af119105ffaaed7d405cd584">mlx::core::Copy::Copy</a></div><div class="ttdeci">Copy(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:683</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_copy_html_af4a0ebec423e84ffe8083a5e9ed0d70c"><div class="ttname"><a href="classmlx_1_1core_1_1_copy.html#af4a0ebec423e84ffe8083a5e9ed0d70c">mlx::core::Copy::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_cos_html"><div class="ttname"><a href="classmlx_1_1core_1_1_cos.html">mlx::core::Cos</a></div><div class="ttdef"><b>Definition</b> primitives.h:698</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_cos_html_a061fc446268fe56237ae6b20ccf78152"><div class="ttname"><a href="classmlx_1_1core_1_1_cos.html#a061fc446268fe56237ae6b20ccf78152">mlx::core::Cos::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_cos_html_a2acb9fcf0901462189c476756fd99995"><div class="ttname"><a href="classmlx_1_1core_1_1_cos.html#a2acb9fcf0901462189c476756fd99995">mlx::core::Cos::Cos</a></div><div class="ttdeci">Cos(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:700</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_cos_html_a5ef41aafad595f6cdd8c535e36e12060"><div class="ttname"><a href="classmlx_1_1core_1_1_cos.html#a5ef41aafad595f6cdd8c535e36e12060">mlx::core::Cos::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_cosh_html"><div class="ttname"><a href="classmlx_1_1core_1_1_cosh.html">mlx::core::Cosh</a></div><div class="ttdef"><b>Definition</b> primitives.h:715</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_cosh_html_a23f71b43792934c3ec0ebe9b74f32559"><div class="ttname"><a href="classmlx_1_1core_1_1_cosh.html#a23f71b43792934c3ec0ebe9b74f32559">mlx::core::Cosh::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_cosh_html_a44e8ac2e09a55ec32e9dc6641eedc8f1"><div class="ttname"><a href="classmlx_1_1core_1_1_cosh.html#a44e8ac2e09a55ec32e9dc6641eedc8f1">mlx::core::Cosh::Cosh</a></div><div class="ttdeci">Cosh(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:717</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_cosh_html_ae8702df7e8f0e20cbeccb2a548961d3d"><div class="ttname"><a href="classmlx_1_1core_1_1_cosh.html#ae8702df7e8f0e20cbeccb2a548961d3d">mlx::core::Cosh::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_custom_transforms_html"><div class="ttname"><a href="classmlx_1_1core_1_1_custom_transforms.html">mlx::core::CustomTransforms</a></div><div class="ttdef"><b>Definition</b> primitives.h:732</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_custom_transforms_html_a7b3538681acbb20af3ed37b0877f6667"><div class="ttname"><a href="classmlx_1_1core_1_1_custom_transforms.html#a7b3538681acbb20af3ed37b0877f6667">mlx::core::CustomTransforms::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, std::vector&lt; array &gt; &amp;outputs) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_custom_transforms_html_ab52abadb9c6f6db83d087c7b751be488"><div class="ttname"><a href="classmlx_1_1core_1_1_custom_transforms.html#ab52abadb9c6f6db83d087c7b751be488">mlx::core::CustomTransforms::CustomTransforms</a></div><div class="ttdeci">CustomTransforms(Stream stream, int num_outputs, std::function&lt; std::vector&lt; array &gt;(const std::vector&lt; array &gt; &amp;, const std::vector&lt; array &gt; &amp;, const std::vector&lt; array &gt; &amp;)&gt; vjp, std::function&lt; std::vector&lt; array &gt;(const std::vector&lt; array &gt; &amp;, const std::vector&lt; array &gt; &amp;, const std::vector&lt; int &gt; &amp;)&gt; jvp, std::function&lt; std::pair&lt; std::vector&lt; array &gt;, std::vector&lt; int &gt; &gt;(const std::vector&lt; array &gt; &amp;, const std::vector&lt; int &gt; &amp;)&gt; vmap)</div><div class="ttdef"><b>Definition</b> primitives.h:734</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_custom_transforms_html_adba1c40c77a2138df6b5f75483f62184"><div class="ttname"><a href="classmlx_1_1core_1_1_custom_transforms.html#adba1c40c77a2138df6b5f75483f62184">mlx::core::CustomTransforms::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, std::vector&lt; array &gt; &amp;outputs) override</div><div class="ttdoc">A primitive must know how to evaluate itself on the CPU/GPU for the given inputs and populate the out...</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_depends_html"><div class="ttname"><a href="classmlx_1_1core_1_1_depends.html">mlx::core::Depends</a></div><div class="ttdef"><b>Definition</b> primitives.h:784</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_depends_html_a02996fa45f01f7cb9f37074d5f8ccab0"><div class="ttname"><a href="classmlx_1_1core_1_1_depends.html#a02996fa45f01f7cb9f37074d5f8ccab0">mlx::core::Depends::vjp</a></div><div class="ttdeci">std::vector&lt; array &gt; vjp(const std::vector&lt; array &gt; &amp;primals, const std::vector&lt; array &gt; &amp;cotan, const std::vector&lt; int &gt; &amp;argnums, const std::vector&lt; array &gt; &amp;outputs) override</div><div class="ttdoc">The vector-Jacobian product.</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_depends_html_a0c7ea6db97337591fa53c6e6bde41e5e"><div class="ttname"><a href="classmlx_1_1core_1_1_depends.html#a0c7ea6db97337591fa53c6e6bde41e5e">mlx::core::Depends::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, std::vector&lt; array &gt; &amp;outputs) override</div><div class="ttdoc">A primitive must know how to evaluate itself on the CPU/GPU for the given inputs and populate the out...</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_depends_html_a4ccb792c99f5d8d133d3fac29f7d3f62"><div class="ttname"><a href="classmlx_1_1core_1_1_depends.html#a4ccb792c99f5d8d133d3fac29f7d3f62">mlx::core::Depends::Depends</a></div><div class="ttdeci">Depends(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:786</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_depends_html_ae5057f65e69490ad0add8eeda2b75e28"><div class="ttname"><a href="classmlx_1_1core_1_1_depends.html#ae5057f65e69490ad0add8eeda2b75e28">mlx::core::Depends::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, std::vector&lt; array &gt; &amp;outputs) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_div_mod_html"><div class="ttname"><a href="classmlx_1_1core_1_1_div_mod.html">mlx::core::DivMod</a></div><div class="ttdef"><b>Definition</b> primitives.h:822</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_div_mod_html_a003117c9ecf3c06a27248f72a76348dc"><div class="ttname"><a href="classmlx_1_1core_1_1_div_mod.html#a003117c9ecf3c06a27248f72a76348dc">mlx::core::DivMod::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, std::vector&lt; array &gt; &amp;outputs) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_div_mod_html_a859e3b6149cdceab1c7ccfd2246fb826"><div class="ttname"><a href="classmlx_1_1core_1_1_div_mod.html#a859e3b6149cdceab1c7ccfd2246fb826">mlx::core::DivMod::DivMod</a></div><div class="ttdeci">DivMod(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:824</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_div_mod_html_ae350b7b93ad128e3133ee14f247193b3"><div class="ttname"><a href="classmlx_1_1core_1_1_div_mod.html#ae350b7b93ad128e3133ee14f247193b3">mlx::core::DivMod::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, std::vector&lt; array &gt; &amp;outputs) override</div><div class="ttdoc">A primitive must know how to evaluate itself on the CPU/GPU for the given inputs and populate the out...</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_divide_html"><div class="ttname"><a href="classmlx_1_1core_1_1_divide.html">mlx::core::Divide</a></div><div class="ttdef"><b>Definition</b> primitives.h:805</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_divide_html_a62fc71e8998be65ff18285dbbd21eedb"><div class="ttname"><a href="classmlx_1_1core_1_1_divide.html#a62fc71e8998be65ff18285dbbd21eedb">mlx::core::Divide::Divide</a></div><div class="ttdeci">Divide(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:807</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_divide_html_a823443c2a8e8b81bbcaeee6ddbcdbf49"><div class="ttname"><a href="classmlx_1_1core_1_1_divide.html#a823443c2a8e8b81bbcaeee6ddbcdbf49">mlx::core::Divide::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_divide_html_abffda0ce37221ddc28dc9eea794f6bc7"><div class="ttname"><a href="classmlx_1_1core_1_1_divide.html#abffda0ce37221ddc28dc9eea794f6bc7">mlx::core::Divide::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_equal_html"><div class="ttname"><a href="classmlx_1_1core_1_1_equal.html">mlx::core::Equal</a></div><div class="ttdef"><b>Definition</b> primitives.h:878</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_equal_html_a4af81cf2dd071db5bbf8ce1df95fdf36"><div class="ttname"><a href="classmlx_1_1core_1_1_equal.html#a4af81cf2dd071db5bbf8ce1df95fdf36">mlx::core::Equal::Equal</a></div><div class="ttdeci">Equal(Stream stream, bool equal_nan=false)</div><div class="ttdef"><b>Definition</b> primitives.h:880</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_equal_html_aabb8aa61fa581defddcdca1274b1b454"><div class="ttname"><a href="classmlx_1_1core_1_1_equal.html#aabb8aa61fa581defddcdca1274b1b454">mlx::core::Equal::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_equal_html_ac3757001fec42ceb5ece2954df42161c"><div class="ttname"><a href="classmlx_1_1core_1_1_equal.html#ac3757001fec42ceb5ece2954df42161c">mlx::core::Equal::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_erf_html"><div class="ttname"><a href="classmlx_1_1core_1_1_erf.html">mlx::core::Erf</a></div><div class="ttdef"><b>Definition</b> primitives.h:904</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_erf_html_a702f76f848928d8d7d3d0881ac6e4c82"><div class="ttname"><a href="classmlx_1_1core_1_1_erf.html#a702f76f848928d8d7d3d0881ac6e4c82">mlx::core::Erf::Erf</a></div><div class="ttdeci">Erf(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:906</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_erf_html_a84ea16e43d5b7f83bbc2d5ece78a3fb6"><div class="ttname"><a href="classmlx_1_1core_1_1_erf.html#a84ea16e43d5b7f83bbc2d5ece78a3fb6">mlx::core::Erf::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_erf_html_ad8551be664d767dccc3c0d8cc1eca008"><div class="ttname"><a href="classmlx_1_1core_1_1_erf.html#ad8551be664d767dccc3c0d8cc1eca008">mlx::core::Erf::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_erf_inv_html"><div class="ttname"><a href="classmlx_1_1core_1_1_erf_inv.html">mlx::core::ErfInv</a></div><div class="ttdef"><b>Definition</b> primitives.h:921</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_erf_inv_html_a4a2413d0634db1f3dae1806ddfa632db"><div class="ttname"><a href="classmlx_1_1core_1_1_erf_inv.html#a4a2413d0634db1f3dae1806ddfa632db">mlx::core::ErfInv::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_erf_inv_html_a5d0279247b67da4592311559f04e1478"><div class="ttname"><a href="classmlx_1_1core_1_1_erf_inv.html#a5d0279247b67da4592311559f04e1478">mlx::core::ErfInv::ErfInv</a></div><div class="ttdeci">ErfInv(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:923</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_erf_inv_html_af579627402af3249565134884701d39e"><div class="ttname"><a href="classmlx_1_1core_1_1_erf_inv.html#af579627402af3249565134884701d39e">mlx::core::ErfInv::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_exp_html"><div class="ttname"><a href="classmlx_1_1core_1_1_exp.html">mlx::core::Exp</a></div><div class="ttdef"><b>Definition</b> primitives.h:938</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_exp_html_a1d0a618cbb91ab29ef53b57ff6ed6e06"><div class="ttname"><a href="classmlx_1_1core_1_1_exp.html#a1d0a618cbb91ab29ef53b57ff6ed6e06">mlx::core::Exp::Exp</a></div><div class="ttdeci">Exp(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:940</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_exp_html_a47934c5a5023bc7ae7ae89bff45ebb2c"><div class="ttname"><a href="classmlx_1_1core_1_1_exp.html#a47934c5a5023bc7ae7ae89bff45ebb2c">mlx::core::Exp::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_exp_html_a7d63695a97a14760fd33b5d4e6590822"><div class="ttname"><a href="classmlx_1_1core_1_1_exp.html#a7d63695a97a14760fd33b5d4e6590822">mlx::core::Exp::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_expm1_html"><div class="ttname"><a href="classmlx_1_1core_1_1_expm1.html">mlx::core::Expm1</a></div><div class="ttdef"><b>Definition</b> primitives.h:955</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_expm1_html_a47c2a1b2a4ef6bb07ba77c55ddddaec2"><div class="ttname"><a href="classmlx_1_1core_1_1_expm1.html#a47c2a1b2a4ef6bb07ba77c55ddddaec2">mlx::core::Expm1::Expm1</a></div><div class="ttdeci">Expm1(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:957</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_expm1_html_a82930071f4b77d883b300f77966aff5f"><div class="ttname"><a href="classmlx_1_1core_1_1_expm1.html#a82930071f4b77d883b300f77966aff5f">mlx::core::Expm1::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_expm1_html_ab9c8b7aa50fe4592d55f8957baac647a"><div class="ttname"><a href="classmlx_1_1core_1_1_expm1.html#ab9c8b7aa50fe4592d55f8957baac647a">mlx::core::Expm1::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_f_f_t_html"><div class="ttname"><a href="classmlx_1_1core_1_1_f_f_t.html">mlx::core::FFT</a></div><div class="ttdef"><b>Definition</b> primitives.h:971</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_f_f_t_html_a0cdce626ed2c8eeeecc6949418437839"><div class="ttname"><a href="classmlx_1_1core_1_1_f_f_t.html#a0cdce626ed2c8eeeecc6949418437839">mlx::core::FFT::FFT</a></div><div class="ttdeci">FFT(Stream stream, const std::vector&lt; size_t &gt; &amp;axes, bool inverse, bool real)</div><div class="ttdef"><b>Definition</b> primitives.h:973</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_f_f_t_html_a1c21b26d1e9ad7c4da78ae845721b2dd"><div class="ttname"><a href="classmlx_1_1core_1_1_f_f_t.html#a1c21b26d1e9ad7c4da78ae845721b2dd">mlx::core::FFT::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_f_f_t_html_a6bc262a0c2b5d4fe655e3e2e0ff28635"><div class="ttname"><a href="classmlx_1_1core_1_1_f_f_t.html#a6bc262a0c2b5d4fe655e3e2e0ff28635">mlx::core::FFT::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_floor_html"><div class="ttname"><a href="classmlx_1_1core_1_1_floor.html">mlx::core::Floor</a></div><div class="ttdef"><b>Definition</b> primitives.h:997</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_floor_html_a1a7dc5f571b7b73e7ef3cbdc1dd1fcf7"><div class="ttname"><a href="classmlx_1_1core_1_1_floor.html#a1a7dc5f571b7b73e7ef3cbdc1dd1fcf7">mlx::core::Floor::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_floor_html_aaa29c83538099eb8f951c95a41f2eb65"><div class="ttname"><a href="classmlx_1_1core_1_1_floor.html#aaa29c83538099eb8f951c95a41f2eb65">mlx::core::Floor::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_floor_html_ada4e979b784b732696313d7094e91340"><div class="ttname"><a href="classmlx_1_1core_1_1_floor.html#ada4e979b784b732696313d7094e91340">mlx::core::Floor::Floor</a></div><div class="ttdeci">Floor(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:999</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_full_html"><div class="ttname"><a href="classmlx_1_1core_1_1_full.html">mlx::core::Full</a></div><div class="ttdef"><b>Definition</b> primitives.h:1014</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_full_html_a3dccd3756599d7fd018b2af0093b082c"><div class="ttname"><a href="classmlx_1_1core_1_1_full.html#a3dccd3756599d7fd018b2af0093b082c">mlx::core::Full::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_full_html_aa54f99bb4cba12a551392dea56003872"><div class="ttname"><a href="classmlx_1_1core_1_1_full.html#aa54f99bb4cba12a551392dea56003872">mlx::core::Full::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_full_html_aafcb86a2e41353853ec48c717e0c54d6"><div class="ttname"><a href="classmlx_1_1core_1_1_full.html#aafcb86a2e41353853ec48c717e0c54d6">mlx::core::Full::Full</a></div><div class="ttdeci">Full(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:1016</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_gather_html"><div class="ttname"><a href="classmlx_1_1core_1_1_gather.html">mlx::core::Gather</a></div><div class="ttdef"><b>Definition</b> primitives.h:1030</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_gather_html_a5b5f47ceff1d43477c87be5116f261d0"><div class="ttname"><a href="classmlx_1_1core_1_1_gather.html#a5b5f47ceff1d43477c87be5116f261d0">mlx::core::Gather::Gather</a></div><div class="ttdeci">Gather(Stream stream, const std::vector&lt; int &gt; &amp;axes, const std::vector&lt; int &gt; &amp;slice_sizes)</div><div class="ttdef"><b>Definition</b> primitives.h:1032</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_gather_html_a9ed5587f0d04b59a2b9186c0aac21290"><div class="ttname"><a href="classmlx_1_1core_1_1_gather.html#a9ed5587f0d04b59a2b9186c0aac21290">mlx::core::Gather::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_gather_html_aec48ee529cb2449915a7b27a3c4361e8"><div class="ttname"><a href="classmlx_1_1core_1_1_gather.html#aec48ee529cb2449915a7b27a3c4361e8">mlx::core::Gather::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_gather_m_m_html"><div class="ttname"><a href="classmlx_1_1core_1_1_gather_m_m.html">mlx::core::GatherMM</a></div><div class="ttdef"><b>Definition</b> primitives.h:506</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_gather_m_m_html_a62352074a480df0e1f879b0bae425730"><div class="ttname"><a href="classmlx_1_1core_1_1_gather_m_m.html#a62352074a480df0e1f879b0bae425730">mlx::core::GatherMM::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_gather_m_m_html_a76c9f27c57354f6230b43944882e1bda"><div class="ttname"><a href="classmlx_1_1core_1_1_gather_m_m.html#a76c9f27c57354f6230b43944882e1bda">mlx::core::GatherMM::vjp</a></div><div class="ttdeci">std::vector&lt; array &gt; vjp(const std::vector&lt; array &gt; &amp;primals, const std::vector&lt; array &gt; &amp;cotangents, const std::vector&lt; int &gt; &amp;argnums, const std::vector&lt; array &gt; &amp;outputs) override</div><div class="ttdoc">The vector-Jacobian product.</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_gather_m_m_html_ad754c35f460a055cc383ad93a5f72da1"><div class="ttname"><a href="classmlx_1_1core_1_1_gather_m_m.html#ad754c35f460a055cc383ad93a5f72da1">mlx::core::GatherMM::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_gather_m_m_html_afd9bbc08138181b80e2fb86536ff3f2a"><div class="ttname"><a href="classmlx_1_1core_1_1_gather_m_m.html#afd9bbc08138181b80e2fb86536ff3f2a">mlx::core::GatherMM::GatherMM</a></div><div class="ttdeci">GatherMM(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:508</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_gather_q_m_m_html"><div class="ttname"><a href="classmlx_1_1core_1_1_gather_q_m_m.html">mlx::core::GatherQMM</a></div><div class="ttdef"><b>Definition</b> primitives.h:1519</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_gather_q_m_m_html_a60ed2ade7f10dd9c9314913a810f9360"><div class="ttname"><a href="classmlx_1_1core_1_1_gather_q_m_m.html#a60ed2ade7f10dd9c9314913a810f9360">mlx::core::GatherQMM::GatherQMM</a></div><div class="ttdeci">GatherQMM(Stream stream, int group_size, int bits, bool transpose)</div><div class="ttdef"><b>Definition</b> primitives.h:1521</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_gather_q_m_m_html_a86eb048afc95646b2e96ec5493e3d887"><div class="ttname"><a href="classmlx_1_1core_1_1_gather_q_m_m.html#a86eb048afc95646b2e96ec5493e3d887">mlx::core::GatherQMM::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_gather_q_m_m_html_a89aae98bfbdd6563df44ef7d70f0bf8c"><div class="ttname"><a href="classmlx_1_1core_1_1_gather_q_m_m.html#a89aae98bfbdd6563df44ef7d70f0bf8c">mlx::core::GatherQMM::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_greater_equal_html"><div class="ttname"><a href="classmlx_1_1core_1_1_greater_equal.html">mlx::core::GreaterEqual</a></div><div class="ttdef"><b>Definition</b> primitives.h:1069</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_greater_equal_html_a15469125b9bea89b64bfeac01590c075"><div class="ttname"><a href="classmlx_1_1core_1_1_greater_equal.html#a15469125b9bea89b64bfeac01590c075">mlx::core::GreaterEqual::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_greater_equal_html_a19a3c49d5a9b40e17da0e56ef6908527"><div class="ttname"><a href="classmlx_1_1core_1_1_greater_equal.html#a19a3c49d5a9b40e17da0e56ef6908527">mlx::core::GreaterEqual::GreaterEqual</a></div><div class="ttdeci">GreaterEqual(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:1071</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_greater_equal_html_ac246263b4548126c3d4ab7e392575d24"><div class="ttname"><a href="classmlx_1_1core_1_1_greater_equal.html#ac246263b4548126c3d4ab7e392575d24">mlx::core::GreaterEqual::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_greater_html"><div class="ttname"><a href="classmlx_1_1core_1_1_greater.html">mlx::core::Greater</a></div><div class="ttdef"><b>Definition</b> primitives.h:1052</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_greater_html_a1d5992a66c020cd97a70e8e3d8cd1a1b"><div class="ttname"><a href="classmlx_1_1core_1_1_greater.html#a1d5992a66c020cd97a70e8e3d8cd1a1b">mlx::core::Greater::Greater</a></div><div class="ttdeci">Greater(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:1054</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_greater_html_abe1c03f311d0e0b610f3392a6566f2ae"><div class="ttname"><a href="classmlx_1_1core_1_1_greater.html#abe1c03f311d0e0b610f3392a6566f2ae">mlx::core::Greater::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_greater_html_ae8957cccf4c924d941f57a1bb751c878"><div class="ttname"><a href="classmlx_1_1core_1_1_greater.html#ae8957cccf4c924d941f57a1bb751c878">mlx::core::Greater::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_hadamard_html"><div class="ttname"><a href="classmlx_1_1core_1_1_hadamard.html">mlx::core::Hadamard</a></div><div class="ttdef"><b>Definition</b> primitives.h:1086</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_hadamard_html_a2470feb690f5463138490763c38b5733"><div class="ttname"><a href="classmlx_1_1core_1_1_hadamard.html#a2470feb690f5463138490763c38b5733">mlx::core::Hadamard::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_hadamard_html_ab27d6a9df42b3aab41ace3073a4c880d"><div class="ttname"><a href="classmlx_1_1core_1_1_hadamard.html#ab27d6a9df42b3aab41ace3073a4c880d">mlx::core::Hadamard::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_hadamard_html_abe4a0ed820b126940beec519d4239923"><div class="ttname"><a href="classmlx_1_1core_1_1_hadamard.html#abe4a0ed820b126940beec519d4239923">mlx::core::Hadamard::Hadamard</a></div><div class="ttdeci">Hadamard(Stream stream, float scale)</div><div class="ttdef"><b>Definition</b> primitives.h:1088</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_inverse_html"><div class="ttname"><a href="classmlx_1_1core_1_1_inverse.html">mlx::core::Inverse</a></div><div class="ttdef"><b>Definition</b> primitives.h:2136</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_inverse_html_a086fbbc947ad232e01686ad063a78ed2"><div class="ttname"><a href="classmlx_1_1core_1_1_inverse.html#a086fbbc947ad232e01686ad063a78ed2">mlx::core::Inverse::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;output) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_inverse_html_a71467681e523abb725724490bfeb76ad"><div class="ttname"><a href="classmlx_1_1core_1_1_inverse.html#a71467681e523abb725724490bfeb76ad">mlx::core::Inverse::Inverse</a></div><div class="ttdeci">Inverse(Stream stream, bool tri, bool upper)</div><div class="ttdef"><b>Definition</b> primitives.h:2138</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_inverse_html_aeb1d8dc9bc4052a616023f65b3c7bb81"><div class="ttname"><a href="classmlx_1_1core_1_1_inverse.html#aeb1d8dc9bc4052a616023f65b3c7bb81">mlx::core::Inverse::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;output) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_less_equal_html"><div class="ttname"><a href="classmlx_1_1core_1_1_less_equal.html">mlx::core::LessEqual</a></div><div class="ttdef"><b>Definition</b> primitives.h:1124</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_less_equal_html_a52492a43224d47e7851beec646c27bbc"><div class="ttname"><a href="classmlx_1_1core_1_1_less_equal.html#a52492a43224d47e7851beec646c27bbc">mlx::core::LessEqual::LessEqual</a></div><div class="ttdeci">LessEqual(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:1126</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_less_equal_html_a55d1352b0e97841a92503bc57c19ed16"><div class="ttname"><a href="classmlx_1_1core_1_1_less_equal.html#a55d1352b0e97841a92503bc57c19ed16">mlx::core::LessEqual::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_less_equal_html_acf035a82b11e6f63742143ea540fedac"><div class="ttname"><a href="classmlx_1_1core_1_1_less_equal.html#acf035a82b11e6f63742143ea540fedac">mlx::core::LessEqual::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_less_html"><div class="ttname"><a href="classmlx_1_1core_1_1_less.html">mlx::core::Less</a></div><div class="ttdef"><b>Definition</b> primitives.h:1107</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_less_html_a32624124ffece066f496b3299056bcef"><div class="ttname"><a href="classmlx_1_1core_1_1_less.html#a32624124ffece066f496b3299056bcef">mlx::core::Less::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_less_html_a353335ce06ddbe8498d86d129c835917"><div class="ttname"><a href="classmlx_1_1core_1_1_less.html#a353335ce06ddbe8498d86d129c835917">mlx::core::Less::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_less_html_aa55c5cfbab0ac30e1b72c080fe9525d7"><div class="ttname"><a href="classmlx_1_1core_1_1_less.html#aa55c5cfbab0ac30e1b72c080fe9525d7">mlx::core::Less::Less</a></div><div class="ttdeci">Less(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:1109</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_load_html"><div class="ttname"><a href="classmlx_1_1core_1_1_load.html">mlx::core::Load</a></div><div class="ttdef"><b>Definition</b> primitives.h:1141</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_load_html_a06933e887ea94a4d01d81195c5e07a3d"><div class="ttname"><a href="classmlx_1_1core_1_1_load.html#a06933e887ea94a4d01d81195c5e07a3d">mlx::core::Load::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_load_html_a3aa8a537cd90bab048df47dca1ed526a"><div class="ttname"><a href="classmlx_1_1core_1_1_load.html#a3aa8a537cd90bab048df47dca1ed526a">mlx::core::Load::Load</a></div><div class="ttdeci">Load(Stream stream, std::shared_ptr&lt; io::Reader &gt; reader, size_t offset, bool swap_endianness=false)</div><div class="ttdef"><b>Definition</b> primitives.h:1143</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_load_html_ada026ac30566f3109d8182e35d307c0a"><div class="ttname"><a href="classmlx_1_1core_1_1_load.html#ada026ac30566f3109d8182e35d307c0a">mlx::core::Load::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_log1p_html"><div class="ttname"><a href="classmlx_1_1core_1_1_log1p.html">mlx::core::Log1p</a></div><div class="ttdef"><b>Definition</b> primitives.h:1207</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_log1p_html_a1b97decae7338d46874e736c95fa7431"><div class="ttname"><a href="classmlx_1_1core_1_1_log1p.html#a1b97decae7338d46874e736c95fa7431">mlx::core::Log1p::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_log1p_html_a8192e5438de99c4cda056987935cba23"><div class="ttname"><a href="classmlx_1_1core_1_1_log1p.html#a8192e5438de99c4cda056987935cba23">mlx::core::Log1p::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_log1p_html_ab0d6eb90c6f98775fce56f3446ff127a"><div class="ttname"><a href="classmlx_1_1core_1_1_log1p.html#ab0d6eb90c6f98775fce56f3446ff127a">mlx::core::Log1p::Log1p</a></div><div class="ttdeci">Log1p(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:1209</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_log_add_exp_html"><div class="ttname"><a href="classmlx_1_1core_1_1_log_add_exp.html">mlx::core::LogAddExp</a></div><div class="ttdef"><b>Definition</b> primitives.h:1274</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_log_add_exp_html_abef17fb590b1a8d356f2a580e45d41f0"><div class="ttname"><a href="classmlx_1_1core_1_1_log_add_exp.html#abef17fb590b1a8d356f2a580e45d41f0">mlx::core::LogAddExp::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_log_add_exp_html_acace355b62ec00df649f9f99e8f2eb7a"><div class="ttname"><a href="classmlx_1_1core_1_1_log_add_exp.html#acace355b62ec00df649f9f99e8f2eb7a">mlx::core::LogAddExp::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_log_add_exp_html_ad8938ca90ccf1a3259973fc68902975a"><div class="ttname"><a href="classmlx_1_1core_1_1_log_add_exp.html#ad8938ca90ccf1a3259973fc68902975a">mlx::core::LogAddExp::LogAddExp</a></div><div class="ttdeci">LogAddExp(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:1276</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_log_html"><div class="ttname"><a href="classmlx_1_1core_1_1_log.html">mlx::core::Log</a></div><div class="ttdef"><b>Definition</b> primitives.h:1173</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_log_html_a044a23e8b1422984628e1cd5ab506421"><div class="ttname"><a href="classmlx_1_1core_1_1_log.html#a044a23e8b1422984628e1cd5ab506421">mlx::core::Log::Base</a></div><div class="ttdeci">Base</div><div class="ttdef"><b>Definition</b> primitives.h:1175</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_log_html_a663e54790c60b56eb0ff09f4f6635fb9"><div class="ttname"><a href="classmlx_1_1core_1_1_log.html#a663e54790c60b56eb0ff09f4f6635fb9">mlx::core::Log::Log</a></div><div class="ttdeci">Log(Stream stream, Base base)</div><div class="ttdef"><b>Definition</b> primitives.h:1177</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_log_html_aaaa49e9455f3a197bc319646b5ca6390"><div class="ttname"><a href="classmlx_1_1core_1_1_log.html#aaaa49e9455f3a197bc319646b5ca6390">mlx::core::Log::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_log_html_aadc7bb4cb24f3ecbbb9ed54a699ab74f"><div class="ttname"><a href="classmlx_1_1core_1_1_log.html#aadc7bb4cb24f3ecbbb9ed54a699ab74f">mlx::core::Log::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_logical_and_html"><div class="ttname"><a href="classmlx_1_1core_1_1_logical_and.html">mlx::core::LogicalAnd</a></div><div class="ttdef"><b>Definition</b> primitives.h:1240</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_logical_and_html_a132b2eedaa3978de5a5350da3c2ca40f"><div class="ttname"><a href="classmlx_1_1core_1_1_logical_and.html#a132b2eedaa3978de5a5350da3c2ca40f">mlx::core::LogicalAnd::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_logical_and_html_aaf2cab8ffcf6606b8babfef60fc06fb3"><div class="ttname"><a href="classmlx_1_1core_1_1_logical_and.html#aaf2cab8ffcf6606b8babfef60fc06fb3">mlx::core::LogicalAnd::LogicalAnd</a></div><div class="ttdeci">LogicalAnd(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:1242</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_logical_and_html_adbe1c1785af1a8b827289d22b0d170b3"><div class="ttname"><a href="classmlx_1_1core_1_1_logical_and.html#adbe1c1785af1a8b827289d22b0d170b3">mlx::core::LogicalAnd::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_logical_not_html"><div class="ttname"><a href="classmlx_1_1core_1_1_logical_not.html">mlx::core::LogicalNot</a></div><div class="ttdef"><b>Definition</b> primitives.h:1223</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_logical_not_html_a1d0d2bc93f935eca6c85ef7bf67f2d6a"><div class="ttname"><a href="classmlx_1_1core_1_1_logical_not.html#a1d0d2bc93f935eca6c85ef7bf67f2d6a">mlx::core::LogicalNot::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_logical_not_html_a6f5850b4c78b83d5e2c0d37437fc79b7"><div class="ttname"><a href="classmlx_1_1core_1_1_logical_not.html#a6f5850b4c78b83d5e2c0d37437fc79b7">mlx::core::LogicalNot::LogicalNot</a></div><div class="ttdeci">LogicalNot(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:1225</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_logical_not_html_acf3f7b3b20ca69533536e0e0a05725b3"><div class="ttname"><a href="classmlx_1_1core_1_1_logical_not.html#acf3f7b3b20ca69533536e0e0a05725b3">mlx::core::LogicalNot::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_logical_or_html"><div class="ttname"><a href="classmlx_1_1core_1_1_logical_or.html">mlx::core::LogicalOr</a></div><div class="ttdef"><b>Definition</b> primitives.h:1257</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_logical_or_html_a13cd4cbf26589287e85aeaaca42d7f62"><div class="ttname"><a href="classmlx_1_1core_1_1_logical_or.html#a13cd4cbf26589287e85aeaaca42d7f62">mlx::core::LogicalOr::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_logical_or_html_a269c22daca1c15ad010bb860bce93918"><div class="ttname"><a href="classmlx_1_1core_1_1_logical_or.html#a269c22daca1c15ad010bb860bce93918">mlx::core::LogicalOr::LogicalOr</a></div><div class="ttdeci">LogicalOr(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:1259</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_logical_or_html_a3be1da328f0f8620de2e4fc1d22a077a"><div class="ttname"><a href="classmlx_1_1core_1_1_logical_or.html#a3be1da328f0f8620de2e4fc1d22a077a">mlx::core::LogicalOr::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_matmul_html"><div class="ttname"><a href="classmlx_1_1core_1_1_matmul.html">mlx::core::Matmul</a></div><div class="ttdef"><b>Definition</b> primitives.h:1291</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_matmul_html_a357a7f57a2a220a91977f810a69413fc"><div class="ttname"><a href="classmlx_1_1core_1_1_matmul.html#a357a7f57a2a220a91977f810a69413fc">mlx::core::Matmul::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_matmul_html_a524136cca481598ea20894d85ca66bb0"><div class="ttname"><a href="classmlx_1_1core_1_1_matmul.html#a524136cca481598ea20894d85ca66bb0">mlx::core::Matmul::vjp</a></div><div class="ttdeci">std::vector&lt; array &gt; vjp(const std::vector&lt; array &gt; &amp;primals, const std::vector&lt; array &gt; &amp;cotangents, const std::vector&lt; int &gt; &amp;argnums, const std::vector&lt; array &gt; &amp;outputs) override</div><div class="ttdoc">The vector-Jacobian product.</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_matmul_html_a8707a4e9b75c769e8f1dbca15c6a1ae7"><div class="ttname"><a href="classmlx_1_1core_1_1_matmul.html#a8707a4e9b75c769e8f1dbca15c6a1ae7">mlx::core::Matmul::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_matmul_html_adef92f30ab35e540ccb316ea6b94e6f7"><div class="ttname"><a href="classmlx_1_1core_1_1_matmul.html#adef92f30ab35e540ccb316ea6b94e6f7">mlx::core::Matmul::Matmul</a></div><div class="ttdeci">Matmul(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:1293</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_maximum_html"><div class="ttname"><a href="classmlx_1_1core_1_1_maximum.html">mlx::core::Maximum</a></div><div class="ttdef"><b>Definition</b> primitives.h:1309</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_maximum_html_a28389307e385efe1b2955b86b115e816"><div class="ttname"><a href="classmlx_1_1core_1_1_maximum.html#a28389307e385efe1b2955b86b115e816">mlx::core::Maximum::Maximum</a></div><div class="ttdeci">Maximum(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:1311</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_maximum_html_a62b38fbe5f96db58c2b60165ac4eadcf"><div class="ttname"><a href="classmlx_1_1core_1_1_maximum.html#a62b38fbe5f96db58c2b60165ac4eadcf">mlx::core::Maximum::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_maximum_html_ade0f721b10a6b3a12bdadd34c48f72a7"><div class="ttname"><a href="classmlx_1_1core_1_1_maximum.html#ade0f721b10a6b3a12bdadd34c48f72a7">mlx::core::Maximum::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_minimum_html"><div class="ttname"><a href="classmlx_1_1core_1_1_minimum.html">mlx::core::Minimum</a></div><div class="ttdef"><b>Definition</b> primitives.h:1326</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_minimum_html_a6b93f493ee87089943a8085fe59dfc6e"><div class="ttname"><a href="classmlx_1_1core_1_1_minimum.html#a6b93f493ee87089943a8085fe59dfc6e">mlx::core::Minimum::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_minimum_html_aadc68afa0afbe2103f19d161f5e0a2ba"><div class="ttname"><a href="classmlx_1_1core_1_1_minimum.html#aadc68afa0afbe2103f19d161f5e0a2ba">mlx::core::Minimum::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_minimum_html_ab0f2ce17108df44b82cff68886b0f6f5"><div class="ttname"><a href="classmlx_1_1core_1_1_minimum.html#ab0f2ce17108df44b82cff68886b0f6f5">mlx::core::Minimum::Minimum</a></div><div class="ttdeci">Minimum(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:1328</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_multiply_html"><div class="ttname"><a href="classmlx_1_1core_1_1_multiply.html">mlx::core::Multiply</a></div><div class="ttdef"><b>Definition</b> primitives.h:1343</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_multiply_html_a624fce06c047cdc4dfdbdcaaddb25f34"><div class="ttname"><a href="classmlx_1_1core_1_1_multiply.html#a624fce06c047cdc4dfdbdcaaddb25f34">mlx::core::Multiply::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_multiply_html_a634fcb4e981d8d3f4d94252caf25bee0"><div class="ttname"><a href="classmlx_1_1core_1_1_multiply.html#a634fcb4e981d8d3f4d94252caf25bee0">mlx::core::Multiply::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_multiply_html_aca5c50f900321f3eb4d6fbcbc225c00c"><div class="ttname"><a href="classmlx_1_1core_1_1_multiply.html#aca5c50f900321f3eb4d6fbcbc225c00c">mlx::core::Multiply::Multiply</a></div><div class="ttdeci">Multiply(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:1345</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_negative_html"><div class="ttname"><a href="classmlx_1_1core_1_1_negative.html">mlx::core::Negative</a></div><div class="ttdef"><b>Definition</b> primitives.h:1360</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_negative_html_a97f1b316eace0c6d9e576d766940c75b"><div class="ttname"><a href="classmlx_1_1core_1_1_negative.html#a97f1b316eace0c6d9e576d766940c75b">mlx::core::Negative::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_negative_html_aa3b73395d9fa5b7215dca488bc0d3c70"><div class="ttname"><a href="classmlx_1_1core_1_1_negative.html#aa3b73395d9fa5b7215dca488bc0d3c70">mlx::core::Negative::Negative</a></div><div class="ttdeci">Negative(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:1362</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_negative_html_af43553dc418c8ebe75fa9cdcba103c3b"><div class="ttname"><a href="classmlx_1_1core_1_1_negative.html#af43553dc418c8ebe75fa9cdcba103c3b">mlx::core::Negative::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_not_equal_html"><div class="ttname"><a href="classmlx_1_1core_1_1_not_equal.html">mlx::core::NotEqual</a></div><div class="ttdef"><b>Definition</b> primitives.h:1377</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_not_equal_html_a61179747e34e203150e9c660dfddb5f2"><div class="ttname"><a href="classmlx_1_1core_1_1_not_equal.html#a61179747e34e203150e9c660dfddb5f2">mlx::core::NotEqual::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_not_equal_html_a8f95f8b5873850b875b1641df8196047"><div class="ttname"><a href="classmlx_1_1core_1_1_not_equal.html#a8f95f8b5873850b875b1641df8196047">mlx::core::NotEqual::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_not_equal_html_ac568397bd17b5d9f25ad1a0ebadedbb9"><div class="ttname"><a href="classmlx_1_1core_1_1_not_equal.html#ac568397bd17b5d9f25ad1a0ebadedbb9">mlx::core::NotEqual::NotEqual</a></div><div class="ttdeci">NotEqual(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:1379</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_number_of_elements_html"><div class="ttname"><a href="classmlx_1_1core_1_1_number_of_elements.html">mlx::core::NumberOfElements</a></div><div class="ttdef"><b>Definition</b> primitives.h:1394</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_number_of_elements_html_a2c98c42915fb2bfe12f5c99ea553eff5"><div class="ttname"><a href="classmlx_1_1core_1_1_number_of_elements.html#a2c98c42915fb2bfe12f5c99ea553eff5">mlx::core::NumberOfElements::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_number_of_elements_html_ac64d7c40ae29d687f8b7d2fa33e13b06"><div class="ttname"><a href="classmlx_1_1core_1_1_number_of_elements.html#ac64d7c40ae29d687f8b7d2fa33e13b06">mlx::core::NumberOfElements::NumberOfElements</a></div><div class="ttdeci">NumberOfElements(Stream stream, std::vector&lt; int &gt; axes, bool inverted, Dtype dtype)</div><div class="ttdef"><b>Definition</b> primitives.h:1396</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_number_of_elements_html_acc328321cf5300874ee884367cbede3f"><div class="ttname"><a href="classmlx_1_1core_1_1_number_of_elements.html#acc328321cf5300874ee884367cbede3f">mlx::core::NumberOfElements::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_pad_html"><div class="ttname"><a href="classmlx_1_1core_1_1_pad.html">mlx::core::Pad</a></div><div class="ttdef"><b>Definition</b> primitives.h:1425</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_pad_html_aaf82dd163cd536fbf97304f8b29080cb"><div class="ttname"><a href="classmlx_1_1core_1_1_pad.html#aaf82dd163cd536fbf97304f8b29080cb">mlx::core::Pad::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_pad_html_ad03da2c40b1e1f2fdf2649d00fa4ab43"><div class="ttname"><a href="classmlx_1_1core_1_1_pad.html#ad03da2c40b1e1f2fdf2649d00fa4ab43">mlx::core::Pad::Pad</a></div><div class="ttdeci">Pad(Stream stream, const std::vector&lt; int &gt; &amp;axes, const std::vector&lt; int &gt; &amp;low_pad_size, const std::vector&lt; int &gt; &amp;high_pad_size)</div><div class="ttdef"><b>Definition</b> primitives.h:1427</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_pad_html_aefd4d3a5bd8b6b35b266c9e558ada153"><div class="ttname"><a href="classmlx_1_1core_1_1_pad.html#aefd4d3a5bd8b6b35b266c9e558ada153">mlx::core::Pad::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_partition_html"><div class="ttname"><a href="classmlx_1_1core_1_1_partition.html">mlx::core::Partition</a></div><div class="ttdef"><b>Definition</b> primitives.h:1453</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_partition_html_a784596ab567f9f3cb4fe1a69466523d8"><div class="ttname"><a href="classmlx_1_1core_1_1_partition.html#a784596ab567f9f3cb4fe1a69466523d8">mlx::core::Partition::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_partition_html_a7b82ca3895b6654308fac566b277ac0d"><div class="ttname"><a href="classmlx_1_1core_1_1_partition.html#a7b82ca3895b6654308fac566b277ac0d">mlx::core::Partition::Partition</a></div><div class="ttdeci">Partition(Stream stream, int kth, int axis)</div><div class="ttdef"><b>Definition</b> primitives.h:1455</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_partition_html_a8eca1be21ae9ccfda46e6f3e85f506ef"><div class="ttname"><a href="classmlx_1_1core_1_1_partition.html#a8eca1be21ae9ccfda46e6f3e85f506ef">mlx::core::Partition::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_power_html"><div class="ttname"><a href="classmlx_1_1core_1_1_power.html">mlx::core::Power</a></div><div class="ttdef"><b>Definition</b> primitives.h:1474</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_power_html_a6783da16fb6ff393aaa57737f1973206"><div class="ttname"><a href="classmlx_1_1core_1_1_power.html#a6783da16fb6ff393aaa57737f1973206">mlx::core::Power::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_power_html_a7bc6c64179b7a2aef56fe1dafb6459b2"><div class="ttname"><a href="classmlx_1_1core_1_1_power.html#a7bc6c64179b7a2aef56fe1dafb6459b2">mlx::core::Power::Power</a></div><div class="ttdeci">Power(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:1476</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_power_html_a80577d4c0853c24027777c90a1ec7e11"><div class="ttname"><a href="classmlx_1_1core_1_1_power.html#a80577d4c0853c24027777c90a1ec7e11">mlx::core::Power::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_primitive_html"><div class="ttname"><a href="classmlx_1_1core_1_1_primitive.html">mlx::core::Primitive</a></div><div class="ttdef"><b>Definition</b> primitives.h:48</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_primitive_html_a1596dc50b910538eae14878e98f07575"><div class="ttname"><a href="classmlx_1_1core_1_1_primitive.html#a1596dc50b910538eae14878e98f07575">mlx::core::Primitive::eval_cpu</a></div><div class="ttdeci">virtual void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, std::vector&lt; array &gt; &amp;outputs)=0</div><div class="ttdoc">A primitive must know how to evaluate itself on the CPU/GPU for the given inputs and populate the out...</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_primitive_html_a1dcb6807326eeab62474c6a0e3836d42"><div class="ttname"><a href="classmlx_1_1core_1_1_primitive.html#a1dcb6807326eeab62474c6a0e3836d42">mlx::core::Primitive::vjp</a></div><div class="ttdeci">virtual std::vector&lt; array &gt; vjp(const std::vector&lt; array &gt; &amp;primals, const std::vector&lt; array &gt; &amp;cotangents, const std::vector&lt; int &gt; &amp;argnums, const std::vector&lt; array &gt; &amp;outputs)</div><div class="ttdoc">The vector-Jacobian product.</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_primitive_html_a29f70eb2d3b7e6c5fe52779c03f03777"><div class="ttname"><a href="classmlx_1_1core_1_1_primitive.html#a29f70eb2d3b7e6c5fe52779c03f03777">mlx::core::Primitive::~Primitive</a></div><div class="ttdeci">virtual ~Primitive()=default</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_primitive_html_a3349f745fae50ca7627f79a731a19e32"><div class="ttname"><a href="classmlx_1_1core_1_1_primitive.html#a3349f745fae50ca7627f79a731a19e32">mlx::core::Primitive::Primitive</a></div><div class="ttdeci">Primitive(const Primitive &amp;other)=delete</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_primitive_html_a342da891b9882bdee9a0e0c1ac826eda"><div class="ttname"><a href="classmlx_1_1core_1_1_primitive.html#a342da891b9882bdee9a0e0c1ac826eda">mlx::core::Primitive::Primitive</a></div><div class="ttdeci">Primitive(Primitive &amp;&amp;other)=delete</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_primitive_html_a46e6257397a662528f9f831842ac456a"><div class="ttname"><a href="classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a">mlx::core::Primitive::stream</a></div><div class="ttdeci">const Stream &amp; stream()</div><div class="ttdoc">The stream the primitive will run on.</div><div class="ttdef"><b>Definition</b> primitives.h:58</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_primitive_html_a50bbddd43e1ba0cf5f127cd7aa756a9e"><div class="ttname"><a href="classmlx_1_1core_1_1_primitive.html#a50bbddd43e1ba0cf5f127cd7aa756a9e">mlx::core::Primitive::operator=</a></div><div class="ttdeci">Primitive &amp; operator=(Primitive &amp;&amp;other)=delete</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_primitive_html_a6140a502af4c2bbbc776ab26e9afebcd"><div class="ttname"><a href="classmlx_1_1core_1_1_primitive.html#a6140a502af4c2bbbc776ab26e9afebcd">mlx::core::Primitive::is_equivalent</a></div><div class="ttdeci">virtual bool is_equivalent(const Primitive &amp;other) const</div><div class="ttdoc">Equivalence check defaults to false unless overridden by the primitive.</div><div class="ttdef"><b>Definition</b> primitives.h:107</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_primitive_html_a6b1be7ea92f3a7bb19875c70259dad6b"><div class="ttname"><a href="classmlx_1_1core_1_1_primitive.html#a6b1be7ea92f3a7bb19875c70259dad6b">mlx::core::Primitive::operator=</a></div><div class="ttdeci">Primitive &amp; operator=(const Primitive &amp;other)=delete</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_primitive_html_a8849dc20991398f6f9a24d6785673853"><div class="ttname"><a href="classmlx_1_1core_1_1_primitive.html#a8849dc20991398f6f9a24d6785673853">mlx::core::Primitive::output_shapes</a></div><div class="ttdeci">virtual std::vector&lt; std::vector&lt; int &gt; &gt; output_shapes(const std::vector&lt; array &gt; &amp;inputs)</div><div class="ttdoc">Get the output shapes of the primitive.</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_primitive_html_a8ae61e3289c4134232a69295268f8261"><div class="ttname"><a href="classmlx_1_1core_1_1_primitive.html#a8ae61e3289c4134232a69295268f8261">mlx::core::Primitive::device</a></div><div class="ttdeci">const Device &amp; device()</div><div class="ttdoc">The device the primitive will run on.</div><div class="ttdef"><b>Definition</b> primitives.h:53</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_primitive_html_a9fecf38f53da08ba1947543c2b3158c2"><div class="ttname"><a href="classmlx_1_1core_1_1_primitive.html#a9fecf38f53da08ba1947543c2b3158c2">mlx::core::Primitive::jvp</a></div><div class="ttdeci">virtual std::vector&lt; array &gt; jvp(const std::vector&lt; array &gt; &amp;primals, const std::vector&lt; array &gt; &amp;tangents, const std::vector&lt; int &gt; &amp;argnums)</div><div class="ttdoc">The Jacobian-vector product.</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_primitive_html_ac632b9619dd7a6a0f177bd36202e8103"><div class="ttname"><a href="classmlx_1_1core_1_1_primitive.html#ac632b9619dd7a6a0f177bd36202e8103">mlx::core::Primitive::vmap</a></div><div class="ttdeci">virtual std::pair&lt; std::vector&lt; array &gt;, std::vector&lt; int &gt; &gt; vmap(const std::vector&lt; array &gt; &amp;inputs, const std::vector&lt; int &gt; &amp;axes)</div><div class="ttdoc">The primitive must know how to vectorize itself across the given axes.</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_primitive_html_ad217376dcf5eff691d731566faec2ba2"><div class="ttname"><a href="classmlx_1_1core_1_1_primitive.html#ad217376dcf5eff691d731566faec2ba2">mlx::core::Primitive::eval_gpu</a></div><div class="ttdeci">virtual void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, std::vector&lt; array &gt; &amp;outputs)=0</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_primitive_html_ae1aff91354ce036596088a3e19474ecb"><div class="ttname"><a href="classmlx_1_1core_1_1_primitive.html#ae1aff91354ce036596088a3e19474ecb">mlx::core::Primitive::print</a></div><div class="ttdeci">virtual void print(std::ostream &amp;os)=0</div><div class="ttdoc">Print the primitive.</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_primitive_html_afc69f22ee1f6e8a9ecc2c3a8f43b8fdb"><div class="ttname"><a href="classmlx_1_1core_1_1_primitive.html#afc69f22ee1f6e8a9ecc2c3a8f43b8fdb">mlx::core::Primitive::Primitive</a></div><div class="ttdeci">Primitive(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:50</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_q_r_f_html"><div class="ttname"><a href="classmlx_1_1core_1_1_q_r_f.html">mlx::core::QRF</a></div><div class="ttdef"><b>Definition</b> primitives.h:2103</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_q_r_f_html_a44ed2924dc574c4aeb79b1188b5c3983"><div class="ttname"><a href="classmlx_1_1core_1_1_q_r_f.html#a44ed2924dc574c4aeb79b1188b5c3983">mlx::core::QRF::QRF</a></div><div class="ttdeci">QRF(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:2105</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_q_r_f_html_a48493887395d65a27f04de1804d277d2"><div class="ttname"><a href="classmlx_1_1core_1_1_q_r_f.html#a48493887395d65a27f04de1804d277d2">mlx::core::QRF::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, std::vector&lt; array &gt; &amp;outputs) override</div><div class="ttdoc">A primitive must know how to evaluate itself on the CPU/GPU for the given inputs and populate the out...</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_q_r_f_html_ae5fa3482192f4713605cd07e7fc1c6c9"><div class="ttname"><a href="classmlx_1_1core_1_1_q_r_f.html#ae5fa3482192f4713605cd07e7fc1c6c9">mlx::core::QRF::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, std::vector&lt; array &gt; &amp;outputs) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_quantized_matmul_html"><div class="ttname"><a href="classmlx_1_1core_1_1_quantized_matmul.html">mlx::core::QuantizedMatmul</a></div><div class="ttdef"><b>Definition</b> primitives.h:1491</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_quantized_matmul_html_a2812ad007d695ed1aaf9cf706fb9c4b3"><div class="ttname"><a href="classmlx_1_1core_1_1_quantized_matmul.html#a2812ad007d695ed1aaf9cf706fb9c4b3">mlx::core::QuantizedMatmul::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_quantized_matmul_html_a5bd164d038d9dc21919f7e0bfdeaa25c"><div class="ttname"><a href="classmlx_1_1core_1_1_quantized_matmul.html#a5bd164d038d9dc21919f7e0bfdeaa25c">mlx::core::QuantizedMatmul::QuantizedMatmul</a></div><div class="ttdeci">QuantizedMatmul(Stream stream, int group_size, int bits, bool transpose)</div><div class="ttdef"><b>Definition</b> primitives.h:1493</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_quantized_matmul_html_ab3dfa73b74d8f4f2e9ab4f0eb016b0e3"><div class="ttname"><a href="classmlx_1_1core_1_1_quantized_matmul.html#ab3dfa73b74d8f4f2e9ab4f0eb016b0e3">mlx::core::QuantizedMatmul::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_random_bits_html"><div class="ttname"><a href="classmlx_1_1core_1_1_random_bits.html">mlx::core::RandomBits</a></div><div class="ttdef"><b>Definition</b> primitives.h:1543</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_random_bits_html_a5752d051cd16cf5f8d4754c0a656f0d2"><div class="ttname"><a href="classmlx_1_1core_1_1_random_bits.html#a5752d051cd16cf5f8d4754c0a656f0d2">mlx::core::RandomBits::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_random_bits_html_a578756866665358577418e4cdd94aa3a"><div class="ttname"><a href="classmlx_1_1core_1_1_random_bits.html#a578756866665358577418e4cdd94aa3a">mlx::core::RandomBits::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_random_bits_html_a7dd5ed03f2a4ab45d1d5e8e2b587de6b"><div class="ttname"><a href="classmlx_1_1core_1_1_random_bits.html#a7dd5ed03f2a4ab45d1d5e8e2b587de6b">mlx::core::RandomBits::RandomBits</a></div><div class="ttdeci">RandomBits(Stream stream, const std::vector&lt; int &gt; &amp;shape, int width)</div><div class="ttdef"><b>Definition</b> primitives.h:1545</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_reduce_html"><div class="ttname"><a href="classmlx_1_1core_1_1_reduce.html">mlx::core::Reduce</a></div><div class="ttdef"><b>Definition</b> primitives.h:1589</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_reduce_html_a055368c1d036fb953a23ef230e33dcbf"><div class="ttname"><a href="classmlx_1_1core_1_1_reduce.html#a055368c1d036fb953a23ef230e33dcbf">mlx::core::Reduce::Reduce</a></div><div class="ttdeci">Reduce(Stream stream, ReduceType reduce_type, const std::vector&lt; int &gt; &amp;axes)</div><div class="ttdef"><b>Definition</b> primitives.h:1593</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_reduce_html_a0848518b16ae6d4043d6be247bdf31c9"><div class="ttname"><a href="classmlx_1_1core_1_1_reduce.html#a0848518b16ae6d4043d6be247bdf31c9">mlx::core::Reduce::ReduceType</a></div><div class="ttdeci">ReduceType</div><div class="ttdef"><b>Definition</b> primitives.h:1591</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_reduce_html_a0848518b16ae6d4043d6be247bdf31c9a5cc3412a1f243dcb11661bca42daea93"><div class="ttname"><a href="classmlx_1_1core_1_1_reduce.html#a0848518b16ae6d4043d6be247bdf31c9a5cc3412a1f243dcb11661bca42daea93">mlx::core::Reduce::And</a></div><div class="ttdeci">@ And</div><div class="ttdef"><b>Definition</b> primitives.h:1591</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_reduce_html_abe8f3327d617d0dd7438f066497ae08e"><div class="ttname"><a href="classmlx_1_1core_1_1_reduce.html#abe8f3327d617d0dd7438f066497ae08e">mlx::core::Reduce::is_equivalent</a></div><div class="ttdeci">bool is_equivalent(const Primitive &amp;other) const override</div><div class="ttdoc">Equivalence check defaults to false unless overridden by the primitive.</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_reduce_html_ae9caaf42edadfe73ea208d98f526890f"><div class="ttname"><a href="classmlx_1_1core_1_1_reduce.html#ae9caaf42edadfe73ea208d98f526890f">mlx::core::Reduce::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_reduce_html_aeb8a58b560c0a09ae3a695df7829acfa"><div class="ttname"><a href="classmlx_1_1core_1_1_reduce.html#aeb8a58b560c0a09ae3a695df7829acfa">mlx::core::Reduce::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_remainder_html"><div class="ttname"><a href="classmlx_1_1core_1_1_remainder.html">mlx::core::Remainder</a></div><div class="ttdef"><b>Definition</b> primitives.h:861</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_remainder_html_a4f3eada4a21898af4a77d1d27ce14641"><div class="ttname"><a href="classmlx_1_1core_1_1_remainder.html#a4f3eada4a21898af4a77d1d27ce14641">mlx::core::Remainder::Remainder</a></div><div class="ttdeci">Remainder(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:863</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_remainder_html_a7919ea9b84e42522d51bf0d5a396e161"><div class="ttname"><a href="classmlx_1_1core_1_1_remainder.html#a7919ea9b84e42522d51bf0d5a396e161">mlx::core::Remainder::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_remainder_html_ac6c6c86a0bf02e6e529eb87f6e617ccc"><div class="ttname"><a href="classmlx_1_1core_1_1_remainder.html#ac6c6c86a0bf02e6e529eb87f6e617ccc">mlx::core::Remainder::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_reshape_html"><div class="ttname"><a href="classmlx_1_1core_1_1_reshape.html">mlx::core::Reshape</a></div><div class="ttdef"><b>Definition</b> primitives.h:1562</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_reshape_html_a658de2c5f710991b48e14b2bd19b229f"><div class="ttname"><a href="classmlx_1_1core_1_1_reshape.html#a658de2c5f710991b48e14b2bd19b229f">mlx::core::Reshape::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_reshape_html_aa1e85f28471875750c47351520b56059"><div class="ttname"><a href="classmlx_1_1core_1_1_reshape.html#aa1e85f28471875750c47351520b56059">mlx::core::Reshape::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_reshape_html_aa7c5a6e18d0615ad36102de01929eb26"><div class="ttname"><a href="classmlx_1_1core_1_1_reshape.html#aa7c5a6e18d0615ad36102de01929eb26">mlx::core::Reshape::Reshape</a></div><div class="ttdeci">Reshape(Stream stream, const std::vector&lt; int &gt; &amp;shape)</div><div class="ttdef"><b>Definition</b> primitives.h:1564</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_round_html"><div class="ttname"><a href="classmlx_1_1core_1_1_round.html">mlx::core::Round</a></div><div class="ttdef"><b>Definition</b> primitives.h:1644</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_round_html_a1327a359b2aed91f576145a0e70d1dde"><div class="ttname"><a href="classmlx_1_1core_1_1_round.html#a1327a359b2aed91f576145a0e70d1dde">mlx::core::Round::Round</a></div><div class="ttdeci">Round(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:1646</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_round_html_ad066b0944b437f64ab546025efa00007"><div class="ttname"><a href="classmlx_1_1core_1_1_round.html#ad066b0944b437f64ab546025efa00007">mlx::core::Round::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_round_html_af7fe5ff8f3db166c203b4be4b07f13ec"><div class="ttname"><a href="classmlx_1_1core_1_1_round.html#af7fe5ff8f3db166c203b4be4b07f13ec">mlx::core::Round::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_s_v_d_html"><div class="ttname"><a href="classmlx_1_1core_1_1_s_v_d.html">mlx::core::SVD</a></div><div class="ttdef"><b>Definition</b> primitives.h:2119</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_s_v_d_html_a637f5c39fa8b10722c04a066f6c1ada6"><div class="ttname"><a href="classmlx_1_1core_1_1_s_v_d.html#a637f5c39fa8b10722c04a066f6c1ada6">mlx::core::SVD::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, std::vector&lt; array &gt; &amp;outputs) override</div><div class="ttdoc">A primitive must know how to evaluate itself on the CPU/GPU for the given inputs and populate the out...</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_s_v_d_html_a7067b2207f826a25549d571856b94e83"><div class="ttname"><a href="classmlx_1_1core_1_1_s_v_d.html#a7067b2207f826a25549d571856b94e83">mlx::core::SVD::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, std::vector&lt; array &gt; &amp;outputs) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_s_v_d_html_ae89ff583e34fa894cccb8e7a475ee6d1"><div class="ttname"><a href="classmlx_1_1core_1_1_s_v_d.html#ae89ff583e34fa894cccb8e7a475ee6d1">mlx::core::SVD::SVD</a></div><div class="ttdeci">SVD(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:2121</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_scan_html"><div class="ttname"><a href="classmlx_1_1core_1_1_scan.html">mlx::core::Scan</a></div><div class="ttdef"><b>Definition</b> primitives.h:1661</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_scan_html_a15676d9fd066e935782a923fba3e940b"><div class="ttname"><a href="classmlx_1_1core_1_1_scan.html#a15676d9fd066e935782a923fba3e940b">mlx::core::Scan::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_scan_html_a47bf2ec54ead4b8f00f9f188518630f1"><div class="ttname"><a href="classmlx_1_1core_1_1_scan.html#a47bf2ec54ead4b8f00f9f188518630f1">mlx::core::Scan::ReduceType</a></div><div class="ttdeci">ReduceType</div><div class="ttdef"><b>Definition</b> primitives.h:1663</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_scan_html_a47bf2ec54ead4b8f00f9f188518630f1ad54b2905015a390708f79bae6cdac56d"><div class="ttname"><a href="classmlx_1_1core_1_1_scan.html#a47bf2ec54ead4b8f00f9f188518630f1ad54b2905015a390708f79bae6cdac56d">mlx::core::Scan::Max</a></div><div class="ttdeci">@ Max</div><div class="ttdef"><b>Definition</b> primitives.h:1663</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_scan_html_a54445a4d677ca4fe2a58d08eb5223ac6"><div class="ttname"><a href="classmlx_1_1core_1_1_scan.html#a54445a4d677ca4fe2a58d08eb5223ac6">mlx::core::Scan::is_equivalent</a></div><div class="ttdeci">bool is_equivalent(const Primitive &amp;other) const override</div><div class="ttdoc">Equivalence check defaults to false unless overridden by the primitive.</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_scan_html_ac93e8f9c6771de825d2186ef34fa7087"><div class="ttname"><a href="classmlx_1_1core_1_1_scan.html#ac93e8f9c6771de825d2186ef34fa7087">mlx::core::Scan::Scan</a></div><div class="ttdeci">Scan(Stream stream, ReduceType reduce_type, int axis, bool reverse, bool inclusive)</div><div class="ttdef"><b>Definition</b> primitives.h:1665</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_scan_html_aef22c6fc2b2cb2a907cd8965c7413dde"><div class="ttname"><a href="classmlx_1_1core_1_1_scan.html#aef22c6fc2b2cb2a907cd8965c7413dde">mlx::core::Scan::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_scatter_html"><div class="ttname"><a href="classmlx_1_1core_1_1_scatter.html">mlx::core::Scatter</a></div><div class="ttdef"><b>Definition</b> primitives.h:1711</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_scatter_html_a0208172562abdc90472e6eb5f84c987f"><div class="ttname"><a href="classmlx_1_1core_1_1_scatter.html#a0208172562abdc90472e6eb5f84c987f">mlx::core::Scatter::is_equivalent</a></div><div class="ttdeci">bool is_equivalent(const Primitive &amp;other) const override</div><div class="ttdoc">Equivalence check defaults to false unless overridden by the primitive.</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_scatter_html_a614d19af11dc30644b2b4941033b613c"><div class="ttname"><a href="classmlx_1_1core_1_1_scatter.html#a614d19af11dc30644b2b4941033b613c">mlx::core::Scatter::ReduceType</a></div><div class="ttdeci">ReduceType</div><div class="ttdef"><b>Definition</b> primitives.h:1713</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_scatter_html_a614d19af11dc30644b2b4941033b613ca1c2da7b96d743296fe660f5fc4072f16"><div class="ttname"><a href="classmlx_1_1core_1_1_scatter.html#a614d19af11dc30644b2b4941033b613ca1c2da7b96d743296fe660f5fc4072f16">mlx::core::Scatter::Max</a></div><div class="ttdeci">@ Max</div><div class="ttdef"><b>Definition</b> primitives.h:1713</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_scatter_html_a7623f590f8b77167b5ebb4f14bc9dc97"><div class="ttname"><a href="classmlx_1_1core_1_1_scatter.html#a7623f590f8b77167b5ebb4f14bc9dc97">mlx::core::Scatter::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_scatter_html_aa9d45cbfb27b814517f6016092b30efa"><div class="ttname"><a href="classmlx_1_1core_1_1_scatter.html#aa9d45cbfb27b814517f6016092b30efa">mlx::core::Scatter::print</a></div><div class="ttdeci">void print(std::ostream &amp;os) override</div><div class="ttdoc">Print the primitive.</div><div class="ttdef"><b>Definition</b> primitives.h:1727</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_scatter_html_ab304345db3d8cfeea15e27461ae2e678"><div class="ttname"><a href="classmlx_1_1core_1_1_scatter.html#ab304345db3d8cfeea15e27461ae2e678">mlx::core::Scatter::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_scatter_html_ac9b3eff67389ef9aa820753379ffeaa3"><div class="ttname"><a href="classmlx_1_1core_1_1_scatter.html#ac9b3eff67389ef9aa820753379ffeaa3">mlx::core::Scatter::Scatter</a></div><div class="ttdeci">Scatter(Stream stream, ReduceType reduce_type, const std::vector&lt; int &gt; &amp;axes)</div><div class="ttdef"><b>Definition</b> primitives.h:1715</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_select_html"><div class="ttname"><a href="classmlx_1_1core_1_1_select.html">mlx::core::Select</a></div><div class="ttdef"><b>Definition</b> primitives.h:844</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_select_html_a2a82b6cba4c386b2b87f225a4b08ea9b"><div class="ttname"><a href="classmlx_1_1core_1_1_select.html#a2a82b6cba4c386b2b87f225a4b08ea9b">mlx::core::Select::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_select_html_a6f833fe55dd68ad3726bbf9a8f75eec9"><div class="ttname"><a href="classmlx_1_1core_1_1_select.html#a6f833fe55dd68ad3726bbf9a8f75eec9">mlx::core::Select::Select</a></div><div class="ttdeci">Select(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:846</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_select_html_aa51aa36e0adbd69e0d23d7c7adf88de2"><div class="ttname"><a href="classmlx_1_1core_1_1_select.html#aa51aa36e0adbd69e0d23d7c7adf88de2">mlx::core::Select::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_sigmoid_html"><div class="ttname"><a href="classmlx_1_1core_1_1_sigmoid.html">mlx::core::Sigmoid</a></div><div class="ttdef"><b>Definition</b> primitives.h:1754</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_sigmoid_html_a47eca99113ec19f0eb60b6a0472c592b"><div class="ttname"><a href="classmlx_1_1core_1_1_sigmoid.html#a47eca99113ec19f0eb60b6a0472c592b">mlx::core::Sigmoid::Sigmoid</a></div><div class="ttdeci">Sigmoid(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:1756</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_sigmoid_html_a7a6bd0222d51d7f25f2719a91ccdfeca"><div class="ttname"><a href="classmlx_1_1core_1_1_sigmoid.html#a7a6bd0222d51d7f25f2719a91ccdfeca">mlx::core::Sigmoid::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_sigmoid_html_aa930ce05734cca529ebcb8d0ca8e1255"><div class="ttname"><a href="classmlx_1_1core_1_1_sigmoid.html#aa930ce05734cca529ebcb8d0ca8e1255">mlx::core::Sigmoid::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_sign_html"><div class="ttname"><a href="classmlx_1_1core_1_1_sign.html">mlx::core::Sign</a></div><div class="ttdef"><b>Definition</b> primitives.h:1771</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_sign_html_a7498ec993b66879be30c5d9762c45a97"><div class="ttname"><a href="classmlx_1_1core_1_1_sign.html#a7498ec993b66879be30c5d9762c45a97">mlx::core::Sign::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_sign_html_afa2b48b99a194106006b44af69ffda8b"><div class="ttname"><a href="classmlx_1_1core_1_1_sign.html#afa2b48b99a194106006b44af69ffda8b">mlx::core::Sign::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_sign_html_afe951e50907bc23a601ec5fa9eae5763"><div class="ttname"><a href="classmlx_1_1core_1_1_sign.html#afe951e50907bc23a601ec5fa9eae5763">mlx::core::Sign::Sign</a></div><div class="ttdeci">Sign(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:1773</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_sin_html"><div class="ttname"><a href="classmlx_1_1core_1_1_sin.html">mlx::core::Sin</a></div><div class="ttdef"><b>Definition</b> primitives.h:1788</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_sin_html_a10d1ecc0ca96e79cdf55b57073d126ea"><div class="ttname"><a href="classmlx_1_1core_1_1_sin.html#a10d1ecc0ca96e79cdf55b57073d126ea">mlx::core::Sin::Sin</a></div><div class="ttdeci">Sin(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:1790</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_sin_html_a6b59f1156cf8bdad8d45acd1d825cb5e"><div class="ttname"><a href="classmlx_1_1core_1_1_sin.html#a6b59f1156cf8bdad8d45acd1d825cb5e">mlx::core::Sin::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_sin_html_ab34f9cebc2aed55a0b6ab4c991f02eb5"><div class="ttname"><a href="classmlx_1_1core_1_1_sin.html#ab34f9cebc2aed55a0b6ab4c991f02eb5">mlx::core::Sin::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_sinh_html"><div class="ttname"><a href="classmlx_1_1core_1_1_sinh.html">mlx::core::Sinh</a></div><div class="ttdef"><b>Definition</b> primitives.h:1805</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_sinh_html_a4a4f6814d403c2ce5d6c574b0dca3c96"><div class="ttname"><a href="classmlx_1_1core_1_1_sinh.html#a4a4f6814d403c2ce5d6c574b0dca3c96">mlx::core::Sinh::Sinh</a></div><div class="ttdeci">Sinh(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:1807</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_sinh_html_a5a1af2399f166d5b228b5e83a1837c75"><div class="ttname"><a href="classmlx_1_1core_1_1_sinh.html#a5a1af2399f166d5b228b5e83a1837c75">mlx::core::Sinh::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_sinh_html_ab6d5f6f40d177f6435f6a51c71b939dd"><div class="ttname"><a href="classmlx_1_1core_1_1_sinh.html#ab6d5f6f40d177f6435f6a51c71b939dd">mlx::core::Sinh::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_slice_html"><div class="ttname"><a href="classmlx_1_1core_1_1_slice.html">mlx::core::Slice</a></div><div class="ttdef"><b>Definition</b> primitives.h:1822</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_slice_html_a4b13503f5b2f5c6a90d394b020f9b3f2"><div class="ttname"><a href="classmlx_1_1core_1_1_slice.html#a4b13503f5b2f5c6a90d394b020f9b3f2">mlx::core::Slice::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_slice_html_a8a38feb7bb6b72bdeebb83f053e2fd7f"><div class="ttname"><a href="classmlx_1_1core_1_1_slice.html#a8a38feb7bb6b72bdeebb83f053e2fd7f">mlx::core::Slice::Slice</a></div><div class="ttdeci">Slice(Stream stream, const std::vector&lt; int &gt; &amp;start_indices, const std::vector&lt; int &gt; &amp;end_indices, const std::vector&lt; int &gt; &amp;strides)</div><div class="ttdef"><b>Definition</b> primitives.h:1824</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_slice_html_aa53c21ff06a7c659e889af6b97d10a4a"><div class="ttname"><a href="classmlx_1_1core_1_1_slice.html#aa53c21ff06a7c659e889af6b97d10a4a">mlx::core::Slice::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_slice_update_html"><div class="ttname"><a href="classmlx_1_1core_1_1_slice_update.html">mlx::core::SliceUpdate</a></div><div class="ttdef"><b>Definition</b> primitives.h:1850</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_slice_update_html_aa30a7f22f557c56e1a2b5fcf44488990"><div class="ttname"><a href="classmlx_1_1core_1_1_slice_update.html#aa30a7f22f557c56e1a2b5fcf44488990">mlx::core::SliceUpdate::SliceUpdate</a></div><div class="ttdeci">SliceUpdate(Stream stream, const std::vector&lt; int &gt; &amp;start_indices, const std::vector&lt; int &gt; &amp;end_indices, const std::vector&lt; int &gt; &amp;strides)</div><div class="ttdef"><b>Definition</b> primitives.h:1852</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_slice_update_html_aac1a1d122e5697be057d63552141032b"><div class="ttname"><a href="classmlx_1_1core_1_1_slice_update.html#aac1a1d122e5697be057d63552141032b">mlx::core::SliceUpdate::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_slice_update_html_ad82ca0e3ab88a0e086431050deea831b"><div class="ttname"><a href="classmlx_1_1core_1_1_slice_update.html#ad82ca0e3ab88a0e086431050deea831b">mlx::core::SliceUpdate::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_softmax_html"><div class="ttname"><a href="classmlx_1_1core_1_1_softmax.html">mlx::core::Softmax</a></div><div class="ttdef"><b>Definition</b> primitives.h:1880</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_softmax_html_a35dac69ddcc7e2ec0e1a76fe93db85af"><div class="ttname"><a href="classmlx_1_1core_1_1_softmax.html#a35dac69ddcc7e2ec0e1a76fe93db85af">mlx::core::Softmax::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_softmax_html_a4ec686aac4e06f0dfe2cbd6801af40eb"><div class="ttname"><a href="classmlx_1_1core_1_1_softmax.html#a4ec686aac4e06f0dfe2cbd6801af40eb">mlx::core::Softmax::Softmax</a></div><div class="ttdeci">Softmax(Stream stream, bool precise)</div><div class="ttdef"><b>Definition</b> primitives.h:1882</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_softmax_html_ac9ebc2eab1683b682e689ed8f4622b79"><div class="ttname"><a href="classmlx_1_1core_1_1_softmax.html#ac9ebc2eab1683b682e689ed8f4622b79">mlx::core::Softmax::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_sort_html"><div class="ttname"><a href="classmlx_1_1core_1_1_sort.html">mlx::core::Sort</a></div><div class="ttdef"><b>Definition</b> primitives.h:1900</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_sort_html_a4141c48f0e8670c728663f3722675382"><div class="ttname"><a href="classmlx_1_1core_1_1_sort.html#a4141c48f0e8670c728663f3722675382">mlx::core::Sort::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_sort_html_a459769a0241b2620e55bedaba19827cd"><div class="ttname"><a href="classmlx_1_1core_1_1_sort.html#a459769a0241b2620e55bedaba19827cd">mlx::core::Sort::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_sort_html_a62943032dbd72e85ceb9b4b7211f4a44"><div class="ttname"><a href="classmlx_1_1core_1_1_sort.html#a62943032dbd72e85ceb9b4b7211f4a44">mlx::core::Sort::Sort</a></div><div class="ttdeci">Sort(Stream stream, int axis)</div><div class="ttdef"><b>Definition</b> primitives.h:1902</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_split_html"><div class="ttname"><a href="classmlx_1_1core_1_1_split.html">mlx::core::Split</a></div><div class="ttdef"><b>Definition</b> primitives.h:1920</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_split_html_a78ddda89c4daee73c74cfbc1e44656df"><div class="ttname"><a href="classmlx_1_1core_1_1_split.html#a78ddda89c4daee73c74cfbc1e44656df">mlx::core::Split::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, std::vector&lt; array &gt; &amp;outputs) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_split_html_a897c746ecfdff5119cc5ae3f20499385"><div class="ttname"><a href="classmlx_1_1core_1_1_split.html#a897c746ecfdff5119cc5ae3f20499385">mlx::core::Split::Split</a></div><div class="ttdeci">Split(Stream stream, const std::vector&lt; int &gt; &amp;indices, int axis)</div><div class="ttdef"><b>Definition</b> primitives.h:1922</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_split_html_aff2889cb9074f0fda53edf8fa40b1fd4"><div class="ttname"><a href="classmlx_1_1core_1_1_split.html#aff2889cb9074f0fda53edf8fa40b1fd4">mlx::core::Split::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, std::vector&lt; array &gt; &amp;outputs) override</div><div class="ttdoc">A primitive must know how to evaluate itself on the CPU/GPU for the given inputs and populate the out...</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_sqrt_html"><div class="ttname"><a href="classmlx_1_1core_1_1_sqrt.html">mlx::core::Sqrt</a></div><div class="ttdef"><b>Definition</b> primitives.h:1959</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_sqrt_html_a5a64ecc4eef1e30a2963435dca7cefd5"><div class="ttname"><a href="classmlx_1_1core_1_1_sqrt.html#a5a64ecc4eef1e30a2963435dca7cefd5">mlx::core::Sqrt::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_sqrt_html_a6682a7c31ca427c9d2c5ddb6a479bf29"><div class="ttname"><a href="classmlx_1_1core_1_1_sqrt.html#a6682a7c31ca427c9d2c5ddb6a479bf29">mlx::core::Sqrt::Sqrt</a></div><div class="ttdeci">Sqrt(Stream stream, bool recip=false)</div><div class="ttdef"><b>Definition</b> primitives.h:1961</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_sqrt_html_a6d205e679a593d1ba20206c5c47ba501"><div class="ttname"><a href="classmlx_1_1core_1_1_sqrt.html#a6d205e679a593d1ba20206c5c47ba501">mlx::core::Sqrt::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_square_html"><div class="ttname"><a href="classmlx_1_1core_1_1_square.html">mlx::core::Square</a></div><div class="ttdef"><b>Definition</b> primitives.h:1942</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_square_html_a0ea2a78a5bb52daa4103263bf2f98045"><div class="ttname"><a href="classmlx_1_1core_1_1_square.html#a0ea2a78a5bb52daa4103263bf2f98045">mlx::core::Square::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_square_html_a1f4d327a705950616da63b83c2829e59"><div class="ttname"><a href="classmlx_1_1core_1_1_square.html#a1f4d327a705950616da63b83c2829e59">mlx::core::Square::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_square_html_ab94e28d5c92e6febc1c74e525f730dc4"><div class="ttname"><a href="classmlx_1_1core_1_1_square.html#ab94e28d5c92e6febc1c74e525f730dc4">mlx::core::Square::Square</a></div><div class="ttdeci">Square(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:1944</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_stop_gradient_html"><div class="ttname"><a href="classmlx_1_1core_1_1_stop_gradient.html">mlx::core::StopGradient</a></div><div class="ttdef"><b>Definition</b> primitives.h:1985</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_stop_gradient_html_a56207714d374b08f60e4d9cdbc7340b2"><div class="ttname"><a href="classmlx_1_1core_1_1_stop_gradient.html#a56207714d374b08f60e4d9cdbc7340b2">mlx::core::StopGradient::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_stop_gradient_html_a907b96f0a1ce608e211d87ccf2b9ca89"><div class="ttname"><a href="classmlx_1_1core_1_1_stop_gradient.html#a907b96f0a1ce608e211d87ccf2b9ca89">mlx::core::StopGradient::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_stop_gradient_html_ac70d1ab819d04e00f76bc25aeebaf84f"><div class="ttname"><a href="classmlx_1_1core_1_1_stop_gradient.html#ac70d1ab819d04e00f76bc25aeebaf84f">mlx::core::StopGradient::StopGradient</a></div><div class="ttdeci">StopGradient(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:1987</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_subtract_html"><div class="ttname"><a href="classmlx_1_1core_1_1_subtract.html">mlx::core::Subtract</a></div><div class="ttdef"><b>Definition</b> primitives.h:2001</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_subtract_html_a47574258b6c95f8ad260c114d6d36a12"><div class="ttname"><a href="classmlx_1_1core_1_1_subtract.html#a47574258b6c95f8ad260c114d6d36a12">mlx::core::Subtract::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_subtract_html_a69021b23daf061764d97fabbc0f4f06c"><div class="ttname"><a href="classmlx_1_1core_1_1_subtract.html#a69021b23daf061764d97fabbc0f4f06c">mlx::core::Subtract::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_subtract_html_a834854757394f8de7082af65bf86ed9c"><div class="ttname"><a href="classmlx_1_1core_1_1_subtract.html#a834854757394f8de7082af65bf86ed9c">mlx::core::Subtract::Subtract</a></div><div class="ttdeci">Subtract(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:2003</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_tan_html"><div class="ttname"><a href="classmlx_1_1core_1_1_tan.html">mlx::core::Tan</a></div><div class="ttdef"><b>Definition</b> primitives.h:2018</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_tan_html_a8dcc9ff660210ccf05134dd95f47de08"><div class="ttname"><a href="classmlx_1_1core_1_1_tan.html#a8dcc9ff660210ccf05134dd95f47de08">mlx::core::Tan::Tan</a></div><div class="ttdeci">Tan(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:2020</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_tan_html_a9c9a731158fa60eef30067fe0da9f3e9"><div class="ttname"><a href="classmlx_1_1core_1_1_tan.html#a9c9a731158fa60eef30067fe0da9f3e9">mlx::core::Tan::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_tan_html_aca7dbb4836507005a2032ac957a04d3f"><div class="ttname"><a href="classmlx_1_1core_1_1_tan.html#aca7dbb4836507005a2032ac957a04d3f">mlx::core::Tan::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_tanh_html"><div class="ttname"><a href="classmlx_1_1core_1_1_tanh.html">mlx::core::Tanh</a></div><div class="ttdef"><b>Definition</b> primitives.h:2035</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_tanh_html_a48df896599ae93dbce84a5c0f50cf761"><div class="ttname"><a href="classmlx_1_1core_1_1_tanh.html#a48df896599ae93dbce84a5c0f50cf761">mlx::core::Tanh::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_tanh_html_ae551297bf573e1802fb831440276dee4"><div class="ttname"><a href="classmlx_1_1core_1_1_tanh.html#ae551297bf573e1802fb831440276dee4">mlx::core::Tanh::Tanh</a></div><div class="ttdeci">Tanh(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:2037</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_tanh_html_af7ed4345f622da069e5b0284067923f5"><div class="ttname"><a href="classmlx_1_1core_1_1_tanh.html#af7ed4345f622da069e5b0284067923f5">mlx::core::Tanh::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_transpose_html"><div class="ttname"><a href="classmlx_1_1core_1_1_transpose.html">mlx::core::Transpose</a></div><div class="ttdef"><b>Definition</b> primitives.h:2083</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_transpose_html_a1a9ba023584c61c7ac93d6dce536760a"><div class="ttname"><a href="classmlx_1_1core_1_1_transpose.html#a1a9ba023584c61c7ac93d6dce536760a">mlx::core::Transpose::Transpose</a></div><div class="ttdeci">Transpose(Stream stream, const std::vector&lt; int &gt; &amp;axes)</div><div class="ttdef"><b>Definition</b> primitives.h:2085</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_transpose_html_a1fbcfcca43f9ec06c63a3c14708c30f8"><div class="ttname"><a href="classmlx_1_1core_1_1_transpose.html#a1fbcfcca43f9ec06c63a3c14708c30f8">mlx::core::Transpose::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_transpose_html_a38d25739c08aa594a6775015a1d7d92e"><div class="ttname"><a href="classmlx_1_1core_1_1_transpose.html#a38d25739c08aa594a6775015a1d7d92e">mlx::core::Transpose::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_unary_primitive_html"><div class="ttname"><a href="classmlx_1_1core_1_1_unary_primitive.html">mlx::core::UnaryPrimitive</a></div><div class="ttdef"><b>Definition</b> primitives.h:127</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_unary_primitive_html_a0a859309a4f192f2679e07f2e4ff4d22"><div class="ttname"><a href="classmlx_1_1core_1_1_unary_primitive.html#a0a859309a4f192f2679e07f2e4ff4d22">mlx::core::UnaryPrimitive::operator=</a></div><div class="ttdeci">UnaryPrimitive &amp; operator=(const UnaryPrimitive &amp;other)=delete</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_unary_primitive_html_a189f6d4ed369f82a4b724a29eb056d4e"><div class="ttname"><a href="classmlx_1_1core_1_1_unary_primitive.html#a189f6d4ed369f82a4b724a29eb056d4e">mlx::core::UnaryPrimitive::UnaryPrimitive</a></div><div class="ttdeci">UnaryPrimitive(Stream stream)</div><div class="ttdoc">An abstract base class for a primitive with a single output.</div><div class="ttdef"><b>Definition</b> primitives.h:132</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_unary_primitive_html_a6b7f80abaf038d53ec6ffbb0dfac6adb"><div class="ttname"><a href="classmlx_1_1core_1_1_unary_primitive.html#a6b7f80abaf038d53ec6ffbb0dfac6adb">mlx::core::UnaryPrimitive::eval_gpu</a></div><div class="ttdeci">virtual void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;output)=0</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_unary_primitive_html_a780281fb04e2daf1be630c124bd605e3"><div class="ttname"><a href="classmlx_1_1core_1_1_unary_primitive.html#a780281fb04e2daf1be630c124bd605e3">mlx::core::UnaryPrimitive::UnaryPrimitive</a></div><div class="ttdeci">UnaryPrimitive(UnaryPrimitive &amp;&amp;other)=delete</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_unary_primitive_html_a7e8f6f5d6ae0a33f6abc0f5a46e0b132"><div class="ttname"><a href="classmlx_1_1core_1_1_unary_primitive.html#a7e8f6f5d6ae0a33f6abc0f5a46e0b132">mlx::core::UnaryPrimitive::eval_cpu</a></div><div class="ttdeci">virtual void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;output)=0</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_unary_primitive_html_a971fe9ad47f6569118879ce1d0f41447"><div class="ttname"><a href="classmlx_1_1core_1_1_unary_primitive.html#a971fe9ad47f6569118879ce1d0f41447">mlx::core::UnaryPrimitive::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, std::vector&lt; array &gt; &amp;outputs) override</div><div class="ttdef"><b>Definition</b> primitives.h:142</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_unary_primitive_html_a9935cffc4f246d3d883bc3d26c5163f2"><div class="ttname"><a href="classmlx_1_1core_1_1_unary_primitive.html#a9935cffc4f246d3d883bc3d26c5163f2">mlx::core::UnaryPrimitive::UnaryPrimitive</a></div><div class="ttdeci">UnaryPrimitive(const UnaryPrimitive &amp;other)=delete</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_unary_primitive_html_aa0ed6e32c36200a3ff9bc592c9b300db"><div class="ttname"><a href="classmlx_1_1core_1_1_unary_primitive.html#aa0ed6e32c36200a3ff9bc592c9b300db">mlx::core::UnaryPrimitive::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, std::vector&lt; array &gt; &amp;outputs) override</div><div class="ttdoc">A primitive must know how to evaluate itself on the CPU/GPU for the given inputs and populate the out...</div><div class="ttdef"><b>Definition</b> primitives.h:137</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_unary_primitive_html_ab90b2ea80f1d914be03cf44def5db5a5"><div class="ttname"><a href="classmlx_1_1core_1_1_unary_primitive.html#ab90b2ea80f1d914be03cf44def5db5a5">mlx::core::UnaryPrimitive::operator=</a></div><div class="ttdeci">UnaryPrimitive &amp; operator=(UnaryPrimitive &amp;&amp;other)=delete</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_unary_primitive_html_ac0677ab99a5ca660ed6ab7902ea364de"><div class="ttname"><a href="classmlx_1_1core_1_1_unary_primitive.html#ac0677ab99a5ca660ed6ab7902ea364de">mlx::core::UnaryPrimitive::~UnaryPrimitive</a></div><div class="ttdeci">virtual ~UnaryPrimitive()=default</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_uniform_html"><div class="ttname"><a href="classmlx_1_1core_1_1_uniform.html">mlx::core::Uniform</a></div><div class="ttdef"><b>Definition</b> primitives.h:2052</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_uniform_html_a037a2c96b79b70a64f2b637c9f1a432f"><div class="ttname"><a href="classmlx_1_1core_1_1_uniform.html#a037a2c96b79b70a64f2b637c9f1a432f">mlx::core::Uniform::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_uniform_html_a5f88cbf2495f24f87cefd99aaaebe4d0"><div class="ttname"><a href="classmlx_1_1core_1_1_uniform.html#a5f88cbf2495f24f87cefd99aaaebe4d0">mlx::core::Uniform::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_uniform_html_a626aa1091aa77b4a32c02290106b85e1"><div class="ttname"><a href="classmlx_1_1core_1_1_uniform.html#a626aa1091aa77b4a32c02290106b85e1">mlx::core::Uniform::Uniform</a></div><div class="ttdeci">Uniform(Stream stream)</div><div class="ttdef"><b>Definition</b> primitives.h:2054</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_view_html"><div class="ttname"><a href="classmlx_1_1core_1_1_view.html">mlx::core::View</a></div><div class="ttdef"><b>Definition</b> primitives.h:2067</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_view_html_a0ad6deb11914a242f10e8039fcb02497"><div class="ttname"><a href="classmlx_1_1core_1_1_view.html#a0ad6deb11914a242f10e8039fcb02497">mlx::core::View::eval_cpu</a></div><div class="ttdeci">void eval_cpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_view_html_ad7eed156c308e9a29a8b41f965ec941e"><div class="ttname"><a href="classmlx_1_1core_1_1_view.html#ad7eed156c308e9a29a8b41f965ec941e">mlx::core::View::View</a></div><div class="ttdeci">View(Stream stream, Dtype dtype)</div><div class="ttdef"><b>Definition</b> primitives.h:2069</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1_view_html_add6e12ff1e476fe1db7718b14f21b075"><div class="ttname"><a href="classmlx_1_1core_1_1_view.html#add6e12ff1e476fe1db7718b14f21b075">mlx::core::View::eval_gpu</a></div><div class="ttdeci">void eval_gpu(const std::vector&lt; array &gt; &amp;inputs, array &amp;out) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1array_html"><div class="ttname"><a href="classmlx_1_1core_1_1array.html">mlx::core::array</a></div><div class="ttdef"><b>Definition</b> array.h:20</div></div>
<div class="ttc" id="acommon_2binary_8h_html_a70228731d29946574b238d21fb4b360c"><div class="ttname"><a href="common_2binary_8h.html#a70228731d29946574b238d21fb4b360c">op</a></div><div class="ttdeci">Op op</div><div class="ttdef"><b>Definition</b> binary.h:141</div></div>
<div class="ttc" id="adevice_8h_html"><div class="ttname"><a href="device_8h.html">device.h</a></div></div>
<div class="ttc" id="agroup__ops_html_ga2a466024f8061febc0a64be557644cb0"><div class="ttname"><a href="group__ops.html#ga2a466024f8061febc0a64be557644cb0">mlx::core::std</a></div><div class="ttdeci">array std(const array &amp;a, bool keepdims, int ddof=0, StreamOrDevice s={})</div><div class="ttdoc">Computes the standard deviation of the elements of an array.</div></div>
<div class="ttc" id="agroup__ops_html_ga4f3389e5b89e70e862e7d2b40d6c7f78"><div class="ttname"><a href="group__ops.html#ga4f3389e5b89e70e862e7d2b40d6c7f78">mlx::core::tri</a></div><div class="ttdeci">array tri(int n, int m, int k, Dtype type, StreamOrDevice s={})</div></div>
<div class="ttc" id="agroup__ops_html_gac1869f3b7094869b44fe7ac4ce58638b"><div class="ttname"><a href="group__ops.html#gac1869f3b7094869b44fe7ac4ce58638b">mlx::core::transpose</a></div><div class="ttdeci">array transpose(const array &amp;a, std::vector&lt; int &gt; axes, StreamOrDevice s={})</div><div class="ttdoc">Permutes the dimensions according to the given axes.</div></div>
<div class="ttc" id="aio_2load_8h_html"><div class="ttname"><a href="io_2load_8h.html">load.h</a></div></div>
<div class="ttc" id="anamespacemlx_1_1core_html"><div class="ttname"><a href="namespacemlx_1_1core.html">mlx::core</a></div><div class="ttdef"><b>Definition</b> allocator.h:7</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_a179a632200366c223d6ab56d3e032592"><div class="ttname"><a href="namespacemlx_1_1core.html#a179a632200366c223d6ab56d3e032592">mlx::core::jvp</a></div><div class="ttdeci">std::pair&lt; std::vector&lt; array &gt;, std::vector&lt; array &gt; &gt; jvp(const std::function&lt; std::vector&lt; array &gt;(const std::vector&lt; array &gt; &amp;)&gt; &amp;fun, const std::vector&lt; array &gt; &amp;primals, const std::vector&lt; array &gt; &amp;tangents)</div><div class="ttdoc">Computes the output and Jacobian-vector product (JVP) of a function.</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_a1b33e2c2e3471420490cf0be2de6de18"><div class="ttname"><a href="namespacemlx_1_1core.html#a1b33e2c2e3471420490cf0be2de6de18">mlx::core::vjp</a></div><div class="ttdeci">std::pair&lt; std::vector&lt; array &gt;, std::vector&lt; array &gt; &gt; vjp(const std::function&lt; std::vector&lt; array &gt;(const std::vector&lt; array &gt; &amp;)&gt; &amp;fun, const std::vector&lt; array &gt; &amp;primals, const std::vector&lt; array &gt; &amp;cotangents)</div><div class="ttdoc">Computes the output and vector-Jacobian product (VJP) of a function.</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_a7d6e097d8effed52f4713672e471f299"><div class="ttname"><a href="namespacemlx_1_1core.html#a7d6e097d8effed52f4713672e471f299">mlx::core::eval</a></div><div class="ttdeci">void eval(std::vector&lt; array &gt; outputs)</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_a933289d4688479e1c4d8ba04332c406b"><div class="ttname"><a href="namespacemlx_1_1core.html#a933289d4688479e1c4d8ba04332c406b">mlx::core::vmap</a></div><div class="ttdeci">std::function&lt; array(const array &amp;) vmap)(const std::function&lt; array(const array &amp;)&gt; &amp;fun, int in_axis=0, int out_axis=0)</div><div class="ttdoc">Automatically vectorize a unary function over the requested axes.</div></div>
<div class="ttc" id="aprimitives_8h_html_a0fb9d19207dc4869aca35abfbdf4d70a"><div class="ttname"><a href="primitives_8h.html#a0fb9d19207dc4869aca35abfbdf4d70a">DEFINE_DEFAULT_IS_EQUIVALENT</a></div><div class="ttdeci">#define DEFINE_DEFAULT_IS_EQUIVALENT()</div><div class="ttdef"><b>Definition</b> primitives.h:34</div></div>
<div class="ttc" id="aprimitives_8h_html_a1d3a37af519e16f6a703b1e9ebd0f592"><div class="ttname"><a href="primitives_8h.html#a1d3a37af519e16f6a703b1e9ebd0f592">DEFINE_PRINT</a></div><div class="ttdeci">#define DEFINE_PRINT(PRIMITIVE)</div><div class="ttdef"><b>Definition</b> primitives.h:29</div></div>
<div class="ttc" id="aprimitives_8h_html_a649a06267b75e007224ea4ddefedb999"><div class="ttname"><a href="primitives_8h.html#a649a06267b75e007224ea4ddefedb999">DEFINE_INPUT_OUTPUT_SHAPE</a></div><div class="ttdeci">#define DEFINE_INPUT_OUTPUT_SHAPE()</div><div class="ttdef"><b>Definition</b> primitives.h:39</div></div>
<div class="ttc" id="aprimitives_8h_html_a77abdcb55bc2eb0f9a45edc5ee639bf6"><div class="ttname"><a href="primitives_8h.html#a77abdcb55bc2eb0f9a45edc5ee639bf6">DEFINE_GRADS</a></div><div class="ttdeci">#define DEFINE_GRADS()</div><div class="ttdef"><b>Definition</b> primitives.h:17</div></div>
<div class="ttc" id="aprimitives_8h_html_adc0fbd79fe0d1114dc85da4ed99798bd"><div class="ttname"><a href="primitives_8h.html#adc0fbd79fe0d1114dc85da4ed99798bd">DEFINE_VMAP</a></div><div class="ttdeci">#define DEFINE_VMAP()</div><div class="ttdef"><b>Definition</b> primitives.h:12</div></div>
<div class="ttc" id="astream_8h_html"><div class="ttname"><a href="stream_8h.html">stream.h</a></div></div>
<div class="ttc" id="astruct_and_html"><div class="ttname"><a href="struct_and.html">And</a></div><div class="ttdef"><b>Definition</b> ops.h:37</div></div>
<div class="ttc" id="astruct_left_shift_html"><div class="ttname"><a href="struct_left_shift.html">LeftShift</a></div><div class="ttdef"><b>Definition</b> binary_ops.h:270</div></div>
<div class="ttc" id="astruct_max_html"><div class="ttname"><a href="struct_max.html">Max</a></div><div class="ttdef"><b>Definition</b> ops.h:185</div></div>
<div class="ttc" id="astruct_min_html"><div class="ttname"><a href="struct_min.html">Min</a></div><div class="ttdef"><b>Definition</b> ops.h:163</div></div>
<div class="ttc" id="astruct_none_html"><div class="ttname"><a href="struct_none.html">None</a></div><div class="ttdef"><b>Definition</b> ops.h:29</div></div>
<div class="ttc" id="astruct_or_html"><div class="ttname"><a href="struct_or.html">Or</a></div><div class="ttdef"><b>Definition</b> ops.h:78</div></div>
<div class="ttc" id="astruct_prod_html"><div class="ttname"><a href="struct_prod.html">Prod</a></div><div class="ttdef"><b>Definition</b> ops.h:141</div></div>
<div class="ttc" id="astruct_right_shift_html"><div class="ttname"><a href="struct_right_shift.html">RightShift</a></div><div class="ttdef"><b>Definition</b> binary_ops.h:277</div></div>
<div class="ttc" id="astruct_sum_html"><div class="ttname"><a href="struct_sum.html">Sum</a></div><div class="ttdef"><b>Definition</b> ops.h:119</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_device_html"><div class="ttname"><a href="structmlx_1_1core_1_1_device.html">mlx::core::Device</a></div><div class="ttdef"><b>Definition</b> device.h:7</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_dtype_html"><div class="ttname"><a href="structmlx_1_1core_1_1_dtype.html">mlx::core::Dtype</a></div><div class="ttdef"><b>Definition</b> dtype.h:13</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_stream_html"><div class="ttname"><a href="structmlx_1_1core_1_1_stream.html">mlx::core::Stream</a></div><div class="ttdef"><b>Definition</b> stream.h:9</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_stream_html_a406b1b0162287a4162fab1f70e2ff3bb"><div class="ttname"><a href="structmlx_1_1core_1_1_stream.html#a406b1b0162287a4162fab1f70e2ff3bb">mlx::core::Stream::device</a></div><div class="ttdeci">Device device</div><div class="ttdef"><b>Definition</b> stream.h:11</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
</small></address>
</body>
</html>