Skip to content

Commit 0922edb

Browse files
Add implementation of dpnp.ndarray.view method (#2520)
This PR adds implementation of `dpnp.ndarray.view` method. All places in the code with connected TODO comments were updated properly. 9b73305
1 parent d70c067 commit 0922edb

File tree

726 files changed

+2207
-1670
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

726 files changed

+2207
-1670
lines changed

.buildinfo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# Sphinx build info version 1
22
# This file records the configuration used when building these files. When it is not found, a full rebuild will be done.
3-
config: 64708f17dc8be0d853c52bfe9df5a414
3+
config: dd56e344854fa3409e391a8e034229ee
44
tags: 645f666f9bcd5a90fca523b33c5a78b7

_modules/dpnp/dpnp_array.html

Lines changed: 129 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@
1414
</script>
1515

1616
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
17-
<title>dpnp.dpnp_array &mdash; Data Parallel Extension for NumPy 0.19.0dev1+2.gd15d395fe58 documentation</title>
17+
<title>dpnp.dpnp_array &mdash; Data Parallel Extension for NumPy 0.19.0dev1+3.g9b73305babb documentation</title>
1818
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=03e43079" />
1919
<link rel="stylesheet" type="text/css" href="../../_static/css/theme.css?v=e59714d7" />
2020

2121

2222
<script src="../../_static/jquery.js?v=5d32c60e"></script>
2323
<script src="../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
24-
<script src="../../_static/documentation_options.js?v=516e0b3f"></script>
24+
<script src="../../_static/documentation_options.js?v=2d9cbcf6"></script>
2525
<script src="../../_static/doctools.js?v=9bcbadda"></script>
2626
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
2727
<script src="../../_static/js/theme.js"></script>
@@ -110,6 +110,7 @@ <h1>Source code for dpnp.dpnp_array</h1><div class="highlight"><pre>
110110
<span class="c1"># *****************************************************************************</span>
111111

112112
<span class="kn">import</span><span class="w"> </span><span class="nn">dpctl.tensor</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">dpt</span>
113+
<span class="kn">import</span><span class="w"> </span><span class="nn">dpctl.tensor._type_utils</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">dtu</span>
113114
<span class="kn">from</span><span class="w"> </span><span class="nn">dpctl.tensor._numpy_helper</span><span class="w"> </span><span class="kn">import</span> <span class="n">AxisError</span>
114115

115116
<span class="kn">import</span><span class="w"> </span><span class="nn">dpnp</span>
@@ -2193,11 +2194,135 @@ <h1>Source code for dpnp.dpnp_array</h1><div class="highlight"><pre>
21932194
<span class="n">mean</span><span class="o">=</span><span class="n">mean</span><span class="p">,</span>
21942195
<span class="n">correction</span><span class="o">=</span><span class="n">correction</span><span class="p">,</span>
21952196
<span class="p">)</span></div>
2196-
</div>
21972197

21982198

