docs update

This commit is contained in:
Awni Hannun
2024-08-23 12:14:53 -07:00
committed by CircleCI Docs
parent d8f7b8cda6
commit 27e07888b0
697 changed files with 15867 additions and 8594 deletions

View File

@@ -201,32 +201,61 @@ $(function() { codefold.init(0); });
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span>}</div>
</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> </div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> str<span class="keywordtype">id</span>e_t&gt;</div>
<div class="foldopen" id="foldopen00108" data-start="{" data-end="}">
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#a847b0a276663d9ddb5cac905ee977f03"> 108</a></span><span class="keyword">inline</span> <span class="keyword">auto</span> <a class="code hl_function" href="namespacemlx_1_1core.html#a847b0a276663d9ddb5cac905ee977f03">check_contiguity</a>(</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; shape,</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keyword">const</span> std::vector&lt;stride_t&gt;&amp; strides) {</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keywordtype">size_t</span> data_size = 1;</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="keywordtype">size_t</span> f_stride = 1;</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keywordtype">size_t</span> b_stride = 1;</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keywordtype">bool</span> is_row_contiguous = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <span class="keywordtype">bool</span> is_col_contiguous = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> </div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0, ri = shape.size() - 1; ri &gt;= 0; i++, ri--) {</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> is_row_contiguous &amp;= strides[i] == f_stride || shape[i] == 1;</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> is_col_contiguous &amp;= strides[ri] == b_stride || shape[ri] == 1;</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> f_stride *= shape[i];</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> b_stride *= shape[ri];</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">if</span> (strides[i] &gt; 0) {</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> data_size *= shape[i];</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> }</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> }</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> </div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">return</span> std::make_tuple(data_size, is_row_contiguous, is_col_contiguous);</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span>}</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span><span class="comment">// The single array version of the above.</span></div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span><span class="keyword">inline</span> std::tuple&lt;std::vector&lt;int&gt;, std::vector&lt;size_t&gt;&gt;</div>
<div class="foldopen" id="foldopen00109" data-start="{" data-end="}">
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#ad2f039e04bf902c9d98f631a67cc63ed"> 109</a></span><a class="code hl_function" href="namespacemlx_1_1core.html#a9d151ba3e138be1954d2f51f85806b0c">collapse_contiguous_dims</a>(</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; shape,</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keyword">const</span> std::vector&lt;size_t&gt;&amp; strides) {</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> std::vector&lt;int&gt; collapsed_shape;</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> std::vector&lt;size_t&gt; collapsed_strides;</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> </div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">if</span> (shape.size() &gt; 0) {</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> collapsed_shape.push_back(shape[0]);</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> collapsed_strides.push_back(strides[0]);</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 1; i &lt; shape.size(); i++) {</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="keywordflow">if</span> (strides[i] * shape[i] != collapsed_strides.back() ||</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> collapsed_shape.back() * <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(shape[i]) &gt;</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> std::numeric_limits&lt;int&gt;::max()) {</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> collapsed_shape.push_back(shape[i]);</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> collapsed_strides.push_back(strides[i]);</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> collapsed_shape.back() *= shape[i];</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> collapsed_strides.back() = strides[i];</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> }</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> }</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> }</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> </div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">return</span> std::make_tuple(collapsed_shape, collapsed_strides);</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span>}</div>
</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> </div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span>} <span class="comment">// namespace mlx::core</span></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"> 134</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> str<span class="keywordtype">id</span>e_t&gt;</div>
<div class="foldopen" id="foldopen00135" data-start="{" data-end="}">
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#a847b0a276663d9ddb5cac905ee977f03"> 135</a></span><span class="keyword">inline</span> <span class="keyword">auto</span> <a class="code hl_function" href="namespacemlx_1_1core.html#a847b0a276663d9ddb5cac905ee977f03">check_contiguity</a>(</div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; shape,</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keyword">const</span> std::vector&lt;stride_t&gt;&amp; strides) {</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keywordtype">size_t</span> data_size = 1;</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keywordtype">size_t</span> f_stride = 1;</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="keywordtype">size_t</span> b_stride = 1;</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keywordtype">bool</span> is_row_contiguous = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keywordtype">bool</span> is_col_contiguous = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> </div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0, ri = shape.size() - 1; ri &gt;= 0; i++, ri--) {</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> is_col_contiguous &amp;= strides[i] == f_stride || shape[i] == 1;</div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> is_row_contiguous &amp;= strides[ri] == b_stride || shape[ri] == 1;</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> f_stride *= shape[i];</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> b_stride *= shape[ri];</div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">if</span> (strides[i] &gt; 0) {</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> data_size *= shape[i];</div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> }</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> }</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> </div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">return</span> std::make_tuple(data_size, is_row_contiguous, is_col_contiguous);</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span>}</div>
</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> </div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</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_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="aclassmlx_1_1core_1_1array_html_a0a20a6065ae71b64c1e3aa22a45fd8a1"><div class="ttname"><a href="classmlx_1_1core_1_1array.html#a0a20a6065ae71b64c1e3aa22a45fd8a1">mlx::core::array::flags</a></div><div class="ttdeci">const Flags &amp; flags() const</div><div class="ttdoc">Get the Flags bit-field.</div><div class="ttdef"><b>Definition</b> array.h:290</div></div>
@@ -234,7 +263,7 @@ $(function() { codefold.init(0); });
<div class="ttc" id="aclassmlx_1_1core_1_1array_html_a4a2a2c8a4a5beafd723fc13f2055d55d"><div class="ttname"><a href="classmlx_1_1core_1_1array.html#a4a2a2c8a4a5beafd723fc13f2055d55d">mlx::core::array::shape</a></div><div class="ttdeci">const std::vector&lt; int &gt; &amp; shape() const</div><div class="ttdoc">The shape of the array as a vector of integers.</div><div class="ttdef"><b>Definition</b> array.h:99</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_a4950c3248e70280b406a4f1430a85880"><div class="ttname"><a href="namespacemlx_1_1core.html#a4950c3248e70280b406a4f1430a85880">mlx::core::elem_to_loc</a></div><div class="ttdeci">stride_t elem_to_loc(int elem, const std::vector&lt; int &gt; &amp;shape, const std::vector&lt; stride_t &gt; &amp;strides)</div><div class="ttdef"><b>Definition</b> utils.h:12</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_a847b0a276663d9ddb5cac905ee977f03"><div class="ttname"><a href="namespacemlx_1_1core.html#a847b0a276663d9ddb5cac905ee977f03">mlx::core::check_contiguity</a></div><div class="ttdeci">auto check_contiguity(const std::vector&lt; int &gt; &amp;shape, const std::vector&lt; stride_t &gt; &amp;strides)</div><div class="ttdef"><b>Definition</b> utils.h:108</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_a847b0a276663d9ddb5cac905ee977f03"><div class="ttname"><a href="namespacemlx_1_1core.html#a847b0a276663d9ddb5cac905ee977f03">mlx::core::check_contiguity</a></div><div class="ttdeci">auto check_contiguity(const std::vector&lt; int &gt; &amp;shape, const std::vector&lt; stride_t &gt; &amp;strides)</div><div class="ttdef"><b>Definition</b> utils.h:135</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_a9d151ba3e138be1954d2f51f85806b0c"><div class="ttname"><a href="namespacemlx_1_1core.html#a9d151ba3e138be1954d2f51f85806b0c">mlx::core::collapse_contiguous_dims</a></div><div class="ttdeci">std::tuple&lt; std::vector&lt; int &gt;, std::vector&lt; std::vector&lt; stride_t &gt; &gt; &gt; collapse_contiguous_dims(const std::vector&lt; int &gt; &amp;shape, const std::vector&lt; std::vector&lt; stride_t &gt; &gt; strides)</div><div class="ttdef"><b>Definition</b> utils.h:49</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_ac9fb1286a1a00395e901dbff80560895"><div class="ttname"><a href="namespacemlx_1_1core.html#ac9fb1286a1a00395e901dbff80560895">mlx::core::make_contiguous_strides</a></div><div class="ttdeci">std::vector&lt; stride_t &gt; make_contiguous_strides(const std::vector&lt; int &gt; &amp;shape)</div><div class="ttdef"><b>Definition</b> utils.h:33</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_af89751d79339f3e4d9318ea97d64d114"><div class="ttname"><a href="namespacemlx_1_1core.html#af89751d79339f3e4d9318ea97d64d114">mlx::core::enable_for_arrays_t</a></div><div class="ttdeci">typename std::enable_if_t&lt; is_arrays_v&lt; T... &gt; &gt; enable_for_arrays_t</div><div class="ttdef"><b>Definition</b> array.h:566</div></div>