Enhance tests coverage and report output

This commit is contained in:
2024-04-30 14:00:24 +02:00
parent b4a222b100
commit 3c7382a93a
947 changed files with 376596 additions and 3921 deletions

View File

@@ -0,0 +1,82 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/CheckMemoryFormat.h - functions</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - CheckMemoryFormat.h<span style="font-size: 80%;"> (<a href="CheckMemoryFormat.h.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryMed">83.3&nbsp;%</td>
<td class="headerCovTableEntry">6</td>
<td class="headerCovTableEntry">5</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="CheckMemoryFormat.h.func.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="CheckMemoryFormat.h.gcov.html#L4">_ZN3c104impl46check_tensor_options_and_extract_memory_formatERKNS_13TensorOptionsENS_8optionalINS_12MemoryFormatEEE</a></td>
<td class="coverFnHi">401402</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,82 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/CheckMemoryFormat.h - functions</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - CheckMemoryFormat.h<span style="font-size: 80%;"> (<a href="CheckMemoryFormat.h.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryMed">83.3&nbsp;%</td>
<td class="headerCovTableEntry">6</td>
<td class="headerCovTableEntry">5</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="CheckMemoryFormat.h.func-c.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="CheckMemoryFormat.h.gcov.html#L4">_ZN3c104impl46check_tensor_options_and_extract_memory_formatERKNS_13TensorOptionsENS_8optionalINS_12MemoryFormatEEE</a></td>
<td class="coverFnHi">401402</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,101 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/CheckMemoryFormat.h</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - CheckMemoryFormat.h<span style="font-size: 80%;"> (source / <a href="CheckMemoryFormat.h.func-c.html">functions</a>)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryMed">83.3&nbsp;%</td>
<td class="headerCovTableEntry">6</td>
<td class="headerCovTableEntry">5</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Line data Source code</pre>
<pre class="source">
<span id="L1"><span class="lineNum"> 1</span> : #include &lt;c10/core/TensorOptions.h&gt;</span>
<span id="L2"><span class="lineNum"> 2</span> : </span>
<span id="L3"><span class="lineNum"> 3</span> : namespace c10 { namespace impl {</span>
<span id="L4"><span class="lineNum"> 4</span> : </span>
<span id="L5"><span class="lineNum"> 5</span> : inline c10::optional&lt;MemoryFormat&gt;</span>
<span id="L6"><span class="lineNum"> 6</span> <span class="tlaGNC tlaBgGNC"> 401402 : check_tensor_options_and_extract_memory_format(</span></span>
<span id="L7"><span class="lineNum"> 7</span> : const TensorOptions&amp; options,</span>
<span id="L8"><span class="lineNum"> 8</span> : c10::optional&lt;MemoryFormat&gt; memory_format) {</span>
<span id="L9"><span class="lineNum"> 9</span> <span class="tlaGNC"> 401402 : TORCH_CHECK(</span></span>
<span id="L10"><span class="lineNum"> 10</span> : options.requires_grad_opt() == c10::nullopt ||</span>
<span id="L11"><span class="lineNum"> 11</span> : options.requires_grad_opt().value() == false,</span>
<span id="L12"><span class="lineNum"> 12</span> : &quot;Operators taking TensorOptions cannot take a TensorOptions with &quot;</span>
<span id="L13"><span class="lineNum"> 13</span> : &quot;options.requires_grad set as true. This isn't implemented yet.&quot;);</span>
<span id="L14"><span class="lineNum"> 14</span> <span class="tlaGNC"> 401402 : TORCH_CHECK(</span></span>
<span id="L15"><span class="lineNum"> 15</span> : !(options.has_memory_format() &amp;&amp; memory_format.has_value()),</span>
<span id="L16"><span class="lineNum"> 16</span> : &quot;Cannot set memory_format both in TensorOptions and explicit argument; please delete &quot;</span>
<span id="L17"><span class="lineNum"> 17</span> : &quot;the redundant setter.&quot;);</span>
<span id="L18"><span class="lineNum"> 18</span> <span class="tlaGNC"> 401402 : if (memory_format.has_value()) {</span></span>
<span id="L19"><span class="lineNum"> 19</span> <span class="tlaUNC tlaBgUNC"> 0 : return memory_format;</span></span>
<span id="L20"><span class="lineNum"> 20</span> : } else {</span>
<span id="L21"><span class="lineNum"> 21</span> <span class="tlaGNC tlaBgGNC"> 401402 : return options.memory_format_opt();</span></span>
<span id="L22"><span class="lineNum"> 22</span> : }</span>
<span id="L23"><span class="lineNum"> 23</span> : }</span>
<span id="L24"><span class="lineNum"> 24</span> : </span>
<span id="L25"><span class="lineNum"> 25</span> : }} // namespace impl namespace c10</span>
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,82 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/Formatting.h - functions</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - Formatting.h<span style="font-size: 80%;"> (<a href="Formatting.h.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">2</td>
<td class="headerCovTableEntry">2</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="Formatting.h.func.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="Formatting.h.gcov.html#L19">_ZN2atlsERSoRKNS_6TensorE</a></td>
<td class="coverFnHi">20</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,82 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/Formatting.h - functions</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - Formatting.h<span style="font-size: 80%;"> (<a href="Formatting.h.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">2</td>
<td class="headerCovTableEntry">2</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="Formatting.h.func-c.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="Formatting.h.gcov.html#L19">_ZN2atlsERSoRKNS_6TensorE</a></td>
<td class="coverFnHi">20</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,101 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/Formatting.h</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - Formatting.h<span style="font-size: 80%;"> (source / <a href="Formatting.h.func-c.html">functions</a>)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">2</td>
<td class="headerCovTableEntry">2</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">1</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Line data Source code</pre>
<pre class="source">
<span id="L1"><span class="lineNum"> 1</span> : #pragma once</span>
<span id="L2"><span class="lineNum"> 2</span> : </span>
<span id="L3"><span class="lineNum"> 3</span> : #include &lt;ostream&gt;</span>
<span id="L4"><span class="lineNum"> 4</span> : #include &lt;string&gt;</span>
<span id="L5"><span class="lineNum"> 5</span> : </span>
<span id="L6"><span class="lineNum"> 6</span> : #include &lt;c10/core/Scalar.h&gt;</span>
<span id="L7"><span class="lineNum"> 7</span> : #include &lt;ATen/core/Tensor.h&gt;</span>
<span id="L8"><span class="lineNum"> 8</span> : </span>
<span id="L9"><span class="lineNum"> 9</span> : namespace c10 {</span>
<span id="L10"><span class="lineNum"> 10</span> : TORCH_API std::ostream&amp; operator&lt;&lt;(std::ostream&amp; out, Backend b);</span>
<span id="L11"><span class="lineNum"> 11</span> : TORCH_API std::ostream&amp; operator&lt;&lt;(std::ostream &amp; out, const Scalar&amp; s);</span>
<span id="L12"><span class="lineNum"> 12</span> : TORCH_API std::string toString(const Scalar&amp; s);</span>
<span id="L13"><span class="lineNum"> 13</span> : }</span>
<span id="L14"><span class="lineNum"> 14</span> : namespace at {</span>
<span id="L15"><span class="lineNum"> 15</span> : </span>
<span id="L16"><span class="lineNum"> 16</span> : TORCH_API std::ostream&amp; operator&lt;&lt;(std::ostream&amp; out, const DeprecatedTypeProperties&amp; t);</span>
<span id="L17"><span class="lineNum"> 17</span> : TORCH_API std::ostream&amp; print(</span>
<span id="L18"><span class="lineNum"> 18</span> : std::ostream&amp; stream,</span>
<span id="L19"><span class="lineNum"> 19</span> : const Tensor&amp; tensor,</span>
<span id="L20"><span class="lineNum"> 20</span> : int64_t linesize);</span>
<span id="L21"><span class="lineNum"> 21</span> <span class="tlaGNC tlaBgGNC"> 20 : static inline std::ostream&amp; operator&lt;&lt;(std::ostream &amp; out, const Tensor &amp; t) {</span></span>
<span id="L22"><span class="lineNum"> 22</span> <span class="tlaGNC"> 20 : return print(out,t,80);</span></span>
<span id="L23"><span class="lineNum"> 23</span> : }</span>
<span id="L24"><span class="lineNum"> 24</span> : TORCH_API void print(const Tensor &amp; t, int64_t linesize=80);</span>
<span id="L25"><span class="lineNum"> 25</span> : }</span>
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,96 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/IListRef.h - functions</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - IListRef.h<span style="font-size: 80%;"> (<a href="IListRef.h.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">5</td>
<td class="headerCovTableEntry">5</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">3</td>
<td class="headerCovTableEntry">3</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="IListRef.h.func.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="IListRef.h.gcov.html#L620">_ZN3c108IListRefIN2at6TensorEE7PayloadC2Ev</a></td>
<td class="coverFnHi">378</td>
</tr>
<tr>
<td class="coverFn"><a href="IListRef.h.gcov.html#L621">_ZN3c108IListRefIN2at6TensorEE7PayloadD2Ev</a></td>
<td class="coverFnHi">378</td>
</tr>
<tr>
<td class="coverFn"><a href="IListRef.h.gcov.html#L534">_ZN3c108IListRefIN2at6TensorEEC2ERKSt16initializer_listIS2_E</a></td>
<td class="coverFnHi">378</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,96 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/IListRef.h - functions</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - IListRef.h<span style="font-size: 80%;"> (<a href="IListRef.h.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">5</td>
<td class="headerCovTableEntry">5</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">3</td>
<td class="headerCovTableEntry">3</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="IListRef.h.func-c.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="IListRef.h.gcov.html#L620">_ZN3c108IListRefIN2at6TensorEE7PayloadC2Ev</a></td>
<td class="coverFnHi">378</td>
</tr>
<tr>
<td class="coverFn"><a href="IListRef.h.gcov.html#L621">_ZN3c108IListRefIN2at6TensorEE7PayloadD2Ev</a></td>
<td class="coverFnHi">378</td>
</tr>
<tr>
<td class="coverFn"><a href="IListRef.h.gcov.html#L534">_ZN3c108IListRefIN2at6TensorEEC2ERKSt16initializer_listIS2_E</a></td>
<td class="coverFnHi">378</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,708 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/IListRef.h</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - IListRef.h<span style="font-size: 80%;"> (source / <a href="IListRef.h.func-c.html">functions</a>)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">5</td>
<td class="headerCovTableEntry">5</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">3</td>
<td class="headerCovTableEntry">3</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Line data Source code</pre>
<pre class="source">
<span id="L1"><span class="lineNum"> 1</span> : #pragma once</span>
<span id="L2"><span class="lineNum"> 2</span> : </span>
<span id="L3"><span class="lineNum"> 3</span> : #include &lt;ATen/core/ivalue_to.h&gt;</span>
<span id="L4"><span class="lineNum"> 4</span> : #include &lt;c10/util/ArrayRef.h&gt;</span>
<span id="L5"><span class="lineNum"> 5</span> : #include &lt;c10/util/Exception.h&gt;</span>
<span id="L6"><span class="lineNum"> 6</span> : </span>
<span id="L7"><span class="lineNum"> 7</span> : #include &lt;functional&gt;</span>
<span id="L8"><span class="lineNum"> 8</span> : #include &lt;initializer_list&gt;</span>
<span id="L9"><span class="lineNum"> 9</span> : #include &lt;iterator&gt;</span>
<span id="L10"><span class="lineNum"> 10</span> : #include &lt;type_traits&gt;</span>
<span id="L11"><span class="lineNum"> 11</span> : </span>
<span id="L12"><span class="lineNum"> 12</span> : /*</span>
<span id="L13"><span class="lineNum"> 13</span> : * [Note: IListRef]</span>
<span id="L14"><span class="lineNum"> 14</span> : * Wrapper around different API containers (e.g. boxed and unboxed).</span>
<span id="L15"><span class="lineNum"> 15</span> : *</span>
<span id="L16"><span class="lineNum"> 16</span> : * What is it?</span>
<span id="L17"><span class="lineNum"> 17</span> : * ===========</span>
<span id="L18"><span class="lineNum"> 18</span> : * It is a tagged union of both boxed and unboxed API containers.</span>
<span id="L19"><span class="lineNum"> 19</span> : * Working implementations:</span>
<span id="L20"><span class="lineNum"> 20</span> : *</span>
<span id="L21"><span class="lineNum"> 21</span> : * - `IListRef&lt;at::Tensor&gt;`</span>
<span id="L22"><span class="lineNum"> 22</span> : * - `IListRef&lt;at::OptionalTensorRef&gt;`</span>
<span id="L23"><span class="lineNum"> 23</span> : *</span>
<span id="L24"><span class="lineNum"> 24</span> : * Note that `IListRef` is a view type. Meaning that it won't own the</span>
<span id="L25"><span class="lineNum"> 25</span> : * tensors it holds. It's intended to be used only as argument parameters.</span>
<span id="L26"><span class="lineNum"> 26</span> : * Specifically, where these 2 worlds overlap.</span>
<span id="L27"><span class="lineNum"> 27</span> : *</span>
<span id="L28"><span class="lineNum"> 28</span> : * What is this for?</span>
<span id="L29"><span class="lineNum"> 29</span> : * =================</span>
<span id="L30"><span class="lineNum"> 30</span> : * Historically, PyTorch has maintained 2 different APIs: the unboxed</span>
<span id="L31"><span class="lineNum"> 31</span> : * (called from C++ API and Python eager mode) and boxed APIs (called</span>
<span id="L32"><span class="lineNum"> 32</span> : * from the TorchScript JIT, mobile interpreter, and boxed fallbacks).</span>
<span id="L33"><span class="lineNum"> 33</span> : *</span>
<span id="L34"><span class="lineNum"> 34</span> : * Calling unboxed kernels from the boxed &quot;world&quot; and vice-versa may</span>
<span id="L35"><span class="lineNum"> 35</span> : * result in non-negligible overhead. Lists are one of those types:</span>
<span id="L36"><span class="lineNum"> 36</span> : *</span>
<span id="L37"><span class="lineNum"> 37</span> : * - Boxed world: `c10::List`</span>
<span id="L38"><span class="lineNum"> 38</span> : * - Unboxed world: `c10::ArrayRef`</span>
<span id="L39"><span class="lineNum"> 39</span> : *</span>
<span id="L40"><span class="lineNum"> 40</span> : * In this context, `c10::IListRef` solves this problem by wrapping those</span>
<span id="L41"><span class="lineNum"> 41</span> : * 2 container types, so that we don't need to convert from one to</span>
<span id="L42"><span class="lineNum"> 42</span> : * the other.</span>
<span id="L43"><span class="lineNum"> 43</span> : *</span>
<span id="L44"><span class="lineNum"> 44</span> : * (see https://github.com/pytorch/pytorch/issues/66328)</span>
<span id="L45"><span class="lineNum"> 45</span> : *</span>
<span id="L46"><span class="lineNum"> 46</span> : * What does it do?</span>
<span id="L47"><span class="lineNum"> 47</span> : * ================</span>
<span id="L48"><span class="lineNum"> 48</span> : * This container wraps around the different tagged containers</span>
<span id="L49"><span class="lineNum"> 49</span> : * (currently, only boxed and unboxed), without incurring in extra</span>
<span id="L50"><span class="lineNum"> 50</span> : * overhead for converting from one to another. It does so while</span>
<span id="L51"><span class="lineNum"> 51</span> : * exposing usual container methods, which dispatch to corresponding</span>
<span id="L52"><span class="lineNum"> 52</span> : * implementations.</span>
<span id="L53"><span class="lineNum"> 53</span> : *</span>
<span id="L54"><span class="lineNum"> 54</span> : * While it works with different container types, it introduces</span>
<span id="L55"><span class="lineNum"> 55</span> : * overhead for repeatedly calling member functions (since those will</span>
<span id="L56"><span class="lineNum"> 56</span> : * get dispatched, again). Therefore, you should only use it to iterate</span>
<span id="L57"><span class="lineNum"> 57</span> : * through the list up to one time. If you need to do more complex things,</span>
<span id="L58"><span class="lineNum"> 58</span> : * call `materialize()` first.</span>
<span id="L59"><span class="lineNum"> 59</span> : *</span>
<span id="L60"><span class="lineNum"> 60</span> : * Adding support for a new Tag</span>
<span id="L61"><span class="lineNum"> 61</span> : * ============================</span>
<span id="L62"><span class="lineNum"> 62</span> : * Suppose we want to add a new tag: `Chest`. Here are the steps</span>
<span id="L63"><span class="lineNum"> 63</span> : * we would have to go through:</span>
<span id="L64"><span class="lineNum"> 64</span> : *</span>
<span id="L65"><span class="lineNum"> 65</span> : * 1. Add a line for it in the macro `TORCH_ILISTREF_FORALL_TAGS`.</span>
<span id="L66"><span class="lineNum"> 66</span> : *</span>
<span id="L67"><span class="lineNum"> 67</span> : * #define TORCH_ILISTREF_FORALL_TAGS(_, ...) \</span>
<span id="L68"><span class="lineNum"> 68</span> : * ...</span>
<span id="L69"><span class="lineNum"> 69</span> : * _(Chest, ##__VA_ARGS__)</span>
<span id="L70"><span class="lineNum"> 70</span> : *</span>
<span id="L71"><span class="lineNum"> 71</span> : * 2. Add type aliases, union members, and constructors.</span>
<span id="L72"><span class="lineNum"> 72</span> : *</span>
<span id="L73"><span class="lineNum"> 73</span> : * template &lt;typename T&gt;</span>
<span id="L74"><span class="lineNum"> 74</span> : * class IListRef {</span>
<span id="L75"><span class="lineNum"> 75</span> : * ...</span>
<span id="L76"><span class="lineNum"> 76</span> : * using chest_type =</span>
<span id="L77"><span class="lineNum"> 77</span> : * typename detail::IListRefTagImpl&lt;T, IListRefTag::Chest&gt;::list_type;</span>
<span id="L78"><span class="lineNum"> 78</span> : * ...</span>
<span id="L79"><span class="lineNum"> 79</span> : * IListRef(...) : tag_(IListRefTag::Chest) {</span>
<span id="L80"><span class="lineNum"> 80</span> : * ...</span>
<span id="L81"><span class="lineNum"> 81</span> : * }</span>
<span id="L82"><span class="lineNum"> 82</span> : * ...</span>
<span id="L83"><span class="lineNum"> 83</span> : * union Payload {</span>
<span id="L84"><span class="lineNum"> 84</span> : * ...</span>
<span id="L85"><span class="lineNum"> 85</span> : * chest_type chest;</span>
<span id="L86"><span class="lineNum"> 86</span> : * ...</span>
<span id="L87"><span class="lineNum"> 87</span> : * };</span>
<span id="L88"><span class="lineNum"> 88</span> : * ...</span>
<span id="L89"><span class="lineNum"> 89</span> : * };</span>
<span id="L90"><span class="lineNum"> 90</span> : *</span>
<span id="L91"><span class="lineNum"> 91</span> : * 3. Add a default implementation for it (in 'IListRef_inl.h'). It's</span>
<span id="L92"><span class="lineNum"> 92</span> : * preferable to make the default implementation work for `T = Tensor`</span>
<span id="L93"><span class="lineNum"> 93</span> : * (both `Unboxed` and `Boxed` do it).</span>
<span id="L94"><span class="lineNum"> 94</span> : *</span>
<span id="L95"><span class="lineNum"> 95</span> : * template &lt;typename T, typename ListElemT&gt;</span>
<span id="L96"><span class="lineNum"> 96</span> : * class IListRefTagImplBase&lt;IListRefTag::Chest, T, ListElemT&gt; {</span>
<span id="L97"><span class="lineNum"> 97</span> : * public:</span>
<span id="L98"><span class="lineNum"> 98</span> : * using elem_type = ListElemT;</span>
<span id="L99"><span class="lineNum"> 99</span> : * using list_type = ChestContainer&lt;elem_type&gt;;</span>
<span id="L100"><span class="lineNum"> 100</span> : *</span>
<span id="L101"><span class="lineNum"> 101</span> : * static const list_type&amp; unwrap(const IListRef&lt;T&gt;&amp; ilist) { ... }</span>
<span id="L102"><span class="lineNum"> 102</span> : *</span>
<span id="L103"><span class="lineNum"> 103</span> : * static typename list_type::const_iterator&amp; unwrap(</span>
<span id="L104"><span class="lineNum"> 104</span> : * IListRefIterator&lt;T&gt;&amp; it) { ... }</span>
<span id="L105"><span class="lineNum"> 105</span> : *</span>
<span id="L106"><span class="lineNum"> 106</span> : * static const typename list_type::const_iterator&amp; unwrap(</span>
<span id="L107"><span class="lineNum"> 107</span> : * const IListRefIterator&lt;T&gt;&amp; it) { ... }</span>
<span id="L108"><span class="lineNum"> 108</span> : *</span>
<span id="L109"><span class="lineNum"> 109</span> : * static IListRefConstRef&lt;T&gt; iterator_get(</span>
<span id="L110"><span class="lineNum"> 110</span> : * const typename list_type::const_iterator&amp; it) { ... }</span>
<span id="L111"><span class="lineNum"> 111</span> : * }</span>
<span id="L112"><span class="lineNum"> 112</span> : *</span>
<span id="L113"><span class="lineNum"> 113</span> : * 4. Add an specialization for each of the already supported types.</span>
<span id="L114"><span class="lineNum"> 114</span> : * Finally, for consistency, add them to the tracking list.</span>
<span id="L115"><span class="lineNum"> 115</span> : * (see [Note: IListRefTagImpl Specializations])</span>
<span id="L116"><span class="lineNum"> 116</span> : *</span>
<span id="L117"><span class="lineNum"> 117</span> : * template &lt;&gt;</span>
<span id="L118"><span class="lineNum"> 118</span> : * class IListRefTagImpl&lt;IListRefTag::Chest, at::Tensor&gt;</span>
<span id="L119"><span class="lineNum"> 119</span> : * : public IListRefTagImplBase&lt;IListRefTag::Chest, at::Tensor&gt; {};</span>
<span id="L120"><span class="lineNum"> 120</span> : *</span>
<span id="L121"><span class="lineNum"> 121</span> : * Adding support for a new Type</span>
<span id="L122"><span class="lineNum"> 122</span> : * =============================</span>
<span id="L123"><span class="lineNum"> 123</span> : * Suppose we want to add support for a new type: `Matrix`.</span>
<span id="L124"><span class="lineNum"> 124</span> : * Here are the steps we would have to go through:</span>
<span id="L125"><span class="lineNum"> 125</span> : *</span>
<span id="L126"><span class="lineNum"> 126</span> : * 1. Add an specialization for each of the existing tags.</span>
<span id="L127"><span class="lineNum"> 127</span> : * For consistency, add them to the tracking list.</span>
<span id="L128"><span class="lineNum"> 128</span> : * (see [Note: IListRefTagImpl Specializations])</span>
<span id="L129"><span class="lineNum"> 129</span> : *</span>
<span id="L130"><span class="lineNum"> 130</span> : * template &lt;&gt;</span>
<span id="L131"><span class="lineNum"> 131</span> : * class IListRefTagImpl&lt;IListRefTag::Unboxed, Matrix&gt;</span>
<span id="L132"><span class="lineNum"> 132</span> : * : public IListRefTagImplBase&lt;IListRefTag::Unboxed, Matrix&gt; {};</span>
<span id="L133"><span class="lineNum"> 133</span> : *</span>
<span id="L134"><span class="lineNum"> 134</span> : * template &lt;&gt;</span>
<span id="L135"><span class="lineNum"> 135</span> : * class IListRefTagImpl&lt;Matrix, IListRefTag::Boxed&gt;</span>
<span id="L136"><span class="lineNum"> 136</span> : * : public IListRefTagImplBase&lt;IListRefTag::Boxed, Matrix&gt; {};</span>
<span id="L137"><span class="lineNum"> 137</span> : *</span>
<span id="L138"><span class="lineNum"> 138</span> : * Common Problems</span>
<span id="L139"><span class="lineNum"> 139</span> : * ===============</span>
<span id="L140"><span class="lineNum"> 140</span> : * 1. One of `IListRef(Iterator)` methods are failing to compile.</span>
<span id="L141"><span class="lineNum"> 141</span> : *</span>
<span id="L142"><span class="lineNum"> 142</span> : * That may be happening because the container type you added</span>
<span id="L143"><span class="lineNum"> 143</span> : * is not compatible with the code written for that method. If</span>
<span id="L144"><span class="lineNum"> 144</span> : * that's true, then you might have to transform that code into</span>
<span id="L145"><span class="lineNum"> 145</span> : * a static method call (see `List::operator[]` method).</span>
<span id="L146"><span class="lineNum"> 146</span> : *</span>
<span id="L147"><span class="lineNum"> 147</span> : * 2. Can't make `IListRefIterator&lt;T&gt;::operator*` return a const-reference.</span>
<span id="L148"><span class="lineNum"> 148</span> : *</span>
<span id="L149"><span class="lineNum"> 149</span> : * First, keep in mind that we assume that boxed containers will</span>
<span id="L150"><span class="lineNum"> 150</span> : * have to deal with `IValue` (e.g. `c10::List`). In this context,</span>
<span id="L151"><span class="lineNum"> 151</span> : * what may be happening is that `IValue` doesn't store internally</span>
<span id="L152"><span class="lineNum"> 152</span> : * your type `T`. Instead, it constructs a type new `T` everytime</span>
<span id="L153"><span class="lineNum"> 153</span> : * you try to get `T` for it (see `IListRef&lt;at::OptinalTensorRef&gt;`).</span>
<span id="L154"><span class="lineNum"> 154</span> : */</span>
<span id="L155"><span class="lineNum"> 155</span> : </span>
<span id="L156"><span class="lineNum"> 156</span> : namespace c10 {</span>
<span id="L157"><span class="lineNum"> 157</span> : template &lt;typename T&gt;</span>
<span id="L158"><span class="lineNum"> 158</span> : class IListRef;</span>
<span id="L159"><span class="lineNum"> 159</span> : </span>
<span id="L160"><span class="lineNum"> 160</span> : /*</span>
<span id="L161"><span class="lineNum"> 161</span> : * Applies arbitrary macros to each `IListRefTag`.</span>
<span id="L162"><span class="lineNum"> 162</span> : */</span>
<span id="L163"><span class="lineNum"> 163</span> : #define TORCH_ILISTREF_FORALL_TAGS(_, ...) \</span>
<span id="L164"><span class="lineNum"> 164</span> : _(Unboxed, ##__VA_ARGS__) \</span>
<span id="L165"><span class="lineNum"> 165</span> : _(Boxed, ##__VA_ARGS__) \</span>
<span id="L166"><span class="lineNum"> 166</span> : _(Materialized, ##__VA_ARGS__)</span>
<span id="L167"><span class="lineNum"> 167</span> : </span>
<span id="L168"><span class="lineNum"> 168</span> : /*</span>
<span id="L169"><span class="lineNum"> 169</span> : * Defines a &quot;switch-case&quot; for `TAG`. Inside, it executes `BODY`,</span>
<span id="L170"><span class="lineNum"> 170</span> : * while bringing to scope:</span>
<span id="L171"><span class="lineNum"> 171</span> : *</span>
<span id="L172"><span class="lineNum"> 172</span> : * - `ImplT`: the implementation class for `TAG`</span>
<span id="L173"><span class="lineNum"> 173</span> : * - `this_`: the result of unwrapping `this`</span>
<span id="L174"><span class="lineNum"> 174</span> : */</span>
<span id="L175"><span class="lineNum"> 175</span> : #define TORCH_ILISTREF_UNWRAP_CASE(TAG, BODY) \</span>
<span id="L176"><span class="lineNum"> 176</span> : case c10::IListRefTag::TAG: { \</span>
<span id="L177"><span class="lineNum"> 177</span> : using ImplT = c10::detail::IListRefTagImpl&lt;IListRefTag::TAG, T&gt;; \</span>
<span id="L178"><span class="lineNum"> 178</span> : auto&amp; this_ = ImplT::unwrap(*this); \</span>
<span id="L179"><span class="lineNum"> 179</span> : BODY \</span>
<span id="L180"><span class="lineNum"> 180</span> : } break;</span>
<span id="L181"><span class="lineNum"> 181</span> : </span>
<span id="L182"><span class="lineNum"> 182</span> : /*</span>
<span id="L183"><span class="lineNum"> 183</span> : * Dispatches the unwrap call, depending on `TAG`, followed by</span>
<span id="L184"><span class="lineNum"> 184</span> : * the execution of `BODY`. It aborts if `TAG` is not a `IListRefTag`.</span>
<span id="L185"><span class="lineNum"> 185</span> : *</span>
<span id="L186"><span class="lineNum"> 186</span> : * This macro is useful because it allows us to handle different</span>
<span id="L187"><span class="lineNum"> 187</span> : * types (that correspond to different tags) to be implemented</span>
<span id="L188"><span class="lineNum"> 188</span> : * only once. We can do it even when the implementation of the</span>
<span id="L189"><span class="lineNum"> 189</span> : * different tags aren't syntatically the same, by dispatching</span>
<span id="L190"><span class="lineNum"> 190</span> : * it to a function (e.g. `ImplT::&lt;dispatch-function&gt;(this_)`).</span>
<span id="L191"><span class="lineNum"> 191</span> : */</span>
<span id="L192"><span class="lineNum"> 192</span> : #define TORCH_ILISTREF_UNWRAP(TAG, BODY) \</span>
<span id="L193"><span class="lineNum"> 193</span> : switch (TAG) { \</span>
<span id="L194"><span class="lineNum"> 194</span> : TORCH_ILISTREF_FORALL_TAGS(TORCH_ILISTREF_UNWRAP_CASE, BODY) \</span>
<span id="L195"><span class="lineNum"> 195</span> : break; \</span>
<span id="L196"><span class="lineNum"> 196</span> : default: \</span>
<span id="L197"><span class="lineNum"> 197</span> : TORCH_INTERNAL_ASSERT(false, &quot;invalid IListRef tag.&quot;); \</span>
<span id="L198"><span class="lineNum"> 198</span> : }</span>
<span id="L199"><span class="lineNum"> 199</span> : </span>
<span id="L200"><span class="lineNum"> 200</span> : enum class IListRefTag {</span>
<span id="L201"><span class="lineNum"> 201</span> : #define DEFINE_TAG(tag, ...) tag,</span>
<span id="L202"><span class="lineNum"> 202</span> : TORCH_ILISTREF_FORALL_TAGS(DEFINE_TAG)</span>
<span id="L203"><span class="lineNum"> 203</span> : #undef DEFINE_TAG</span>
<span id="L204"><span class="lineNum"> 204</span> : None</span>
<span id="L205"><span class="lineNum"> 205</span> : };</span>
<span id="L206"><span class="lineNum"> 206</span> : </span>
<span id="L207"><span class="lineNum"> 207</span> : namespace detail {</span>
<span id="L208"><span class="lineNum"> 208</span> : /*</span>
<span id="L209"><span class="lineNum"> 209</span> : * Type alias that specifies whether we return a reference or a copy of `T`.</span>
<span id="L210"><span class="lineNum"> 210</span> : *</span>
<span id="L211"><span class="lineNum"> 211</span> : * What is this for?</span>
<span id="L212"><span class="lineNum"> 212</span> : * =================</span>
<span id="L213"><span class="lineNum"> 213</span> : * Since values in the boxed world are represented by an `IValue`, we also</span>
<span id="L214"><span class="lineNum"> 214</span> : * depend on whether it can be converted to a const-reference (`Tensor`) or</span>
<span id="L215"><span class="lineNum"> 215</span> : * has to create a new copy of `T` (`OptionalTensorRef`).</span>
<span id="L216"><span class="lineNum"> 216</span> : */</span>
<span id="L217"><span class="lineNum"> 217</span> : template &lt;typename T&gt;</span>
<span id="L218"><span class="lineNum"> 218</span> : using IListRefConstRef = typename ivalue_to_const_ref_overload_return&lt;T&gt;::type;</span>
<span id="L219"><span class="lineNum"> 219</span> : </span>
<span id="L220"><span class="lineNum"> 220</span> : /*</span>
<span id="L221"><span class="lineNum"> 221</span> : * Interface that implements key functions for each `IListRefTag` type.</span>
<span id="L222"><span class="lineNum"> 222</span> : *</span>
<span id="L223"><span class="lineNum"> 223</span> : * What is this for?</span>
<span id="L224"><span class="lineNum"> 224</span> : * =================</span>
<span id="L225"><span class="lineNum"> 225</span> : * Given an `IListRef(Iterator)&lt;T&gt;`, some methods have to be implemented</span>
<span id="L226"><span class="lineNum"> 226</span> : * differently for each `TAG`. Therefore, the methods inside this class</span>
<span id="L227"><span class="lineNum"> 227</span> : * are used as dispatch targets for the different `IListRefTag` values.</span>
<span id="L228"><span class="lineNum"> 228</span> : *</span>
<span id="L229"><span class="lineNum"> 229</span> : * You should create an specialization of this class for each possible</span>
<span id="L230"><span class="lineNum"> 230</span> : * combination of `IListRefTag` type (except `None`) and element types</span>
<span id="L231"><span class="lineNum"> 231</span> : * (e.g. `Tensor`).</span>
<span id="L232"><span class="lineNum"> 232</span> : *</span>
<span id="L233"><span class="lineNum"> 233</span> : * What does it do?</span>
<span id="L234"><span class="lineNum"> 234</span> : * ================</span>
<span id="L235"><span class="lineNum"> 235</span> : * 1. defines static methods to be used as dispatch targets by both</span>
<span id="L236"><span class="lineNum"> 236</span> : * `IListRef&lt;T&gt;` and `IListRefIterator&lt;T&gt;` (see the implementation of</span>
<span id="L237"><span class="lineNum"> 237</span> : * `IListRefTagImplBase`).</span>
<span id="L238"><span class="lineNum"> 238</span> : *</span>
<span id="L239"><span class="lineNum"> 239</span> : * 2. defines the `elem_type` and `list_type` aliases that will be</span>
<span id="L240"><span class="lineNum"> 240</span> : * used in the definition of `IListRef&lt;T&gt;`. In general, we should do</span>
<span id="L241"><span class="lineNum"> 241</span> : * so by inheriting from `IListRefTagImplBase&lt;TAG, T, ListElemT&gt;`.</span>
<span id="L242"><span class="lineNum"> 242</span> : *</span>
<span id="L243"><span class="lineNum"> 243</span> : * [Note: IListRefTagImpl Specialization]</span>
<span id="L244"><span class="lineNum"> 244</span> : * ======================================</span>
<span id="L245"><span class="lineNum"> 245</span> : * For `IListRef(Iterator)&lt;at::Tensor&gt;`:</span>
<span id="L246"><span class="lineNum"> 246</span> : * - &lt;IListRefTag::Unboxed, at::Tensor&gt;</span>
<span id="L247"><span class="lineNum"> 247</span> : * - &lt;IListRefTag::Boxed, at::Tensor&gt;</span>
<span id="L248"><span class="lineNum"> 248</span> : * - &lt;IListRefTag::Materialized, at::Tensor&gt;</span>
<span id="L249"><span class="lineNum"> 249</span> : *</span>
<span id="L250"><span class="lineNum"> 250</span> : * For `IListRef(Iterator)&lt;at::OptionalTensorRef&gt;`:</span>
<span id="L251"><span class="lineNum"> 251</span> : * - &lt;IListRefTag::Unboxed, at::OptionalTensorRef&gt;</span>
<span id="L252"><span class="lineNum"> 252</span> : * - &lt;IListRefTag::Boxed, at::OptionalTensorRef&gt;</span>
<span id="L253"><span class="lineNum"> 253</span> : * - &lt;IListRefTag::Materialized, at::OptionalTensorRef&gt;</span>
<span id="L254"><span class="lineNum"> 254</span> : */</span>
<span id="L255"><span class="lineNum"> 255</span> : template &lt;IListRefTag TAG, typename T&gt;</span>
<span id="L256"><span class="lineNum"> 256</span> : class IListRefTagImpl {};</span>
<span id="L257"><span class="lineNum"> 257</span> : </span>
<span id="L258"><span class="lineNum"> 258</span> : /*</span>
<span id="L259"><span class="lineNum"> 259</span> : * Base implementation of `IListRefTagImpl&lt;TAG, T&gt;` methods.</span>
<span id="L260"><span class="lineNum"> 260</span> : *</span>
<span id="L261"><span class="lineNum"> 261</span> : * What is this for?</span>
<span id="L262"><span class="lineNum"> 262</span> : * =================</span>
<span id="L263"><span class="lineNum"> 263</span> : * This should make adding specializations for new types easier. For</span>
<span id="L264"><span class="lineNum"> 264</span> : * example, one should be able to add a new type just by making its</span>
<span id="L265"><span class="lineNum"> 265</span> : * `IListRefTagImpl` specialization inherit from `IListRefTagImplBase`.</span>
<span id="L266"><span class="lineNum"> 266</span> : *</span>
<span id="L267"><span class="lineNum"> 267</span> : * You should create a partial specialization for this class only if</span>
<span id="L268"><span class="lineNum"> 268</span> : * you introduce a new `IListRefTag`. The idea being that there is one</span>
<span id="L269"><span class="lineNum"> 269</span> : * default implementation for each possible value of `IListRefTag`.</span>
<span id="L270"><span class="lineNum"> 270</span> : *</span>
<span id="L271"><span class="lineNum"> 271</span> : * What does it do?</span>
<span id="L272"><span class="lineNum"> 272</span> : * ================</span>
<span id="L273"><span class="lineNum"> 273</span> : * 1. defines `elem_type` as an alias to `ListElemT`.</span>
<span id="L274"><span class="lineNum"> 274</span> : *</span>
<span id="L275"><span class="lineNum"> 275</span> : * 1. defines `list_type` as an alias to the default container type</span>
<span id="L276"><span class="lineNum"> 276</span> : * that will hold a collection of `elem_type`. The idea being that</span>
<span id="L277"><span class="lineNum"> 277</span> : * all types tagged as `TAG` will have `list_type` as its container,</span>
<span id="L278"><span class="lineNum"> 278</span> : * with different `elem_type`.</span>
<span id="L279"><span class="lineNum"> 279</span> : *</span>
<span id="L280"><span class="lineNum"> 280</span> : * 3. defines the default implementation for each of the methods that</span>
<span id="L281"><span class="lineNum"> 281</span> : * are supposed to be defined on `IListRefTagImpl` specializations.</span>
<span id="L282"><span class="lineNum"> 282</span> : *</span>
<span id="L283"><span class="lineNum"> 283</span> : * 4. inheriting from `IListRefTagImplBase&lt;TAG, T, ListElemT&gt;` also means</span>
<span id="L284"><span class="lineNum"> 284</span> : * that the payload of the type `IListRef&lt;T&gt;` will be of type `list_type`</span>
<span id="L285"><span class="lineNum"> 285</span> : * when it is tagged as `TAG`.</span>
<span id="L286"><span class="lineNum"> 286</span> : */</span>
<span id="L287"><span class="lineNum"> 287</span> : template &lt;IListRefTag TAG, typename T, typename ListElemT = T&gt;</span>
<span id="L288"><span class="lineNum"> 288</span> : class IListRefTagImplBase {};</span>
<span id="L289"><span class="lineNum"> 289</span> : </span>
<span id="L290"><span class="lineNum"> 290</span> : /*</span>
<span id="L291"><span class="lineNum"> 291</span> : * Materialized container for `IListRef&lt;T&gt;`.</span>
<span id="L292"><span class="lineNum"> 292</span> : *</span>
<span id="L293"><span class="lineNum"> 293</span> : * What is this for?</span>
<span id="L294"><span class="lineNum"> 294</span> : * =================</span>
<span id="L295"><span class="lineNum"> 295</span> : * Container that groups `T` references together. This exchanges the</span>
<span id="L296"><span class="lineNum"> 296</span> : * overhead of every method call from `IListRef&lt;T&gt;` for a dynamic allocation.</span>
<span id="L297"><span class="lineNum"> 297</span> : *</span>
<span id="L298"><span class="lineNum"> 298</span> : * You should use this container instead of `IListRef&lt;T&gt;` if:</span>
<span id="L299"><span class="lineNum"> 299</span> : *</span>
<span id="L300"><span class="lineNum"> 300</span> : * - You are going to iterate the list more than once</span>
<span id="L301"><span class="lineNum"> 301</span> : * - You need to repeatedly access arbitrary elements (using `operator[]`)</span>
<span id="L302"><span class="lineNum"> 302</span> : * What does it do?</span>
<span id="L303"><span class="lineNum"> 303</span> : </span>
<span id="L304"><span class="lineNum"> 304</span> : * ================</span>
<span id="L305"><span class="lineNum"> 305</span> : * Removes the reference (&amp;) from the type, and wraps it into a</span>
<span id="L306"><span class="lineNum"> 306</span> : * `std::reference_wrapper`. If `IListRefConstRef&lt;T&gt;` is not a</span>
<span id="L307"><span class="lineNum"> 307</span> : * reference type, then it's left unchanged.</span>
<span id="L308"><span class="lineNum"> 308</span> : */</span>
<span id="L309"><span class="lineNum"> 309</span> : template &lt;typename T&gt;</span>
<span id="L310"><span class="lineNum"> 310</span> : using _MaterializedIListRefElem = typename std::conditional&lt;</span>
<span id="L311"><span class="lineNum"> 311</span> : std::is_reference&lt;T&gt;::value,</span>
<span id="L312"><span class="lineNum"> 312</span> : typename std::reference_wrapper&lt;typename std::remove_reference&lt;T&gt;::type&gt;,</span>
<span id="L313"><span class="lineNum"> 313</span> : T&gt;::type;</span>
<span id="L314"><span class="lineNum"> 314</span> : </span>
<span id="L315"><span class="lineNum"> 315</span> : template &lt;typename T&gt;</span>
<span id="L316"><span class="lineNum"> 316</span> : using MaterializedIListRefElem = _MaterializedIListRefElem&lt;IListRefConstRef&lt;T&gt;&gt;;</span>
<span id="L317"><span class="lineNum"> 317</span> : </span>
<span id="L318"><span class="lineNum"> 318</span> : template &lt;typename T&gt;</span>
<span id="L319"><span class="lineNum"> 319</span> : using MaterializedIListRef = std::vector&lt;MaterializedIListRefElem&lt;T&gt;&gt;;</span>
<span id="L320"><span class="lineNum"> 320</span> : </span>
<span id="L321"><span class="lineNum"> 321</span> : } // namespace detail</span>
<span id="L322"><span class="lineNum"> 322</span> : </span>
<span id="L323"><span class="lineNum"> 323</span> : /*</span>
<span id="L324"><span class="lineNum"> 324</span> : * Iterator for `IListRef&lt;T&gt;`.</span>
<span id="L325"><span class="lineNum"> 325</span> : *</span>
<span id="L326"><span class="lineNum"> 326</span> : * What is it?</span>
<span id="L327"><span class="lineNum"> 327</span> : * ===========</span>
<span id="L328"><span class="lineNum"> 328</span> : * Currently, a `std::bidirectional_iterator` that wraps the iterator</span>
<span id="L329"><span class="lineNum"> 329</span> : * types defined for each of the `IListRefTag`.</span>
<span id="L330"><span class="lineNum"> 330</span> : *</span>
<span id="L331"><span class="lineNum"> 331</span> : * One should be able to use it, as if it were the unwrapped</span>
<span id="L332"><span class="lineNum"> 332</span> : * iterators themselves.</span>
<span id="L333"><span class="lineNum"> 333</span> : </span>
<span id="L334"><span class="lineNum"> 334</span> : * What does it do?</span>
<span id="L335"><span class="lineNum"> 335</span> : * ================</span>
<span id="L336"><span class="lineNum"> 336</span> : * Similarly to `IListRef&lt;T&gt;`, this is a wrapper class. Specifically, it</span>
<span id="L337"><span class="lineNum"> 337</span> : * wraps each container's `const_iterator` type alias. So, for example,</span>
<span id="L338"><span class="lineNum"> 338</span> : * given that the container for `IListRefTag::Boxed` is `c10::List`, this</span>
<span id="L339"><span class="lineNum"> 339</span> : * iterator will wrap a `c10::List::const_iterator`.</span>
<span id="L340"><span class="lineNum"> 340</span> : *</span>
<span id="L341"><span class="lineNum"> 341</span> : * [Note: MSVC Iterator Debug]</span>
<span id="L342"><span class="lineNum"> 342</span> : * ===========================</span>
<span id="L343"><span class="lineNum"> 343</span> : * MSVC `vector&lt;T&gt;::iterator` implementation (used in the boxed variant)</span>
<span id="L344"><span class="lineNum"> 344</span> : * makes it so this union's destructor, copy-constructor (assignment), and</span>
<span id="L345"><span class="lineNum"> 345</span> : * move-constructor (assignment) are implicitly deleted.</span>
<span id="L346"><span class="lineNum"> 346</span> : *</span>
<span id="L347"><span class="lineNum"> 347</span> : * Therefore, we need to explicitly define them as needed. Follows a list</span>
<span id="L348"><span class="lineNum"> 348</span> : * of places where these are needed and their reason:</span>
<span id="L349"><span class="lineNum"> 349</span> : *</span>
<span id="L350"><span class="lineNum"> 350</span> : * - `Payload` destructor:</span>
<span id="L351"><span class="lineNum"> 351</span> : * it is deleted only if the macro `_ITERATOR_DEBUG_LEVEL` is set to 2.</span>
<span id="L352"><span class="lineNum"> 352</span> : *</span>
<span id="L353"><span class="lineNum"> 353</span> : * - `IListRefIterator` destructor:</span>
<span id="L354"><span class="lineNum"> 354</span> : * same as above. However, we need to explicitly call the variant</span>
<span id="L355"><span class="lineNum"> 355</span> : * destructor explicitly.</span>
<span id="L356"><span class="lineNum"> 356</span> : *</span>
<span id="L357"><span class="lineNum"> 357</span> : * - `IListRefIterator` copy-constructor:</span>
<span id="L358"><span class="lineNum"> 358</span> : * it is deleted only if the macro `_ITERATOR_DEBUG_LEVEL` is different</span>
<span id="L359"><span class="lineNum"> 359</span> : * than 0.</span>
<span id="L360"><span class="lineNum"> 360</span> : */</span>
<span id="L361"><span class="lineNum"> 361</span> : template &lt;typename T&gt;</span>
<span id="L362"><span class="lineNum"> 362</span> : class IListRefIterator {</span>
<span id="L363"><span class="lineNum"> 363</span> : private:</span>
<span id="L364"><span class="lineNum"> 364</span> : #define DEFINE_FRIEND_CLASS(TAG, ...) \</span>
<span id="L365"><span class="lineNum"> 365</span> : friend class detail::IListRefTagImpl&lt;IListRefTag::TAG, T&gt;; \</span>
<span id="L366"><span class="lineNum"> 366</span> : friend class detail::IListRefTagImplBase&lt; \</span>
<span id="L367"><span class="lineNum"> 367</span> : IListRefTag::TAG, \</span>
<span id="L368"><span class="lineNum"> 368</span> : T, \</span>
<span id="L369"><span class="lineNum"> 369</span> : typename detail::IListRefTagImpl&lt;IListRefTag::TAG, T&gt;::elem_type&gt;;</span>
<span id="L370"><span class="lineNum"> 370</span> : TORCH_ILISTREF_FORALL_TAGS(DEFINE_FRIEND_CLASS)</span>
<span id="L371"><span class="lineNum"> 371</span> : #undef DEFINE_FRIEND_CLASS</span>
<span id="L372"><span class="lineNum"> 372</span> : </span>
<span id="L373"><span class="lineNum"> 373</span> : public:</span>
<span id="L374"><span class="lineNum"> 374</span> : // C++17 friendly std::iterator implementation</span>
<span id="L375"><span class="lineNum"> 375</span> : using iterator_category = std::bidirectional_iterator_tag;</span>
<span id="L376"><span class="lineNum"> 376</span> : using value_type = T;</span>
<span id="L377"><span class="lineNum"> 377</span> : using difference_type = std::ptrdiff_t;</span>
<span id="L378"><span class="lineNum"> 378</span> : using pointer = T*;</span>
<span id="L379"><span class="lineNum"> 379</span> : using reference = T&amp;;</span>
<span id="L380"><span class="lineNum"> 380</span> : </span>
<span id="L381"><span class="lineNum"> 381</span> : using unboxed_iterator_type = typename detail::</span>
<span id="L382"><span class="lineNum"> 382</span> : IListRefTagImpl&lt;IListRefTag::Unboxed, T&gt;::list_type::const_iterator;</span>
<span id="L383"><span class="lineNum"> 383</span> : using boxed_iterator_type = typename detail::</span>
<span id="L384"><span class="lineNum"> 384</span> : IListRefTagImpl&lt;IListRefTag::Boxed, T&gt;::list_type::const_iterator;</span>
<span id="L385"><span class="lineNum"> 385</span> : using materialized_iterator_type =</span>
<span id="L386"><span class="lineNum"> 386</span> : typename detail::MaterializedIListRef&lt;T&gt;::const_iterator;</span>
<span id="L387"><span class="lineNum"> 387</span> : </span>
<span id="L388"><span class="lineNum"> 388</span> : IListRefIterator() : tag_(IListRefTag::None) {}</span>
<span id="L389"><span class="lineNum"> 389</span> : </span>
<span id="L390"><span class="lineNum"> 390</span> : #if defined(_MSC_VER) &amp;&amp; _ITERATOR_DEBUG_LEVEL != 0</span>
<span id="L391"><span class="lineNum"> 391</span> : // See [Note: MSVC Iterator Debug]</span>
<span id="L392"><span class="lineNum"> 392</span> : IListRefIterator(const IListRefIterator&amp; iterator)</span>
<span id="L393"><span class="lineNum"> 393</span> : : tag_(iterator.tag_) {</span>
<span id="L394"><span class="lineNum"> 394</span> : switch (tag_) {</span>
<span id="L395"><span class="lineNum"> 395</span> : case IListRefTag::Boxed:</span>
<span id="L396"><span class="lineNum"> 396</span> : payload_.boxed_iterator = iterator.payload_.boxed_iterator;</span>
<span id="L397"><span class="lineNum"> 397</span> : break;</span>
<span id="L398"><span class="lineNum"> 398</span> : case IListRefTag::Unboxed:</span>
<span id="L399"><span class="lineNum"> 399</span> : payload_.unboxed_iterator = iterator.payload_.unboxed_iterator;</span>
<span id="L400"><span class="lineNum"> 400</span> : break;</span>
<span id="L401"><span class="lineNum"> 401</span> : case IListRefTag::Materialized:</span>
<span id="L402"><span class="lineNum"> 402</span> : payload_.materialized_iterator = iterator.payload_.materialized_iterator;</span>
<span id="L403"><span class="lineNum"> 403</span> : break;</span>
<span id="L404"><span class="lineNum"> 404</span> : default:</span>
<span id="L405"><span class="lineNum"> 405</span> : TORCH_INTERNAL_ASSERT(false, &quot;invalid IListRef tag.&quot;);</span>
<span id="L406"><span class="lineNum"> 406</span> : }</span>
<span id="L407"><span class="lineNum"> 407</span> : }</span>
<span id="L408"><span class="lineNum"> 408</span> : #endif</span>
<span id="L409"><span class="lineNum"> 409</span> : </span>
<span id="L410"><span class="lineNum"> 410</span> : #if defined(_MSC_VER) &amp;&amp; _ITERATOR_DEBUG_LEVEL == 2</span>
<span id="L411"><span class="lineNum"> 411</span> : // See [Note: MSVC Iterator Debug]</span>
<span id="L412"><span class="lineNum"> 412</span> : ~IListRefIterator() noexcept(false) {</span>
<span id="L413"><span class="lineNum"> 413</span> : switch (tag_) {</span>
<span id="L414"><span class="lineNum"> 414</span> : case IListRefTag::Boxed:</span>
<span id="L415"><span class="lineNum"> 415</span> : payload_.boxed_iterator.~boxed_iterator_type();</span>
<span id="L416"><span class="lineNum"> 416</span> : break;</span>
<span id="L417"><span class="lineNum"> 417</span> : case IListRefTag::Unboxed:</span>
<span id="L418"><span class="lineNum"> 418</span> : payload_.unboxed_iterator.~unboxed_iterator_type();</span>
<span id="L419"><span class="lineNum"> 419</span> : break;</span>
<span id="L420"><span class="lineNum"> 420</span> : case IListRefTag::Materialized:</span>
<span id="L421"><span class="lineNum"> 421</span> : payload_.materialized_iterator.~materialized_iterator_type();</span>
<span id="L422"><span class="lineNum"> 422</span> : break;</span>
<span id="L423"><span class="lineNum"> 423</span> : default:</span>
<span id="L424"><span class="lineNum"> 424</span> : TORCH_INTERNAL_ASSERT(false, &quot;invalid IListRef tag.&quot;);</span>
<span id="L425"><span class="lineNum"> 425</span> : }</span>
<span id="L426"><span class="lineNum"> 426</span> : }</span>
<span id="L427"><span class="lineNum"> 427</span> : #endif</span>
<span id="L428"><span class="lineNum"> 428</span> : </span>
<span id="L429"><span class="lineNum"> 429</span> : IListRefIterator(boxed_iterator_type boxed) : tag_(IListRefTag::Boxed) {</span>
<span id="L430"><span class="lineNum"> 430</span> : payload_.boxed_iterator = boxed;</span>
<span id="L431"><span class="lineNum"> 431</span> : }</span>
<span id="L432"><span class="lineNum"> 432</span> : </span>
<span id="L433"><span class="lineNum"> 433</span> : IListRefIterator(unboxed_iterator_type unboxed) : tag_(IListRefTag::Unboxed) {</span>
<span id="L434"><span class="lineNum"> 434</span> : payload_.unboxed_iterator = unboxed;</span>
<span id="L435"><span class="lineNum"> 435</span> : }</span>
<span id="L436"><span class="lineNum"> 436</span> : </span>
<span id="L437"><span class="lineNum"> 437</span> : IListRefIterator(materialized_iterator_type materialized) : tag_(IListRefTag::Materialized) {</span>
<span id="L438"><span class="lineNum"> 438</span> : payload_.materialized_iterator = materialized;</span>
<span id="L439"><span class="lineNum"> 439</span> : }</span>
<span id="L440"><span class="lineNum"> 440</span> : </span>
<span id="L441"><span class="lineNum"> 441</span> : detail::IListRefConstRef&lt;T&gt; operator*() const {</span>
<span id="L442"><span class="lineNum"> 442</span> : TORCH_ILISTREF_UNWRAP(tag_, { return ImplT::iterator_get(this_); });</span>
<span id="L443"><span class="lineNum"> 443</span> : }</span>
<span id="L444"><span class="lineNum"> 444</span> : </span>
<span id="L445"><span class="lineNum"> 445</span> : IListRefIterator&amp; operator++() {</span>
<span id="L446"><span class="lineNum"> 446</span> : TORCH_ILISTREF_UNWRAP(tag_, { ++this_; });</span>
<span id="L447"><span class="lineNum"> 447</span> : return *this;</span>
<span id="L448"><span class="lineNum"> 448</span> : }</span>
<span id="L449"><span class="lineNum"> 449</span> : </span>
<span id="L450"><span class="lineNum"> 450</span> : IListRefIterator operator++(int) {</span>
<span id="L451"><span class="lineNum"> 451</span> : auto old = *this;</span>
<span id="L452"><span class="lineNum"> 452</span> : TORCH_ILISTREF_UNWRAP(tag_, { ++this_; });</span>
<span id="L453"><span class="lineNum"> 453</span> : return old;</span>
<span id="L454"><span class="lineNum"> 454</span> : }</span>
<span id="L455"><span class="lineNum"> 455</span> : </span>
<span id="L456"><span class="lineNum"> 456</span> : IListRefIterator&amp; operator--() {</span>
<span id="L457"><span class="lineNum"> 457</span> : TORCH_ILISTREF_UNWRAP(tag_, { --this_; });</span>
<span id="L458"><span class="lineNum"> 458</span> : return *this;</span>
<span id="L459"><span class="lineNum"> 459</span> : }</span>
<span id="L460"><span class="lineNum"> 460</span> : </span>
<span id="L461"><span class="lineNum"> 461</span> : IListRefIterator operator--(int) {</span>
<span id="L462"><span class="lineNum"> 462</span> : auto old = *this;</span>
<span id="L463"><span class="lineNum"> 463</span> : TORCH_ILISTREF_UNWRAP(tag_, { --this_; });</span>
<span id="L464"><span class="lineNum"> 464</span> : return old;</span>
<span id="L465"><span class="lineNum"> 465</span> : }</span>
<span id="L466"><span class="lineNum"> 466</span> : </span>
<span id="L467"><span class="lineNum"> 467</span> : bool operator==(const IListRefIterator&amp; rhs) const {</span>
<span id="L468"><span class="lineNum"> 468</span> : if (tag_ != rhs.tag_) {</span>
<span id="L469"><span class="lineNum"> 469</span> : return false;</span>
<span id="L470"><span class="lineNum"> 470</span> : }</span>
<span id="L471"><span class="lineNum"> 471</span> : TORCH_ILISTREF_UNWRAP(tag_, {</span>
<span id="L472"><span class="lineNum"> 472</span> : auto&amp; rhs_it = ImplT::unwrap(rhs);</span>
<span id="L473"><span class="lineNum"> 473</span> : return this_ == rhs_it;</span>
<span id="L474"><span class="lineNum"> 474</span> : });</span>
<span id="L475"><span class="lineNum"> 475</span> : }</span>
<span id="L476"><span class="lineNum"> 476</span> : </span>
<span id="L477"><span class="lineNum"> 477</span> : bool operator!=(const IListRefIterator&amp; rhs) const {</span>
<span id="L478"><span class="lineNum"> 478</span> : return !(*this == rhs);</span>
<span id="L479"><span class="lineNum"> 479</span> : }</span>
<span id="L480"><span class="lineNum"> 480</span> : </span>
<span id="L481"><span class="lineNum"> 481</span> : private:</span>
<span id="L482"><span class="lineNum"> 482</span> : union Payload {</span>
<span id="L483"><span class="lineNum"> 483</span> : boxed_iterator_type boxed_iterator;</span>
<span id="L484"><span class="lineNum"> 484</span> : unboxed_iterator_type unboxed_iterator;</span>
<span id="L485"><span class="lineNum"> 485</span> : materialized_iterator_type materialized_iterator;</span>
<span id="L486"><span class="lineNum"> 486</span> : void* _init_ptr;</span>
<span id="L487"><span class="lineNum"> 487</span> : Payload() : _init_ptr(nullptr) {}</span>
<span id="L488"><span class="lineNum"> 488</span> : #if defined(_MSC_VER)</span>
<span id="L489"><span class="lineNum"> 489</span> : // See [Note: MSVC Iterator Debug]</span>
<span id="L490"><span class="lineNum"> 490</span> : ~Payload() {}</span>
<span id="L491"><span class="lineNum"> 491</span> : #endif</span>
<span id="L492"><span class="lineNum"> 492</span> : };</span>
<span id="L493"><span class="lineNum"> 493</span> : </span>
<span id="L494"><span class="lineNum"> 494</span> : Payload payload_;</span>
<span id="L495"><span class="lineNum"> 495</span> : IListRefTag tag_;</span>
<span id="L496"><span class="lineNum"> 496</span> : };</span>
<span id="L497"><span class="lineNum"> 497</span> : </span>
<span id="L498"><span class="lineNum"> 498</span> : /*</span>
<span id="L499"><span class="lineNum"> 499</span> : * See [Note: IListRef]</span>
<span id="L500"><span class="lineNum"> 500</span> : */</span>
<span id="L501"><span class="lineNum"> 501</span> : template &lt;typename T&gt;</span>
<span id="L502"><span class="lineNum"> 502</span> : class IListRef {</span>
<span id="L503"><span class="lineNum"> 503</span> : private:</span>
<span id="L504"><span class="lineNum"> 504</span> : #define DEFINE_FRIEND_CLASS(TAG, ...) \</span>
<span id="L505"><span class="lineNum"> 505</span> : friend class detail::IListRefTagImpl&lt;IListRefTag::TAG, T&gt;; \</span>
<span id="L506"><span class="lineNum"> 506</span> : friend class detail::IListRefTagImplBase&lt; \</span>
<span id="L507"><span class="lineNum"> 507</span> : IListRefTag::TAG, \</span>
<span id="L508"><span class="lineNum"> 508</span> : T, \</span>
<span id="L509"><span class="lineNum"> 509</span> : typename detail::IListRefTagImpl&lt;IListRefTag::TAG, T&gt;::elem_type&gt;;</span>
<span id="L510"><span class="lineNum"> 510</span> : TORCH_ILISTREF_FORALL_TAGS(DEFINE_FRIEND_CLASS)</span>
<span id="L511"><span class="lineNum"> 511</span> : #undef DEFINE_FRIEND_CLASS</span>
<span id="L512"><span class="lineNum"> 512</span> : </span>
<span id="L513"><span class="lineNum"> 513</span> : public:</span>
<span id="L514"><span class="lineNum"> 514</span> : using unboxed_type =</span>
<span id="L515"><span class="lineNum"> 515</span> : typename detail::IListRefTagImpl&lt;IListRefTag::Unboxed, T&gt;::list_type;</span>
<span id="L516"><span class="lineNum"> 516</span> : using boxed_type =</span>
<span id="L517"><span class="lineNum"> 517</span> : typename detail::IListRefTagImpl&lt;IListRefTag::Boxed, T&gt;::list_type;</span>
<span id="L518"><span class="lineNum"> 518</span> : using materialized_type =</span>
<span id="L519"><span class="lineNum"> 519</span> : typename detail::MaterializedIListRef&lt;T&gt;;</span>
<span id="L520"><span class="lineNum"> 520</span> : </span>
<span id="L521"><span class="lineNum"> 521</span> : using iterator = IListRefIterator&lt;T&gt;;</span>
<span id="L522"><span class="lineNum"> 522</span> : using const_iterator = IListRefIterator&lt;T&gt;;</span>
<span id="L523"><span class="lineNum"> 523</span> : using reverse_iterator = std::reverse_iterator&lt;iterator&gt;;</span>
<span id="L524"><span class="lineNum"> 524</span> : using value_type = typename iterator::value_type;</span>
<span id="L525"><span class="lineNum"> 525</span> : </span>
<span id="L526"><span class="lineNum"> 526</span> : IListRef() : tag_(IListRefTag::None) {}</span>
<span id="L527"><span class="lineNum"> 527</span> : </span>
<span id="L528"><span class="lineNum"> 528</span> : IListRef(const boxed_type&amp; boxed) : tag_(IListRefTag::Boxed) {</span>
<span id="L529"><span class="lineNum"> 529</span> : payload_.boxed = &amp;boxed;</span>
<span id="L530"><span class="lineNum"> 530</span> : }</span>
<span id="L531"><span class="lineNum"> 531</span> : </span>
<span id="L532"><span class="lineNum"> 532</span> : IListRef(const unboxed_type&amp; unboxed) : tag_(IListRefTag::Unboxed) {</span>
<span id="L533"><span class="lineNum"> 533</span> : payload_.unboxed = unboxed;</span>
<span id="L534"><span class="lineNum"> 534</span> : }</span>
<span id="L535"><span class="lineNum"> 535</span> : </span>
<span id="L536"><span class="lineNum"> 536</span> <span class="tlaGNC tlaBgGNC"> 378 : IListRef(const std::initializer_list&lt;T&gt;&amp; list) : tag_(IListRefTag::Unboxed) {</span></span>
<span id="L537"><span class="lineNum"> 537</span> <span class="tlaGNC"> 378 : payload_.unboxed = at::ArrayRef&lt;T&gt;(list);</span></span>
<span id="L538"><span class="lineNum"> 538</span> <span class="tlaGNC"> 378 : }</span></span>
<span id="L539"><span class="lineNum"> 539</span> : </span>
<span id="L540"><span class="lineNum"> 540</span> : template &lt;</span>
<span id="L541"><span class="lineNum"> 541</span> : typename... UnboxedConstructorArgs,</span>
<span id="L542"><span class="lineNum"> 542</span> : typename = std::enable_if_t&lt;</span>
<span id="L543"><span class="lineNum"> 543</span> : std::is_constructible&lt;unboxed_type, UnboxedConstructorArgs...&gt;::value&gt;&gt;</span>
<span id="L544"><span class="lineNum"> 544</span> : IListRef(UnboxedConstructorArgs&amp;&amp;... args) : tag_(IListRefTag::Unboxed) {</span>
<span id="L545"><span class="lineNum"> 545</span> : payload_.unboxed = unboxed_type(std::forward&lt;UnboxedConstructorArgs&gt;(args)...);</span>
<span id="L546"><span class="lineNum"> 546</span> : }</span>
<span id="L547"><span class="lineNum"> 547</span> : </span>
<span id="L548"><span class="lineNum"> 548</span> : IListRef(const materialized_type&amp; materialized) : tag_(IListRefTag::Materialized) {</span>
<span id="L549"><span class="lineNum"> 549</span> : payload_.materialized = &amp;materialized;</span>
<span id="L550"><span class="lineNum"> 550</span> : }</span>
<span id="L551"><span class="lineNum"> 551</span> : </span>
<span id="L552"><span class="lineNum"> 552</span> : size_t size() const {</span>
<span id="L553"><span class="lineNum"> 553</span> : TORCH_ILISTREF_UNWRAP(tag_, { return this_.size(); });</span>
<span id="L554"><span class="lineNum"> 554</span> : }</span>
<span id="L555"><span class="lineNum"> 555</span> : </span>
<span id="L556"><span class="lineNum"> 556</span> : bool empty() const {</span>
<span id="L557"><span class="lineNum"> 557</span> : return size() == 0;</span>
<span id="L558"><span class="lineNum"> 558</span> : }</span>
<span id="L559"><span class="lineNum"> 559</span> : </span>
<span id="L560"><span class="lineNum"> 560</span> : iterator begin() const {</span>
<span id="L561"><span class="lineNum"> 561</span> : TORCH_ILISTREF_UNWRAP(tag_, { return this_.begin(); });</span>
<span id="L562"><span class="lineNum"> 562</span> : }</span>
<span id="L563"><span class="lineNum"> 563</span> : </span>
<span id="L564"><span class="lineNum"> 564</span> : iterator end() const {</span>
<span id="L565"><span class="lineNum"> 565</span> : TORCH_ILISTREF_UNWRAP(tag_, { return this_.end(); });</span>
<span id="L566"><span class="lineNum"> 566</span> : }</span>
<span id="L567"><span class="lineNum"> 567</span> : </span>
<span id="L568"><span class="lineNum"> 568</span> : detail::IListRefConstRef&lt;T&gt; front() const {</span>
<span id="L569"><span class="lineNum"> 569</span> : TORCH_ILISTREF_UNWRAP(tag_, { return ImplT::front(this_); });</span>
<span id="L570"><span class="lineNum"> 570</span> : }</span>
<span id="L571"><span class="lineNum"> 571</span> : </span>
<span id="L572"><span class="lineNum"> 572</span> : /*</span>
<span id="L573"><span class="lineNum"> 573</span> : * Materializes the `IListRef` into a `std::vector`.</span>
<span id="L574"><span class="lineNum"> 574</span> : *</span>
<span id="L575"><span class="lineNum"> 575</span> : * This should be used when one wishes to either:</span>
<span id="L576"><span class="lineNum"> 576</span> : *</span>
<span id="L577"><span class="lineNum"> 577</span> : * - iterate over the list more than once: each `IListRefIterator`</span>
<span id="L578"><span class="lineNum"> 578</span> : * member function call has to go through a switch, introducing</span>
<span id="L579"><span class="lineNum"> 579</span> : * non-negligible overhead</span>
<span id="L580"><span class="lineNum"> 580</span> : *</span>
<span id="L581"><span class="lineNum"> 581</span> : * - randomly access an arbitrary element using `operator[]`:</span>
<span id="L582"><span class="lineNum"> 582</span> : * same reason as above</span>
<span id="L583"><span class="lineNum"> 583</span> : */</span>
<span id="L584"><span class="lineNum"> 584</span> : detail::MaterializedIListRef&lt;T&gt; materialize() const {</span>
<span id="L585"><span class="lineNum"> 585</span> : if (isMaterialized()) {</span>
<span id="L586"><span class="lineNum"> 586</span> : return toMaterialized();</span>
<span id="L587"><span class="lineNum"> 587</span> : }</span>
<span id="L588"><span class="lineNum"> 588</span> : </span>
<span id="L589"><span class="lineNum"> 589</span> : detail::MaterializedIListRef&lt;T&gt; materialized;</span>
<span id="L590"><span class="lineNum"> 590</span> : materialized.reserve(size());</span>
<span id="L591"><span class="lineNum"> 591</span> : for (const auto&amp; t : *this) {</span>
<span id="L592"><span class="lineNum"> 592</span> : materialized.emplace_back(t);</span>
<span id="L593"><span class="lineNum"> 593</span> : }</span>
<span id="L594"><span class="lineNum"> 594</span> : return materialized;</span>
<span id="L595"><span class="lineNum"> 595</span> : }</span>
<span id="L596"><span class="lineNum"> 596</span> : </span>
<span id="L597"><span class="lineNum"> 597</span> : #define DEFINE_CHECK(TAG, ...) \</span>
<span id="L598"><span class="lineNum"> 598</span> : bool is##TAG() const { \</span>
<span id="L599"><span class="lineNum"> 599</span> : return tag_ == IListRefTag::TAG; \</span>
<span id="L600"><span class="lineNum"> 600</span> : }</span>
<span id="L601"><span class="lineNum"> 601</span> : TORCH_ILISTREF_FORALL_TAGS(DEFINE_CHECK);</span>
<span id="L602"><span class="lineNum"> 602</span> : #undef DEFINE_CHECK</span>
<span id="L603"><span class="lineNum"> 603</span> : </span>
<span id="L604"><span class="lineNum"> 604</span> : bool isNone() const {</span>
<span id="L605"><span class="lineNum"> 605</span> : return tag_ == IListRefTag::None;</span>
<span id="L606"><span class="lineNum"> 606</span> : }</span>
<span id="L607"><span class="lineNum"> 607</span> : </span>
<span id="L608"><span class="lineNum"> 608</span> : #define DEFINE_CASTING(TAG, ...) \</span>
<span id="L609"><span class="lineNum"> 609</span> : const typename detail::IListRefTagImpl&lt;IListRefTag::TAG, T&gt;::list_type&amp; \</span>
<span id="L610"><span class="lineNum"> 610</span> : to##TAG() const { \</span>
<span id="L611"><span class="lineNum"> 611</span> : TORCH_INTERNAL_ASSERT(is##TAG()); \</span>
<span id="L612"><span class="lineNum"> 612</span> : return detail::IListRefTagImpl&lt;IListRefTag::TAG, T&gt;::unwrap(*this); \</span>
<span id="L613"><span class="lineNum"> 613</span> : }</span>
<span id="L614"><span class="lineNum"> 614</span> : TORCH_ILISTREF_FORALL_TAGS(DEFINE_CASTING);</span>
<span id="L615"><span class="lineNum"> 615</span> : #undef DEFINE_CASTING</span>
<span id="L616"><span class="lineNum"> 616</span> : </span>
<span id="L617"><span class="lineNum"> 617</span> : private:</span>
<span id="L618"><span class="lineNum"> 618</span> : union Payload {</span>
<span id="L619"><span class="lineNum"> 619</span> : const boxed_type* boxed;</span>
<span id="L620"><span class="lineNum"> 620</span> : unboxed_type unboxed;</span>
<span id="L621"><span class="lineNum"> 621</span> : const materialized_type* materialized;</span>
<span id="L622"><span class="lineNum"> 622</span> <span class="tlaGNC"> 378 : Payload() : boxed(nullptr) {}</span></span>
<span id="L623"><span class="lineNum"> 623</span> <span class="tlaGNC"> 378 : ~Payload() {}</span></span>
<span id="L624"><span class="lineNum"> 624</span> : };</span>
<span id="L625"><span class="lineNum"> 625</span> : </span>
<span id="L626"><span class="lineNum"> 626</span> : Payload payload_;</span>
<span id="L627"><span class="lineNum"> 627</span> : IListRefTag tag_;</span>
<span id="L628"><span class="lineNum"> 628</span> : };</span>
<span id="L629"><span class="lineNum"> 629</span> : </span>
<span id="L630"><span class="lineNum"> 630</span> : } // namespace c10</span>
<span id="L631"><span class="lineNum"> 631</span> : </span>
<span id="L632"><span class="lineNum"> 632</span> : #include &lt;ATen/core/IListRef_inl.h&gt;</span>
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,89 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/LegacyTypeDispatch.h - functions</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - LegacyTypeDispatch.h<span style="font-size: 80%;"> (<a href="LegacyTypeDispatch.h.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">6</td>
<td class="headerCovTableEntry">6</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">2</td>
<td class="headerCovTableEntry">2</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="LegacyTypeDispatch.h.func.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="LegacyTypeDispatch.h.gcov.html#L103">_ZN2at32AutoDispatchBelowADInplaceOrViewC2Ev</a></td>
<td class="coverFnHi">17526</td>
</tr>
<tr>
<td class="coverFn"><a href="LegacyTypeDispatch.h.gcov.html#L60">_ZN2at25AutoDispatchBelowAutogradC2Ev</a></td>
<td class="coverFnHi">401318</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,89 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/LegacyTypeDispatch.h - functions</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - LegacyTypeDispatch.h<span style="font-size: 80%;"> (<a href="LegacyTypeDispatch.h.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">6</td>
<td class="headerCovTableEntry">6</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">2</td>
<td class="headerCovTableEntry">2</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="LegacyTypeDispatch.h.func-c.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="LegacyTypeDispatch.h.gcov.html#L60">_ZN2at25AutoDispatchBelowAutogradC2Ev</a></td>
<td class="coverFnHi">401318</td>
</tr>
<tr>
<td class="coverFn"><a href="LegacyTypeDispatch.h.gcov.html#L103">_ZN2at32AutoDispatchBelowADInplaceOrViewC2Ev</a></td>
<td class="coverFnHi">17526</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,187 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/LegacyTypeDispatch.h</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - LegacyTypeDispatch.h<span style="font-size: 80%;"> (source / <a href="LegacyTypeDispatch.h.func-c.html">functions</a>)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">6</td>
<td class="headerCovTableEntry">6</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">2</td>
<td class="headerCovTableEntry">2</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Line data Source code</pre>
<pre class="source">
<span id="L1"><span class="lineNum"> 1</span> : #pragma once</span>
<span id="L2"><span class="lineNum"> 2</span> : </span>
<span id="L3"><span class="lineNum"> 3</span> : // The legacy mechanism for dispatching operators in ATen is a Type</span>
<span id="L4"><span class="lineNum"> 4</span> : // object, which is essentially a giant virtual dispatch table</span>
<span id="L5"><span class="lineNum"> 5</span> : // for every operation we support dynamically dispatching over.</span>
<span id="L6"><span class="lineNum"> 6</span> : //</span>
<span id="L7"><span class="lineNum"> 7</span> : // This has been deprecated in favor of ATenDispatch, and in the future,</span>
<span id="L8"><span class="lineNum"> 8</span> : // c10 dispatcher.</span>
<span id="L9"><span class="lineNum"> 9</span> : // TODO: Clean up what remains here</span>
<span id="L10"><span class="lineNum"> 10</span> : </span>
<span id="L11"><span class="lineNum"> 11</span> : #include &lt;c10/core/impl/LocalDispatchKeySet.h&gt;</span>
<span id="L12"><span class="lineNum"> 12</span> : </span>
<span id="L13"><span class="lineNum"> 13</span> : namespace at {</span>
<span id="L14"><span class="lineNum"> 14</span> : </span>
<span id="L15"><span class="lineNum"> 15</span> : // A RAII, thread local (!) guard that will disable dispatch to variable</span>
<span id="L16"><span class="lineNum"> 16</span> : // handler.</span>
<span id="L17"><span class="lineNum"> 17</span> : //</span>
<span id="L18"><span class="lineNum"> 18</span> : // NOTE [ Treating Variables as non-Variables in type dispatch ]</span>
<span id="L19"><span class="lineNum"> 19</span> : //</span>
<span id="L20"><span class="lineNum"> 20</span> : // What exactly does AutoDispatchBelowAutograd do? The short answer is, it causes</span>
<span id="L21"><span class="lineNum"> 21</span> : // dispatches on ATen functions to go to the non-variable implementation,</span>
<span id="L22"><span class="lineNum"> 22</span> : // bypassing autograd handling (and also profiling and tracing).</span>
<span id="L23"><span class="lineNum"> 23</span> : //</span>
<span id="L24"><span class="lineNum"> 24</span> : // To understand why this guard exists, it's helpful to understand the history</span>
<span id="L25"><span class="lineNum"> 25</span> : // behind how Variable was implemented. Previously, Variables were implemented</span>
<span id="L26"><span class="lineNum"> 26</span> : // as a wrapper on Tensors; so the act of processing a Variable involved</span>
<span id="L27"><span class="lineNum"> 27</span> : // unwrapping the underlying Tensor, and then calling the underlying base</span>
<span id="L28"><span class="lineNum"> 28</span> : // operation on /that/ operation</span>
<span id="L29"><span class="lineNum"> 29</span> : //</span>
<span id="L30"><span class="lineNum"> 30</span> : // However, after the Variable/Tensor merge, there is no concept of unwrapping</span>
<span id="L31"><span class="lineNum"> 31</span> : // a tensor anymore. If you just call the operation on the same variable</span>
<span id="L32"><span class="lineNum"> 32</span> : // again inside your VariableType handler, you'll dispatch back to</span>
<span id="L33"><span class="lineNum"> 33</span> : // VariableType, which is not what we want.</span>
<span id="L34"><span class="lineNum"> 34</span> : //</span>
<span id="L35"><span class="lineNum"> 35</span> : // The solution to the above problem is to add `at::AutoDispatchBelowAutograd`, which</span>
<span id="L36"><span class="lineNum"> 36</span> : // when enabled will cause `legacyTensorType()` and `getType()` to always return</span>
<span id="L37"><span class="lineNum"> 37</span> : // non-Variable type, even if the tensor being called on is a variable.</span>
<span id="L38"><span class="lineNum"> 38</span> : </span>
<span id="L39"><span class="lineNum"> 39</span> : /* Note [AutoDispatchBelowAutograd]</span>
<span id="L40"><span class="lineNum"> 40</span> : * AutoDispatchBelowAutograd is **INTERNAL ONLY** that it should be used</span>
<span id="L41"><span class="lineNum"> 41</span> : * for kernel implementations and customized C++ kernels.</span>
<span id="L42"><span class="lineNum"> 42</span> : * If you are looking for a guard to run workload in inference mode, please use</span>
<span id="L43"><span class="lineNum"> 43</span> : * c10::InferenceMode RAII which is user facing API.</span>
<span id="L44"><span class="lineNum"> 44</span> : * In the past AutoDispatchBelowAutograd(or its old version AutoNonVariableTypeMode)</span>
<span id="L45"><span class="lineNum"> 45</span> : * was used in the user code for inference-only workload, this was under risk of</span>
<span id="L46"><span class="lineNum"> 46</span> : * producing wrong results silently in some edge cases. For example:</span>
<span id="L47"><span class="lineNum"> 47</span> : * ```</span>
<span id="L48"><span class="lineNum"> 48</span> : * torch::Tensor s = torch::ones({1, 2, 3}).set_requires_grad(true);</span>
<span id="L49"><span class="lineNum"> 49</span> : * torch::Tensor out = s * s;</span>
<span id="L50"><span class="lineNum"> 50</span> : * {</span>
<span id="L51"><span class="lineNum"> 51</span> : * at::AutoDispatchBelowAutograd guard;</span>
<span id="L52"><span class="lineNum"> 52</span> : * s.add_(1); // Skips version bump on `s`.</span>
<span id="L53"><span class="lineNum"> 53</span> : * }</span>
<span id="L54"><span class="lineNum"> 54</span> : * // WRONG GRADIENT! s.grad() are now computed using `s` value after the</span>
<span id="L55"><span class="lineNum"> 55</span> : * // inplace update.</span>
<span id="L56"><span class="lineNum"> 56</span> : * out.backward(torch::ones_like(out));</span>
<span id="L57"><span class="lineNum"> 57</span> : * ```</span>
<span id="L58"><span class="lineNum"> 58</span> : * Users should use `c10::InferenceMode` here so that it'll properly throw an</span>
<span id="L59"><span class="lineNum"> 59</span> : * error saying &quot;one of the variables needed for gradient computation has be modified.&quot;</span>
<span id="L60"><span class="lineNum"> 60</span> : */</span>
<span id="L61"><span class="lineNum"> 61</span> : struct TORCH_API AutoDispatchBelowAutograd {</span>
<span id="L62"><span class="lineNum"> 62</span> <span class="tlaGNC tlaBgGNC"> 401318 : AutoDispatchBelowAutograd() :</span></span>
<span id="L63"><span class="lineNum"> 63</span> <span class="tlaGNC"> 401318 : autograd_guard_(c10::autograd_dispatch_keyset) {</span></span>
<span id="L64"><span class="lineNum"> 64</span> <span class="tlaGNC"> 401318 : }</span></span>
<span id="L65"><span class="lineNum"> 65</span> : </span>
<span id="L66"><span class="lineNum"> 66</span> : // disable all autograd dispatch keys</span>
<span id="L67"><span class="lineNum"> 67</span> : c10::impl::ExcludeDispatchKeyGuard autograd_guard_;</span>
<span id="L68"><span class="lineNum"> 68</span> : };</span>
<span id="L69"><span class="lineNum"> 69</span> : </span>
<span id="L70"><span class="lineNum"> 70</span> : // TODO: AutoNonVariableTypeMode should be removed in release 1.10.</span>
<span id="L71"><span class="lineNum"> 71</span> : struct TORCH_API AutoNonVariableTypeMode {</span>
<span id="L72"><span class="lineNum"> 72</span> : AutoNonVariableTypeMode(bool enabled = true) :</span>
<span id="L73"><span class="lineNum"> 73</span> : autograd_guard_(c10::autograd_dispatch_keyset) {</span>
<span id="L74"><span class="lineNum"> 74</span> : TORCH_WARN_ONCE(&quot;AutoNonVariableTypeMode is deprecated and will be removed in 1.10 release. &quot;</span>
<span id="L75"><span class="lineNum"> 75</span> : &quot;For kernel implementations please use AutoDispatchBelowADInplaceOrView instead, &quot;</span>
<span id="L76"><span class="lineNum"> 76</span> : &quot;If you are looking for a user facing API to enable running your inference-only &quot;</span>
<span id="L77"><span class="lineNum"> 77</span> : &quot;workload, please use c10::InferenceMode. Using AutoDispatchBelowADInplaceOrView in user code &quot;</span>
<span id="L78"><span class="lineNum"> 78</span> : &quot;is under risk of producing silent wrong result in some edge cases. &quot;</span>
<span id="L79"><span class="lineNum"> 79</span> : &quot;See Note [AutoDispatchBelowAutograd] for more details.&quot;);</span>
<span id="L80"><span class="lineNum"> 80</span> : TORCH_INTERNAL_ASSERT(enabled);</span>
<span id="L81"><span class="lineNum"> 81</span> : }</span>
<span id="L82"><span class="lineNum"> 82</span> : </span>
<span id="L83"><span class="lineNum"> 83</span> : // disable all autograd dispatch keys</span>
<span id="L84"><span class="lineNum"> 84</span> : c10::impl::ExcludeDispatchKeyGuard autograd_guard_;</span>
<span id="L85"><span class="lineNum"> 85</span> : };</span>
<span id="L86"><span class="lineNum"> 86</span> : </span>
<span id="L87"><span class="lineNum"> 87</span> : struct TORCH_API AutoDispatchSkipFunctionalize {</span>
<span id="L88"><span class="lineNum"> 88</span> : AutoDispatchSkipFunctionalize() :</span>
<span id="L89"><span class="lineNum"> 89</span> : dispatch_key_guard_(c10::DispatchKeySet(c10::DispatchKey::Functionalize)) {</span>
<span id="L90"><span class="lineNum"> 90</span> : }</span>
<span id="L91"><span class="lineNum"> 91</span> : c10::impl::ExcludeDispatchKeyGuard dispatch_key_guard_;</span>
<span id="L92"><span class="lineNum"> 92</span> : };</span>
<span id="L93"><span class="lineNum"> 93</span> : </span>
<span id="L94"><span class="lineNum"> 94</span> : /* Note [AutoDispatchBelowADInplaceOrView]</span>
<span id="L95"><span class="lineNum"> 95</span> : * AutoDispatchBelowADInplaceOrView is equivalent to AutoNonVariableTypeMode</span>
<span id="L96"><span class="lineNum"> 96</span> : * before we split inplace &amp; view ops out of VariableType kernel.</span>
<span id="L97"><span class="lineNum"> 97</span> : * Note this guard is used in VariableType kernels for functional ops</span>
<span id="L98"><span class="lineNum"> 98</span> : * as well as ADInplaceOrView kernels for inplace/view ops to enforce the</span>
<span id="L99"><span class="lineNum"> 99</span> : * Invariant:</span>
<span id="L100"><span class="lineNum"> 100</span> : * Once you are in VariableType/ADInplaceOrView kernel for an op,</span>
<span id="L101"><span class="lineNum"> 101</span> : * you never go back to a kernel on same dispatch key until</span>
<span id="L102"><span class="lineNum"> 102</span> : * you finish the current op.</span>
<span id="L103"><span class="lineNum"> 103</span> : */</span>
<span id="L104"><span class="lineNum"> 104</span> : struct TORCH_API AutoDispatchBelowADInplaceOrView {</span>
<span id="L105"><span class="lineNum"> 105</span> <span class="tlaGNC"> 17526 : AutoDispatchBelowADInplaceOrView() :</span></span>
<span id="L106"><span class="lineNum"> 106</span> <span class="tlaGNC"> 17526 : dispatch_key_guard_(c10::autograd_dispatch_keyset_with_ADInplaceOrView) {</span></span>
<span id="L107"><span class="lineNum"> 107</span> <span class="tlaGNC"> 17526 : }</span></span>
<span id="L108"><span class="lineNum"> 108</span> : // disable Autograd &amp; ADInplaceOrView dispatch keys</span>
<span id="L109"><span class="lineNum"> 109</span> : c10::impl::ExcludeDispatchKeyGuard dispatch_key_guard_;</span>
<span id="L110"><span class="lineNum"> 110</span> : };</span>
<span id="L111"><span class="lineNum"> 111</span> : } // namespace at</span>
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,103 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/List_inl.h - functions</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - List_inl.h<span style="font-size: 80%;"> (<a href="List_inl.h.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">11</td>
<td class="headerCovTableEntry">11</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">4</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="List_inl.h.func.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="List_inl.h.gcov.html#L10">_ZN3c104ListINS_8optionalIN2at6TensorEEEEC2EONS_13intrusive_ptrINS_6detail8ListImplENS7_34intrusive_target_default_null_typeIS8_EEEE</a></td>
<td class="coverFnHi">36925424</td>
</tr>
<tr>
<td class="coverFn"><a href="List_inl.h.gcov.html#L18">_ZN3c104ListINS_8optionalIN2at6TensorEEEEC2Ev</a></td>
<td class="coverFnHi">36925424</td>
</tr>
<tr>
<td class="coverFn"><a href="List_inl.h.gcov.html#L102">_ZN3c106detail15ListElementFromINS_8optionalIN2at6TensorEEEE4fromEOS5_</a></td>
<td class="coverFnHi">105276376</td>
</tr>
<tr>
<td class="coverFn"><a href="List_inl.h.gcov.html#L264">_ZNK3c104ListINS_8optionalIN2at6TensorEEEE9push_backEOS4_</a></td>
<td class="coverFnHi">105276376</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,103 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/List_inl.h - functions</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - List_inl.h<span style="font-size: 80%;"> (<a href="List_inl.h.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">11</td>
<td class="headerCovTableEntry">11</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">4</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="List_inl.h.func-c.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="List_inl.h.gcov.html#L10">_ZN3c104ListINS_8optionalIN2at6TensorEEEEC2EONS_13intrusive_ptrINS_6detail8ListImplENS7_34intrusive_target_default_null_typeIS8_EEEE</a></td>
<td class="coverFnHi">36925424</td>
</tr>
<tr>
<td class="coverFn"><a href="List_inl.h.gcov.html#L18">_ZN3c104ListINS_8optionalIN2at6TensorEEEEC2Ev</a></td>
<td class="coverFnHi">36925424</td>
</tr>
<tr>
<td class="coverFn"><a href="List_inl.h.gcov.html#L102">_ZN3c106detail15ListElementFromINS_8optionalIN2at6TensorEEEE4fromEOS5_</a></td>
<td class="coverFnHi">105276376</td>
</tr>
<tr>
<td class="coverFn"><a href="List_inl.h.gcov.html#L264">_ZNK3c104ListINS_8optionalIN2at6TensorEEEE9push_backEOS4_</a></td>
<td class="coverFnHi">105276376</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,436 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/List_inl.h</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - List_inl.h<span style="font-size: 80%;"> (source / <a href="List_inl.h.func-c.html">functions</a>)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">11</td>
<td class="headerCovTableEntry">11</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">4</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Line data Source code</pre>
<pre class="source">
<span id="L1"><span class="lineNum"> 1</span> : #pragma once</span>
<span id="L2"><span class="lineNum"> 2</span> : </span>
<span id="L3"><span class="lineNum"> 3</span> : #include &lt;ATen/core/jit_type_base.h&gt;</span>
<span id="L4"><span class="lineNum"> 4</span> : #include &lt;ATen/core/ivalue.h&gt;</span>
<span id="L5"><span class="lineNum"> 5</span> : </span>
<span id="L6"><span class="lineNum"> 6</span> : namespace c10 {</span>
<span id="L7"><span class="lineNum"> 7</span> : </span>
<span id="L8"><span class="lineNum"> 8</span> : template&lt;class T&gt; decltype(auto) getTypePtr();</span>
<span id="L9"><span class="lineNum"> 9</span> : std::string toString(const Type&amp; type);</span>
<span id="L10"><span class="lineNum"> 10</span> : </span>
<span id="L11"><span class="lineNum"> 11</span> : template&lt;class T&gt;</span>
<span id="L12"><span class="lineNum"> 12</span> <span class="tlaGNC tlaBgGNC"> 36925424 : List&lt;T&gt;::List(c10::intrusive_ptr&lt;c10::detail::ListImpl&gt;&amp;&amp; elements)</span></span>
<span id="L13"><span class="lineNum"> 13</span> <span class="tlaGNC"> 36925424 : : impl_(std::move(elements)) {}</span></span>
<span id="L14"><span class="lineNum"> 14</span> : </span>
<span id="L15"><span class="lineNum"> 15</span> : template&lt;class T&gt;</span>
<span id="L16"><span class="lineNum"> 16</span> : List&lt;T&gt;::List(const c10::intrusive_ptr&lt;c10::detail::ListImpl&gt;&amp; elements)</span>
<span id="L17"><span class="lineNum"> 17</span> : : impl_(elements) {}</span>
<span id="L18"><span class="lineNum"> 18</span> : </span>
<span id="L19"><span class="lineNum"> 19</span> : template&lt;class T&gt;</span>
<span id="L20"><span class="lineNum"> 20</span> <span class="tlaGNC"> 36925424 : List&lt;T&gt;::List()</span></span>
<span id="L21"><span class="lineNum"> 21</span> : : List(make_intrusive&lt;c10::detail::ListImpl&gt;(</span>
<span id="L22"><span class="lineNum"> 22</span> <span class="tlaGNC"> 36925424 : typename c10::detail::ListImpl::list_type(),</span></span>
<span id="L23"><span class="lineNum"> 23</span> <span class="tlaGNC"> 36925424 : getTypePtr&lt;T&gt;())) {</span></span>
<span id="L24"><span class="lineNum"> 24</span> : static_assert(!std::is_same&lt;T, IValue&gt;::value, &quot;This constructor is not valid for List&lt;IValue&gt;. Please use c10::impl::GenericList(elementType) instead.&quot;);</span>
<span id="L25"><span class="lineNum"> 25</span> <span class="tlaGNC"> 36925424 : }</span></span>
<span id="L26"><span class="lineNum"> 26</span> : </span>
<span id="L27"><span class="lineNum"> 27</span> : template&lt;class T&gt;</span>
<span id="L28"><span class="lineNum"> 28</span> : List&lt;T&gt;::List(ArrayRef&lt;T&gt; values)</span>
<span id="L29"><span class="lineNum"> 29</span> : : List(make_intrusive&lt;c10::detail::ListImpl&gt;(</span>
<span id="L30"><span class="lineNum"> 30</span> : typename c10::detail::ListImpl::list_type(),</span>
<span id="L31"><span class="lineNum"> 31</span> : getTypePtr&lt;T&gt;())) {</span>
<span id="L32"><span class="lineNum"> 32</span> : static_assert(!std::is_same&lt;T, IValue&gt;::value, &quot;This constructor is not valid for List&lt;IValue&gt;. Please use c10::impl::GenericList(elementType).&quot;);</span>
<span id="L33"><span class="lineNum"> 33</span> : impl_-&gt;list.reserve(values.size());</span>
<span id="L34"><span class="lineNum"> 34</span> : for (const T&amp; element : values) {</span>
<span id="L35"><span class="lineNum"> 35</span> : impl_-&gt;list.push_back(element);</span>
<span id="L36"><span class="lineNum"> 36</span> : }</span>
<span id="L37"><span class="lineNum"> 37</span> : }</span>
<span id="L38"><span class="lineNum"> 38</span> : </span>
<span id="L39"><span class="lineNum"> 39</span> : template&lt;class T&gt;</span>
<span id="L40"><span class="lineNum"> 40</span> : List&lt;T&gt;::List(std::initializer_list&lt;T&gt; initial_values)</span>
<span id="L41"><span class="lineNum"> 41</span> : : List(ArrayRef&lt;T&gt;(initial_values)) {</span>
<span id="L42"><span class="lineNum"> 42</span> : static_assert(!std::is_same&lt;T, IValue&gt;::value, &quot;This constructor is not valid for List&lt;IValue&gt;. Please use c10::impl::GenericList(elementType).&quot;);</span>
<span id="L43"><span class="lineNum"> 43</span> : }</span>
<span id="L44"><span class="lineNum"> 44</span> : </span>
<span id="L45"><span class="lineNum"> 45</span> : template&lt;class T&gt;</span>
<span id="L46"><span class="lineNum"> 46</span> : List&lt;T&gt;::List(TypePtr elementType)</span>
<span id="L47"><span class="lineNum"> 47</span> : : List(make_intrusive&lt;c10::detail::ListImpl&gt;(</span>
<span id="L48"><span class="lineNum"> 48</span> : typename c10::detail::ListImpl::list_type(),</span>
<span id="L49"><span class="lineNum"> 49</span> : std::move(elementType))) {</span>
<span id="L50"><span class="lineNum"> 50</span> : static_assert(std::is_same&lt;T, IValue&gt;::value || std::is_same&lt;T, c10::intrusive_ptr&lt;ivalue::Future&gt;&gt;::value,</span>
<span id="L51"><span class="lineNum"> 51</span> : &quot;This constructor is only valid for c10::impl::GenericList or List&lt;Future&gt;.&quot;);</span>
<span id="L52"><span class="lineNum"> 52</span> : }</span>
<span id="L53"><span class="lineNum"> 53</span> : </span>
<span id="L54"><span class="lineNum"> 54</span> : namespace impl {</span>
<span id="L55"><span class="lineNum"> 55</span> : template&lt;class T&gt;</span>
<span id="L56"><span class="lineNum"> 56</span> : List&lt;T&gt; toTypedList(impl::GenericList list) {</span>
<span id="L57"><span class="lineNum"> 57</span> : // If there's other instances of the list (i.e. list.use_count() &gt; 1), then we have to be invariant</span>
<span id="L58"><span class="lineNum"> 58</span> : // because upcasting would allow people to add types into the new list that would break the old list.</span>
<span id="L59"><span class="lineNum"> 59</span> : // However, if there aren't any other instances of this list (i.e. list.use_count() == 1), then we can</span>
<span id="L60"><span class="lineNum"> 60</span> : // allow upcasting. This can be a perf improvement since we can cast List&lt;T&gt; to List&lt;optional&lt;T&gt;&gt;</span>
<span id="L61"><span class="lineNum"> 61</span> : // without having to copy it. This is also used to provide backwards compatibility with some old models</span>
<span id="L62"><span class="lineNum"> 62</span> : // that serialized the index arguments to aten::index, aten::index_put, aten::index_put_ and aten::index_put_impl_</span>
<span id="L63"><span class="lineNum"> 63</span> : // as List&lt;Tensor&gt; before we changed that argument to be List&lt;optional&lt;Tensor&gt;&gt;. When deserializing, we</span>
<span id="L64"><span class="lineNum"> 64</span> : // have list.use_count() == 1 and can deserialize the List&lt;Tensor&gt; directly as List&lt;optional&lt;Tensor&gt;&gt;.</span>
<span id="L65"><span class="lineNum"> 65</span> : TORCH_CHECK(*list.impl_-&gt;elementType == *getTypePtr&lt;T&gt;()</span>
<span id="L66"><span class="lineNum"> 66</span> : || (list.use_count() == 1 &amp;&amp; list.impl_-&gt;elementType-&gt;isSubtypeOf(*getTypePtr&lt;T&gt;()))</span>
<span id="L67"><span class="lineNum"> 67</span> : , &quot;Tried to cast a List&lt;&quot;, toString(*list.impl_-&gt;elementType), &quot;&gt; to a List&lt;&quot;, toString(*getTypePtr&lt;T&gt;()), &quot;&gt;. Types mismatch.&quot;);</span>
<span id="L68"><span class="lineNum"> 68</span> : return List&lt;T&gt;(std::move(list.impl_));</span>
<span id="L69"><span class="lineNum"> 69</span> : }</span>
<span id="L70"><span class="lineNum"> 70</span> : </span>
<span id="L71"><span class="lineNum"> 71</span> : template&lt;class T&gt;</span>
<span id="L72"><span class="lineNum"> 72</span> : impl::GenericList toList(List&lt;T&gt;&amp;&amp; list) {</span>
<span id="L73"><span class="lineNum"> 73</span> : return GenericList(std::move(list.impl_));</span>
<span id="L74"><span class="lineNum"> 74</span> : }</span>
<span id="L75"><span class="lineNum"> 75</span> : template&lt;class T&gt;</span>
<span id="L76"><span class="lineNum"> 76</span> : impl::GenericList toList(const List&lt;T&gt;&amp; list) {</span>
<span id="L77"><span class="lineNum"> 77</span> : return GenericList(list.impl_);</span>
<span id="L78"><span class="lineNum"> 78</span> : }</span>
<span id="L79"><span class="lineNum"> 79</span> : }</span>
<span id="L80"><span class="lineNum"> 80</span> : </span>
<span id="L81"><span class="lineNum"> 81</span> : template&lt;class T&gt;</span>
<span id="L82"><span class="lineNum"> 82</span> : List&lt;T&gt; List&lt;T&gt;::copy() const {</span>
<span id="L83"><span class="lineNum"> 83</span> : return List&lt;T&gt;(impl_-&gt;copy());</span>
<span id="L84"><span class="lineNum"> 84</span> : }</span>
<span id="L85"><span class="lineNum"> 85</span> : </span>
<span id="L86"><span class="lineNum"> 86</span> : namespace detail {</span>
<span id="L87"><span class="lineNum"> 87</span> : template&lt;class T&gt;</span>
<span id="L88"><span class="lineNum"> 88</span> : T list_element_to(T element) {</span>
<span id="L89"><span class="lineNum"> 89</span> : return element;</span>
<span id="L90"><span class="lineNum"> 90</span> : }</span>
<span id="L91"><span class="lineNum"> 91</span> : template&lt;class T&gt;</span>
<span id="L92"><span class="lineNum"> 92</span> : T list_element_to(const IValue&amp; element) {</span>
<span id="L93"><span class="lineNum"> 93</span> : return element.template to&lt;T&gt;();</span>
<span id="L94"><span class="lineNum"> 94</span> : }</span>
<span id="L95"><span class="lineNum"> 95</span> : template&lt;class T&gt;</span>
<span id="L96"><span class="lineNum"> 96</span> : T list_element_to(IValue&amp;&amp; element) {</span>
<span id="L97"><span class="lineNum"> 97</span> : return std::move(element).template to&lt;T&gt;();</span>
<span id="L98"><span class="lineNum"> 98</span> : }</span>
<span id="L99"><span class="lineNum"> 99</span> : template&lt;class T&gt;</span>
<span id="L100"><span class="lineNum"> 100</span> : struct ListElementFrom {</span>
<span id="L101"><span class="lineNum"> 101</span> : static IValue from(const T&amp; element) {</span>
<span id="L102"><span class="lineNum"> 102</span> : return element;</span>
<span id="L103"><span class="lineNum"> 103</span> : }</span>
<span id="L104"><span class="lineNum"> 104</span> <span class="tlaGNC"> 105276376 : static IValue from(T&amp;&amp; element) {</span></span>
<span id="L105"><span class="lineNum"> 105</span> <span class="tlaGNC"> 105276376 : return std::move(element);</span></span>
<span id="L106"><span class="lineNum"> 106</span> : }</span>
<span id="L107"><span class="lineNum"> 107</span> : };</span>
<span id="L108"><span class="lineNum"> 108</span> : template&lt;&gt;</span>
<span id="L109"><span class="lineNum"> 109</span> : struct ListElementFrom&lt;IValue&gt; {</span>
<span id="L110"><span class="lineNum"> 110</span> : static const IValue&amp; from(const IValue&amp; element) {</span>
<span id="L111"><span class="lineNum"> 111</span> : return element;</span>
<span id="L112"><span class="lineNum"> 112</span> : }</span>
<span id="L113"><span class="lineNum"> 113</span> : static IValue&amp;&amp; from(IValue&amp;&amp; element) {</span>
<span id="L114"><span class="lineNum"> 114</span> : return std::move(element);</span>
<span id="L115"><span class="lineNum"> 115</span> : }</span>
<span id="L116"><span class="lineNum"> 116</span> : };</span>
<span id="L117"><span class="lineNum"> 117</span> : }</span>
<span id="L118"><span class="lineNum"> 118</span> : </span>
<span id="L119"><span class="lineNum"> 119</span> : namespace impl {</span>
<span id="L120"><span class="lineNum"> 120</span> : </span>
<span id="L121"><span class="lineNum"> 121</span> : template &lt;class T, class Iterator&gt;</span>
<span id="L122"><span class="lineNum"> 122</span> : ListElementReference&lt;T, Iterator&gt;::operator std::conditional_t&lt;</span>
<span id="L123"><span class="lineNum"> 123</span> : std::is_reference&lt;typename c10::detail::ivalue_to_const_ref_overload_return&lt;</span>
<span id="L124"><span class="lineNum"> 124</span> : T&gt;::type&gt;::value,</span>
<span id="L125"><span class="lineNum"> 125</span> : const T&amp;,</span>
<span id="L126"><span class="lineNum"> 126</span> : T&gt;() const {</span>
<span id="L127"><span class="lineNum"> 127</span> : return iterator_-&gt;template to&lt;T&gt;();</span>
<span id="L128"><span class="lineNum"> 128</span> : }</span>
<span id="L129"><span class="lineNum"> 129</span> : </span>
<span id="L130"><span class="lineNum"> 130</span> : template&lt;class T, class Iterator&gt;</span>
<span id="L131"><span class="lineNum"> 131</span> : ListElementReference&lt;T, Iterator&gt;&amp; ListElementReference&lt;T, Iterator&gt;::operator=(T&amp;&amp; new_value) &amp;&amp; {</span>
<span id="L132"><span class="lineNum"> 132</span> : *iterator_ = c10::detail::ListElementFrom&lt;T&gt;::from(std::move(new_value));</span>
<span id="L133"><span class="lineNum"> 133</span> : return *this;</span>
<span id="L134"><span class="lineNum"> 134</span> : }</span>
<span id="L135"><span class="lineNum"> 135</span> : </span>
<span id="L136"><span class="lineNum"> 136</span> : template&lt;class T, class Iterator&gt;</span>
<span id="L137"><span class="lineNum"> 137</span> : ListElementReference&lt;T, Iterator&gt;&amp; ListElementReference&lt;T, Iterator&gt;::operator=(const T&amp; new_value) &amp;&amp; {</span>
<span id="L138"><span class="lineNum"> 138</span> : *iterator_ = c10::detail::ListElementFrom&lt;T&gt;::from(new_value);</span>
<span id="L139"><span class="lineNum"> 139</span> : return *this;</span>
<span id="L140"><span class="lineNum"> 140</span> : }</span>
<span id="L141"><span class="lineNum"> 141</span> : </span>
<span id="L142"><span class="lineNum"> 142</span> : template&lt;class T, class Iterator&gt;</span>
<span id="L143"><span class="lineNum"> 143</span> : ListElementReference&lt;T, Iterator&gt;&amp; ListElementReference&lt;T, Iterator&gt;::operator=(ListElementReference&lt;T, Iterator&gt;&amp;&amp; rhs) &amp;&amp; noexcept {</span>
<span id="L144"><span class="lineNum"> 144</span> : *iterator_ = *rhs.iterator_;</span>
<span id="L145"><span class="lineNum"> 145</span> : return *this;</span>
<span id="L146"><span class="lineNum"> 146</span> : }</span>
<span id="L147"><span class="lineNum"> 147</span> : </span>
<span id="L148"><span class="lineNum"> 148</span> : template&lt;class T, class Iterator&gt;</span>
<span id="L149"><span class="lineNum"> 149</span> : void swap(ListElementReference&lt;T, Iterator&gt;&amp;&amp; lhs, ListElementReference&lt;T, Iterator&gt;&amp;&amp; rhs) {</span>
<span id="L150"><span class="lineNum"> 150</span> : std::swap(*lhs.iterator_, *rhs.iterator_);</span>
<span id="L151"><span class="lineNum"> 151</span> : }</span>
<span id="L152"><span class="lineNum"> 152</span> : </span>
<span id="L153"><span class="lineNum"> 153</span> : template&lt;class T, class Iterator&gt;</span>
<span id="L154"><span class="lineNum"> 154</span> : bool operator==(const ListElementReference&lt;T, Iterator&gt;&amp; lhs, const T&amp; rhs) {</span>
<span id="L155"><span class="lineNum"> 155</span> : const T&amp; lhs_tmp = lhs;</span>
<span id="L156"><span class="lineNum"> 156</span> : return lhs_tmp == rhs;</span>
<span id="L157"><span class="lineNum"> 157</span> : }</span>
<span id="L158"><span class="lineNum"> 158</span> : </span>
<span id="L159"><span class="lineNum"> 159</span> : template&lt;class T, class Iterator&gt;</span>
<span id="L160"><span class="lineNum"> 160</span> : inline bool operator==(const T&amp; lhs, const ListElementReference&lt;T, Iterator&gt;&amp; rhs) {</span>
<span id="L161"><span class="lineNum"> 161</span> : return rhs == lhs;</span>
<span id="L162"><span class="lineNum"> 162</span> : }</span>
<span id="L163"><span class="lineNum"> 163</span> : </span>
<span id="L164"><span class="lineNum"> 164</span> : template&lt;class T&gt;</span>
<span id="L165"><span class="lineNum"> 165</span> : inline typename ListElementConstReferenceTraits&lt;T&gt;::const_reference</span>
<span id="L166"><span class="lineNum"> 166</span> : list_element_to_const_ref(const IValue&amp; element) {</span>
<span id="L167"><span class="lineNum"> 167</span> : return element.template to&lt;T&gt;();</span>
<span id="L168"><span class="lineNum"> 168</span> : }</span>
<span id="L169"><span class="lineNum"> 169</span> : </span>
<span id="L170"><span class="lineNum"> 170</span> : template&lt;&gt;</span>
<span id="L171"><span class="lineNum"> 171</span> : inline typename ListElementConstReferenceTraits&lt;c10::optional&lt;std::string&gt;&gt;::const_reference</span>
<span id="L172"><span class="lineNum"> 172</span> : list_element_to_const_ref&lt;c10::optional&lt;std::string&gt;&gt;(const IValue&amp; element) {</span>
<span id="L173"><span class="lineNum"> 173</span> : return element.toOptionalStringRef();</span>
<span id="L174"><span class="lineNum"> 174</span> : }</span>
<span id="L175"><span class="lineNum"> 175</span> : </span>
<span id="L176"><span class="lineNum"> 176</span> : } // namespace impl</span>
<span id="L177"><span class="lineNum"> 177</span> : </span>
<span id="L178"><span class="lineNum"> 178</span> : template&lt;class T&gt;</span>
<span id="L179"><span class="lineNum"> 179</span> : void List&lt;T&gt;::set(size_type pos, const value_type&amp; value) const {</span>
<span id="L180"><span class="lineNum"> 180</span> : impl_-&gt;list.at(pos) = c10::detail::ListElementFrom&lt;T&gt;::from(value);</span>
<span id="L181"><span class="lineNum"> 181</span> : }</span>
<span id="L182"><span class="lineNum"> 182</span> : </span>
<span id="L183"><span class="lineNum"> 183</span> : template&lt;class T&gt;</span>
<span id="L184"><span class="lineNum"> 184</span> : void List&lt;T&gt;::set(size_type pos, value_type&amp;&amp; value) const {</span>
<span id="L185"><span class="lineNum"> 185</span> : impl_-&gt;list.at(pos) = c10::detail::ListElementFrom&lt;T&gt;::from(std::move(value));</span>
<span id="L186"><span class="lineNum"> 186</span> : }</span>
<span id="L187"><span class="lineNum"> 187</span> : </span>
<span id="L188"><span class="lineNum"> 188</span> : template&lt;class T&gt;</span>
<span id="L189"><span class="lineNum"> 189</span> : typename List&lt;T&gt;::value_type List&lt;T&gt;::get(size_type pos) const {</span>
<span id="L190"><span class="lineNum"> 190</span> : return c10::detail::list_element_to&lt;T&gt;(impl_-&gt;list.at(pos));</span>
<span id="L191"><span class="lineNum"> 191</span> : }</span>
<span id="L192"><span class="lineNum"> 192</span> : </span>
<span id="L193"><span class="lineNum"> 193</span> : template&lt;class T&gt;</span>
<span id="L194"><span class="lineNum"> 194</span> : typename List&lt;T&gt;::internal_const_reference_type List&lt;T&gt;::operator[](size_type pos) const {</span>
<span id="L195"><span class="lineNum"> 195</span> : return c10::impl::list_element_to_const_ref&lt;T&gt;(impl_-&gt;list.at(pos));</span>
<span id="L196"><span class="lineNum"> 196</span> : }</span>
<span id="L197"><span class="lineNum"> 197</span> : </span>
<span id="L198"><span class="lineNum"> 198</span> : template&lt;class T&gt;</span>
<span id="L199"><span class="lineNum"> 199</span> : typename List&lt;T&gt;::internal_reference_type List&lt;T&gt;::operator[](size_type pos) {</span>
<span id="L200"><span class="lineNum"> 200</span> : static_cast&lt;void&gt;(impl_-&gt;list.at(pos)); // Throw the exception if it is out of range.</span>
<span id="L201"><span class="lineNum"> 201</span> : return {impl_-&gt;list.begin() + pos};</span>
<span id="L202"><span class="lineNum"> 202</span> : }</span>
<span id="L203"><span class="lineNum"> 203</span> : </span>
<span id="L204"><span class="lineNum"> 204</span> : template&lt;class T&gt;</span>
<span id="L205"><span class="lineNum"> 205</span> : typename List&lt;T&gt;::value_type List&lt;T&gt;::extract(size_type pos) const {</span>
<span id="L206"><span class="lineNum"> 206</span> : auto&amp; elem = impl_-&gt;list.at(pos);</span>
<span id="L207"><span class="lineNum"> 207</span> : auto result = c10::detail::list_element_to&lt;T&gt;(std::move(elem));</span>
<span id="L208"><span class="lineNum"> 208</span> : // Reset the list element to a T() instead of None to keep it correctly typed</span>
<span id="L209"><span class="lineNum"> 209</span> : elem = c10::detail::ListElementFrom&lt;T&gt;::from(T{});</span>
<span id="L210"><span class="lineNum"> 210</span> : return result;</span>
<span id="L211"><span class="lineNum"> 211</span> : }</span>
<span id="L212"><span class="lineNum"> 212</span> : </span>
<span id="L213"><span class="lineNum"> 213</span> : template&lt;class T&gt;</span>
<span id="L214"><span class="lineNum"> 214</span> : typename List&lt;T&gt;::iterator List&lt;T&gt;::begin() const {</span>
<span id="L215"><span class="lineNum"> 215</span> : return iterator(impl_-&gt;list.begin());</span>
<span id="L216"><span class="lineNum"> 216</span> : }</span>
<span id="L217"><span class="lineNum"> 217</span> : </span>
<span id="L218"><span class="lineNum"> 218</span> : template&lt;class T&gt;</span>
<span id="L219"><span class="lineNum"> 219</span> : typename List&lt;T&gt;::iterator List&lt;T&gt;::end() const {</span>
<span id="L220"><span class="lineNum"> 220</span> : return iterator(impl_-&gt;list.end());</span>
<span id="L221"><span class="lineNum"> 221</span> : }</span>
<span id="L222"><span class="lineNum"> 222</span> : </span>
<span id="L223"><span class="lineNum"> 223</span> : template&lt;class T&gt;</span>
<span id="L224"><span class="lineNum"> 224</span> : bool List&lt;T&gt;::empty() const {</span>
<span id="L225"><span class="lineNum"> 225</span> : return impl_-&gt;list.empty();</span>
<span id="L226"><span class="lineNum"> 226</span> : }</span>
<span id="L227"><span class="lineNum"> 227</span> : </span>
<span id="L228"><span class="lineNum"> 228</span> : template&lt;class T&gt;</span>
<span id="L229"><span class="lineNum"> 229</span> : typename List&lt;T&gt;::size_type List&lt;T&gt;::size() const {</span>
<span id="L230"><span class="lineNum"> 230</span> : return impl_-&gt;list.size();</span>
<span id="L231"><span class="lineNum"> 231</span> : }</span>
<span id="L232"><span class="lineNum"> 232</span> : </span>
<span id="L233"><span class="lineNum"> 233</span> : template&lt;class T&gt;</span>
<span id="L234"><span class="lineNum"> 234</span> : void List&lt;T&gt;::reserve(size_type new_cap) const {</span>
<span id="L235"><span class="lineNum"> 235</span> : impl_-&gt;list.reserve(new_cap);</span>
<span id="L236"><span class="lineNum"> 236</span> : }</span>
<span id="L237"><span class="lineNum"> 237</span> : </span>
<span id="L238"><span class="lineNum"> 238</span> : template&lt;class T&gt;</span>
<span id="L239"><span class="lineNum"> 239</span> : void List&lt;T&gt;::clear() const {</span>
<span id="L240"><span class="lineNum"> 240</span> : impl_-&gt;list.clear();</span>
<span id="L241"><span class="lineNum"> 241</span> : }</span>
<span id="L242"><span class="lineNum"> 242</span> : </span>
<span id="L243"><span class="lineNum"> 243</span> : template&lt;class T&gt;</span>
<span id="L244"><span class="lineNum"> 244</span> : typename List&lt;T&gt;::iterator List&lt;T&gt;::insert(iterator pos, const T&amp; value) const {</span>
<span id="L245"><span class="lineNum"> 245</span> : return iterator { impl_-&gt;list.insert(pos.iterator_, c10::detail::ListElementFrom&lt;T&gt;::from(value)) };</span>
<span id="L246"><span class="lineNum"> 246</span> : }</span>
<span id="L247"><span class="lineNum"> 247</span> : </span>
<span id="L248"><span class="lineNum"> 248</span> : template&lt;class T&gt;</span>
<span id="L249"><span class="lineNum"> 249</span> : typename List&lt;T&gt;::iterator List&lt;T&gt;::insert(iterator pos, T&amp;&amp; value) const {</span>
<span id="L250"><span class="lineNum"> 250</span> : return iterator { impl_-&gt;list.insert(pos.iterator_, c10::detail::ListElementFrom&lt;T&gt;::from(std::move(value))) };</span>
<span id="L251"><span class="lineNum"> 251</span> : }</span>
<span id="L252"><span class="lineNum"> 252</span> : </span>
<span id="L253"><span class="lineNum"> 253</span> : template&lt;class T&gt;</span>
<span id="L254"><span class="lineNum"> 254</span> : template&lt;class... Args&gt;</span>
<span id="L255"><span class="lineNum"> 255</span> : typename List&lt;T&gt;::iterator List&lt;T&gt;::emplace(iterator pos, Args&amp;&amp;... value) const {</span>
<span id="L256"><span class="lineNum"> 256</span> : // TODO Use list_element_from?</span>
<span id="L257"><span class="lineNum"> 257</span> : return iterator { impl_-&gt;list.emplace(pos.iterator_, std::forward&lt;Args&gt;(value)...) };</span>
<span id="L258"><span class="lineNum"> 258</span> : }</span>
<span id="L259"><span class="lineNum"> 259</span> : </span>
<span id="L260"><span class="lineNum"> 260</span> : template&lt;class T&gt;</span>
<span id="L261"><span class="lineNum"> 261</span> : void List&lt;T&gt;::push_back(const T&amp; value) const {</span>
<span id="L262"><span class="lineNum"> 262</span> : impl_-&gt;list.push_back(c10::detail::ListElementFrom&lt;T&gt;::from(value));</span>
<span id="L263"><span class="lineNum"> 263</span> : }</span>
<span id="L264"><span class="lineNum"> 264</span> : </span>
<span id="L265"><span class="lineNum"> 265</span> : template&lt;class T&gt;</span>
<span id="L266"><span class="lineNum"> 266</span> <span class="tlaGNC"> 105276376 : void List&lt;T&gt;::push_back(T&amp;&amp; value) const {</span></span>
<span id="L267"><span class="lineNum"> 267</span> <span class="tlaGNC"> 105276376 : impl_-&gt;list.push_back(c10::detail::ListElementFrom&lt;T&gt;::from(std::move(value)));</span></span>
<span id="L268"><span class="lineNum"> 268</span> <span class="tlaGNC"> 105276376 : }</span></span>
<span id="L269"><span class="lineNum"> 269</span> : </span>
<span id="L270"><span class="lineNum"> 270</span> : template&lt;class T&gt;</span>
<span id="L271"><span class="lineNum"> 271</span> : void List&lt;T&gt;::append(List&lt;T&gt; b) const {</span>
<span id="L272"><span class="lineNum"> 272</span> : if (b.use_count() == 1) {</span>
<span id="L273"><span class="lineNum"> 273</span> : impl_-&gt;list.insert(impl_-&gt;list.end(), make_move_iterator(b.impl_-&gt;list.begin()), make_move_iterator(b.impl_-&gt;list.end()));</span>
<span id="L274"><span class="lineNum"> 274</span> : } else {</span>
<span id="L275"><span class="lineNum"> 275</span> : impl_-&gt;list.insert(impl_-&gt;list.end(), b.impl_-&gt;list.begin(), b.impl_-&gt;list.end());</span>
<span id="L276"><span class="lineNum"> 276</span> : }</span>
<span id="L277"><span class="lineNum"> 277</span> : }</span>
<span id="L278"><span class="lineNum"> 278</span> : </span>
<span id="L279"><span class="lineNum"> 279</span> : template&lt;class T&gt;</span>
<span id="L280"><span class="lineNum"> 280</span> : template&lt;class... Args&gt;</span>
<span id="L281"><span class="lineNum"> 281</span> : void List&lt;T&gt;::emplace_back(Args&amp;&amp;... args) const {</span>
<span id="L282"><span class="lineNum"> 282</span> : // TODO Use list_element_from?</span>
<span id="L283"><span class="lineNum"> 283</span> : impl_-&gt;list.push_back(T(std::forward&lt;Args&gt;(args)...));</span>
<span id="L284"><span class="lineNum"> 284</span> : }</span>
<span id="L285"><span class="lineNum"> 285</span> : </span>
<span id="L286"><span class="lineNum"> 286</span> : template&lt;class T&gt;</span>
<span id="L287"><span class="lineNum"> 287</span> : typename List&lt;T&gt;::iterator List&lt;T&gt;::erase(iterator pos) const {</span>
<span id="L288"><span class="lineNum"> 288</span> : return iterator { impl_-&gt;list.erase(pos.iterator_) };</span>
<span id="L289"><span class="lineNum"> 289</span> : }</span>
<span id="L290"><span class="lineNum"> 290</span> : </span>
<span id="L291"><span class="lineNum"> 291</span> : template&lt;class T&gt;</span>
<span id="L292"><span class="lineNum"> 292</span> : typename List&lt;T&gt;::iterator List&lt;T&gt;::erase(iterator first, iterator last) const {</span>
<span id="L293"><span class="lineNum"> 293</span> : return iterator { impl_-&gt;list.erase(first.iterator_, last.iterator_) };</span>
<span id="L294"><span class="lineNum"> 294</span> : }</span>
<span id="L295"><span class="lineNum"> 295</span> : </span>
<span id="L296"><span class="lineNum"> 296</span> : template&lt;class T&gt;</span>
<span id="L297"><span class="lineNum"> 297</span> : void List&lt;T&gt;::pop_back() const {</span>
<span id="L298"><span class="lineNum"> 298</span> : impl_-&gt;list.pop_back();</span>
<span id="L299"><span class="lineNum"> 299</span> : }</span>
<span id="L300"><span class="lineNum"> 300</span> : </span>
<span id="L301"><span class="lineNum"> 301</span> : template&lt;class T&gt;</span>
<span id="L302"><span class="lineNum"> 302</span> : void List&lt;T&gt;::resize(size_type count) const {</span>
<span id="L303"><span class="lineNum"> 303</span> : impl_-&gt;list.resize(count, T{});</span>
<span id="L304"><span class="lineNum"> 304</span> : }</span>
<span id="L305"><span class="lineNum"> 305</span> : </span>
<span id="L306"><span class="lineNum"> 306</span> : template&lt;class T&gt;</span>
<span id="L307"><span class="lineNum"> 307</span> : void List&lt;T&gt;::resize(size_type count, const T&amp; value) const {</span>
<span id="L308"><span class="lineNum"> 308</span> : impl_-&gt;list.resize(count, value);</span>
<span id="L309"><span class="lineNum"> 309</span> : }</span>
<span id="L310"><span class="lineNum"> 310</span> : </span>
<span id="L311"><span class="lineNum"> 311</span> : template&lt;class T&gt;</span>
<span id="L312"><span class="lineNum"> 312</span> : bool operator==(const List&lt;T&gt;&amp; lhs, const List&lt;T&gt;&amp; rhs) {</span>
<span id="L313"><span class="lineNum"> 313</span> : // Lists with the same identity trivially compare equal.</span>
<span id="L314"><span class="lineNum"> 314</span> : if (lhs.impl_ == rhs.impl_) {</span>
<span id="L315"><span class="lineNum"> 315</span> : return true;</span>
<span id="L316"><span class="lineNum"> 316</span> : }</span>
<span id="L317"><span class="lineNum"> 317</span> : </span>
<span id="L318"><span class="lineNum"> 318</span> : // Otherwise, just compare values directly.</span>
<span id="L319"><span class="lineNum"> 319</span> : return *lhs.impl_ == *rhs.impl_;</span>
<span id="L320"><span class="lineNum"> 320</span> : }</span>
<span id="L321"><span class="lineNum"> 321</span> : </span>
<span id="L322"><span class="lineNum"> 322</span> : template&lt;class T&gt;</span>
<span id="L323"><span class="lineNum"> 323</span> : bool operator!=(const List&lt;T&gt;&amp; lhs, const List&lt;T&gt;&amp; rhs) {</span>
<span id="L324"><span class="lineNum"> 324</span> : return !(lhs == rhs);</span>
<span id="L325"><span class="lineNum"> 325</span> : }</span>
<span id="L326"><span class="lineNum"> 326</span> : </span>
<span id="L327"><span class="lineNum"> 327</span> : template&lt;class T&gt;</span>
<span id="L328"><span class="lineNum"> 328</span> : bool List&lt;T&gt;::is(const List&lt;T&gt;&amp; rhs) const {</span>
<span id="L329"><span class="lineNum"> 329</span> : return this-&gt;impl_ == rhs.impl_;</span>
<span id="L330"><span class="lineNum"> 330</span> : }</span>
<span id="L331"><span class="lineNum"> 331</span> : </span>
<span id="L332"><span class="lineNum"> 332</span> : template&lt;class T&gt;</span>
<span id="L333"><span class="lineNum"> 333</span> : std::vector&lt;T&gt; List&lt;T&gt;::vec() const {</span>
<span id="L334"><span class="lineNum"> 334</span> : std::vector&lt;T&gt; result(begin(), end());</span>
<span id="L335"><span class="lineNum"> 335</span> : return result;</span>
<span id="L336"><span class="lineNum"> 336</span> : }</span>
<span id="L337"><span class="lineNum"> 337</span> : </span>
<span id="L338"><span class="lineNum"> 338</span> : template&lt;class T&gt;</span>
<span id="L339"><span class="lineNum"> 339</span> : size_t List&lt;T&gt;::use_count() const {</span>
<span id="L340"><span class="lineNum"> 340</span> : return impl_.use_count();</span>
<span id="L341"><span class="lineNum"> 341</span> : }</span>
<span id="L342"><span class="lineNum"> 342</span> : </span>
<span id="L343"><span class="lineNum"> 343</span> : template &lt;class T&gt;</span>
<span id="L344"><span class="lineNum"> 344</span> : TypePtr List&lt;T&gt;::elementType() const {</span>
<span id="L345"><span class="lineNum"> 345</span> : return impl_-&gt;elementType;</span>
<span id="L346"><span class="lineNum"> 346</span> : }</span>
<span id="L347"><span class="lineNum"> 347</span> : </span>
<span id="L348"><span class="lineNum"> 348</span> : template &lt;class T&gt;</span>
<span id="L349"><span class="lineNum"> 349</span> : void List&lt;T&gt;::unsafeSetElementType(TypePtr t) {</span>
<span id="L350"><span class="lineNum"> 350</span> : impl_-&gt;elementType = std::move(t);</span>
<span id="L351"><span class="lineNum"> 351</span> : }</span>
<span id="L352"><span class="lineNum"> 352</span> : </span>
<span id="L353"><span class="lineNum"> 353</span> : namespace impl {</span>
<span id="L354"><span class="lineNum"> 354</span> : </span>
<span id="L355"><span class="lineNum"> 355</span> : inline const IValue* ptr_to_first_element(const GenericList&amp; list) {</span>
<span id="L356"><span class="lineNum"> 356</span> : return &amp;list.impl_-&gt;list[0];</span>
<span id="L357"><span class="lineNum"> 357</span> : }</span>
<span id="L358"><span class="lineNum"> 358</span> : </span>
<span id="L359"><span class="lineNum"> 359</span> : }</span>
<span id="L360"><span class="lineNum"> 360</span> : }</span>
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,124 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/TensorAccessor.h - functions</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - TensorAccessor.h<span style="font-size: 80%;"> (<a href="TensorAccessor.h.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">10</td>
<td class="headerCovTableEntry">10</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">6</td>
<td class="headerCovTableEntry">6</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="TensorAccessor.h.func.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="TensorAccessor.h.gcov.html#L74">_ZN2at14TensorAccessorIiLm2ENS_16DefaultPtrTraitsElEC2EPiPKlS5_</a></td>
<td class="coverFnHi">80</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorAccessor.h.gcov.html#L94">_ZN2at14TensorAccessorIiLm1ENS_16DefaultPtrTraitsElEC2EPiPKlS5_</a></td>
<td class="coverFnHi">151268</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorAccessor.h.gcov.html#L99">_ZN2at14TensorAccessorIiLm1ENS_16DefaultPtrTraitsElEixEl</a></td>
<td class="coverFnHi">151268</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorAccessor.h.gcov.html#L80">_ZN2at14TensorAccessorIiLm2ENS_16DefaultPtrTraitsElEixEl</a></td>
<td class="coverFnHi">151268</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorAccessor.h.gcov.html#L36">_ZN2at18TensorAccessorBaseIiLm1ENS_16DefaultPtrTraitsElEC2EPiPKlS5_</a></td>
<td class="coverFnHi">151348</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TensorAccessor.h.gcov.html#L36">_ZN2at18TensorAccessorBaseIiLm2ENS_16DefaultPtrTraitsElEC2EPiPKlS5_</a></td>
<td class="coverFnAliasHi">80</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TensorAccessor.h.gcov.html#L36">_ZN2at18TensorAccessorBaseIiLm1ENS_16DefaultPtrTraitsElEC2EPiPKlS5_</a></td>
<td class="coverFnAliasHi">151268</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,124 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/TensorAccessor.h - functions</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - TensorAccessor.h<span style="font-size: 80%;"> (<a href="TensorAccessor.h.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">10</td>
<td class="headerCovTableEntry">10</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">6</td>
<td class="headerCovTableEntry">6</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="TensorAccessor.h.func-c.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="TensorAccessor.h.gcov.html#L94">_ZN2at14TensorAccessorIiLm1ENS_16DefaultPtrTraitsElEC2EPiPKlS5_</a></td>
<td class="coverFnHi">151268</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorAccessor.h.gcov.html#L99">_ZN2at14TensorAccessorIiLm1ENS_16DefaultPtrTraitsElEixEl</a></td>
<td class="coverFnHi">151268</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorAccessor.h.gcov.html#L74">_ZN2at14TensorAccessorIiLm2ENS_16DefaultPtrTraitsElEC2EPiPKlS5_</a></td>
<td class="coverFnHi">80</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorAccessor.h.gcov.html#L80">_ZN2at14TensorAccessorIiLm2ENS_16DefaultPtrTraitsElEixEl</a></td>
<td class="coverFnHi">151268</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorAccessor.h.gcov.html#L36">_ZN2at18TensorAccessorBaseIiLm1ENS_16DefaultPtrTraitsElEC2EPiPKlS5_</a></td>
<td class="coverFnHi">151348</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TensorAccessor.h.gcov.html#L36">_ZN2at18TensorAccessorBaseIiLm1ENS_16DefaultPtrTraitsElEC2EPiPKlS5_</a></td>
<td class="coverFnAliasHi">151268</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TensorAccessor.h.gcov.html#L36">_ZN2at18TensorAccessorBaseIiLm2ENS_16DefaultPtrTraitsElEC2EPiPKlS5_</a></td>
<td class="coverFnAliasHi">80</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,348 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/TensorAccessor.h</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - TensorAccessor.h<span style="font-size: 80%;"> (source / <a href="TensorAccessor.h.func-c.html">functions</a>)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">10</td>
<td class="headerCovTableEntry">10</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">6</td>
<td class="headerCovTableEntry">6</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Line data Source code</pre>
<pre class="source">
<span id="L1"><span class="lineNum"> 1</span> : #pragma once</span>
<span id="L2"><span class="lineNum"> 2</span> : </span>
<span id="L3"><span class="lineNum"> 3</span> : #include &lt;c10/macros/Macros.h&gt;</span>
<span id="L4"><span class="lineNum"> 4</span> : #include &lt;c10/util/ArrayRef.h&gt;</span>
<span id="L5"><span class="lineNum"> 5</span> : #include &lt;c10/util/Deprecated.h&gt;</span>
<span id="L6"><span class="lineNum"> 6</span> : #include &lt;c10/util/Exception.h&gt;</span>
<span id="L7"><span class="lineNum"> 7</span> : #include &lt;c10/util/irange.h&gt;</span>
<span id="L8"><span class="lineNum"> 8</span> : #include &lt;stdint.h&gt;</span>
<span id="L9"><span class="lineNum"> 9</span> : #include &lt;cstddef&gt;</span>
<span id="L10"><span class="lineNum"> 10</span> : </span>
<span id="L11"><span class="lineNum"> 11</span> : namespace at {</span>
<span id="L12"><span class="lineNum"> 12</span> : </span>
<span id="L13"><span class="lineNum"> 13</span> : // The PtrTraits argument to the TensorAccessor/GenericPackedTensorAccessor</span>
<span id="L14"><span class="lineNum"> 14</span> : // is used to enable the __restrict__ keyword/modifier for the data</span>
<span id="L15"><span class="lineNum"> 15</span> : // passed to cuda.</span>
<span id="L16"><span class="lineNum"> 16</span> : template &lt;typename T&gt;</span>
<span id="L17"><span class="lineNum"> 17</span> : struct DefaultPtrTraits {</span>
<span id="L18"><span class="lineNum"> 18</span> : typedef T* PtrType;</span>
<span id="L19"><span class="lineNum"> 19</span> : };</span>
<span id="L20"><span class="lineNum"> 20</span> : </span>
<span id="L21"><span class="lineNum"> 21</span> : #if defined(__CUDACC__) || defined(__HIPCC__)</span>
<span id="L22"><span class="lineNum"> 22</span> : template &lt;typename T&gt;</span>
<span id="L23"><span class="lineNum"> 23</span> : struct RestrictPtrTraits {</span>
<span id="L24"><span class="lineNum"> 24</span> : typedef T* __restrict__ PtrType;</span>
<span id="L25"><span class="lineNum"> 25</span> : };</span>
<span id="L26"><span class="lineNum"> 26</span> : #endif</span>
<span id="L27"><span class="lineNum"> 27</span> : </span>
<span id="L28"><span class="lineNum"> 28</span> : // TensorAccessorBase and TensorAccessor are used for both CPU and CUDA tensors.</span>
<span id="L29"><span class="lineNum"> 29</span> : // For CUDA tensors it is used in device code (only). This means that we restrict ourselves</span>
<span id="L30"><span class="lineNum"> 30</span> : // to functions and types available there (e.g. IntArrayRef isn't).</span>
<span id="L31"><span class="lineNum"> 31</span> : </span>
<span id="L32"><span class="lineNum"> 32</span> : // The PtrTraits argument is only relevant to cuda to support `__restrict__` pointers.</span>
<span id="L33"><span class="lineNum"> 33</span> : template&lt;typename T, size_t N, template &lt;typename U&gt; class PtrTraits = DefaultPtrTraits, typename index_t = int64_t&gt;</span>
<span id="L34"><span class="lineNum"> 34</span> : class TensorAccessorBase {</span>
<span id="L35"><span class="lineNum"> 35</span> : public:</span>
<span id="L36"><span class="lineNum"> 36</span> : typedef typename PtrTraits&lt;T&gt;::PtrType PtrType;</span>
<span id="L37"><span class="lineNum"> 37</span> : </span>
<span id="L38"><span class="lineNum"> 38</span> <span class="tlaGNC tlaBgGNC"> 151348 : C10_HOST_DEVICE TensorAccessorBase(</span></span>
<span id="L39"><span class="lineNum"> 39</span> : PtrType data_,</span>
<span id="L40"><span class="lineNum"> 40</span> : const index_t* sizes_,</span>
<span id="L41"><span class="lineNum"> 41</span> : const index_t* strides_)</span>
<span id="L42"><span class="lineNum"> 42</span> <span class="tlaGNC"> 151348 : : data_(data_), sizes_(sizes_), strides_(strides_) {}</span></span>
<span id="L43"><span class="lineNum"> 43</span> : C10_HOST IntArrayRef sizes() const {</span>
<span id="L44"><span class="lineNum"> 44</span> : return IntArrayRef(sizes_,N);</span>
<span id="L45"><span class="lineNum"> 45</span> : }</span>
<span id="L46"><span class="lineNum"> 46</span> : C10_HOST IntArrayRef strides() const {</span>
<span id="L47"><span class="lineNum"> 47</span> : return IntArrayRef(strides_,N);</span>
<span id="L48"><span class="lineNum"> 48</span> : }</span>
<span id="L49"><span class="lineNum"> 49</span> : C10_HOST_DEVICE index_t stride(index_t i) const {</span>
<span id="L50"><span class="lineNum"> 50</span> : return strides_[i];</span>
<span id="L51"><span class="lineNum"> 51</span> : }</span>
<span id="L52"><span class="lineNum"> 52</span> : C10_HOST_DEVICE index_t size(index_t i) const {</span>
<span id="L53"><span class="lineNum"> 53</span> : return sizes_[i];</span>
<span id="L54"><span class="lineNum"> 54</span> : }</span>
<span id="L55"><span class="lineNum"> 55</span> : C10_HOST_DEVICE PtrType data() {</span>
<span id="L56"><span class="lineNum"> 56</span> : return data_;</span>
<span id="L57"><span class="lineNum"> 57</span> : }</span>
<span id="L58"><span class="lineNum"> 58</span> : C10_HOST_DEVICE const PtrType data() const {</span>
<span id="L59"><span class="lineNum"> 59</span> : return data_;</span>
<span id="L60"><span class="lineNum"> 60</span> : }</span>
<span id="L61"><span class="lineNum"> 61</span> : protected:</span>
<span id="L62"><span class="lineNum"> 62</span> : PtrType data_;</span>
<span id="L63"><span class="lineNum"> 63</span> : const index_t* sizes_;</span>
<span id="L64"><span class="lineNum"> 64</span> : const index_t* strides_;</span>
<span id="L65"><span class="lineNum"> 65</span> : };</span>
<span id="L66"><span class="lineNum"> 66</span> : </span>
<span id="L67"><span class="lineNum"> 67</span> : // The `TensorAccessor` is typically instantiated for CPU `Tensor`s using</span>
<span id="L68"><span class="lineNum"> 68</span> : // `Tensor.accessor&lt;T, N&gt;()`.</span>
<span id="L69"><span class="lineNum"> 69</span> : // For CUDA `Tensor`s, `GenericPackedTensorAccessor` is used on the host and only</span>
<span id="L70"><span class="lineNum"> 70</span> : // indexing on the device uses `TensorAccessor`s.</span>
<span id="L71"><span class="lineNum"> 71</span> : template&lt;typename T, size_t N, template &lt;typename U&gt; class PtrTraits = DefaultPtrTraits, typename index_t = int64_t&gt;</span>
<span id="L72"><span class="lineNum"> 72</span> : class TensorAccessor : public TensorAccessorBase&lt;T,N,PtrTraits,index_t&gt; {</span>
<span id="L73"><span class="lineNum"> 73</span> : public:</span>
<span id="L74"><span class="lineNum"> 74</span> : typedef typename PtrTraits&lt;T&gt;::PtrType PtrType;</span>
<span id="L75"><span class="lineNum"> 75</span> : </span>
<span id="L76"><span class="lineNum"> 76</span> <span class="tlaGNC"> 80 : C10_HOST_DEVICE TensorAccessor(</span></span>
<span id="L77"><span class="lineNum"> 77</span> : PtrType data_,</span>
<span id="L78"><span class="lineNum"> 78</span> : const index_t* sizes_,</span>
<span id="L79"><span class="lineNum"> 79</span> : const index_t* strides_)</span>
<span id="L80"><span class="lineNum"> 80</span> <span class="tlaGNC"> 80 : : TensorAccessorBase&lt;T, N, PtrTraits, index_t&gt;(data_,sizes_,strides_) {}</span></span>
<span id="L81"><span class="lineNum"> 81</span> : </span>
<span id="L82"><span class="lineNum"> 82</span> <span class="tlaGNC"> 151268 : C10_HOST_DEVICE TensorAccessor&lt;T, N - 1, PtrTraits, index_t&gt; operator[](index_t i) {</span></span>
<span id="L83"><span class="lineNum"> 83</span> <span class="tlaGNC"> 151268 : return TensorAccessor&lt;T,N-1,PtrTraits,index_t&gt;(this-&gt;data_ + this-&gt;strides_[0]*i,this-&gt;sizes_+1,this-&gt;strides_+1);</span></span>
<span id="L84"><span class="lineNum"> 84</span> : }</span>
<span id="L85"><span class="lineNum"> 85</span> : </span>
<span id="L86"><span class="lineNum"> 86</span> : C10_HOST_DEVICE const TensorAccessor&lt;T, N-1, PtrTraits, index_t&gt; operator[](index_t i) const {</span>
<span id="L87"><span class="lineNum"> 87</span> : return TensorAccessor&lt;T,N-1,PtrTraits,index_t&gt;(this-&gt;data_ + this-&gt;strides_[0]*i,this-&gt;sizes_+1,this-&gt;strides_+1);</span>
<span id="L88"><span class="lineNum"> 88</span> : }</span>
<span id="L89"><span class="lineNum"> 89</span> : };</span>
<span id="L90"><span class="lineNum"> 90</span> : </span>
<span id="L91"><span class="lineNum"> 91</span> : template&lt;typename T, template &lt;typename U&gt; class PtrTraits, typename index_t&gt;</span>
<span id="L92"><span class="lineNum"> 92</span> : class TensorAccessor&lt;T,1,PtrTraits,index_t&gt; : public TensorAccessorBase&lt;T,1,PtrTraits,index_t&gt; {</span>
<span id="L93"><span class="lineNum"> 93</span> : public:</span>
<span id="L94"><span class="lineNum"> 94</span> : typedef typename PtrTraits&lt;T&gt;::PtrType PtrType;</span>
<span id="L95"><span class="lineNum"> 95</span> : </span>
<span id="L96"><span class="lineNum"> 96</span> <span class="tlaGNC"> 151268 : C10_HOST_DEVICE TensorAccessor(</span></span>
<span id="L97"><span class="lineNum"> 97</span> : PtrType data_,</span>
<span id="L98"><span class="lineNum"> 98</span> : const index_t* sizes_,</span>
<span id="L99"><span class="lineNum"> 99</span> : const index_t* strides_)</span>
<span id="L100"><span class="lineNum"> 100</span> <span class="tlaGNC"> 151268 : : TensorAccessorBase&lt;T, 1, PtrTraits, index_t&gt;(data_,sizes_,strides_) {}</span></span>
<span id="L101"><span class="lineNum"> 101</span> <span class="tlaGNC"> 151268 : C10_HOST_DEVICE T &amp; operator[](index_t i) {</span></span>
<span id="L102"><span class="lineNum"> 102</span> : // NOLINTNEXTLINE(clang-analyzer-core.NullDereference)</span>
<span id="L103"><span class="lineNum"> 103</span> <span class="tlaGNC"> 151268 : return this-&gt;data_[this-&gt;strides_[0]*i];</span></span>
<span id="L104"><span class="lineNum"> 104</span> : }</span>
<span id="L105"><span class="lineNum"> 105</span> : C10_HOST_DEVICE const T &amp; operator[](index_t i) const {</span>
<span id="L106"><span class="lineNum"> 106</span> : return this-&gt;data_[this-&gt;strides_[0]*i];</span>
<span id="L107"><span class="lineNum"> 107</span> : }</span>
<span id="L108"><span class="lineNum"> 108</span> : };</span>
<span id="L109"><span class="lineNum"> 109</span> : </span>
<span id="L110"><span class="lineNum"> 110</span> : </span>
<span id="L111"><span class="lineNum"> 111</span> : // GenericPackedTensorAccessorBase and GenericPackedTensorAccessor are used on for CUDA `Tensor`s on the host</span>
<span id="L112"><span class="lineNum"> 112</span> : // and as</span>
<span id="L113"><span class="lineNum"> 113</span> : // In contrast to `TensorAccessor`s, they copy the strides and sizes on instantiation (on the host)</span>
<span id="L114"><span class="lineNum"> 114</span> : // in order to transfer them on the device when calling kernels.</span>
<span id="L115"><span class="lineNum"> 115</span> : // On the device, indexing of multidimensional tensors gives to `TensorAccessor`s.</span>
<span id="L116"><span class="lineNum"> 116</span> : // Use RestrictPtrTraits as PtrTraits if you want the tensor's data pointer to be marked as __restrict__.</span>
<span id="L117"><span class="lineNum"> 117</span> : // Instantiation from data, sizes, strides is only needed on the host and std::copy isn't available</span>
<span id="L118"><span class="lineNum"> 118</span> : // on the device, so those functions are host only.</span>
<span id="L119"><span class="lineNum"> 119</span> : template&lt;typename T, size_t N, template &lt;typename U&gt; class PtrTraits = DefaultPtrTraits, typename index_t = int64_t&gt;</span>
<span id="L120"><span class="lineNum"> 120</span> : class GenericPackedTensorAccessorBase {</span>
<span id="L121"><span class="lineNum"> 121</span> : public:</span>
<span id="L122"><span class="lineNum"> 122</span> : typedef typename PtrTraits&lt;T&gt;::PtrType PtrType;</span>
<span id="L123"><span class="lineNum"> 123</span> : C10_HOST GenericPackedTensorAccessorBase(</span>
<span id="L124"><span class="lineNum"> 124</span> : PtrType data_,</span>
<span id="L125"><span class="lineNum"> 125</span> : const index_t* sizes_,</span>
<span id="L126"><span class="lineNum"> 126</span> : const index_t* strides_)</span>
<span id="L127"><span class="lineNum"> 127</span> : : data_(data_) {</span>
<span id="L128"><span class="lineNum"> 128</span> : std::copy(sizes_, sizes_ + N, std::begin(this-&gt;sizes_));</span>
<span id="L129"><span class="lineNum"> 129</span> : std::copy(strides_, strides_ + N, std::begin(this-&gt;strides_));</span>
<span id="L130"><span class="lineNum"> 130</span> : }</span>
<span id="L131"><span class="lineNum"> 131</span> : </span>
<span id="L132"><span class="lineNum"> 132</span> : // if index_t is not int64_t, we want to have an int64_t constructor</span>
<span id="L133"><span class="lineNum"> 133</span> : template &lt;typename source_index_t, class = typename std::enable_if&lt;std::is_same&lt;source_index_t, int64_t&gt;::value&gt;::type&gt;</span>
<span id="L134"><span class="lineNum"> 134</span> : C10_HOST GenericPackedTensorAccessorBase(</span>
<span id="L135"><span class="lineNum"> 135</span> : PtrType data_,</span>
<span id="L136"><span class="lineNum"> 136</span> : const source_index_t* sizes_,</span>
<span id="L137"><span class="lineNum"> 137</span> : const source_index_t* strides_)</span>
<span id="L138"><span class="lineNum"> 138</span> : : data_(data_) {</span>
<span id="L139"><span class="lineNum"> 139</span> : for (const auto i : c10::irange(N)) {</span>
<span id="L140"><span class="lineNum"> 140</span> : this-&gt;sizes_[i] = sizes_[i];</span>
<span id="L141"><span class="lineNum"> 141</span> : this-&gt;strides_[i] = strides_[i];</span>
<span id="L142"><span class="lineNum"> 142</span> : }</span>
<span id="L143"><span class="lineNum"> 143</span> : }</span>
<span id="L144"><span class="lineNum"> 144</span> : </span>
<span id="L145"><span class="lineNum"> 145</span> : C10_HOST_DEVICE index_t stride(index_t i) const {</span>
<span id="L146"><span class="lineNum"> 146</span> : return strides_[i];</span>
<span id="L147"><span class="lineNum"> 147</span> : }</span>
<span id="L148"><span class="lineNum"> 148</span> : C10_HOST_DEVICE index_t size(index_t i) const {</span>
<span id="L149"><span class="lineNum"> 149</span> : return sizes_[i];</span>
<span id="L150"><span class="lineNum"> 150</span> : }</span>
<span id="L151"><span class="lineNum"> 151</span> : C10_HOST_DEVICE PtrType data() {</span>
<span id="L152"><span class="lineNum"> 152</span> : return data_;</span>
<span id="L153"><span class="lineNum"> 153</span> : }</span>
<span id="L154"><span class="lineNum"> 154</span> : C10_HOST_DEVICE const PtrType data() const {</span>
<span id="L155"><span class="lineNum"> 155</span> : return data_;</span>
<span id="L156"><span class="lineNum"> 156</span> : }</span>
<span id="L157"><span class="lineNum"> 157</span> : protected:</span>
<span id="L158"><span class="lineNum"> 158</span> : PtrType data_;</span>
<span id="L159"><span class="lineNum"> 159</span> : index_t sizes_[N];</span>
<span id="L160"><span class="lineNum"> 160</span> : index_t strides_[N];</span>
<span id="L161"><span class="lineNum"> 161</span> : C10_HOST void bounds_check_(index_t i) const {</span>
<span id="L162"><span class="lineNum"> 162</span> : TORCH_CHECK_INDEX(</span>
<span id="L163"><span class="lineNum"> 163</span> : 0 &lt;= i &amp;&amp; i &lt; index_t{N},</span>
<span id="L164"><span class="lineNum"> 164</span> : &quot;Index &quot;,</span>
<span id="L165"><span class="lineNum"> 165</span> : i,</span>
<span id="L166"><span class="lineNum"> 166</span> : &quot; is not within bounds of a tensor of dimension &quot;,</span>
<span id="L167"><span class="lineNum"> 167</span> : N);</span>
<span id="L168"><span class="lineNum"> 168</span> : }</span>
<span id="L169"><span class="lineNum"> 169</span> : };</span>
<span id="L170"><span class="lineNum"> 170</span> : </span>
<span id="L171"><span class="lineNum"> 171</span> : template&lt;typename T, size_t N, template &lt;typename U&gt; class PtrTraits = DefaultPtrTraits, typename index_t = int64_t&gt;</span>
<span id="L172"><span class="lineNum"> 172</span> : class GenericPackedTensorAccessor : public GenericPackedTensorAccessorBase&lt;T,N,PtrTraits,index_t&gt; {</span>
<span id="L173"><span class="lineNum"> 173</span> : public:</span>
<span id="L174"><span class="lineNum"> 174</span> : typedef typename PtrTraits&lt;T&gt;::PtrType PtrType;</span>
<span id="L175"><span class="lineNum"> 175</span> : </span>
<span id="L176"><span class="lineNum"> 176</span> : C10_HOST GenericPackedTensorAccessor(</span>
<span id="L177"><span class="lineNum"> 177</span> : PtrType data_,</span>
<span id="L178"><span class="lineNum"> 178</span> : const index_t* sizes_,</span>
<span id="L179"><span class="lineNum"> 179</span> : const index_t* strides_)</span>
<span id="L180"><span class="lineNum"> 180</span> : : GenericPackedTensorAccessorBase&lt;T, N, PtrTraits, index_t&gt;(data_, sizes_, strides_) {}</span>
<span id="L181"><span class="lineNum"> 181</span> : </span>
<span id="L182"><span class="lineNum"> 182</span> : // if index_t is not int64_t, we want to have an int64_t constructor</span>
<span id="L183"><span class="lineNum"> 183</span> : template &lt;typename source_index_t, class = typename std::enable_if&lt;std::is_same&lt;source_index_t, int64_t&gt;::value&gt;::type&gt;</span>
<span id="L184"><span class="lineNum"> 184</span> : C10_HOST GenericPackedTensorAccessor(</span>
<span id="L185"><span class="lineNum"> 185</span> : PtrType data_,</span>
<span id="L186"><span class="lineNum"> 186</span> : const source_index_t* sizes_,</span>
<span id="L187"><span class="lineNum"> 187</span> : const source_index_t* strides_)</span>
<span id="L188"><span class="lineNum"> 188</span> : : GenericPackedTensorAccessorBase&lt;T, N, PtrTraits, index_t&gt;(data_, sizes_, strides_) {}</span>
<span id="L189"><span class="lineNum"> 189</span> : </span>
<span id="L190"><span class="lineNum"> 190</span> : C10_DEVICE TensorAccessor&lt;T, N - 1, PtrTraits, index_t&gt; operator[](index_t i) {</span>
<span id="L191"><span class="lineNum"> 191</span> : index_t* new_sizes = this-&gt;sizes_ + 1;</span>
<span id="L192"><span class="lineNum"> 192</span> : index_t* new_strides = this-&gt;strides_ + 1;</span>
<span id="L193"><span class="lineNum"> 193</span> : return TensorAccessor&lt;T,N-1,PtrTraits,index_t&gt;(this-&gt;data_ + this-&gt;strides_[0]*i, new_sizes, new_strides);</span>
<span id="L194"><span class="lineNum"> 194</span> : }</span>
<span id="L195"><span class="lineNum"> 195</span> : </span>
<span id="L196"><span class="lineNum"> 196</span> : C10_DEVICE const TensorAccessor&lt;T, N - 1, PtrTraits, index_t&gt; operator[](index_t i) const {</span>
<span id="L197"><span class="lineNum"> 197</span> : const index_t* new_sizes = this-&gt;sizes_ + 1;</span>
<span id="L198"><span class="lineNum"> 198</span> : const index_t* new_strides = this-&gt;strides_ + 1;</span>
<span id="L199"><span class="lineNum"> 199</span> : return TensorAccessor&lt;T,N-1,PtrTraits,index_t&gt;(this-&gt;data_ + this-&gt;strides_[0]*i, new_sizes, new_strides);</span>
<span id="L200"><span class="lineNum"> 200</span> : }</span>
<span id="L201"><span class="lineNum"> 201</span> : </span>
<span id="L202"><span class="lineNum"> 202</span> : /// Returns a PackedTensorAccessor of the same dimension after transposing the</span>
<span id="L203"><span class="lineNum"> 203</span> : /// two dimensions given. Does not actually move elements; transposition is</span>
<span id="L204"><span class="lineNum"> 204</span> : /// made by permuting the size/stride arrays. If the dimensions are not valid,</span>
<span id="L205"><span class="lineNum"> 205</span> : /// asserts.</span>
<span id="L206"><span class="lineNum"> 206</span> : C10_HOST GenericPackedTensorAccessor&lt;T, N, PtrTraits, index_t&gt; transpose(</span>
<span id="L207"><span class="lineNum"> 207</span> : index_t dim1,</span>
<span id="L208"><span class="lineNum"> 208</span> : index_t dim2) const {</span>
<span id="L209"><span class="lineNum"> 209</span> : this-&gt;bounds_check_(dim1);</span>
<span id="L210"><span class="lineNum"> 210</span> : this-&gt;bounds_check_(dim2);</span>
<span id="L211"><span class="lineNum"> 211</span> : GenericPackedTensorAccessor&lt;T, N, PtrTraits, index_t&gt; result(</span>
<span id="L212"><span class="lineNum"> 212</span> : this-&gt;data_, this-&gt;sizes_, this-&gt;strides_);</span>
<span id="L213"><span class="lineNum"> 213</span> : std::swap(result.strides_[dim1], result.strides_[dim2]);</span>
<span id="L214"><span class="lineNum"> 214</span> : std::swap(result.sizes_[dim1], result.sizes_[dim2]);</span>
<span id="L215"><span class="lineNum"> 215</span> : return result;</span>
<span id="L216"><span class="lineNum"> 216</span> : }</span>
<span id="L217"><span class="lineNum"> 217</span> : };</span>
<span id="L218"><span class="lineNum"> 218</span> : </span>
<span id="L219"><span class="lineNum"> 219</span> : template&lt;typename T, template &lt;typename U&gt; class PtrTraits, typename index_t&gt;</span>
<span id="L220"><span class="lineNum"> 220</span> : class GenericPackedTensorAccessor&lt;T,1,PtrTraits,index_t&gt; : public GenericPackedTensorAccessorBase&lt;T,1,PtrTraits,index_t&gt; {</span>
<span id="L221"><span class="lineNum"> 221</span> : public:</span>
<span id="L222"><span class="lineNum"> 222</span> : typedef typename PtrTraits&lt;T&gt;::PtrType PtrType;</span>
<span id="L223"><span class="lineNum"> 223</span> : C10_HOST GenericPackedTensorAccessor(</span>
<span id="L224"><span class="lineNum"> 224</span> : PtrType data_,</span>
<span id="L225"><span class="lineNum"> 225</span> : const index_t* sizes_,</span>
<span id="L226"><span class="lineNum"> 226</span> : const index_t* strides_)</span>
<span id="L227"><span class="lineNum"> 227</span> : : GenericPackedTensorAccessorBase&lt;T, 1, PtrTraits, index_t&gt;(data_, sizes_, strides_) {}</span>
<span id="L228"><span class="lineNum"> 228</span> : </span>
<span id="L229"><span class="lineNum"> 229</span> : // if index_t is not int64_t, we want to have an int64_t constructor</span>
<span id="L230"><span class="lineNum"> 230</span> : template &lt;typename source_index_t, class = typename std::enable_if&lt;std::is_same&lt;source_index_t, int64_t&gt;::value&gt;::type&gt;</span>
<span id="L231"><span class="lineNum"> 231</span> : C10_HOST GenericPackedTensorAccessor(</span>
<span id="L232"><span class="lineNum"> 232</span> : PtrType data_,</span>
<span id="L233"><span class="lineNum"> 233</span> : const source_index_t* sizes_,</span>
<span id="L234"><span class="lineNum"> 234</span> : const source_index_t* strides_)</span>
<span id="L235"><span class="lineNum"> 235</span> : : GenericPackedTensorAccessorBase&lt;T, 1, PtrTraits, index_t&gt;(data_, sizes_, strides_) {}</span>
<span id="L236"><span class="lineNum"> 236</span> : </span>
<span id="L237"><span class="lineNum"> 237</span> : C10_DEVICE T &amp; operator[](index_t i) {</span>
<span id="L238"><span class="lineNum"> 238</span> : return this-&gt;data_[this-&gt;strides_[0] * i];</span>
<span id="L239"><span class="lineNum"> 239</span> : }</span>
<span id="L240"><span class="lineNum"> 240</span> : C10_DEVICE const T&amp; operator[](index_t i) const {</span>
<span id="L241"><span class="lineNum"> 241</span> : return this-&gt;data_[this-&gt;strides_[0]*i];</span>
<span id="L242"><span class="lineNum"> 242</span> : }</span>
<span id="L243"><span class="lineNum"> 243</span> : </span>
<span id="L244"><span class="lineNum"> 244</span> : // Same as in the general N-dimensional case, but note that in the</span>
<span id="L245"><span class="lineNum"> 245</span> : // 1-dimensional case the returned PackedTensorAccessor will always be an</span>
<span id="L246"><span class="lineNum"> 246</span> : // identical copy of the original</span>
<span id="L247"><span class="lineNum"> 247</span> : C10_HOST GenericPackedTensorAccessor&lt;T, 1, PtrTraits, index_t&gt; transpose(</span>
<span id="L248"><span class="lineNum"> 248</span> : index_t dim1,</span>
<span id="L249"><span class="lineNum"> 249</span> : index_t dim2) const {</span>
<span id="L250"><span class="lineNum"> 250</span> : this-&gt;bounds_check_(dim1);</span>
<span id="L251"><span class="lineNum"> 251</span> : this-&gt;bounds_check_(dim2);</span>
<span id="L252"><span class="lineNum"> 252</span> : return GenericPackedTensorAccessor&lt;T, 1, PtrTraits, index_t&gt;(</span>
<span id="L253"><span class="lineNum"> 253</span> : this-&gt;data_, this-&gt;sizes_, this-&gt;strides_);</span>
<span id="L254"><span class="lineNum"> 254</span> : }</span>
<span id="L255"><span class="lineNum"> 255</span> : };</span>
<span id="L256"><span class="lineNum"> 256</span> : </span>
<span id="L257"><span class="lineNum"> 257</span> : </span>
<span id="L258"><span class="lineNum"> 258</span> : // Can't put this directly into the macro function args because of commas</span>
<span id="L259"><span class="lineNum"> 259</span> : #define AT_X GenericPackedTensorAccessor&lt;T, N, PtrTraits, index_t&gt;</span>
<span id="L260"><span class="lineNum"> 260</span> : </span>
<span id="L261"><span class="lineNum"> 261</span> : // Old name for `GenericPackedTensorAccessor`</span>
<span id="L262"><span class="lineNum"> 262</span> : template &lt;typename T, size_t N, template &lt;typename U&gt; class PtrTraits = DefaultPtrTraits, typename index_t = int64_t&gt;</span>
<span id="L263"><span class="lineNum"> 263</span> : C10_DEFINE_DEPRECATED_USING(PackedTensorAccessor, AT_X)</span>
<span id="L264"><span class="lineNum"> 264</span> : </span>
<span id="L265"><span class="lineNum"> 265</span> : #undef AT_X</span>
<span id="L266"><span class="lineNum"> 266</span> : </span>
<span id="L267"><span class="lineNum"> 267</span> : template &lt;typename T, size_t N, template &lt;typename U&gt; class PtrTraits = DefaultPtrTraits&gt;</span>
<span id="L268"><span class="lineNum"> 268</span> : using PackedTensorAccessor32 = GenericPackedTensorAccessor&lt;T, N, PtrTraits, int32_t&gt;;</span>
<span id="L269"><span class="lineNum"> 269</span> : </span>
<span id="L270"><span class="lineNum"> 270</span> : template &lt;typename T, size_t N, template &lt;typename U&gt; class PtrTraits = DefaultPtrTraits&gt;</span>
<span id="L271"><span class="lineNum"> 271</span> : using PackedTensorAccessor64 = GenericPackedTensorAccessor&lt;T, N, PtrTraits, int64_t&gt;;</span>
<span id="L272"><span class="lineNum"> 272</span> : } // namespace at</span>
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,201 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/TensorBase.h - functions</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - TensorBase.h<span style="font-size: 80%;"> (<a href="TensorBase.h.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">97.3&nbsp;%</td>
<td class="headerCovTableEntry">37</td>
<td class="headerCovTableEntry">36</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">18</td>
<td class="headerCovTableEntry">18</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="TensorBase.h.func.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L240">_ZNK2at10TensorBase7stridesEv</a></td>
<td class="coverFnHi">80</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L607">_ZNKR2at10TensorBase8accessorIiLm2EEENS_14TensorAccessorIT_XT0_ENS_16DefaultPtrTraitsElEEv</a></td>
<td class="coverFnHi">80</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L305">_ZNK2at10TensorBase5numelEv</a></td>
<td class="coverFnHi">500</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L401">_ZNK2at10TensorBase5dtypeEv</a></td>
<td class="coverFnHi">800</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L153">_ZNK2at10TensorBase17is_floating_pointEv</a></td>
<td class="coverFnHi">876</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L115">_ZNK2at10TensorBase3dimEv</a></td>
<td class="coverFnHi">7152</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L102">_ZN2at10TensorBaseC2ERKS0_</a></td>
<td class="coverFnHi">61054</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L231">_ZNK2at10TensorBase5sizesEv</a></td>
<td class="coverFnHi">88706</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L149">_ZNK2at10TensorBase10is_complexEv</a></td>
<td class="coverFnHi">401318</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L331">_ZNK2at10TensorBase11scalar_typeEv</a></td>
<td class="coverFnHi">402194</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L95">_ZN2at10TensorBaseC2EN3c1013intrusive_ptrINS1_10TensorImplENS1_19UndefinedTensorImplEEE</a></td>
<td class="coverFnHi">418844</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L198">_ZNK2at10TensorBase7definedEv</a></td>
<td class="coverFnHi">426804</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L194">_ZN2at10TensorBase25unsafeReleaseIntrusivePtrEv</a></td>
<td class="coverFnHi">475156</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L190">_ZNK2at10TensorBase15getIntrusivePtrEv</a></td>
<td class="coverFnHi">839508</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L173">_ZNK2at10TensorBase4sizeEl</a></td>
<td class="coverFnHi">15310736</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L92">_ZN2at10TensorBaseC2Ev</a></td>
<td class="coverFnHi">37370160</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L184">_ZNK2at10TensorBase19unsafeGetTensorImplEv</a></td>
<td class="coverFnHi">105276376</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L103">_ZN2at10TensorBaseC2EOS0_</a></td>
<td class="coverFnHi">733483980</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,201 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/TensorBase.h - functions</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - TensorBase.h<span style="font-size: 80%;"> (<a href="TensorBase.h.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">97.3&nbsp;%</td>
<td class="headerCovTableEntry">37</td>
<td class="headerCovTableEntry">36</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">18</td>
<td class="headerCovTableEntry">18</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="TensorBase.h.func-c.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L194">_ZN2at10TensorBase25unsafeReleaseIntrusivePtrEv</a></td>
<td class="coverFnHi">475156</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L95">_ZN2at10TensorBaseC2EN3c1013intrusive_ptrINS1_10TensorImplENS1_19UndefinedTensorImplEEE</a></td>
<td class="coverFnHi">418844</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L103">_ZN2at10TensorBaseC2EOS0_</a></td>
<td class="coverFnHi">733483980</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L102">_ZN2at10TensorBaseC2ERKS0_</a></td>
<td class="coverFnHi">61054</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L92">_ZN2at10TensorBaseC2Ev</a></td>
<td class="coverFnHi">37370160</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L149">_ZNK2at10TensorBase10is_complexEv</a></td>
<td class="coverFnHi">401318</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L331">_ZNK2at10TensorBase11scalar_typeEv</a></td>
<td class="coverFnHi">402194</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L190">_ZNK2at10TensorBase15getIntrusivePtrEv</a></td>
<td class="coverFnHi">839508</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L153">_ZNK2at10TensorBase17is_floating_pointEv</a></td>
<td class="coverFnHi">876</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L184">_ZNK2at10TensorBase19unsafeGetTensorImplEv</a></td>
<td class="coverFnHi">105276376</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L115">_ZNK2at10TensorBase3dimEv</a></td>
<td class="coverFnHi">7152</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L173">_ZNK2at10TensorBase4sizeEl</a></td>
<td class="coverFnHi">15310736</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L401">_ZNK2at10TensorBase5dtypeEv</a></td>
<td class="coverFnHi">800</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L305">_ZNK2at10TensorBase5numelEv</a></td>
<td class="coverFnHi">500</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L231">_ZNK2at10TensorBase5sizesEv</a></td>
<td class="coverFnHi">88706</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L198">_ZNK2at10TensorBase7definedEv</a></td>
<td class="coverFnHi">426804</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L240">_ZNK2at10TensorBase7stridesEv</a></td>
<td class="coverFnHi">80</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBase.h.gcov.html#L607">_ZNKR2at10TensorBase8accessorIiLm2EEENS_14TensorAccessorIT_XT0_ENS_16DefaultPtrTraitsElEEv</a></td>
<td class="coverFnHi">80</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,404 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/TensorBody.h - functions</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - TensorBody.h<span style="font-size: 80%;"> (<a href="TensorBody.h.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">96.9&nbsp;%</td>
<td class="headerCovTableEntry">98</td>
<td class="headerCovTableEntry">95</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">47</td>
<td class="headerCovTableEntry">47</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="TensorBody.h.func.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L3885">_ZNK2at6Tensor5cloneEN3c108optionalINS1_12MemoryFormatEEE</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L5470">_ZNK2at6Tensor5equalERKS0_</a></td>
<td class="coverFnHi">110</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L288">_ZN2at6TensordVERKN3c106ScalarE</a></td>
<td class="coverFnHi">228</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L2270">_ZNK2at6Tensor4div_ERKN3c106ScalarE</a></td>
<td class="coverFnHi">228</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L4790">_ZNK2at6Tensor2neERKS0_</a></td>
<td class="coverFnHi">272</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L4915">_ZNK2at6Tensor2gtERKN3c106ScalarE</a></td>
<td class="coverFnHi">330</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L5020">_ZNK2at6Tensor7nonzeroEv</a></td>
<td class="coverFnHi">330</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L4310">_ZNK2at6Tensor4viewEN3c108ArrayRefIlEE</a></td>
<td class="coverFnHi">376</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L4830">_ZNK2at6Tensor2eqERKS0_</a></td>
<td class="coverFnHi">472</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L1361">_ZNK2at6Tensor2toEN6caffe28TypeMetaEbb</a></td>
<td class="coverFnHi">800</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L1730">_ZNK2at6Tensor6argmaxEN3c108optionalIlEEb</a></td>
<td class="coverFnHi">914</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L267">_ZN2at6TensorpLERKS0_</a></td>
<td class="coverFnHi">1262</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L3000">_ZNK2at6Tensor3mulERKN3c106ScalarE</a></td>
<td class="coverFnHi">1262</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L1660">_ZNK2at6Tensor4add_ERKS0_RKN3c106ScalarE</a></td>
<td class="coverFnHi">1262</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L196">_ZNR2at6TensoraSERKNS_10TensorBaseE</a></td>
<td class="coverFnHi">1820</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L205">_ZNR2at6TensoraSERKS0_</a></td>
<td class="coverFnHi">1820</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L4235">_ZNK2at6Tensor4itemEv</a></td>
<td class="coverFnHi">7072</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L300">_ZNK2at6TensorixERKN3c106ScalarE</a></td>
<td class="coverFnHi">7072</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L306">_ZNK2at6TensorixERKS0_</a></td>
<td class="coverFnHi">7072</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L4825">_ZNK2at6Tensor2eqERKN3c106ScalarE</a></td>
<td class="coverFnHi">9012</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L2245">_ZNK2at6Tensor3divERKS0_</a></td>
<td class="coverFnHi">14194</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L3590">_ZNK2at6Tensor3sumEN3c1016OptionalArrayRefIlEEbNS1_8optionalINS1_10ScalarTypeEEE</a></td>
<td class="coverFnHi">14194</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L3175">_ZNK2at6Tensor3negEv</a></td>
<td class="coverFnHi">16480</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L3600">_ZNK2at6Tensor6nansumEN3c1016OptionalArrayRefIlEEbNS1_8optionalINS1_10ScalarTypeEEE</a></td>
<td class="coverFnHi">16480</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L264">_ZNK2at6TensorngEv</a></td>
<td class="coverFnHi">16480</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L2265">_ZNK2at6Tensor3divERKN3c106ScalarE</a></td>
<td class="coverFnHi">16744</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L3585">_ZNK2at6Tensor3sumEN3c108optionalINS1_10ScalarTypeEEE</a></td>
<td class="coverFnHi">17252</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L2990">_ZNK2at6Tensor3mulERKS0_</a></td>
<td class="coverFnHi">17280</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L4225">_ZNK2at6Tensor2toEN3c1010ScalarTypeEbbNS1_8optionalINS1_12MemoryFormatEEE</a></td>
<td class="coverFnHi">17282</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L2110">_ZNK2at6Tensor5copy_ERKS0_b</a></td>
<td class="coverFnHi">20532</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L218">_ZNO2at6TensoraSEOS0_</a></td>
<td class="coverFnHi">20532</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L2570">_ZNK2at6Tensor5fill_ERKN3c106ScalarE</a></td>
<td class="coverFnHi">28734</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L212">_ZNO2at6TensoraSERKN3c106ScalarE</a></td>
<td class="coverFnHi">28734</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L1890">_ZNK2at6Tensor8bincountERKN3c108optionalIS0_EEl</a></td>
<td class="coverFnHi">31316</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L107">_ZN2at6TensorC2ERKS0_</a></td>
<td class="coverFnHi">61054</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L4210">_ZNK2at6Tensor2toEN3c1013TensorOptionsEbbNS1_8optionalINS1_12MemoryFormatEEE</a></td>
<td class="coverFnHi">401318</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L104">_ZN2at6TensorC2EN3c1013intrusive_ptrINS1_10TensorImplENS1_19UndefinedTensorImplEEE</a></td>
<td class="coverFnHi">418844</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L200">_ZNR2at6TensoraSEONS_10TensorBaseE</a></td>
<td class="coverFnHi">435080</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L208">_ZNR2at6TensoraSEOS0_</a></td>
<td class="coverFnHi">435080</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L2665">_ZNK2at6Tensor10index_put_ERKN3c104ListINS1_8optionalIS0_EEEERKS0_b</a></td>
<td class="coverFnHi">5122988</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L1665">_ZNK2at6Tensor3addERKN3c106ScalarES4_</a></td>
<td class="coverFnHi">5137182</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L3305">_ZNK2at6Tensor6selectEll</a></td>
<td class="coverFnHi">20560890</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L319">_ZNK2at6TensorixEl</a></td>
<td class="coverFnHi">20560890</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L2640">_ZNK2at6Tensor5indexERKN3c104ListINS1_8optionalIS0_EEEE</a></td>
<td class="coverFnHi">36925424</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L101">_ZN2at6TensorC2Ev</a></td>
<td class="coverFnHi">37370160</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L112">_ZN2at6TensorC2EONS_10TensorBaseE</a></td>
<td class="coverFnHi">105276376</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L108">_ZN2at6TensorC2EOS0_</a></td>
<td class="coverFnHi">522931228</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,404 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/TensorBody.h - functions</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - TensorBody.h<span style="font-size: 80%;"> (<a href="TensorBody.h.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">96.9&nbsp;%</td>
<td class="headerCovTableEntry">98</td>
<td class="headerCovTableEntry">95</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">47</td>
<td class="headerCovTableEntry">47</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="TensorBody.h.func-c.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L104">_ZN2at6TensorC2EN3c1013intrusive_ptrINS1_10TensorImplENS1_19UndefinedTensorImplEEE</a></td>
<td class="coverFnHi">418844</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L112">_ZN2at6TensorC2EONS_10TensorBaseE</a></td>
<td class="coverFnHi">105276376</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L108">_ZN2at6TensorC2EOS0_</a></td>
<td class="coverFnHi">522931228</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L107">_ZN2at6TensorC2ERKS0_</a></td>
<td class="coverFnHi">61054</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L101">_ZN2at6TensorC2Ev</a></td>
<td class="coverFnHi">37370160</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L288">_ZN2at6TensordVERKN3c106ScalarE</a></td>
<td class="coverFnHi">228</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L267">_ZN2at6TensorpLERKS0_</a></td>
<td class="coverFnHi">1262</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L2665">_ZNK2at6Tensor10index_put_ERKN3c104ListINS1_8optionalIS0_EEEERKS0_b</a></td>
<td class="coverFnHi">5122988</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L4825">_ZNK2at6Tensor2eqERKN3c106ScalarE</a></td>
<td class="coverFnHi">9012</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L4830">_ZNK2at6Tensor2eqERKS0_</a></td>
<td class="coverFnHi">472</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L4915">_ZNK2at6Tensor2gtERKN3c106ScalarE</a></td>
<td class="coverFnHi">330</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L4790">_ZNK2at6Tensor2neERKS0_</a></td>
<td class="coverFnHi">272</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L4225">_ZNK2at6Tensor2toEN3c1010ScalarTypeEbbNS1_8optionalINS1_12MemoryFormatEEE</a></td>
<td class="coverFnHi">17282</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L4210">_ZNK2at6Tensor2toEN3c1013TensorOptionsEbbNS1_8optionalINS1_12MemoryFormatEEE</a></td>
<td class="coverFnHi">401318</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L1361">_ZNK2at6Tensor2toEN6caffe28TypeMetaEbb</a></td>
<td class="coverFnHi">800</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L1665">_ZNK2at6Tensor3addERKN3c106ScalarES4_</a></td>
<td class="coverFnHi">5137182</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L2265">_ZNK2at6Tensor3divERKN3c106ScalarE</a></td>
<td class="coverFnHi">16744</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L2245">_ZNK2at6Tensor3divERKS0_</a></td>
<td class="coverFnHi">14194</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L3000">_ZNK2at6Tensor3mulERKN3c106ScalarE</a></td>
<td class="coverFnHi">1262</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L2990">_ZNK2at6Tensor3mulERKS0_</a></td>
<td class="coverFnHi">17280</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L3175">_ZNK2at6Tensor3negEv</a></td>
<td class="coverFnHi">16480</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L3590">_ZNK2at6Tensor3sumEN3c1016OptionalArrayRefIlEEbNS1_8optionalINS1_10ScalarTypeEEE</a></td>
<td class="coverFnHi">14194</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L3585">_ZNK2at6Tensor3sumEN3c108optionalINS1_10ScalarTypeEEE</a></td>
<td class="coverFnHi">17252</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L1660">_ZNK2at6Tensor4add_ERKS0_RKN3c106ScalarE</a></td>
<td class="coverFnHi">1262</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L2270">_ZNK2at6Tensor4div_ERKN3c106ScalarE</a></td>
<td class="coverFnHi">228</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L4235">_ZNK2at6Tensor4itemEv</a></td>
<td class="coverFnHi">7072</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L4310">_ZNK2at6Tensor4viewEN3c108ArrayRefIlEE</a></td>
<td class="coverFnHi">376</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L3885">_ZNK2at6Tensor5cloneEN3c108optionalINS1_12MemoryFormatEEE</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L2110">_ZNK2at6Tensor5copy_ERKS0_b</a></td>
<td class="coverFnHi">20532</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L5470">_ZNK2at6Tensor5equalERKS0_</a></td>
<td class="coverFnHi">110</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L2570">_ZNK2at6Tensor5fill_ERKN3c106ScalarE</a></td>
<td class="coverFnHi">28734</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L2640">_ZNK2at6Tensor5indexERKN3c104ListINS1_8optionalIS0_EEEE</a></td>
<td class="coverFnHi">36925424</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L1730">_ZNK2at6Tensor6argmaxEN3c108optionalIlEEb</a></td>
<td class="coverFnHi">914</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L3600">_ZNK2at6Tensor6nansumEN3c1016OptionalArrayRefIlEEbNS1_8optionalINS1_10ScalarTypeEEE</a></td>
<td class="coverFnHi">16480</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L3305">_ZNK2at6Tensor6selectEll</a></td>
<td class="coverFnHi">20560890</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L5020">_ZNK2at6Tensor7nonzeroEv</a></td>
<td class="coverFnHi">330</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L1890">_ZNK2at6Tensor8bincountERKN3c108optionalIS0_EEl</a></td>
<td class="coverFnHi">31316</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L300">_ZNK2at6TensorixERKN3c106ScalarE</a></td>
<td class="coverFnHi">7072</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L306">_ZNK2at6TensorixERKS0_</a></td>
<td class="coverFnHi">7072</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L319">_ZNK2at6TensorixEl</a></td>
<td class="coverFnHi">20560890</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L264">_ZNK2at6TensorngEv</a></td>
<td class="coverFnHi">16480</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L218">_ZNO2at6TensoraSEOS0_</a></td>
<td class="coverFnHi">20532</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L212">_ZNO2at6TensoraSERKN3c106ScalarE</a></td>
<td class="coverFnHi">28734</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L200">_ZNR2at6TensoraSEONS_10TensorBaseE</a></td>
<td class="coverFnHi">435080</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L208">_ZNR2at6TensoraSEOS0_</a></td>
<td class="coverFnHi">435080</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L196">_ZNR2at6TensoraSERKNS_10TensorBaseE</a></td>
<td class="coverFnHi">1820</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorBody.h.gcov.html#L205">_ZNR2at6TensoraSERKS0_</a></td>
<td class="coverFnHi">1820</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,237 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - libtorch/include/ATen/core</td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryLo">64.0&nbsp;%</td>
<td class="headerCovTableEntry">381</td>
<td class="headerCovTableEntry">244</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryLo">74.3&nbsp;%</td>
<td class="headerCovTableEntry">144</td>
<td class="headerCovTableEntry">107</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table width="80%" cellpadding=1 cellspacing=1 border=0>
<tr>
<td width="40%"><br></td>
<td width="8%"></td>
<td width="8%"></td>
<td width="8%"></td>
<td width="8%"></td>
<td width="8%"></td>
<td width="8%"></td>
<td width="8%"></td>
</tr>
<tr>
<td class="tableHead" rowspan=2>Filename <span title="Click to sort table by file name" class="tableHeadSort"><a href="index.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by file name" title="Click to sort table by file name" border=0></a></span></td>
<td class="tableHead" colspan=4>Line Coverage <span title="Click to sort table by line coverage" class="tableHeadSort"><a href="index-sort-l.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by line coverage" title="Click to sort table by line coverage" border=0></a></span></td>
<td class="tableHead" colspan=3>Function Coverage <span title="Click to sort table by function coverage" class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function coverage" title="Click to sort table by function coverage" border=0></span></td>
</tr>
<tr>
<td class="tableHead" colspan=2> Rate</td>
<td class="tableHead"> Total</td>
<td class="tableHead"> Hit</td>
<td class="tableHead"> Rate</td>
<td class="tableHead"> Total</td>
<td class="tableHead"> Hit</td>
</tr>
<tr>
<td class="coverFile"><a href="ivalue_inl.h.gcov.html">ivalue_inl.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=8 height=10 alt="8.2%"><img src="../../../../snow.png" width=92 height=10 alt="8.2%"></td></tr></table>
</td>
<td class="coverPerLo">8.2&nbsp;%</td>
<td class="coverNumDflt">49</td>
<td class="coverNumDflt">4</td>
<td class="coverPerLo">3.6&nbsp;%</td>
<td class="coverNumDflt">28</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="ivalue.h.gcov.html">ivalue.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=31 height=10 alt="30.6%"><img src="../../../../snow.png" width=69 height=10 alt="30.6%"></td></tr></table>
</td>
<td class="coverPerLo">30.6&nbsp;%</td>
<td class="coverNumDflt">121</td>
<td class="coverNumDflt">37</td>
<td class="coverPerLo">52.4&nbsp;%</td>
<td class="coverNumDflt">21</td>
<td class="coverNumDflt">11</td>
</tr>
<tr>
<td class="coverFile"><a href="CheckMemoryFormat.h.gcov.html">CheckMemoryFormat.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../amber.png" width=83 height=10 alt="83.3%"><img src="../../../../snow.png" width=17 height=10 alt="83.3%"></td></tr></table>
</td>
<td class="coverPerMed">83.3&nbsp;%</td>
<td class="coverNumDflt">6</td>
<td class="coverNumDflt">5</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="Formatting.h.gcov.html">Formatting.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">2</td>
<td class="coverNumDflt">2</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="LegacyTypeDispatch.h.gcov.html">LegacyTypeDispatch.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">6</td>
<td class="coverNumDflt">6</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">2</td>
<td class="coverNumDflt">2</td>
</tr>
<tr>
<td class="coverFile"><a href="IListRef.h.gcov.html">IListRef.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">5</td>
<td class="coverNumDflt">5</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">3</td>
<td class="coverNumDflt">3</td>
</tr>
<tr>
<td class="coverFile"><a href="List_inl.h.gcov.html">List_inl.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">11</td>
<td class="coverNumDflt">11</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">4</td>
</tr>
<tr>
<td class="coverFile"><a href="jit_type.h.gcov.html">jit_type.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">10</td>
<td class="coverNumDflt">10</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">4</td>
</tr>
<tr>
<td class="coverFile"><a href="TensorAccessor.h.gcov.html">TensorAccessor.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">10</td>
<td class="coverNumDflt">10</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">6</td>
<td class="coverNumDflt">6</td>
</tr>
<tr>
<td class="coverFile"><a href="jit_type_base.h.gcov.html">jit_type_base.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../amber.png" width=88 height=10 alt="88.5%"><img src="../../../../snow.png" width=12 height=10 alt="88.5%"></td></tr></table>
</td>
<td class="coverPerMed">88.5&nbsp;%</td>
<td class="coverNumDflt">26</td>
<td class="coverNumDflt">23</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">9</td>
<td class="coverNumDflt">9</td>
</tr>
<tr>
<td class="coverFile"><a href="TensorBase.h.gcov.html">TensorBase.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=97 height=10 alt="97.3%"><img src="../../../../snow.png" width=3 height=10 alt="97.3%"></td></tr></table>
</td>
<td class="coverPerHi">97.3&nbsp;%</td>
<td class="coverNumDflt">37</td>
<td class="coverNumDflt">36</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">18</td>
<td class="coverNumDflt">18</td>
</tr>
<tr>
<td class="coverFile"><a href="TensorBody.h.gcov.html">TensorBody.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=97 height=10 alt="96.9%"><img src="../../../../snow.png" width=3 height=10 alt="96.9%"></td></tr></table>
</td>
<td class="coverPerHi">96.9&nbsp;%</td>
<td class="coverNumDflt">98</td>
<td class="coverNumDflt">95</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">47</td>
<td class="coverNumDflt">47</td>
</tr>
</table>
</center>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,237 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - libtorch/include/ATen/core</td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryLo">64.0&nbsp;%</td>
<td class="headerCovTableEntry">381</td>
<td class="headerCovTableEntry">244</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryLo">74.3&nbsp;%</td>
<td class="headerCovTableEntry">144</td>
<td class="headerCovTableEntry">107</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table width="80%" cellpadding=1 cellspacing=1 border=0>
<tr>
<td width="40%"><br></td>
<td width="8%"></td>
<td width="8%"></td>
<td width="8%"></td>
<td width="8%"></td>
<td width="8%"></td>
<td width="8%"></td>
<td width="8%"></td>
</tr>
<tr>
<td class="tableHead" rowspan=2>Filename <span title="Click to sort table by file name" class="tableHeadSort"><a href="index.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by file name" title="Click to sort table by file name" border=0></a></span></td>
<td class="tableHead" colspan=4>Line Coverage <span title="Click to sort table by line coverage" class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by line coverage" title="Click to sort table by line coverage" border=0></span></td>
<td class="tableHead" colspan=3>Function Coverage <span title="Click to sort table by function coverage" class="tableHeadSort"><a href="index-sort-f.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function coverage" title="Click to sort table by function coverage" border=0></a></span></td>
</tr>
<tr>
<td class="tableHead" colspan=2> Rate</td>
<td class="tableHead"> Total</td>
<td class="tableHead"> Hit</td>
<td class="tableHead"> Rate</td>
<td class="tableHead"> Total</td>
<td class="tableHead"> Hit</td>
</tr>
<tr>
<td class="coverFile"><a href="ivalue_inl.h.gcov.html">ivalue_inl.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=8 height=10 alt="8.2%"><img src="../../../../snow.png" width=92 height=10 alt="8.2%"></td></tr></table>
</td>
<td class="coverPerLo">8.2&nbsp;%</td>
<td class="coverNumDflt">49</td>
<td class="coverNumDflt">4</td>
<td class="coverPerLo">3.6&nbsp;%</td>
<td class="coverNumDflt">28</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="ivalue.h.gcov.html">ivalue.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=31 height=10 alt="30.6%"><img src="../../../../snow.png" width=69 height=10 alt="30.6%"></td></tr></table>
</td>
<td class="coverPerLo">30.6&nbsp;%</td>
<td class="coverNumDflt">121</td>
<td class="coverNumDflt">37</td>
<td class="coverPerLo">52.4&nbsp;%</td>
<td class="coverNumDflt">21</td>
<td class="coverNumDflt">11</td>
</tr>
<tr>
<td class="coverFile"><a href="CheckMemoryFormat.h.gcov.html">CheckMemoryFormat.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../amber.png" width=83 height=10 alt="83.3%"><img src="../../../../snow.png" width=17 height=10 alt="83.3%"></td></tr></table>
</td>
<td class="coverPerMed">83.3&nbsp;%</td>
<td class="coverNumDflt">6</td>
<td class="coverNumDflt">5</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="jit_type_base.h.gcov.html">jit_type_base.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../amber.png" width=88 height=10 alt="88.5%"><img src="../../../../snow.png" width=12 height=10 alt="88.5%"></td></tr></table>
</td>
<td class="coverPerMed">88.5&nbsp;%</td>
<td class="coverNumDflt">26</td>
<td class="coverNumDflt">23</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">9</td>
<td class="coverNumDflt">9</td>
</tr>
<tr>
<td class="coverFile"><a href="TensorBody.h.gcov.html">TensorBody.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=97 height=10 alt="96.9%"><img src="../../../../snow.png" width=3 height=10 alt="96.9%"></td></tr></table>
</td>
<td class="coverPerHi">96.9&nbsp;%</td>
<td class="coverNumDflt">98</td>
<td class="coverNumDflt">95</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">47</td>
<td class="coverNumDflt">47</td>
</tr>
<tr>
<td class="coverFile"><a href="TensorBase.h.gcov.html">TensorBase.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=97 height=10 alt="97.3%"><img src="../../../../snow.png" width=3 height=10 alt="97.3%"></td></tr></table>
</td>
<td class="coverPerHi">97.3&nbsp;%</td>
<td class="coverNumDflt">37</td>
<td class="coverNumDflt">36</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">18</td>
<td class="coverNumDflt">18</td>
</tr>
<tr>
<td class="coverFile"><a href="Formatting.h.gcov.html">Formatting.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">2</td>
<td class="coverNumDflt">2</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="IListRef.h.gcov.html">IListRef.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">5</td>
<td class="coverNumDflt">5</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">3</td>
<td class="coverNumDflt">3</td>
</tr>
<tr>
<td class="coverFile"><a href="LegacyTypeDispatch.h.gcov.html">LegacyTypeDispatch.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">6</td>
<td class="coverNumDflt">6</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">2</td>
<td class="coverNumDflt">2</td>
</tr>
<tr>
<td class="coverFile"><a href="TensorAccessor.h.gcov.html">TensorAccessor.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">10</td>
<td class="coverNumDflt">10</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">6</td>
<td class="coverNumDflt">6</td>
</tr>
<tr>
<td class="coverFile"><a href="jit_type.h.gcov.html">jit_type.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">10</td>
<td class="coverNumDflt">10</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">4</td>
</tr>
<tr>
<td class="coverFile"><a href="List_inl.h.gcov.html">List_inl.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">11</td>
<td class="coverNumDflt">11</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">4</td>
</tr>
</table>
</center>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,237 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - libtorch/include/ATen/core</td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryLo">64.0&nbsp;%</td>
<td class="headerCovTableEntry">381</td>
<td class="headerCovTableEntry">244</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryLo">74.3&nbsp;%</td>
<td class="headerCovTableEntry">144</td>
<td class="headerCovTableEntry">107</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table width="80%" cellpadding=1 cellspacing=1 border=0>
<tr>
<td width="40%"><br></td>
<td width="8%"></td>
<td width="8%"></td>
<td width="8%"></td>
<td width="8%"></td>
<td width="8%"></td>
<td width="8%"></td>
<td width="8%"></td>
</tr>
<tr>
<td class="tableHead" rowspan=2>Filename <span title="Click to sort table by file name" class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by file name" title="Click to sort table by file name" border=0></span></td>
<td class="tableHead" colspan=4>Line Coverage <span title="Click to sort table by line coverage" class="tableHeadSort"><a href="index-sort-l.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by line coverage" title="Click to sort table by line coverage" border=0></a></span></td>
<td class="tableHead" colspan=3>Function Coverage <span title="Click to sort table by function coverage" class="tableHeadSort"><a href="index-sort-f.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function coverage" title="Click to sort table by function coverage" border=0></a></span></td>
</tr>
<tr>
<td class="tableHead" colspan=2> Rate</td>
<td class="tableHead"> Total</td>
<td class="tableHead"> Hit</td>
<td class="tableHead"> Rate</td>
<td class="tableHead"> Total</td>
<td class="tableHead"> Hit</td>
</tr>
<tr>
<td class="coverFile"><a href="CheckMemoryFormat.h.gcov.html">CheckMemoryFormat.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../amber.png" width=83 height=10 alt="83.3%"><img src="../../../../snow.png" width=17 height=10 alt="83.3%"></td></tr></table>
</td>
<td class="coverPerMed">83.3&nbsp;%</td>
<td class="coverNumDflt">6</td>
<td class="coverNumDflt">5</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="Formatting.h.gcov.html">Formatting.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">2</td>
<td class="coverNumDflt">2</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="IListRef.h.gcov.html">IListRef.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">5</td>
<td class="coverNumDflt">5</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">3</td>
<td class="coverNumDflt">3</td>
</tr>
<tr>
<td class="coverFile"><a href="LegacyTypeDispatch.h.gcov.html">LegacyTypeDispatch.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">6</td>
<td class="coverNumDflt">6</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">2</td>
<td class="coverNumDflt">2</td>
</tr>
<tr>
<td class="coverFile"><a href="List_inl.h.gcov.html">List_inl.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">11</td>
<td class="coverNumDflt">11</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">4</td>
</tr>
<tr>
<td class="coverFile"><a href="TensorAccessor.h.gcov.html">TensorAccessor.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">10</td>
<td class="coverNumDflt">10</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">6</td>
<td class="coverNumDflt">6</td>
</tr>
<tr>
<td class="coverFile"><a href="TensorBase.h.gcov.html">TensorBase.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=97 height=10 alt="97.3%"><img src="../../../../snow.png" width=3 height=10 alt="97.3%"></td></tr></table>
</td>
<td class="coverPerHi">97.3&nbsp;%</td>
<td class="coverNumDflt">37</td>
<td class="coverNumDflt">36</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">18</td>
<td class="coverNumDflt">18</td>
</tr>
<tr>
<td class="coverFile"><a href="TensorBody.h.gcov.html">TensorBody.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=97 height=10 alt="96.9%"><img src="../../../../snow.png" width=3 height=10 alt="96.9%"></td></tr></table>
</td>
<td class="coverPerHi">96.9&nbsp;%</td>
<td class="coverNumDflt">98</td>
<td class="coverNumDflt">95</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">47</td>
<td class="coverNumDflt">47</td>
</tr>
<tr>
<td class="coverFile"><a href="ivalue.h.gcov.html">ivalue.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=31 height=10 alt="30.6%"><img src="../../../../snow.png" width=69 height=10 alt="30.6%"></td></tr></table>
</td>
<td class="coverPerLo">30.6&nbsp;%</td>
<td class="coverNumDflt">121</td>
<td class="coverNumDflt">37</td>
<td class="coverPerLo">52.4&nbsp;%</td>
<td class="coverNumDflt">21</td>
<td class="coverNumDflt">11</td>
</tr>
<tr>
<td class="coverFile"><a href="ivalue_inl.h.gcov.html">ivalue_inl.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=8 height=10 alt="8.2%"><img src="../../../../snow.png" width=92 height=10 alt="8.2%"></td></tr></table>
</td>
<td class="coverPerLo">8.2&nbsp;%</td>
<td class="coverNumDflt">49</td>
<td class="coverNumDflt">4</td>
<td class="coverPerLo">3.6&nbsp;%</td>
<td class="coverNumDflt">28</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="jit_type.h.gcov.html">jit_type.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">10</td>
<td class="coverNumDflt">10</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">4</td>
</tr>
<tr>
<td class="coverFile"><a href="jit_type_base.h.gcov.html">jit_type_base.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../amber.png" width=88 height=10 alt="88.5%"><img src="../../../../snow.png" width=12 height=10 alt="88.5%"></td></tr></table>
</td>
<td class="coverPerMed">88.5&nbsp;%</td>
<td class="coverNumDflt">26</td>
<td class="coverNumDflt">23</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">9</td>
<td class="coverNumDflt">9</td>
</tr>
</table>
</center>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,222 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/ivalue.h - functions</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - ivalue.h<span style="font-size: 80%;"> (<a href="ivalue.h.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryLo">30.6&nbsp;%</td>
<td class="headerCovTableEntry">121</td>
<td class="headerCovTableEntry">37</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryLo">52.4&nbsp;%</td>
<td class="headerCovTableEntry">21</td>
<td class="headerCovTableEntry">11</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="ivalue.h.func.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L1280">_ZN3c106IValueC2ERKNS0_7PayloadENS0_3TagE</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L223">_ZN3c106IValueC2ERKS0_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L547">_ZNK3c106IValue15isComplexDoubleEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L640">_ZNK3c106IValue5isIntEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L644">_ZNK3c106IValue5toIntEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L840">_ZNK3c106IValue6isNoneEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L975">_ZNK3c106IValue7tagKindB5cxx11Ev</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L536">_ZNK3c106IValue8isDoubleEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L596">_ZNK3c106IValue8isSymIntEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L539">_ZNK3c106IValue8toDoubleEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L428">_ZN3c106IValueC2EN2at10TensorBaseE</a></td>
<td class="coverFnHi">105276376</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L839">_ZN3c106IValueC2Ev</a></td>
<td class="coverFnHi">105276376</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L230">_ZN3c106IValueC2EOS0_</a></td>
<td class="coverFnHi">206672908</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L1177">_ZN3c106IValue11clearToNoneEv</a></td>
<td class="coverFnHi">311949284</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L1262">_ZN3c106IValue7Payload24TriviallyCopyablePayloadC2Ev</a></td>
<td class="coverFnHi">417225660</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L1276">_ZN3c106IValue7PayloadC2Ev</a></td>
<td class="coverFnHi">417225660</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L1277">_ZN3c106IValue7PayloadD2Ev</a></td>
<td class="coverFnHi">417225660</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L235">_ZN3c106IValueD2Ev</a></td>
<td class="coverFnHi">417225660</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L1182">_ZNK3c106IValue14isIntrusivePtrEv</a></td>
<td class="coverFnHi">417225660</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L1145">_ZN3c106IValue7destroyEv</a></td>
<td class="coverFnHi">522502036</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L431">_ZNK3c106IValue8isTensorEv</a></td>
<td class="coverFnHi">939727696</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,222 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/ivalue.h - functions</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - ivalue.h<span style="font-size: 80%;"> (<a href="ivalue.h.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryLo">30.6&nbsp;%</td>
<td class="headerCovTableEntry">121</td>
<td class="headerCovTableEntry">37</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryLo">52.4&nbsp;%</td>
<td class="headerCovTableEntry">21</td>
<td class="headerCovTableEntry">11</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="ivalue.h.func-c.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L1177">_ZN3c106IValue11clearToNoneEv</a></td>
<td class="coverFnHi">311949284</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L1262">_ZN3c106IValue7Payload24TriviallyCopyablePayloadC2Ev</a></td>
<td class="coverFnHi">417225660</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L1276">_ZN3c106IValue7PayloadC2Ev</a></td>
<td class="coverFnHi">417225660</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L1277">_ZN3c106IValue7PayloadD2Ev</a></td>
<td class="coverFnHi">417225660</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L1145">_ZN3c106IValue7destroyEv</a></td>
<td class="coverFnHi">522502036</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L428">_ZN3c106IValueC2EN2at10TensorBaseE</a></td>
<td class="coverFnHi">105276376</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L230">_ZN3c106IValueC2EOS0_</a></td>
<td class="coverFnHi">206672908</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L1280">_ZN3c106IValueC2ERKNS0_7PayloadENS0_3TagE</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L223">_ZN3c106IValueC2ERKS0_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L839">_ZN3c106IValueC2Ev</a></td>
<td class="coverFnHi">105276376</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L235">_ZN3c106IValueD2Ev</a></td>
<td class="coverFnHi">417225660</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L1182">_ZNK3c106IValue14isIntrusivePtrEv</a></td>
<td class="coverFnHi">417225660</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L547">_ZNK3c106IValue15isComplexDoubleEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L640">_ZNK3c106IValue5isIntEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L644">_ZNK3c106IValue5toIntEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L840">_ZNK3c106IValue6isNoneEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L975">_ZNK3c106IValue7tagKindB5cxx11Ev</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L536">_ZNK3c106IValue8isDoubleEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L596">_ZNK3c106IValue8isSymIntEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L431">_ZNK3c106IValue8isTensorEv</a></td>
<td class="coverFnHi">939727696</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue.h.gcov.html#L539">_ZNK3c106IValue8toDoubleEv</a></td>
<td class="coverFnLo">0</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,299 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/ivalue_inl.h - functions</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - ivalue_inl.h<span style="font-size: 80%;"> (<a href="ivalue_inl.h.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryLo">8.2&nbsp;%</td>
<td class="headerCovTableEntry">49</td>
<td class="headerCovTableEntry">4</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryLo">3.6&nbsp;%</td>
<td class="headerCovTableEntry">28</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="ivalue_inl.h.func.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue_inl.h.gcov.html#L1898">_ZN3c1010generic_toIN2at6TensorEEENS_8optionalIT_EENS_6IValueENS_10_fake_typeIS5_EE</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue_inl.h.gcov.html#L1824">_ZN3c10L20createVectorFromListIdEESt6vectorIT_SaIS2_EEPKNS_6detail8ListImplE</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L1824">_ZN3c10L20createVectorFromListIN2at6TensorEEESt6vectorIT_SaIS4_EEPKNS_6detail8ListImplE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L1824">_ZN3c10L20createVectorFromListINS_6SymIntEEESt6vectorIT_SaIS3_EEPKNS_6detail8ListImplE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L1824">_ZN3c10L20createVectorFromListINS_7complexIdEEEESt6vectorIT_SaIS4_EEPKNS_6detail8ListImplE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L1824">_ZN3c10L20createVectorFromListINS_8optionalIN2at6TensorEEEEESt6vectorIT_SaIS6_EEPKNS_6detail8ListImplE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L1824">_ZN3c10L20createVectorFromListIdEESt6vectorIT_SaIS2_EEPKNS_6detail8ListImplE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L1824">_ZN3c10L20createVectorFromListIlEESt6vectorIT_SaIS2_EEPKNS_6detail8ListImplE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue_inl.h.gcov.html#L1814">_ZN3c10L24createVectorLikeFromListISt6vectorIdSaIdEEEET_PKNS_6detail8ListImplE</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L1814">_ZN3c10L24createVectorLikeFromListINS_11SmallVectorIlLj5EEEEET_PKNS_6detail8ListImplE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L1814">_ZN3c10L24createVectorLikeFromListISt6vectorIN2at6TensorESaIS3_EEEET_PKNS_6detail8ListImplE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L1814">_ZN3c10L24createVectorLikeFromListISt6vectorINS_6SymIntESaIS2_EEEET_PKNS_6detail8ListImplE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L1814">_ZN3c10L24createVectorLikeFromListISt6vectorINS_7complexIdEESaIS3_EEEET_PKNS_6detail8ListImplE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L1814">_ZN3c10L24createVectorLikeFromListISt6vectorINS_8optionalIN2at6TensorEEESaIS5_EEEET_PKNS_6detail8ListImplE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L1814">_ZN3c10L24createVectorLikeFromListISt6vectorIdSaIdEEEET_PKNS_6detail8ListImplE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L1814">_ZN3c10L24createVectorLikeFromListISt6vectorIlSaIlEEEET_PKNS_6detail8ListImplE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue_inl.h.gcov.html#L67">_ZNK3c106IValue14toIntrusivePtrINS_11SymNodeImplENS_6detail34intrusive_target_default_null_typeIS2_EEEENS_13intrusive_ptrIT_T0_EEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L67">_ZNK3c106IValue14toIntrusivePtrINS_11SymNodeImplENS_6detail34intrusive_target_default_null_typeIS2_EEEENS_13intrusive_ptrIT_T0_EEv</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L67">_ZNK3c106IValue14toIntrusivePtrINS_6ivalue13ComplexHolderENS_6detail34intrusive_target_default_null_typeIS3_EEEENS_13intrusive_ptrIT_T0_EEv</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue_inl.h.gcov.html#L152">_ZNK3c106IValue15toComplexDoubleEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue_inl.h.gcov.html#L1728">_ZNKR3c106IValue2toINS_6SymIntEEENS_6detail35ivalue_to_const_ref_overload_returnIT_E4typeEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue_inl.h.gcov.html#L1691">_ZNKR3c106IValue2toINS_7complexIdEEEENS_6detail35ivalue_to_const_ref_overload_returnIT_E4typeEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue_inl.h.gcov.html#L1943">_ZNKR3c106IValue2toINS_8optionalIN2at6TensorEEEEENS_6detail35ivalue_to_const_ref_overload_returnIT_E4typeEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue_inl.h.gcov.html#L1690">_ZNKR3c106IValue2toIdEENS_6detail35ivalue_to_const_ref_overload_returnIT_E4typeEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue_inl.h.gcov.html#L1700">_ZNKR3c106IValue2toIlEENS_6detail35ivalue_to_const_ref_overload_returnIT_E4typeEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue_inl.h.gcov.html#L242">_ZNKR3c106IValue8toSymIntEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue_inl.h.gcov.html#L180">_ZNKR3c106IValue8toTensorEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue_inl.h.gcov.html#L1686">_ZNO3c106IValue2toIN2at6TensorEEET_v</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L1686">_ZNKR3c106IValue2toIN2at6TensorEEENS_6detail35ivalue_to_const_ref_overload_returnIT_E4typeEv</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L1686">_ZNO3c106IValue2toIN2at6TensorEEET_v</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue_inl.h.gcov.html#L157">_ZNO3c106IValue8toTensorEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue_inl.h.gcov.html#L2230">_ZN3c106IValueC2IN2at6TensorELDnEEENS_8optionalIT_EE</a></td>
<td class="coverFnHi">105276376</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,299 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/ivalue_inl.h - functions</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - ivalue_inl.h<span style="font-size: 80%;"> (<a href="ivalue_inl.h.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryLo">8.2&nbsp;%</td>
<td class="headerCovTableEntry">49</td>
<td class="headerCovTableEntry">4</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryLo">3.6&nbsp;%</td>
<td class="headerCovTableEntry">28</td>
<td class="headerCovTableEntry">1</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="ivalue_inl.h.func-c.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue_inl.h.gcov.html#L1898">_ZN3c1010generic_toIN2at6TensorEEENS_8optionalIT_EENS_6IValueENS_10_fake_typeIS5_EE</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue_inl.h.gcov.html#L2230">_ZN3c106IValueC2IN2at6TensorELDnEEENS_8optionalIT_EE</a></td>
<td class="coverFnHi">105276376</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue_inl.h.gcov.html#L1824">_ZN3c10L20createVectorFromListIdEESt6vectorIT_SaIS2_EEPKNS_6detail8ListImplE</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L1824">_ZN3c10L20createVectorFromListIN2at6TensorEEESt6vectorIT_SaIS4_EEPKNS_6detail8ListImplE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L1824">_ZN3c10L20createVectorFromListINS_6SymIntEEESt6vectorIT_SaIS3_EEPKNS_6detail8ListImplE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L1824">_ZN3c10L20createVectorFromListINS_7complexIdEEEESt6vectorIT_SaIS4_EEPKNS_6detail8ListImplE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L1824">_ZN3c10L20createVectorFromListINS_8optionalIN2at6TensorEEEEESt6vectorIT_SaIS6_EEPKNS_6detail8ListImplE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L1824">_ZN3c10L20createVectorFromListIdEESt6vectorIT_SaIS2_EEPKNS_6detail8ListImplE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L1824">_ZN3c10L20createVectorFromListIlEESt6vectorIT_SaIS2_EEPKNS_6detail8ListImplE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue_inl.h.gcov.html#L1814">_ZN3c10L24createVectorLikeFromListISt6vectorIdSaIdEEEET_PKNS_6detail8ListImplE</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L1814">_ZN3c10L24createVectorLikeFromListINS_11SmallVectorIlLj5EEEEET_PKNS_6detail8ListImplE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L1814">_ZN3c10L24createVectorLikeFromListISt6vectorIN2at6TensorESaIS3_EEEET_PKNS_6detail8ListImplE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L1814">_ZN3c10L24createVectorLikeFromListISt6vectorINS_6SymIntESaIS2_EEEET_PKNS_6detail8ListImplE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L1814">_ZN3c10L24createVectorLikeFromListISt6vectorINS_7complexIdEESaIS3_EEEET_PKNS_6detail8ListImplE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L1814">_ZN3c10L24createVectorLikeFromListISt6vectorINS_8optionalIN2at6TensorEEESaIS5_EEEET_PKNS_6detail8ListImplE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L1814">_ZN3c10L24createVectorLikeFromListISt6vectorIdSaIdEEEET_PKNS_6detail8ListImplE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L1814">_ZN3c10L24createVectorLikeFromListISt6vectorIlSaIlEEEET_PKNS_6detail8ListImplE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue_inl.h.gcov.html#L67">_ZNK3c106IValue14toIntrusivePtrINS_11SymNodeImplENS_6detail34intrusive_target_default_null_typeIS2_EEEENS_13intrusive_ptrIT_T0_EEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L67">_ZNK3c106IValue14toIntrusivePtrINS_11SymNodeImplENS_6detail34intrusive_target_default_null_typeIS2_EEEENS_13intrusive_ptrIT_T0_EEv</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L67">_ZNK3c106IValue14toIntrusivePtrINS_6ivalue13ComplexHolderENS_6detail34intrusive_target_default_null_typeIS3_EEEENS_13intrusive_ptrIT_T0_EEv</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue_inl.h.gcov.html#L152">_ZNK3c106IValue15toComplexDoubleEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue_inl.h.gcov.html#L1728">_ZNKR3c106IValue2toINS_6SymIntEEENS_6detail35ivalue_to_const_ref_overload_returnIT_E4typeEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue_inl.h.gcov.html#L1691">_ZNKR3c106IValue2toINS_7complexIdEEEENS_6detail35ivalue_to_const_ref_overload_returnIT_E4typeEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue_inl.h.gcov.html#L1943">_ZNKR3c106IValue2toINS_8optionalIN2at6TensorEEEEENS_6detail35ivalue_to_const_ref_overload_returnIT_E4typeEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue_inl.h.gcov.html#L1690">_ZNKR3c106IValue2toIdEENS_6detail35ivalue_to_const_ref_overload_returnIT_E4typeEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue_inl.h.gcov.html#L1700">_ZNKR3c106IValue2toIlEENS_6detail35ivalue_to_const_ref_overload_returnIT_E4typeEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue_inl.h.gcov.html#L242">_ZNKR3c106IValue8toSymIntEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue_inl.h.gcov.html#L180">_ZNKR3c106IValue8toTensorEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue_inl.h.gcov.html#L1686">_ZNO3c106IValue2toIN2at6TensorEEET_v</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L1686">_ZNKR3c106IValue2toIN2at6TensorEEENS_6detail35ivalue_to_const_ref_overload_returnIT_E4typeEv</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ivalue_inl.h.gcov.html#L1686">_ZNO3c106IValue2toIN2at6TensorEEET_v</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ivalue_inl.h.gcov.html#L157">_ZNO3c106IValue8toTensorEv</a></td>
<td class="coverFnLo">0</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,103 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/jit_type.h - functions</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - jit_type.h<span style="font-size: 80%;"> (<a href="jit_type.h.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">10</td>
<td class="headerCovTableEntry">10</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">4</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="jit_type.h.func.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="jit_type.h.gcov.html#L1836">_ZN3c106detail11getTypePtr_IN2at6TensorEE4callEv</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
<td class="coverFn"><a href="jit_type.h.gcov.html#L1822">_ZN3c106detail20getMaybeFakeTypePtr_IN2at6TensorELb0EE4callEv</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
<td class="coverFn"><a href="jit_type.h.gcov.html#L2100">_ZN3c1010getTypePtrINS_8optionalIN2at6TensorEEEEEDcv</a></td>
<td class="coverFnHi">36925424</td>
</tr>
<tr>
<td class="coverFn"><a href="jit_type.h.gcov.html#L2048">_ZN3c106detail20getMaybeFakeTypePtr_INS_8optionalIN2at6TensorEEELb0EE4callEv</a></td>
<td class="coverFnHi">36925424</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,103 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/jit_type.h - functions</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - jit_type.h<span style="font-size: 80%;"> (<a href="jit_type.h.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">10</td>
<td class="headerCovTableEntry">10</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">4</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="jit_type.h.func-c.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="jit_type.h.gcov.html#L2100">_ZN3c1010getTypePtrINS_8optionalIN2at6TensorEEEEEDcv</a></td>
<td class="coverFnHi">36925424</td>
</tr>
<tr>
<td class="coverFn"><a href="jit_type.h.gcov.html#L1836">_ZN3c106detail11getTypePtr_IN2at6TensorEE4callEv</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
<td class="coverFn"><a href="jit_type.h.gcov.html#L1822">_ZN3c106detail20getMaybeFakeTypePtr_IN2at6TensorELb0EE4callEv</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
<td class="coverFn"><a href="jit_type.h.gcov.html#L2048">_ZN3c106detail20getMaybeFakeTypePtr_INS_8optionalIN2at6TensorEEELb0EE4callEv</a></td>
<td class="coverFnHi">36925424</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,138 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/jit_type_base.h - functions</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - jit_type_base.h<span style="font-size: 80%;"> (<a href="jit_type_base.h.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryMed">88.5&nbsp;%</td>
<td class="headerCovTableEntry">26</td>
<td class="headerCovTableEntry">23</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">9</td>
<td class="headerCovTableEntry">9</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><a href="jit_type_base.h.func.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></a></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="jit_type_base.h.gcov.html#L253">_ZN3c104Type24SingletonOrSharedTypePtrIS0_E16SharedPtrWrapperC2EOSt10shared_ptrIS0_E</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
<td class="coverFn"><a href="jit_type_base.h.gcov.html#L260">_ZN3c104Type24SingletonOrSharedTypePtrIS0_E4ReprC2ESt10shared_ptrIS0_E</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
<td class="coverFn"><a href="jit_type_base.h.gcov.html#L174">_ZN3c104Type24SingletonOrSharedTypePtrIS0_EC2INS_10TensorTypeELb1EEESt10shared_ptrIT_E</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
<td class="coverFn"><a href="jit_type_base.h.gcov.html#L276">_ZN3c104Type24SingletonOrSharedTypePtrIS0_E4ReprC2ERKS3_</a></td>
<td class="coverFnHi">36925424</td>
</tr>
<tr>
<td class="coverFn"><a href="jit_type_base.h.gcov.html#L219">_ZN3c104Type24SingletonOrSharedTypePtrIS0_EC2ERKS2_</a></td>
<td class="coverFnHi">36925424</td>
</tr>
<tr>
<td class="coverFn"><a href="jit_type_base.h.gcov.html#L371">_ZN3c104Type24SingletonOrSharedTypePtrIS0_E4Repr7destroyEv</a></td>
<td class="coverFnHi">73850852</td>
</tr>
<tr>
<td class="coverFn"><a href="jit_type_base.h.gcov.html#L269">_ZN3c104Type24SingletonOrSharedTypePtrIS0_E4ReprD2Ev</a></td>
<td class="coverFnHi">73850852</td>
</tr>
<tr>
<td class="coverFn"><a href="jit_type_base.h.gcov.html#L366">_ZNK3c104Type24SingletonOrSharedTypePtrIS0_E4Repr18isSharedAndNonNullEv</a></td>
<td class="coverFnHi">110776276</td>
</tr>
<tr>
<td class="coverFn"><a href="jit_type_base.h.gcov.html#L354">_ZNK3c104Type24SingletonOrSharedTypePtrIS0_E4Repr7rawReprEv</a></td>
<td class="coverFnHi">110776276</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,138 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/jit_type_base.h - functions</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - jit_type_base.h<span style="font-size: 80%;"> (<a href="jit_type_base.h.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryMed">88.5&nbsp;%</td>
<td class="headerCovTableEntry">26</td>
<td class="headerCovTableEntry">23</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">9</td>
<td class="headerCovTableEntry">9</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
<table cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
<td class="tableHead">Function Name <span title="Click to sort table by function name" class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function name" title="Click to sort table by function name" border=0></span></td>
<td class="tableHead">Hit count <span title="Click to sort table by function hit count" class="tableHeadSort"><a href="jit_type_base.h.func-c.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function hit count" title="Click to sort table by function hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="jit_type_base.h.gcov.html#L253">_ZN3c104Type24SingletonOrSharedTypePtrIS0_E16SharedPtrWrapperC2EOSt10shared_ptrIS0_E</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
<td class="coverFn"><a href="jit_type_base.h.gcov.html#L371">_ZN3c104Type24SingletonOrSharedTypePtrIS0_E4Repr7destroyEv</a></td>
<td class="coverFnHi">73850852</td>
</tr>
<tr>
<td class="coverFn"><a href="jit_type_base.h.gcov.html#L276">_ZN3c104Type24SingletonOrSharedTypePtrIS0_E4ReprC2ERKS3_</a></td>
<td class="coverFnHi">36925424</td>
</tr>
<tr>
<td class="coverFn"><a href="jit_type_base.h.gcov.html#L260">_ZN3c104Type24SingletonOrSharedTypePtrIS0_E4ReprC2ESt10shared_ptrIS0_E</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
<td class="coverFn"><a href="jit_type_base.h.gcov.html#L269">_ZN3c104Type24SingletonOrSharedTypePtrIS0_E4ReprD2Ev</a></td>
<td class="coverFnHi">73850852</td>
</tr>
<tr>
<td class="coverFn"><a href="jit_type_base.h.gcov.html#L219">_ZN3c104Type24SingletonOrSharedTypePtrIS0_EC2ERKS2_</a></td>
<td class="coverFnHi">36925424</td>
</tr>
<tr>
<td class="coverFn"><a href="jit_type_base.h.gcov.html#L174">_ZN3c104Type24SingletonOrSharedTypePtrIS0_EC2INS_10TensorTypeELb1EEESt10shared_ptrIT_E</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
<td class="coverFn"><a href="jit_type_base.h.gcov.html#L366">_ZNK3c104Type24SingletonOrSharedTypePtrIS0_E4Repr18isSharedAndNonNullEv</a></td>
<td class="coverFnHi">110776276</td>
</tr>
<tr>
<td class="coverFn"><a href="jit_type_base.h.gcov.html#L354">_ZNK3c104Type24SingletonOrSharedTypePtrIS0_E4Repr7rawReprEv</a></td>
<td class="coverFnHi">110776276</td>
</tr>
</table>
<br>
</center>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>

View File

@@ -0,0 +1,790 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LCOV - coverage.info - libtorch/include/ATen/core/jit_type_base.h</title>
<link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
<td width="10%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">libtorch/include/ATen/core</a> - jit_type_base.h<span style="font-size: 80%;"> (source / <a href="jit_type_base.h.func-c.html">functions</a>)</span></td>
<td width="5%"></td>
<td width="5%"></td>
<td width="5%" class="headerCovTableHead">Coverage</td>
<td width="5%" class="headerCovTableHead" title="Covered + Uncovered code">Total</td>
<td width="5%" class="headerCovTableHead" title="Exercised code only">Hit</td>
</tr>
<tr>
<td class="headerItem">Test:</td>
<td class="headerValue">coverage.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntryMed">88.5&nbsp;%</td>
<td class="headerCovTableEntry">26</td>
<td class="headerCovTableEntry">23</td>
</tr>
<tr>
<td class="headerItem">Test Date:</td>
<td class="headerValue">2024-04-30 13:17:26</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntryHi">100.0&nbsp;%</td>
<td class="headerCovTableEntry">9</td>
<td class="headerCovTableEntry">9</td>
</tr>
<tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td>
<pre class="sourceHeading"> Line data Source code</pre>
<pre class="source">
<span id="L1"><span class="lineNum"> 1</span> : #pragma once</span>
<span id="L2"><span class="lineNum"> 2</span> : </span>
<span id="L3"><span class="lineNum"> 3</span> : #include &lt;functional&gt;</span>
<span id="L4"><span class="lineNum"> 4</span> : #include &lt;memory&gt;</span>
<span id="L5"><span class="lineNum"> 5</span> : #include &lt;string&gt;</span>
<span id="L6"><span class="lineNum"> 6</span> : #include &lt;utility&gt;</span>
<span id="L7"><span class="lineNum"> 7</span> : </span>
<span id="L8"><span class="lineNum"> 8</span> : #include &lt;ATen/core/qualified_name.h&gt;</span>
<span id="L9"><span class="lineNum"> 9</span> : #include &lt;ATen/core/type_ptr.h&gt;</span>
<span id="L10"><span class="lineNum"> 10</span> : #include &lt;c10/core/SymInt.h&gt;</span>
<span id="L11"><span class="lineNum"> 11</span> : #include &lt;c10/core/SymFloat.h&gt;</span>
<span id="L12"><span class="lineNum"> 12</span> : #include &lt;c10/core/SymBool.h&gt;</span>
<span id="L13"><span class="lineNum"> 13</span> : #include &lt;c10/core/SymIntArrayRef.h&gt;</span>
<span id="L14"><span class="lineNum"> 14</span> : #include &lt;c10/macros/Macros.h&gt;</span>
<span id="L15"><span class="lineNum"> 15</span> : #include &lt;c10/util/ArrayRef.h&gt;</span>
<span id="L16"><span class="lineNum"> 16</span> : #include &lt;c10/util/Exception.h&gt;</span>
<span id="L17"><span class="lineNum"> 17</span> : #include &lt;c10/util/Optional.h&gt;</span>
<span id="L18"><span class="lineNum"> 18</span> : </span>
<span id="L19"><span class="lineNum"> 19</span> : namespace c10 {</span>
<span id="L20"><span class="lineNum"> 20</span> : </span>
<span id="L21"><span class="lineNum"> 21</span> : #define C10_FORALL_TYPES(_) \</span>
<span id="L22"><span class="lineNum"> 22</span> : _(AnyType) \</span>
<span id="L23"><span class="lineNum"> 23</span> : _(EnumType) \</span>
<span id="L24"><span class="lineNum"> 24</span> : _(AnyEnumType) \</span>
<span id="L25"><span class="lineNum"> 25</span> : _(TensorType) \</span>
<span id="L26"><span class="lineNum"> 26</span> : _(StorageType) \</span>
<span id="L27"><span class="lineNum"> 27</span> : _(TupleType) \</span>
<span id="L28"><span class="lineNum"> 28</span> : _(ListType) \</span>
<span id="L29"><span class="lineNum"> 29</span> : _(DictType) \</span>
<span id="L30"><span class="lineNum"> 30</span> : _(NumberType) \</span>
<span id="L31"><span class="lineNum"> 31</span> : _(FloatType) \</span>
<span id="L32"><span class="lineNum"> 32</span> : _(ComplexType) \</span>
<span id="L33"><span class="lineNum"> 33</span> : _(FutureType) \</span>
<span id="L34"><span class="lineNum"> 34</span> : _(AwaitType) \</span>
<span id="L35"><span class="lineNum"> 35</span> : _(RRefType) \</span>
<span id="L36"><span class="lineNum"> 36</span> : _(IntType) \</span>
<span id="L37"><span class="lineNum"> 37</span> : _(NoneType) \</span>
<span id="L38"><span class="lineNum"> 38</span> : _(StringType) \</span>
<span id="L39"><span class="lineNum"> 39</span> : _(GeneratorType) \</span>
<span id="L40"><span class="lineNum"> 40</span> : _(QuantizerType) \</span>
<span id="L41"><span class="lineNum"> 41</span> : _(BoolType) \</span>
<span id="L42"><span class="lineNum"> 42</span> : _(OptionalType) \</span>
<span id="L43"><span class="lineNum"> 43</span> : _(VarType) \</span>
<span id="L44"><span class="lineNum"> 44</span> : _(DeviceObjType) \</span>
<span id="L45"><span class="lineNum"> 45</span> : _(StreamObjType) \</span>
<span id="L46"><span class="lineNum"> 46</span> : _(FunctionType) \</span>
<span id="L47"><span class="lineNum"> 47</span> : _(ClassType) \</span>
<span id="L48"><span class="lineNum"> 48</span> : _(PyObjectType) \</span>
<span id="L49"><span class="lineNum"> 49</span> : _(CapsuleType) \</span>
<span id="L50"><span class="lineNum"> 50</span> : _(InterfaceType) \</span>
<span id="L51"><span class="lineNum"> 51</span> : _(QSchemeType) \</span>
<span id="L52"><span class="lineNum"> 52</span> : _(ScalarTypeType) \</span>
<span id="L53"><span class="lineNum"> 53</span> : _(LayoutType) \</span>
<span id="L54"><span class="lineNum"> 54</span> : _(MemoryFormatType) \</span>
<span id="L55"><span class="lineNum"> 55</span> : _(AnyListType) \</span>
<span id="L56"><span class="lineNum"> 56</span> : _(AnyTupleType) \</span>
<span id="L57"><span class="lineNum"> 57</span> : _(AnyClassType) \</span>
<span id="L58"><span class="lineNum"> 58</span> : _(SymIntType) \</span>
<span id="L59"><span class="lineNum"> 59</span> : _(SymFloatType) \</span>
<span id="L60"><span class="lineNum"> 60</span> : _(SymBoolType) \</span>
<span id="L61"><span class="lineNum"> 61</span> : _(UnionType) \</span>
<span id="L62"><span class="lineNum"> 62</span> : _(DynamicType)</span>
<span id="L63"><span class="lineNum"> 63</span> : </span>
<span id="L64"><span class="lineNum"> 64</span> : enum class TypeKind {</span>
<span id="L65"><span class="lineNum"> 65</span> : #define DEFINE_TYPE(T) T,</span>
<span id="L66"><span class="lineNum"> 66</span> : C10_FORALL_TYPES(DEFINE_TYPE)</span>
<span id="L67"><span class="lineNum"> 67</span> : #undef DEFINE_TYPE</span>
<span id="L68"><span class="lineNum"> 68</span> : };</span>
<span id="L69"><span class="lineNum"> 69</span> : </span>
<span id="L70"><span class="lineNum"> 70</span> : TORCH_API const char* typeKindToString(TypeKind kind);</span>
<span id="L71"><span class="lineNum"> 71</span> : </span>
<span id="L72"><span class="lineNum"> 72</span> : struct Type;</span>
<span id="L73"><span class="lineNum"> 73</span> : struct SharedType;</span>
<span id="L74"><span class="lineNum"> 74</span> : </span>
<span id="L75"><span class="lineNum"> 75</span> : // Use this to customize how a Type is printed using `annotation_str()`. If</span>
<span id="L76"><span class="lineNum"> 76</span> : // c10::nullopt is returned, `annotation_str()` falls through to its default</span>
<span id="L77"><span class="lineNum"> 77</span> : // implementation.</span>
<span id="L78"><span class="lineNum"> 78</span> : using TypePrinter = std::function&lt;c10::optional&lt;std::string&gt;(const Type&amp;)&gt;;</span>
<span id="L79"><span class="lineNum"> 79</span> : </span>
<span id="L80"><span class="lineNum"> 80</span> : namespace detail {</span>
<span id="L81"><span class="lineNum"> 81</span> : template &lt;typename T&gt;</span>
<span id="L82"><span class="lineNum"> 82</span> : struct IsSingletonType : public std::integral_constant&lt;bool, false&gt; {};</span>
<span id="L83"><span class="lineNum"> 83</span> : } // namespace detail</span>
<span id="L84"><span class="lineNum"> 84</span> : #define TORCH_DECLARE_SINGLETON(Type) \</span>
<span id="L85"><span class="lineNum"> 85</span> : struct Type; \</span>
<span id="L86"><span class="lineNum"> 86</span> : namespace detail { \</span>
<span id="L87"><span class="lineNum"> 87</span> : template &lt;&gt; struct IsSingletonType&lt;Type&gt; : public std::integral_constant&lt;bool, true&gt; {}; \</span>
<span id="L88"><span class="lineNum"> 88</span> : }</span>
<span id="L89"><span class="lineNum"> 89</span> : </span>
<span id="L90"><span class="lineNum"> 90</span> : TORCH_DECLARE_SINGLETON(AnyType);</span>
<span id="L91"><span class="lineNum"> 91</span> : TORCH_DECLARE_SINGLETON(AnyEnumType);</span>
<span id="L92"><span class="lineNum"> 92</span> : TORCH_DECLARE_SINGLETON(NumberType);</span>
<span id="L93"><span class="lineNum"> 93</span> : TORCH_DECLARE_SINGLETON(FloatType);</span>
<span id="L94"><span class="lineNum"> 94</span> : TORCH_DECLARE_SINGLETON(ComplexType);</span>
<span id="L95"><span class="lineNum"> 95</span> : TORCH_DECLARE_SINGLETON(IntType);</span>
<span id="L96"><span class="lineNum"> 96</span> : TORCH_DECLARE_SINGLETON(BoolType);</span>
<span id="L97"><span class="lineNum"> 97</span> : TORCH_DECLARE_SINGLETON(StringType);</span>
<span id="L98"><span class="lineNum"> 98</span> : TORCH_DECLARE_SINGLETON(StorageType);</span>
<span id="L99"><span class="lineNum"> 99</span> : TORCH_DECLARE_SINGLETON(NoneType);</span>
<span id="L100"><span class="lineNum"> 100</span> : TORCH_DECLARE_SINGLETON(GeneratorType);</span>
<span id="L101"><span class="lineNum"> 101</span> : TORCH_DECLARE_SINGLETON(QuantizerType);</span>
<span id="L102"><span class="lineNum"> 102</span> : TORCH_DECLARE_SINGLETON(QSchemeType);</span>
<span id="L103"><span class="lineNum"> 103</span> : TORCH_DECLARE_SINGLETON(DeviceObjType);</span>
<span id="L104"><span class="lineNum"> 104</span> : TORCH_DECLARE_SINGLETON(StreamObjType);</span>
<span id="L105"><span class="lineNum"> 105</span> : TORCH_DECLARE_SINGLETON(CapsuleType);</span>
<span id="L106"><span class="lineNum"> 106</span> : TORCH_DECLARE_SINGLETON(PyObjectType);</span>
<span id="L107"><span class="lineNum"> 107</span> : TORCH_DECLARE_SINGLETON(ScalarTypeType);</span>
<span id="L108"><span class="lineNum"> 108</span> : TORCH_DECLARE_SINGLETON(LayoutType);</span>
<span id="L109"><span class="lineNum"> 109</span> : TORCH_DECLARE_SINGLETON(MemoryFormatType);</span>
<span id="L110"><span class="lineNum"> 110</span> : TORCH_DECLARE_SINGLETON(AnyListType);</span>
<span id="L111"><span class="lineNum"> 111</span> : TORCH_DECLARE_SINGLETON(AnyTupleType);</span>
<span id="L112"><span class="lineNum"> 112</span> : TORCH_DECLARE_SINGLETON(AnyClassType);</span>
<span id="L113"><span class="lineNum"> 113</span> : </span>
<span id="L114"><span class="lineNum"> 114</span> : namespace detail {</span>
<span id="L115"><span class="lineNum"> 115</span> : template &lt;typename T, typename Enable = void&gt;</span>
<span id="L116"><span class="lineNum"> 116</span> : struct CastReturnType {</span>
<span id="L117"><span class="lineNum"> 117</span> : using type = std::shared_ptr&lt;T&gt;;</span>
<span id="L118"><span class="lineNum"> 118</span> : };</span>
<span id="L119"><span class="lineNum"> 119</span> : </span>
<span id="L120"><span class="lineNum"> 120</span> : template &lt;typename T&gt;</span>
<span id="L121"><span class="lineNum"> 121</span> : struct CastReturnType&lt;T, typename std::enable_if&lt;IsSingletonType&lt;T&gt;::value&gt;::type&gt; {</span>
<span id="L122"><span class="lineNum"> 122</span> : using type = SingletonTypePtr&lt;T&gt;;</span>
<span id="L123"><span class="lineNum"> 123</span> : };</span>
<span id="L124"><span class="lineNum"> 124</span> : </span>
<span id="L125"><span class="lineNum"> 125</span> : template &lt;typename T, typename Enable = void&gt;</span>
<span id="L126"><span class="lineNum"> 126</span> : struct CastConstReturnType {</span>
<span id="L127"><span class="lineNum"> 127</span> : using type = std::shared_ptr&lt;const T&gt;;</span>
<span id="L128"><span class="lineNum"> 128</span> : };</span>
<span id="L129"><span class="lineNum"> 129</span> : </span>
<span id="L130"><span class="lineNum"> 130</span> : template &lt;typename T&gt;</span>
<span id="L131"><span class="lineNum"> 131</span> : struct CastConstReturnType&lt;T, typename std::enable_if&lt;IsSingletonType&lt;T&gt;::value&gt;::type&gt; {</span>
<span id="L132"><span class="lineNum"> 132</span> : using type = SingletonTypePtr&lt;const T&gt;;</span>
<span id="L133"><span class="lineNum"> 133</span> : };</span>
<span id="L134"><span class="lineNum"> 134</span> : </span>
<span id="L135"><span class="lineNum"> 135</span> : template &lt;typename T&gt;</span>
<span id="L136"><span class="lineNum"> 136</span> : struct as_shared_type {</span>
<span id="L137"><span class="lineNum"> 137</span> : using type = SharedType*;</span>
<span id="L138"><span class="lineNum"> 138</span> : };</span>
<span id="L139"><span class="lineNum"> 139</span> : </span>
<span id="L140"><span class="lineNum"> 140</span> : template &lt;typename T&gt;</span>
<span id="L141"><span class="lineNum"> 141</span> : struct as_shared_type&lt;const T*&gt; {</span>
<span id="L142"><span class="lineNum"> 142</span> : using type = const SharedType *;</span>
<span id="L143"><span class="lineNum"> 143</span> : };</span>
<span id="L144"><span class="lineNum"> 144</span> : } // namespace detail</span>
<span id="L145"><span class="lineNum"> 145</span> : </span>
<span id="L146"><span class="lineNum"> 146</span> : struct TORCH_API Type {</span>
<span id="L147"><span class="lineNum"> 147</span> : friend TORCH_API bool operator==(const Type&amp; lhs, const Type&amp; rhs);</span>
<span id="L148"><span class="lineNum"> 148</span> : private:</span>
<span id="L149"><span class="lineNum"> 149</span> : TypeKind kind_;</span>
<span id="L150"><span class="lineNum"> 150</span> : </span>
<span id="L151"><span class="lineNum"> 151</span> : protected:</span>
<span id="L152"><span class="lineNum"> 152</span> : Type(TypeKind kind) : kind_(kind) {}</span>
<span id="L153"><span class="lineNum"> 153</span> : </span>
<span id="L154"><span class="lineNum"> 154</span> : virtual std::string annotation_str_impl(TypePrinter /*printer*/) const {</span>
<span id="L155"><span class="lineNum"> 155</span> : return str();</span>
<span id="L156"><span class="lineNum"> 156</span> : }</span>
<span id="L157"><span class="lineNum"> 157</span> : // a == b</span>
<span id="L158"><span class="lineNum"> 158</span> : virtual bool equals(const Type&amp; rhs) const = 0;</span>
<span id="L159"><span class="lineNum"> 159</span> : // a == b &lt;=&gt; b == a</span>
<span id="L160"><span class="lineNum"> 160</span> : virtual bool symmetric() const {</span>
<span id="L161"><span class="lineNum"> 161</span> : return true;</span>
<span id="L162"><span class="lineNum"> 162</span> : }</span>
<span id="L163"><span class="lineNum"> 163</span> : </span>
<span id="L164"><span class="lineNum"> 164</span> : public:</span>
<span id="L165"><span class="lineNum"> 165</span> : template &lt;typename T&gt;</span>
<span id="L166"><span class="lineNum"> 166</span> : class SingletonOrSharedTypePtr {</span>
<span id="L167"><span class="lineNum"> 167</span> : public:</span>
<span id="L168"><span class="lineNum"> 168</span> : using element_type = typename std::shared_ptr&lt;T&gt;::element_type;</span>
<span id="L169"><span class="lineNum"> 169</span> : </span>
<span id="L170"><span class="lineNum"> 170</span> : SingletonOrSharedTypePtr() = default;</span>
<span id="L171"><span class="lineNum"> 171</span> : </span>
<span id="L172"><span class="lineNum"> 172</span> : /* implicit */ SingletonOrSharedTypePtr(std::shared_ptr&lt;T&gt; x)</span>
<span id="L173"><span class="lineNum"> 173</span> : : repr_(std::move(x)) {}</span>
<span id="L174"><span class="lineNum"> 174</span> : </span>
<span id="L175"><span class="lineNum"> 175</span> : template &lt;typename U, std::enable_if_t&lt;std::is_convertible&lt;U*, T*&gt;::value, bool&gt; = true&gt;</span>
<span id="L176"><span class="lineNum"> 176</span> <span class="tlaGNC tlaBgGNC"> 2 : /* implicit */ SingletonOrSharedTypePtr(std::shared_ptr&lt;U&gt; x)</span></span>
<span id="L177"><span class="lineNum"> 177</span> <span class="tlaGNC"> 2 : : repr_(std::move(x)) {}</span></span>
<span id="L178"><span class="lineNum"> 178</span> : </span>
<span id="L179"><span class="lineNum"> 179</span> : /* implicit */ SingletonOrSharedTypePtr(std::nullptr_t)</span>
<span id="L180"><span class="lineNum"> 180</span> : : repr_(nullptr) {}</span>
<span id="L181"><span class="lineNum"> 181</span> : </span>
<span id="L182"><span class="lineNum"> 182</span> : /* implicit */ SingletonOrSharedTypePtr(SingletonTypePtr&lt;T&gt; p)</span>
<span id="L183"><span class="lineNum"> 183</span> : : repr_(p) {}</span>
<span id="L184"><span class="lineNum"> 184</span> : </span>
<span id="L185"><span class="lineNum"> 185</span> : template &lt;typename U, std::enable_if_t&lt;std::is_convertible&lt;U*, T*&gt;::value, bool&gt; = true&gt;</span>
<span id="L186"><span class="lineNum"> 186</span> : /* implicit */ SingletonOrSharedTypePtr(SingletonTypePtr&lt;U&gt; p)</span>
<span id="L187"><span class="lineNum"> 187</span> : : repr_(SingletonTypePtr&lt;T&gt;(p.get())) {}</span>
<span id="L188"><span class="lineNum"> 188</span> : </span>
<span id="L189"><span class="lineNum"> 189</span> : </span>
<span id="L190"><span class="lineNum"> 190</span> : // We need to support construction from T* for pybind. The problem</span>
<span id="L191"><span class="lineNum"> 191</span> : // is that it's not clear if we are supposed to be taking shared</span>
<span id="L192"><span class="lineNum"> 192</span> : // ownership or not.</span>
<span id="L193"><span class="lineNum"> 193</span> : //</span>
<span id="L194"><span class="lineNum"> 194</span> : // Case 1: if T is known statically to derive from SharedType, we should use</span>
<span id="L195"><span class="lineNum"> 195</span> : // shared_from_this() and take shared_ownership.</span>
<span id="L196"><span class="lineNum"> 196</span> : //</span>
<span id="L197"><span class="lineNum"> 197</span> : // Case 2: if T is exactly Type, we need to do a dynamic_cast to</span>
<span id="L198"><span class="lineNum"> 198</span> : // check if it's a SharedType and do the right thing.</span>
<span id="L199"><span class="lineNum"> 199</span> : //</span>
<span id="L200"><span class="lineNum"> 200</span> : // Case 3: Otherwise, T is not a SharedType. (debug-check this</span>
<span id="L201"><span class="lineNum"> 201</span> : // assumption!) Use a singleton pointer.</span>
<span id="L202"><span class="lineNum"> 202</span> : </span>
<span id="L203"><span class="lineNum"> 203</span> : template &lt;typename U = T, std::enable_if_t&lt;std::is_base_of&lt;SharedType, U&gt;::value, bool&gt; = true&gt;</span>
<span id="L204"><span class="lineNum"> 204</span> : /* implicit */ SingletonOrSharedTypePtr(T* p) : SingletonOrSharedTypePtr(static_cast&lt;typename detail::as_shared_type&lt;U&gt;::type&gt;(p)-&gt;shared_from_this()) {}</span>
<span id="L205"><span class="lineNum"> 205</span> : </span>
<span id="L206"><span class="lineNum"> 206</span> : template &lt;typename U = T, std::enable_if_t&lt;std::is_same&lt;Type, U&gt;::value, bool&gt; = true&gt;</span>
<span id="L207"><span class="lineNum"> 207</span> : /* implicit */ SingletonOrSharedTypePtr(T* p) {</span>
<span id="L208"><span class="lineNum"> 208</span> : if (auto* shared_p = dynamic_cast&lt;typename detail::as_shared_type&lt;U&gt;::type&gt;(p)) {</span>
<span id="L209"><span class="lineNum"> 209</span> : repr_ = Repr(shared_p-&gt;shared_from_this());</span>
<span id="L210"><span class="lineNum"> 210</span> : } else {</span>
<span id="L211"><span class="lineNum"> 211</span> : repr_ = Repr(p);</span>
<span id="L212"><span class="lineNum"> 212</span> : }</span>
<span id="L213"><span class="lineNum"> 213</span> : }</span>
<span id="L214"><span class="lineNum"> 214</span> : </span>
<span id="L215"><span class="lineNum"> 215</span> : template &lt;typename U = T, std::enable_if_t&lt;!std::is_same&lt;Type, U&gt;::value &amp;&amp; !std::is_base_of&lt;SharedType, U&gt;::value, bool&gt; = true&gt;</span>
<span id="L216"><span class="lineNum"> 216</span> : /* implicit */ SingletonOrSharedTypePtr(T* p)</span>
<span id="L217"><span class="lineNum"> 217</span> : : repr_(p) {</span>
<span id="L218"><span class="lineNum"> 218</span> : TORCH_INTERNAL_ASSERT_DEBUG_ONLY(dynamic_cast&lt;typename detail::as_shared_type&lt;U&gt;::type&gt;(p) == nullptr);</span>
<span id="L219"><span class="lineNum"> 219</span> : }</span>
<span id="L220"><span class="lineNum"> 220</span> : </span>
<span id="L221"><span class="lineNum"> 221</span> <span class="tlaGNC"> 36925424 : SingletonOrSharedTypePtr(const SingletonOrSharedTypePtr&amp;) = default;</span></span>
<span id="L222"><span class="lineNum"> 222</span> : SingletonOrSharedTypePtr(SingletonOrSharedTypePtr&amp;&amp;) noexcept = default;</span>
<span id="L223"><span class="lineNum"> 223</span> : SingletonOrSharedTypePtr&amp; operator=(const SingletonOrSharedTypePtr&amp;) = default;</span>
<span id="L224"><span class="lineNum"> 224</span> : SingletonOrSharedTypePtr&amp; operator=(SingletonOrSharedTypePtr&amp;&amp;) noexcept = default;</span>
<span id="L225"><span class="lineNum"> 225</span> : </span>
<span id="L226"><span class="lineNum"> 226</span> : T* get() const {</span>
<span id="L227"><span class="lineNum"> 227</span> : return repr_.isSharedAndNonNull() ? repr_.shared_.repr_.get() : static_cast&lt;T*&gt;(repr_.rawRepr().first);</span>
<span id="L228"><span class="lineNum"> 228</span> : }</span>
<span id="L229"><span class="lineNum"> 229</span> : </span>
<span id="L230"><span class="lineNum"> 230</span> : operator bool() const {</span>
<span id="L231"><span class="lineNum"> 231</span> : return repr_.isNonNull();</span>
<span id="L232"><span class="lineNum"> 232</span> : }</span>
<span id="L233"><span class="lineNum"> 233</span> : </span>
<span id="L234"><span class="lineNum"> 234</span> : bool operator==(std::nullptr_t) const {</span>
<span id="L235"><span class="lineNum"> 235</span> : return !repr_.isNonNull();</span>
<span id="L236"><span class="lineNum"> 236</span> : }</span>
<span id="L237"><span class="lineNum"> 237</span> : </span>
<span id="L238"><span class="lineNum"> 238</span> : bool operator!=(std::nullptr_t) const {</span>
<span id="L239"><span class="lineNum"> 239</span> : return repr_.isNonNull();</span>
<span id="L240"><span class="lineNum"> 240</span> : }</span>
<span id="L241"><span class="lineNum"> 241</span> : </span>
<span id="L242"><span class="lineNum"> 242</span> : template &lt;typename U = T, std::enable_if_t&lt;!std::is_same&lt;std::remove_const_t&lt;U&gt;, void&gt;::value, bool&gt; = true&gt;</span>
<span id="L243"><span class="lineNum"> 243</span> : U&amp; operator*() const {</span>
<span id="L244"><span class="lineNum"> 244</span> : return *get();</span>
<span id="L245"><span class="lineNum"> 245</span> : }</span>
<span id="L246"><span class="lineNum"> 246</span> : </span>
<span id="L247"><span class="lineNum"> 247</span> : T* operator-&gt;() const {</span>
<span id="L248"><span class="lineNum"> 248</span> : return get();</span>
<span id="L249"><span class="lineNum"> 249</span> : }</span>
<span id="L250"><span class="lineNum"> 250</span> : </span>
<span id="L251"><span class="lineNum"> 251</span> : private:</span>
<span id="L252"><span class="lineNum"> 252</span> : // NOTE: SharedPtrWrapper exists to work around a baffling bug in</span>
<span id="L253"><span class="lineNum"> 253</span> : // nvcc; see comment in destroy() below.</span>
<span id="L254"><span class="lineNum"> 254</span> : struct SharedPtrWrapper {</span>
<span id="L255"><span class="lineNum"> 255</span> <span class="tlaGNC"> 2 : SharedPtrWrapper(std::shared_ptr&lt;T&gt; &amp;&amp;x)</span></span>
<span id="L256"><span class="lineNum"> 256</span> <span class="tlaGNC"> 2 : : repr_(std::move(x)) {}</span></span>
<span id="L257"><span class="lineNum"> 257</span> : std::shared_ptr&lt;T&gt; repr_;</span>
<span id="L258"><span class="lineNum"> 258</span> : };</span>
<span id="L259"><span class="lineNum"> 259</span> : union Repr {</span>
<span id="L260"><span class="lineNum"> 260</span> : Repr() : Repr(nullptr) {}</span>
<span id="L261"><span class="lineNum"> 261</span> : </span>
<span id="L262"><span class="lineNum"> 262</span> <span class="tlaGNC"> 2 : explicit Repr(std::shared_ptr&lt;T&gt; x)</span></span>
<span id="L263"><span class="lineNum"> 263</span> <span class="tlaGNC"> 2 : : shared_(std::move(x)) {}</span></span>
<span id="L264"><span class="lineNum"> 264</span> : </span>
<span id="L265"><span class="lineNum"> 265</span> : explicit Repr(std::nullptr_t)</span>
<span id="L266"><span class="lineNum"> 266</span> : : singletonRepr_(nullptr) {}</span>
<span id="L267"><span class="lineNum"> 267</span> : </span>
<span id="L268"><span class="lineNum"> 268</span> : explicit Repr(SingletonTypePtr&lt;T&gt; p)</span>
<span id="L269"><span class="lineNum"> 269</span> : : singletonRepr_(p.get()) {}</span>
<span id="L270"><span class="lineNum"> 270</span> : </span>
<span id="L271"><span class="lineNum"> 271</span> <span class="tlaGNC"> 73850852 : ~Repr() {</span></span>
<span id="L272"><span class="lineNum"> 272</span> <span class="tlaGNC"> 73850852 : destroy();</span></span>
<span id="L273"><span class="lineNum"> 273</span> <span class="tlaGNC"> 73850852 : }</span></span>
<span id="L274"><span class="lineNum"> 274</span> : </span>
<span id="L275"><span class="lineNum"> 275</span> : // NOTE: the only non-UB way to access our null state is through</span>
<span id="L276"><span class="lineNum"> 276</span> : // rawRepr(), because our copy operation doesn't preserve which</span>
<span id="L277"><span class="lineNum"> 277</span> : // union member is active for null pointers.</span>
<span id="L278"><span class="lineNum"> 278</span> <span class="tlaGNC"> 36925424 : Repr(const Repr&amp; rhs) {</span></span>
<span id="L279"><span class="lineNum"> 279</span> <span class="tlaGNC"> 36925424 : if (rhs.isSharedAndNonNull()) {</span></span>
<span id="L280"><span class="lineNum"> 280</span> <span class="tlaGNC"> 36925424 : new (&amp;shared_) SharedPtrWrapper(rhs.shared_);</span></span>
<span id="L281"><span class="lineNum"> 281</span> : } else {</span>
<span id="L282"><span class="lineNum"> 282</span> <span class="tlaUNC tlaBgUNC"> 0 : singletonRepr_.singleton_ = static_cast&lt;T*&gt;(rhs.rawRepr().first);</span></span>
<span id="L283"><span class="lineNum"> 283</span> <span class="tlaUNC"> 0 : TORCH_INTERNAL_ASSERT_DEBUG_ONLY(rhs.singletonRepr_.unused_ == nullptr);</span></span>
<span id="L284"><span class="lineNum"> 284</span> <span class="tlaUNC"> 0 : singletonRepr_.unused_ = nullptr;</span></span>
<span id="L285"><span class="lineNum"> 285</span> : }</span>
<span id="L286"><span class="lineNum"> 286</span> <span class="tlaGNC tlaBgGNC"> 36925424 : }</span></span>
<span id="L287"><span class="lineNum"> 287</span> : </span>
<span id="L288"><span class="lineNum"> 288</span> : Repr(Repr&amp;&amp; rhs) noexcept {</span>
<span id="L289"><span class="lineNum"> 289</span> : if (rhs.isSharedAndNonNull()) {</span>
<span id="L290"><span class="lineNum"> 290</span> : new (&amp;shared_) SharedPtrWrapper(std::move(rhs.shared_));</span>
<span id="L291"><span class="lineNum"> 291</span> : } else {</span>
<span id="L292"><span class="lineNum"> 292</span> : singletonRepr_.singleton_ = static_cast&lt;T*&gt;(rhs.rawRepr().first);</span>
<span id="L293"><span class="lineNum"> 293</span> : TORCH_INTERNAL_ASSERT_DEBUG_ONLY(rhs.singletonRepr_.unused_ == nullptr);</span>
<span id="L294"><span class="lineNum"> 294</span> : singletonRepr_.unused_ = nullptr;</span>
<span id="L295"><span class="lineNum"> 295</span> : }</span>
<span id="L296"><span class="lineNum"> 296</span> : }</span>
<span id="L297"><span class="lineNum"> 297</span> : </span>
<span id="L298"><span class="lineNum"> 298</span> : Repr&amp; operator=(const Repr&amp; rhs) {</span>
<span id="L299"><span class="lineNum"> 299</span> : if (&amp;rhs == this) {</span>
<span id="L300"><span class="lineNum"> 300</span> : return *this;</span>
<span id="L301"><span class="lineNum"> 301</span> : }</span>
<span id="L302"><span class="lineNum"> 302</span> : if (rhs.isSharedAndNonNull()) {</span>
<span id="L303"><span class="lineNum"> 303</span> : if (isSharedAndNonNull()) {</span>
<span id="L304"><span class="lineNum"> 304</span> : shared_ = rhs.shared_;</span>
<span id="L305"><span class="lineNum"> 305</span> : } else {</span>
<span id="L306"><span class="lineNum"> 306</span> : new (&amp;shared_) SharedPtrWrapper(rhs.shared_);</span>
<span id="L307"><span class="lineNum"> 307</span> : }</span>
<span id="L308"><span class="lineNum"> 308</span> : } else {</span>
<span id="L309"><span class="lineNum"> 309</span> : if (isSharedAndNonNull()) {</span>
<span id="L310"><span class="lineNum"> 310</span> : destroy();</span>
<span id="L311"><span class="lineNum"> 311</span> : }</span>
<span id="L312"><span class="lineNum"> 312</span> : singletonRepr_.singleton_ = static_cast&lt;T*&gt;(rhs.rawRepr().first);</span>
<span id="L313"><span class="lineNum"> 313</span> : TORCH_INTERNAL_ASSERT_DEBUG_ONLY(rhs.rawRepr().nullIfSingleton_ == nullptr);</span>
<span id="L314"><span class="lineNum"> 314</span> : singletonRepr_.unused_ = nullptr;</span>
<span id="L315"><span class="lineNum"> 315</span> : }</span>
<span id="L316"><span class="lineNum"> 316</span> : return *this;</span>
<span id="L317"><span class="lineNum"> 317</span> : }</span>
<span id="L318"><span class="lineNum"> 318</span> : </span>
<span id="L319"><span class="lineNum"> 319</span> : Repr&amp; operator=(Repr&amp;&amp; rhs) noexcept {</span>
<span id="L320"><span class="lineNum"> 320</span> : if (&amp;rhs == this) {</span>
<span id="L321"><span class="lineNum"> 321</span> : return *this;</span>
<span id="L322"><span class="lineNum"> 322</span> : }</span>
<span id="L323"><span class="lineNum"> 323</span> : if (rhs.isSharedAndNonNull()) {</span>
<span id="L324"><span class="lineNum"> 324</span> : if (isSharedAndNonNull()) {</span>
<span id="L325"><span class="lineNum"> 325</span> : shared_ = std::move(rhs.shared_);</span>
<span id="L326"><span class="lineNum"> 326</span> : } else {</span>
<span id="L327"><span class="lineNum"> 327</span> : new (&amp;shared_) SharedPtrWrapper(std::move(rhs.shared_));</span>
<span id="L328"><span class="lineNum"> 328</span> : }</span>
<span id="L329"><span class="lineNum"> 329</span> : } else {</span>
<span id="L330"><span class="lineNum"> 330</span> : if (isSharedAndNonNull()) {</span>
<span id="L331"><span class="lineNum"> 331</span> : destroy();</span>
<span id="L332"><span class="lineNum"> 332</span> : }</span>
<span id="L333"><span class="lineNum"> 333</span> : singletonRepr_.singleton_ = static_cast&lt;T*&gt;(rhs.rawRepr().first);</span>
<span id="L334"><span class="lineNum"> 334</span> : TORCH_INTERNAL_ASSERT_DEBUG_ONLY(rhs.rawRepr().nullIfSingleton_ == nullptr);</span>
<span id="L335"><span class="lineNum"> 335</span> : singletonRepr_.unused_ = nullptr;</span>
<span id="L336"><span class="lineNum"> 336</span> : }</span>
<span id="L337"><span class="lineNum"> 337</span> : return *this;</span>
<span id="L338"><span class="lineNum"> 338</span> : }</span>
<span id="L339"><span class="lineNum"> 339</span> : </span>
<span id="L340"><span class="lineNum"> 340</span> : SharedPtrWrapper shared_;</span>
<span id="L341"><span class="lineNum"> 341</span> : </span>
<span id="L342"><span class="lineNum"> 342</span> : struct SingletonRepr {</span>
<span id="L343"><span class="lineNum"> 343</span> : explicit SingletonRepr(T* s) : singleton_(s) {}</span>
<span id="L344"><span class="lineNum"> 344</span> : T* singleton_;</span>
<span id="L345"><span class="lineNum"> 345</span> : void* unused_ = nullptr;</span>
<span id="L346"><span class="lineNum"> 346</span> : } singletonRepr_;</span>
<span id="L347"><span class="lineNum"> 347</span> : struct RawRepr {</span>
<span id="L348"><span class="lineNum"> 348</span> : void* first;</span>
<span id="L349"><span class="lineNum"> 349</span> : void* nullIfSingleton_;</span>
<span id="L350"><span class="lineNum"> 350</span> : };</span>
<span id="L351"><span class="lineNum"> 351</span> : </span>
<span id="L352"><span class="lineNum"> 352</span> : // It is UB to read the singleton part of Repr if it was</span>
<span id="L353"><span class="lineNum"> 353</span> : // constructed as a shared_ptr and vice versa, but memcpying out</span>
<span id="L354"><span class="lineNum"> 354</span> : // the representation is always OK, so here's an accessor to obey</span>
<span id="L355"><span class="lineNum"> 355</span> : // the letter of the law.</span>
<span id="L356"><span class="lineNum"> 356</span> <span class="tlaGNC"> 110776276 : RawRepr rawRepr() const {</span></span>
<span id="L357"><span class="lineNum"> 357</span> : RawRepr repr;</span>
<span id="L358"><span class="lineNum"> 358</span> <span class="tlaGNC"> 110776276 : memcpy(&amp;repr, reinterpret_cast&lt;const char *&gt;(this), sizeof(RawRepr));</span></span>
<span id="L359"><span class="lineNum"> 359</span> <span class="tlaGNC"> 110776276 : return repr;</span></span>
<span id="L360"><span class="lineNum"> 360</span> : }</span>
<span id="L361"><span class="lineNum"> 361</span> : </span>
<span id="L362"><span class="lineNum"> 362</span> : bool isNonNull() const {</span>
<span id="L363"><span class="lineNum"> 363</span> : auto repr = rawRepr();</span>
<span id="L364"><span class="lineNum"> 364</span> : TORCH_INTERNAL_ASSERT_DEBUG_ONLY(repr.nullIfSingleton_ == nullptr || repr.first != nullptr);</span>
<span id="L365"><span class="lineNum"> 365</span> : return repr.first != nullptr;</span>
<span id="L366"><span class="lineNum"> 366</span> : }</span>
<span id="L367"><span class="lineNum"> 367</span> : </span>
<span id="L368"><span class="lineNum"> 368</span> <span class="tlaGNC"> 110776276 : bool isSharedAndNonNull() const {</span></span>
<span id="L369"><span class="lineNum"> 369</span> <span class="tlaGNC"> 110776276 : return rawRepr().nullIfSingleton_ != nullptr;</span></span>
<span id="L370"><span class="lineNum"> 370</span> : }</span>
<span id="L371"><span class="lineNum"> 371</span> : </span>
<span id="L372"><span class="lineNum"> 372</span> : private:</span>
<span id="L373"><span class="lineNum"> 373</span> <span class="tlaGNC"> 73850852 : void destroy() {</span></span>
<span id="L374"><span class="lineNum"> 374</span> <span class="tlaGNC"> 73850852 : if (isSharedAndNonNull()) {</span></span>
<span id="L375"><span class="lineNum"> 375</span> : // Without SharedPtrWrapper, this line would read</span>
<span id="L376"><span class="lineNum"> 376</span> : // `shared_.~shared_ptr()` and nvcc would complain with</span>
<span id="L377"><span class="lineNum"> 377</span> : // &quot;error: expected primary-expression before '&gt;' token&quot;</span>
<span id="L378"><span class="lineNum"> 378</span> : // referring to the &quot;t&quot; in &quot;shared_ptr&quot;. SharedPtrWrapper</span>
<span id="L379"><span class="lineNum"> 379</span> : // exists to work around this compiler bug.</span>
<span id="L380"><span class="lineNum"> 380</span> <span class="tlaGNC"> 36925428 : shared_.~SharedPtrWrapper();</span></span>
<span id="L381"><span class="lineNum"> 381</span> : }</span>
<span id="L382"><span class="lineNum"> 382</span> <span class="tlaGNC"> 73850852 : }</span></span>
<span id="L383"><span class="lineNum"> 383</span> : } repr_;</span>
<span id="L384"><span class="lineNum"> 384</span> : };</span>
<span id="L385"><span class="lineNum"> 385</span> : </span>
<span id="L386"><span class="lineNum"> 386</span> : using TypePtr = SingletonOrSharedTypePtr&lt;Type&gt;;</span>
<span id="L387"><span class="lineNum"> 387</span> : using Ptr = TypePtr;</span>
<span id="L388"><span class="lineNum"> 388</span> : using ElementType = Type;</span>
<span id="L389"><span class="lineNum"> 389</span> : </span>
<span id="L390"><span class="lineNum"> 390</span> : // subtyping relation. By default, we return true for the case</span>
<span id="L391"><span class="lineNum"> 391</span> : // when the type is exactly equal or if this &lt;: T where rhs = Optional[T]</span>
<span id="L392"><span class="lineNum"> 392</span> : </span>
<span id="L393"><span class="lineNum"> 393</span> : // if this returns false and the why_not stream is non-null, it contains</span>
<span id="L394"><span class="lineNum"> 394</span> : // additional details that describe why this is not a subtype of 'rhs'.</span>
<span id="L395"><span class="lineNum"> 395</span> : // This additional information should only contain details that are not</span>
<span id="L396"><span class="lineNum"> 396</span> : // obvious from the annotation_str() that describes the type. For instance it</span>
<span id="L397"><span class="lineNum"> 397</span> : // is clear that `int &lt;: str` is false but not clear why `Foo &lt;: InterfaceBar`</span>
<span id="L398"><span class="lineNum"> 398</span> : // might be false.</span>
<span id="L399"><span class="lineNum"> 399</span> : virtual bool isSubtypeOfExt(const Type&amp; rhs, std::ostream* why_not) const;</span>
<span id="L400"><span class="lineNum"> 400</span> : virtual bool is_module() const;</span>
<span id="L401"><span class="lineNum"> 401</span> : bool isSubtypeOf(const Type&amp; rhs) const {</span>
<span id="L402"><span class="lineNum"> 402</span> : return isSubtypeOfExt(rhs, nullptr);</span>
<span id="L403"><span class="lineNum"> 403</span> : }</span>
<span id="L404"><span class="lineNum"> 404</span> : // Compatibility shims to accommodate existing code that passes shared_ptrs</span>
<span id="L405"><span class="lineNum"> 405</span> : // around. Ideally, we would just delete this, but it should be harmless.</span>
<span id="L406"><span class="lineNum"> 406</span> : template &lt;typename T&gt;</span>
<span id="L407"><span class="lineNum"> 407</span> : typename std::enable_if&lt;std::is_base_of&lt;Type, T&gt;::value, bool&gt;::type</span>
<span id="L408"><span class="lineNum"> 408</span> : isSubtypeOf(const std::shared_ptr&lt;T&gt;&amp; rhs) const {</span>
<span id="L409"><span class="lineNum"> 409</span> : return isSubtypeOf(*rhs);</span>
<span id="L410"><span class="lineNum"> 410</span> : }</span>
<span id="L411"><span class="lineNum"> 411</span> : </span>
<span id="L412"><span class="lineNum"> 412</span> : template &lt;typename T&gt;</span>
<span id="L413"><span class="lineNum"> 413</span> : typename std::enable_if&lt;std::is_base_of&lt;Type, T&gt;::value, bool&gt;::type</span>
<span id="L414"><span class="lineNum"> 414</span> : isSubtypeOf(const SingletonOrSharedTypePtr&lt;T&gt;&amp; rhs) const {</span>
<span id="L415"><span class="lineNum"> 415</span> : return isSubtypeOf(*rhs);</span>
<span id="L416"><span class="lineNum"> 416</span> : }</span>
<span id="L417"><span class="lineNum"> 417</span> : </span>
<span id="L418"><span class="lineNum"> 418</span> : template &lt;typename T&gt;</span>
<span id="L419"><span class="lineNum"> 419</span> : typename std::enable_if&lt;std::is_base_of&lt;Type, T&gt;::value, bool&gt;::type</span>
<span id="L420"><span class="lineNum"> 420</span> : isSubtypeOf(SingletonTypePtr&lt;T&gt; rhs) const {</span>
<span id="L421"><span class="lineNum"> 421</span> : return isSubtypeOf(*rhs);</span>
<span id="L422"><span class="lineNum"> 422</span> : }</span>
<span id="L423"><span class="lineNum"> 423</span> : </span>
<span id="L424"><span class="lineNum"> 424</span> : template &lt;typename T&gt;</span>
<span id="L425"><span class="lineNum"> 425</span> : typename std::enable_if&lt;std::is_base_of&lt;Type, T&gt;::value, bool&gt;::type</span>
<span id="L426"><span class="lineNum"> 426</span> : isSubtypeOfExt(const SingletonOrSharedTypePtr&lt;T&gt;&amp; rhs, std::ostream* why_not) const {</span>
<span id="L427"><span class="lineNum"> 427</span> : return isSubtypeOfExt(*rhs, why_not);</span>
<span id="L428"><span class="lineNum"> 428</span> : }</span>
<span id="L429"><span class="lineNum"> 429</span> : </span>
<span id="L430"><span class="lineNum"> 430</span> : template &lt;typename T&gt;</span>
<span id="L431"><span class="lineNum"> 431</span> : typename std::enable_if&lt;std::is_base_of&lt;Type, T&gt;::value, bool&gt;::type</span>
<span id="L432"><span class="lineNum"> 432</span> : isSubtypeOfExt(const std::shared_ptr&lt;T&gt;&amp; rhs, std::ostream* why_not) const {</span>
<span id="L433"><span class="lineNum"> 433</span> : return isSubtypeOfExt(*rhs, why_not);</span>
<span id="L434"><span class="lineNum"> 434</span> : }</span>
<span id="L435"><span class="lineNum"> 435</span> : </span>
<span id="L436"><span class="lineNum"> 436</span> : template &lt;typename T&gt;</span>
<span id="L437"><span class="lineNum"> 437</span> : typename std::enable_if&lt;std::is_base_of&lt;Type, T&gt;::value, bool&gt;::type</span>
<span id="L438"><span class="lineNum"> 438</span> : isSubtypeOfExt(SingletonTypePtr&lt;T&gt; rhs, std::ostream* why_not) const {</span>
<span id="L439"><span class="lineNum"> 439</span> : return isSubtypeOfExt(*rhs, why_not);</span>
<span id="L440"><span class="lineNum"> 440</span> : }</span>
<span id="L441"><span class="lineNum"> 441</span> : </span>
<span id="L442"><span class="lineNum"> 442</span> : // How this type will appear in FunctionSchema declarations</span>
<span id="L443"><span class="lineNum"> 443</span> : virtual std::string str() const = 0;</span>
<span id="L444"><span class="lineNum"> 444</span> : </span>
<span id="L445"><span class="lineNum"> 445</span> : // How this type will appear as if it were a type annotation in Python</span>
<span id="L446"><span class="lineNum"> 446</span> : // which is sometimes different than how it appears in declarations (e.g.</span>
<span id="L447"><span class="lineNum"> 447</span> : // int[] vs List[int])</span>
<span id="L448"><span class="lineNum"> 448</span> : //</span>
<span id="L449"><span class="lineNum"> 449</span> : // Takes a custom printer that users can pass in to customize the output of</span>
<span id="L450"><span class="lineNum"> 450</span> : // this method.</span>
<span id="L451"><span class="lineNum"> 451</span> : std::string annotation_str(TypePrinter printer) const {</span>
<span id="L452"><span class="lineNum"> 452</span> : if (printer) {</span>
<span id="L453"><span class="lineNum"> 453</span> : // the printer can return nullopt to fall through to the default impl</span>
<span id="L454"><span class="lineNum"> 454</span> : if (auto renamed = printer(*this)) {</span>
<span id="L455"><span class="lineNum"> 455</span> : return *renamed;</span>
<span id="L456"><span class="lineNum"> 456</span> : }</span>
<span id="L457"><span class="lineNum"> 457</span> : }</span>
<span id="L458"><span class="lineNum"> 458</span> : return annotation_str_impl(std::move(printer));</span>
<span id="L459"><span class="lineNum"> 459</span> : }</span>
<span id="L460"><span class="lineNum"> 460</span> : std::string annotation_str() const {</span>
<span id="L461"><span class="lineNum"> 461</span> : // Overload instead of define a default value for `printer` to help</span>
<span id="L462"><span class="lineNum"> 462</span> : // debuggers out.</span>
<span id="L463"><span class="lineNum"> 463</span> : return annotation_str(nullptr);</span>
<span id="L464"><span class="lineNum"> 464</span> : }</span>
<span id="L465"><span class="lineNum"> 465</span> : </span>
<span id="L466"><span class="lineNum"> 466</span> : // Returns a human readable string that includes additional information like</span>
<span id="L467"><span class="lineNum"> 467</span> : // &quot;type is inferred rather than explictly defined&quot; to help construct more</span>
<span id="L468"><span class="lineNum"> 468</span> : // user-friendly messages.</span>
<span id="L469"><span class="lineNum"> 469</span> : virtual std::string repr_str() const {</span>
<span id="L470"><span class="lineNum"> 470</span> : return annotation_str();</span>
<span id="L471"><span class="lineNum"> 471</span> : }</span>
<span id="L472"><span class="lineNum"> 472</span> : </span>
<span id="L473"><span class="lineNum"> 473</span> : TypeKind kind() const {</span>
<span id="L474"><span class="lineNum"> 474</span> : return kind_;</span>
<span id="L475"><span class="lineNum"> 475</span> : }</span>
<span id="L476"><span class="lineNum"> 476</span> : </span>
<span id="L477"><span class="lineNum"> 477</span> : virtual bool isUnionType() const {</span>
<span id="L478"><span class="lineNum"> 478</span> : return false;</span>
<span id="L479"><span class="lineNum"> 479</span> : }</span>
<span id="L480"><span class="lineNum"> 480</span> : </span>
<span id="L481"><span class="lineNum"> 481</span> : virtual bool requires_grad() const {</span>
<span id="L482"><span class="lineNum"> 482</span> : for (const auto&amp; ct : containedTypes()) {</span>
<span id="L483"><span class="lineNum"> 483</span> : if (ct-&gt;requires_grad()) {</span>
<span id="L484"><span class="lineNum"> 484</span> : return true;</span>
<span id="L485"><span class="lineNum"> 485</span> : }</span>
<span id="L486"><span class="lineNum"> 486</span> : }</span>
<span id="L487"><span class="lineNum"> 487</span> : return false;</span>
<span id="L488"><span class="lineNum"> 488</span> : }</span>
<span id="L489"><span class="lineNum"> 489</span> : </span>
<span id="L490"><span class="lineNum"> 490</span> : // Dynamically cast this object to the subclass indicated by the</span>
<span id="L491"><span class="lineNum"> 491</span> : // template variable, returning nullptr if the cast is invalid.</span>
<span id="L492"><span class="lineNum"> 492</span> : template &lt;typename T, std::enable_if_t&lt;!detail::IsSingletonType&lt;T&gt;::value, bool&gt; = true&gt;</span>
<span id="L493"><span class="lineNum"> 493</span> : typename detail::CastReturnType&lt;T&gt;::type cast() {</span>
<span id="L494"><span class="lineNum"> 494</span> : if (T::Kind == kind()) {</span>
<span id="L495"><span class="lineNum"> 495</span> : return std::static_pointer_cast&lt;T&gt;(static_cast&lt;T*&gt;(this)-&gt;shared_from_this());</span>
<span id="L496"><span class="lineNum"> 496</span> : }</span>
<span id="L497"><span class="lineNum"> 497</span> : return nullptr;</span>
<span id="L498"><span class="lineNum"> 498</span> : }</span>
<span id="L499"><span class="lineNum"> 499</span> : template &lt;typename T, std::enable_if_t&lt;detail::IsSingletonType&lt;T&gt;::value, bool&gt; = true&gt;</span>
<span id="L500"><span class="lineNum"> 500</span> : typename detail::CastReturnType&lt;T&gt;::type cast() {</span>
<span id="L501"><span class="lineNum"> 501</span> : if (T::Kind == kind()) {</span>
<span id="L502"><span class="lineNum"> 502</span> : TORCH_INTERNAL_ASSERT_DEBUG_ONLY(this == T::get().get());</span>
<span id="L503"><span class="lineNum"> 503</span> : return typename detail::CastReturnType&lt;T&gt;::type(static_cast&lt;T*&gt;(this));</span>
<span id="L504"><span class="lineNum"> 504</span> : }</span>
<span id="L505"><span class="lineNum"> 505</span> : return nullptr;</span>
<span id="L506"><span class="lineNum"> 506</span> : }</span>
<span id="L507"><span class="lineNum"> 507</span> : template &lt;typename T, std::enable_if_t&lt;!detail::IsSingletonType&lt;T&gt;::value, bool&gt; = true&gt;</span>
<span id="L508"><span class="lineNum"> 508</span> : typename detail::CastConstReturnType&lt;T&gt;::type cast() const {</span>
<span id="L509"><span class="lineNum"> 509</span> : if (T::Kind == kind()) {</span>
<span id="L510"><span class="lineNum"> 510</span> : return std::static_pointer_cast&lt;const T&gt;(static_cast&lt;const T*&gt;(this)-&gt;shared_from_this());</span>
<span id="L511"><span class="lineNum"> 511</span> : }</span>
<span id="L512"><span class="lineNum"> 512</span> : return nullptr;</span>
<span id="L513"><span class="lineNum"> 513</span> : }</span>
<span id="L514"><span class="lineNum"> 514</span> : template &lt;typename T, std::enable_if_t&lt;detail::IsSingletonType&lt;T&gt;::value, bool&gt; = true&gt;</span>
<span id="L515"><span class="lineNum"> 515</span> : typename detail::CastConstReturnType&lt;T&gt;::type cast() const {</span>
<span id="L516"><span class="lineNum"> 516</span> : if (T::Kind == kind()) {</span>
<span id="L517"><span class="lineNum"> 517</span> : TORCH_INTERNAL_ASSERT_DEBUG_ONLY(this == T::get().get());</span>
<span id="L518"><span class="lineNum"> 518</span> : return typename detail::CastConstReturnType&lt;T&gt;::type(static_cast&lt;const T*&gt;(this));</span>
<span id="L519"><span class="lineNum"> 519</span> : }</span>
<span id="L520"><span class="lineNum"> 520</span> : return nullptr;</span>
<span id="L521"><span class="lineNum"> 521</span> : }</span>
<span id="L522"><span class="lineNum"> 522</span> : template &lt;typename T&gt;</span>
<span id="L523"><span class="lineNum"> 523</span> : T* castRaw() {</span>
<span id="L524"><span class="lineNum"> 524</span> : if (T::Kind == kind()) {</span>
<span id="L525"><span class="lineNum"> 525</span> : return static_cast&lt;T*&gt;(this);</span>
<span id="L526"><span class="lineNum"> 526</span> : }</span>
<span id="L527"><span class="lineNum"> 527</span> : return nullptr;</span>
<span id="L528"><span class="lineNum"> 528</span> : }</span>
<span id="L529"><span class="lineNum"> 529</span> : template &lt;typename T&gt;</span>
<span id="L530"><span class="lineNum"> 530</span> : const T* castRaw() const {</span>
<span id="L531"><span class="lineNum"> 531</span> : if (T::Kind == kind()) {</span>
<span id="L532"><span class="lineNum"> 532</span> : return static_cast&lt;const T*&gt;(this);</span>
<span id="L533"><span class="lineNum"> 533</span> : }</span>
<span id="L534"><span class="lineNum"> 534</span> : return nullptr;</span>
<span id="L535"><span class="lineNum"> 535</span> : }</span>
<span id="L536"><span class="lineNum"> 536</span> : template &lt;typename T&gt;</span>
<span id="L537"><span class="lineNum"> 537</span> : auto expect() {</span>
<span id="L538"><span class="lineNum"> 538</span> : auto r = cast&lt;T&gt;();</span>
<span id="L539"><span class="lineNum"> 539</span> : AT_ASSERT(r);</span>
<span id="L540"><span class="lineNum"> 540</span> : return r;</span>
<span id="L541"><span class="lineNum"> 541</span> : }</span>
<span id="L542"><span class="lineNum"> 542</span> : template &lt;typename T&gt;</span>
<span id="L543"><span class="lineNum"> 543</span> : auto expect() const {</span>
<span id="L544"><span class="lineNum"> 544</span> : auto r = cast&lt;const T&gt;();</span>
<span id="L545"><span class="lineNum"> 545</span> : AT_ASSERT(r);</span>
<span id="L546"><span class="lineNum"> 546</span> : return r;</span>
<span id="L547"><span class="lineNum"> 547</span> : }</span>
<span id="L548"><span class="lineNum"> 548</span> : template &lt;typename T&gt;</span>
<span id="L549"><span class="lineNum"> 549</span> : T&amp; expectRef() {</span>
<span id="L550"><span class="lineNum"> 550</span> : auto* r = castRaw&lt;T&gt;();</span>
<span id="L551"><span class="lineNum"> 551</span> : AT_ASSERT(r);</span>
<span id="L552"><span class="lineNum"> 552</span> : return *r;</span>
<span id="L553"><span class="lineNum"> 553</span> : }</span>
<span id="L554"><span class="lineNum"> 554</span> : template &lt;typename T&gt;</span>
<span id="L555"><span class="lineNum"> 555</span> : const T&amp; expectRef() const {</span>
<span id="L556"><span class="lineNum"> 556</span> : auto* r = castRaw&lt;const T&gt;();</span>
<span id="L557"><span class="lineNum"> 557</span> : AT_ASSERT(r);</span>
<span id="L558"><span class="lineNum"> 558</span> : return *r;</span>
<span id="L559"><span class="lineNum"> 559</span> : }</span>
<span id="L560"><span class="lineNum"> 560</span> : virtual ~Type() = default;</span>
<span id="L561"><span class="lineNum"> 561</span> : virtual bool hasFreeVariables() const {</span>
<span id="L562"><span class="lineNum"> 562</span> : return false;</span>
<span id="L563"><span class="lineNum"> 563</span> : }</span>
<span id="L564"><span class="lineNum"> 564</span> : // list of types this type contains, e.g. for a List then element type of a</span>
<span id="L565"><span class="lineNum"> 565</span> : // list for a tuple, the types of the tuple elements</span>
<span id="L566"><span class="lineNum"> 566</span> : virtual at::ArrayRef&lt;TypePtr&gt; containedTypes() const {</span>
<span id="L567"><span class="lineNum"> 567</span> : return {};</span>
<span id="L568"><span class="lineNum"> 568</span> : }</span>
<span id="L569"><span class="lineNum"> 569</span> : virtual TypePtr containedType(size_t i) const {</span>
<span id="L570"><span class="lineNum"> 570</span> : return containedTypes().at(i);</span>
<span id="L571"><span class="lineNum"> 571</span> : }</span>
<span id="L572"><span class="lineNum"> 572</span> : virtual size_t containedTypeSize() const {</span>
<span id="L573"><span class="lineNum"> 573</span> : return containedTypes().size();</span>
<span id="L574"><span class="lineNum"> 574</span> : }</span>
<span id="L575"><span class="lineNum"> 575</span> : // create a new version of this type, replacing its contained types with</span>
<span id="L576"><span class="lineNum"> 576</span> : // contained_types</span>
<span id="L577"><span class="lineNum"> 577</span> : TypePtr withContained(std::vector&lt;TypePtr&gt; contained_types);</span>
<span id="L578"><span class="lineNum"> 578</span> : // per-type constructor, you only need to override this if the</span>
<span id="L579"><span class="lineNum"> 579</span> : // containedTypes() is not empty</span>
<span id="L580"><span class="lineNum"> 580</span> : virtual TypePtr createWithContained(</span>
<span id="L581"><span class="lineNum"> 581</span> : std::vector&lt;TypePtr&gt; /*contained_types*/) const {</span>
<span id="L582"><span class="lineNum"> 582</span> : AT_ERROR(</span>
<span id="L583"><span class="lineNum"> 583</span> : &quot;type with contained types did not overload createWithContained: &quot;,</span>
<span id="L584"><span class="lineNum"> 584</span> : str());</span>
<span id="L585"><span class="lineNum"> 585</span> : }</span>
<span id="L586"><span class="lineNum"> 586</span> : </span>
<span id="L587"><span class="lineNum"> 587</span> : };</span>
<span id="L588"><span class="lineNum"> 588</span> : </span>
<span id="L589"><span class="lineNum"> 589</span> : template &lt;typename T&gt;</span>
<span id="L590"><span class="lineNum"> 590</span> : using SingletonOrSharedTypePtr = Type::SingletonOrSharedTypePtr&lt;T&gt;;</span>
<span id="L591"><span class="lineNum"> 591</span> : </span>
<span id="L592"><span class="lineNum"> 592</span> : </span>
<span id="L593"><span class="lineNum"> 593</span> : template &lt;typename T, typename U&gt;</span>
<span id="L594"><span class="lineNum"> 594</span> : bool operator==(const SingletonOrSharedTypePtr&lt;T&gt;&amp; x, const SingletonOrSharedTypePtr&lt;U&gt;&amp; y) {</span>
<span id="L595"><span class="lineNum"> 595</span> : return (void*)x.get() == (void*)y.get();</span>
<span id="L596"><span class="lineNum"> 596</span> : }</span>
<span id="L597"><span class="lineNum"> 597</span> : </span>
<span id="L598"><span class="lineNum"> 598</span> : template &lt;typename T, typename U&gt;</span>
<span id="L599"><span class="lineNum"> 599</span> : bool operator==(const SingletonOrSharedTypePtr&lt;T&gt;&amp; x, const std::shared_ptr&lt;U&gt;&amp; y) {</span>
<span id="L600"><span class="lineNum"> 600</span> : return (void*)x.get() == (void*)y.get();</span>
<span id="L601"><span class="lineNum"> 601</span> : }</span>
<span id="L602"><span class="lineNum"> 602</span> : </span>
<span id="L603"><span class="lineNum"> 603</span> : template &lt;typename T, typename U&gt;</span>
<span id="L604"><span class="lineNum"> 604</span> : bool operator==(const std::shared_ptr&lt;T&gt;&amp; x, const SingletonOrSharedTypePtr&lt;U&gt;&amp; y) {</span>
<span id="L605"><span class="lineNum"> 605</span> : return (void*)x.get() == (void*)y.get();</span>
<span id="L606"><span class="lineNum"> 606</span> : }</span>
<span id="L607"><span class="lineNum"> 607</span> : </span>
<span id="L608"><span class="lineNum"> 608</span> : template &lt;typename T, typename U&gt;</span>
<span id="L609"><span class="lineNum"> 609</span> : bool operator==(const SingletonOrSharedTypePtr&lt;T&gt;&amp; x, const SingletonTypePtr&lt;U&gt;&amp; y) {</span>
<span id="L610"><span class="lineNum"> 610</span> : return (void*)x.get() == (void*)y.get();</span>
<span id="L611"><span class="lineNum"> 611</span> : }</span>
<span id="L612"><span class="lineNum"> 612</span> : </span>
<span id="L613"><span class="lineNum"> 613</span> : template &lt;typename T, typename U&gt;</span>
<span id="L614"><span class="lineNum"> 614</span> : bool operator==(const SingletonTypePtr&lt;T&gt;&amp; x, const SingletonOrSharedTypePtr&lt;U&gt;&amp; y) {</span>
<span id="L615"><span class="lineNum"> 615</span> : return (void*)x.get() == (void*)y.get();</span>
<span id="L616"><span class="lineNum"> 616</span> : }</span>
<span id="L617"><span class="lineNum"> 617</span> : </span>
<span id="L618"><span class="lineNum"> 618</span> : template &lt;typename T, typename U&gt;</span>
<span id="L619"><span class="lineNum"> 619</span> : bool operator!=(const SingletonOrSharedTypePtr&lt;T&gt;&amp; x, const SingletonOrSharedTypePtr&lt;U&gt;&amp; y) {</span>
<span id="L620"><span class="lineNum"> 620</span> : return !(x == y);</span>
<span id="L621"><span class="lineNum"> 621</span> : }</span>
<span id="L622"><span class="lineNum"> 622</span> : </span>
<span id="L623"><span class="lineNum"> 623</span> : template &lt;typename T, typename U&gt;</span>
<span id="L624"><span class="lineNum"> 624</span> : bool operator!=(const SingletonOrSharedTypePtr&lt;T&gt;&amp; x, const std::shared_ptr&lt;U&gt;&amp; y) {</span>
<span id="L625"><span class="lineNum"> 625</span> : return !(x == y);</span>
<span id="L626"><span class="lineNum"> 626</span> : }</span>
<span id="L627"><span class="lineNum"> 627</span> : </span>
<span id="L628"><span class="lineNum"> 628</span> : template &lt;typename T, typename U&gt;</span>
<span id="L629"><span class="lineNum"> 629</span> : bool operator!=(const std::shared_ptr&lt;T&gt;&amp; x, const SingletonOrSharedTypePtr&lt;U&gt;&amp; y) {</span>
<span id="L630"><span class="lineNum"> 630</span> : return !(x == y);</span>
<span id="L631"><span class="lineNum"> 631</span> : }</span>
<span id="L632"><span class="lineNum"> 632</span> : </span>
<span id="L633"><span class="lineNum"> 633</span> : template &lt;typename T, typename U&gt;</span>
<span id="L634"><span class="lineNum"> 634</span> : bool operator!=(const SingletonOrSharedTypePtr&lt;T&gt;&amp; x, const SingletonTypePtr&lt;U&gt;&amp; y) {</span>
<span id="L635"><span class="lineNum"> 635</span> : return !(x == y);</span>
<span id="L636"><span class="lineNum"> 636</span> : }</span>
<span id="L637"><span class="lineNum"> 637</span> : </span>
<span id="L638"><span class="lineNum"> 638</span> : template &lt;typename T, typename U&gt;</span>
<span id="L639"><span class="lineNum"> 639</span> : bool operator!=(const SingletonTypePtr&lt;T&gt;&amp; x, const SingletonOrSharedTypePtr&lt;U&gt;&amp; y) {</span>
<span id="L640"><span class="lineNum"> 640</span> : return !(x == y);</span>
<span id="L641"><span class="lineNum"> 641</span> : }</span>
<span id="L642"><span class="lineNum"> 642</span> : </span>
<span id="L643"><span class="lineNum"> 643</span> : using TypePtr = SingletonOrSharedTypePtr&lt;Type&gt;;</span>
<span id="L644"><span class="lineNum"> 644</span> : using ConstTypePtr = SingletonOrSharedTypePtr&lt;const Type&gt;;</span>
<span id="L645"><span class="lineNum"> 645</span> : </span>
<span id="L646"><span class="lineNum"> 646</span> : // Explicitly enable MaybeOwned&lt;shared_ptr&lt;T&gt;&gt;, rather than allowing</span>
<span id="L647"><span class="lineNum"> 647</span> : // MaybeOwned to be used for any type right away.</span>
<span id="L648"><span class="lineNum"> 648</span> : template &lt;typename T&gt;</span>
<span id="L649"><span class="lineNum"> 649</span> : struct MaybeOwnedTraits&lt;SingletonOrSharedTypePtr&lt;T&gt;&gt;</span>
<span id="L650"><span class="lineNum"> 650</span> : : public MaybeOwnedTraitsGenericImpl&lt;SingletonOrSharedTypePtr&lt;T&gt;&gt; {};</span>
<span id="L651"><span class="lineNum"> 651</span> : </span>
<span id="L652"><span class="lineNum"> 652</span> : // Base class for Types that are guaranteed to be owned by std::shared_ptr.</span>
<span id="L653"><span class="lineNum"> 653</span> : struct TORCH_API SharedType : public Type, public std::enable_shared_from_this&lt;SharedType&gt; {</span>
<span id="L654"><span class="lineNum"> 654</span> : using Type::Type;</span>
<span id="L655"><span class="lineNum"> 655</span> : };</span>
<span id="L656"><span class="lineNum"> 656</span> : </span>
<span id="L657"><span class="lineNum"> 657</span> : inline TypePtr Type::withContained(std::vector&lt;TypePtr&gt; contained_types) {</span>
<span id="L658"><span class="lineNum"> 658</span> : auto current_contained = containedTypes();</span>
<span id="L659"><span class="lineNum"> 659</span> : // Types with no contained_types don't need this call. Check before calling!</span>
<span id="L660"><span class="lineNum"> 660</span> : //</span>
<span id="L661"><span class="lineNum"> 661</span> : // (We can't support this efficiently because types without</span>
<span id="L662"><span class="lineNum"> 662</span> : // contained types may be singletons, in which case</span>
<span id="L663"><span class="lineNum"> 663</span> : // shared_from_this will crash; we would have to provide a virtual</span>
<span id="L664"><span class="lineNum"> 664</span> : // typeptr_from_this or isSingleton.)</span>
<span id="L665"><span class="lineNum"> 665</span> : TORCH_INTERNAL_ASSERT(!current_contained.empty() &amp;&amp; current_contained.size() == contained_types.size());</span>
<span id="L666"><span class="lineNum"> 666</span> : if (current_contained.equals(contained_types)) {</span>
<span id="L667"><span class="lineNum"> 667</span> : return std::static_pointer_cast&lt;Type&gt;(static_cast&lt;SharedType *&gt;(this)-&gt;shared_from_this());</span>
<span id="L668"><span class="lineNum"> 668</span> : }</span>
<span id="L669"><span class="lineNum"> 669</span> : return createWithContained(std::move(contained_types));</span>
<span id="L670"><span class="lineNum"> 670</span> : }</span>
<span id="L671"><span class="lineNum"> 671</span> : </span>
<span id="L672"><span class="lineNum"> 672</span> : </span>
<span id="L673"><span class="lineNum"> 673</span> : TORCH_API inline bool operator==(const Type&amp; lhs, const Type&amp; rhs) {</span>
<span id="L674"><span class="lineNum"> 674</span> : if (C10_UNLIKELY(!rhs.symmetric())) {</span>
<span id="L675"><span class="lineNum"> 675</span> : return rhs.equals(lhs);</span>
<span id="L676"><span class="lineNum"> 676</span> : }</span>
<span id="L677"><span class="lineNum"> 677</span> : return lhs.equals(rhs);</span>
<span id="L678"><span class="lineNum"> 678</span> : }</span>
<span id="L679"><span class="lineNum"> 679</span> : </span>
<span id="L680"><span class="lineNum"> 680</span> : struct NamedType;</span>
<span id="L681"><span class="lineNum"> 681</span> : using NamedTypePtr = std::shared_ptr&lt;NamedType&gt;;</span>
<span id="L682"><span class="lineNum"> 682</span> : using ConstNamedTypePtr = std::shared_ptr&lt;const NamedType&gt;;</span>
<span id="L683"><span class="lineNum"> 683</span> : </span>
<span id="L684"><span class="lineNum"> 684</span> : struct TORCH_API NamedType : public SharedType {</span>
<span id="L685"><span class="lineNum"> 685</span> : NamedType(TypeKind tk, c10::optional&lt;QualifiedName&gt; name)</span>
<span id="L686"><span class="lineNum"> 686</span> : : SharedType(tk), name_(std::move(name)) {</span>
<span id="L687"><span class="lineNum"> 687</span> : TORCH_INTERNAL_ASSERT(</span>
<span id="L688"><span class="lineNum"> 688</span> : tk == TypeKind::TupleType || tk == TypeKind::FunctionType ||</span>
<span id="L689"><span class="lineNum"> 689</span> : tk == TypeKind::ClassType || tk == TypeKind::InterfaceType ||</span>
<span id="L690"><span class="lineNum"> 690</span> : tk == TypeKind::EnumType,</span>
<span id="L691"><span class="lineNum"> 691</span> : &quot;If you add a new kind of NamedType, &quot;,</span>
<span id="L692"><span class="lineNum"> 692</span> : &quot;please update the cast&lt;NamedType&gt; specialization and this assert&quot;);</span>
<span id="L693"><span class="lineNum"> 693</span> : }</span>
<span id="L694"><span class="lineNum"> 694</span> : </span>
<span id="L695"><span class="lineNum"> 695</span> : // Fully qualified name of type</span>
<span id="L696"><span class="lineNum"> 696</span> : // Looks like: &quot;foo.bar.Baz&quot;.</span>
<span id="L697"><span class="lineNum"> 697</span> : const c10::optional&lt;QualifiedName&gt;&amp; name() const {</span>
<span id="L698"><span class="lineNum"> 698</span> : return name_;</span>
<span id="L699"><span class="lineNum"> 699</span> : }</span>
<span id="L700"><span class="lineNum"> 700</span> : </span>
<span id="L701"><span class="lineNum"> 701</span> : private:</span>
<span id="L702"><span class="lineNum"> 702</span> : c10::optional&lt;QualifiedName&gt; name_;</span>
<span id="L703"><span class="lineNum"> 703</span> : };</span>
<span id="L704"><span class="lineNum"> 704</span> : </span>
<span id="L705"><span class="lineNum"> 705</span> : } // namespace c10</span>
<span id="L706"><span class="lineNum"> 706</span> : </span>
<span id="L707"><span class="lineNum"> 707</span> : namespace std {</span>
<span id="L708"><span class="lineNum"> 708</span> : template &lt;typename T&gt;</span>
<span id="L709"><span class="lineNum"> 709</span> : struct hash&lt;c10::SingletonOrSharedTypePtr&lt;T&gt;&gt; {</span>
<span id="L710"><span class="lineNum"> 710</span> : size_t operator()(const c10::SingletonOrSharedTypePtr&lt;T&gt;&amp; x) const {</span>
<span id="L711"><span class="lineNum"> 711</span> : return std::hash&lt;T*&gt;()(x.get());</span>
<span id="L712"><span class="lineNum"> 712</span> : }</span>
<span id="L713"><span class="lineNum"> 713</span> : };</span>
<span id="L714"><span class="lineNum"> 714</span> : } // namespace std</span>
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="https://github.com//linux-test-project/lcov" target="_parent">LCOV version 2.0-1</a></td></tr>
</table>
<br>
</body>
</html>