2199+
<div class="viewcode-block" id="dpnp_array.view">
2200+
<a class="viewcode-back" href="../../reference/generated/dpnp.dpnp_array.dpnp_array.view.html#dpnp.dpnp_array.dpnp_array.view">[docs]</a>
2201+
<span class="k">def</span><span class="w"> </span><span class="nf">view</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
2202+
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2203+
<span class="sd"> New view of array with the same data.</span>
2204+
2205+
<span class="sd"> For full documentation refer to :obj:`numpy.ndarray.view`.</span>
2206+
2207+
<span class="sd"> Parameters</span>
2208+
<span class="sd"> ----------</span>
2209+
<span class="sd"> dtype : {None, str, dtype object}, optional</span>
2210+
<span class="sd"> The desired data type of the returned view, e.g. :obj:`dpnp.float32`</span>
2211+
<span class="sd"> or :obj:`dpnp.int16`. By default, it results in the view having the</span>
2212+
<span class="sd"> same data type.</span>
2213+
2214+
<span class="sd"> Default: ``None``.</span>
2215+
2216+
<span class="sd"> Notes</span>
2217+
<span class="sd"> -----</span>
2218+
<span class="sd"> Passing ``None`` for `dtype` is the same as omitting the parameter,</span>
2219+
<span class="sd"> opposite to NumPy where they have different meaning.</span>
2220+
2221+
<span class="sd"> ``view(some_dtype)`` or ``view(dtype=some_dtype)`` constructs a view of</span>
2222+
<span class="sd"> the array&#39;s memory with a different data type. This can cause a</span>
2223+
<span class="sd"> reinterpretation of the bytes of memory.</span>
2224+
2225+
<span class="sd"> Only the last axis has to be contiguous.</span>
2226+
2227+
<span class="sd"> Limitations</span>
2228+
<span class="sd"> -----------</span>
2229+
<span class="sd"> Parameter `type` is supported only with default value ``None``.</span>
2230+
<span class="sd"> Otherwise, the function raises ``NotImplementedError`` exception.</span>
2231+
2232+
<span class="sd"> Examples</span>
2233+
<span class="sd"> --------</span>
2234+
<span class="sd"> &gt;&gt;&gt; import dpnp as np</span>
2235+
<span class="sd"> &gt;&gt;&gt; x = np.ones((4,), dtype=np.float32)</span>
2236+
<span class="sd"> &gt;&gt;&gt; xv = x.view(dtype=np.int32)</span>
2237+
<span class="sd"> &gt;&gt;&gt; xv[:] = 0</span>
2238+
<span class="sd"> &gt;&gt;&gt; xv</span>
2239+
<span class="sd"> array([0, 0, 0, 0], dtype=int32)</span>
2240+
2241+
<span class="sd"> However, views that change dtype are totally fine for arrays with a</span>
2242+
<span class="sd"> contiguous last axis, even if the rest of the axes are not C-contiguous:</span>
2243+
2244+
<span class="sd"> &gt;&gt;&gt; x = np.arange(2 * 3 * 4, dtype=np.int8).reshape(2, 3, 4)</span>
2245+
<span class="sd"> &gt;&gt;&gt; x.transpose(1, 0, 2).view(np.int16)</span>
2246+
<span class="sd"> array([[[ 256, 770],</span>
2247+
<span class="sd"> [3340, 3854]],</span>
2248+
<span class="sd"> &lt;BLANKLINE&gt;</span>
2249+
<span class="sd"> [[1284, 1798],</span>
2250+
<span class="sd"> [4368, 4882]],</span>
2251+
<span class="sd"> &lt;BLANKLINE&gt;</span>
2252+
<span class="sd"> [[2312, 2826],</span>
2253+
<span class="sd"> [5396, 5910]]], dtype=int16)</span>
2254+
2255+
<span class="sd"> &quot;&quot;&quot;</span>
2256+
2257+
<span class="k">if</span> <span class="nb">type</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
2258+
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span>
2259+
<span class="s2">&quot;Keyword argument `type` is supported only with &quot;</span>
2260+
<span class="sa">f</span><span class="s2">&quot;default value ``None``, but got </span><span class="si">{</span><span class="nb">type</span><span class="si">}</span><span class="s2">.&quot;</span>
2261+
<span class="p">)</span>
2262+
2263+
<span class="n">old_sh</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">shape</span>
2264+
<span class="n">old_strides</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">strides</span>
2265+
2266+
<span class="k">if</span> <span class="n">dtype</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2267+
<span class="k">return</span> <span class="n">dpnp_array</span><span class="p">(</span><span class="n">old_sh</span><span class="p">,</span> <span class="n">buffer</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">strides</span><span class="o">=</span><span class="n">old_strides</span><span class="p">)</span>
2268+
2269+
<span class="n">new_dt</span> <span class="o">=</span> <span class="n">dpnp</span><span class="o">.</span><span class="n">dtype</span><span class="p">(</span><span class="n">dtype</span><span class="p">)</span>
2270+
<span class="n">new_dt</span> <span class="o">=</span> <span class="n">dtu</span><span class="o">.</span><span class="n">_to_device_supported_dtype</span><span class="p">(</span><span class="n">new_dt</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sycl_device</span><span class="p">)</span>
2271+
2272+
<span class="n">new_itemsz</span> <span class="o">=</span> <span class="n">new_dt</span><span class="o">.</span><span class="n">itemsize</span>
2273+
<span class="n">old_itemsz</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dtype</span><span class="o">.</span><span class="n">itemsize</span>
2274+
<span class="k">if</span> <span class="n">new_itemsz</span> <span class="o">==</span> <span class="n">old_itemsz</span><span class="p">:</span>
2275+
<span class="k">return</span> <span class="n">dpnp_array</span><span class="p">(</span>
2276+
<span class="n">old_sh</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="n">new_dt</span><span class="p">,</span> <span class="n">buffer</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">strides</span><span class="o">=</span><span class="n">old_strides</span>
2277+
<span class="p">)</span>
2278+
2279+
<span class="n">ndim</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ndim</span>
2280+
<span class="k">if</span> <span class="n">ndim</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
2281+
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
2282+
<span class="s2">&quot;Changing the dtype of a 0d array is only supported &quot;</span>
2283+
<span class="s2">&quot;if the itemsize is unchanged&quot;</span>
2284+
<span class="p">)</span>
2285+
2286+
<span class="c1"># resize on last axis only</span>
2287+
<span class="n">axis</span> <span class="o">=</span> <span class="n">ndim</span> <span class="o">-</span> <span class="mi">1</span>
2288+
<span class="k">if</span> <span class="n">old_sh</span><span class="p">[</span><span class="n">axis</span><span class="p">]</span> <span class="o">!=</span> <span class="mi">1</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">!=</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">old_strides</span><span class="p">[</span><span class="n">axis</span><span class="p">]</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
2289+
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
2290+
<span class="s2">&quot;To change to a dtype of a different size, &quot;</span>
2291+
<span class="s2">&quot;the last axis must be contiguous&quot;</span>
2292+
<span class="p">)</span>
2293+
2294+
<span class="c1"># normalize strides whenever itemsize changes</span>
2295+
<span class="k">if</span> <span class="n">old_itemsz</span> <span class="o">&gt;</span> <span class="n">new_itemsz</span><span class="p">:</span>
2296+
<span class="n">new_strides</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span>
2297+
<span class="n">el</span> <span class="o">*</span> <span class="p">(</span><span class="n">old_itemsz</span> <span class="o">//</span> <span class="n">new_itemsz</span><span class="p">)</span> <span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="n">old_strides</span>
2298+
<span class="p">)</span>
2299+
<span class="k">else</span><span class="p">:</span>
2300+
<span class="n">new_strides</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span>
2301+
<span class="n">el</span> <span class="o">//</span> <span class="p">(</span><span class="n">new_itemsz</span> <span class="o">//</span> <span class="n">old_itemsz</span><span class="p">)</span> <span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="n">old_strides</span>
2302+
<span class="p">)</span>
2303+
<span class="n">new_strides</span><span class="p">[</span><span class="n">axis</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>
2304+
<span class="n">new_strides</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">new_strides</span><span class="p">)</span>
2305+
2306+
<span class="n">new_dim</span> <span class="o">=</span> <span class="n">old_sh</span><span class="p">[</span><span class="n">axis</span><span class="p">]</span> <span class="o">*</span> <span class="n">old_itemsz</span>
2307+
<span class="k">if</span> <span class="n">new_dim</span> <span class="o">%</span> <span class="n">new_itemsz</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
2308+
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
2309+
<span class="s2">&quot;When changing to a larger dtype, its size must be a divisor &quot;</span>
2310+
<span class="s2">&quot;of the total size in bytes of the last axis of the array&quot;</span>
2311+
<span class="p">)</span>
2312+
2313+
<span class="c1"># normalize shape whenever itemsize changes</span>
2314+
<span class="n">new_sh</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">old_sh</span><span class="p">)</span>
2315+
<span class="n">new_sh</span><span class="p">[</span><span class="n">axis</span><span class="p">]</span> <span class="o">=</span> <span class="n">new_dim</span> <span class="o">//</span> <span class="n">new_itemsz</span>
2316+
<span class="n">new_sh</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">new_sh</span><span class="p">)</span>
2317+
2318+
<span class="k">return</span> <span class="n">dpnp_array</span><span class="p">(</span>
2319+
<span class="n">new_sh</span><span class="p">,</span>
2320+
<span class="n">dtype</span><span class="o">=</span><span class="n">new_dt</span><span class="p">,</span>
2321+
<span class="n">buffer</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
2322+
<span class="n">strides</span><span class="o">=</span><span class="n">new_strides</span><span class="p">,</span>
2323+
<span class="p">)</span></div>
2324+
</div>
21992325

2200-
<span class="c1"># &#39;view&#39;</span>
22012326
</pre></div>
22022327

22032328
</div>

_modules/dpnp/dpnp_array_api_info.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@
1414
</script>
1515

1616
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
17-
<title>dpnp.dpnp_array_api_info &mdash; Data Parallel Extension for NumPy 0.19.0dev1+2.gd15d395fe58 documentation</title>
17+
<title>dpnp.dpnp_array_api_info &mdash; Data Parallel Extension for NumPy 0.19.0dev1+3.g9b73305babb documentation</title>
1818
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=03e43079" />
1919
<link rel="stylesheet" type="text/css" href="../../_static/css/theme.css?v=e59714d7" />
2020

2121

2222
<script src="../../_static/jquery.js?v=5d32c60e"></script>
2323
<script src="../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
24-
<script src="../../_static/documentation_options.js?v=516e0b3f"></script>
24+
<script src="../../_static/documentation_options.js?v=2d9cbcf6"></script>
2525
<script src="../../_static/doctools.js?v=9bcbadda"></script>
2626
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
2727
<script src="../../_static/js/theme.js"></script>

_modules/dpnp/dpnp_flatiter.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@
1414
</script>
1515

1616
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
17-
<title>dpnp.dpnp_flatiter &mdash; Data Parallel Extension for NumPy 0.19.0dev1+2.gd15d395fe58 documentation</title>
17+
<title>dpnp.dpnp_flatiter &mdash; Data Parallel Extension for NumPy 0.19.0dev1+3.g9b73305babb documentation</title>
1818
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=03e43079" />
1919
<link rel="stylesheet" type="text/css" href="../../_static/css/theme.css?v=e59714d7" />
2020

2121

2222
<script src="../../_static/jquery.js?v=5d32c60e"></script>
2323
<script src="../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
24-
<script src="../../_static/documentation_options.js?v=516e0b3f"></script>
24+
<script src="../../_static/documentation_options.js?v=2d9cbcf6"></script>
2525
<script src="../../_static/doctools.js?v=9bcbadda"></script>
2626
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
2727
<script src="../../_static/js/theme.js"></script>

_modules/dpnp/dpnp_iface.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@
1414
</script>
1515

1616
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
17-
<title>dpnp.dpnp_iface &mdash; Data Parallel Extension for NumPy 0.19.0dev1+2.gd15d395fe58 documentation</title>
17+
<title>dpnp.dpnp_iface &mdash; Data Parallel Extension for NumPy 0.19.0dev1+3.g9b73305babb documentation</title>
1818
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=03e43079" />
1919
<link rel="stylesheet" type="text/css" href="../../_static/css/theme.css?v=e59714d7" />
2020

2121

2222
<script src="../../_static/jquery.js?v=5d32c60e"></script>
2323
<script src="../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
24-
<script src="../../_static/documentation_options.js?v=516e0b3f"></script>
24+
<script src="../../_static/documentation_options.js?v=2d9cbcf6"></script>
2525
<script src="../../_static/doctools.js?v=9bcbadda"></script>
2626
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
2727
<script src="../../_static/js/theme.js"></script>

_modules/dpnp/dpnp_iface_arraycreation.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@
1414
</script>
1515

1616
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
17-
<title>dpnp.dpnp_iface_arraycreation &mdash; Data Parallel Extension for NumPy 0.19.0dev1+2.gd15d395fe58 documentation</title>
17+
<title>dpnp.dpnp_iface_arraycreation &mdash; Data Parallel Extension for NumPy 0.19.0dev1+3.g9b73305babb documentation</title>
1818
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=03e43079" />
1919
<link rel="stylesheet" type="text/css" href="../../_static/css/theme.css?v=e59714d7" />
2020

2121

2222
<script src="../../_static/jquery.js?v=5d32c60e"></script>
2323
<script src="../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
24-
<script src="../../_static/documentation_options.js?v=516e0b3f"></script>
24+
<script src="../../_static/documentation_options.js?v=2d9cbcf6"></script>
2525
<script src="../../_static/doctools.js?v=9bcbadda"></script>
2626
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
2727
<script src="../../_static/js/theme.js"></script>

_modules/dpnp/dpnp_iface_bitwise.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@
1414
</script>
1515

1616
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
17-
<title>dpnp.dpnp_iface_bitwise &mdash; Data Parallel Extension for NumPy 0.19.0dev1+2.gd15d395fe58 documentation</title>
17+
<title>dpnp.dpnp_iface_bitwise &mdash; Data Parallel Extension for NumPy 0.19.0dev1+3.g9b73305babb documentation</title>
1818
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=03e43079" />
1919
<link rel="stylesheet" type="text/css" href="../../_static/css/theme.css?v=e59714d7" />
2020

2121

2222
<script src="../../_static/jquery.js?v=5d32c60e"></script>
2323
<script src="../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
24-
<script src="../../_static/documentation_options.js?v=516e0b3f"></script>
24+
<script src="../../_static/documentation_options.js?v=2d9cbcf6"></script>
2525
<script src="../../_static/doctools.js?v=9bcbadda"></script>
2626
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
2727
<script src="../../_static/js/theme.js"></script>

0 commit comments

Comments
 (0)