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,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/c10/core/Device.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/c10/core</a> - Device.h<span style="font-size: 80%;"> (<a href="Device.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">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="Device.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="Device.h.gcov.html#L169">_ZN3c106Device8validateEv</a></td>
<td class="coverFnHi">91850448</td>
</tr>
<tr>
<td class="coverFn"><a href="Device.h.gcov.html#L33">_ZN3c106DeviceC2ENS_10DeviceTypeEa</a></td>
<td class="coverFnHi">91850448</td>
</tr>
<tr>
<td class="coverFn"><a href="Device.h.gcov.html#L153">_ZNK3c106Device6is_cpuEv</a></td>
<td class="coverFnHi">91850448</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/c10/core/Device.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/c10/core</a> - Device.h<span style="font-size: 80%;"> (<a href="Device.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">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="Device.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="Device.h.gcov.html#L169">_ZN3c106Device8validateEv</a></td>
<td class="coverFnHi">91850448</td>
</tr>
<tr>
<td class="coverFn"><a href="Device.h.gcov.html#L33">_ZN3c106DeviceC2ENS_10DeviceTypeEa</a></td>
<td class="coverFnHi">91850448</td>
</tr>
<tr>
<td class="coverFn"><a href="Device.h.gcov.html#L153">_ZNK3c106Device6is_cpuEv</a></td>
<td class="coverFnHi">91850448</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,291 @@
<!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/c10/core/Device.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/c10/core</a> - Device.h<span style="font-size: 80%;"> (source / <a href="Device.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">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;c10/core/DeviceType.h&gt;</span>
<span id="L4"><span class="lineNum"> 4</span> : #include &lt;c10/macros/Export.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;cstddef&gt;</span>
<span id="L8"><span class="lineNum"> 8</span> : #include &lt;functional&gt;</span>
<span id="L9"><span class="lineNum"> 9</span> : #include &lt;iosfwd&gt;</span>
<span id="L10"><span class="lineNum"> 10</span> : #include &lt;string&gt;</span>
<span id="L11"><span class="lineNum"> 11</span> : </span>
<span id="L12"><span class="lineNum"> 12</span> : namespace c10 {</span>
<span id="L13"><span class="lineNum"> 13</span> : </span>
<span id="L14"><span class="lineNum"> 14</span> : /// An index representing a specific device; e.g., the 1 in GPU 1.</span>
<span id="L15"><span class="lineNum"> 15</span> : /// A DeviceIndex is not independently meaningful without knowing</span>
<span id="L16"><span class="lineNum"> 16</span> : /// the DeviceType it is associated; try to use Device rather than</span>
<span id="L17"><span class="lineNum"> 17</span> : /// DeviceIndex directly.</span>
<span id="L18"><span class="lineNum"> 18</span> : using DeviceIndex = int8_t;</span>
<span id="L19"><span class="lineNum"> 19</span> : </span>
<span id="L20"><span class="lineNum"> 20</span> : /// Represents a compute device on which a tensor is located. A device is</span>
<span id="L21"><span class="lineNum"> 21</span> : /// uniquely identified by a type, which specifies the type of machine it is</span>
<span id="L22"><span class="lineNum"> 22</span> : /// (e.g. CPU or CUDA GPU), and a device index or ordinal, which identifies the</span>
<span id="L23"><span class="lineNum"> 23</span> : /// specific compute device when there is more than one of a certain type. The</span>
<span id="L24"><span class="lineNum"> 24</span> : /// device index is optional, and in its defaulted state represents (abstractly)</span>
<span id="L25"><span class="lineNum"> 25</span> : /// &quot;the current device&quot;. Further, there are two constraints on the value of the</span>
<span id="L26"><span class="lineNum"> 26</span> : /// device index, if one is explicitly stored:</span>
<span id="L27"><span class="lineNum"> 27</span> : /// 1. A negative index represents the current device, a non-negative index</span>
<span id="L28"><span class="lineNum"> 28</span> : /// represents a specific, concrete device,</span>
<span id="L29"><span class="lineNum"> 29</span> : /// 2. When the device type is CPU, the device index must be zero.</span>
<span id="L30"><span class="lineNum"> 30</span> : struct C10_API Device final {</span>
<span id="L31"><span class="lineNum"> 31</span> : using Type = DeviceType;</span>
<span id="L32"><span class="lineNum"> 32</span> : </span>
<span id="L33"><span class="lineNum"> 33</span> : /// Constructs a new `Device` from a `DeviceType` and an optional device</span>
<span id="L34"><span class="lineNum"> 34</span> : /// index.</span>
<span id="L35"><span class="lineNum"> 35</span> <span class="tlaGNC tlaBgGNC"> 91850448 : /* implicit */ Device(DeviceType type, DeviceIndex index = -1)</span></span>
<span id="L36"><span class="lineNum"> 36</span> <span class="tlaGNC"> 91850448 : : type_(type), index_(index) {</span></span>
<span id="L37"><span class="lineNum"> 37</span> <span class="tlaGNC"> 91850448 : validate();</span></span>
<span id="L38"><span class="lineNum"> 38</span> <span class="tlaGNC"> 91850448 : }</span></span>
<span id="L39"><span class="lineNum"> 39</span> : </span>
<span id="L40"><span class="lineNum"> 40</span> : /// Constructs a `Device` from a string description, for convenience.</span>
<span id="L41"><span class="lineNum"> 41</span> : /// The string supplied must follow the following schema:</span>
<span id="L42"><span class="lineNum"> 42</span> : /// `(cpu|cuda)[:&lt;device-index&gt;]`</span>
<span id="L43"><span class="lineNum"> 43</span> : /// where `cpu` or `cuda` specifies the device type, and</span>
<span id="L44"><span class="lineNum"> 44</span> : /// `:&lt;device-index&gt;` optionally specifies a device index.</span>
<span id="L45"><span class="lineNum"> 45</span> : /* implicit */ Device(const std::string&amp; device_string);</span>
<span id="L46"><span class="lineNum"> 46</span> : </span>
<span id="L47"><span class="lineNum"> 47</span> : /// Returns true if the type and index of this `Device` matches that of</span>
<span id="L48"><span class="lineNum"> 48</span> : /// `other`.</span>
<span id="L49"><span class="lineNum"> 49</span> : bool operator==(const Device&amp; other) const noexcept {</span>
<span id="L50"><span class="lineNum"> 50</span> : return this-&gt;type_ == other.type_ &amp;&amp; this-&gt;index_ == other.index_;</span>
<span id="L51"><span class="lineNum"> 51</span> : }</span>
<span id="L52"><span class="lineNum"> 52</span> : </span>
<span id="L53"><span class="lineNum"> 53</span> : /// Returns true if the type or index of this `Device` differs from that of</span>
<span id="L54"><span class="lineNum"> 54</span> : /// `other`.</span>
<span id="L55"><span class="lineNum"> 55</span> : bool operator!=(const Device&amp; other) const noexcept {</span>
<span id="L56"><span class="lineNum"> 56</span> : return !(*this == other);</span>
<span id="L57"><span class="lineNum"> 57</span> : }</span>
<span id="L58"><span class="lineNum"> 58</span> : </span>
<span id="L59"><span class="lineNum"> 59</span> : /// Sets the device index.</span>
<span id="L60"><span class="lineNum"> 60</span> : void set_index(DeviceIndex index) {</span>
<span id="L61"><span class="lineNum"> 61</span> : index_ = index;</span>
<span id="L62"><span class="lineNum"> 62</span> : }</span>
<span id="L63"><span class="lineNum"> 63</span> : </span>
<span id="L64"><span class="lineNum"> 64</span> : /// Returns the type of device this is.</span>
<span id="L65"><span class="lineNum"> 65</span> : DeviceType type() const noexcept {</span>
<span id="L66"><span class="lineNum"> 66</span> : return type_;</span>
<span id="L67"><span class="lineNum"> 67</span> : }</span>
<span id="L68"><span class="lineNum"> 68</span> : </span>
<span id="L69"><span class="lineNum"> 69</span> : /// Returns the optional index.</span>
<span id="L70"><span class="lineNum"> 70</span> : DeviceIndex index() const noexcept {</span>
<span id="L71"><span class="lineNum"> 71</span> : return index_;</span>
<span id="L72"><span class="lineNum"> 72</span> : }</span>
<span id="L73"><span class="lineNum"> 73</span> : </span>
<span id="L74"><span class="lineNum"> 74</span> : /// Returns true if the device has a non-default index.</span>
<span id="L75"><span class="lineNum"> 75</span> : bool has_index() const noexcept {</span>
<span id="L76"><span class="lineNum"> 76</span> : return index_ != -1;</span>
<span id="L77"><span class="lineNum"> 77</span> : }</span>
<span id="L78"><span class="lineNum"> 78</span> : </span>
<span id="L79"><span class="lineNum"> 79</span> : /// Return true if the device is of CUDA type.</span>
<span id="L80"><span class="lineNum"> 80</span> : bool is_cuda() const noexcept {</span>
<span id="L81"><span class="lineNum"> 81</span> : return type_ == DeviceType::CUDA;</span>
<span id="L82"><span class="lineNum"> 82</span> : }</span>
<span id="L83"><span class="lineNum"> 83</span> : </span>
<span id="L84"><span class="lineNum"> 84</span> : /// Return true if the device is of PrivateUse1 type.</span>
<span id="L85"><span class="lineNum"> 85</span> : bool is_privateuseone() const noexcept {</span>
<span id="L86"><span class="lineNum"> 86</span> : return type_ == DeviceType::PrivateUse1;</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> : /// Return true if the device is of MPS type.</span>
<span id="L90"><span class="lineNum"> 90</span> : bool is_mps() const noexcept {</span>
<span id="L91"><span class="lineNum"> 91</span> : return type_ == DeviceType::MPS;</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> : /// Return true if the device is of HIP type.</span>
<span id="L95"><span class="lineNum"> 95</span> : bool is_hip() const noexcept {</span>
<span id="L96"><span class="lineNum"> 96</span> : return type_ == DeviceType::HIP;</span>
<span id="L97"><span class="lineNum"> 97</span> : }</span>
<span id="L98"><span class="lineNum"> 98</span> : </span>
<span id="L99"><span class="lineNum"> 99</span> : /// Return true if the device is of VE type.</span>
<span id="L100"><span class="lineNum"> 100</span> : bool is_ve() const noexcept {</span>
<span id="L101"><span class="lineNum"> 101</span> : return type_ == DeviceType::VE;</span>
<span id="L102"><span class="lineNum"> 102</span> : }</span>
<span id="L103"><span class="lineNum"> 103</span> : </span>
<span id="L104"><span class="lineNum"> 104</span> : /// Return true if the device is of XPU type.</span>
<span id="L105"><span class="lineNum"> 105</span> : bool is_xpu() const noexcept {</span>
<span id="L106"><span class="lineNum"> 106</span> : return type_ == DeviceType::XPU;</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> : /// Return true if the device is of IPU type.</span>
<span id="L110"><span class="lineNum"> 110</span> : bool is_ipu() const noexcept {</span>
<span id="L111"><span class="lineNum"> 111</span> : return type_ == DeviceType::IPU;</span>
<span id="L112"><span class="lineNum"> 112</span> : }</span>
<span id="L113"><span class="lineNum"> 113</span> : </span>
<span id="L114"><span class="lineNum"> 114</span> : /// Return true if the device is of XLA type.</span>
<span id="L115"><span class="lineNum"> 115</span> : bool is_xla() const noexcept {</span>
<span id="L116"><span class="lineNum"> 116</span> : return type_ == DeviceType::XLA;</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> : /// Return true if the device is of MTIA type.</span>
<span id="L120"><span class="lineNum"> 120</span> : bool is_mtia() const noexcept {</span>
<span id="L121"><span class="lineNum"> 121</span> : return type_ == DeviceType::MTIA;</span>
<span id="L122"><span class="lineNum"> 122</span> : }</span>
<span id="L123"><span class="lineNum"> 123</span> : </span>
<span id="L124"><span class="lineNum"> 124</span> : /// Return true if the device is of HPU type.</span>
<span id="L125"><span class="lineNum"> 125</span> : bool is_hpu() const noexcept {</span>
<span id="L126"><span class="lineNum"> 126</span> : return type_ == DeviceType::HPU;</span>
<span id="L127"><span class="lineNum"> 127</span> : }</span>
<span id="L128"><span class="lineNum"> 128</span> : </span>
<span id="L129"><span class="lineNum"> 129</span> : /// Return true if the device is of Lazy type.</span>
<span id="L130"><span class="lineNum"> 130</span> : bool is_lazy() const noexcept {</span>
<span id="L131"><span class="lineNum"> 131</span> : return type_ == DeviceType::Lazy;</span>
<span id="L132"><span class="lineNum"> 132</span> : }</span>
<span id="L133"><span class="lineNum"> 133</span> : </span>
<span id="L134"><span class="lineNum"> 134</span> : /// Return true if the device is of Vulkan type.</span>
<span id="L135"><span class="lineNum"> 135</span> : bool is_vulkan() const noexcept {</span>
<span id="L136"><span class="lineNum"> 136</span> : return type_ == DeviceType::Vulkan;</span>
<span id="L137"><span class="lineNum"> 137</span> : }</span>
<span id="L138"><span class="lineNum"> 138</span> : </span>
<span id="L139"><span class="lineNum"> 139</span> : /// Return true if the device is of Metal type.</span>
<span id="L140"><span class="lineNum"> 140</span> : bool is_metal() const noexcept {</span>
<span id="L141"><span class="lineNum"> 141</span> : return type_ == DeviceType::Metal;</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> : /// Return true if the device is of ORT type.</span>
<span id="L145"><span class="lineNum"> 145</span> : bool is_ort() const noexcept {</span>
<span id="L146"><span class="lineNum"> 146</span> : return type_ == DeviceType::ORT;</span>
<span id="L147"><span class="lineNum"> 147</span> : }</span>
<span id="L148"><span class="lineNum"> 148</span> : </span>
<span id="L149"><span class="lineNum"> 149</span> : /// Return true if the device is of META type.</span>
<span id="L150"><span class="lineNum"> 150</span> : bool is_meta() const noexcept {</span>
<span id="L151"><span class="lineNum"> 151</span> : return type_ == DeviceType::Meta;</span>
<span id="L152"><span class="lineNum"> 152</span> : }</span>
<span id="L153"><span class="lineNum"> 153</span> : </span>
<span id="L154"><span class="lineNum"> 154</span> : /// Return true if the device is of CPU type.</span>
<span id="L155"><span class="lineNum"> 155</span> <span class="tlaGNC"> 91850448 : bool is_cpu() const noexcept {</span></span>
<span id="L156"><span class="lineNum"> 156</span> <span class="tlaGNC"> 91850448 : return type_ == DeviceType::CPU;</span></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> : /// Return true if the device supports arbitrary strides.</span>
<span id="L160"><span class="lineNum"> 160</span> : bool supports_as_strided() const noexcept {</span>
<span id="L161"><span class="lineNum"> 161</span> : return type_ != DeviceType::IPU &amp;&amp; type_ != DeviceType::XLA &amp;&amp;</span>
<span id="L162"><span class="lineNum"> 162</span> : type_ != DeviceType::Lazy &amp;&amp; type_ != DeviceType::MTIA;</span>
<span id="L163"><span class="lineNum"> 163</span> : }</span>
<span id="L164"><span class="lineNum"> 164</span> : </span>
<span id="L165"><span class="lineNum"> 165</span> : /// Same string as returned from operator&lt;&lt;.</span>
<span id="L166"><span class="lineNum"> 166</span> : std::string str() const;</span>
<span id="L167"><span class="lineNum"> 167</span> : </span>
<span id="L168"><span class="lineNum"> 168</span> : private:</span>
<span id="L169"><span class="lineNum"> 169</span> : DeviceType type_;</span>
<span id="L170"><span class="lineNum"> 170</span> : DeviceIndex index_ = -1;</span>
<span id="L171"><span class="lineNum"> 171</span> <span class="tlaGNC"> 91850448 : void validate() {</span></span>
<span id="L172"><span class="lineNum"> 172</span> : // Removing these checks in release builds noticeably improves</span>
<span id="L173"><span class="lineNum"> 173</span> : // performance in micro-benchmarks.</span>
<span id="L174"><span class="lineNum"> 174</span> : // This is safe to do, because backends that use the DeviceIndex</span>
<span id="L175"><span class="lineNum"> 175</span> : // have a later check when we actually try to switch to that device.</span>
<span id="L176"><span class="lineNum"> 176</span> <span class="tlaGNC"> 91850448 : TORCH_INTERNAL_ASSERT_DEBUG_ONLY(</span></span>
<span id="L177"><span class="lineNum"> 177</span> : index_ &gt;= -1,</span>
<span id="L178"><span class="lineNum"> 178</span> : &quot;Device index must be -1 or non-negative, got &quot;,</span>
<span id="L179"><span class="lineNum"> 179</span> : static_cast&lt;int&gt;(index_));</span>
<span id="L180"><span class="lineNum"> 180</span> <span class="tlaGNC"> 91850448 : TORCH_INTERNAL_ASSERT_DEBUG_ONLY(</span></span>
<span id="L181"><span class="lineNum"> 181</span> : !is_cpu() || index_ &lt;= 0,</span>
<span id="L182"><span class="lineNum"> 182</span> : &quot;CPU device index must be -1 or zero, got &quot;,</span>
<span id="L183"><span class="lineNum"> 183</span> : static_cast&lt;int&gt;(index_));</span>
<span id="L184"><span class="lineNum"> 184</span> <span class="tlaGNC"> 91850448 : }</span></span>
<span id="L185"><span class="lineNum"> 185</span> : };</span>
<span id="L186"><span class="lineNum"> 186</span> : </span>
<span id="L187"><span class="lineNum"> 187</span> : C10_API std::ostream&amp; operator&lt;&lt;(std::ostream&amp; stream, const Device&amp; device);</span>
<span id="L188"><span class="lineNum"> 188</span> : </span>
<span id="L189"><span class="lineNum"> 189</span> : } // namespace c10</span>
<span id="L190"><span class="lineNum"> 190</span> : </span>
<span id="L191"><span class="lineNum"> 191</span> : namespace std {</span>
<span id="L192"><span class="lineNum"> 192</span> : template &lt;&gt;</span>
<span id="L193"><span class="lineNum"> 193</span> : struct hash&lt;c10::Device&gt; {</span>
<span id="L194"><span class="lineNum"> 194</span> : size_t operator()(c10::Device d) const noexcept {</span>
<span id="L195"><span class="lineNum"> 195</span> : // Are you here because this static assert failed? Make sure you ensure</span>
<span id="L196"><span class="lineNum"> 196</span> : // that the bitmasking code below is updated accordingly!</span>
<span id="L197"><span class="lineNum"> 197</span> : static_assert(sizeof(c10::DeviceType) == 1, &quot;DeviceType is not 8-bit&quot;);</span>
<span id="L198"><span class="lineNum"> 198</span> : static_assert(sizeof(c10::DeviceIndex) == 1, &quot;DeviceIndex is not 8-bit&quot;);</span>
<span id="L199"><span class="lineNum"> 199</span> : // Note [Hazard when concatenating signed integers]</span>
<span id="L200"><span class="lineNum"> 200</span> : // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</span>
<span id="L201"><span class="lineNum"> 201</span> : // We must first convert to a same-sized unsigned type, before promoting to</span>
<span id="L202"><span class="lineNum"> 202</span> : // the result type, to prevent sign extension when any of the values is -1.</span>
<span id="L203"><span class="lineNum"> 203</span> : // If sign extension occurs, you'll clobber all of the values in the MSB</span>
<span id="L204"><span class="lineNum"> 204</span> : // half of the resulting integer.</span>
<span id="L205"><span class="lineNum"> 205</span> : //</span>
<span id="L206"><span class="lineNum"> 206</span> : // Technically, by C/C++ integer promotion rules, we only need one of the</span>
<span id="L207"><span class="lineNum"> 207</span> : // uint32_t casts to the result type, but we put in both for explicitness's</span>
<span id="L208"><span class="lineNum"> 208</span> : // sake.</span>
<span id="L209"><span class="lineNum"> 209</span> : uint32_t bits = static_cast&lt;uint32_t&gt;(static_cast&lt;uint8_t&gt;(d.type()))</span>
<span id="L210"><span class="lineNum"> 210</span> : &lt;&lt; 16 |</span>
<span id="L211"><span class="lineNum"> 211</span> : static_cast&lt;uint32_t&gt;(static_cast&lt;uint8_t&gt;(d.index()));</span>
<span id="L212"><span class="lineNum"> 212</span> : return std::hash&lt;uint32_t&gt;{}(bits);</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> : } // 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>

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/c10/core/GradMode.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/c10/core</a> - GradMode.h<span style="font-size: 80%;"> (<a href="GradMode.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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">7</td>
<td class="headerCovTableEntry">0</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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">3</td>
<td class="headerCovTableEntry">0</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="GradMode.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="GradMode.h.gcov.html#L26">_ZN3c1011NoGradGuardC2Ev</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="GradMode.h.gcov.html#L14">_ZN3c1012AutoGradModeC2Eb</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="GradMode.h.gcov.html#L17">_ZN3c1012AutoGradModeD2Ev</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>

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/c10/core/GradMode.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/c10/core</a> - GradMode.h<span style="font-size: 80%;"> (<a href="GradMode.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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">7</td>
<td class="headerCovTableEntry">0</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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">3</td>
<td class="headerCovTableEntry">0</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="GradMode.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="GradMode.h.gcov.html#L26">_ZN3c1011NoGradGuardC2Ev</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="GradMode.h.gcov.html#L14">_ZN3c1012AutoGradModeC2Eb</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="GradMode.h.gcov.html#L17">_ZN3c1012AutoGradModeD2Ev</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>

View File

@@ -0,0 +1,120 @@
<!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/c10/core/GradMode.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/c10/core</a> - GradMode.h<span style="font-size: 80%;"> (source / <a href="GradMode.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="headerCovTableEntryLo">0.0&nbsp;%</td>
<td class="headerCovTableEntry">7</td>
<td class="headerCovTableEntry">0</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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">3</td>
<td class="headerCovTableEntry">0</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/core/AutogradState.h&gt;</span>
<span id="L4"><span class="lineNum"> 4</span> : #include &lt;c10/macros/Export.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> : struct C10_API GradMode {</span>
<span id="L9"><span class="lineNum"> 9</span> : static bool is_enabled();</span>
<span id="L10"><span class="lineNum"> 10</span> : static void set_enabled(bool enabled);</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> : // A RAII, thread local (!) guard that enables or disables grad mode upon</span>
<span id="L14"><span class="lineNum"> 14</span> : // construction, and sets it back to the original value upon destruction.</span>
<span id="L15"><span class="lineNum"> 15</span> : struct C10_API AutoGradMode {</span>
<span id="L16"><span class="lineNum"> 16</span> <span class="tlaUNC tlaBgUNC"> 0 : AutoGradMode(bool enabled) : prev_mode(GradMode::is_enabled()) {</span></span>
<span id="L17"><span class="lineNum"> 17</span> <span class="tlaUNC"> 0 : GradMode::set_enabled(enabled);</span></span>
<span id="L18"><span class="lineNum"> 18</span> <span class="tlaUNC"> 0 : }</span></span>
<span id="L19"><span class="lineNum"> 19</span> <span class="tlaUNC"> 0 : ~AutoGradMode() {</span></span>
<span id="L20"><span class="lineNum"> 20</span> <span class="tlaUNC"> 0 : GradMode::set_enabled(prev_mode);</span></span>
<span id="L21"><span class="lineNum"> 21</span> <span class="tlaUNC"> 0 : }</span></span>
<span id="L22"><span class="lineNum"> 22</span> : bool prev_mode;</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> : // A RAII, thread local (!) guard that stops future operations from building</span>
<span id="L26"><span class="lineNum"> 26</span> : // gradients.</span>
<span id="L27"><span class="lineNum"> 27</span> : struct C10_API NoGradGuard : public AutoGradMode {</span>
<span id="L28"><span class="lineNum"> 28</span> <span class="tlaUNC"> 0 : NoGradGuard() : AutoGradMode(/*enabled=*/false) {}</span></span>
<span id="L29"><span class="lineNum"> 29</span> : };</span>
<span id="L30"><span class="lineNum"> 30</span> : </span>
<span id="L31"><span class="lineNum"> 31</span> : // A RAII, thread local (!) guard that enables or disables forward grad mode</span>
<span id="L32"><span class="lineNum"> 32</span> : // upon construction, and sets it back to the original value upon destruction.</span>
<span id="L33"><span class="lineNum"> 33</span> : struct C10_API AutoFwGradMode {</span>
<span id="L34"><span class="lineNum"> 34</span> : AutoFwGradMode(bool enabled)</span>
<span id="L35"><span class="lineNum"> 35</span> : : prev_mode(AutogradState::get_tls_state().get_fw_grad_mode()) {</span>
<span id="L36"><span class="lineNum"> 36</span> : AutogradState::get_tls_state().set_fw_grad_mode(enabled);</span>
<span id="L37"><span class="lineNum"> 37</span> : }</span>
<span id="L38"><span class="lineNum"> 38</span> : ~AutoFwGradMode() {</span>
<span id="L39"><span class="lineNum"> 39</span> : AutogradState::get_tls_state().set_fw_grad_mode(prev_mode);</span>
<span id="L40"><span class="lineNum"> 40</span> : }</span>
<span id="L41"><span class="lineNum"> 41</span> : bool prev_mode;</span>
<span id="L42"><span class="lineNum"> 42</span> : };</span>
<span id="L43"><span class="lineNum"> 43</span> : </span>
<span id="L44"><span class="lineNum"> 44</span> : } // 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,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/c10/core/Scalar.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/c10/core</a> - Scalar.h<span style="font-size: 80%;"> (<a href="Scalar.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">82.6&nbsp;%</td>
<td class="headerCovTableEntry">23</td>
<td class="headerCovTableEntry">19</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">93.3&nbsp;%</td>
<td class="headerCovTableEntry">15</td>
<td class="headerCovTableEntry">14</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="Scalar.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="Scalar.h.gcov.html#L160">_ZNK3c106Scalar9isBooleanEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="Scalar.h.gcov.html#L152">_ZNK3c106Scalar10isIntegralEb</a></td>
<td class="coverFnHi">7072</td>
</tr>
<tr>
<td class="coverFn"><a href="Scalar.h.gcov.html#L101">_ZNK3c106Scalar6toLongEv</a></td>
<td class="coverFnHi">7072</td>
</tr>
<tr>
<td class="coverFn"><a href="Scalar.h.gcov.html#L33">_ZN3c106ScalarC2Ev</a></td>
<td class="coverFnHi">401318</td>
</tr>
<tr>
<td class="coverFn"><a href="Scalar.h.gcov.html#L351">_ZN3c106ScalarC2IdLPb0EEET_b</a></td>
<td class="coverFnHi">5160312</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="Scalar.h.gcov.html#L351">_ZN3c106ScalarC2IfLPb0EEET_b</a></td>
<td class="coverFnAliasHi">366</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="Scalar.h.gcov.html#L351">_ZN3c106ScalarC2IdLPb0EEET_b</a></td>
<td class="coverFnAliasHi">5159946</td>
</tr>
<tr>
<td class="coverFn"><a href="Scalar.h.gcov.html#L342">_ZN3c106ScalarC2IiLPb0EEET_b</a></td>
<td class="coverFnHi">5573966</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="Scalar.h.gcov.html#L342">_ZN3c106ScalarC2IlLPb0EEET_b</a></td>
<td class="coverFnAliasHi">401318</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="Scalar.h.gcov.html#L342">_ZN3c106ScalarC2IiLPb0EEET_b</a></td>
<td class="coverFnAliasHi">5172648</td>
</tr>
<tr>
<td class="coverFn"><a href="Scalar.h.gcov.html#L334">_ZN3c106Scalar3v_tC2Ev</a></td>
<td class="coverFnHi">10734278</td>
</tr>
<tr>
<td class="coverFn"><a href="Scalar.h.gcov.html#L49">_ZN3c106ScalarC2Ed</a></td>
<td class="coverFnHi">10734278</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="Scalar.h.gcov.html#L49">_ZN3c106ScalarC2Ef</a></td>
<td class="coverFnAliasHi">366</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="Scalar.h.gcov.html#L49">_ZN3c106ScalarC2El</a></td>
<td class="coverFnAliasHi">401318</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="Scalar.h.gcov.html#L49">_ZN3c106ScalarC2Ed</a></td>
<td class="coverFnAliasHi">5159946</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="Scalar.h.gcov.html#L49">_ZN3c106ScalarC2Ei</a></td>
<td class="coverFnAliasHi">5172648</td>
</tr>
<tr>
<td class="coverFn"><a href="Scalar.h.gcov.html#L35">_ZN3c106Scalar7destroyEv</a></td>
<td class="coverFnHi">10741350</td>
</tr>
<tr>
<td class="coverFn"><a href="Scalar.h.gcov.html#L42">_ZN3c106ScalarD2Ev</a></td>
<td class="coverFnHi">10741350</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/c10/core/Scalar.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/c10/core</a> - Scalar.h<span style="font-size: 80%;"> (<a href="Scalar.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">82.6&nbsp;%</td>
<td class="headerCovTableEntry">23</td>
<td class="headerCovTableEntry">19</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">93.3&nbsp;%</td>
<td class="headerCovTableEntry">15</td>
<td class="headerCovTableEntry">14</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="Scalar.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="Scalar.h.gcov.html#L334">_ZN3c106Scalar3v_tC2Ev</a></td>
<td class="coverFnHi">10734278</td>
</tr>
<tr>
<td class="coverFn"><a href="Scalar.h.gcov.html#L35">_ZN3c106Scalar7destroyEv</a></td>
<td class="coverFnHi">10741350</td>
</tr>
<tr>
<td class="coverFn"><a href="Scalar.h.gcov.html#L49">_ZN3c106ScalarC2Ed</a></td>
<td class="coverFnHi">10734278</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="Scalar.h.gcov.html#L49">_ZN3c106ScalarC2Ed</a></td>
<td class="coverFnAliasHi">5159946</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="Scalar.h.gcov.html#L49">_ZN3c106ScalarC2Ef</a></td>
<td class="coverFnAliasHi">366</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="Scalar.h.gcov.html#L49">_ZN3c106ScalarC2Ei</a></td>
<td class="coverFnAliasHi">5172648</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="Scalar.h.gcov.html#L49">_ZN3c106ScalarC2El</a></td>
<td class="coverFnAliasHi">401318</td>
</tr>
<tr>
<td class="coverFn"><a href="Scalar.h.gcov.html#L33">_ZN3c106ScalarC2Ev</a></td>
<td class="coverFnHi">401318</td>
</tr>
<tr>
<td class="coverFn"><a href="Scalar.h.gcov.html#L351">_ZN3c106ScalarC2IdLPb0EEET_b</a></td>
<td class="coverFnHi">5160312</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="Scalar.h.gcov.html#L351">_ZN3c106ScalarC2IdLPb0EEET_b</a></td>
<td class="coverFnAliasHi">5159946</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="Scalar.h.gcov.html#L351">_ZN3c106ScalarC2IfLPb0EEET_b</a></td>
<td class="coverFnAliasHi">366</td>
</tr>
<tr>
<td class="coverFn"><a href="Scalar.h.gcov.html#L342">_ZN3c106ScalarC2IiLPb0EEET_b</a></td>
<td class="coverFnHi">5573966</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="Scalar.h.gcov.html#L342">_ZN3c106ScalarC2IiLPb0EEET_b</a></td>
<td class="coverFnAliasHi">5172648</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="Scalar.h.gcov.html#L342">_ZN3c106ScalarC2IlLPb0EEET_b</a></td>
<td class="coverFnAliasHi">401318</td>
</tr>
<tr>
<td class="coverFn"><a href="Scalar.h.gcov.html#L42">_ZN3c106ScalarD2Ev</a></td>
<td class="coverFnHi">10741350</td>
</tr>
<tr>
<td class="coverFn"><a href="Scalar.h.gcov.html#L152">_ZNK3c106Scalar10isIntegralEb</a></td>
<td class="coverFnHi">7072</td>
</tr>
<tr>
<td class="coverFn"><a href="Scalar.h.gcov.html#L101">_ZNK3c106Scalar6toLongEv</a></td>
<td class="coverFnHi">7072</td>
</tr>
<tr>
<td class="coverFn"><a href="Scalar.h.gcov.html#L160">_ZNK3c106Scalar9isBooleanEv</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>

View File

@@ -0,0 +1,454 @@
<!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/c10/core/Scalar.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/c10/core</a> - Scalar.h<span style="font-size: 80%;"> (source / <a href="Scalar.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">82.6&nbsp;%</td>
<td class="headerCovTableEntry">23</td>
<td class="headerCovTableEntry">19</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">93.3&nbsp;%</td>
<td class="headerCovTableEntry">15</td>
<td class="headerCovTableEntry">14</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;stdint.h&gt;</span>
<span id="L4"><span class="lineNum"> 4</span> : #include &lt;stdexcept&gt;</span>
<span id="L5"><span class="lineNum"> 5</span> : #include &lt;type_traits&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;c10/core/OptionalRef.h&gt;</span>
<span id="L9"><span class="lineNum"> 9</span> : #include &lt;c10/core/ScalarType.h&gt;</span>
<span id="L10"><span class="lineNum"> 10</span> : #include &lt;c10/core/SymFloat.h&gt;</span>
<span id="L11"><span class="lineNum"> 11</span> : #include &lt;c10/core/SymInt.h&gt;</span>
<span id="L12"><span class="lineNum"> 12</span> : #include &lt;c10/macros/Macros.h&gt;</span>
<span id="L13"><span class="lineNum"> 13</span> : #include &lt;c10/util/Exception.h&gt;</span>
<span id="L14"><span class="lineNum"> 14</span> : #include &lt;c10/util/Half.h&gt;</span>
<span id="L15"><span class="lineNum"> 15</span> : #include &lt;c10/util/TypeCast.h&gt;</span>
<span id="L16"><span class="lineNum"> 16</span> : #include &lt;c10/util/intrusive_ptr.h&gt;</span>
<span id="L17"><span class="lineNum"> 17</span> : </span>
<span id="L18"><span class="lineNum"> 18</span> : C10_CLANG_DIAGNOSTIC_PUSH()</span>
<span id="L19"><span class="lineNum"> 19</span> : #if C10_CLANG_HAS_WARNING(&quot;-Wimplicit-int-float-conversion&quot;)</span>
<span id="L20"><span class="lineNum"> 20</span> : C10_CLANG_DIAGNOSTIC_IGNORE(&quot;-Wimplicit-int-float-conversion&quot;)</span>
<span id="L21"><span class="lineNum"> 21</span> : #endif</span>
<span id="L22"><span class="lineNum"> 22</span> : </span>
<span id="L23"><span class="lineNum"> 23</span> : namespace c10 {</span>
<span id="L24"><span class="lineNum"> 24</span> : </span>
<span id="L25"><span class="lineNum"> 25</span> : /**</span>
<span id="L26"><span class="lineNum"> 26</span> : * Scalar represents a 0-dimensional tensor which contains a single element.</span>
<span id="L27"><span class="lineNum"> 27</span> : * Unlike a tensor, numeric literals (in C++) are implicitly convertible to</span>
<span id="L28"><span class="lineNum"> 28</span> : * Scalar (which is why, for example, we provide both add(Tensor) and</span>
<span id="L29"><span class="lineNum"> 29</span> : * add(Scalar) overloads for many operations). It may also be used in</span>
<span id="L30"><span class="lineNum"> 30</span> : * circumstances where you statically know a tensor is 0-dim and single size,</span>
<span id="L31"><span class="lineNum"> 31</span> : * but don't know its type.</span>
<span id="L32"><span class="lineNum"> 32</span> : */</span>
<span id="L33"><span class="lineNum"> 33</span> : class C10_API Scalar {</span>
<span id="L34"><span class="lineNum"> 34</span> : public:</span>
<span id="L35"><span class="lineNum"> 35</span> <span class="tlaGNC tlaBgGNC"> 401318 : Scalar() : Scalar(int64_t(0)) {}</span></span>
<span id="L36"><span class="lineNum"> 36</span> : </span>
<span id="L37"><span class="lineNum"> 37</span> <span class="tlaGNC"> 10741350 : void destroy() {</span></span>
<span id="L38"><span class="lineNum"> 38</span> <span class="tlaGNC"> 10741350 : if (Tag::HAS_si == tag || Tag::HAS_sd == tag || Tag::HAS_sb == tag) {</span></span>
<span id="L39"><span class="lineNum"> 39</span> <span class="tlaUNC tlaBgUNC"> 0 : raw::intrusive_ptr::decref(v.p);</span></span>
<span id="L40"><span class="lineNum"> 40</span> <span class="tlaUNC"> 0 : v.p = nullptr;</span></span>
<span id="L41"><span class="lineNum"> 41</span> : }</span>
<span id="L42"><span class="lineNum"> 42</span> <span class="tlaGNC tlaBgGNC"> 10741350 : }</span></span>
<span id="L43"><span class="lineNum"> 43</span> : </span>
<span id="L44"><span class="lineNum"> 44</span> <span class="tlaGNC"> 10741350 : ~Scalar() {</span></span>
<span id="L45"><span class="lineNum"> 45</span> <span class="tlaGNC"> 10741350 : destroy();</span></span>
<span id="L46"><span class="lineNum"> 46</span> <span class="tlaGNC"> 10741350 : }</span></span>
<span id="L47"><span class="lineNum"> 47</span> : </span>
<span id="L48"><span class="lineNum"> 48</span> : #define DEFINE_IMPLICIT_CTOR(type, name) \</span>
<span id="L49"><span class="lineNum"> 49</span> : Scalar(type vv) : Scalar(vv, true) {}</span>
<span id="L50"><span class="lineNum"> 50</span> : </span>
<span id="L51"><span class="lineNum"> 51</span> <span class="tlaGNC"> 10734278 : AT_FORALL_SCALAR_TYPES_AND5(</span></span>
<span id="L52"><span class="lineNum"> 52</span> : Half,</span>
<span id="L53"><span class="lineNum"> 53</span> : BFloat16,</span>
<span id="L54"><span class="lineNum"> 54</span> : Float8_e5m2,</span>
<span id="L55"><span class="lineNum"> 55</span> : Float8_e4m3fn,</span>
<span id="L56"><span class="lineNum"> 56</span> : ComplexHalf,</span>
<span id="L57"><span class="lineNum"> 57</span> : DEFINE_IMPLICIT_CTOR)</span>
<span id="L58"><span class="lineNum"> 58</span> : AT_FORALL_COMPLEX_TYPES(DEFINE_IMPLICIT_CTOR)</span>
<span id="L59"><span class="lineNum"> 59</span> : </span>
<span id="L60"><span class="lineNum"> 60</span> : #undef DEFINE_IMPLICIT_CTOR</span>
<span id="L61"><span class="lineNum"> 61</span> : </span>
<span id="L62"><span class="lineNum"> 62</span> : // Value* is both implicitly convertible to SymbolicVariable and bool which</span>
<span id="L63"><span class="lineNum"> 63</span> : // causes ambiguity error. Specialized constructor for bool resolves this</span>
<span id="L64"><span class="lineNum"> 64</span> : // problem.</span>
<span id="L65"><span class="lineNum"> 65</span> : template &lt;</span>
<span id="L66"><span class="lineNum"> 66</span> : typename T,</span>
<span id="L67"><span class="lineNum"> 67</span> : typename std::enable_if&lt;std::is_same&lt;T, bool&gt;::value, bool&gt;::type* =</span>
<span id="L68"><span class="lineNum"> 68</span> : nullptr&gt;</span>
<span id="L69"><span class="lineNum"> 69</span> : Scalar(T vv) : tag(Tag::HAS_b) {</span>
<span id="L70"><span class="lineNum"> 70</span> : v.i = convert&lt;int64_t, bool&gt;(vv);</span>
<span id="L71"><span class="lineNum"> 71</span> : }</span>
<span id="L72"><span class="lineNum"> 72</span> : </span>
<span id="L73"><span class="lineNum"> 73</span> : template &lt;</span>
<span id="L74"><span class="lineNum"> 74</span> : typename T,</span>
<span id="L75"><span class="lineNum"> 75</span> : typename std::enable_if&lt;std::is_same&lt;T, c10::SymBool&gt;::value, bool&gt;::</span>
<span id="L76"><span class="lineNum"> 76</span> : type* = nullptr&gt;</span>
<span id="L77"><span class="lineNum"> 77</span> : Scalar(T vv) : tag(Tag::HAS_sb) {</span>
<span id="L78"><span class="lineNum"> 78</span> : v.i = convert&lt;int64_t, c10::SymBool&gt;(vv);</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> : #define DEFINE_ACCESSOR(type, name) \</span>
<span id="L82"><span class="lineNum"> 82</span> : type to##name() const { \</span>
<span id="L83"><span class="lineNum"> 83</span> : if (Tag::HAS_d == tag) { \</span>
<span id="L84"><span class="lineNum"> 84</span> : return checked_convert&lt;type, double&gt;(v.d, #type); \</span>
<span id="L85"><span class="lineNum"> 85</span> : } else if (Tag::HAS_z == tag) { \</span>
<span id="L86"><span class="lineNum"> 86</span> : return checked_convert&lt;type, c10::complex&lt;double&gt;&gt;(v.z, #type); \</span>
<span id="L87"><span class="lineNum"> 87</span> : } \</span>
<span id="L88"><span class="lineNum"> 88</span> : if (Tag::HAS_b == tag) { \</span>
<span id="L89"><span class="lineNum"> 89</span> : return checked_convert&lt;type, bool&gt;(v.i, #type); \</span>
<span id="L90"><span class="lineNum"> 90</span> : } else if (Tag::HAS_i == tag) { \</span>
<span id="L91"><span class="lineNum"> 91</span> : return checked_convert&lt;type, int64_t&gt;(v.i, #type); \</span>
<span id="L92"><span class="lineNum"> 92</span> : } else if (Tag::HAS_si == tag) { \</span>
<span id="L93"><span class="lineNum"> 93</span> : TORCH_CHECK(false, &quot;tried to get &quot; #name &quot; out of SymInt&quot;) \</span>
<span id="L94"><span class="lineNum"> 94</span> : } else if (Tag::HAS_sd == tag) { \</span>
<span id="L95"><span class="lineNum"> 95</span> : TORCH_CHECK(false, &quot;tried to get &quot; #name &quot; out of SymFloat&quot;) \</span>
<span id="L96"><span class="lineNum"> 96</span> : } else if (Tag::HAS_sb == tag) { \</span>
<span id="L97"><span class="lineNum"> 97</span> : TORCH_CHECK(false, &quot;tried to get &quot; #name &quot; out of SymBool&quot;) \</span>
<span id="L98"><span class="lineNum"> 98</span> : } \</span>
<span id="L99"><span class="lineNum"> 99</span> : TORCH_CHECK(false) \</span>
<span id="L100"><span class="lineNum"> 100</span> : }</span>
<span id="L101"><span class="lineNum"> 101</span> : </span>
<span id="L102"><span class="lineNum"> 102</span> : // TODO: Support ComplexHalf accessor</span>
<span id="L103"><span class="lineNum"> 103</span> <span class="tlaGNC"> 7072 : AT_FORALL_SCALAR_TYPES_WITH_COMPLEX(DEFINE_ACCESSOR)</span></span>
<span id="L104"><span class="lineNum"> 104</span> : </span>
<span id="L105"><span class="lineNum"> 105</span> : #undef DEFINE_ACCESSOR</span>
<span id="L106"><span class="lineNum"> 106</span> : </span>
<span id="L107"><span class="lineNum"> 107</span> : SymInt toSymInt() const {</span>
<span id="L108"><span class="lineNum"> 108</span> : if (Tag::HAS_si == tag) {</span>
<span id="L109"><span class="lineNum"> 109</span> : return c10::SymInt(intrusive_ptr&lt;SymNodeImpl&gt;::reclaim_copy(</span>
<span id="L110"><span class="lineNum"> 110</span> : static_cast&lt;SymNodeImpl*&gt;(v.p)));</span>
<span id="L111"><span class="lineNum"> 111</span> : } else {</span>
<span id="L112"><span class="lineNum"> 112</span> : return toLong();</span>
<span id="L113"><span class="lineNum"> 113</span> : }</span>
<span id="L114"><span class="lineNum"> 114</span> : }</span>
<span id="L115"><span class="lineNum"> 115</span> : </span>
<span id="L116"><span class="lineNum"> 116</span> : SymFloat toSymFloat() const {</span>
<span id="L117"><span class="lineNum"> 117</span> : if (Tag::HAS_sd == tag) {</span>
<span id="L118"><span class="lineNum"> 118</span> : return c10::SymFloat(intrusive_ptr&lt;SymNodeImpl&gt;::reclaim_copy(</span>
<span id="L119"><span class="lineNum"> 119</span> : static_cast&lt;SymNodeImpl*&gt;(v.p)));</span>
<span id="L120"><span class="lineNum"> 120</span> : } else {</span>
<span id="L121"><span class="lineNum"> 121</span> : return toDouble();</span>
<span id="L122"><span class="lineNum"> 122</span> : }</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> : SymBool toSymBool() const {</span>
<span id="L126"><span class="lineNum"> 126</span> : if (Tag::HAS_sb == tag) {</span>
<span id="L127"><span class="lineNum"> 127</span> : return c10::SymBool(intrusive_ptr&lt;SymNodeImpl&gt;::reclaim_copy(</span>
<span id="L128"><span class="lineNum"> 128</span> : static_cast&lt;SymNodeImpl*&gt;(v.p)));</span>
<span id="L129"><span class="lineNum"> 129</span> : } else {</span>
<span id="L130"><span class="lineNum"> 130</span> : return toBool();</span>
<span id="L131"><span class="lineNum"> 131</span> : }</span>
<span id="L132"><span class="lineNum"> 132</span> : }</span>
<span id="L133"><span class="lineNum"> 133</span> : </span>
<span id="L134"><span class="lineNum"> 134</span> : // also support scalar.to&lt;int64_t&gt;();</span>
<span id="L135"><span class="lineNum"> 135</span> : // Deleted for unsupported types, but specialized below for supported types</span>
<span id="L136"><span class="lineNum"> 136</span> : template &lt;typename T&gt;</span>
<span id="L137"><span class="lineNum"> 137</span> : T to() const = delete;</span>
<span id="L138"><span class="lineNum"> 138</span> : </span>
<span id="L139"><span class="lineNum"> 139</span> : // audit uses of data_ptr</span>
<span id="L140"><span class="lineNum"> 140</span> : const void* data_ptr() const {</span>
<span id="L141"><span class="lineNum"> 141</span> : TORCH_INTERNAL_ASSERT(!isSymbolic());</span>
<span id="L142"><span class="lineNum"> 142</span> : return static_cast&lt;const void*&gt;(&amp;v);</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> : bool isFloatingPoint() const {</span>
<span id="L146"><span class="lineNum"> 146</span> : return Tag::HAS_d == tag || Tag::HAS_sd == tag;</span>
<span id="L147"><span class="lineNum"> 147</span> : }</span>
<span id="L148"><span class="lineNum"> 148</span> : </span>
<span id="L149"><span class="lineNum"> 149</span> : C10_DEPRECATED_MESSAGE(</span>
<span id="L150"><span class="lineNum"> 150</span> : &quot;isIntegral is deprecated. Please use the overload with 'includeBool' parameter instead.&quot;)</span>
<span id="L151"><span class="lineNum"> 151</span> : bool isIntegral() const {</span>
<span id="L152"><span class="lineNum"> 152</span> : return Tag::HAS_i == tag || Tag::HAS_si == tag;</span>
<span id="L153"><span class="lineNum"> 153</span> : }</span>
<span id="L154"><span class="lineNum"> 154</span> <span class="tlaGNC"> 7072 : bool isIntegral(bool includeBool) const {</span></span>
<span id="L155"><span class="lineNum"> 155</span> <span class="tlaGNC"> 7072 : return Tag::HAS_i == tag || Tag::HAS_si == tag ||</span></span>
<span id="L156"><span class="lineNum"> 156</span> <span class="tlaGNC"> 7072 : (includeBool &amp;&amp; isBoolean());</span></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> : bool isComplex() const {</span>
<span id="L160"><span class="lineNum"> 160</span> : return Tag::HAS_z == tag;</span>
<span id="L161"><span class="lineNum"> 161</span> : }</span>
<span id="L162"><span class="lineNum"> 162</span> <span class="tlaUNC tlaBgUNC"> 0 : bool isBoolean() const {</span></span>
<span id="L163"><span class="lineNum"> 163</span> <span class="tlaUNC"> 0 : return Tag::HAS_b == tag || Tag::HAS_sb == tag;</span></span>
<span id="L164"><span class="lineNum"> 164</span> : }</span>
<span id="L165"><span class="lineNum"> 165</span> : </span>
<span id="L166"><span class="lineNum"> 166</span> : // you probably don't actually want these; they're mostly for testing</span>
<span id="L167"><span class="lineNum"> 167</span> : bool isSymInt() const {</span>
<span id="L168"><span class="lineNum"> 168</span> : return Tag::HAS_si == tag;</span>
<span id="L169"><span class="lineNum"> 169</span> : }</span>
<span id="L170"><span class="lineNum"> 170</span> : bool isSymFloat() const {</span>
<span id="L171"><span class="lineNum"> 171</span> : return Tag::HAS_sd == tag;</span>
<span id="L172"><span class="lineNum"> 172</span> : }</span>
<span id="L173"><span class="lineNum"> 173</span> : bool isSymBool() const {</span>
<span id="L174"><span class="lineNum"> 174</span> : return Tag::HAS_sb == tag;</span>
<span id="L175"><span class="lineNum"> 175</span> : }</span>
<span id="L176"><span class="lineNum"> 176</span> : </span>
<span id="L177"><span class="lineNum"> 177</span> : bool isSymbolic() const {</span>
<span id="L178"><span class="lineNum"> 178</span> : return Tag::HAS_si == tag || Tag::HAS_sd == tag || Tag::HAS_sb == tag;</span>
<span id="L179"><span class="lineNum"> 179</span> : }</span>
<span id="L180"><span class="lineNum"> 180</span> : </span>
<span id="L181"><span class="lineNum"> 181</span> : C10_ALWAYS_INLINE Scalar&amp; operator=(Scalar&amp;&amp; other) noexcept {</span>
<span id="L182"><span class="lineNum"> 182</span> : if (&amp;other == this) {</span>
<span id="L183"><span class="lineNum"> 183</span> : return *this;</span>
<span id="L184"><span class="lineNum"> 184</span> : }</span>
<span id="L185"><span class="lineNum"> 185</span> : </span>
<span id="L186"><span class="lineNum"> 186</span> : destroy();</span>
<span id="L187"><span class="lineNum"> 187</span> : moveFrom(std::move(other));</span>
<span id="L188"><span class="lineNum"> 188</span> : return *this;</span>
<span id="L189"><span class="lineNum"> 189</span> : }</span>
<span id="L190"><span class="lineNum"> 190</span> : </span>
<span id="L191"><span class="lineNum"> 191</span> : C10_ALWAYS_INLINE Scalar&amp; operator=(const Scalar&amp; other) {</span>
<span id="L192"><span class="lineNum"> 192</span> : if (&amp;other == this) {</span>
<span id="L193"><span class="lineNum"> 193</span> : return *this;</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> : *this = Scalar(other);</span>
<span id="L197"><span class="lineNum"> 197</span> : return *this;</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> : Scalar operator-() const;</span>
<span id="L201"><span class="lineNum"> 201</span> : Scalar conj() const;</span>
<span id="L202"><span class="lineNum"> 202</span> : Scalar log() const;</span>
<span id="L203"><span class="lineNum"> 203</span> : </span>
<span id="L204"><span class="lineNum"> 204</span> : template &lt;</span>
<span id="L205"><span class="lineNum"> 205</span> : typename T,</span>
<span id="L206"><span class="lineNum"> 206</span> : typename std::enable_if&lt;!c10::is_complex&lt;T&gt;::value, int&gt;::type = 0&gt;</span>
<span id="L207"><span class="lineNum"> 207</span> : bool equal(T num) const {</span>
<span id="L208"><span class="lineNum"> 208</span> : if (isComplex()) {</span>
<span id="L209"><span class="lineNum"> 209</span> : TORCH_INTERNAL_ASSERT(!isSymbolic());</span>
<span id="L210"><span class="lineNum"> 210</span> : auto val = v.z;</span>
<span id="L211"><span class="lineNum"> 211</span> : return (val.real() == num) &amp;&amp; (val.imag() == T());</span>
<span id="L212"><span class="lineNum"> 212</span> : } else if (isFloatingPoint()) {</span>
<span id="L213"><span class="lineNum"> 213</span> : TORCH_CHECK(!isSymbolic(), &quot;NYI SymFloat equality&quot;);</span>
<span id="L214"><span class="lineNum"> 214</span> : return v.d == num;</span>
<span id="L215"><span class="lineNum"> 215</span> : } else if (isIntegral(/*includeBool=*/false)) {</span>
<span id="L216"><span class="lineNum"> 216</span> : TORCH_CHECK(!isSymbolic(), &quot;NYI SymInt equality&quot;);</span>
<span id="L217"><span class="lineNum"> 217</span> : return v.i == num;</span>
<span id="L218"><span class="lineNum"> 218</span> : } else if (isBoolean()) {</span>
<span id="L219"><span class="lineNum"> 219</span> : // boolean scalar does not equal to a non boolean value</span>
<span id="L220"><span class="lineNum"> 220</span> : TORCH_INTERNAL_ASSERT(!isSymbolic());</span>
<span id="L221"><span class="lineNum"> 221</span> : return false;</span>
<span id="L222"><span class="lineNum"> 222</span> : } else {</span>
<span id="L223"><span class="lineNum"> 223</span> : TORCH_INTERNAL_ASSERT(false);</span>
<span id="L224"><span class="lineNum"> 224</span> : }</span>
<span id="L225"><span class="lineNum"> 225</span> : }</span>
<span id="L226"><span class="lineNum"> 226</span> : </span>
<span id="L227"><span class="lineNum"> 227</span> : template &lt;</span>
<span id="L228"><span class="lineNum"> 228</span> : typename T,</span>
<span id="L229"><span class="lineNum"> 229</span> : typename std::enable_if&lt;c10::is_complex&lt;T&gt;::value, int&gt;::type = 0&gt;</span>
<span id="L230"><span class="lineNum"> 230</span> : bool equal(T num) const {</span>
<span id="L231"><span class="lineNum"> 231</span> : if (isComplex()) {</span>
<span id="L232"><span class="lineNum"> 232</span> : TORCH_INTERNAL_ASSERT(!isSymbolic());</span>
<span id="L233"><span class="lineNum"> 233</span> : return v.z == num;</span>
<span id="L234"><span class="lineNum"> 234</span> : } else if (isFloatingPoint()) {</span>
<span id="L235"><span class="lineNum"> 235</span> : TORCH_CHECK(!isSymbolic(), &quot;NYI SymFloat equality&quot;);</span>
<span id="L236"><span class="lineNum"> 236</span> : return (v.d == num.real()) &amp;&amp; (num.imag() == T());</span>
<span id="L237"><span class="lineNum"> 237</span> : } else if (isIntegral(/*includeBool=*/false)) {</span>
<span id="L238"><span class="lineNum"> 238</span> : TORCH_CHECK(!isSymbolic(), &quot;NYI SymInt equality&quot;);</span>
<span id="L239"><span class="lineNum"> 239</span> : return (v.i == num.real()) &amp;&amp; (num.imag() == T());</span>
<span id="L240"><span class="lineNum"> 240</span> : } else if (isBoolean()) {</span>
<span id="L241"><span class="lineNum"> 241</span> : // boolean scalar does not equal to a non boolean value</span>
<span id="L242"><span class="lineNum"> 242</span> : TORCH_INTERNAL_ASSERT(!isSymbolic());</span>
<span id="L243"><span class="lineNum"> 243</span> : return false;</span>
<span id="L244"><span class="lineNum"> 244</span> : } else {</span>
<span id="L245"><span class="lineNum"> 245</span> : TORCH_INTERNAL_ASSERT(false);</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> : </span>
<span id="L249"><span class="lineNum"> 249</span> : bool equal(bool num) const {</span>
<span id="L250"><span class="lineNum"> 250</span> : if (isBoolean()) {</span>
<span id="L251"><span class="lineNum"> 251</span> : TORCH_INTERNAL_ASSERT(!isSymbolic());</span>
<span id="L252"><span class="lineNum"> 252</span> : return static_cast&lt;bool&gt;(v.i) == num;</span>
<span id="L253"><span class="lineNum"> 253</span> : } else {</span>
<span id="L254"><span class="lineNum"> 254</span> : return false;</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> : ScalarType type() const {</span>
<span id="L259"><span class="lineNum"> 259</span> : if (isComplex()) {</span>
<span id="L260"><span class="lineNum"> 260</span> : return ScalarType::ComplexDouble;</span>
<span id="L261"><span class="lineNum"> 261</span> : } else if (isFloatingPoint()) {</span>
<span id="L262"><span class="lineNum"> 262</span> : return ScalarType::Double;</span>
<span id="L263"><span class="lineNum"> 263</span> : } else if (isIntegral(/*includeBool=*/false)) {</span>
<span id="L264"><span class="lineNum"> 264</span> : return ScalarType::Long;</span>
<span id="L265"><span class="lineNum"> 265</span> : } else if (isBoolean()) {</span>
<span id="L266"><span class="lineNum"> 266</span> : return ScalarType::Bool;</span>
<span id="L267"><span class="lineNum"> 267</span> : } else {</span>
<span id="L268"><span class="lineNum"> 268</span> : throw std::runtime_error(&quot;Unknown scalar type.&quot;);</span>
<span id="L269"><span class="lineNum"> 269</span> : }</span>
<span id="L270"><span class="lineNum"> 270</span> : }</span>
<span id="L271"><span class="lineNum"> 271</span> : </span>
<span id="L272"><span class="lineNum"> 272</span> : Scalar(Scalar&amp;&amp; rhs) noexcept : tag(rhs.tag) {</span>
<span id="L273"><span class="lineNum"> 273</span> : moveFrom(std::move(rhs));</span>
<span id="L274"><span class="lineNum"> 274</span> : }</span>
<span id="L275"><span class="lineNum"> 275</span> : </span>
<span id="L276"><span class="lineNum"> 276</span> : Scalar(const Scalar&amp; rhs) : tag(rhs.tag), v(rhs.v) {</span>
<span id="L277"><span class="lineNum"> 277</span> : if (isSymbolic()) {</span>
<span id="L278"><span class="lineNum"> 278</span> : c10::raw::intrusive_ptr::incref(v.p);</span>
<span id="L279"><span class="lineNum"> 279</span> : }</span>
<span id="L280"><span class="lineNum"> 280</span> : }</span>
<span id="L281"><span class="lineNum"> 281</span> : </span>
<span id="L282"><span class="lineNum"> 282</span> : Scalar(c10::SymInt si) {</span>
<span id="L283"><span class="lineNum"> 283</span> : if (auto m = si.maybe_as_int()) {</span>
<span id="L284"><span class="lineNum"> 284</span> : tag = Tag::HAS_i;</span>
<span id="L285"><span class="lineNum"> 285</span> : v.i = *m;</span>
<span id="L286"><span class="lineNum"> 286</span> : } else {</span>
<span id="L287"><span class="lineNum"> 287</span> : tag = Tag::HAS_si;</span>
<span id="L288"><span class="lineNum"> 288</span> : v.p = std::move(si).release();</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> : </span>
<span id="L292"><span class="lineNum"> 292</span> : Scalar(c10::SymFloat sd) {</span>
<span id="L293"><span class="lineNum"> 293</span> : if (sd.is_symbolic()) {</span>
<span id="L294"><span class="lineNum"> 294</span> : tag = Tag::HAS_sd;</span>
<span id="L295"><span class="lineNum"> 295</span> : v.p = std::move(sd).release();</span>
<span id="L296"><span class="lineNum"> 296</span> : } else {</span>
<span id="L297"><span class="lineNum"> 297</span> : tag = Tag::HAS_d;</span>
<span id="L298"><span class="lineNum"> 298</span> : v.d = sd.as_float_unchecked();</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> : </span>
<span id="L302"><span class="lineNum"> 302</span> : Scalar(c10::SymBool sb) {</span>
<span id="L303"><span class="lineNum"> 303</span> : if (auto m = sb.maybe_as_bool()) {</span>
<span id="L304"><span class="lineNum"> 304</span> : tag = Tag::HAS_b;</span>
<span id="L305"><span class="lineNum"> 305</span> : v.i = *m;</span>
<span id="L306"><span class="lineNum"> 306</span> : } else {</span>
<span id="L307"><span class="lineNum"> 307</span> : tag = Tag::HAS_sb;</span>
<span id="L308"><span class="lineNum"> 308</span> : v.p = std::move(sb).release();</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> : </span>
<span id="L312"><span class="lineNum"> 312</span> : // We can't set v in the initializer list using the</span>
<span id="L313"><span class="lineNum"> 313</span> : // syntax v{ .member = ... } because it doesn't work on MSVC</span>
<span id="L314"><span class="lineNum"> 314</span> : private:</span>
<span id="L315"><span class="lineNum"> 315</span> : enum class Tag { HAS_d, HAS_i, HAS_z, HAS_b, HAS_sd, HAS_si, HAS_sb };</span>
<span id="L316"><span class="lineNum"> 316</span> : </span>
<span id="L317"><span class="lineNum"> 317</span> : // NB: assumes that self has already been cleared</span>
<span id="L318"><span class="lineNum"> 318</span> : C10_ALWAYS_INLINE void moveFrom(Scalar&amp;&amp; rhs) noexcept {</span>
<span id="L319"><span class="lineNum"> 319</span> : v = rhs.v;</span>
<span id="L320"><span class="lineNum"> 320</span> : tag = rhs.tag;</span>
<span id="L321"><span class="lineNum"> 321</span> : if (rhs.tag == Tag::HAS_si || rhs.tag == Tag::HAS_sd ||</span>
<span id="L322"><span class="lineNum"> 322</span> : rhs.tag == Tag::HAS_sb) {</span>
<span id="L323"><span class="lineNum"> 323</span> : // Move out of scalar</span>
<span id="L324"><span class="lineNum"> 324</span> : rhs.tag = Tag::HAS_i;</span>
<span id="L325"><span class="lineNum"> 325</span> : rhs.v.i = 0;</span>
<span id="L326"><span class="lineNum"> 326</span> : }</span>
<span id="L327"><span class="lineNum"> 327</span> : }</span>
<span id="L328"><span class="lineNum"> 328</span> : </span>
<span id="L329"><span class="lineNum"> 329</span> : Tag tag;</span>
<span id="L330"><span class="lineNum"> 330</span> : </span>
<span id="L331"><span class="lineNum"> 331</span> : union v_t {</span>
<span id="L332"><span class="lineNum"> 332</span> : double d{};</span>
<span id="L333"><span class="lineNum"> 333</span> : int64_t i;</span>
<span id="L334"><span class="lineNum"> 334</span> : c10::complex&lt;double&gt; z;</span>
<span id="L335"><span class="lineNum"> 335</span> : c10::intrusive_ptr_target* p;</span>
<span id="L336"><span class="lineNum"> 336</span> <span class="tlaGNC tlaBgGNC"> 10734278 : v_t() {} // default constructor</span></span>
<span id="L337"><span class="lineNum"> 337</span> : } v;</span>
<span id="L338"><span class="lineNum"> 338</span> : </span>
<span id="L339"><span class="lineNum"> 339</span> : template &lt;</span>
<span id="L340"><span class="lineNum"> 340</span> : typename T,</span>
<span id="L341"><span class="lineNum"> 341</span> : typename std::enable_if&lt;</span>
<span id="L342"><span class="lineNum"> 342</span> : std::is_integral&lt;T&gt;::value &amp;&amp; !std::is_same&lt;T, bool&gt;::value,</span>
<span id="L343"><span class="lineNum"> 343</span> : bool&gt;::type* = nullptr&gt;</span>
<span id="L344"><span class="lineNum"> 344</span> <span class="tlaGNC"> 5573966 : Scalar(T vv, bool) : tag(Tag::HAS_i) {</span></span>
<span id="L345"><span class="lineNum"> 345</span> <span class="tlaGNC"> 5573966 : v.i = convert&lt;decltype(v.i), T&gt;(vv);</span></span>
<span id="L346"><span class="lineNum"> 346</span> <span class="tlaGNC"> 5573966 : }</span></span>
<span id="L347"><span class="lineNum"> 347</span> : </span>
<span id="L348"><span class="lineNum"> 348</span> : template &lt;</span>
<span id="L349"><span class="lineNum"> 349</span> : typename T,</span>
<span id="L350"><span class="lineNum"> 350</span> : typename std::enable_if&lt;</span>
<span id="L351"><span class="lineNum"> 351</span> : !std::is_integral&lt;T&gt;::value &amp;&amp; !c10::is_complex&lt;T&gt;::value,</span>
<span id="L352"><span class="lineNum"> 352</span> : bool&gt;::type* = nullptr&gt;</span>
<span id="L353"><span class="lineNum"> 353</span> <span class="tlaGNC"> 5160312 : Scalar(T vv, bool) : tag(Tag::HAS_d) {</span></span>
<span id="L354"><span class="lineNum"> 354</span> <span class="tlaGNC"> 5160312 : v.d = convert&lt;decltype(v.d), T&gt;(vv);</span></span>
<span id="L355"><span class="lineNum"> 355</span> <span class="tlaGNC"> 5160312 : }</span></span>
<span id="L356"><span class="lineNum"> 356</span> : </span>
<span id="L357"><span class="lineNum"> 357</span> : template &lt;</span>
<span id="L358"><span class="lineNum"> 358</span> : typename T,</span>
<span id="L359"><span class="lineNum"> 359</span> : typename std::enable_if&lt;c10::is_complex&lt;T&gt;::value, bool&gt;::type* = nullptr&gt;</span>
<span id="L360"><span class="lineNum"> 360</span> : Scalar(T vv, bool) : tag(Tag::HAS_z) {</span>
<span id="L361"><span class="lineNum"> 361</span> : v.z = convert&lt;decltype(v.z), T&gt;(vv);</span>
<span id="L362"><span class="lineNum"> 362</span> : }</span>
<span id="L363"><span class="lineNum"> 363</span> : };</span>
<span id="L364"><span class="lineNum"> 364</span> : </span>
<span id="L365"><span class="lineNum"> 365</span> : using OptionalScalarRef = c10::OptionalRef&lt;Scalar&gt;;</span>
<span id="L366"><span class="lineNum"> 366</span> : </span>
<span id="L367"><span class="lineNum"> 367</span> : // define the scalar.to&lt;int64_t&gt;() specializations</span>
<span id="L368"><span class="lineNum"> 368</span> : #define DEFINE_TO(T, name) \</span>
<span id="L369"><span class="lineNum"> 369</span> : template &lt;&gt; \</span>
<span id="L370"><span class="lineNum"> 370</span> : inline T Scalar::to&lt;T&gt;() const { \</span>
<span id="L371"><span class="lineNum"> 371</span> : return to##name(); \</span>
<span id="L372"><span class="lineNum"> 372</span> : }</span>
<span id="L373"><span class="lineNum"> 373</span> : AT_FORALL_SCALAR_TYPES_WITH_COMPLEX(DEFINE_TO)</span>
<span id="L374"><span class="lineNum"> 374</span> : #undef DEFINE_TO</span>
<span id="L375"><span class="lineNum"> 375</span> : </span>
<span id="L376"><span class="lineNum"> 376</span> : } // namespace c10</span>
<span id="L377"><span class="lineNum"> 377</span> : </span>
<span id="L378"><span class="lineNum"> 378</span> : C10_CLANG_DIAGNOSTIC_POP()</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/c10/core/ScalarType.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/c10/core</a> - ScalarType.h<span style="font-size: 80%;"> (<a href="ScalarType.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">50.0&nbsp;%</td>
<td class="headerCovTableEntry">14</td>
<td class="headerCovTableEntry">7</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">50.0&nbsp;%</td>
<td class="headerCovTableEntry">4</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="ScalarType.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="ScalarType.h.gcov.html#L274">_ZN3c10L8toStringENS_10ScalarTypeE</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ScalarType.h.gcov.html#L549">_ZN3c10lsERSoNS_10ScalarTypeE</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ScalarType.h.gcov.html#L314">_ZN3c10L14isFloatingTypeENS_10ScalarTypeE</a></td>
<td class="coverFnHi">876</td>
</tr>
<tr>
<td class="coverFn"><a href="ScalarType.h.gcov.html#L328">_ZN3c10L13isComplexTypeENS_10ScalarTypeE</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,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/c10/core/ScalarType.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/c10/core</a> - ScalarType.h<span style="font-size: 80%;"> (<a href="ScalarType.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">50.0&nbsp;%</td>
<td class="headerCovTableEntry">14</td>
<td class="headerCovTableEntry">7</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">50.0&nbsp;%</td>
<td class="headerCovTableEntry">4</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="ScalarType.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="ScalarType.h.gcov.html#L328">_ZN3c10L13isComplexTypeENS_10ScalarTypeE</a></td>
<td class="coverFnHi">401318</td>
</tr>
<tr>
<td class="coverFn"><a href="ScalarType.h.gcov.html#L314">_ZN3c10L14isFloatingTypeENS_10ScalarTypeE</a></td>
<td class="coverFnHi">876</td>
</tr>
<tr>
<td class="coverFn"><a href="ScalarType.h.gcov.html#L274">_ZN3c10L8toStringENS_10ScalarTypeE</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="ScalarType.h.gcov.html#L549">_ZN3c10lsERSoNS_10ScalarTypeE</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>

View File

@@ -0,0 +1,633 @@
<!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/c10/core/ScalarType.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/c10/core</a> - ScalarType.h<span style="font-size: 80%;"> (source / <a href="ScalarType.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="headerCovTableEntryLo">50.0&nbsp;%</td>
<td class="headerCovTableEntry">14</td>
<td class="headerCovTableEntry">7</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">50.0&nbsp;%</td>
<td class="headerCovTableEntry">4</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> : #include &lt;c10/util/BFloat16.h&gt;</span>
<span id="L4"><span class="lineNum"> 4</span> : #include &lt;c10/util/Deprecated.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> : #include &lt;c10/util/Float8_e4m3fn.h&gt;</span>
<span id="L7"><span class="lineNum"> 7</span> : #include &lt;c10/util/Float8_e5m2.h&gt;</span>
<span id="L8"><span class="lineNum"> 8</span> : #include &lt;c10/util/Half.h&gt;</span>
<span id="L9"><span class="lineNum"> 9</span> : #include &lt;c10/util/bits.h&gt;</span>
<span id="L10"><span class="lineNum"> 10</span> : #include &lt;c10/util/complex.h&gt;</span>
<span id="L11"><span class="lineNum"> 11</span> : #include &lt;c10/util/qint32.h&gt;</span>
<span id="L12"><span class="lineNum"> 12</span> : #include &lt;c10/util/qint8.h&gt;</span>
<span id="L13"><span class="lineNum"> 13</span> : #include &lt;c10/util/quint2x4.h&gt;</span>
<span id="L14"><span class="lineNum"> 14</span> : #include &lt;c10/util/quint4x2.h&gt;</span>
<span id="L15"><span class="lineNum"> 15</span> : #include &lt;c10/util/quint8.h&gt;</span>
<span id="L16"><span class="lineNum"> 16</span> : </span>
<span id="L17"><span class="lineNum"> 17</span> : #include &lt;complex&gt;</span>
<span id="L18"><span class="lineNum"> 18</span> : #include &lt;cstdint&gt;</span>
<span id="L19"><span class="lineNum"> 19</span> : #include &lt;ostream&gt;</span>
<span id="L20"><span class="lineNum"> 20</span> : </span>
<span id="L21"><span class="lineNum"> 21</span> : namespace c10 {</span>
<span id="L22"><span class="lineNum"> 22</span> : </span>
<span id="L23"><span class="lineNum"> 23</span> : // For the macros below:</span>
<span id="L24"><span class="lineNum"> 24</span> : // NB: If you want to macro some code for all non-QInt scalar types (i.e. types</span>
<span id="L25"><span class="lineNum"> 25</span> : // with complete information, you probably want one of the</span>
<span id="L26"><span class="lineNum"> 26</span> : // AT_FORALL_SCALAR_TYPES / AT_FORALL_SCALAR_TYPES_AND</span>
<span id="L27"><span class="lineNum"> 27</span> : // macros below, which are designed to behave similarly to the Dispatch macros</span>
<span id="L28"><span class="lineNum"> 28</span> : // with the same name.</span>
<span id="L29"><span class="lineNum"> 29</span> : </span>
<span id="L30"><span class="lineNum"> 30</span> : // NB: Order matters for this macro; it is relied upon in</span>
<span id="L31"><span class="lineNum"> 31</span> : // _promoteTypesLookup and the serialization format.</span>
<span id="L32"><span class="lineNum"> 32</span> : #define AT_FORALL_SCALAR_TYPES_WITH_COMPLEX_AND_QINTS(_) \</span>
<span id="L33"><span class="lineNum"> 33</span> : _(uint8_t, Byte) /* 0 */ \</span>
<span id="L34"><span class="lineNum"> 34</span> : _(int8_t, Char) /* 1 */ \</span>
<span id="L35"><span class="lineNum"> 35</span> : _(int16_t, Short) /* 2 */ \</span>
<span id="L36"><span class="lineNum"> 36</span> : _(int, Int) /* 3 */ \</span>
<span id="L37"><span class="lineNum"> 37</span> : _(int64_t, Long) /* 4 */ \</span>
<span id="L38"><span class="lineNum"> 38</span> : _(at::Half, Half) /* 5 */ \</span>
<span id="L39"><span class="lineNum"> 39</span> : _(float, Float) /* 6 */ \</span>
<span id="L40"><span class="lineNum"> 40</span> : _(double, Double) /* 7 */ \</span>
<span id="L41"><span class="lineNum"> 41</span> : _(c10::complex&lt;c10::Half&gt;, ComplexHalf) /* 8 */ \</span>
<span id="L42"><span class="lineNum"> 42</span> : _(c10::complex&lt;float&gt;, ComplexFloat) /* 9 */ \</span>
<span id="L43"><span class="lineNum"> 43</span> : _(c10::complex&lt;double&gt;, ComplexDouble) /* 10 */ \</span>
<span id="L44"><span class="lineNum"> 44</span> : _(bool, Bool) /* 11 */ \</span>
<span id="L45"><span class="lineNum"> 45</span> : _(c10::qint8, QInt8) /* 12 */ \</span>
<span id="L46"><span class="lineNum"> 46</span> : _(c10::quint8, QUInt8) /* 13 */ \</span>
<span id="L47"><span class="lineNum"> 47</span> : _(c10::qint32, QInt32) /* 14 */ \</span>
<span id="L48"><span class="lineNum"> 48</span> : _(at::BFloat16, BFloat16) /* 15 */ \</span>
<span id="L49"><span class="lineNum"> 49</span> : _(c10::quint4x2, QUInt4x2) /* 16 */ \</span>
<span id="L50"><span class="lineNum"> 50</span> : _(c10::quint2x4, QUInt2x4) /* 17 */ \</span>
<span id="L51"><span class="lineNum"> 51</span> : _(c10::bits1x8, Bits1x8) /* 18 */ \</span>
<span id="L52"><span class="lineNum"> 52</span> : _(c10::bits2x4, Bits2x4) /* 19 */ \</span>
<span id="L53"><span class="lineNum"> 53</span> : _(c10::bits4x2, Bits4x2) /* 20 */ \</span>
<span id="L54"><span class="lineNum"> 54</span> : _(c10::bits8, Bits8) /* 21 */ \</span>
<span id="L55"><span class="lineNum"> 55</span> : _(c10::bits16, Bits16) /* 22 */ \</span>
<span id="L56"><span class="lineNum"> 56</span> : _(c10::Float8_e5m2, Float8_e5m2) /* 23 */ \</span>
<span id="L57"><span class="lineNum"> 57</span> : _(c10::Float8_e4m3fn, Float8_e4m3fn) /* 24 */</span>
<span id="L58"><span class="lineNum"> 58</span> : </span>
<span id="L59"><span class="lineNum"> 59</span> : // If you want to support ComplexHalf for real, add ComplexHalf</span>
<span id="L60"><span class="lineNum"> 60</span> : // into this macro (and change the name). But beware: convert()</span>
<span id="L61"><span class="lineNum"> 61</span> : // doesn't work for all the conversions you need...</span>
<span id="L62"><span class="lineNum"> 62</span> : #define AT_FORALL_SCALAR_TYPES_WITH_COMPLEX_EXCEPT_COMPLEX_HALF(_) \</span>
<span id="L63"><span class="lineNum"> 63</span> : _(uint8_t, Byte) \</span>
<span id="L64"><span class="lineNum"> 64</span> : _(int8_t, Char) \</span>
<span id="L65"><span class="lineNum"> 65</span> : _(int16_t, Short) \</span>
<span id="L66"><span class="lineNum"> 66</span> : _(int, Int) \</span>
<span id="L67"><span class="lineNum"> 67</span> : _(int64_t, Long) \</span>
<span id="L68"><span class="lineNum"> 68</span> : _(at::Half, Half) \</span>
<span id="L69"><span class="lineNum"> 69</span> : _(float, Float) \</span>
<span id="L70"><span class="lineNum"> 70</span> : _(double, Double) \</span>
<span id="L71"><span class="lineNum"> 71</span> : _(c10::complex&lt;float&gt;, ComplexFloat) \</span>
<span id="L72"><span class="lineNum"> 72</span> : _(c10::complex&lt;double&gt;, ComplexDouble) \</span>
<span id="L73"><span class="lineNum"> 73</span> : _(bool, Bool) \</span>
<span id="L74"><span class="lineNum"> 74</span> : _(at::BFloat16, BFloat16) \</span>
<span id="L75"><span class="lineNum"> 75</span> : _(at::Float8_e5m2, Float8_e5m2) \</span>
<span id="L76"><span class="lineNum"> 76</span> : _(at::Float8_e4m3fn, Float8_e4m3fn)</span>
<span id="L77"><span class="lineNum"> 77</span> : </span>
<span id="L78"><span class="lineNum"> 78</span> : #define AT_FORALL_SCALAR_TYPES_WITH_COMPLEX(_) \</span>
<span id="L79"><span class="lineNum"> 79</span> : _(uint8_t, Byte) \</span>
<span id="L80"><span class="lineNum"> 80</span> : _(int8_t, Char) \</span>
<span id="L81"><span class="lineNum"> 81</span> : _(int16_t, Short) \</span>
<span id="L82"><span class="lineNum"> 82</span> : _(int, Int) \</span>
<span id="L83"><span class="lineNum"> 83</span> : _(int64_t, Long) \</span>
<span id="L84"><span class="lineNum"> 84</span> : _(at::Half, Half) \</span>
<span id="L85"><span class="lineNum"> 85</span> : _(float, Float) \</span>
<span id="L86"><span class="lineNum"> 86</span> : _(double, Double) \</span>
<span id="L87"><span class="lineNum"> 87</span> : _(c10::complex&lt;c10::Half&gt;, ComplexHalf) \</span>
<span id="L88"><span class="lineNum"> 88</span> : _(c10::complex&lt;float&gt;, ComplexFloat) \</span>
<span id="L89"><span class="lineNum"> 89</span> : _(c10::complex&lt;double&gt;, ComplexDouble) \</span>
<span id="L90"><span class="lineNum"> 90</span> : _(bool, Bool) \</span>
<span id="L91"><span class="lineNum"> 91</span> : _(at::BFloat16, BFloat16) \</span>
<span id="L92"><span class="lineNum"> 92</span> : _(at::Float8_e5m2, Float8_e5m2) \</span>
<span id="L93"><span class="lineNum"> 93</span> : _(at::Float8_e4m3fn, Float8_e4m3fn)</span>
<span id="L94"><span class="lineNum"> 94</span> : </span>
<span id="L95"><span class="lineNum"> 95</span> : enum class ScalarType : int8_t {</span>
<span id="L96"><span class="lineNum"> 96</span> : #define DEFINE_ENUM(_1, n) n,</span>
<span id="L97"><span class="lineNum"> 97</span> : AT_FORALL_SCALAR_TYPES_WITH_COMPLEX_AND_QINTS(DEFINE_ENUM)</span>
<span id="L98"><span class="lineNum"> 98</span> : #undef DEFINE_ENUM</span>
<span id="L99"><span class="lineNum"> 99</span> : Undefined,</span>
<span id="L100"><span class="lineNum"> 100</span> : NumOptions</span>
<span id="L101"><span class="lineNum"> 101</span> : };</span>
<span id="L102"><span class="lineNum"> 102</span> : </span>
<span id="L103"><span class="lineNum"> 103</span> : constexpr uint16_t NumScalarTypes =</span>
<span id="L104"><span class="lineNum"> 104</span> : static_cast&lt;uint16_t&gt;(ScalarType::NumOptions);</span>
<span id="L105"><span class="lineNum"> 105</span> : </span>
<span id="L106"><span class="lineNum"> 106</span> : namespace impl {</span>
<span id="L107"><span class="lineNum"> 107</span> : </span>
<span id="L108"><span class="lineNum"> 108</span> : // These are used to map ScalarTypes to C++ types.</span>
<span id="L109"><span class="lineNum"> 109</span> : </span>
<span id="L110"><span class="lineNum"> 110</span> : template &lt;c10::ScalarType N&gt;</span>
<span id="L111"><span class="lineNum"> 111</span> : struct ScalarTypeToCPPType;</span>
<span id="L112"><span class="lineNum"> 112</span> : </span>
<span id="L113"><span class="lineNum"> 113</span> : #define SPECIALIZE_ScalarTypeToCPPType(cpp_type, scalar_type) \</span>
<span id="L114"><span class="lineNum"> 114</span> : template &lt;&gt; \</span>
<span id="L115"><span class="lineNum"> 115</span> : struct ScalarTypeToCPPType&lt;c10::ScalarType::scalar_type&gt; { \</span>
<span id="L116"><span class="lineNum"> 116</span> : using type = cpp_type; \</span>
<span id="L117"><span class="lineNum"> 117</span> : \</span>
<span id="L118"><span class="lineNum"> 118</span> : /* This is a workaround for the CUDA bug which prevents */ \</span>
<span id="L119"><span class="lineNum"> 119</span> : /* ::detail::ScalarTypeToCType&lt;T&gt;::type being used directly due to */ \</span>
<span id="L120"><span class="lineNum"> 120</span> : /* ambiguous reference which can't to be resolved. For some reason it */ \</span>
<span id="L121"><span class="lineNum"> 121</span> : /* can't pick between at::detail and at::cuda::detail. */ \</span>
<span id="L122"><span class="lineNum"> 122</span> : /* For repro example, please see: */ \</span>
<span id="L123"><span class="lineNum"> 123</span> : /* https://gist.github.com/izdeby/952ae7cf256ddb740a73776d39a7e7ba */ \</span>
<span id="L124"><span class="lineNum"> 124</span> : /* TODO: remove once the bug is fixed. */ \</span>
<span id="L125"><span class="lineNum"> 125</span> : static type t; \</span>
<span id="L126"><span class="lineNum"> 126</span> : };</span>
<span id="L127"><span class="lineNum"> 127</span> : </span>
<span id="L128"><span class="lineNum"> 128</span> : AT_FORALL_SCALAR_TYPES_WITH_COMPLEX_AND_QINTS(SPECIALIZE_ScalarTypeToCPPType)</span>
<span id="L129"><span class="lineNum"> 129</span> : </span>
<span id="L130"><span class="lineNum"> 130</span> : #undef SPECIALIZE_ScalarTypeToCPPType</span>
<span id="L131"><span class="lineNum"> 131</span> : </span>
<span id="L132"><span class="lineNum"> 132</span> : template &lt;c10::ScalarType N&gt;</span>
<span id="L133"><span class="lineNum"> 133</span> : using ScalarTypeToCPPTypeT = typename ScalarTypeToCPPType&lt;N&gt;::type;</span>
<span id="L134"><span class="lineNum"> 134</span> : </span>
<span id="L135"><span class="lineNum"> 135</span> : } // namespace impl</span>
<span id="L136"><span class="lineNum"> 136</span> : </span>
<span id="L137"><span class="lineNum"> 137</span> : template &lt;typename T&gt;</span>
<span id="L138"><span class="lineNum"> 138</span> : struct CppTypeToScalarType;</span>
<span id="L139"><span class="lineNum"> 139</span> : </span>
<span id="L140"><span class="lineNum"> 140</span> : #define SPECIALIZE_CppTypeToScalarType(cpp_type, scalar_type) \</span>
<span id="L141"><span class="lineNum"> 141</span> : template &lt;&gt; \</span>
<span id="L142"><span class="lineNum"> 142</span> : struct CppTypeToScalarType&lt;cpp_type&gt; \</span>
<span id="L143"><span class="lineNum"> 143</span> : : std:: \</span>
<span id="L144"><span class="lineNum"> 144</span> : integral_constant&lt;c10::ScalarType, c10::ScalarType::scalar_type&gt; { \</span>
<span id="L145"><span class="lineNum"> 145</span> : };</span>
<span id="L146"><span class="lineNum"> 146</span> : </span>
<span id="L147"><span class="lineNum"> 147</span> : AT_FORALL_SCALAR_TYPES_WITH_COMPLEX_AND_QINTS(SPECIALIZE_CppTypeToScalarType)</span>
<span id="L148"><span class="lineNum"> 148</span> : </span>
<span id="L149"><span class="lineNum"> 149</span> : #undef SPECIALIZE_CppTypeToScalarType</span>
<span id="L150"><span class="lineNum"> 150</span> : </span>
<span id="L151"><span class="lineNum"> 151</span> : #define AT_FORALL_INT_TYPES(_) \</span>
<span id="L152"><span class="lineNum"> 152</span> : _(uint8_t, Byte) \</span>
<span id="L153"><span class="lineNum"> 153</span> : _(int8_t, Char) \</span>
<span id="L154"><span class="lineNum"> 154</span> : _(int16_t, Short) \</span>
<span id="L155"><span class="lineNum"> 155</span> : _(int, Int) \</span>
<span id="L156"><span class="lineNum"> 156</span> : _(int64_t, Long)</span>
<span id="L157"><span class="lineNum"> 157</span> : </span>
<span id="L158"><span class="lineNum"> 158</span> : #define AT_FORALL_SCALAR_TYPES(_) \</span>
<span id="L159"><span class="lineNum"> 159</span> : _(uint8_t, Byte) \</span>
<span id="L160"><span class="lineNum"> 160</span> : _(int8_t, Char) \</span>
<span id="L161"><span class="lineNum"> 161</span> : _(int16_t, Short) \</span>
<span id="L162"><span class="lineNum"> 162</span> : _(int, Int) \</span>
<span id="L163"><span class="lineNum"> 163</span> : _(int64_t, Long) \</span>
<span id="L164"><span class="lineNum"> 164</span> : _(float, Float) \</span>
<span id="L165"><span class="lineNum"> 165</span> : _(double, Double)</span>
<span id="L166"><span class="lineNum"> 166</span> : </span>
<span id="L167"><span class="lineNum"> 167</span> : #define AT_FORALL_SCALAR_TYPES_AND(SCALARTYPE, _) \</span>
<span id="L168"><span class="lineNum"> 168</span> : _(uint8_t, Byte) \</span>
<span id="L169"><span class="lineNum"> 169</span> : _(int8_t, Char) \</span>
<span id="L170"><span class="lineNum"> 170</span> : _(int16_t, Short) \</span>
<span id="L171"><span class="lineNum"> 171</span> : _(int, Int) \</span>
<span id="L172"><span class="lineNum"> 172</span> : _(int64_t, Long) \</span>
<span id="L173"><span class="lineNum"> 173</span> : _(float, Float) \</span>
<span id="L174"><span class="lineNum"> 174</span> : _(double, Double) \</span>
<span id="L175"><span class="lineNum"> 175</span> : _(decltype(::c10::impl::ScalarTypeToCPPType&lt; \</span>
<span id="L176"><span class="lineNum"> 176</span> : ::c10::ScalarType::SCALARTYPE&gt;::t), \</span>
<span id="L177"><span class="lineNum"> 177</span> : SCALARTYPE)</span>
<span id="L178"><span class="lineNum"> 178</span> : </span>
<span id="L179"><span class="lineNum"> 179</span> : #define AT_FORALL_SCALAR_TYPES_AND2(SCALARTYPE1, SCALARTYPE2, _) \</span>
<span id="L180"><span class="lineNum"> 180</span> : _(uint8_t, Byte) \</span>
<span id="L181"><span class="lineNum"> 181</span> : _(int8_t, Char) \</span>
<span id="L182"><span class="lineNum"> 182</span> : _(int16_t, Short) \</span>
<span id="L183"><span class="lineNum"> 183</span> : _(int, Int) \</span>
<span id="L184"><span class="lineNum"> 184</span> : _(int64_t, Long) \</span>
<span id="L185"><span class="lineNum"> 185</span> : _(float, Float) \</span>
<span id="L186"><span class="lineNum"> 186</span> : _(double, Double) \</span>
<span id="L187"><span class="lineNum"> 187</span> : _(decltype(::c10::impl::ScalarTypeToCPPType&lt; \</span>
<span id="L188"><span class="lineNum"> 188</span> : ::c10::ScalarType::SCALARTYPE1&gt;::t), \</span>
<span id="L189"><span class="lineNum"> 189</span> : SCALARTYPE1) \</span>
<span id="L190"><span class="lineNum"> 190</span> : _(decltype(::c10::impl::ScalarTypeToCPPType&lt; \</span>
<span id="L191"><span class="lineNum"> 191</span> : ::c10::ScalarType::SCALARTYPE2&gt;::t), \</span>
<span id="L192"><span class="lineNum"> 192</span> : SCALARTYPE2)</span>
<span id="L193"><span class="lineNum"> 193</span> : </span>
<span id="L194"><span class="lineNum"> 194</span> : #define AT_FORALL_SCALAR_TYPES_AND3(SCALARTYPE1, SCALARTYPE2, SCALARTYPE3, _) \</span>
<span id="L195"><span class="lineNum"> 195</span> : _(uint8_t, Byte) \</span>
<span id="L196"><span class="lineNum"> 196</span> : _(int8_t, Char) \</span>
<span id="L197"><span class="lineNum"> 197</span> : _(int16_t, Short) \</span>
<span id="L198"><span class="lineNum"> 198</span> : _(int, Int) \</span>
<span id="L199"><span class="lineNum"> 199</span> : _(int64_t, Long) \</span>
<span id="L200"><span class="lineNum"> 200</span> : _(float, Float) \</span>
<span id="L201"><span class="lineNum"> 201</span> : _(double, Double) \</span>
<span id="L202"><span class="lineNum"> 202</span> : _(decltype(::c10::impl::ScalarTypeToCPPType&lt; \</span>
<span id="L203"><span class="lineNum"> 203</span> : ::c10::ScalarType::SCALARTYPE1&gt;::t), \</span>
<span id="L204"><span class="lineNum"> 204</span> : SCALARTYPE1) \</span>
<span id="L205"><span class="lineNum"> 205</span> : _(decltype(::c10::impl::ScalarTypeToCPPType&lt; \</span>
<span id="L206"><span class="lineNum"> 206</span> : ::c10::ScalarType::SCALARTYPE2&gt;::t), \</span>
<span id="L207"><span class="lineNum"> 207</span> : SCALARTYPE2) \</span>
<span id="L208"><span class="lineNum"> 208</span> : _(decltype(::c10::impl::ScalarTypeToCPPType&lt; \</span>
<span id="L209"><span class="lineNum"> 209</span> : ::c10::ScalarType::SCALARTYPE3&gt;::t), \</span>
<span id="L210"><span class="lineNum"> 210</span> : SCALARTYPE3)</span>
<span id="L211"><span class="lineNum"> 211</span> : </span>
<span id="L212"><span class="lineNum"> 212</span> : #define AT_FORALL_SCALAR_TYPES_AND4( \</span>
<span id="L213"><span class="lineNum"> 213</span> : SCALARTYPE1, SCALARTYPE2, SCALARTYPE3, SCALARTYPE4, _) \</span>
<span id="L214"><span class="lineNum"> 214</span> : _(uint8_t, Byte) \</span>
<span id="L215"><span class="lineNum"> 215</span> : _(int8_t, Char) \</span>
<span id="L216"><span class="lineNum"> 216</span> : _(int16_t, Short) \</span>
<span id="L217"><span class="lineNum"> 217</span> : _(int, Int) \</span>
<span id="L218"><span class="lineNum"> 218</span> : _(int64_t, Long) \</span>
<span id="L219"><span class="lineNum"> 219</span> : _(float, Float) \</span>
<span id="L220"><span class="lineNum"> 220</span> : _(double, Double) \</span>
<span id="L221"><span class="lineNum"> 221</span> : _(decltype(::c10::impl::ScalarTypeToCPPType&lt; \</span>
<span id="L222"><span class="lineNum"> 222</span> : ::c10::ScalarType::SCALARTYPE1&gt;::t), \</span>
<span id="L223"><span class="lineNum"> 223</span> : SCALARTYPE1) \</span>
<span id="L224"><span class="lineNum"> 224</span> : _(decltype(::c10::impl::ScalarTypeToCPPType&lt; \</span>
<span id="L225"><span class="lineNum"> 225</span> : ::c10::ScalarType::SCALARTYPE2&gt;::t), \</span>
<span id="L226"><span class="lineNum"> 226</span> : SCALARTYPE2) \</span>
<span id="L227"><span class="lineNum"> 227</span> : _(decltype(::c10::impl::ScalarTypeToCPPType&lt; \</span>
<span id="L228"><span class="lineNum"> 228</span> : ::c10::ScalarType::SCALARTYPE3&gt;::t), \</span>
<span id="L229"><span class="lineNum"> 229</span> : SCALARTYPE3) \</span>
<span id="L230"><span class="lineNum"> 230</span> : _(decltype(::c10::impl::ScalarTypeToCPPType&lt; \</span>
<span id="L231"><span class="lineNum"> 231</span> : ::c10::ScalarType::SCALARTYPE4&gt;::t), \</span>
<span id="L232"><span class="lineNum"> 232</span> : SCALARTYPE4)</span>
<span id="L233"><span class="lineNum"> 233</span> : </span>
<span id="L234"><span class="lineNum"> 234</span> : #define AT_FORALL_SCALAR_TYPES_AND5( \</span>
<span id="L235"><span class="lineNum"> 235</span> : SCALARTYPE1, SCALARTYPE2, SCALARTYPE3, SCALARTYPE4, SCALARTYPE5, _) \</span>
<span id="L236"><span class="lineNum"> 236</span> : _(uint8_t, Byte) \</span>
<span id="L237"><span class="lineNum"> 237</span> : _(int8_t, Char) \</span>
<span id="L238"><span class="lineNum"> 238</span> : _(int16_t, Short) \</span>
<span id="L239"><span class="lineNum"> 239</span> : _(int, Int) \</span>
<span id="L240"><span class="lineNum"> 240</span> : _(int64_t, Long) \</span>
<span id="L241"><span class="lineNum"> 241</span> : _(float, Float) \</span>
<span id="L242"><span class="lineNum"> 242</span> : _(double, Double) \</span>
<span id="L243"><span class="lineNum"> 243</span> : _(decltype(::c10::impl::ScalarTypeToCPPType&lt; \</span>
<span id="L244"><span class="lineNum"> 244</span> : ::c10::ScalarType::SCALARTYPE1&gt;::t), \</span>
<span id="L245"><span class="lineNum"> 245</span> : SCALARTYPE1) \</span>
<span id="L246"><span class="lineNum"> 246</span> : _(decltype(::c10::impl::ScalarTypeToCPPType&lt; \</span>
<span id="L247"><span class="lineNum"> 247</span> : ::c10::ScalarType::SCALARTYPE2&gt;::t), \</span>
<span id="L248"><span class="lineNum"> 248</span> : SCALARTYPE2) \</span>
<span id="L249"><span class="lineNum"> 249</span> : _(decltype(::c10::impl::ScalarTypeToCPPType&lt; \</span>
<span id="L250"><span class="lineNum"> 250</span> : ::c10::ScalarType::SCALARTYPE3&gt;::t), \</span>
<span id="L251"><span class="lineNum"> 251</span> : SCALARTYPE3) \</span>
<span id="L252"><span class="lineNum"> 252</span> : _(decltype(::c10::impl::ScalarTypeToCPPType&lt; \</span>
<span id="L253"><span class="lineNum"> 253</span> : ::c10::ScalarType::SCALARTYPE4&gt;::t), \</span>
<span id="L254"><span class="lineNum"> 254</span> : SCALARTYPE4) \</span>
<span id="L255"><span class="lineNum"> 255</span> : _(decltype(::c10::impl::ScalarTypeToCPPType&lt; \</span>
<span id="L256"><span class="lineNum"> 256</span> : ::c10::ScalarType::SCALARTYPE5&gt;::t), \</span>
<span id="L257"><span class="lineNum"> 257</span> : SCALARTYPE5)</span>
<span id="L258"><span class="lineNum"> 258</span> : </span>
<span id="L259"><span class="lineNum"> 259</span> : #define AT_FORALL_QINT_TYPES(_) \</span>
<span id="L260"><span class="lineNum"> 260</span> : _(c10::qint8, QInt8) \</span>
<span id="L261"><span class="lineNum"> 261</span> : _(c10::quint8, QUInt8) \</span>
<span id="L262"><span class="lineNum"> 262</span> : _(c10::qint32, QInt32) \</span>
<span id="L263"><span class="lineNum"> 263</span> : _(c10::quint4x2, QUInt4x2) \</span>
<span id="L264"><span class="lineNum"> 264</span> : _(c10::quint2x4, QUInt2x4)</span>
<span id="L265"><span class="lineNum"> 265</span> : </span>
<span id="L266"><span class="lineNum"> 266</span> : #define AT_FORALL_COMPLEX_TYPES(_) \</span>
<span id="L267"><span class="lineNum"> 267</span> : _(c10::complex&lt;float&gt;, ComplexFloat) \</span>
<span id="L268"><span class="lineNum"> 268</span> : _(c10::complex&lt;double&gt;, ComplexDouble)</span>
<span id="L269"><span class="lineNum"> 269</span> : </span>
<span id="L270"><span class="lineNum"> 270</span> : #define DEFINE_CONSTANT(_, name) \</span>
<span id="L271"><span class="lineNum"> 271</span> : constexpr ScalarType k##name = ScalarType::name;</span>
<span id="L272"><span class="lineNum"> 272</span> : </span>
<span id="L273"><span class="lineNum"> 273</span> : AT_FORALL_SCALAR_TYPES_WITH_COMPLEX_AND_QINTS(DEFINE_CONSTANT)</span>
<span id="L274"><span class="lineNum"> 274</span> : #undef DEFINE_CONSTANT</span>
<span id="L275"><span class="lineNum"> 275</span> : </span>
<span id="L276"><span class="lineNum"> 276</span> <span class="tlaUNC tlaBgUNC"> 0 : static inline const char* toString(ScalarType t) {</span></span>
<span id="L277"><span class="lineNum"> 277</span> : #define DEFINE_CASE(_, name) \</span>
<span id="L278"><span class="lineNum"> 278</span> : case ScalarType::name: \</span>
<span id="L279"><span class="lineNum"> 279</span> : return #name;</span>
<span id="L280"><span class="lineNum"> 280</span> : </span>
<span id="L281"><span class="lineNum"> 281</span> <span class="tlaUNC"> 0 : switch (t) {</span></span>
<span id="L282"><span class="lineNum"> 282</span> <span class="tlaUNC"> 0 : AT_FORALL_SCALAR_TYPES_WITH_COMPLEX_AND_QINTS(DEFINE_CASE)</span></span>
<span id="L283"><span class="lineNum"> 283</span> <span class="tlaUNC"> 0 : default:</span></span>
<span id="L284"><span class="lineNum"> 284</span> <span class="tlaUNC"> 0 : return &quot;UNKNOWN_SCALAR&quot;;</span></span>
<span id="L285"><span class="lineNum"> 285</span> : }</span>
<span id="L286"><span class="lineNum"> 286</span> : #undef DEFINE_CASE</span>
<span id="L287"><span class="lineNum"> 287</span> : }</span>
<span id="L288"><span class="lineNum"> 288</span> : </span>
<span id="L289"><span class="lineNum"> 289</span> : static inline size_t elementSize(ScalarType t) {</span>
<span id="L290"><span class="lineNum"> 290</span> : #define CASE_ELEMENTSIZE_CASE(ctype, name) \</span>
<span id="L291"><span class="lineNum"> 291</span> : case ScalarType::name: \</span>
<span id="L292"><span class="lineNum"> 292</span> : return sizeof(ctype);</span>
<span id="L293"><span class="lineNum"> 293</span> : </span>
<span id="L294"><span class="lineNum"> 294</span> : switch (t) {</span>
<span id="L295"><span class="lineNum"> 295</span> : AT_FORALL_SCALAR_TYPES_WITH_COMPLEX_AND_QINTS(CASE_ELEMENTSIZE_CASE)</span>
<span id="L296"><span class="lineNum"> 296</span> : default:</span>
<span id="L297"><span class="lineNum"> 297</span> : TORCH_CHECK(false, &quot;Unknown ScalarType&quot;);</span>
<span id="L298"><span class="lineNum"> 298</span> : }</span>
<span id="L299"><span class="lineNum"> 299</span> : #undef CASE_ELEMENTSIZE_CASE</span>
<span id="L300"><span class="lineNum"> 300</span> : }</span>
<span id="L301"><span class="lineNum"> 301</span> : </span>
<span id="L302"><span class="lineNum"> 302</span> : static inline bool isIntegralType(ScalarType t, bool includeBool) {</span>
<span id="L303"><span class="lineNum"> 303</span> : bool isIntegral =</span>
<span id="L304"><span class="lineNum"> 304</span> : (t == ScalarType::Byte || t == ScalarType::Char || t == ScalarType::Int ||</span>
<span id="L305"><span class="lineNum"> 305</span> : t == ScalarType::Long || t == ScalarType::Short);</span>
<span id="L306"><span class="lineNum"> 306</span> : </span>
<span id="L307"><span class="lineNum"> 307</span> : return isIntegral || (includeBool &amp;&amp; t == ScalarType::Bool);</span>
<span id="L308"><span class="lineNum"> 308</span> : }</span>
<span id="L309"><span class="lineNum"> 309</span> : </span>
<span id="L310"><span class="lineNum"> 310</span> : C10_DEPRECATED_MESSAGE(</span>
<span id="L311"><span class="lineNum"> 311</span> : &quot;isIntegralType is deprecated. Please use the overload with 'includeBool' parameter instead.&quot;)</span>
<span id="L312"><span class="lineNum"> 312</span> : static inline bool isIntegralType(ScalarType t) {</span>
<span id="L313"><span class="lineNum"> 313</span> : return isIntegralType(t, /*includeBool=*/false);</span>
<span id="L314"><span class="lineNum"> 314</span> : }</span>
<span id="L315"><span class="lineNum"> 315</span> : </span>
<span id="L316"><span class="lineNum"> 316</span> <span class="tlaGNC tlaBgGNC"> 876 : static inline bool isFloatingType(ScalarType t) {</span></span>
<span id="L317"><span class="lineNum"> 317</span> : return (</span>
<span id="L318"><span class="lineNum"> 318</span> <span class="tlaGNC"> 876 : t == ScalarType::Double || t == ScalarType::Float ||</span></span>
<span id="L319"><span class="lineNum"> 319</span> <span class="tlaGNC"> 756 : t == ScalarType::Half || t == ScalarType::BFloat16 ||</span></span>
<span id="L320"><span class="lineNum"> 320</span> <span class="tlaGNC"> 1752 : t == ScalarType::Float8_e5m2 || t == ScalarType::Float8_e4m3fn);</span></span>
<span id="L321"><span class="lineNum"> 321</span> : }</span>
<span id="L322"><span class="lineNum"> 322</span> : </span>
<span id="L323"><span class="lineNum"> 323</span> : static inline bool isFloat8Type(ScalarType t) {</span>
<span id="L324"><span class="lineNum"> 324</span> : return t == ScalarType::Float8_e4m3fn || t == ScalarType::Float8_e5m2;</span>
<span id="L325"><span class="lineNum"> 325</span> : }</span>
<span id="L326"><span class="lineNum"> 326</span> : static inline bool isReducedFloatingType(ScalarType t) {</span>
<span id="L327"><span class="lineNum"> 327</span> : return t == ScalarType::Half || t == ScalarType::BFloat16 || isFloat8Type(t);</span>
<span id="L328"><span class="lineNum"> 328</span> : }</span>
<span id="L329"><span class="lineNum"> 329</span> : </span>
<span id="L330"><span class="lineNum"> 330</span> <span class="tlaGNC"> 401318 : static inline bool isComplexType(ScalarType t) {</span></span>
<span id="L331"><span class="lineNum"> 331</span> : return (</span>
<span id="L332"><span class="lineNum"> 332</span> <span class="tlaGNC"> 401318 : t == ScalarType::ComplexHalf || t == ScalarType::ComplexFloat ||</span></span>
<span id="L333"><span class="lineNum"> 333</span> <span class="tlaGNC"> 401318 : t == ScalarType::ComplexDouble);</span></span>
<span id="L334"><span class="lineNum"> 334</span> : }</span>
<span id="L335"><span class="lineNum"> 335</span> : </span>
<span id="L336"><span class="lineNum"> 336</span> : static inline bool isQIntType(ScalarType t) {</span>
<span id="L337"><span class="lineNum"> 337</span> : // Don't forget to extend this when adding new QInt types</span>
<span id="L338"><span class="lineNum"> 338</span> : return t == ScalarType::QInt8 || t == ScalarType::QUInt8 ||</span>
<span id="L339"><span class="lineNum"> 339</span> : t == ScalarType::QInt32 || t == ScalarType::QUInt4x2 ||</span>
<span id="L340"><span class="lineNum"> 340</span> : t == ScalarType::QUInt2x4;</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> : static inline bool isBitsType(ScalarType t) {</span>
<span id="L344"><span class="lineNum"> 344</span> : return t == ScalarType::Bits1x8 || t == ScalarType::Bits2x4 ||</span>
<span id="L345"><span class="lineNum"> 345</span> : t == ScalarType::Bits4x2 || t == ScalarType::Bits8 ||</span>
<span id="L346"><span class="lineNum"> 346</span> : t == ScalarType::Bits16;</span>
<span id="L347"><span class="lineNum"> 347</span> : }</span>
<span id="L348"><span class="lineNum"> 348</span> : </span>
<span id="L349"><span class="lineNum"> 349</span> : static inline ScalarType toQIntType(ScalarType t) {</span>
<span id="L350"><span class="lineNum"> 350</span> : switch (t) {</span>
<span id="L351"><span class="lineNum"> 351</span> : case ScalarType::Byte:</span>
<span id="L352"><span class="lineNum"> 352</span> : return ScalarType::QUInt8;</span>
<span id="L353"><span class="lineNum"> 353</span> : case ScalarType::Char:</span>
<span id="L354"><span class="lineNum"> 354</span> : return ScalarType::QInt8;</span>
<span id="L355"><span class="lineNum"> 355</span> : case ScalarType::Int:</span>
<span id="L356"><span class="lineNum"> 356</span> : return ScalarType::QInt32;</span>
<span id="L357"><span class="lineNum"> 357</span> : default:</span>
<span id="L358"><span class="lineNum"> 358</span> : return t;</span>
<span id="L359"><span class="lineNum"> 359</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> : static inline ScalarType toUnderlying(ScalarType t) {</span>
<span id="L363"><span class="lineNum"> 363</span> : switch (t) {</span>
<span id="L364"><span class="lineNum"> 364</span> : case ScalarType::QUInt8:</span>
<span id="L365"><span class="lineNum"> 365</span> : return ScalarType::Byte;</span>
<span id="L366"><span class="lineNum"> 366</span> : case ScalarType::QInt8:</span>
<span id="L367"><span class="lineNum"> 367</span> : return ScalarType::Char;</span>
<span id="L368"><span class="lineNum"> 368</span> : case ScalarType::QInt32:</span>
<span id="L369"><span class="lineNum"> 369</span> : return ScalarType::Int;</span>
<span id="L370"><span class="lineNum"> 370</span> : case ScalarType::QUInt4x2:</span>
<span id="L371"><span class="lineNum"> 371</span> : return ScalarType::Byte;</span>
<span id="L372"><span class="lineNum"> 372</span> : case ScalarType::QUInt2x4:</span>
<span id="L373"><span class="lineNum"> 373</span> : return ScalarType::Byte;</span>
<span id="L374"><span class="lineNum"> 374</span> : default:</span>
<span id="L375"><span class="lineNum"> 375</span> : return t;</span>
<span id="L376"><span class="lineNum"> 376</span> : }</span>
<span id="L377"><span class="lineNum"> 377</span> : }</span>
<span id="L378"><span class="lineNum"> 378</span> : </span>
<span id="L379"><span class="lineNum"> 379</span> : static inline bool isSignedType(ScalarType t) {</span>
<span id="L380"><span class="lineNum"> 380</span> : TORCH_CHECK(!isQIntType(t), &quot;isSignedType not supported for quantized types&quot;);</span>
<span id="L381"><span class="lineNum"> 381</span> : #define CASE_SIGNED(ctype, name) \</span>
<span id="L382"><span class="lineNum"> 382</span> : case ScalarType::name: \</span>
<span id="L383"><span class="lineNum"> 383</span> : return std::numeric_limits&lt;ctype&gt;::is_signed;</span>
<span id="L384"><span class="lineNum"> 384</span> : </span>
<span id="L385"><span class="lineNum"> 385</span> : switch (t) {</span>
<span id="L386"><span class="lineNum"> 386</span> : case ScalarType::Bits1x8:</span>
<span id="L387"><span class="lineNum"> 387</span> : case ScalarType::Bits2x4:</span>
<span id="L388"><span class="lineNum"> 388</span> : case ScalarType::Bits4x2:</span>
<span id="L389"><span class="lineNum"> 389</span> : case ScalarType::Bits8:</span>
<span id="L390"><span class="lineNum"> 390</span> : case ScalarType::Bits16:</span>
<span id="L391"><span class="lineNum"> 391</span> : TORCH_CHECK(false, &quot;Bits types are undefined&quot;);</span>
<span id="L392"><span class="lineNum"> 392</span> : case ScalarType::ComplexHalf:</span>
<span id="L393"><span class="lineNum"> 393</span> : case ScalarType::ComplexFloat:</span>
<span id="L394"><span class="lineNum"> 394</span> : case ScalarType::ComplexDouble:</span>
<span id="L395"><span class="lineNum"> 395</span> : return true;</span>
<span id="L396"><span class="lineNum"> 396</span> : AT_FORALL_SCALAR_TYPES_AND5(</span>
<span id="L397"><span class="lineNum"> 397</span> : Half, Bool, BFloat16, Float8_e5m2, Float8_e4m3fn, CASE_SIGNED)</span>
<span id="L398"><span class="lineNum"> 398</span> : default:</span>
<span id="L399"><span class="lineNum"> 399</span> : TORCH_CHECK(false, &quot;Unknown ScalarType&quot;);</span>
<span id="L400"><span class="lineNum"> 400</span> : }</span>
<span id="L401"><span class="lineNum"> 401</span> : #undef CASE_SIGNED</span>
<span id="L402"><span class="lineNum"> 402</span> : }</span>
<span id="L403"><span class="lineNum"> 403</span> : </span>
<span id="L404"><span class="lineNum"> 404</span> : static inline bool isUnderlying(ScalarType type, ScalarType qtype) {</span>
<span id="L405"><span class="lineNum"> 405</span> : return type == toUnderlying(qtype);</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> : static inline ScalarType toRealValueType(ScalarType t) {</span>
<span id="L409"><span class="lineNum"> 409</span> : switch (t) {</span>
<span id="L410"><span class="lineNum"> 410</span> : case ScalarType::ComplexHalf:</span>
<span id="L411"><span class="lineNum"> 411</span> : return ScalarType::Half;</span>
<span id="L412"><span class="lineNum"> 412</span> : case ScalarType::ComplexFloat:</span>
<span id="L413"><span class="lineNum"> 413</span> : return ScalarType::Float;</span>
<span id="L414"><span class="lineNum"> 414</span> : case ScalarType::ComplexDouble:</span>
<span id="L415"><span class="lineNum"> 415</span> : return ScalarType::Double;</span>
<span id="L416"><span class="lineNum"> 416</span> : default:</span>
<span id="L417"><span class="lineNum"> 417</span> : return t;</span>
<span id="L418"><span class="lineNum"> 418</span> : }</span>
<span id="L419"><span class="lineNum"> 419</span> : }</span>
<span id="L420"><span class="lineNum"> 420</span> : </span>
<span id="L421"><span class="lineNum"> 421</span> : static inline ScalarType toComplexType(ScalarType t) {</span>
<span id="L422"><span class="lineNum"> 422</span> : switch (t) {</span>
<span id="L423"><span class="lineNum"> 423</span> : case ScalarType::BFloat16:</span>
<span id="L424"><span class="lineNum"> 424</span> : // BFloat16 has range equivalent to Float,</span>
<span id="L425"><span class="lineNum"> 425</span> : // so we map it to ComplexFloat.</span>
<span id="L426"><span class="lineNum"> 426</span> : return ScalarType::ComplexFloat;</span>
<span id="L427"><span class="lineNum"> 427</span> : case ScalarType::Half:</span>
<span id="L428"><span class="lineNum"> 428</span> : return ScalarType::ComplexHalf;</span>
<span id="L429"><span class="lineNum"> 429</span> : case ScalarType::Float:</span>
<span id="L430"><span class="lineNum"> 430</span> : return ScalarType::ComplexFloat;</span>
<span id="L431"><span class="lineNum"> 431</span> : case ScalarType::Double:</span>
<span id="L432"><span class="lineNum"> 432</span> : return ScalarType::ComplexDouble;</span>
<span id="L433"><span class="lineNum"> 433</span> : case ScalarType::ComplexHalf:</span>
<span id="L434"><span class="lineNum"> 434</span> : return ScalarType::ComplexHalf;</span>
<span id="L435"><span class="lineNum"> 435</span> : case ScalarType::ComplexFloat:</span>
<span id="L436"><span class="lineNum"> 436</span> : return ScalarType::ComplexFloat;</span>
<span id="L437"><span class="lineNum"> 437</span> : case ScalarType::ComplexDouble:</span>
<span id="L438"><span class="lineNum"> 438</span> : return ScalarType::ComplexDouble;</span>
<span id="L439"><span class="lineNum"> 439</span> : default:</span>
<span id="L440"><span class="lineNum"> 440</span> : TORCH_CHECK(false, &quot;Unknown Complex ScalarType for &quot;, t);</span>
<span id="L441"><span class="lineNum"> 441</span> : }</span>
<span id="L442"><span class="lineNum"> 442</span> : }</span>
<span id="L443"><span class="lineNum"> 443</span> : </span>
<span id="L444"><span class="lineNum"> 444</span> : // see tensor_attributes.rst for detailed explanation and examples</span>
<span id="L445"><span class="lineNum"> 445</span> : // of casting rules.</span>
<span id="L446"><span class="lineNum"> 446</span> : static inline bool canCast(const ScalarType from, const ScalarType to) {</span>
<span id="L447"><span class="lineNum"> 447</span> : // We disallow complex -&gt; non complex, e.g., float_tensor *= complex is</span>
<span id="L448"><span class="lineNum"> 448</span> : // disallowed.</span>
<span id="L449"><span class="lineNum"> 449</span> : if (isComplexType(from) &amp;&amp; !isComplexType(to)) {</span>
<span id="L450"><span class="lineNum"> 450</span> : return false;</span>
<span id="L451"><span class="lineNum"> 451</span> : }</span>
<span id="L452"><span class="lineNum"> 452</span> : // We disallow float -&gt; integral, e.g., int_tensor *= float is disallowed.</span>
<span id="L453"><span class="lineNum"> 453</span> : if (isFloatingType(from) &amp;&amp; isIntegralType(to, false)) {</span>
<span id="L454"><span class="lineNum"> 454</span> : return false;</span>
<span id="L455"><span class="lineNum"> 455</span> : }</span>
<span id="L456"><span class="lineNum"> 456</span> : </span>
<span id="L457"><span class="lineNum"> 457</span> : // Treat bool as a distinct &quot;category,&quot; to be consistent with type promotion</span>
<span id="L458"><span class="lineNum"> 458</span> : // rules (e.g. `bool_tensor + 5 -&gt; int64_tensor`). If `5` was in the same</span>
<span id="L459"><span class="lineNum"> 459</span> : // category as `bool_tensor`, we would not promote. Differing categories</span>
<span id="L460"><span class="lineNum"> 460</span> : // implies `bool_tensor += 5` is disallowed.</span>
<span id="L461"><span class="lineNum"> 461</span> : //</span>
<span id="L462"><span class="lineNum"> 462</span> : // NB: numpy distinguishes &quot;unsigned&quot; as a category to get the desired</span>
<span id="L463"><span class="lineNum"> 463</span> : // `bool_tensor + 5 -&gt; int64_tensor` behavior. We don't, because:</span>
<span id="L464"><span class="lineNum"> 464</span> : // * We don't want the performance hit of checking the runtime sign of</span>
<span id="L465"><span class="lineNum"> 465</span> : // Scalars.</span>
<span id="L466"><span class="lineNum"> 466</span> : // * `uint8_tensor + 5 -&gt; int64_tensor` would be undesirable.</span>
<span id="L467"><span class="lineNum"> 467</span> : if (from != ScalarType::Bool &amp;&amp; to == ScalarType::Bool) {</span>
<span id="L468"><span class="lineNum"> 468</span> : return false;</span>
<span id="L469"><span class="lineNum"> 469</span> : }</span>
<span id="L470"><span class="lineNum"> 470</span> : return true;</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> : static inline ScalarType promoteTypes(ScalarType a, ScalarType b) {</span>
<span id="L474"><span class="lineNum"> 474</span> : // This is generated according to NumPy's promote_types</span>
<span id="L475"><span class="lineNum"> 475</span> : constexpr auto u1 = ScalarType::Byte;</span>
<span id="L476"><span class="lineNum"> 476</span> : constexpr auto i1 = ScalarType::Char;</span>
<span id="L477"><span class="lineNum"> 477</span> : constexpr auto i2 = ScalarType::Short;</span>
<span id="L478"><span class="lineNum"> 478</span> : constexpr auto i4 = ScalarType::Int;</span>
<span id="L479"><span class="lineNum"> 479</span> : constexpr auto i8 = ScalarType::Long;</span>
<span id="L480"><span class="lineNum"> 480</span> : constexpr auto f2 = ScalarType::Half;</span>
<span id="L481"><span class="lineNum"> 481</span> : constexpr auto f4 = ScalarType::Float;</span>
<span id="L482"><span class="lineNum"> 482</span> : constexpr auto f8 = ScalarType::Double;</span>
<span id="L483"><span class="lineNum"> 483</span> : constexpr auto c2 = ScalarType::ComplexHalf;</span>
<span id="L484"><span class="lineNum"> 484</span> : constexpr auto c4 = ScalarType::ComplexFloat;</span>
<span id="L485"><span class="lineNum"> 485</span> : constexpr auto c8 = ScalarType::ComplexDouble;</span>
<span id="L486"><span class="lineNum"> 486</span> : constexpr auto b1 = ScalarType::Bool;</span>
<span id="L487"><span class="lineNum"> 487</span> : constexpr auto bf = ScalarType::BFloat16;</span>
<span id="L488"><span class="lineNum"> 488</span> : constexpr auto b8 = ScalarType::Float8_e5m2;</span>
<span id="L489"><span class="lineNum"> 489</span> : constexpr auto h8 = ScalarType::Float8_e4m3fn;</span>
<span id="L490"><span class="lineNum"> 490</span> : constexpr auto ud = ScalarType::Undefined;</span>
<span id="L491"><span class="lineNum"> 491</span> : if (a == ud || b == ud) {</span>
<span id="L492"><span class="lineNum"> 492</span> : return ScalarType::Undefined;</span>
<span id="L493"><span class="lineNum"> 493</span> : }</span>
<span id="L494"><span class="lineNum"> 494</span> : </span>
<span id="L495"><span class="lineNum"> 495</span> : // For QInt types, we only allow exact match</span>
<span id="L496"><span class="lineNum"> 496</span> : if (isQIntType(a) &amp;&amp; a == b) {</span>
<span id="L497"><span class="lineNum"> 497</span> : return a;</span>
<span id="L498"><span class="lineNum"> 498</span> : }</span>
<span id="L499"><span class="lineNum"> 499</span> : </span>
<span id="L500"><span class="lineNum"> 500</span> : if (isQIntType(a) || isQIntType(b)) {</span>
<span id="L501"><span class="lineNum"> 501</span> : TORCH_CHECK(</span>
<span id="L502"><span class="lineNum"> 502</span> : false,</span>
<span id="L503"><span class="lineNum"> 503</span> : &quot;promoteTypes with quantized numbers is not handled yet; figure out what the correct rules should be, offending types: &quot;,</span>
<span id="L504"><span class="lineNum"> 504</span> : toString(a),</span>
<span id="L505"><span class="lineNum"> 505</span> : &quot; &quot;,</span>
<span id="L506"><span class="lineNum"> 506</span> : toString(b));</span>
<span id="L507"><span class="lineNum"> 507</span> : }</span>
<span id="L508"><span class="lineNum"> 508</span> : </span>
<span id="L509"><span class="lineNum"> 509</span> : if (isBitsType(a) &amp;&amp; a == b) {</span>
<span id="L510"><span class="lineNum"> 510</span> : return a;</span>
<span id="L511"><span class="lineNum"> 511</span> : } else if (isBitsType(a) || isBitsType(b)) {</span>
<span id="L512"><span class="lineNum"> 512</span> : return ScalarType::Undefined;</span>
<span id="L513"><span class="lineNum"> 513</span> : }</span>
<span id="L514"><span class="lineNum"> 514</span> : </span>
<span id="L515"><span class="lineNum"> 515</span> : // Ignore the 5 bits types, since they are handled by the if statement</span>
<span id="L516"><span class="lineNum"> 516</span> : // above and do not participate in type promotion. The `5` value has to</span>
<span id="L517"><span class="lineNum"> 517</span> : // be consistent with the number of the unique `c10::bits*` types that</span>
<span id="L518"><span class="lineNum"> 518</span> : // exist.</span>
<span id="L519"><span class="lineNum"> 519</span> : const int NUM_PROMOTE_TYPES = static_cast&lt;int&gt;(ScalarType::NumOptions) - 5;</span>
<span id="L520"><span class="lineNum"> 520</span> : </span>
<span id="L521"><span class="lineNum"> 521</span> : // this matrix has to be consistent with</span>
<span id="L522"><span class="lineNum"> 522</span> : // AT_FORALL_SCALAR_TYPES_WITH_COMPLEX_AND_QINTS undefined is used where we</span>
<span id="L523"><span class="lineNum"> 523</span> : // are not sure about the correct value for type promotion.</span>
<span id="L524"><span class="lineNum"> 524</span> : // clang-format off</span>
<span id="L525"><span class="lineNum"> 525</span> : static constexpr ScalarType _promoteTypesLookup[</span>
<span id="L526"><span class="lineNum"> 526</span> : NUM_PROMOTE_TYPES][NUM_PROMOTE_TYPES] = {</span>
<span id="L527"><span class="lineNum"> 527</span> : /* u1 i1 i2 i4 i8 f2 f4 f8 c2 c4 c8 b1 q1 q2 q3 bf b8 h8*/</span>
<span id="L528"><span class="lineNum"> 528</span> : /* u1 */ {u1, i2, i2, i4, i8, f2, f4, f8, c2, c4, c8, u1, ud, ud, ud, bf, b8, h8},</span>
<span id="L529"><span class="lineNum"> 529</span> : /* i1 */ {i2, i1, i2, i4, i8, f2, f4, f8, c2, c4, c8, i1, ud, ud, ud, bf, b8, h8},</span>
<span id="L530"><span class="lineNum"> 530</span> : /* i2 */ {i2, i2, i2, i4, i8, f2, f4, f8, c2, c4, c8, i2, ud, ud, ud, bf, b8, h8},</span>
<span id="L531"><span class="lineNum"> 531</span> : /* i4 */ {i4, i4, i4, i4, i8, f2, f4, f8, c2, c4, c8, i4, ud, ud, ud, bf, b8, h8},</span>
<span id="L532"><span class="lineNum"> 532</span> : /* i8 */ {i8, i8, i8, i8, i8, f2, f4, f8, c2, c4, c8, i8, ud, ud, ud, bf, b8, h8},</span>
<span id="L533"><span class="lineNum"> 533</span> : /* f2 */ {f2, f2, f2, f2, f2, f2, f4, f8, c2, c4, c8, f2, ud, ud, ud, f4, f4, f4},</span>
<span id="L534"><span class="lineNum"> 534</span> : /* f4 */ {f4, f4, f4, f4, f4, f4, f4, f8, c4, c4, c8, f4, ud, ud, ud, f4, f4, f4},</span>
<span id="L535"><span class="lineNum"> 535</span> : /* f8 */ {f8, f8, f8, f8, f8, f8, f8, f8, c8, c8, c8, f8, ud, ud, ud, f8, f8, f8},</span>
<span id="L536"><span class="lineNum"> 536</span> : /* c2 */ {c2, c2, c2, c2, c2, c2, c4, c8, c2, c4, c8, c2, ud, ud, ud, c4, c4, c4},</span>
<span id="L537"><span class="lineNum"> 537</span> : /* c4 */ {c4, c4, c4, c4, c4, c4, c4, c8, c4, c4, c8, c4, ud, ud, ud, c4, c4, c4},</span>
<span id="L538"><span class="lineNum"> 538</span> : /* c8 */ {c8, c8, c8, c8, c8, c8, c8, c8, c8, c8, c8, c8, ud, ud, ud, c8, c8, c8},</span>
<span id="L539"><span class="lineNum"> 539</span> : /* b1 */ {u1, i1, i2, i4, i8, f2, f4, f8, c2, c4, c8, b1, ud, ud, ud, bf, b8, h8},</span>
<span id="L540"><span class="lineNum"> 540</span> : /* q1 */ {ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud},</span>
<span id="L541"><span class="lineNum"> 541</span> : /* q2 */ {ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud},</span>
<span id="L542"><span class="lineNum"> 542</span> : /* q3 */ {ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud},</span>
<span id="L543"><span class="lineNum"> 543</span> : /* bf */ {bf, bf, bf, bf, bf, f4, f4, f8, c4, c4, c8, bf, ud, ud, ud, bf, bf, bf},</span>
<span id="L544"><span class="lineNum"> 544</span> : /* b8 */ {b8, b8, b8, b8, b8, f4, f4, f8, c4, c4, c8, b8, ud, ud, ud, bf, b8, ud},</span>
<span id="L545"><span class="lineNum"> 545</span> : /* h8 */ {h8, h8, h8, h8, h8, f4, f4, f8, c4, c4, c8, h8, ud, ud, ud, bf, ud, h8},</span>
<span id="L546"><span class="lineNum"> 546</span> : };</span>
<span id="L547"><span class="lineNum"> 547</span> : // clang-format on</span>
<span id="L548"><span class="lineNum"> 548</span> : return _promoteTypesLookup[static_cast&lt;int&gt;(a)][static_cast&lt;int&gt;(b)];</span>
<span id="L549"><span class="lineNum"> 549</span> : }</span>
<span id="L550"><span class="lineNum"> 550</span> : </span>
<span id="L551"><span class="lineNum"> 551</span> <span class="tlaUNC tlaBgUNC"> 0 : inline std::ostream&amp; operator&lt;&lt;(</span></span>
<span id="L552"><span class="lineNum"> 552</span> : std::ostream&amp; stream,</span>
<span id="L553"><span class="lineNum"> 553</span> : at::ScalarType scalar_type) {</span>
<span id="L554"><span class="lineNum"> 554</span> <span class="tlaUNC"> 0 : return stream &lt;&lt; toString(scalar_type);</span></span>
<span id="L555"><span class="lineNum"> 555</span> : }</span>
<span id="L556"><span class="lineNum"> 556</span> : </span>
<span id="L557"><span class="lineNum"> 557</span> : } // 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,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/c10/core/ScalarTypeToTypeMeta.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/c10/core</a> - ScalarTypeToTypeMeta.h<span style="font-size: 80%;"> (<a href="ScalarTypeToTypeMeta.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">8</td>
<td class="headerCovTableEntry">8</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="ScalarTypeToTypeMeta.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="ScalarTypeToTypeMeta.h.gcov.html#L28">_ZN3c10L23optTypeMetaToScalarTypeENS_8optionalIN6caffe28TypeMetaEEE</a></td>
<td class="coverFnHi">418844</td>
</tr>
<tr>
<td class="coverFn"><a href="ScalarTypeToTypeMeta.h.gcov.html#L21">_ZN3c10L20typeMetaToScalarTypeEN6caffe28TypeMetaE</a></td>
<td class="coverFnHi">423800</td>
</tr>
<tr>
<td class="coverFn"><a href="ScalarTypeToTypeMeta.h.gcov.html#L14">_ZN3c10L20scalarTypeToTypeMetaENS_10ScalarTypeE</a></td>
<td class="coverFnHi">91449062</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/c10/core/ScalarTypeToTypeMeta.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/c10/core</a> - ScalarTypeToTypeMeta.h<span style="font-size: 80%;"> (<a href="ScalarTypeToTypeMeta.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">8</td>
<td class="headerCovTableEntry">8</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="ScalarTypeToTypeMeta.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="ScalarTypeToTypeMeta.h.gcov.html#L14">_ZN3c10L20scalarTypeToTypeMetaENS_10ScalarTypeE</a></td>
<td class="coverFnHi">91449062</td>
</tr>
<tr>
<td class="coverFn"><a href="ScalarTypeToTypeMeta.h.gcov.html#L21">_ZN3c10L20typeMetaToScalarTypeEN6caffe28TypeMetaE</a></td>
<td class="coverFnHi">423800</td>
</tr>
<tr>
<td class="coverFn"><a href="ScalarTypeToTypeMeta.h.gcov.html#L28">_ZN3c10L23optTypeMetaToScalarTypeENS_8optionalIN6caffe28TypeMetaEEE</a></td>
<td class="coverFnHi">418844</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,133 @@
<!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/c10/core/ScalarTypeToTypeMeta.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/c10/core</a> - ScalarTypeToTypeMeta.h<span style="font-size: 80%;"> (source / <a href="ScalarTypeToTypeMeta.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">8</td>
<td class="headerCovTableEntry">8</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;c10/core/ScalarType.h&gt;</span>
<span id="L4"><span class="lineNum"> 4</span> : #include &lt;c10/util/Optional.h&gt;</span>
<span id="L5"><span class="lineNum"> 5</span> : #include &lt;c10/util/typeid.h&gt;</span>
<span id="L6"><span class="lineNum"> 6</span> : </span>
<span id="L7"><span class="lineNum"> 7</span> : // these just expose TypeMeta/ScalarType bridge functions in c10</span>
<span id="L8"><span class="lineNum"> 8</span> : // TODO move to typeid.h (or codemod away) when TypeMeta et al</span>
<span id="L9"><span class="lineNum"> 9</span> : // are moved from caffe2 to c10 (see note at top of typeid.h)</span>
<span id="L10"><span class="lineNum"> 10</span> : </span>
<span id="L11"><span class="lineNum"> 11</span> : namespace c10 {</span>
<span id="L12"><span class="lineNum"> 12</span> : </span>
<span id="L13"><span class="lineNum"> 13</span> : /**</span>
<span id="L14"><span class="lineNum"> 14</span> : * convert ScalarType enum values to TypeMeta handles</span>
<span id="L15"><span class="lineNum"> 15</span> : */</span>
<span id="L16"><span class="lineNum"> 16</span> <span class="tlaGNC tlaBgGNC"> 91449062 : static inline caffe2::TypeMeta scalarTypeToTypeMeta(ScalarType scalar_type) {</span></span>
<span id="L17"><span class="lineNum"> 17</span> <span class="tlaGNC"> 91449062 : return caffe2::TypeMeta::fromScalarType(scalar_type);</span></span>
<span id="L18"><span class="lineNum"> 18</span> : }</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> : * convert TypeMeta handles to ScalarType enum values</span>
<span id="L22"><span class="lineNum"> 22</span> : */</span>
<span id="L23"><span class="lineNum"> 23</span> <span class="tlaGNC"> 423800 : static inline ScalarType typeMetaToScalarType(caffe2::TypeMeta dtype) {</span></span>
<span id="L24"><span class="lineNum"> 24</span> <span class="tlaGNC"> 423800 : return dtype.toScalarType();</span></span>
<span id="L25"><span class="lineNum"> 25</span> : }</span>
<span id="L26"><span class="lineNum"> 26</span> : </span>
<span id="L27"><span class="lineNum"> 27</span> : /**</span>
<span id="L28"><span class="lineNum"> 28</span> : * typeMetaToScalarType(), lifted to optional</span>
<span id="L29"><span class="lineNum"> 29</span> : */</span>
<span id="L30"><span class="lineNum"> 30</span> <span class="tlaGNC"> 418844 : static inline optional&lt;at::ScalarType&gt; optTypeMetaToScalarType(</span></span>
<span id="L31"><span class="lineNum"> 31</span> : optional&lt;caffe2::TypeMeta&gt; type_meta) {</span>
<span id="L32"><span class="lineNum"> 32</span> <span class="tlaGNC"> 418844 : if (!type_meta.has_value()) {</span></span>
<span id="L33"><span class="lineNum"> 33</span> <span class="tlaGNC"> 68 : return c10::nullopt;</span></span>
<span id="L34"><span class="lineNum"> 34</span> : }</span>
<span id="L35"><span class="lineNum"> 35</span> <span class="tlaGNC"> 418776 : return type_meta-&gt;toScalarType();</span></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> : * convenience: equality across TypeMeta/ScalarType conversion</span>
<span id="L40"><span class="lineNum"> 40</span> : */</span>
<span id="L41"><span class="lineNum"> 41</span> : static inline bool operator==(ScalarType t, caffe2::TypeMeta m) {</span>
<span id="L42"><span class="lineNum"> 42</span> : return m.isScalarType(t);</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> : static inline bool operator==(caffe2::TypeMeta m, ScalarType t) {</span>
<span id="L46"><span class="lineNum"> 46</span> : return t == m;</span>
<span id="L47"><span class="lineNum"> 47</span> : }</span>
<span id="L48"><span class="lineNum"> 48</span> : </span>
<span id="L49"><span class="lineNum"> 49</span> : static inline bool operator!=(ScalarType t, caffe2::TypeMeta m) {</span>
<span id="L50"><span class="lineNum"> 50</span> : return !(t == m);</span>
<span id="L51"><span class="lineNum"> 51</span> : }</span>
<span id="L52"><span class="lineNum"> 52</span> : </span>
<span id="L53"><span class="lineNum"> 53</span> : static inline bool operator!=(caffe2::TypeMeta m, ScalarType t) {</span>
<span id="L54"><span class="lineNum"> 54</span> : return !(t == m);</span>
<span id="L55"><span class="lineNum"> 55</span> : }</span>
<span id="L56"><span class="lineNum"> 56</span> : </span>
<span id="L57"><span class="lineNum"> 57</span> : } // 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,131 @@
<!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/c10/core/SymInt.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/c10/core</a> - SymInt.h<span style="font-size: 80%;"> (<a href="SymInt.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">71.0&nbsp;%</td>
<td class="headerCovTableEntry">31</td>
<td class="headerCovTableEntry">22</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="headerCovTableEntryMed">87.5&nbsp;%</td>
<td class="headerCovTableEntry">8</td>
<td class="headerCovTableEntry">7</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="SymInt.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="SymInt.h.gcov.html#L82">_ZNK3c106SymInt20toSymNodeImplUnownedEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SymInt.h.gcov.html#L58">_ZN3c106SymIntC2EOS0_</a></td>
<td class="coverFnHi">36174066</td>
</tr>
<tr>
<td class="coverFn"><a href="SymInt.h.gcov.html#L40">_ZN3c106SymIntC2Ev</a></td>
<td class="coverFnHi">110925612</td>
</tr>
<tr>
<td class="coverFn"><a href="SymInt.h.gcov.html#L72">_ZN3c106SymIntaSEOS0_</a></td>
<td class="coverFnHi">110925612</td>
</tr>
<tr>
<td class="coverFn"><a href="SymInt.h.gcov.html#L34">_ZN3c106SymIntC2El</a></td>
<td class="coverFnHi">168461706</td>
</tr>
<tr>
<td class="coverFn"><a href="SymInt.h.gcov.html#L115">_ZN3c106SymIntD2Ev</a></td>
<td class="coverFnHi">347570268</td>
</tr>
<tr>
<td class="coverFn"><a href="SymInt.h.gcov.html#L92">_ZN3c106SymInt8release_Ev</a></td>
<td class="coverFnHi">458495880</td>
</tr>
<tr>
<td class="coverFn"><a href="SymInt.h.gcov.html#L226">_ZN3c106SymInt11check_rangeEl</a></td>
<td class="coverFnHi">737930100</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,131 @@
<!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/c10/core/SymInt.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/c10/core</a> - SymInt.h<span style="font-size: 80%;"> (<a href="SymInt.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">71.0&nbsp;%</td>
<td class="headerCovTableEntry">31</td>
<td class="headerCovTableEntry">22</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="headerCovTableEntryMed">87.5&nbsp;%</td>
<td class="headerCovTableEntry">8</td>
<td class="headerCovTableEntry">7</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="SymInt.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="SymInt.h.gcov.html#L226">_ZN3c106SymInt11check_rangeEl</a></td>
<td class="coverFnHi">737930100</td>
</tr>
<tr>
<td class="coverFn"><a href="SymInt.h.gcov.html#L92">_ZN3c106SymInt8release_Ev</a></td>
<td class="coverFnHi">458495880</td>
</tr>
<tr>
<td class="coverFn"><a href="SymInt.h.gcov.html#L58">_ZN3c106SymIntC2EOS0_</a></td>
<td class="coverFnHi">36174066</td>
</tr>
<tr>
<td class="coverFn"><a href="SymInt.h.gcov.html#L34">_ZN3c106SymIntC2El</a></td>
<td class="coverFnHi">168461706</td>
</tr>
<tr>
<td class="coverFn"><a href="SymInt.h.gcov.html#L40">_ZN3c106SymIntC2Ev</a></td>
<td class="coverFnHi">110925612</td>
</tr>
<tr>
<td class="coverFn"><a href="SymInt.h.gcov.html#L115">_ZN3c106SymIntD2Ev</a></td>
<td class="coverFnHi">347570268</td>
</tr>
<tr>
<td class="coverFn"><a href="SymInt.h.gcov.html#L72">_ZN3c106SymIntaSEOS0_</a></td>
<td class="coverFnHi">110925612</td>
</tr>
<tr>
<td class="coverFn"><a href="SymInt.h.gcov.html#L82">_ZNK3c106SymInt20toSymNodeImplUnownedEv</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>

View File

@@ -0,0 +1,424 @@
<!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/c10/core/SymInt.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/c10/core</a> - SymInt.h<span style="font-size: 80%;"> (source / <a href="SymInt.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="headerCovTableEntryLo">71.0&nbsp;%</td>
<td class="headerCovTableEntry">31</td>
<td class="headerCovTableEntry">22</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="headerCovTableEntryMed">87.5&nbsp;%</td>
<td class="headerCovTableEntry">8</td>
<td class="headerCovTableEntry">7</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/core/SymBool.h&gt;</span>
<span id="L4"><span class="lineNum"> 4</span> : #include &lt;c10/core/SymNodeImpl.h&gt;</span>
<span id="L5"><span class="lineNum"> 5</span> : #include &lt;c10/macros/Macros.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/Optional.h&gt;</span>
<span id="L8"><span class="lineNum"> 8</span> : </span>
<span id="L9"><span class="lineNum"> 9</span> : #include &lt;numeric&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> : namespace c10 {</span>
<span id="L13"><span class="lineNum"> 13</span> : </span>
<span id="L14"><span class="lineNum"> 14</span> : class SymFloat;</span>
<span id="L15"><span class="lineNum"> 15</span> : </span>
<span id="L16"><span class="lineNum"> 16</span> : // SymInt represents either a regular int64_t, or a symbolic integer</span>
<span id="L17"><span class="lineNum"> 17</span> : // (represented in a type erased way as SymNode). The intention is for SymInt</span>
<span id="L18"><span class="lineNum"> 18</span> : // to represent symbolic sizes that arise when doing shape computation in</span>
<span id="L19"><span class="lineNum"> 19</span> : // operator kernels. This allows for tracing through programs without baking in</span>
<span id="L20"><span class="lineNum"> 20</span> : // concrete sizes into kernel calls.</span>
<span id="L21"><span class="lineNum"> 21</span> : //</span>
<span id="L22"><span class="lineNum"> 22</span> : // SymInt has an API equivalent to int64_t. In particular, it is a value type.</span>
<span id="L23"><span class="lineNum"> 23</span> : // Internally, SymInt is represented in a clever packed way, so that it only</span>
<span id="L24"><span class="lineNum"> 24</span> : // occupies one word of space; but morally, it is a union between an int64_t</span>
<span id="L25"><span class="lineNum"> 25</span> : // and an intrusive pointer to SymNodeImpl.</span>
<span id="L26"><span class="lineNum"> 26</span> : //</span>
<span id="L27"><span class="lineNum"> 27</span> : // Invariant: the referenced SymNodeImpl is guaranteed to be a SymNode where</span>
<span id="L28"><span class="lineNum"> 28</span> : // is_int() returns true</span>
<span id="L29"><span class="lineNum"> 29</span> : </span>
<span id="L30"><span class="lineNum"> 30</span> : class C10_API SymInt {</span>
<span id="L31"><span class="lineNum"> 31</span> : public:</span>
<span id="L32"><span class="lineNum"> 32</span> : enum Unchecked {</span>
<span id="L33"><span class="lineNum"> 33</span> : UNCHECKED,</span>
<span id="L34"><span class="lineNum"> 34</span> : };</span>
<span id="L35"><span class="lineNum"> 35</span> : </span>
<span id="L36"><span class="lineNum"> 36</span> <span class="tlaGNC tlaBgGNC"> 168461706 : /*implicit*/ SymInt(int64_t d) : data_(d) {</span></span>
<span id="L37"><span class="lineNum"> 37</span> <span class="tlaGNC"> 168461706 : if (is_heap_allocated()) {</span></span>
<span id="L38"><span class="lineNum"> 38</span> : // Large negative number, heap allocate it</span>
<span id="L39"><span class="lineNum"> 39</span> <span class="tlaUNC tlaBgUNC"> 0 : promote_to_negative();</span></span>
<span id="L40"><span class="lineNum"> 40</span> : }</span>
<span id="L41"><span class="lineNum"> 41</span> <span class="tlaGNC tlaBgGNC"> 168461706 : };</span></span>
<span id="L42"><span class="lineNum"> 42</span> <span class="tlaGNC"> 110925612 : SymInt() : data_(0) {}</span></span>
<span id="L43"><span class="lineNum"> 43</span> : SymInt(SymNode n);</span>
<span id="L44"><span class="lineNum"> 44</span> : </span>
<span id="L45"><span class="lineNum"> 45</span> : // unchecked c-tor accepting raw `data_`</span>
<span id="L46"><span class="lineNum"> 46</span> : // One appropriate use for this is when you are constructing a symint</span>
<span id="L47"><span class="lineNum"> 47</span> : // in a situation where you know it is non-negative (or, if it is negative,</span>
<span id="L48"><span class="lineNum"> 48</span> : // the negative value is -1; i.e., not user controlled)</span>
<span id="L49"><span class="lineNum"> 49</span> : SymInt(Unchecked, int64_t d) : data_(d) {}</span>
<span id="L50"><span class="lineNum"> 50</span> : </span>
<span id="L51"><span class="lineNum"> 51</span> : // TODO: these implementations are not optimal because they allocate a</span>
<span id="L52"><span class="lineNum"> 52</span> : // temporary and then use the move constructor/assignment</span>
<span id="L53"><span class="lineNum"> 53</span> : SymInt(const SymInt&amp; s) : data_(0) {</span>
<span id="L54"><span class="lineNum"> 54</span> : if (s.is_heap_allocated()) {</span>
<span id="L55"><span class="lineNum"> 55</span> : *this = SymInt(s.toSymNode());</span>
<span id="L56"><span class="lineNum"> 56</span> : } else {</span>
<span id="L57"><span class="lineNum"> 57</span> : data_ = s.data_;</span>
<span id="L58"><span class="lineNum"> 58</span> : }</span>
<span id="L59"><span class="lineNum"> 59</span> : }</span>
<span id="L60"><span class="lineNum"> 60</span> <span class="tlaGNC"> 36174066 : SymInt(SymInt&amp;&amp; s) noexcept : data_(s.data_) {</span></span>
<span id="L61"><span class="lineNum"> 61</span> <span class="tlaGNC"> 36174066 : s.data_ = 0;</span></span>
<span id="L62"><span class="lineNum"> 62</span> <span class="tlaGNC"> 36174066 : }</span></span>
<span id="L63"><span class="lineNum"> 63</span> : </span>
<span id="L64"><span class="lineNum"> 64</span> : SymInt&amp; operator=(const SymInt&amp; s) {</span>
<span id="L65"><span class="lineNum"> 65</span> : if (this != &amp;s) {</span>
<span id="L66"><span class="lineNum"> 66</span> : if (s.is_heap_allocated()) {</span>
<span id="L67"><span class="lineNum"> 67</span> : *this = SymInt(s.toSymNode());</span>
<span id="L68"><span class="lineNum"> 68</span> : } else {</span>
<span id="L69"><span class="lineNum"> 69</span> : data_ = s.data_;</span>
<span id="L70"><span class="lineNum"> 70</span> : }</span>
<span id="L71"><span class="lineNum"> 71</span> : }</span>
<span id="L72"><span class="lineNum"> 72</span> : return *this;</span>
<span id="L73"><span class="lineNum"> 73</span> : }</span>
<span id="L74"><span class="lineNum"> 74</span> <span class="tlaGNC"> 110925612 : SymInt&amp; operator=(SymInt&amp;&amp; s) noexcept {</span></span>
<span id="L75"><span class="lineNum"> 75</span> <span class="tlaGNC"> 110925612 : if (this != &amp;s) {</span></span>
<span id="L76"><span class="lineNum"> 76</span> <span class="tlaGNC"> 110925612 : release_(); // release the current SymNode if any</span></span>
<span id="L77"><span class="lineNum"> 77</span> <span class="tlaGNC"> 110925612 : data_ = s.data_;</span></span>
<span id="L78"><span class="lineNum"> 78</span> <span class="tlaGNC"> 110925612 : if (s.is_heap_allocated())</span></span>
<span id="L79"><span class="lineNum"> 79</span> <span class="tlaUNC tlaBgUNC"> 0 : s.data_ = 0;</span></span>
<span id="L80"><span class="lineNum"> 80</span> : };</span>
<span id="L81"><span class="lineNum"> 81</span> <span class="tlaGNC tlaBgGNC"> 110925612 : return *this;</span></span>
<span id="L82"><span class="lineNum"> 82</span> : }</span>
<span id="L83"><span class="lineNum"> 83</span> : </span>
<span id="L84"><span class="lineNum"> 84</span> <span class="tlaUNC tlaBgUNC"> 0 : SymNodeImpl* toSymNodeImplUnowned() const {</span></span>
<span id="L85"><span class="lineNum"> 85</span> <span class="tlaUNC"> 0 : TORCH_INTERNAL_ASSERT_DEBUG_ONLY(is_heap_allocated());</span></span>
<span id="L86"><span class="lineNum"> 86</span> <span class="tlaUNC"> 0 : uint64_t unextended_bits = static_cast&lt;uint64_t&gt;(data_) &amp; ~MASK;</span></span>
<span id="L87"><span class="lineNum"> 87</span> <span class="tlaUNC"> 0 : uint64_t sign_bit_mask = 1ULL &lt;&lt; (62 - 1);</span></span>
<span id="L88"><span class="lineNum"> 88</span> : // https://stackoverflow.com/questions/42534749/signed-extension-from-24-bit-to-32-bit-in-c</span>
<span id="L89"><span class="lineNum"> 89</span> <span class="tlaUNC"> 0 : uint64_t extended_bits = (unextended_bits ^ sign_bit_mask) - sign_bit_mask;</span></span>
<span id="L90"><span class="lineNum"> 90</span> : return static_cast&lt;SymNodeImpl*&gt;(</span>
<span id="L91"><span class="lineNum"> 91</span> <span class="tlaUNC"> 0 : reinterpret_cast&lt;void*&gt;(static_cast&lt;uintptr_t&gt;(extended_bits)));</span></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> <span class="tlaGNC tlaBgGNC"> 458495880 : void release_() {</span></span>
<span id="L95"><span class="lineNum"> 95</span> <span class="tlaGNC"> 458495880 : if (is_heap_allocated()) {</span></span>
<span id="L96"><span class="lineNum"> 96</span> <span class="tlaUNC tlaBgUNC"> 0 : SymNode::reclaim(toSymNodeImplUnowned()); // steal</span></span>
<span id="L97"><span class="lineNum"> 97</span> : }</span>
<span id="L98"><span class="lineNum"> 98</span> <span class="tlaGNC tlaBgGNC"> 458495880 : }</span></span>
<span id="L99"><span class="lineNum"> 99</span> : </span>
<span id="L100"><span class="lineNum"> 100</span> : SymNodeImpl* release() &amp;&amp; {</span>
<span id="L101"><span class="lineNum"> 101</span> : #ifndef C10_MOBILE</span>
<span id="L102"><span class="lineNum"> 102</span> : TORCH_INTERNAL_ASSERT(is_heap_allocated());</span>
<span id="L103"><span class="lineNum"> 103</span> : auto* r = toSymNodeImplUnowned();</span>
<span id="L104"><span class="lineNum"> 104</span> : data_ = 0; // transfer ownership</span>
<span id="L105"><span class="lineNum"> 105</span> : return r;</span>
<span id="L106"><span class="lineNum"> 106</span> : #else</span>
<span id="L107"><span class="lineNum"> 107</span> : TORCH_INTERNAL_ASSERT(false);</span>
<span id="L108"><span class="lineNum"> 108</span> : #endif</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> : // Only valid if is_heap_allocated()</span>
<span id="L112"><span class="lineNum"> 112</span> : SymNode toSymNode() const;</span>
<span id="L113"><span class="lineNum"> 113</span> : </span>
<span id="L114"><span class="lineNum"> 114</span> : // Guaranteed to return a SymNode, wrapping using base if necessary</span>
<span id="L115"><span class="lineNum"> 115</span> : SymNode wrap_node(const SymNode&amp; base) const;</span>
<span id="L116"><span class="lineNum"> 116</span> : </span>
<span id="L117"><span class="lineNum"> 117</span> <span class="tlaGNC"> 347570268 : ~SymInt() {</span></span>
<span id="L118"><span class="lineNum"> 118</span> <span class="tlaGNC"> 347570268 : release_();</span></span>
<span id="L119"><span class="lineNum"> 119</span> <span class="tlaGNC"> 347570268 : }</span></span>
<span id="L120"><span class="lineNum"> 120</span> : </span>
<span id="L121"><span class="lineNum"> 121</span> : // Require the int to be non-symbolic, and if it is symbolic raise an</span>
<span id="L122"><span class="lineNum"> 122</span> : // error. This is safe to use for C++ code that doesn't work for symbolic</span>
<span id="L123"><span class="lineNum"> 123</span> : // shapes, and you don't have time to fix it immediately, as if we</span>
<span id="L124"><span class="lineNum"> 124</span> : // try to trigger the path in C++ you'll appropriately get an error</span>
<span id="L125"><span class="lineNum"> 125</span> : int64_t expect_int() const {</span>
<span id="L126"><span class="lineNum"> 126</span> : if (auto r = maybe_as_int()) {</span>
<span id="L127"><span class="lineNum"> 127</span> : return *r;</span>
<span id="L128"><span class="lineNum"> 128</span> : }</span>
<span id="L129"><span class="lineNum"> 129</span> : TORCH_CHECK(false, &quot;expected int but got &quot;, *this);</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> : // Test if we have a hint for this int (e.g., guard_int would work).</span>
<span id="L133"><span class="lineNum"> 133</span> : // Most of the time this is true; it is only false when you have</span>
<span id="L134"><span class="lineNum"> 134</span> : // an unbacked SymInt.</span>
<span id="L135"><span class="lineNum"> 135</span> : bool has_hint() const;</span>
<span id="L136"><span class="lineNum"> 136</span> : </span>
<span id="L137"><span class="lineNum"> 137</span> : // Insert a guard for the int to be its concrete value, and then return</span>
<span id="L138"><span class="lineNum"> 138</span> : // that value. This operation always works, even if the int is symbolic,</span>
<span id="L139"><span class="lineNum"> 139</span> : // so long as we know what the underlying value is (e.g., this won't work</span>
<span id="L140"><span class="lineNum"> 140</span> : // if you call it on the size of nonzero output). Don't blindly put this</span>
<span id="L141"><span class="lineNum"> 141</span> : // everywhere; you can cause overspecialization of PyTorch programs with</span>
<span id="L142"><span class="lineNum"> 142</span> : // this method.</span>
<span id="L143"><span class="lineNum"> 143</span> : //</span>
<span id="L144"><span class="lineNum"> 144</span> : // It should be called as guard_int(__FILE__, __LINE__). The file and line</span>
<span id="L145"><span class="lineNum"> 145</span> : // number can be used to diagnose overspecialization.</span>
<span id="L146"><span class="lineNum"> 146</span> : int64_t guard_int(const char* file, int64_t line) const;</span>
<span id="L147"><span class="lineNum"> 147</span> : </span>
<span id="L148"><span class="lineNum"> 148</span> : // Distinguish actual symbolic values from constants stored on the heap</span>
<span id="L149"><span class="lineNum"> 149</span> : bool is_symbolic() const {</span>
<span id="L150"><span class="lineNum"> 150</span> : return is_heap_allocated() &amp;&amp;</span>
<span id="L151"><span class="lineNum"> 151</span> : !toSymNodeImplUnowned()-&gt;constant_int().has_value();</span>
<span id="L152"><span class="lineNum"> 152</span> : }</span>
<span id="L153"><span class="lineNum"> 153</span> : </span>
<span id="L154"><span class="lineNum"> 154</span> : // N.B. It's important to keep this definition in the header</span>
<span id="L155"><span class="lineNum"> 155</span> : // as we expect if checks to be folded for mobile builds</span>
<span id="L156"><span class="lineNum"> 156</span> : // where `is_heap_allocated` is always false and optimize dead code paths</span>
<span id="L157"><span class="lineNum"> 157</span> : C10_ALWAYS_INLINE bool is_heap_allocated() const {</span>
<span id="L158"><span class="lineNum"> 158</span> : #ifdef C10_MOBILE</span>
<span id="L159"><span class="lineNum"> 159</span> : return false;</span>
<span id="L160"><span class="lineNum"> 160</span> : #else</span>
<span id="L161"><span class="lineNum"> 161</span> <span class="tlaGNC"> 737883198 : return !check_range(data_);</span></span>
<span id="L162"><span class="lineNum"> 162</span> : #endif</span>
<span id="L163"><span class="lineNum"> 163</span> : }</span>
<span id="L164"><span class="lineNum"> 164</span> : </span>
<span id="L165"><span class="lineNum"> 165</span> : SymInt operator+(const SymInt&amp; sci) const;</span>
<span id="L166"><span class="lineNum"> 166</span> : SymInt operator-(const SymInt&amp; sci) const;</span>
<span id="L167"><span class="lineNum"> 167</span> : SymInt operator*(const SymInt&amp; sci) const;</span>
<span id="L168"><span class="lineNum"> 168</span> : SymInt operator/(const SymInt&amp; sci) const;</span>
<span id="L169"><span class="lineNum"> 169</span> : SymInt operator%(const SymInt&amp; sci) const;</span>
<span id="L170"><span class="lineNum"> 170</span> : void operator*=(const SymInt&amp; sci);</span>
<span id="L171"><span class="lineNum"> 171</span> : void operator+=(const SymInt&amp; sci);</span>
<span id="L172"><span class="lineNum"> 172</span> : void operator/=(const SymInt&amp; sci);</span>
<span id="L173"><span class="lineNum"> 173</span> : </span>
<span id="L174"><span class="lineNum"> 174</span> : SymInt clone() const;</span>
<span id="L175"><span class="lineNum"> 175</span> : </span>
<span id="L176"><span class="lineNum"> 176</span> : SymBool sym_eq(const SymInt&amp;) const;</span>
<span id="L177"><span class="lineNum"> 177</span> : SymBool sym_ne(const SymInt&amp;) const;</span>
<span id="L178"><span class="lineNum"> 178</span> : SymBool sym_lt(const SymInt&amp;) const;</span>
<span id="L179"><span class="lineNum"> 179</span> : SymBool sym_le(const SymInt&amp;) const;</span>
<span id="L180"><span class="lineNum"> 180</span> : SymBool sym_gt(const SymInt&amp;) const;</span>
<span id="L181"><span class="lineNum"> 181</span> : SymBool sym_ge(const SymInt&amp;) const;</span>
<span id="L182"><span class="lineNum"> 182</span> : </span>
<span id="L183"><span class="lineNum"> 183</span> : bool operator==(const SymInt&amp; o) const {</span>
<span id="L184"><span class="lineNum"> 184</span> : return sym_eq(o).guard_bool(__FILE__, __LINE__);</span>
<span id="L185"><span class="lineNum"> 185</span> : }</span>
<span id="L186"><span class="lineNum"> 186</span> : bool operator!=(const SymInt&amp; o) const {</span>
<span id="L187"><span class="lineNum"> 187</span> : return sym_ne(o).guard_bool(__FILE__, __LINE__);</span>
<span id="L188"><span class="lineNum"> 188</span> : }</span>
<span id="L189"><span class="lineNum"> 189</span> : bool operator&lt;(const SymInt&amp; o) const {</span>
<span id="L190"><span class="lineNum"> 190</span> : return sym_lt(o).guard_bool(__FILE__, __LINE__);</span>
<span id="L191"><span class="lineNum"> 191</span> : }</span>
<span id="L192"><span class="lineNum"> 192</span> : bool operator&lt;=(const SymInt&amp; o) const {</span>
<span id="L193"><span class="lineNum"> 193</span> : return sym_le(o).guard_bool(__FILE__, __LINE__);</span>
<span id="L194"><span class="lineNum"> 194</span> : }</span>
<span id="L195"><span class="lineNum"> 195</span> : bool operator&gt;(const SymInt&amp; o) const {</span>
<span id="L196"><span class="lineNum"> 196</span> : return sym_gt(o).guard_bool(__FILE__, __LINE__);</span>
<span id="L197"><span class="lineNum"> 197</span> : }</span>
<span id="L198"><span class="lineNum"> 198</span> : bool operator&gt;=(const SymInt&amp; o) const {</span>
<span id="L199"><span class="lineNum"> 199</span> : return sym_ge(o).guard_bool(__FILE__, __LINE__);</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> : SymInt min(const SymInt&amp; sci) const;</span>
<span id="L203"><span class="lineNum"> 203</span> : SymInt max(const SymInt&amp; sci) const;</span>
<span id="L204"><span class="lineNum"> 204</span> : </span>
<span id="L205"><span class="lineNum"> 205</span> : operator SymFloat() const;</span>
<span id="L206"><span class="lineNum"> 206</span> : </span>
<span id="L207"><span class="lineNum"> 207</span> : // Don't use this. Prefer maybe_as_int instead</span>
<span id="L208"><span class="lineNum"> 208</span> : int64_t as_int_unchecked() const {</span>
<span id="L209"><span class="lineNum"> 209</span> : TORCH_INTERNAL_ASSERT_DEBUG_ONLY(!is_heap_allocated());</span>
<span id="L210"><span class="lineNum"> 210</span> : return data_;</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> : c10::optional&lt;int64_t&gt; maybe_as_int() const {</span>
<span id="L214"><span class="lineNum"> 214</span> : if (!is_heap_allocated()) {</span>
<span id="L215"><span class="lineNum"> 215</span> : return c10::make_optional(data_);</span>
<span id="L216"><span class="lineNum"> 216</span> : }</span>
<span id="L217"><span class="lineNum"> 217</span> : auto* node = toSymNodeImplUnowned();</span>
<span id="L218"><span class="lineNum"> 218</span> : if (auto c = node-&gt;constant_int()) {</span>
<span id="L219"><span class="lineNum"> 219</span> : return c;</span>
<span id="L220"><span class="lineNum"> 220</span> : }</span>
<span id="L221"><span class="lineNum"> 221</span> : return node-&gt;maybe_as_int();</span>
<span id="L222"><span class="lineNum"> 222</span> : }</span>
<span id="L223"><span class="lineNum"> 223</span> : </span>
<span id="L224"><span class="lineNum"> 224</span> : // Return whether the integer is directly coercible to a SymInt</span>
<span id="L225"><span class="lineNum"> 225</span> : // without requiring heap allocation. You don't need to use this</span>
<span id="L226"><span class="lineNum"> 226</span> : // to check if you can pass an integer to SymInt; this is guaranteed</span>
<span id="L227"><span class="lineNum"> 227</span> : // to work (it just might heap allocate!)</span>
<span id="L228"><span class="lineNum"> 228</span> <span class="tlaGNC"> 737930100 : static bool check_range(int64_t i) {</span></span>
<span id="L229"><span class="lineNum"> 229</span> <span class="tlaGNC"> 737930100 : return i &gt; MAX_UNREPRESENTABLE_INT;</span></span>
<span id="L230"><span class="lineNum"> 230</span> : }</span>
<span id="L231"><span class="lineNum"> 231</span> : </span>
<span id="L232"><span class="lineNum"> 232</span> : // Return the min representable integer as a SymInt without</span>
<span id="L233"><span class="lineNum"> 233</span> : // heap allocation. For quantities that count bytes (or larger),</span>
<span id="L234"><span class="lineNum"> 234</span> : // this is still much larger than you need, so you may consider</span>
<span id="L235"><span class="lineNum"> 235</span> : // using this as a more efficient version of MIN_INT</span>
<span id="L236"><span class="lineNum"> 236</span> : static constexpr int64_t min_representable_int() {</span>
<span id="L237"><span class="lineNum"> 237</span> : return MAX_UNREPRESENTABLE_INT + 1;</span>
<span id="L238"><span class="lineNum"> 238</span> : }</span>
<span id="L239"><span class="lineNum"> 239</span> : </span>
<span id="L240"><span class="lineNum"> 240</span> : private:</span>
<span id="L241"><span class="lineNum"> 241</span> : void promote_to_negative();</span>
<span id="L242"><span class="lineNum"> 242</span> : </span>
<span id="L243"><span class="lineNum"> 243</span> : // Constraints on the internal representation:</span>
<span id="L244"><span class="lineNum"> 244</span> : //</span>
<span id="L245"><span class="lineNum"> 245</span> : // - Should represent positive and small negative ints</span>
<span id="L246"><span class="lineNum"> 246</span> : // - No conversion necessary for operations on ints</span>
<span id="L247"><span class="lineNum"> 247</span> : // - Must represent valid 64-bit pointers</span>
<span id="L248"><span class="lineNum"> 248</span> : // - Is symbolic test should be FAST (two arithmetic instructions is too</span>
<span id="L249"><span class="lineNum"> 249</span> : // much).</span>
<span id="L250"><span class="lineNum"> 250</span> : // This code being a hotpath is based on Strobelight profiles of</span>
<span id="L251"><span class="lineNum"> 251</span> : // is_heap_allocated(). FB only: https://fburl.com/strobelight/5l50ncxd</span>
<span id="L252"><span class="lineNum"> 252</span> : // (you will need to change the time window).</span>
<span id="L253"><span class="lineNum"> 253</span> : //</span>
<span id="L254"><span class="lineNum"> 254</span> : // So, the scheme is to reserve large negative numbers (assuming</span>
<span id="L255"><span class="lineNum"> 255</span> : // two's complement):</span>
<span id="L256"><span class="lineNum"> 256</span> : //</span>
<span id="L257"><span class="lineNum"> 257</span> : // - 0b0.... means we are a positive int</span>
<span id="L258"><span class="lineNum"> 258</span> : // - 0b11... means we are a small negative int</span>
<span id="L259"><span class="lineNum"> 259</span> : // - 0b10... means we are are a pointer. This means that</span>
<span id="L260"><span class="lineNum"> 260</span> : // [-2^63, -2^62-1] are not representable as ints.</span>
<span id="L261"><span class="lineNum"> 261</span> : // We don't actually need all of this space as on x86_64</span>
<span id="L262"><span class="lineNum"> 262</span> : // as the top 16bits aren't used for anything</span>
<span id="L263"><span class="lineNum"> 263</span> : static constexpr uint64_t MASK = 1ULL &lt;&lt; 63 | 1ULL &lt;&lt; 62 | 1ULL &lt;&lt; 61;</span>
<span id="L264"><span class="lineNum"> 264</span> : static constexpr uint64_t IS_SYM = 1ULL &lt;&lt; 63 | 1ULL &lt;&lt; 61;</span>
<span id="L265"><span class="lineNum"> 265</span> : // We must manually translate the bit pattern test into a greater</span>
<span id="L266"><span class="lineNum"> 266</span> : // than test because compiler doesn't figure it out:</span>
<span id="L267"><span class="lineNum"> 267</span> : // https://godbolt.org/z/356aferaW</span>
<span id="L268"><span class="lineNum"> 268</span> : static constexpr int64_t MAX_UNREPRESENTABLE_INT =</span>
<span id="L269"><span class="lineNum"> 269</span> : -1LL &amp; static_cast&lt;int64_t&gt;(~(1ULL &lt;&lt; 62));</span>
<span id="L270"><span class="lineNum"> 270</span> : int64_t data_;</span>
<span id="L271"><span class="lineNum"> 271</span> : };</span>
<span id="L272"><span class="lineNum"> 272</span> : </span>
<span id="L273"><span class="lineNum"> 273</span> : /// Sum of a list of SymInt; accumulates into the c10::SymInt expression</span>
<span id="L274"><span class="lineNum"> 274</span> : template &lt;</span>
<span id="L275"><span class="lineNum"> 275</span> : typename C,</span>
<span id="L276"><span class="lineNum"> 276</span> : typename std::enable_if&lt;</span>
<span id="L277"><span class="lineNum"> 277</span> : std::is_same&lt;typename C::value_type, c10::SymInt&gt;::value,</span>
<span id="L278"><span class="lineNum"> 278</span> : int&gt;::type = 0&gt;</span>
<span id="L279"><span class="lineNum"> 279</span> : inline c10::SymInt multiply_integers(const C&amp; container) {</span>
<span id="L280"><span class="lineNum"> 280</span> : return std::accumulate(</span>
<span id="L281"><span class="lineNum"> 281</span> : container.begin(),</span>
<span id="L282"><span class="lineNum"> 282</span> : container.end(),</span>
<span id="L283"><span class="lineNum"> 283</span> : c10::SymInt(1),</span>
<span id="L284"><span class="lineNum"> 284</span> : [](const c10::SymInt&amp; a, const c10::SymInt&amp; b) { return a * b; });</span>
<span id="L285"><span class="lineNum"> 285</span> : }</span>
<span id="L286"><span class="lineNum"> 286</span> : </span>
<span id="L287"><span class="lineNum"> 287</span> : template &lt;</span>
<span id="L288"><span class="lineNum"> 288</span> : typename Iter,</span>
<span id="L289"><span class="lineNum"> 289</span> : typename = std::enable_if_t&lt;std::is_same&lt;</span>
<span id="L290"><span class="lineNum"> 290</span> : typename std::iterator_traits&lt;Iter&gt;::value_type,</span>
<span id="L291"><span class="lineNum"> 291</span> : c10::SymInt&gt;::value&gt;&gt;</span>
<span id="L292"><span class="lineNum"> 292</span> : inline c10::SymInt multiply_integers(Iter begin, Iter end) {</span>
<span id="L293"><span class="lineNum"> 293</span> : return std::accumulate(</span>
<span id="L294"><span class="lineNum"> 294</span> : begin,</span>
<span id="L295"><span class="lineNum"> 295</span> : end,</span>
<span id="L296"><span class="lineNum"> 296</span> : c10::SymInt(1),</span>
<span id="L297"><span class="lineNum"> 297</span> : [](const c10::SymInt&amp; a, const c10::SymInt&amp; b) { return a * b; });</span>
<span id="L298"><span class="lineNum"> 298</span> : }</span>
<span id="L299"><span class="lineNum"> 299</span> : </span>
<span id="L300"><span class="lineNum"> 300</span> : #define DECLARE_SYMINT_OP_INTONLY(scalar_t, RetTy) \</span>
<span id="L301"><span class="lineNum"> 301</span> : C10_API RetTy operator%(const SymInt&amp; a, scalar_t b); \</span>
<span id="L302"><span class="lineNum"> 302</span> : C10_API RetTy operator%(scalar_t a, const SymInt&amp; b);</span>
<span id="L303"><span class="lineNum"> 303</span> : </span>
<span id="L304"><span class="lineNum"> 304</span> : #define DECLARE_SYMINT_OP(scalar_t, RetTy) \</span>
<span id="L305"><span class="lineNum"> 305</span> : C10_API RetTy operator+(const SymInt&amp; a, scalar_t b); \</span>
<span id="L306"><span class="lineNum"> 306</span> : C10_API RetTy operator-(const SymInt&amp; a, scalar_t b); \</span>
<span id="L307"><span class="lineNum"> 307</span> : C10_API RetTy operator*(const SymInt&amp; a, scalar_t b); \</span>
<span id="L308"><span class="lineNum"> 308</span> : C10_API RetTy operator/(const SymInt&amp; a, scalar_t b); \</span>
<span id="L309"><span class="lineNum"> 309</span> : C10_API RetTy operator+(scalar_t a, const SymInt&amp; b); \</span>
<span id="L310"><span class="lineNum"> 310</span> : C10_API RetTy operator-(scalar_t a, const SymInt&amp; b); \</span>
<span id="L311"><span class="lineNum"> 311</span> : C10_API RetTy operator*(scalar_t a, const SymInt&amp; b); \</span>
<span id="L312"><span class="lineNum"> 312</span> : C10_API RetTy operator/(scalar_t a, const SymInt&amp; b); \</span>
<span id="L313"><span class="lineNum"> 313</span> : C10_API bool operator==(const SymInt&amp; a, scalar_t b); \</span>
<span id="L314"><span class="lineNum"> 314</span> : C10_API bool operator!=(const SymInt&amp; a, scalar_t b); \</span>
<span id="L315"><span class="lineNum"> 315</span> : C10_API bool operator&lt;(const SymInt&amp; a, scalar_t b); \</span>
<span id="L316"><span class="lineNum"> 316</span> : C10_API bool operator&lt;=(const SymInt&amp; a, scalar_t b); \</span>
<span id="L317"><span class="lineNum"> 317</span> : C10_API bool operator&gt;(const SymInt&amp; a, scalar_t b); \</span>
<span id="L318"><span class="lineNum"> 318</span> : C10_API bool operator&gt;=(const SymInt&amp; a, scalar_t b); \</span>
<span id="L319"><span class="lineNum"> 319</span> : C10_API bool operator==(scalar_t a, const SymInt&amp; b); \</span>
<span id="L320"><span class="lineNum"> 320</span> : C10_API bool operator!=(scalar_t a, const SymInt&amp; b); \</span>
<span id="L321"><span class="lineNum"> 321</span> : C10_API bool operator&lt;(scalar_t a, const SymInt&amp; b); \</span>
<span id="L322"><span class="lineNum"> 322</span> : C10_API bool operator&lt;=(scalar_t a, const SymInt&amp; b); \</span>
<span id="L323"><span class="lineNum"> 323</span> : C10_API bool operator&gt;(scalar_t a, const SymInt&amp; b); \</span>
<span id="L324"><span class="lineNum"> 324</span> : C10_API bool operator&gt;=(scalar_t a, const SymInt&amp; b);</span>
<span id="L325"><span class="lineNum"> 325</span> : </span>
<span id="L326"><span class="lineNum"> 326</span> : DECLARE_SYMINT_OP_INTONLY(int64_t, SymInt)</span>
<span id="L327"><span class="lineNum"> 327</span> : DECLARE_SYMINT_OP_INTONLY(int32_t, SymInt)</span>
<span id="L328"><span class="lineNum"> 328</span> : DECLARE_SYMINT_OP_INTONLY(uint64_t, SymInt)</span>
<span id="L329"><span class="lineNum"> 329</span> : DECLARE_SYMINT_OP_INTONLY(uint32_t, SymInt)</span>
<span id="L330"><span class="lineNum"> 330</span> : DECLARE_SYMINT_OP(int64_t, SymInt)</span>
<span id="L331"><span class="lineNum"> 331</span> : DECLARE_SYMINT_OP(int32_t, SymInt) // make sure constants work</span>
<span id="L332"><span class="lineNum"> 332</span> : DECLARE_SYMINT_OP(uint64_t, SymInt)</span>
<span id="L333"><span class="lineNum"> 333</span> : DECLARE_SYMINT_OP(uint32_t, SymInt)</span>
<span id="L334"><span class="lineNum"> 334</span> : DECLARE_SYMINT_OP(double, SymFloat)</span>
<span id="L335"><span class="lineNum"> 335</span> : DECLARE_SYMINT_OP(float, SymFloat) // just for completeness</span>
<span id="L336"><span class="lineNum"> 336</span> : </span>
<span id="L337"><span class="lineNum"> 337</span> : // On OSX size_t is different than uint64_t so we have to</span>
<span id="L338"><span class="lineNum"> 338</span> : // define it separately</span>
<span id="L339"><span class="lineNum"> 339</span> : #if defined(__APPLE__)</span>
<span id="L340"><span class="lineNum"> 340</span> : DECLARE_SYMINT_OP_INTONLY(size_t, SymInt)</span>
<span id="L341"><span class="lineNum"> 341</span> : DECLARE_SYMINT_OP(size_t, SymInt)</span>
<span id="L342"><span class="lineNum"> 342</span> : #endif</span>
<span id="L343"><span class="lineNum"> 343</span> : </span>
<span id="L344"><span class="lineNum"> 344</span> : #undef DECLARE_SYMINT_OP</span>
<span id="L345"><span class="lineNum"> 345</span> : </span>
<span id="L346"><span class="lineNum"> 346</span> : C10_API std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const SymInt&amp; s);</span>
<span id="L347"><span class="lineNum"> 347</span> : C10_API SymInt operator-(const SymInt&amp; s);</span>
<span id="L348"><span class="lineNum"> 348</span> : } // 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/c10/core/SymIntArrayRef.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/c10/core</a> - SymIntArrayRef.h<span style="font-size: 80%;"> (<a href="SymIntArrayRef.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">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="SymIntArrayRef.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="SymIntArrayRef.h.gcov.html#L58">_ZN3c1019fromIntArrayRefSlowENS_8ArrayRefIlEE</a></td>
<td class="coverFnHi">17750</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/c10/core/SymIntArrayRef.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/c10/core</a> - SymIntArrayRef.h<span style="font-size: 80%;"> (<a href="SymIntArrayRef.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">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="SymIntArrayRef.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="SymIntArrayRef.h.gcov.html#L58">_ZN3c1019fromIntArrayRefSlowENS_8ArrayRefIlEE</a></td>
<td class="coverFnHi">17750</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,147 @@
<!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/c10/core/SymIntArrayRef.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/c10/core</a> - SymIntArrayRef.h<span style="font-size: 80%;"> (source / <a href="SymIntArrayRef.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">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;c10/core/SymInt.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> : #include &lt;c10/util/Optional.h&gt;</span>
<span id="L7"><span class="lineNum"> 7</span> : </span>
<span id="L8"><span class="lineNum"> 8</span> : namespace c10 {</span>
<span id="L9"><span class="lineNum"> 9</span> : using SymIntArrayRef = ArrayRef&lt;SymInt&gt;;</span>
<span id="L10"><span class="lineNum"> 10</span> : </span>
<span id="L11"><span class="lineNum"> 11</span> : inline at::IntArrayRef asIntArrayRefUnchecked(c10::SymIntArrayRef ar) {</span>
<span id="L12"><span class="lineNum"> 12</span> : return IntArrayRef(reinterpret_cast&lt;const int64_t*&gt;(ar.data()), ar.size());</span>
<span id="L13"><span class="lineNum"> 13</span> : }</span>
<span id="L14"><span class="lineNum"> 14</span> : </span>
<span id="L15"><span class="lineNum"> 15</span> : // TODO: a SymIntArrayRef containing a heap allocated large negative integer</span>
<span id="L16"><span class="lineNum"> 16</span> : // can actually technically be converted to an IntArrayRef... but not with</span>
<span id="L17"><span class="lineNum"> 17</span> : // the non-owning API we have here. We can't reinterpet cast; we have to</span>
<span id="L18"><span class="lineNum"> 18</span> : // allocate another buffer and write the integers into it. If you need it,</span>
<span id="L19"><span class="lineNum"> 19</span> : // we can do it. But I don't think you need it.</span>
<span id="L20"><span class="lineNum"> 20</span> : </span>
<span id="L21"><span class="lineNum"> 21</span> : inline c10::optional&lt;at::IntArrayRef&gt; asIntArrayRefSlowOpt(</span>
<span id="L22"><span class="lineNum"> 22</span> : c10::SymIntArrayRef ar) {</span>
<span id="L23"><span class="lineNum"> 23</span> : for (const c10::SymInt&amp; sci : ar) {</span>
<span id="L24"><span class="lineNum"> 24</span> : if (sci.is_heap_allocated()) {</span>
<span id="L25"><span class="lineNum"> 25</span> : return c10::nullopt;</span>
<span id="L26"><span class="lineNum"> 26</span> : }</span>
<span id="L27"><span class="lineNum"> 27</span> : }</span>
<span id="L28"><span class="lineNum"> 28</span> : </span>
<span id="L29"><span class="lineNum"> 29</span> : return {asIntArrayRefUnchecked(ar)};</span>
<span id="L30"><span class="lineNum"> 30</span> : }</span>
<span id="L31"><span class="lineNum"> 31</span> : </span>
<span id="L32"><span class="lineNum"> 32</span> : inline at::IntArrayRef asIntArrayRefSlow(</span>
<span id="L33"><span class="lineNum"> 33</span> : c10::SymIntArrayRef ar,</span>
<span id="L34"><span class="lineNum"> 34</span> : const char* file,</span>
<span id="L35"><span class="lineNum"> 35</span> : int64_t line) {</span>
<span id="L36"><span class="lineNum"> 36</span> : for (const c10::SymInt&amp; sci : ar) {</span>
<span id="L37"><span class="lineNum"> 37</span> : TORCH_CHECK(</span>
<span id="L38"><span class="lineNum"> 38</span> : !sci.is_heap_allocated(),</span>
<span id="L39"><span class="lineNum"> 39</span> : file,</span>
<span id="L40"><span class="lineNum"> 40</span> : &quot;:&quot;,</span>
<span id="L41"><span class="lineNum"> 41</span> : line,</span>
<span id="L42"><span class="lineNum"> 42</span> : &quot;: SymIntArrayRef expected to contain only concrete integers&quot;);</span>
<span id="L43"><span class="lineNum"> 43</span> : }</span>
<span id="L44"><span class="lineNum"> 44</span> : return asIntArrayRefUnchecked(ar);</span>
<span id="L45"><span class="lineNum"> 45</span> : }</span>
<span id="L46"><span class="lineNum"> 46</span> : </span>
<span id="L47"><span class="lineNum"> 47</span> : #define C10_AS_INTARRAYREF_SLOW(a) c10::asIntArrayRefSlow(a, __FILE__, __LINE__)</span>
<span id="L48"><span class="lineNum"> 48</span> : </span>
<span id="L49"><span class="lineNum"> 49</span> : // Prefer using a more semantic constructor, like</span>
<span id="L50"><span class="lineNum"> 50</span> : // fromIntArrayRefKnownNonNegative</span>
<span id="L51"><span class="lineNum"> 51</span> : inline SymIntArrayRef fromIntArrayRefUnchecked(IntArrayRef array_ref) {</span>
<span id="L52"><span class="lineNum"> 52</span> : return SymIntArrayRef(</span>
<span id="L53"><span class="lineNum"> 53</span> : reinterpret_cast&lt;const SymInt*&gt;(array_ref.data()), array_ref.size());</span>
<span id="L54"><span class="lineNum"> 54</span> : }</span>
<span id="L55"><span class="lineNum"> 55</span> : </span>
<span id="L56"><span class="lineNum"> 56</span> : inline SymIntArrayRef fromIntArrayRefKnownNonNegative(IntArrayRef array_ref) {</span>
<span id="L57"><span class="lineNum"> 57</span> : return fromIntArrayRefUnchecked(array_ref);</span>
<span id="L58"><span class="lineNum"> 58</span> : }</span>
<span id="L59"><span class="lineNum"> 59</span> : </span>
<span id="L60"><span class="lineNum"> 60</span> <span class="tlaGNC tlaBgGNC"> 17750 : inline SymIntArrayRef fromIntArrayRefSlow(IntArrayRef array_ref) {</span></span>
<span id="L61"><span class="lineNum"> 61</span> <span class="tlaGNC"> 64652 : for (long i : array_ref) {</span></span>
<span id="L62"><span class="lineNum"> 62</span> <span class="tlaGNC"> 46902 : TORCH_CHECK(</span></span>
<span id="L63"><span class="lineNum"> 63</span> : SymInt::check_range(i),</span>
<span id="L64"><span class="lineNum"> 64</span> : &quot;IntArrayRef contains an int that cannot be represented as a SymInt: &quot;,</span>
<span id="L65"><span class="lineNum"> 65</span> : i);</span>
<span id="L66"><span class="lineNum"> 66</span> : }</span>
<span id="L67"><span class="lineNum"> 67</span> <span class="tlaGNC"> 35500 : return SymIntArrayRef(</span></span>
<span id="L68"><span class="lineNum"> 68</span> <span class="tlaGNC"> 35500 : reinterpret_cast&lt;const SymInt*&gt;(array_ref.data()), array_ref.size());</span></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> : } // 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,159 @@
<!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/c10/core/TensorImpl.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/c10/core</a> - TensorImpl.h<span style="font-size: 80%;"> (<a href="TensorImpl.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">85.7&nbsp;%</td>
<td class="headerCovTableEntry">35</td>
<td class="headerCovTableEntry">30</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">12</td>
<td class="headerCovTableEntry">12</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="TensorImpl.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="TensorImpl.h.gcov.html#L770">_ZNK3c1010TensorImpl7stridesEv</a></td>
<td class="coverFnHi">80</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorImpl.h.gcov.html#L681">_ZNK3c1010TensorImpl5numelEv</a></td>
<td class="coverFnHi">500</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorImpl.h.gcov.html#L1867">_ZN3c1010TensorImpl32set_allow_tensor_metadata_changeEb</a></td>
<td class="coverFnHi">40076</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorImpl.h.gcov.html#L1039">_ZNK3c1010TensorImpl14unique_versionEv</a></td>
<td class="coverFnHi">40076</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorImpl.h.gcov.html#L340">_ZNK3c1015VariableVersion6uniqueEv</a></td>
<td class="coverFnHi">40076</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorImpl.h.gcov.html#L597">_ZNK3c1010TensorImpl5sizesEv</a></td>
<td class="coverFnHi">88706</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorImpl.h.gcov.html#L316">_ZN3c1015VariableVersion14VersionCounterC2Ej</a></td>
<td class="coverFnHi">378768</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorImpl.h.gcov.html#L346">_ZN3c1015VariableVersionC2Ej</a></td>
<td class="coverFnHi">378768</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorImpl.h.gcov.html#L1631">_ZNK3c1010TensorImpl5dtypeEv</a></td>
<td class="coverFnHi">402994</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorImpl.h.gcov.html#L877">_ZNK3c1010TensorImpl4sizeEl</a></td>
<td class="coverFnHi">15310736</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorImpl.h.gcov.html#L714">_ZNK3c1010TensorImpl3dimEv</a></td>
<td class="coverFnHi">15317888</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorImpl.h.gcov.html#L930">_ZNK3c1010TensorImpl14matches_policyENS0_18SizesStridesPolicyE</a></td>
<td class="coverFnHi">30717910</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,159 @@
<!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/c10/core/TensorImpl.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/c10/core</a> - TensorImpl.h<span style="font-size: 80%;"> (<a href="TensorImpl.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">85.7&nbsp;%</td>
<td class="headerCovTableEntry">35</td>
<td class="headerCovTableEntry">30</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">12</td>
<td class="headerCovTableEntry">12</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="TensorImpl.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="TensorImpl.h.gcov.html#L1867">_ZN3c1010TensorImpl32set_allow_tensor_metadata_changeEb</a></td>
<td class="coverFnHi">40076</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorImpl.h.gcov.html#L316">_ZN3c1015VariableVersion14VersionCounterC2Ej</a></td>
<td class="coverFnHi">378768</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorImpl.h.gcov.html#L346">_ZN3c1015VariableVersionC2Ej</a></td>
<td class="coverFnHi">378768</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorImpl.h.gcov.html#L930">_ZNK3c1010TensorImpl14matches_policyENS0_18SizesStridesPolicyE</a></td>
<td class="coverFnHi">30717910</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorImpl.h.gcov.html#L1039">_ZNK3c1010TensorImpl14unique_versionEv</a></td>
<td class="coverFnHi">40076</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorImpl.h.gcov.html#L714">_ZNK3c1010TensorImpl3dimEv</a></td>
<td class="coverFnHi">15317888</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorImpl.h.gcov.html#L877">_ZNK3c1010TensorImpl4sizeEl</a></td>
<td class="coverFnHi">15310736</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorImpl.h.gcov.html#L1631">_ZNK3c1010TensorImpl5dtypeEv</a></td>
<td class="coverFnHi">402994</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorImpl.h.gcov.html#L681">_ZNK3c1010TensorImpl5numelEv</a></td>
<td class="coverFnHi">500</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorImpl.h.gcov.html#L597">_ZNK3c1010TensorImpl5sizesEv</a></td>
<td class="coverFnHi">88706</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorImpl.h.gcov.html#L770">_ZNK3c1010TensorImpl7stridesEv</a></td>
<td class="coverFnHi">80</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorImpl.h.gcov.html#L340">_ZNK3c1015VariableVersion6uniqueEv</a></td>
<td class="coverFnHi">40076</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,250 @@
<!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/c10/core/TensorOptions.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/c10/core</a> - TensorOptions.h<span style="font-size: 80%;"> (<a href="TensorOptions.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">85.9&nbsp;%</td>
<td class="headerCovTableEntry">85</td>
<td class="headerCovTableEntry">73</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="headerCovTableEntryMed">84.0&nbsp;%</td>
<td class="headerCovTableEntry">25</td>
<td class="headerCovTableEntry">21</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="TensorOptions.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="TensorOptions.h.gcov.html#L151">_ZN3c1013TensorOptionsC2INS_6DeviceEvEEOT_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L35">_ZN3c1017device_or_defaultENS_8optionalINS_6DeviceEEE</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L270">_ZNK3c1013TensorOptions6deviceEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L36">_ZZN3c1017device_or_defaultENS_8optionalINS_6DeviceEEEENKUlvE_clEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L223">_ZNK3c1013TensorOptions5dtypeENS_8optionalINS_10ScalarTypeEEE</a></td>
<td class="coverFnHi">22824</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L176">_ZN3c1013TensorOptionsC2ENS_10ScalarTypeE</a></td>
<td class="coverFnHi">395952</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L188">_ZNK3c1013TensorOptions6deviceENS_8optionalINS_6DeviceEEE</a></td>
<td class="coverFnHi">401318</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L198">_ZNK3c1013TensorOptions6deviceIJRKNS_10DeviceTypeEEEES0_DpOT_</a></td>
<td class="coverFnHi">401318</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L296">_ZNK3c1013TensorOptions9has_dtypeEv</a></td>
<td class="coverFnHi">401318</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L453">_ZNR3c1013TensorOptions10set_deviceENS_8optionalINS_6DeviceEEE</a></td>
<td class="coverFnHi">401318</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L372">_ZNK3c1013TensorOptions17has_memory_formatEv</a></td>
<td class="coverFnHi">401402</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L381">_ZNK3c1013TensorOptions17memory_format_optEv</a></td>
<td class="coverFnHi">401402</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L334">_ZNK3c1013TensorOptions17requires_grad_optEv</a></td>
<td class="coverFnHi">401402</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L473">_ZNR3c1013TensorOptions9set_dtypeENS_8optionalINS_10ScalarTypeEEE</a></td>
<td class="coverFnHi">418776</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L281">_ZNK3c1013TensorOptions10device_optEv</a></td>
<td class="coverFnHi">418844</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L318">_ZNK3c1013TensorOptions10layout_optEv</a></td>
<td class="coverFnHi">418844</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L247">_ZNK3c1013TensorOptions13requires_gradENS_8optionalIbEE</a></td>
<td class="coverFnHi">418844</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L323">_ZNK3c1013TensorOptions13requires_gradEv</a></td>
<td class="coverFnHi">418844</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L366">_ZNK3c1013TensorOptions17pinned_memory_optEv</a></td>
<td class="coverFnHi">418844</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L302">_ZNK3c1013TensorOptions9dtype_optEv</a></td>
<td class="coverFnHi">418844</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L493">_ZNR3c1013TensorOptions17set_requires_gradENS_8optionalIbEE</a></td>
<td class="coverFnHi">418844</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L567">_ZN3c105dtypeENS_10ScalarTypeE</a></td>
<td class="coverFnHi">91030286</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L215">_ZNK3c1013TensorOptions5dtypeENS_8optionalIN6caffe28TypeMetaEEE</a></td>
<td class="coverFnHi">91030286</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L463">_ZNR3c1013TensorOptions9set_dtypeENS_8optionalIN6caffe28TypeMetaEEE</a></td>
<td class="coverFnHi">91030286</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L131">_ZN3c1013TensorOptionsC2Ev</a></td>
<td class="coverFnHi">91449130</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,250 @@
<!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/c10/core/TensorOptions.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/c10/core</a> - TensorOptions.h<span style="font-size: 80%;"> (<a href="TensorOptions.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">85.9&nbsp;%</td>
<td class="headerCovTableEntry">85</td>
<td class="headerCovTableEntry">73</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="headerCovTableEntryMed">84.0&nbsp;%</td>
<td class="headerCovTableEntry">25</td>
<td class="headerCovTableEntry">21</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="TensorOptions.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="TensorOptions.h.gcov.html#L176">_ZN3c1013TensorOptionsC2ENS_10ScalarTypeE</a></td>
<td class="coverFnHi">395952</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L131">_ZN3c1013TensorOptionsC2Ev</a></td>
<td class="coverFnHi">91449130</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L151">_ZN3c1013TensorOptionsC2INS_6DeviceEvEEOT_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L35">_ZN3c1017device_or_defaultENS_8optionalINS_6DeviceEEE</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L567">_ZN3c105dtypeENS_10ScalarTypeE</a></td>
<td class="coverFnHi">91030286</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L281">_ZNK3c1013TensorOptions10device_optEv</a></td>
<td class="coverFnHi">418844</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L318">_ZNK3c1013TensorOptions10layout_optEv</a></td>
<td class="coverFnHi">418844</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L247">_ZNK3c1013TensorOptions13requires_gradENS_8optionalIbEE</a></td>
<td class="coverFnHi">418844</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L323">_ZNK3c1013TensorOptions13requires_gradEv</a></td>
<td class="coverFnHi">418844</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L372">_ZNK3c1013TensorOptions17has_memory_formatEv</a></td>
<td class="coverFnHi">401402</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L381">_ZNK3c1013TensorOptions17memory_format_optEv</a></td>
<td class="coverFnHi">401402</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L366">_ZNK3c1013TensorOptions17pinned_memory_optEv</a></td>
<td class="coverFnHi">418844</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L334">_ZNK3c1013TensorOptions17requires_grad_optEv</a></td>
<td class="coverFnHi">401402</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L215">_ZNK3c1013TensorOptions5dtypeENS_8optionalIN6caffe28TypeMetaEEE</a></td>
<td class="coverFnHi">91030286</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L223">_ZNK3c1013TensorOptions5dtypeENS_8optionalINS_10ScalarTypeEEE</a></td>
<td class="coverFnHi">22824</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L188">_ZNK3c1013TensorOptions6deviceENS_8optionalINS_6DeviceEEE</a></td>
<td class="coverFnHi">401318</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L270">_ZNK3c1013TensorOptions6deviceEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L198">_ZNK3c1013TensorOptions6deviceIJRKNS_10DeviceTypeEEEES0_DpOT_</a></td>
<td class="coverFnHi">401318</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L302">_ZNK3c1013TensorOptions9dtype_optEv</a></td>
<td class="coverFnHi">418844</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L296">_ZNK3c1013TensorOptions9has_dtypeEv</a></td>
<td class="coverFnHi">401318</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L453">_ZNR3c1013TensorOptions10set_deviceENS_8optionalINS_6DeviceEEE</a></td>
<td class="coverFnHi">401318</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L493">_ZNR3c1013TensorOptions17set_requires_gradENS_8optionalIbEE</a></td>
<td class="coverFnHi">418844</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L463">_ZNR3c1013TensorOptions9set_dtypeENS_8optionalIN6caffe28TypeMetaEEE</a></td>
<td class="coverFnHi">91030286</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L473">_ZNR3c1013TensorOptions9set_dtypeENS_8optionalINS_10ScalarTypeEEE</a></td>
<td class="coverFnHi">418776</td>
</tr>
<tr>
<td class="coverFn"><a href="TensorOptions.h.gcov.html#L36">_ZZN3c1017device_or_defaultENS_8optionalINS_6DeviceEEEENKUlvE_clEv</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>

View File

@@ -0,0 +1,848 @@
<!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/c10/core/TensorOptions.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/c10/core</a> - TensorOptions.h<span style="font-size: 80%;"> (source / <a href="TensorOptions.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">85.9&nbsp;%</td>
<td class="headerCovTableEntry">85</td>
<td class="headerCovTableEntry">73</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="headerCovTableEntryMed">84.0&nbsp;%</td>
<td class="headerCovTableEntry">25</td>
<td class="headerCovTableEntry">21</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/core/Backend.h&gt;</span>
<span id="L4"><span class="lineNum"> 4</span> : #include &lt;c10/core/DefaultDtype.h&gt;</span>
<span id="L5"><span class="lineNum"> 5</span> : #include &lt;c10/core/Device.h&gt;</span>
<span id="L6"><span class="lineNum"> 6</span> : #include &lt;c10/core/Layout.h&gt;</span>
<span id="L7"><span class="lineNum"> 7</span> : #include &lt;c10/core/MemoryFormat.h&gt;</span>
<span id="L8"><span class="lineNum"> 8</span> : #include &lt;c10/core/ScalarType.h&gt;</span>
<span id="L9"><span class="lineNum"> 9</span> : #include &lt;c10/core/ScalarTypeToTypeMeta.h&gt;</span>
<span id="L10"><span class="lineNum"> 10</span> : </span>
<span id="L11"><span class="lineNum"> 11</span> : #include &lt;c10/macros/Macros.h&gt;</span>
<span id="L12"><span class="lineNum"> 12</span> : #include &lt;c10/util/Optional.h&gt;</span>
<span id="L13"><span class="lineNum"> 13</span> : </span>
<span id="L14"><span class="lineNum"> 14</span> : #include &lt;iosfwd&gt;</span>
<span id="L15"><span class="lineNum"> 15</span> : #include &lt;utility&gt;</span>
<span id="L16"><span class="lineNum"> 16</span> : </span>
<span id="L17"><span class="lineNum"> 17</span> : namespace c10 {</span>
<span id="L18"><span class="lineNum"> 18</span> : </span>
<span id="L19"><span class="lineNum"> 19</span> : DispatchKey computeDispatchKey(</span>
<span id="L20"><span class="lineNum"> 20</span> : c10::optional&lt;ScalarType&gt; dtype,</span>
<span id="L21"><span class="lineNum"> 21</span> : c10::optional&lt;Layout&gt; layout,</span>
<span id="L22"><span class="lineNum"> 22</span> : c10::optional&lt;Device&gt; device);</span>
<span id="L23"><span class="lineNum"> 23</span> : </span>
<span id="L24"><span class="lineNum"> 24</span> : inline ScalarType dtype_or_default(c10::optional&lt;ScalarType&gt; dtype) {</span>
<span id="L25"><span class="lineNum"> 25</span> : return value_or_else(dtype, [] { return get_default_dtype_as_scalartype(); });</span>
<span id="L26"><span class="lineNum"> 26</span> : }</span>
<span id="L27"><span class="lineNum"> 27</span> : </span>
<span id="L28"><span class="lineNum"> 28</span> : inline caffe2::TypeMeta dtype_or_default(</span>
<span id="L29"><span class="lineNum"> 29</span> : c10::optional&lt;caffe2::TypeMeta&gt; dtype) {</span>
<span id="L30"><span class="lineNum"> 30</span> : return value_or_else(dtype, [] { return get_default_dtype(); });</span>
<span id="L31"><span class="lineNum"> 31</span> : }</span>
<span id="L32"><span class="lineNum"> 32</span> : </span>
<span id="L33"><span class="lineNum"> 33</span> : inline Layout layout_or_default(c10::optional&lt;Layout&gt; layout) {</span>
<span id="L34"><span class="lineNum"> 34</span> : return layout.value_or(kStrided);</span>
<span id="L35"><span class="lineNum"> 35</span> : }</span>
<span id="L36"><span class="lineNum"> 36</span> : </span>
<span id="L37"><span class="lineNum"> 37</span> <span class="tlaUNC tlaBgUNC"> 0 : inline Device device_or_default(c10::optional&lt;Device&gt; device) {</span></span>
<span id="L38"><span class="lineNum"> 38</span> <span class="tlaUNC"> 0 : return value_or_else(device, [] { return Device(kCPU); });</span></span>
<span id="L39"><span class="lineNum"> 39</span> : }</span>
<span id="L40"><span class="lineNum"> 40</span> : </span>
<span id="L41"><span class="lineNum"> 41</span> : inline bool pinned_memory_or_default(c10::optional&lt;bool&gt; pinned_memory) {</span>
<span id="L42"><span class="lineNum"> 42</span> : return pinned_memory.value_or(false);</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> : /// A class to encapsulate construction axes of an Tensor. TensorOptions was</span>
<span id="L46"><span class="lineNum"> 46</span> : /// designed to support the Python style API for specifying construction options</span>
<span id="L47"><span class="lineNum"> 47</span> : /// on factory functions, e.g.,</span>
<span id="L48"><span class="lineNum"> 48</span> : ///</span>
<span id="L49"><span class="lineNum"> 49</span> : /// torch.zeros(2, 3, dtype=torch.int32)</span>
<span id="L50"><span class="lineNum"> 50</span> : ///</span>
<span id="L51"><span class="lineNum"> 51</span> : /// Because C++ doesn't natively support keyword arguments, there must be</span>
<span id="L52"><span class="lineNum"> 52</span> : /// another way of specifying keyword-like arguments. TensorOptions is a</span>
<span id="L53"><span class="lineNum"> 53</span> : /// builder class which can be used to construct this &quot;dictionary&quot; of keyword</span>
<span id="L54"><span class="lineNum"> 54</span> : /// arguments: functions which support TensorOptions conventionally take this</span>
<span id="L55"><span class="lineNum"> 55</span> : /// argument optionally as their last argument.</span>
<span id="L56"><span class="lineNum"> 56</span> : ///</span>
<span id="L57"><span class="lineNum"> 57</span> : /// WARNING: In PyTorch, there are `torch::` variants of factory functions,</span>
<span id="L58"><span class="lineNum"> 58</span> : /// e.g., torch::zeros for at::zeros. These return Variables (while the</span>
<span id="L59"><span class="lineNum"> 59</span> : /// stock ATen functions return plain Tensors). If you mix these functions</span>
<span id="L60"><span class="lineNum"> 60</span> : /// up, you WILL BE SAD.</span>
<span id="L61"><span class="lineNum"> 61</span> : ///</span>
<span id="L62"><span class="lineNum"> 62</span> : /// Rather than use the constructor of this class directly, you should prefer to</span>
<span id="L63"><span class="lineNum"> 63</span> : /// use the constructor functions, and then chain setter methods on top of them.</span>
<span id="L64"><span class="lineNum"> 64</span> : ///</span>
<span id="L65"><span class="lineNum"> 65</span> : /// at::device(at::kCUDA).dtype(kInt)</span>
<span id="L66"><span class="lineNum"> 66</span> : /// at::dtype(at::kInt)</span>
<span id="L67"><span class="lineNum"> 67</span> : ///</span>
<span id="L68"><span class="lineNum"> 68</span> : /// Additionally, anywhere a TensorOptions is expected, you can directly</span>
<span id="L69"><span class="lineNum"> 69</span> : /// pass at::kCUDA / at::kInt, and it will implicitly convert to a</span>
<span id="L70"><span class="lineNum"> 70</span> : /// TensorOptions.</span>
<span id="L71"><span class="lineNum"> 71</span> : ///</span>
<span id="L72"><span class="lineNum"> 72</span> : /// Here are some recommended ways to create a 2x2 tensor of zeros</span>
<span id="L73"><span class="lineNum"> 73</span> : /// with certain properties. These all *implicitly* make use of</span>
<span id="L74"><span class="lineNum"> 74</span> : /// TensorOptions, even if they don't mention the class explicitly:</span>
<span id="L75"><span class="lineNum"> 75</span> : ///</span>
<span id="L76"><span class="lineNum"> 76</span> : /// at::zeros({2,2}, at::kCUDA);</span>
<span id="L77"><span class="lineNum"> 77</span> : /// at::zeros({2,2}, at::kLong);</span>
<span id="L78"><span class="lineNum"> 78</span> : /// at::zeros({2,2}, at::device(at::kCUDA).dtype(at::kLong()));</span>
<span id="L79"><span class="lineNum"> 79</span> : /// at::zeros({2,2}, at::device({at::kCUDA, 1})); // place on device 1</span>
<span id="L80"><span class="lineNum"> 80</span> : /// at::zeros({2,2}, at::requires_grad());</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> : /// NOTE [ TensorOptions Constructors ]</span>
<span id="L84"><span class="lineNum"> 84</span> : ///</span>
<span id="L85"><span class="lineNum"> 85</span> : /// TensorOptions is like a dictionary with entries from the set:</span>
<span id="L86"><span class="lineNum"> 86</span> : /// {requires_grad, device, dtype, layout}, where each entry may be</span>
<span id="L87"><span class="lineNum"> 87</span> : /// unspecified (i.e., is optional). It is used to specify the properties of</span>
<span id="L88"><span class="lineNum"> 88</span> : /// tensors in many places both in C++ internal and API, e.g., tensor factory</span>
<span id="L89"><span class="lineNum"> 89</span> : /// methods like `at::empty({10}, options)`, tensor conversions like</span>
<span id="L90"><span class="lineNum"> 90</span> : /// `tensor.to(...)`, etc.</span>
<span id="L91"><span class="lineNum"> 91</span> : ///</span>
<span id="L92"><span class="lineNum"> 92</span> : /// To provide a simple API that is consistent with Python, where one can do</span>
<span id="L93"><span class="lineNum"> 93</span> : /// `torch.empty(sizes, X)` with `X` being a `torch.device`, `torch.dtype`, or a</span>
<span id="L94"><span class="lineNum"> 94</span> : /// `torch.layout`, we want TensorOptions to be implicitly convertible from</span>
<span id="L95"><span class="lineNum"> 95</span> : /// `ScalarType dtype`, `Layout layout` and `Device device`. Therefore, we have</span>
<span id="L96"><span class="lineNum"> 96</span> : /// three implicit constructors from each of these three types.</span>
<span id="L97"><span class="lineNum"> 97</span> : ///</span>
<span id="L98"><span class="lineNum"> 98</span> : /// This is sufficient for `ScalarType` and `Layout` as they are simple Enum</span>
<span id="L99"><span class="lineNum"> 99</span> : /// classes. However, `Device` is an ordinary class with implicit constructors</span>
<span id="L100"><span class="lineNum"> 100</span> : /// `Device(DeviceType, DeviceIndex = -1)` and `Device(std::string)` to be</span>
<span id="L101"><span class="lineNum"> 101</span> : /// consistent with Python API, where strings are treated as equivalent with a</span>
<span id="L102"><span class="lineNum"> 102</span> : /// `torch.device` object (e.g., &quot;cuda:1&quot; can be passed to everywhere a</span>
<span id="L103"><span class="lineNum"> 103</span> : /// `torch.device(&quot;cuda:1&quot;)` is accepted). To support the syntax</span>
<span id="L104"><span class="lineNum"> 104</span> : /// `at::empty({10}, {kCUDA, 1})` and `tensor.to(kCUDA)`, we need to make sure</span>
<span id="L105"><span class="lineNum"> 105</span> : /// that `TensorOptions` is implicitly constructible with any arguments that a</span>
<span id="L106"><span class="lineNum"> 106</span> : /// `Device` can constructed from. So we have,</span>
<span id="L107"><span class="lineNum"> 107</span> : ///</span>
<span id="L108"><span class="lineNum"> 108</span> : /// /* implicit */ TensorOptions(T&amp;&amp; device) : TensorOptions() {</span>
<span id="L109"><span class="lineNum"> 109</span> : /// this-&gt;set_device(device);</span>
<span id="L110"><span class="lineNum"> 110</span> : /// }</span>
<span id="L111"><span class="lineNum"> 111</span> : ///</span>
<span id="L112"><span class="lineNum"> 112</span> : /// template &lt;typename... Args,</span>
<span id="L113"><span class="lineNum"> 113</span> : /// typename = std::enable_if_t&lt;std::is_constructible&lt;Device,</span>
<span id="L114"><span class="lineNum"> 114</span> : /// Args&amp;&amp;...&gt;::value&gt;&gt;</span>
<span id="L115"><span class="lineNum"> 115</span> : /// /* implicit */ TensorOptions(Args&amp;&amp;... args)</span>
<span id="L116"><span class="lineNum"> 116</span> : /// : TensorOptions(Device(std::forward&lt;Args&gt;(args)...)) {}</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> : /// But this will be problematic. Consider this: `TensorOptions({kCUDA, 1})`.</span>
<span id="L120"><span class="lineNum"> 120</span> : /// Compiler will complain about ambiguity between the copy constructor and the</span>
<span id="L121"><span class="lineNum"> 121</span> : /// `Device` constructor because `{kCUDA, 1}` can be converted to both a</span>
<span id="L122"><span class="lineNum"> 122</span> : /// `TensorOption` and a `Device`.</span>
<span id="L123"><span class="lineNum"> 123</span> : ///</span>
<span id="L124"><span class="lineNum"> 124</span> : /// To get around this, we templatize the `Device` constructor. Since overload</span>
<span id="L125"><span class="lineNum"> 125</span> : /// resolution is done before template resolution, our problem is solved.</span>
<span id="L126"><span class="lineNum"> 126</span> : </span>
<span id="L127"><span class="lineNum"> 127</span> : DispatchKey computeDispatchKey(</span>
<span id="L128"><span class="lineNum"> 128</span> : optional&lt;ScalarType&gt; dtype,</span>
<span id="L129"><span class="lineNum"> 129</span> : optional&lt;Layout&gt; layout,</span>
<span id="L130"><span class="lineNum"> 130</span> : optional&lt;Device&gt; device);</span>
<span id="L131"><span class="lineNum"> 131</span> : </span>
<span id="L132"><span class="lineNum"> 132</span> : struct C10_API TensorOptions {</span>
<span id="L133"><span class="lineNum"> 133</span> <span class="tlaGNC tlaBgGNC"> 91449130 : TensorOptions()</span></span>
<span id="L134"><span class="lineNum"> 134</span> <span class="tlaGNC"> 182898260 : : requires_grad_(false),</span></span>
<span id="L135"><span class="lineNum"> 135</span> <span class="tlaGNC"> 91449130 : pinned_memory_(false),</span></span>
<span id="L136"><span class="lineNum"> 136</span> <span class="tlaGNC"> 91449130 : has_device_(false),</span></span>
<span id="L137"><span class="lineNum"> 137</span> <span class="tlaGNC"> 91449130 : has_dtype_(false),</span></span>
<span id="L138"><span class="lineNum"> 138</span> <span class="tlaGNC"> 91449130 : has_layout_(false),</span></span>
<span id="L139"><span class="lineNum"> 139</span> <span class="tlaGNC"> 91449130 : has_requires_grad_(false),</span></span>
<span id="L140"><span class="lineNum"> 140</span> <span class="tlaGNC"> 91449130 : has_pinned_memory_(false),</span></span>
<span id="L141"><span class="lineNum"> 141</span> <span class="tlaGNC"> 91449130 : has_memory_format_(false) {}</span></span>
<span id="L142"><span class="lineNum"> 142</span> : </span>
<span id="L143"><span class="lineNum"> 143</span> : /// Constructs a `TensorOptions` object with the given layout.</span>
<span id="L144"><span class="lineNum"> 144</span> : /* implicit */ TensorOptions(Layout layout) : TensorOptions() {</span>
<span id="L145"><span class="lineNum"> 145</span> : this-&gt;set_layout(layout);</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> : /// Constructs a `TensorOptions` object with the given device.</span>
<span id="L149"><span class="lineNum"> 149</span> : /// See NOTE [ TensorOptions Constructors ] on why this is templatized.</span>
<span id="L150"><span class="lineNum"> 150</span> : template &lt;</span>
<span id="L151"><span class="lineNum"> 151</span> : typename T,</span>
<span id="L152"><span class="lineNum"> 152</span> : typename = std::enable_if_t&lt;std::is_same&lt;std::decay_t&lt;T&gt;, Device&gt;::value&gt;&gt;</span>
<span id="L153"><span class="lineNum"> 153</span> <span class="tlaUNC tlaBgUNC"> 0 : /* implicit */ TensorOptions(T&amp;&amp; device) : TensorOptions() {</span></span>
<span id="L154"><span class="lineNum"> 154</span> <span class="tlaUNC"> 0 : this-&gt;set_device(std::forward&lt;T&gt;(device));</span></span>
<span id="L155"><span class="lineNum"> 155</span> <span class="tlaUNC"> 0 : }</span></span>
<span id="L156"><span class="lineNum"> 156</span> : </span>
<span id="L157"><span class="lineNum"> 157</span> : /// Constructs a `TensorOptions` object from arguments allowed in `Device`</span>
<span id="L158"><span class="lineNum"> 158</span> : /// constructors.</span>
<span id="L159"><span class="lineNum"> 159</span> : ///</span>
<span id="L160"><span class="lineNum"> 160</span> : /// See NOTE [ TensorOptions Constructors ].</span>
<span id="L161"><span class="lineNum"> 161</span> : ///</span>
<span id="L162"><span class="lineNum"> 162</span> : /// NB: Ideally we only allow implicit constructors here. But there is no easy</span>
<span id="L163"><span class="lineNum"> 163</span> : /// way to detect them. So we have this one that allows explicit</span>
<span id="L164"><span class="lineNum"> 164</span> : /// constructors too.</span>
<span id="L165"><span class="lineNum"> 165</span> : template &lt;</span>
<span id="L166"><span class="lineNum"> 166</span> : typename... Args,</span>
<span id="L167"><span class="lineNum"> 167</span> : typename =</span>
<span id="L168"><span class="lineNum"> 168</span> : std::enable_if_t&lt;std::is_constructible&lt;Device, Args&amp;&amp;...&gt;::value&gt;&gt;</span>
<span id="L169"><span class="lineNum"> 169</span> : /* implicit */ TensorOptions(Args&amp;&amp;... args)</span>
<span id="L170"><span class="lineNum"> 170</span> : : TensorOptions(Device(std::forward&lt;Args&gt;(args)...)) {}</span>
<span id="L171"><span class="lineNum"> 171</span> : </span>
<span id="L172"><span class="lineNum"> 172</span> : /// Constructs a `TensorOptions` object with the given dtype.</span>
<span id="L173"><span class="lineNum"> 173</span> : /* implicit */ TensorOptions(caffe2::TypeMeta dtype) : TensorOptions() {</span>
<span id="L174"><span class="lineNum"> 174</span> : this-&gt;set_dtype(dtype);</span>
<span id="L175"><span class="lineNum"> 175</span> : }</span>
<span id="L176"><span class="lineNum"> 176</span> : </span>
<span id="L177"><span class="lineNum"> 177</span> : /// legacy constructor to support ScalarType</span>
<span id="L178"><span class="lineNum"> 178</span> <span class="tlaGNC tlaBgGNC"> 395952 : /* implicit */ TensorOptions(ScalarType dtype) : TensorOptions() {</span></span>
<span id="L179"><span class="lineNum"> 179</span> <span class="tlaGNC"> 395952 : this-&gt;set_dtype(dtype);</span></span>
<span id="L180"><span class="lineNum"> 180</span> <span class="tlaGNC"> 395952 : }</span></span>
<span id="L181"><span class="lineNum"> 181</span> : </span>
<span id="L182"><span class="lineNum"> 182</span> : /// Constructs a `TensorOptions` object with the given memory format.</span>
<span id="L183"><span class="lineNum"> 183</span> : /* implicit */ TensorOptions(MemoryFormat memory_format) : TensorOptions() {</span>
<span id="L184"><span class="lineNum"> 184</span> : set_memory_format(memory_format);</span>
<span id="L185"><span class="lineNum"> 185</span> : }</span>
<span id="L186"><span class="lineNum"> 186</span> : </span>
<span id="L187"><span class="lineNum"> 187</span> : /// Return a copy of `TensorOptions` with `device` set to the given one, or</span>
<span id="L188"><span class="lineNum"> 188</span> : /// cleared if `device` is `nullopt`.</span>
<span id="L189"><span class="lineNum"> 189</span> : C10_NODISCARD TensorOptions</span>
<span id="L190"><span class="lineNum"> 190</span> <span class="tlaGNC"> 401318 : device(c10::optional&lt;Device&gt; device) const noexcept {</span></span>
<span id="L191"><span class="lineNum"> 191</span> <span class="tlaGNC"> 401318 : TensorOptions r = *this;</span></span>
<span id="L192"><span class="lineNum"> 192</span> <span class="tlaGNC"> 401318 : r.set_device(device);</span></span>
<span id="L193"><span class="lineNum"> 193</span> <span class="tlaGNC"> 401318 : return r;</span></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> : /// Return a copy of `TensorOptions` with `device` set to the given one.</span>
<span id="L197"><span class="lineNum"> 197</span> : /// (This overload ensures that variadic template c10::optional constructor</span>
<span id="L198"><span class="lineNum"> 198</span> : /// for Device work correctly.)</span>
<span id="L199"><span class="lineNum"> 199</span> : template &lt;typename... Args&gt;</span>
<span id="L200"><span class="lineNum"> 200</span> <span class="tlaGNC"> 401318 : C10_NODISCARD TensorOptions device(Args&amp;&amp;... args) const noexcept {</span></span>
<span id="L201"><span class="lineNum"> 201</span> <span class="tlaGNC"> 802636 : return device(</span></span>
<span id="L202"><span class="lineNum"> 202</span> <span class="tlaGNC"> 401318 : c10::optional&lt;Device&gt;(c10::in_place, std::forward&lt;Args&gt;(args)...));</span></span>
<span id="L203"><span class="lineNum"> 203</span> : }</span>
<span id="L204"><span class="lineNum"> 204</span> : </span>
<span id="L205"><span class="lineNum"> 205</span> : /// Return a copy of `TensorOptions`, but with device set to CUDA, and the</span>
<span id="L206"><span class="lineNum"> 206</span> : /// device index set to the given one.</span>
<span id="L207"><span class="lineNum"> 207</span> : ///</span>
<span id="L208"><span class="lineNum"> 208</span> : /// TODO: This function encourages bad behavior (assuming CUDA is</span>
<span id="L209"><span class="lineNum"> 209</span> : /// the only device that matters). Get rid of it / rename it.</span>
<span id="L210"><span class="lineNum"> 210</span> : C10_NODISCARD TensorOptions</span>
<span id="L211"><span class="lineNum"> 211</span> : device_index(c10::DeviceIndex device_index) const noexcept {</span>
<span id="L212"><span class="lineNum"> 212</span> : return device(Device::Type::CUDA, device_index);</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> : /// Return a copy of `TensorOptions` with `dtype` set to the given one.</span>
<span id="L216"><span class="lineNum"> 216</span> : C10_NODISCARD TensorOptions</span>
<span id="L217"><span class="lineNum"> 217</span> <span class="tlaGNC"> 91030286 : dtype(c10::optional&lt;caffe2::TypeMeta&gt; dtype) const noexcept {</span></span>
<span id="L218"><span class="lineNum"> 218</span> <span class="tlaGNC"> 91030286 : TensorOptions r = *this;</span></span>
<span id="L219"><span class="lineNum"> 219</span> <span class="tlaGNC"> 91030286 : r.set_dtype(dtype);</span></span>
<span id="L220"><span class="lineNum"> 220</span> <span class="tlaGNC"> 91030286 : return r;</span></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> : // legacy function to support ScalarType</span>
<span id="L224"><span class="lineNum"> 224</span> : C10_NODISCARD TensorOptions</span>
<span id="L225"><span class="lineNum"> 225</span> <span class="tlaGNC"> 22824 : dtype(c10::optional&lt;ScalarType&gt; dtype) const noexcept {</span></span>
<span id="L226"><span class="lineNum"> 226</span> <span class="tlaGNC"> 22824 : TensorOptions r = *this;</span></span>
<span id="L227"><span class="lineNum"> 227</span> <span class="tlaGNC"> 22824 : r.set_dtype(dtype);</span></span>
<span id="L228"><span class="lineNum"> 228</span> <span class="tlaGNC"> 22824 : return r;</span></span>
<span id="L229"><span class="lineNum"> 229</span> : }</span>
<span id="L230"><span class="lineNum"> 230</span> : </span>
<span id="L231"><span class="lineNum"> 231</span> : // Since dtype is taken...</span>
<span id="L232"><span class="lineNum"> 232</span> : template &lt;typename T&gt;</span>
<span id="L233"><span class="lineNum"> 233</span> : TensorOptions&amp; dtype() {</span>
<span id="L234"><span class="lineNum"> 234</span> : dtype_ = caffe2::TypeMeta::Make&lt;T&gt;();</span>
<span id="L235"><span class="lineNum"> 235</span> : has_dtype_ = true;</span>
<span id="L236"><span class="lineNum"> 236</span> : return *this;</span>
<span id="L237"><span class="lineNum"> 237</span> : }</span>
<span id="L238"><span class="lineNum"> 238</span> : </span>
<span id="L239"><span class="lineNum"> 239</span> : /// Sets the layout of the `TensorOptions`.</span>
<span id="L240"><span class="lineNum"> 240</span> : C10_NODISCARD TensorOptions</span>
<span id="L241"><span class="lineNum"> 241</span> : layout(c10::optional&lt;Layout&gt; layout) const noexcept {</span>
<span id="L242"><span class="lineNum"> 242</span> : TensorOptions r = *this;</span>
<span id="L243"><span class="lineNum"> 243</span> : r.set_layout(layout);</span>
<span id="L244"><span class="lineNum"> 244</span> : return r;</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> : /// Sets the `requires_grad` property of the `TensorOptions`.</span>
<span id="L248"><span class="lineNum"> 248</span> : C10_NODISCARD TensorOptions</span>
<span id="L249"><span class="lineNum"> 249</span> <span class="tlaGNC"> 418844 : requires_grad(c10::optional&lt;bool&gt; requires_grad) const noexcept {</span></span>
<span id="L250"><span class="lineNum"> 250</span> <span class="tlaGNC"> 418844 : TensorOptions r = *this;</span></span>
<span id="L251"><span class="lineNum"> 251</span> <span class="tlaGNC"> 418844 : r.set_requires_grad(requires_grad);</span></span>
<span id="L252"><span class="lineNum"> 252</span> <span class="tlaGNC"> 418844 : return r;</span></span>
<span id="L253"><span class="lineNum"> 253</span> : }</span>
<span id="L254"><span class="lineNum"> 254</span> : </span>
<span id="L255"><span class="lineNum"> 255</span> : /// Sets the `pinned_memory` property on the `TensorOptions`.</span>
<span id="L256"><span class="lineNum"> 256</span> : C10_NODISCARD TensorOptions</span>
<span id="L257"><span class="lineNum"> 257</span> : pinned_memory(c10::optional&lt;bool&gt; pinned_memory) const noexcept {</span>
<span id="L258"><span class="lineNum"> 258</span> : TensorOptions r = *this;</span>
<span id="L259"><span class="lineNum"> 259</span> : r.set_pinned_memory(pinned_memory);</span>
<span id="L260"><span class="lineNum"> 260</span> : return r;</span>
<span id="L261"><span class="lineNum"> 261</span> : }</span>
<span id="L262"><span class="lineNum"> 262</span> : </span>
<span id="L263"><span class="lineNum"> 263</span> : /// Sets the `memory_format` property on `TensorOptions`.</span>
<span id="L264"><span class="lineNum"> 264</span> : C10_NODISCARD TensorOptions</span>
<span id="L265"><span class="lineNum"> 265</span> : memory_format(c10::optional&lt;MemoryFormat&gt; memory_format) const noexcept {</span>
<span id="L266"><span class="lineNum"> 266</span> : TensorOptions r = *this;</span>
<span id="L267"><span class="lineNum"> 267</span> : r.set_memory_format(memory_format);</span>
<span id="L268"><span class="lineNum"> 268</span> : return r;</span>
<span id="L269"><span class="lineNum"> 269</span> : }</span>
<span id="L270"><span class="lineNum"> 270</span> : </span>
<span id="L271"><span class="lineNum"> 271</span> : /// Returns the device of the `TensorOptions`.</span>
<span id="L272"><span class="lineNum"> 272</span> <span class="tlaUNC tlaBgUNC"> 0 : Device device() const noexcept {</span></span>
<span id="L273"><span class="lineNum"> 273</span> <span class="tlaUNC"> 0 : return device_or_default(device_opt());</span></span>
<span id="L274"><span class="lineNum"> 274</span> : }</span>
<span id="L275"><span class="lineNum"> 275</span> : </span>
<span id="L276"><span class="lineNum"> 276</span> : /// Returns whether the device is specified.</span>
<span id="L277"><span class="lineNum"> 277</span> : bool has_device() const noexcept {</span>
<span id="L278"><span class="lineNum"> 278</span> : return has_device_;</span>
<span id="L279"><span class="lineNum"> 279</span> : }</span>
<span id="L280"><span class="lineNum"> 280</span> : </span>
<span id="L281"><span class="lineNum"> 281</span> : /// Returns the device of the `TensorOptions`, or `c10::nullopt` if</span>
<span id="L282"><span class="lineNum"> 282</span> : /// device is not specified.</span>
<span id="L283"><span class="lineNum"> 283</span> <span class="tlaGNC tlaBgGNC"> 418844 : c10::optional&lt;Device&gt; device_opt() const noexcept {</span></span>
<span id="L284"><span class="lineNum"> 284</span> <span class="tlaGNC"> 418844 : return has_device_ ? c10::make_optional(device_) : c10::nullopt;</span></span>
<span id="L285"><span class="lineNum"> 285</span> : }</span>
<span id="L286"><span class="lineNum"> 286</span> : </span>
<span id="L287"><span class="lineNum"> 287</span> : /// Returns the device index of the `TensorOptions`.</span>
<span id="L288"><span class="lineNum"> 288</span> : int32_t device_index() const noexcept {</span>
<span id="L289"><span class="lineNum"> 289</span> : return device().index();</span>
<span id="L290"><span class="lineNum"> 290</span> : }</span>
<span id="L291"><span class="lineNum"> 291</span> : </span>
<span id="L292"><span class="lineNum"> 292</span> : /// Returns the dtype of the `TensorOptions`.</span>
<span id="L293"><span class="lineNum"> 293</span> : caffe2::TypeMeta dtype() const noexcept {</span>
<span id="L294"><span class="lineNum"> 294</span> : return dtype_or_default(dtype_opt());</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> : /// Returns whether the dtype is specified.</span>
<span id="L298"><span class="lineNum"> 298</span> <span class="tlaGNC"> 401318 : bool has_dtype() const noexcept {</span></span>
<span id="L299"><span class="lineNum"> 299</span> <span class="tlaGNC"> 401318 : return has_dtype_;</span></span>
<span id="L300"><span class="lineNum"> 300</span> : }</span>
<span id="L301"><span class="lineNum"> 301</span> : </span>
<span id="L302"><span class="lineNum"> 302</span> : /// Returns the dtype of the `TensorOptions`, or `c10::nullopt` if</span>
<span id="L303"><span class="lineNum"> 303</span> : /// device is not specified.</span>
<span id="L304"><span class="lineNum"> 304</span> <span class="tlaGNC"> 418844 : c10::optional&lt;caffe2::TypeMeta&gt; dtype_opt() const noexcept {</span></span>
<span id="L305"><span class="lineNum"> 305</span> <span class="tlaGNC"> 418844 : return has_dtype_ ? c10::make_optional(dtype_) : c10::nullopt;</span></span>
<span id="L306"><span class="lineNum"> 306</span> : }</span>
<span id="L307"><span class="lineNum"> 307</span> : </span>
<span id="L308"><span class="lineNum"> 308</span> : /// Returns the layout of the `TensorOptions`.</span>
<span id="L309"><span class="lineNum"> 309</span> : Layout layout() const noexcept {</span>
<span id="L310"><span class="lineNum"> 310</span> : return layout_or_default(layout_opt());</span>
<span id="L311"><span class="lineNum"> 311</span> : }</span>
<span id="L312"><span class="lineNum"> 312</span> : </span>
<span id="L313"><span class="lineNum"> 313</span> : /// Returns whether the layout is specified.</span>
<span id="L314"><span class="lineNum"> 314</span> : bool has_layout() const noexcept {</span>
<span id="L315"><span class="lineNum"> 315</span> : return has_layout_;</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> : /// Returns the layout of the `TensorOptions`, or `c10::nullopt` if</span>
<span id="L319"><span class="lineNum"> 319</span> : /// layout is not specified.</span>
<span id="L320"><span class="lineNum"> 320</span> <span class="tlaGNC"> 418844 : c10::optional&lt;Layout&gt; layout_opt() const noexcept {</span></span>
<span id="L321"><span class="lineNum"> 321</span> <span class="tlaGNC"> 418844 : return has_layout_ ? c10::make_optional(layout_) : c10::nullopt;</span></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> : /// Returns the `requires_grad` property of the `TensorOptions`.</span>
<span id="L325"><span class="lineNum"> 325</span> <span class="tlaGNC"> 418844 : bool requires_grad() const noexcept {</span></span>
<span id="L326"><span class="lineNum"> 326</span> <span class="tlaGNC"> 418844 : return has_requires_grad_ ? requires_grad_ : false;</span></span>
<span id="L327"><span class="lineNum"> 327</span> : }</span>
<span id="L328"><span class="lineNum"> 328</span> : </span>
<span id="L329"><span class="lineNum"> 329</span> : /// Returns whether the `requires_grad` is specified.</span>
<span id="L330"><span class="lineNum"> 330</span> : bool has_requires_grad() const noexcept {</span>
<span id="L331"><span class="lineNum"> 331</span> : return has_requires_grad_;</span>
<span id="L332"><span class="lineNum"> 332</span> : }</span>
<span id="L333"><span class="lineNum"> 333</span> : </span>
<span id="L334"><span class="lineNum"> 334</span> : /// Returns the `requires_grad` property of the `TensorOptions`, or</span>
<span id="L335"><span class="lineNum"> 335</span> : /// `c10::nullopt` if `requires_grad` is not specified.</span>
<span id="L336"><span class="lineNum"> 336</span> <span class="tlaGNC"> 401402 : c10::optional&lt;bool&gt; requires_grad_opt() const noexcept {</span></span>
<span id="L337"><span class="lineNum"> 337</span> <span class="tlaGNC"> 802804 : return has_requires_grad_ ? c10::make_optional(requires_grad_)</span></span>
<span id="L338"><span class="lineNum"> 338</span> <span class="tlaGNC"> 401402 : : c10::nullopt;</span></span>
<span id="L339"><span class="lineNum"> 339</span> : }</span>
<span id="L340"><span class="lineNum"> 340</span> : </span>
<span id="L341"><span class="lineNum"> 341</span> : /// Returns the `pinned_memory` property of the `TensorOptions`.</span>
<span id="L342"><span class="lineNum"> 342</span> : bool pinned_memory() const noexcept {</span>
<span id="L343"><span class="lineNum"> 343</span> : return pinned_memory_or_default(pinned_memory_opt());</span>
<span id="L344"><span class="lineNum"> 344</span> : }</span>
<span id="L345"><span class="lineNum"> 345</span> : </span>
<span id="L346"><span class="lineNum"> 346</span> : /// Returns whether the `pinned_memory` is specified.</span>
<span id="L347"><span class="lineNum"> 347</span> : bool has_pinned_memory() const noexcept {</span>
<span id="L348"><span class="lineNum"> 348</span> : return has_pinned_memory_;</span>
<span id="L349"><span class="lineNum"> 349</span> : }</span>
<span id="L350"><span class="lineNum"> 350</span> : </span>
<span id="L351"><span class="lineNum"> 351</span> : /// Returns if the layout is sparse</span>
<span id="L352"><span class="lineNum"> 352</span> : bool is_sparse() const {</span>
<span id="L353"><span class="lineNum"> 353</span> : return layout_ == c10::Layout::Sparse;</span>
<span id="L354"><span class="lineNum"> 354</span> : }</span>
<span id="L355"><span class="lineNum"> 355</span> : </span>
<span id="L356"><span class="lineNum"> 356</span> : bool is_sparse_csr() const {</span>
<span id="L357"><span class="lineNum"> 357</span> : return layout_ == c10::Layout::SparseCsr;</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> : // For compatibility with legacy tensor.type() comparisons</span>
<span id="L361"><span class="lineNum"> 361</span> : bool type_equal(const TensorOptions&amp; other) const {</span>
<span id="L362"><span class="lineNum"> 362</span> : return computeDispatchKey() == other.computeDispatchKey() &amp;&amp;</span>
<span id="L363"><span class="lineNum"> 363</span> : typeMetaToScalarType(dtype_) == typeMetaToScalarType(other.dtype());</span>
<span id="L364"><span class="lineNum"> 364</span> : }</span>
<span id="L365"><span class="lineNum"> 365</span> : </span>
<span id="L366"><span class="lineNum"> 366</span> : /// Returns the `pinned_memory` property of the `TensorOptions`, or</span>
<span id="L367"><span class="lineNum"> 367</span> : /// `c10::nullopt` if `pinned_memory` is not specified.</span>
<span id="L368"><span class="lineNum"> 368</span> <span class="tlaGNC"> 418844 : c10::optional&lt;bool&gt; pinned_memory_opt() const noexcept {</span></span>
<span id="L369"><span class="lineNum"> 369</span> <span class="tlaGNC"> 837688 : return has_pinned_memory_ ? c10::make_optional(pinned_memory_)</span></span>
<span id="L370"><span class="lineNum"> 370</span> <span class="tlaGNC"> 418844 : : c10::nullopt;</span></span>
<span id="L371"><span class="lineNum"> 371</span> : }</span>
<span id="L372"><span class="lineNum"> 372</span> : </span>
<span id="L373"><span class="lineNum"> 373</span> : /// Returns whether the `memory_layout` is specified</span>
<span id="L374"><span class="lineNum"> 374</span> <span class="tlaGNC"> 401402 : bool has_memory_format() const noexcept {</span></span>
<span id="L375"><span class="lineNum"> 375</span> <span class="tlaGNC"> 401402 : return has_memory_format_;</span></span>
<span id="L376"><span class="lineNum"> 376</span> : }</span>
<span id="L377"><span class="lineNum"> 377</span> : </span>
<span id="L378"><span class="lineNum"> 378</span> : // NB: memory_format() getter is PURPOSELY not defined, as the default</span>
<span id="L379"><span class="lineNum"> 379</span> : // behavior of memory_format varies from function to function.</span>
<span id="L380"><span class="lineNum"> 380</span> : </span>
<span id="L381"><span class="lineNum"> 381</span> : /// Returns the `memory_layout` property of `TensorOptions, or</span>
<span id="L382"><span class="lineNum"> 382</span> : /// `c10::nullopt` if `memory_format` is not specified.</span>
<span id="L383"><span class="lineNum"> 383</span> <span class="tlaGNC"> 401402 : c10::optional&lt;MemoryFormat&gt; memory_format_opt() const noexcept {</span></span>
<span id="L384"><span class="lineNum"> 384</span> <span class="tlaGNC"> 401402 : return has_memory_format_ ? c10::make_optional(memory_format_)</span></span>
<span id="L385"><span class="lineNum"> 385</span> <span class="tlaGNC"> 401402 : : c10::nullopt;</span></span>
<span id="L386"><span class="lineNum"> 386</span> : }</span>
<span id="L387"><span class="lineNum"> 387</span> : </span>
<span id="L388"><span class="lineNum"> 388</span> : // Resolves the ATen backend specified by the current construction axes.</span>
<span id="L389"><span class="lineNum"> 389</span> : // TODO: Deprecate this</span>
<span id="L390"><span class="lineNum"> 390</span> : Backend backend() const {</span>
<span id="L391"><span class="lineNum"> 391</span> : return at::dispatchKeyToBackend(computeDispatchKey());</span>
<span id="L392"><span class="lineNum"> 392</span> : }</span>
<span id="L393"><span class="lineNum"> 393</span> : </span>
<span id="L394"><span class="lineNum"> 394</span> : /// Return the right-biased merge of two TensorOptions. This has the</span>
<span id="L395"><span class="lineNum"> 395</span> : /// effect of overwriting settings from self with specified options</span>
<span id="L396"><span class="lineNum"> 396</span> : /// of options.</span>
<span id="L397"><span class="lineNum"> 397</span> : ///</span>
<span id="L398"><span class="lineNum"> 398</span> : /// NB: This merging operation does NOT respect device merges.</span>
<span id="L399"><span class="lineNum"> 399</span> : /// For example, if you device({kCUDA, 1}).merge_in(kCUDA)</span>
<span id="L400"><span class="lineNum"> 400</span> : /// you will get kCUDA in the end! Functions like Tensor.new_empty</span>
<span id="L401"><span class="lineNum"> 401</span> : /// ensure the right device is selected anyway by way of a</span>
<span id="L402"><span class="lineNum"> 402</span> : /// device guard.</span>
<span id="L403"><span class="lineNum"> 403</span> : ///</span>
<span id="L404"><span class="lineNum"> 404</span> : TensorOptions merge_in(TensorOptions options) const noexcept {</span>
<span id="L405"><span class="lineNum"> 405</span> : TensorOptions merged = *this;</span>
<span id="L406"><span class="lineNum"> 406</span> : if (options.has_device())</span>
<span id="L407"><span class="lineNum"> 407</span> : merged.set_device(options.device_opt());</span>
<span id="L408"><span class="lineNum"> 408</span> : if (options.has_dtype())</span>
<span id="L409"><span class="lineNum"> 409</span> : merged.set_dtype(options.dtype_opt());</span>
<span id="L410"><span class="lineNum"> 410</span> : if (options.has_layout())</span>
<span id="L411"><span class="lineNum"> 411</span> : merged.set_layout(options.layout_opt());</span>
<span id="L412"><span class="lineNum"> 412</span> : // NB: requires grad is right biased; not a logical AND/OR!</span>
<span id="L413"><span class="lineNum"> 413</span> : if (options.has_requires_grad())</span>
<span id="L414"><span class="lineNum"> 414</span> : merged.set_requires_grad(options.requires_grad_opt());</span>
<span id="L415"><span class="lineNum"> 415</span> : if (options.has_pinned_memory())</span>
<span id="L416"><span class="lineNum"> 416</span> : merged.set_pinned_memory(options.pinned_memory_opt());</span>
<span id="L417"><span class="lineNum"> 417</span> : if (options.has_memory_format())</span>
<span id="L418"><span class="lineNum"> 418</span> : merged.set_memory_format(options.memory_format_opt());</span>
<span id="L419"><span class="lineNum"> 419</span> : return merged;</span>
<span id="L420"><span class="lineNum"> 420</span> : }</span>
<span id="L421"><span class="lineNum"> 421</span> : </span>
<span id="L422"><span class="lineNum"> 422</span> : // TODO remove after TensorOptions rationalization</span>
<span id="L423"><span class="lineNum"> 423</span> : TensorOptions merge_memory_format(</span>
<span id="L424"><span class="lineNum"> 424</span> : c10::optional&lt;MemoryFormat&gt; optional_memory_format) const noexcept {</span>
<span id="L425"><span class="lineNum"> 425</span> : TensorOptions merged = *this;</span>
<span id="L426"><span class="lineNum"> 426</span> : if (optional_memory_format.has_value()) {</span>
<span id="L427"><span class="lineNum"> 427</span> : merged.set_memory_format(*optional_memory_format);</span>
<span id="L428"><span class="lineNum"> 428</span> : }</span>
<span id="L429"><span class="lineNum"> 429</span> : return merged;</span>
<span id="L430"><span class="lineNum"> 430</span> : }</span>
<span id="L431"><span class="lineNum"> 431</span> : </span>
<span id="L432"><span class="lineNum"> 432</span> : // INVARIANT: computeDispatchKey returns only the subset of dispatch keys for</span>
<span id="L433"><span class="lineNum"> 433</span> : // which dispatchKeyToBackend is injective, if it is defined at all (for</span>
<span id="L434"><span class="lineNum"> 434</span> : // the most part, this just means that this function never returns an</span>
<span id="L435"><span class="lineNum"> 435</span> : // Autograd key)</span>
<span id="L436"><span class="lineNum"> 436</span> : DispatchKey computeDispatchKey() const {</span>
<span id="L437"><span class="lineNum"> 437</span> : return c10::computeDispatchKey(</span>
<span id="L438"><span class="lineNum"> 438</span> : optTypeMetaToScalarType(dtype_opt()), layout_opt(), device_opt());</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> : private:</span>
<span id="L442"><span class="lineNum"> 442</span> : // These methods are currently private because I'm not sure if it's wise</span>
<span id="L443"><span class="lineNum"> 443</span> : // to actually publish them. They are methods because I need them in</span>
<span id="L444"><span class="lineNum"> 444</span> : // the constructor and the functional API implementation.</span>
<span id="L445"><span class="lineNum"> 445</span> : //</span>
<span id="L446"><span class="lineNum"> 446</span> : // If you really, really need it, you can make these public, but check if you</span>
<span id="L447"><span class="lineNum"> 447</span> : // couldn't just do what you need with the functional API. Similarly, these</span>
<span id="L448"><span class="lineNum"> 448</span> : // methods are not chainable, because if you wanted chaining, you probably</span>
<span id="L449"><span class="lineNum"> 449</span> : // want to use the functional API instead. (It's probably OK to make</span>
<span id="L450"><span class="lineNum"> 450</span> : // these chainable, because these functions are all explicitly annotated</span>
<span id="L451"><span class="lineNum"> 451</span> : // with a ref-qualifier, the trailing &amp;, that makes them illegal to call</span>
<span id="L452"><span class="lineNum"> 452</span> : // on temporaries.)</span>
<span id="L453"><span class="lineNum"> 453</span> : </span>
<span id="L454"><span class="lineNum"> 454</span> : /// Mutably set the device of `TensorOptions`.</span>
<span id="L455"><span class="lineNum"> 455</span> <span class="tlaGNC"> 401318 : void set_device(c10::optional&lt;Device&gt; device) &amp; noexcept {</span></span>
<span id="L456"><span class="lineNum"> 456</span> <span class="tlaGNC"> 401318 : if (device) {</span></span>
<span id="L457"><span class="lineNum"> 457</span> <span class="tlaGNC"> 401318 : device_ = *device;</span></span>
<span id="L458"><span class="lineNum"> 458</span> <span class="tlaGNC"> 401318 : has_device_ = true;</span></span>
<span id="L459"><span class="lineNum"> 459</span> : } else {</span>
<span id="L460"><span class="lineNum"> 460</span> <span class="tlaUNC tlaBgUNC"> 0 : has_device_ = false;</span></span>
<span id="L461"><span class="lineNum"> 461</span> : }</span>
<span id="L462"><span class="lineNum"> 462</span> <span class="tlaGNC tlaBgGNC"> 401318 : }</span></span>
<span id="L463"><span class="lineNum"> 463</span> : </span>
<span id="L464"><span class="lineNum"> 464</span> : /// Mutably set the dtype of `TensorOptions`.</span>
<span id="L465"><span class="lineNum"> 465</span> <span class="tlaGNC"> 91030286 : void set_dtype(c10::optional&lt;caffe2::TypeMeta&gt; dtype) &amp; noexcept {</span></span>
<span id="L466"><span class="lineNum"> 466</span> <span class="tlaGNC"> 91030286 : if (dtype) {</span></span>
<span id="L467"><span class="lineNum"> 467</span> <span class="tlaGNC"> 91030286 : dtype_ = *dtype;</span></span>
<span id="L468"><span class="lineNum"> 468</span> <span class="tlaGNC"> 91030286 : has_dtype_ = true;</span></span>
<span id="L469"><span class="lineNum"> 469</span> : } else {</span>
<span id="L470"><span class="lineNum"> 470</span> <span class="tlaUNC tlaBgUNC"> 0 : has_dtype_ = false;</span></span>
<span id="L471"><span class="lineNum"> 471</span> : }</span>
<span id="L472"><span class="lineNum"> 472</span> <span class="tlaGNC tlaBgGNC"> 91030286 : }</span></span>
<span id="L473"><span class="lineNum"> 473</span> : </span>
<span id="L474"><span class="lineNum"> 474</span> : // legacy function to support ScalarType</span>
<span id="L475"><span class="lineNum"> 475</span> <span class="tlaGNC"> 418776 : void set_dtype(c10::optional&lt;ScalarType&gt; dtype) &amp; noexcept {</span></span>
<span id="L476"><span class="lineNum"> 476</span> <span class="tlaGNC"> 418776 : if (dtype) {</span></span>
<span id="L477"><span class="lineNum"> 477</span> <span class="tlaGNC"> 418776 : dtype_ = scalarTypeToTypeMeta(*dtype);</span></span>
<span id="L478"><span class="lineNum"> 478</span> <span class="tlaGNC"> 418776 : has_dtype_ = true;</span></span>
<span id="L479"><span class="lineNum"> 479</span> : } else {</span>
<span id="L480"><span class="lineNum"> 480</span> <span class="tlaUNC tlaBgUNC"> 0 : has_dtype_ = false;</span></span>
<span id="L481"><span class="lineNum"> 481</span> : }</span>
<span id="L482"><span class="lineNum"> 482</span> <span class="tlaGNC tlaBgGNC"> 418776 : }</span></span>
<span id="L483"><span class="lineNum"> 483</span> : </span>
<span id="L484"><span class="lineNum"> 484</span> : /// Mutably set the layout of `TensorOptions`.</span>
<span id="L485"><span class="lineNum"> 485</span> : void set_layout(c10::optional&lt;Layout&gt; layout) &amp; noexcept {</span>
<span id="L486"><span class="lineNum"> 486</span> : if (layout) {</span>
<span id="L487"><span class="lineNum"> 487</span> : layout_ = *layout;</span>
<span id="L488"><span class="lineNum"> 488</span> : has_layout_ = true;</span>
<span id="L489"><span class="lineNum"> 489</span> : } else {</span>
<span id="L490"><span class="lineNum"> 490</span> : has_layout_ = false;</span>
<span id="L491"><span class="lineNum"> 491</span> : }</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> : /// Mutably set the `requires_grad` property of `TensorOptions`.</span>
<span id="L495"><span class="lineNum"> 495</span> <span class="tlaGNC"> 418844 : void set_requires_grad(c10::optional&lt;bool&gt; requires_grad) &amp; noexcept {</span></span>
<span id="L496"><span class="lineNum"> 496</span> <span class="tlaGNC"> 418844 : if (requires_grad) {</span></span>
<span id="L497"><span class="lineNum"> 497</span> <span class="tlaUNC tlaBgUNC"> 0 : requires_grad_ = *requires_grad;</span></span>
<span id="L498"><span class="lineNum"> 498</span> <span class="tlaUNC"> 0 : has_requires_grad_ = true;</span></span>
<span id="L499"><span class="lineNum"> 499</span> : } else {</span>
<span id="L500"><span class="lineNum"> 500</span> <span class="tlaGNC tlaBgGNC"> 418844 : has_requires_grad_ = false;</span></span>
<span id="L501"><span class="lineNum"> 501</span> : }</span>
<span id="L502"><span class="lineNum"> 502</span> <span class="tlaGNC"> 418844 : }</span></span>
<span id="L503"><span class="lineNum"> 503</span> : </span>
<span id="L504"><span class="lineNum"> 504</span> : /// Mutably set the `pinned_memory` property of `TensorOptions`.</span>
<span id="L505"><span class="lineNum"> 505</span> : void set_pinned_memory(c10::optional&lt;bool&gt; pinned_memory) &amp; noexcept {</span>
<span id="L506"><span class="lineNum"> 506</span> : if (pinned_memory) {</span>
<span id="L507"><span class="lineNum"> 507</span> : pinned_memory_ = *pinned_memory;</span>
<span id="L508"><span class="lineNum"> 508</span> : has_pinned_memory_ = true;</span>
<span id="L509"><span class="lineNum"> 509</span> : } else {</span>
<span id="L510"><span class="lineNum"> 510</span> : has_pinned_memory_ = false;</span>
<span id="L511"><span class="lineNum"> 511</span> : }</span>
<span id="L512"><span class="lineNum"> 512</span> : }</span>
<span id="L513"><span class="lineNum"> 513</span> : </span>
<span id="L514"><span class="lineNum"> 514</span> : /// Mutably set the `memory_Format` property of `TensorOptions`.</span>
<span id="L515"><span class="lineNum"> 515</span> : void set_memory_format(c10::optional&lt;MemoryFormat&gt; memory_format) &amp; noexcept {</span>
<span id="L516"><span class="lineNum"> 516</span> : if (memory_format) {</span>
<span id="L517"><span class="lineNum"> 517</span> : memory_format_ = *memory_format;</span>
<span id="L518"><span class="lineNum"> 518</span> : has_memory_format_ = true;</span>
<span id="L519"><span class="lineNum"> 519</span> : } else {</span>
<span id="L520"><span class="lineNum"> 520</span> : has_memory_format_ = false;</span>
<span id="L521"><span class="lineNum"> 521</span> : }</span>
<span id="L522"><span class="lineNum"> 522</span> : }</span>
<span id="L523"><span class="lineNum"> 523</span> : </span>
<span id="L524"><span class="lineNum"> 524</span> : // WARNING: If you edit TensorOptions to add more options, you</span>
<span id="L525"><span class="lineNum"> 525</span> : // may need to adjust the implementation of Tensor::options.</span>
<span id="L526"><span class="lineNum"> 526</span> : // The criteria for whether or not Tensor::options must be adjusted</span>
<span id="L527"><span class="lineNum"> 527</span> : // is whether or not the new option you added should preserved</span>
<span id="L528"><span class="lineNum"> 528</span> : // by functions such as empty_like(); if it should be preserved,</span>
<span id="L529"><span class="lineNum"> 529</span> : // you must adjust options().</span>
<span id="L530"><span class="lineNum"> 530</span> : //</span>
<span id="L531"><span class="lineNum"> 531</span> : // TODO: MemoryFormat is not implemented in this way</span>
<span id="L532"><span class="lineNum"> 532</span> : </span>
<span id="L533"><span class="lineNum"> 533</span> : // NB: We didn't use c10::optional here, because then we can't pack</span>
<span id="L534"><span class="lineNum"> 534</span> : // the has_***_ boolean fields.</span>
<span id="L535"><span class="lineNum"> 535</span> : </span>
<span id="L536"><span class="lineNum"> 536</span> : Device device_ = at::kCPU; // 16-bit</span>
<span id="L537"><span class="lineNum"> 537</span> : caffe2::TypeMeta dtype_ = caffe2::TypeMeta::Make&lt;float&gt;(); // 16-bit</span>
<span id="L538"><span class="lineNum"> 538</span> : Layout layout_ = at::kStrided; // 8-bit</span>
<span id="L539"><span class="lineNum"> 539</span> : MemoryFormat memory_format_ = MemoryFormat::Contiguous; // 8-bit</span>
<span id="L540"><span class="lineNum"> 540</span> : </span>
<span id="L541"><span class="lineNum"> 541</span> : // Bitmask required here to get this to fit inside 32 bits (or even 64 bits,</span>
<span id="L542"><span class="lineNum"> 542</span> : // for that matter)</span>
<span id="L543"><span class="lineNum"> 543</span> : </span>
<span id="L544"><span class="lineNum"> 544</span> : bool requires_grad_ : 1;</span>
<span id="L545"><span class="lineNum"> 545</span> : bool pinned_memory_ : 1;</span>
<span id="L546"><span class="lineNum"> 546</span> : </span>
<span id="L547"><span class="lineNum"> 547</span> : bool has_device_ : 1;</span>
<span id="L548"><span class="lineNum"> 548</span> : bool has_dtype_ : 1;</span>
<span id="L549"><span class="lineNum"> 549</span> : bool has_layout_ : 1;</span>
<span id="L550"><span class="lineNum"> 550</span> : bool has_requires_grad_ : 1;</span>
<span id="L551"><span class="lineNum"> 551</span> : bool has_pinned_memory_ : 1;</span>
<span id="L552"><span class="lineNum"> 552</span> : bool has_memory_format_ : 1;</span>
<span id="L553"><span class="lineNum"> 553</span> : };</span>
<span id="L554"><span class="lineNum"> 554</span> : </span>
<span id="L555"><span class="lineNum"> 555</span> : // We should aspire to fit in one machine-size word; but a size greater than two</span>
<span id="L556"><span class="lineNum"> 556</span> : // words is too much. (We are doing terribly on 32-bit archs, where we require</span>
<span id="L557"><span class="lineNum"> 557</span> : // three machine size words to store tensor options. Eek!)</span>
<span id="L558"><span class="lineNum"> 558</span> : static_assert(</span>
<span id="L559"><span class="lineNum"> 559</span> : sizeof(TensorOptions) &lt;= sizeof(int64_t) * 2,</span>
<span id="L560"><span class="lineNum"> 560</span> : &quot;TensorOptions must fit in 128-bits&quot;);</span>
<span id="L561"><span class="lineNum"> 561</span> : </span>
<span id="L562"><span class="lineNum"> 562</span> : /// Convenience function that returns a `TensorOptions` object with the `dtype`</span>
<span id="L563"><span class="lineNum"> 563</span> : /// set to the given one.</span>
<span id="L564"><span class="lineNum"> 564</span> : inline TensorOptions dtype(caffe2::TypeMeta dtype) {</span>
<span id="L565"><span class="lineNum"> 565</span> : return TensorOptions().dtype(dtype);</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> : // legacy function to support ScalarType</span>
<span id="L569"><span class="lineNum"> 569</span> <span class="tlaGNC"> 91030286 : inline TensorOptions dtype(ScalarType dtype) {</span></span>
<span id="L570"><span class="lineNum"> 570</span> <span class="tlaGNC"> 91030286 : return TensorOptions().dtype(scalarTypeToTypeMeta(dtype));</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> : /// Convenience function that returns a `TensorOptions` object with the `layout`</span>
<span id="L574"><span class="lineNum"> 574</span> : /// set to the given one.</span>
<span id="L575"><span class="lineNum"> 575</span> : inline TensorOptions layout(Layout layout) {</span>
<span id="L576"><span class="lineNum"> 576</span> : return TensorOptions().layout(layout);</span>
<span id="L577"><span class="lineNum"> 577</span> : }</span>
<span id="L578"><span class="lineNum"> 578</span> : </span>
<span id="L579"><span class="lineNum"> 579</span> : /// Convenience function that returns a `TensorOptions` object with the `device`</span>
<span id="L580"><span class="lineNum"> 580</span> : /// set to the given one.</span>
<span id="L581"><span class="lineNum"> 581</span> : inline TensorOptions device(Device device) {</span>
<span id="L582"><span class="lineNum"> 582</span> : return TensorOptions().device(device);</span>
<span id="L583"><span class="lineNum"> 583</span> : }</span>
<span id="L584"><span class="lineNum"> 584</span> : </span>
<span id="L585"><span class="lineNum"> 585</span> : /// Convenience function that returns a `TensorOptions` object with the</span>
<span id="L586"><span class="lineNum"> 586</span> : /// `device` set to CUDA and the `device_index` set to the given one.</span>
<span id="L587"><span class="lineNum"> 587</span> : inline TensorOptions device_index(int16_t device_index) {</span>
<span id="L588"><span class="lineNum"> 588</span> : return TensorOptions().device_index(</span>
<span id="L589"><span class="lineNum"> 589</span> : static_cast&lt;c10::DeviceIndex&gt;(device_index));</span>
<span id="L590"><span class="lineNum"> 590</span> : }</span>
<span id="L591"><span class="lineNum"> 591</span> : </span>
<span id="L592"><span class="lineNum"> 592</span> : /// Convenience function that returns a `TensorOptions` object with the</span>
<span id="L593"><span class="lineNum"> 593</span> : /// `requires_grad` set to the given one.</span>
<span id="L594"><span class="lineNum"> 594</span> : inline TensorOptions requires_grad(bool requires_grad = true) {</span>
<span id="L595"><span class="lineNum"> 595</span> : return TensorOptions().requires_grad(requires_grad);</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> : /// Convenience function that returns a `TensorOptions` object with the</span>
<span id="L599"><span class="lineNum"> 599</span> : /// `memory_format` set to the given one.</span>
<span id="L600"><span class="lineNum"> 600</span> : inline TensorOptions memory_format(MemoryFormat memory_format) {</span>
<span id="L601"><span class="lineNum"> 601</span> : return TensorOptions().memory_format(memory_format);</span>
<span id="L602"><span class="lineNum"> 602</span> : }</span>
<span id="L603"><span class="lineNum"> 603</span> : </span>
<span id="L604"><span class="lineNum"> 604</span> : C10_API std::ostream&amp; operator&lt;&lt;(</span>
<span id="L605"><span class="lineNum"> 605</span> : std::ostream&amp; stream,</span>
<span id="L606"><span class="lineNum"> 606</span> : const TensorOptions&amp; options);</span>
<span id="L607"><span class="lineNum"> 607</span> : </span>
<span id="L608"><span class="lineNum"> 608</span> : template &lt;typename T&gt;</span>
<span id="L609"><span class="lineNum"> 609</span> : inline TensorOptions dtype() {</span>
<span id="L610"><span class="lineNum"> 610</span> : return dtype(caffe2::TypeMeta::Make&lt;T&gt;());</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> : inline std::string toString(const TensorOptions&amp; options) {</span>
<span id="L614"><span class="lineNum"> 614</span> : std::ostringstream stream;</span>
<span id="L615"><span class="lineNum"> 615</span> : stream &lt;&lt; options;</span>
<span id="L616"><span class="lineNum"> 616</span> : return stream.str();</span>
<span id="L617"><span class="lineNum"> 617</span> : }</span>
<span id="L618"><span class="lineNum"> 618</span> : </span>
<span id="L619"><span class="lineNum"> 619</span> : // This is intended to be a centralized location by which we can determine</span>
<span id="L620"><span class="lineNum"> 620</span> : // what an appropriate DispatchKey for a tensor is.</span>
<span id="L621"><span class="lineNum"> 621</span> : inline DispatchKey computeDispatchKey(</span>
<span id="L622"><span class="lineNum"> 622</span> : c10::optional&lt;ScalarType&gt; dtype,</span>
<span id="L623"><span class="lineNum"> 623</span> : c10::optional&lt;Layout&gt; layout,</span>
<span id="L624"><span class="lineNum"> 624</span> : c10::optional&lt;Device&gt; device) {</span>
<span id="L625"><span class="lineNum"> 625</span> : const auto layout_ = layout_or_default(layout);</span>
<span id="L626"><span class="lineNum"> 626</span> : const auto device_ = device_or_default(device);</span>
<span id="L627"><span class="lineNum"> 627</span> : switch (layout_) {</span>
<span id="L628"><span class="lineNum"> 628</span> : case Layout::Strided: {</span>
<span id="L629"><span class="lineNum"> 629</span> : const auto dtype_ = dtype_or_default(dtype);</span>
<span id="L630"><span class="lineNum"> 630</span> : switch (device_.type()) {</span>
<span id="L631"><span class="lineNum"> 631</span> : #define DO_CASE(device, _) \</span>
<span id="L632"><span class="lineNum"> 632</span> : case c10::DeviceType::device: { \</span>
<span id="L633"><span class="lineNum"> 633</span> : if (isQIntType(dtype_)) { \</span>
<span id="L634"><span class="lineNum"> 634</span> : return DispatchKey::Quantized##device; \</span>
<span id="L635"><span class="lineNum"> 635</span> : } \</span>
<span id="L636"><span class="lineNum"> 636</span> : return DispatchKey::device; \</span>
<span id="L637"><span class="lineNum"> 637</span> : }</span>
<span id="L638"><span class="lineNum"> 638</span> : C10_FORALL_BACKEND_DEVICE_TYPES(DO_CASE, unused)</span>
<span id="L639"><span class="lineNum"> 639</span> : #undef DO_CASE</span>
<span id="L640"><span class="lineNum"> 640</span> : case c10::DeviceType::FPGA:</span>
<span id="L641"><span class="lineNum"> 641</span> : return DispatchKey::FPGA;</span>
<span id="L642"><span class="lineNum"> 642</span> : case c10::DeviceType::ORT:</span>
<span id="L643"><span class="lineNum"> 643</span> : return DispatchKey::ORT;</span>
<span id="L644"><span class="lineNum"> 644</span> : case c10::DeviceType::Vulkan:</span>
<span id="L645"><span class="lineNum"> 645</span> : return DispatchKey::Vulkan;</span>
<span id="L646"><span class="lineNum"> 646</span> : case c10::DeviceType::Metal:</span>
<span id="L647"><span class="lineNum"> 647</span> : return DispatchKey::Metal;</span>
<span id="L648"><span class="lineNum"> 648</span> : case c10::DeviceType::MKLDNN:</span>
<span id="L649"><span class="lineNum"> 649</span> : case c10::DeviceType::OPENGL:</span>
<span id="L650"><span class="lineNum"> 650</span> : case c10::DeviceType::OPENCL:</span>
<span id="L651"><span class="lineNum"> 651</span> : case c10::DeviceType::IDEEP:</span>
<span id="L652"><span class="lineNum"> 652</span> : TORCH_INTERNAL_ASSERT(</span>
<span id="L653"><span class="lineNum"> 653</span> : 0,</span>
<span id="L654"><span class="lineNum"> 654</span> : &quot;This is a grandfathered Caffe2 device type &quot;,</span>
<span id="L655"><span class="lineNum"> 655</span> : device_.type(),</span>
<span id="L656"><span class="lineNum"> 656</span> : &quot;, it shouldn't ever convert to a DispatchKey. File a bug describing what you were doing if you think this is in error.&quot;);</span>
<span id="L657"><span class="lineNum"> 657</span> : default:</span>
<span id="L658"><span class="lineNum"> 658</span> : TORCH_CHECK_NOT_IMPLEMENTED(</span>
<span id="L659"><span class="lineNum"> 659</span> : false,</span>
<span id="L660"><span class="lineNum"> 660</span> : &quot;Unsupported device type for dense layout: &quot;,</span>
<span id="L661"><span class="lineNum"> 661</span> : device_.type());</span>
<span id="L662"><span class="lineNum"> 662</span> : }</span>
<span id="L663"><span class="lineNum"> 663</span> : }</span>
<span id="L664"><span class="lineNum"> 664</span> : case Layout::Sparse:</span>
<span id="L665"><span class="lineNum"> 665</span> : switch (device_.type()) {</span>
<span id="L666"><span class="lineNum"> 666</span> : #define DO_CASE(device, _) \</span>
<span id="L667"><span class="lineNum"> 667</span> : case c10::DeviceType::device: { \</span>
<span id="L668"><span class="lineNum"> 668</span> : return DispatchKey::Sparse##device; \</span>
<span id="L669"><span class="lineNum"> 669</span> : }</span>
<span id="L670"><span class="lineNum"> 670</span> : C10_FORALL_BACKEND_DEVICE_TYPES(DO_CASE, unused)</span>
<span id="L671"><span class="lineNum"> 671</span> : #undef DO_CASE</span>
<span id="L672"><span class="lineNum"> 672</span> : default:</span>
<span id="L673"><span class="lineNum"> 673</span> : TORCH_CHECK_NOT_IMPLEMENTED(</span>
<span id="L674"><span class="lineNum"> 674</span> : false,</span>
<span id="L675"><span class="lineNum"> 675</span> : &quot;Unsupported device type for sparse layout: &quot;,</span>
<span id="L676"><span class="lineNum"> 676</span> : device_.type());</span>
<span id="L677"><span class="lineNum"> 677</span> : }</span>
<span id="L678"><span class="lineNum"> 678</span> : case Layout::Mkldnn:</span>
<span id="L679"><span class="lineNum"> 679</span> : switch (device_.type()) {</span>
<span id="L680"><span class="lineNum"> 680</span> : case c10::DeviceType::CPU:</span>
<span id="L681"><span class="lineNum"> 681</span> : return DispatchKey::MkldnnCPU;</span>
<span id="L682"><span class="lineNum"> 682</span> : default:</span>
<span id="L683"><span class="lineNum"> 683</span> : TORCH_CHECK_NOT_IMPLEMENTED(</span>
<span id="L684"><span class="lineNum"> 684</span> : false,</span>
<span id="L685"><span class="lineNum"> 685</span> : &quot;Unsupported device type for mkldnn layout: &quot;,</span>
<span id="L686"><span class="lineNum"> 686</span> : device_.type());</span>
<span id="L687"><span class="lineNum"> 687</span> : }</span>
<span id="L688"><span class="lineNum"> 688</span> : case Layout::SparseCsr:</span>
<span id="L689"><span class="lineNum"> 689</span> : case Layout::SparseCsc:</span>
<span id="L690"><span class="lineNum"> 690</span> : case Layout::SparseBsr:</span>
<span id="L691"><span class="lineNum"> 691</span> : case Layout::SparseBsc:</span>
<span id="L692"><span class="lineNum"> 692</span> : switch (device_.type()) {</span>
<span id="L693"><span class="lineNum"> 693</span> : case c10::DeviceType::CPU:</span>
<span id="L694"><span class="lineNum"> 694</span> : return DispatchKey::SparseCsrCPU;</span>
<span id="L695"><span class="lineNum"> 695</span> : case c10::DeviceType::CUDA:</span>
<span id="L696"><span class="lineNum"> 696</span> : return DispatchKey::SparseCsrCUDA;</span>
<span id="L697"><span class="lineNum"> 697</span> : default:</span>
<span id="L698"><span class="lineNum"> 698</span> : AT_ERROR(</span>
<span id="L699"><span class="lineNum"> 699</span> : &quot;Unsupported device type for &quot;,</span>
<span id="L700"><span class="lineNum"> 700</span> : layout_,</span>
<span id="L701"><span class="lineNum"> 701</span> : &quot; layout: &quot;,</span>
<span id="L702"><span class="lineNum"> 702</span> : device_.type());</span>
<span id="L703"><span class="lineNum"> 703</span> : }</span>
<span id="L704"><span class="lineNum"> 704</span> : default:</span>
<span id="L705"><span class="lineNum"> 705</span> : TORCH_CHECK(false, &quot;Unsupported layout: &quot;, layout_);</span>
<span id="L706"><span class="lineNum"> 706</span> : }</span>
<span id="L707"><span class="lineNum"> 707</span> : }</span>
<span id="L708"><span class="lineNum"> 708</span> : </span>
<span id="L709"><span class="lineNum"> 709</span> : inline Layout dispatchKeyToLayout(DispatchKey dispatch_key) {</span>
<span id="L710"><span class="lineNum"> 710</span> : switch (dispatch_key) {</span>
<span id="L711"><span class="lineNum"> 711</span> : #define DO_CASE(bc, _) case DispatchKey::Sparse##bc:</span>
<span id="L712"><span class="lineNum"> 712</span> : C10_FORALL_BACKEND_COMPONENTS(DO_CASE, unused)</span>
<span id="L713"><span class="lineNum"> 713</span> : #undef DO_CASE</span>
<span id="L714"><span class="lineNum"> 714</span> : return Layout::Sparse;</span>
<span id="L715"><span class="lineNum"> 715</span> : case DispatchKey::SparseCsrCPU:</span>
<span id="L716"><span class="lineNum"> 716</span> : case DispatchKey::SparseCsrCUDA:</span>
<span id="L717"><span class="lineNum"> 717</span> : TORCH_CHECK(</span>
<span id="L718"><span class="lineNum"> 718</span> : false,</span>
<span id="L719"><span class="lineNum"> 719</span> : &quot;Cannot map DispatchKey &quot;,</span>
<span id="L720"><span class="lineNum"> 720</span> : dispatch_key,</span>
<span id="L721"><span class="lineNum"> 721</span> : &quot; to a unique layout.&quot;);</span>
<span id="L722"><span class="lineNum"> 722</span> : case DispatchKey::MkldnnCPU:</span>
<span id="L723"><span class="lineNum"> 723</span> : return Layout::Mkldnn;</span>
<span id="L724"><span class="lineNum"> 724</span> : default:</span>
<span id="L725"><span class="lineNum"> 725</span> : return Layout::Strided;</span>
<span id="L726"><span class="lineNum"> 726</span> : }</span>
<span id="L727"><span class="lineNum"> 727</span> : }</span>
<span id="L728"><span class="lineNum"> 728</span> : </span>
<span id="L729"><span class="lineNum"> 729</span> : inline c10::DeviceType dispatchKeyToDeviceType(DispatchKey dispatch_key) {</span>
<span id="L730"><span class="lineNum"> 730</span> : switch (dispatch_key) {</span>
<span id="L731"><span class="lineNum"> 731</span> : // stuff that's real</span>
<span id="L732"><span class="lineNum"> 732</span> : #define DO_CASE(suffix, prefix) \</span>
<span id="L733"><span class="lineNum"> 733</span> : case DispatchKey::prefix##suffix: \</span>
<span id="L734"><span class="lineNum"> 734</span> : return c10::DeviceType::suffix;</span>
<span id="L735"><span class="lineNum"> 735</span> : #define DO_CASES(_, prefix) C10_FORALL_BACKEND_DEVICE_TYPES(DO_CASE, prefix)</span>
<span id="L736"><span class="lineNum"> 736</span> : C10_FORALL_FUNCTIONALITY_KEYS(DO_CASES)</span>
<span id="L737"><span class="lineNum"> 737</span> : #undef DO_CASES</span>
<span id="L738"><span class="lineNum"> 738</span> : #undef DO_CASE</span>
<span id="L739"><span class="lineNum"> 739</span> : </span>
<span id="L740"><span class="lineNum"> 740</span> : case DispatchKey::MkldnnCPU:</span>
<span id="L741"><span class="lineNum"> 741</span> : return c10::DeviceType::CPU;</span>
<span id="L742"><span class="lineNum"> 742</span> : case DispatchKey::Vulkan:</span>
<span id="L743"><span class="lineNum"> 743</span> : return c10::DeviceType::Vulkan;</span>
<span id="L744"><span class="lineNum"> 744</span> : </span>
<span id="L745"><span class="lineNum"> 745</span> : case DispatchKey::ORT:</span>
<span id="L746"><span class="lineNum"> 746</span> : return c10::DeviceType::ORT;</span>
<span id="L747"><span class="lineNum"> 747</span> : default:</span>
<span id="L748"><span class="lineNum"> 748</span> : TORCH_CHECK(</span>
<span id="L749"><span class="lineNum"> 749</span> : false,</span>
<span id="L750"><span class="lineNum"> 750</span> : &quot;DispatchKey &quot;,</span>
<span id="L751"><span class="lineNum"> 751</span> : dispatch_key,</span>
<span id="L752"><span class="lineNum"> 752</span> : &quot; doesn't correspond to a device&quot;);</span>
<span id="L753"><span class="lineNum"> 753</span> : }</span>
<span id="L754"><span class="lineNum"> 754</span> : }</span>
<span id="L755"><span class="lineNum"> 755</span> : </span>
<span id="L756"><span class="lineNum"> 756</span> : inline TensorOptions dispatchKeyToTensorOptions(DispatchKey dispatch_key) {</span>
<span id="L757"><span class="lineNum"> 757</span> : return TensorOptions()</span>
<span id="L758"><span class="lineNum"> 758</span> : .layout(dispatchKeyToLayout(dispatch_key))</span>
<span id="L759"><span class="lineNum"> 759</span> : .device(dispatchKeyToDeviceType(dispatch_key));</span>
<span id="L760"><span class="lineNum"> 760</span> : }</span>
<span id="L761"><span class="lineNum"> 761</span> : </span>
<span id="L762"><span class="lineNum"> 762</span> : namespace detail {</span>
<span id="L763"><span class="lineNum"> 763</span> : inline bool backend_supports_empty_operator(const TensorOptions&amp; options) {</span>
<span id="L764"><span class="lineNum"> 764</span> : // Quantized backends don't support at::empty().</span>
<span id="L765"><span class="lineNum"> 765</span> : // They have separate operators like at::empty_quantized() that take in</span>
<span id="L766"><span class="lineNum"> 766</span> : // extra information about how to quantize the tensor.</span>
<span id="L767"><span class="lineNum"> 767</span> : return !isQIntType(typeMetaToScalarType(options.dtype()));</span>
<span id="L768"><span class="lineNum"> 768</span> : }</span>
<span id="L769"><span class="lineNum"> 769</span> : </span>
<span id="L770"><span class="lineNum"> 770</span> : } // namespace detail</span>
<span id="L771"><span class="lineNum"> 771</span> : </span>
<span id="L772"><span class="lineNum"> 772</span> : } // 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/c10/core/UndefinedTensorImpl.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/c10/core</a> - UndefinedTensorImpl.h<span style="font-size: 80%;"> (<a href="UndefinedTensorImpl.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="UndefinedTensorImpl.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="UndefinedTensorImpl.h.gcov.html#L15">_ZN3c1019UndefinedTensorImpl9singletonEv</a></td>
<td class="coverFnHi">1515278852</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/c10/core/UndefinedTensorImpl.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/c10/core</a> - UndefinedTensorImpl.h<span style="font-size: 80%;"> (<a href="UndefinedTensorImpl.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="UndefinedTensorImpl.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="UndefinedTensorImpl.h.gcov.html#L15">_ZN3c1019UndefinedTensorImpl9singletonEv</a></td>
<td class="coverFnHi">1515278852</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,113 @@
<!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/c10/core/UndefinedTensorImpl.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/c10/core</a> - UndefinedTensorImpl.h<span style="font-size: 80%;"> (source / <a href="UndefinedTensorImpl.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;c10/core/TensorImpl.h&gt;</span>
<span id="L4"><span class="lineNum"> 4</span> : </span>
<span id="L5"><span class="lineNum"> 5</span> : namespace c10 {</span>
<span id="L6"><span class="lineNum"> 6</span> : </span>
<span id="L7"><span class="lineNum"> 7</span> : struct C10_API UndefinedTensorImpl final : public TensorImpl {</span>
<span id="L8"><span class="lineNum"> 8</span> : public:</span>
<span id="L9"><span class="lineNum"> 9</span> : // Without this, we get:</span>
<span id="L10"><span class="lineNum"> 10</span> : // error: identifier &quot;at::UndefinedTensorImpl::_singleton&quot; is undefined in</span>
<span id="L11"><span class="lineNum"> 11</span> : // device code</span>
<span id="L12"><span class="lineNum"> 12</span> : // (ostensibly because the constexpr tricks MSVC into trying to compile this</span>
<span id="L13"><span class="lineNum"> 13</span> : // function for device as well).</span>
<span id="L14"><span class="lineNum"> 14</span> : #ifdef _WIN32</span>
<span id="L15"><span class="lineNum"> 15</span> : static inline TensorImpl* singleton() {</span>
<span id="L16"><span class="lineNum"> 16</span> : #else</span>
<span id="L17"><span class="lineNum"> 17</span> <span class="tlaGNC tlaBgGNC"> 1515278852 : static constexpr inline TensorImpl* singleton() {</span></span>
<span id="L18"><span class="lineNum"> 18</span> : #endif</span>
<span id="L19"><span class="lineNum"> 19</span> <span class="tlaGNC"> 1515278852 : return &amp;_singleton;</span></span>
<span id="L20"><span class="lineNum"> 20</span> : }</span>
<span id="L21"><span class="lineNum"> 21</span> : #ifdef DEBUG</span>
<span id="L22"><span class="lineNum"> 22</span> : bool has_storage() const override;</span>
<span id="L23"><span class="lineNum"> 23</span> : #endif</span>
<span id="L24"><span class="lineNum"> 24</span> : void set_storage_offset(int64_t offset) override;</span>
<span id="L25"><span class="lineNum"> 25</span> : </span>
<span id="L26"><span class="lineNum"> 26</span> : protected:</span>
<span id="L27"><span class="lineNum"> 27</span> : bool is_contiguous_custom(MemoryFormat format) const override;</span>
<span id="L28"><span class="lineNum"> 28</span> : IntArrayRef strides_custom() const override;</span>
<span id="L29"><span class="lineNum"> 29</span> : SymIntArrayRef sym_strides_custom() const override;</span>
<span id="L30"><span class="lineNum"> 30</span> : </span>
<span id="L31"><span class="lineNum"> 31</span> : private:</span>
<span id="L32"><span class="lineNum"> 32</span> : UndefinedTensorImpl();</span>
<span id="L33"><span class="lineNum"> 33</span> : static UndefinedTensorImpl _singleton;</span>
<span id="L34"><span class="lineNum"> 34</span> : const char* tensorimpl_type_name() const override;</span>
<span id="L35"><span class="lineNum"> 35</span> : };</span>
<span id="L36"><span class="lineNum"> 36</span> : </span>
<span id="L37"><span class="lineNum"> 37</span> : } // 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,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/c10/core/WrapDimMinimal.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/c10/core</a> - WrapDimMinimal.h<span style="font-size: 80%;"> (<a href="WrapDimMinimal.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">66.7&nbsp;%</td>
<td class="headerCovTableEntry">9</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="WrapDimMinimal.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="WrapDimMinimal.h.gcov.html#L28">_ZN3c1014maybe_wrap_dimEllb</a></td>
<td class="coverFnHi">15310736</td>
</tr>
<tr>
<td class="coverFn"><a href="WrapDimMinimal.h.gcov.html#L13">_ZN3c1015_maybe_wrap_dimIlEET_S1_S1_b</a></td>
<td class="coverFnHi">15310736</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/c10/core/WrapDimMinimal.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/c10/core</a> - WrapDimMinimal.h<span style="font-size: 80%;"> (<a href="WrapDimMinimal.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">66.7&nbsp;%</td>
<td class="headerCovTableEntry">9</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="WrapDimMinimal.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="WrapDimMinimal.h.gcov.html#L28">_ZN3c1014maybe_wrap_dimEllb</a></td>
<td class="coverFnHi">15310736</td>
</tr>
<tr>
<td class="coverFn"><a href="WrapDimMinimal.h.gcov.html#L13">_ZN3c1015_maybe_wrap_dimIlEET_S1_S1_b</a></td>
<td class="coverFnHi">15310736</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,120 @@
<!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/c10/core/WrapDimMinimal.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/c10/core</a> - WrapDimMinimal.h<span style="font-size: 80%;"> (source / <a href="WrapDimMinimal.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="headerCovTableEntryLo">66.7&nbsp;%</td>
<td class="headerCovTableEntry">9</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> : #include &lt;c10/core/SymInt.h&gt;</span>
<span id="L4"><span class="lineNum"> 4</span> : </span>
<span id="L5"><span class="lineNum"> 5</span> : namespace c10 {</span>
<span id="L6"><span class="lineNum"> 6</span> : </span>
<span id="L7"><span class="lineNum"> 7</span> : namespace detail {</span>
<span id="L8"><span class="lineNum"> 8</span> : // This template can only be specialized at int64_t and c10::SymInt;</span>
<span id="L9"><span class="lineNum"> 9</span> : // you'll get linker errors otherwise</span>
<span id="L10"><span class="lineNum"> 10</span> : template &lt;typename T&gt;</span>
<span id="L11"><span class="lineNum"> 11</span> : C10_API T maybe_wrap_dim_slow(T dim, T dim_post_expr, bool wrap_scalar);</span>
<span id="L12"><span class="lineNum"> 12</span> : } // namespace detail</span>
<span id="L13"><span class="lineNum"> 13</span> : </span>
<span id="L14"><span class="lineNum"> 14</span> : template &lt;typename T&gt;</span>
<span id="L15"><span class="lineNum"> 15</span> <span class="tlaGNC tlaBgGNC"> 15310736 : T _maybe_wrap_dim(T dim, T dim_post_expr, bool wrap_scalar = true) {</span></span>
<span id="L16"><span class="lineNum"> 16</span> : // Inline the fast paths</span>
<span id="L17"><span class="lineNum"> 17</span> <span class="tlaGNC"> 15310736 : if (C10_LIKELY(dim_post_expr * -1 &lt;= dim &amp;&amp; dim &lt; dim_post_expr)) {</span></span>
<span id="L18"><span class="lineNum"> 18</span> : // For SymInts, we want an explicit control flow to trigger a guard, so we</span>
<span id="L19"><span class="lineNum"> 19</span> : // may as well branch too.</span>
<span id="L20"><span class="lineNum"> 20</span> <span class="tlaGNC"> 15310736 : if (dim &lt; 0) {</span></span>
<span id="L21"><span class="lineNum"> 21</span> <span class="tlaUNC tlaBgUNC"> 0 : return dim + dim_post_expr;</span></span>
<span id="L22"><span class="lineNum"> 22</span> : }</span>
<span id="L23"><span class="lineNum"> 23</span> <span class="tlaGNC tlaBgGNC"> 15310736 : return dim;</span></span>
<span id="L24"><span class="lineNum"> 24</span> : }</span>
<span id="L25"><span class="lineNum"> 25</span> : // Check edge-cases out-of-line (wrapping scalars and out-of-bounds errors)</span>
<span id="L26"><span class="lineNum"> 26</span> <span class="tlaUNC tlaBgUNC"> 0 : return c10::detail::maybe_wrap_dim_slow&lt;T&gt;(</span></span>
<span id="L27"><span class="lineNum"> 27</span> <span class="tlaUNC"> 0 : std::move(dim), std::move(dim_post_expr), wrap_scalar);</span></span>
<span id="L28"><span class="lineNum"> 28</span> : }</span>
<span id="L29"><span class="lineNum"> 29</span> : </span>
<span id="L30"><span class="lineNum"> 30</span> <span class="tlaGNC tlaBgGNC"> 15310736 : inline int64_t maybe_wrap_dim(</span></span>
<span id="L31"><span class="lineNum"> 31</span> : int64_t dim,</span>
<span id="L32"><span class="lineNum"> 32</span> : int64_t dim_post_expr,</span>
<span id="L33"><span class="lineNum"> 33</span> : bool wrap_scalar = true) {</span>
<span id="L34"><span class="lineNum"> 34</span> <span class="tlaGNC"> 15310736 : return _maybe_wrap_dim(dim, dim_post_expr, wrap_scalar);</span></span>
<span id="L35"><span class="lineNum"> 35</span> : }</span>
<span id="L36"><span class="lineNum"> 36</span> : </span>
<span id="L37"><span class="lineNum"> 37</span> : inline c10::SymInt maybe_wrap_dim(</span>
<span id="L38"><span class="lineNum"> 38</span> : c10::SymInt dim,</span>
<span id="L39"><span class="lineNum"> 39</span> : c10::SymInt dim_post_expr,</span>
<span id="L40"><span class="lineNum"> 40</span> : bool wrap_scalar = true) {</span>
<span id="L41"><span class="lineNum"> 41</span> : return _maybe_wrap_dim(std::move(dim), std::move(dim_post_expr), wrap_scalar);</span>
<span id="L42"><span class="lineNum"> 42</span> : }</span>
<span id="L43"><span class="lineNum"> 43</span> : </span>
<span id="L44"><span class="lineNum"> 44</span> : } // 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,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/c10/core/impl/SizesAndStrides.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/c10/core/impl</a> - SizesAndStrides.h<span style="font-size: 80%;"> (<a href="SizesAndStrides.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.9&nbsp;%</td>
<td class="headerCovTableEntry">18</td>
<td class="headerCovTableEntry">16</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">7</td>
<td class="headerCovTableEntry">7</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="SizesAndStrides.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="SizesAndStrides.h.gcov.html#L158">_ZNK3c104impl15SizesAndStrides12strides_dataEv</a></td>
<td class="coverFnHi">80</td>
</tr>
<tr>
<td class="coverFn"><a href="SizesAndStrides.h.gcov.html#L198">_ZNK3c104impl15SizesAndStrides16strides_arrayrefEv</a></td>
<td class="coverFnHi">80</td>
</tr>
<tr>
<td class="coverFn"><a href="SizesAndStrides.h.gcov.html#L144">_ZNK3c104impl15SizesAndStrides14sizes_arrayrefEv</a></td>
<td class="coverFnHi">88706</td>
</tr>
<tr>
<td class="coverFn"><a href="SizesAndStrides.h.gcov.html#L213">_ZNK3c104impl15SizesAndStrides17size_at_uncheckedEm</a></td>
<td class="coverFnHi">15310736</td>
</tr>
<tr>
<td class="coverFn"><a href="SizesAndStrides.h.gcov.html#L112">_ZNK3c104impl15SizesAndStrides10sizes_dataEv</a></td>
<td class="coverFnHi">15399442</td>
</tr>
<tr>
<td class="coverFn"><a href="SizesAndStrides.h.gcov.html#L265">_ZNK3c104impl15SizesAndStrides8isInlineEv</a></td>
<td class="coverFnHi">15399522</td>
</tr>
<tr>
<td class="coverFn"><a href="SizesAndStrides.h.gcov.html#L108">_ZNK3c104impl15SizesAndStrides4sizeEv</a></td>
<td class="coverFnHi">15406674</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/c10/core/impl/SizesAndStrides.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/c10/core/impl</a> - SizesAndStrides.h<span style="font-size: 80%;"> (<a href="SizesAndStrides.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.9&nbsp;%</td>
<td class="headerCovTableEntry">18</td>
<td class="headerCovTableEntry">16</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">7</td>
<td class="headerCovTableEntry">7</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="SizesAndStrides.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="SizesAndStrides.h.gcov.html#L112">_ZNK3c104impl15SizesAndStrides10sizes_dataEv</a></td>
<td class="coverFnHi">15399442</td>
</tr>
<tr>
<td class="coverFn"><a href="SizesAndStrides.h.gcov.html#L158">_ZNK3c104impl15SizesAndStrides12strides_dataEv</a></td>
<td class="coverFnHi">80</td>
</tr>
<tr>
<td class="coverFn"><a href="SizesAndStrides.h.gcov.html#L144">_ZNK3c104impl15SizesAndStrides14sizes_arrayrefEv</a></td>
<td class="coverFnHi">88706</td>
</tr>
<tr>
<td class="coverFn"><a href="SizesAndStrides.h.gcov.html#L198">_ZNK3c104impl15SizesAndStrides16strides_arrayrefEv</a></td>
<td class="coverFnHi">80</td>
</tr>
<tr>
<td class="coverFn"><a href="SizesAndStrides.h.gcov.html#L213">_ZNK3c104impl15SizesAndStrides17size_at_uncheckedEm</a></td>
<td class="coverFnHi">15310736</td>
</tr>
<tr>
<td class="coverFn"><a href="SizesAndStrides.h.gcov.html#L108">_ZNK3c104impl15SizesAndStrides4sizeEv</a></td>
<td class="coverFnHi">15406674</td>
</tr>
<tr>
<td class="coverFn"><a href="SizesAndStrides.h.gcov.html#L265">_ZNK3c104impl15SizesAndStrides8isInlineEv</a></td>
<td class="coverFnHi">15399522</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,384 @@
<!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/c10/core/impl/SizesAndStrides.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/c10/core/impl</a> - SizesAndStrides.h<span style="font-size: 80%;"> (source / <a href="SizesAndStrides.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.9&nbsp;%</td>
<td class="headerCovTableEntry">18</td>
<td class="headerCovTableEntry">16</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">7</td>
<td class="headerCovTableEntry">7</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;algorithm&gt;</span>
<span id="L4"><span class="lineNum"> 4</span> : #include &lt;cstdint&gt;</span>
<span id="L5"><span class="lineNum"> 5</span> : </span>
<span id="L6"><span class="lineNum"> 6</span> : #include &lt;c10/macros/Macros.h&gt;</span>
<span id="L7"><span class="lineNum"> 7</span> : #include &lt;c10/util/ArrayRef.h&gt;</span>
<span id="L8"><span class="lineNum"> 8</span> : #include &lt;c10/util/SmallVector.h&gt;</span>
<span id="L9"><span class="lineNum"> 9</span> : </span>
<span id="L10"><span class="lineNum"> 10</span> : #define C10_SIZES_AND_STRIDES_MAX_INLINE_SIZE 5</span>
<span id="L11"><span class="lineNum"> 11</span> : </span>
<span id="L12"><span class="lineNum"> 12</span> : namespace c10 {</span>
<span id="L13"><span class="lineNum"> 13</span> : namespace impl {</span>
<span id="L14"><span class="lineNum"> 14</span> : </span>
<span id="L15"><span class="lineNum"> 15</span> : // Packed container for TensorImpl sizes and strides.</span>
<span id="L16"><span class="lineNum"> 16</span> : // This design improves on the previous approach of using a pair of</span>
<span id="L17"><span class="lineNum"> 17</span> : // c10::SmallVector&lt;int64_t, 5&gt; by specializing for the operations we</span>
<span id="L18"><span class="lineNum"> 18</span> : // actually use and enforcing that the number of sizes is the same as</span>
<span id="L19"><span class="lineNum"> 19</span> : // the number of strides. The memory layout is as follows:</span>
<span id="L20"><span class="lineNum"> 20</span> : //</span>
<span id="L21"><span class="lineNum"> 21</span> : // 1 size_t for the size</span>
<span id="L22"><span class="lineNum"> 22</span> : // 5 eightbytes of inline sizes and 5 eightbytes of inline strides, OR pointer</span>
<span id="L23"><span class="lineNum"> 23</span> : // to out-of-line array</span>
<span id="L24"><span class="lineNum"> 24</span> : class C10_API SizesAndStrides {</span>
<span id="L25"><span class="lineNum"> 25</span> : public:</span>
<span id="L26"><span class="lineNum"> 26</span> : // TODO: different iterator types for sizes &amp; strides to prevent</span>
<span id="L27"><span class="lineNum"> 27</span> : // mixing the two accidentally.</span>
<span id="L28"><span class="lineNum"> 28</span> : using sizes_iterator = int64_t*;</span>
<span id="L29"><span class="lineNum"> 29</span> : using sizes_const_iterator = const int64_t*;</span>
<span id="L30"><span class="lineNum"> 30</span> : using strides_iterator = int64_t*;</span>
<span id="L31"><span class="lineNum"> 31</span> : using strides_const_iterator = const int64_t*;</span>
<span id="L32"><span class="lineNum"> 32</span> : </span>
<span id="L33"><span class="lineNum"> 33</span> : SizesAndStrides() : size_(1) {</span>
<span id="L34"><span class="lineNum"> 34</span> : size_at_unchecked(0) = 0;</span>
<span id="L35"><span class="lineNum"> 35</span> : stride_at_unchecked(0) = 1;</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> : ~SizesAndStrides() {</span>
<span id="L39"><span class="lineNum"> 39</span> : if (C10_UNLIKELY(!isInline())) {</span>
<span id="L40"><span class="lineNum"> 40</span> : free(outOfLineStorage_);</span>
<span id="L41"><span class="lineNum"> 41</span> : }</span>
<span id="L42"><span class="lineNum"> 42</span> : }</span>
<span id="L43"><span class="lineNum"> 43</span> : </span>
<span id="L44"><span class="lineNum"> 44</span> : SizesAndStrides(const SizesAndStrides&amp; rhs) : size_(rhs.size_) {</span>
<span id="L45"><span class="lineNum"> 45</span> : if (C10_LIKELY(rhs.isInline())) {</span>
<span id="L46"><span class="lineNum"> 46</span> : copyDataInline(rhs);</span>
<span id="L47"><span class="lineNum"> 47</span> : } else {</span>
<span id="L48"><span class="lineNum"> 48</span> : allocateOutOfLineStorage(size_);</span>
<span id="L49"><span class="lineNum"> 49</span> : copyDataOutline(rhs);</span>
<span id="L50"><span class="lineNum"> 50</span> : }</span>
<span id="L51"><span class="lineNum"> 51</span> : }</span>
<span id="L52"><span class="lineNum"> 52</span> : </span>
<span id="L53"><span class="lineNum"> 53</span> : SizesAndStrides&amp; operator=(const SizesAndStrides&amp; rhs) {</span>
<span id="L54"><span class="lineNum"> 54</span> : if (this == &amp;rhs) {</span>
<span id="L55"><span class="lineNum"> 55</span> : return *this;</span>
<span id="L56"><span class="lineNum"> 56</span> : }</span>
<span id="L57"><span class="lineNum"> 57</span> : if (C10_LIKELY(rhs.isInline())) {</span>
<span id="L58"><span class="lineNum"> 58</span> : if (C10_UNLIKELY(!isInline())) {</span>
<span id="L59"><span class="lineNum"> 59</span> : free(outOfLineStorage_);</span>
<span id="L60"><span class="lineNum"> 60</span> : }</span>
<span id="L61"><span class="lineNum"> 61</span> : copyDataInline(rhs);</span>
<span id="L62"><span class="lineNum"> 62</span> : } else {</span>
<span id="L63"><span class="lineNum"> 63</span> : if (isInline()) {</span>
<span id="L64"><span class="lineNum"> 64</span> : allocateOutOfLineStorage(rhs.size_);</span>
<span id="L65"><span class="lineNum"> 65</span> : } else {</span>
<span id="L66"><span class="lineNum"> 66</span> : resizeOutOfLineStorage(rhs.size_);</span>
<span id="L67"><span class="lineNum"> 67</span> : }</span>
<span id="L68"><span class="lineNum"> 68</span> : copyDataOutline(rhs);</span>
<span id="L69"><span class="lineNum"> 69</span> : }</span>
<span id="L70"><span class="lineNum"> 70</span> : size_ = rhs.size_;</span>
<span id="L71"><span class="lineNum"> 71</span> : return *this;</span>
<span id="L72"><span class="lineNum"> 72</span> : }</span>
<span id="L73"><span class="lineNum"> 73</span> : </span>
<span id="L74"><span class="lineNum"> 74</span> : // Move from rhs. rhs.size() == 0 afterwards.</span>
<span id="L75"><span class="lineNum"> 75</span> : SizesAndStrides(SizesAndStrides&amp;&amp; rhs) noexcept : size_(rhs.size_) {</span>
<span id="L76"><span class="lineNum"> 76</span> : if (C10_LIKELY(isInline())) {</span>
<span id="L77"><span class="lineNum"> 77</span> : memcpy(inlineStorage_, rhs.inlineStorage_, sizeof(inlineStorage_));</span>
<span id="L78"><span class="lineNum"> 78</span> : } else {</span>
<span id="L79"><span class="lineNum"> 79</span> : outOfLineStorage_ = rhs.outOfLineStorage_;</span>
<span id="L80"><span class="lineNum"> 80</span> : rhs.outOfLineStorage_ = nullptr;</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> : rhs.size_ = 0;</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> : // Move from rhs. rhs.size() == 0 afterwards.</span>
<span id="L87"><span class="lineNum"> 87</span> : SizesAndStrides&amp; operator=(SizesAndStrides&amp;&amp; rhs) noexcept {</span>
<span id="L88"><span class="lineNum"> 88</span> : if (this == &amp;rhs) {</span>
<span id="L89"><span class="lineNum"> 89</span> : return *this;</span>
<span id="L90"><span class="lineNum"> 90</span> : }</span>
<span id="L91"><span class="lineNum"> 91</span> : if (C10_LIKELY(rhs.isInline())) {</span>
<span id="L92"><span class="lineNum"> 92</span> : if (C10_UNLIKELY(!isInline())) {</span>
<span id="L93"><span class="lineNum"> 93</span> : free(outOfLineStorage_);</span>
<span id="L94"><span class="lineNum"> 94</span> : }</span>
<span id="L95"><span class="lineNum"> 95</span> : copyDataInline(rhs);</span>
<span id="L96"><span class="lineNum"> 96</span> : } else {</span>
<span id="L97"><span class="lineNum"> 97</span> : // They're outline. We're going to steal their vector.</span>
<span id="L98"><span class="lineNum"> 98</span> : if (!isInline()) {</span>
<span id="L99"><span class="lineNum"> 99</span> : free(outOfLineStorage_);</span>
<span id="L100"><span class="lineNum"> 100</span> : }</span>
<span id="L101"><span class="lineNum"> 101</span> : outOfLineStorage_ = rhs.outOfLineStorage_;</span>
<span id="L102"><span class="lineNum"> 102</span> : rhs.outOfLineStorage_ = nullptr;</span>
<span id="L103"><span class="lineNum"> 103</span> : }</span>
<span id="L104"><span class="lineNum"> 104</span> : size_ = rhs.size_;</span>
<span id="L105"><span class="lineNum"> 105</span> : rhs.size_ = 0;</span>
<span id="L106"><span class="lineNum"> 106</span> : </span>
<span id="L107"><span class="lineNum"> 107</span> : return *this;</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 class="tlaGNC tlaBgGNC"> 15406674 : size_t size() const noexcept {</span></span>
<span id="L111"><span class="lineNum"> 111</span> <span class="tlaGNC"> 15406674 : return size_;</span></span>
<span id="L112"><span class="lineNum"> 112</span> : }</span>
<span id="L113"><span class="lineNum"> 113</span> : </span>
<span id="L114"><span class="lineNum"> 114</span> <span class="tlaGNC"> 15399442 : const int64_t* sizes_data() const noexcept {</span></span>
<span id="L115"><span class="lineNum"> 115</span> <span class="tlaGNC"> 15399442 : if (C10_LIKELY(isInline())) {</span></span>
<span id="L116"><span class="lineNum"> 116</span> <span class="tlaGNC"> 15399442 : return &amp;inlineStorage_[0];</span></span>
<span id="L117"><span class="lineNum"> 117</span> : } else {</span>
<span id="L118"><span class="lineNum"> 118</span> <span class="tlaUNC tlaBgUNC"> 0 : return &amp;outOfLineStorage_[0];</span></span>
<span id="L119"><span class="lineNum"> 119</span> : }</span>
<span id="L120"><span class="lineNum"> 120</span> : }</span>
<span id="L121"><span class="lineNum"> 121</span> : </span>
<span id="L122"><span class="lineNum"> 122</span> : int64_t* sizes_data() noexcept {</span>
<span id="L123"><span class="lineNum"> 123</span> : if (C10_LIKELY(isInline())) {</span>
<span id="L124"><span class="lineNum"> 124</span> : return &amp;inlineStorage_[0];</span>
<span id="L125"><span class="lineNum"> 125</span> : } else {</span>
<span id="L126"><span class="lineNum"> 126</span> : return &amp;outOfLineStorage_[0];</span>
<span id="L127"><span class="lineNum"> 127</span> : }</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> : sizes_const_iterator sizes_begin() const noexcept {</span>
<span id="L131"><span class="lineNum"> 131</span> : return sizes_data();</span>
<span id="L132"><span class="lineNum"> 132</span> : }</span>
<span id="L133"><span class="lineNum"> 133</span> : </span>
<span id="L134"><span class="lineNum"> 134</span> : sizes_iterator sizes_begin() noexcept {</span>
<span id="L135"><span class="lineNum"> 135</span> : return sizes_data();</span>
<span id="L136"><span class="lineNum"> 136</span> : }</span>
<span id="L137"><span class="lineNum"> 137</span> : </span>
<span id="L138"><span class="lineNum"> 138</span> : sizes_const_iterator sizes_end() const noexcept {</span>
<span id="L139"><span class="lineNum"> 139</span> : return sizes_begin() + size();</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> : sizes_iterator sizes_end() noexcept {</span>
<span id="L143"><span class="lineNum"> 143</span> : return sizes_begin() + size();</span>
<span id="L144"><span class="lineNum"> 144</span> : }</span>
<span id="L145"><span class="lineNum"> 145</span> : </span>
<span id="L146"><span class="lineNum"> 146</span> <span class="tlaGNC tlaBgGNC"> 88706 : IntArrayRef sizes_arrayref() const noexcept {</span></span>
<span id="L147"><span class="lineNum"> 147</span> <span class="tlaGNC"> 88706 : return IntArrayRef{sizes_data(), size()};</span></span>
<span id="L148"><span class="lineNum"> 148</span> : }</span>
<span id="L149"><span class="lineNum"> 149</span> : </span>
<span id="L150"><span class="lineNum"> 150</span> : void set_sizes(IntArrayRef newSizes) {</span>
<span id="L151"><span class="lineNum"> 151</span> : resize(newSizes.size());</span>
<span id="L152"><span class="lineNum"> 152</span> : std::copy(newSizes.begin(), newSizes.end(), sizes_begin());</span>
<span id="L153"><span class="lineNum"> 153</span> : }</span>
<span id="L154"><span class="lineNum"> 154</span> : </span>
<span id="L155"><span class="lineNum"> 155</span> : void set_strides(IntArrayRef strides) {</span>
<span id="L156"><span class="lineNum"> 156</span> : TORCH_INTERNAL_ASSERT(strides.size() == size());</span>
<span id="L157"><span class="lineNum"> 157</span> : std::copy(strides.begin(), strides.end(), strides_begin());</span>
<span id="L158"><span class="lineNum"> 158</span> : }</span>
<span id="L159"><span class="lineNum"> 159</span> : </span>
<span id="L160"><span class="lineNum"> 160</span> <span class="tlaGNC"> 80 : const int64_t* strides_data() const noexcept {</span></span>
<span id="L161"><span class="lineNum"> 161</span> <span class="tlaGNC"> 80 : if (C10_LIKELY(isInline())) {</span></span>
<span id="L162"><span class="lineNum"> 162</span> <span class="tlaGNC"> 80 : return &amp;inlineStorage_[C10_SIZES_AND_STRIDES_MAX_INLINE_SIZE];</span></span>
<span id="L163"><span class="lineNum"> 163</span> : } else {</span>
<span id="L164"><span class="lineNum"> 164</span> <span class="tlaUNC tlaBgUNC"> 0 : return &amp;outOfLineStorage_[size()];</span></span>
<span id="L165"><span class="lineNum"> 165</span> : }</span>
<span id="L166"><span class="lineNum"> 166</span> : }</span>
<span id="L167"><span class="lineNum"> 167</span> : </span>
<span id="L168"><span class="lineNum"> 168</span> : int64_t* strides_data() noexcept {</span>
<span id="L169"><span class="lineNum"> 169</span> : if (C10_LIKELY(isInline())) {</span>
<span id="L170"><span class="lineNum"> 170</span> : return &amp;inlineStorage_[C10_SIZES_AND_STRIDES_MAX_INLINE_SIZE];</span>
<span id="L171"><span class="lineNum"> 171</span> : } else {</span>
<span id="L172"><span class="lineNum"> 172</span> : return &amp;outOfLineStorage_[size()];</span>
<span id="L173"><span class="lineNum"> 173</span> : }</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> : strides_const_iterator strides_begin() const noexcept {</span>
<span id="L177"><span class="lineNum"> 177</span> : if (C10_LIKELY(isInline())) {</span>
<span id="L178"><span class="lineNum"> 178</span> : return &amp;inlineStorage_[C10_SIZES_AND_STRIDES_MAX_INLINE_SIZE];</span>
<span id="L179"><span class="lineNum"> 179</span> : } else {</span>
<span id="L180"><span class="lineNum"> 180</span> : return &amp;outOfLineStorage_[size()];</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> : </span>
<span id="L184"><span class="lineNum"> 184</span> : strides_iterator strides_begin() noexcept {</span>
<span id="L185"><span class="lineNum"> 185</span> : if (C10_LIKELY(isInline())) {</span>
<span id="L186"><span class="lineNum"> 186</span> : return &amp;inlineStorage_[C10_SIZES_AND_STRIDES_MAX_INLINE_SIZE];</span>
<span id="L187"><span class="lineNum"> 187</span> : } else {</span>
<span id="L188"><span class="lineNum"> 188</span> : return &amp;outOfLineStorage_[size()];</span>
<span id="L189"><span class="lineNum"> 189</span> : }</span>
<span id="L190"><span class="lineNum"> 190</span> : }</span>
<span id="L191"><span class="lineNum"> 191</span> : </span>
<span id="L192"><span class="lineNum"> 192</span> : strides_const_iterator strides_end() const noexcept {</span>
<span id="L193"><span class="lineNum"> 193</span> : return strides_begin() + size();</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> : strides_iterator strides_end() noexcept {</span>
<span id="L197"><span class="lineNum"> 197</span> : return strides_begin() + size();</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> <span class="tlaGNC tlaBgGNC"> 80 : IntArrayRef strides_arrayref() const noexcept {</span></span>
<span id="L201"><span class="lineNum"> 201</span> <span class="tlaGNC"> 80 : return IntArrayRef{strides_data(), size()};</span></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> : // Size accessors.</span>
<span id="L205"><span class="lineNum"> 205</span> : int64_t size_at(size_t idx) const noexcept {</span>
<span id="L206"><span class="lineNum"> 206</span> : assert(idx &lt; size());</span>
<span id="L207"><span class="lineNum"> 207</span> : return sizes_data()[idx];</span>
<span id="L208"><span class="lineNum"> 208</span> : }</span>
<span id="L209"><span class="lineNum"> 209</span> : </span>
<span id="L210"><span class="lineNum"> 210</span> : int64_t&amp; size_at(size_t idx) noexcept {</span>
<span id="L211"><span class="lineNum"> 211</span> : assert(idx &lt; size());</span>
<span id="L212"><span class="lineNum"> 212</span> : return sizes_data()[idx];</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> <span class="tlaGNC"> 15310736 : int64_t size_at_unchecked(size_t idx) const noexcept {</span></span>
<span id="L216"><span class="lineNum"> 216</span> <span class="tlaGNC"> 15310736 : return sizes_data()[idx];</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> : int64_t&amp; size_at_unchecked(size_t idx) noexcept {</span>
<span id="L220"><span class="lineNum"> 220</span> : return sizes_data()[idx];</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> : // Size accessors.</span>
<span id="L224"><span class="lineNum"> 224</span> : int64_t stride_at(size_t idx) const noexcept {</span>
<span id="L225"><span class="lineNum"> 225</span> : assert(idx &lt; size());</span>
<span id="L226"><span class="lineNum"> 226</span> : return strides_data()[idx];</span>
<span id="L227"><span class="lineNum"> 227</span> : }</span>
<span id="L228"><span class="lineNum"> 228</span> : </span>
<span id="L229"><span class="lineNum"> 229</span> : int64_t&amp; stride_at(size_t idx) noexcept {</span>
<span id="L230"><span class="lineNum"> 230</span> : assert(idx &lt; size());</span>
<span id="L231"><span class="lineNum"> 231</span> : return strides_data()[idx];</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> : int64_t stride_at_unchecked(size_t idx) const noexcept {</span>
<span id="L235"><span class="lineNum"> 235</span> : return strides_data()[idx];</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> : int64_t&amp; stride_at_unchecked(size_t idx) noexcept {</span>
<span id="L239"><span class="lineNum"> 239</span> : return strides_data()[idx];</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> : void resize(size_t newSize) {</span>
<span id="L243"><span class="lineNum"> 243</span> : const auto oldSize = size();</span>
<span id="L244"><span class="lineNum"> 244</span> : if (newSize == oldSize) {</span>
<span id="L245"><span class="lineNum"> 245</span> : return;</span>
<span id="L246"><span class="lineNum"> 246</span> : }</span>
<span id="L247"><span class="lineNum"> 247</span> : if (C10_LIKELY(</span>
<span id="L248"><span class="lineNum"> 248</span> : newSize &lt;= C10_SIZES_AND_STRIDES_MAX_INLINE_SIZE &amp;&amp; isInline())) {</span>
<span id="L249"><span class="lineNum"> 249</span> : if (oldSize &lt; newSize) {</span>
<span id="L250"><span class="lineNum"> 250</span> : const auto bytesToZero =</span>
<span id="L251"><span class="lineNum"> 251</span> : (newSize - oldSize) * sizeof(inlineStorage_[0]);</span>
<span id="L252"><span class="lineNum"> 252</span> : memset(&amp;inlineStorage_[oldSize], 0, bytesToZero);</span>
<span id="L253"><span class="lineNum"> 253</span> : memset(</span>
<span id="L254"><span class="lineNum"> 254</span> : &amp;inlineStorage_[C10_SIZES_AND_STRIDES_MAX_INLINE_SIZE + oldSize],</span>
<span id="L255"><span class="lineNum"> 255</span> : 0,</span>
<span id="L256"><span class="lineNum"> 256</span> : bytesToZero);</span>
<span id="L257"><span class="lineNum"> 257</span> : }</span>
<span id="L258"><span class="lineNum"> 258</span> : size_ = newSize;</span>
<span id="L259"><span class="lineNum"> 259</span> : } else {</span>
<span id="L260"><span class="lineNum"> 260</span> : resizeSlowPath(newSize, oldSize);</span>
<span id="L261"><span class="lineNum"> 261</span> : }</span>
<span id="L262"><span class="lineNum"> 262</span> : }</span>
<span id="L263"><span class="lineNum"> 263</span> : </span>
<span id="L264"><span class="lineNum"> 264</span> : void resizeSlowPath(size_t newSize, size_t oldSize);</span>
<span id="L265"><span class="lineNum"> 265</span> : </span>
<span id="L266"><span class="lineNum"> 266</span> : private:</span>
<span id="L267"><span class="lineNum"> 267</span> <span class="tlaGNC"> 15399522 : bool isInline() const noexcept {</span></span>
<span id="L268"><span class="lineNum"> 268</span> <span class="tlaGNC"> 15399522 : return size_ &lt;= C10_SIZES_AND_STRIDES_MAX_INLINE_SIZE;</span></span>
<span id="L269"><span class="lineNum"> 269</span> : }</span>
<span id="L270"><span class="lineNum"> 270</span> : </span>
<span id="L271"><span class="lineNum"> 271</span> : void copyDataInline(const SizesAndStrides&amp; rhs) {</span>
<span id="L272"><span class="lineNum"> 272</span> : TORCH_INTERNAL_ASSERT_DEBUG_ONLY(rhs.isInline());</span>
<span id="L273"><span class="lineNum"> 273</span> : memcpy(inlineStorage_, rhs.inlineStorage_, sizeof(inlineStorage_));</span>
<span id="L274"><span class="lineNum"> 274</span> : }</span>
<span id="L275"><span class="lineNum"> 275</span> : </span>
<span id="L276"><span class="lineNum"> 276</span> : static size_t storageBytes(size_t size) noexcept {</span>
<span id="L277"><span class="lineNum"> 277</span> : return size * 2 * sizeof(int64_t);</span>
<span id="L278"><span class="lineNum"> 278</span> : }</span>
<span id="L279"><span class="lineNum"> 279</span> : </span>
<span id="L280"><span class="lineNum"> 280</span> : void allocateOutOfLineStorage(size_t size) {</span>
<span id="L281"><span class="lineNum"> 281</span> : outOfLineStorage_ = static_cast&lt;int64_t*&gt;(malloc(storageBytes(size)));</span>
<span id="L282"><span class="lineNum"> 282</span> : TORCH_CHECK(</span>
<span id="L283"><span class="lineNum"> 283</span> : outOfLineStorage_,</span>
<span id="L284"><span class="lineNum"> 284</span> : &quot;Could not allocate memory for Tensor SizesAndStrides!&quot;);</span>
<span id="L285"><span class="lineNum"> 285</span> : }</span>
<span id="L286"><span class="lineNum"> 286</span> : </span>
<span id="L287"><span class="lineNum"> 287</span> : void resizeOutOfLineStorage(size_t newSize) {</span>
<span id="L288"><span class="lineNum"> 288</span> : TORCH_INTERNAL_ASSERT_DEBUG_ONLY(!isInline());</span>
<span id="L289"><span class="lineNum"> 289</span> : outOfLineStorage_ = static_cast&lt;int64_t*&gt;(</span>
<span id="L290"><span class="lineNum"> 290</span> : realloc(outOfLineStorage_, storageBytes(newSize)));</span>
<span id="L291"><span class="lineNum"> 291</span> : TORCH_CHECK(</span>
<span id="L292"><span class="lineNum"> 292</span> : outOfLineStorage_,</span>
<span id="L293"><span class="lineNum"> 293</span> : &quot;Could not allocate memory for Tensor SizesAndStrides!&quot;);</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> : void copyDataOutline(const SizesAndStrides&amp; rhs) noexcept {</span>
<span id="L297"><span class="lineNum"> 297</span> : memcpy(outOfLineStorage_, rhs.outOfLineStorage_, storageBytes(rhs.size_));</span>
<span id="L298"><span class="lineNum"> 298</span> : }</span>
<span id="L299"><span class="lineNum"> 299</span> : </span>
<span id="L300"><span class="lineNum"> 300</span> : size_t size_;</span>
<span id="L301"><span class="lineNum"> 301</span> : union {</span>
<span id="L302"><span class="lineNum"> 302</span> : int64_t* outOfLineStorage_;</span>
<span id="L303"><span class="lineNum"> 303</span> : int64_t inlineStorage_[C10_SIZES_AND_STRIDES_MAX_INLINE_SIZE * 2]{};</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> : </span>
<span id="L307"><span class="lineNum"> 307</span> : } // namespace impl</span>
<span id="L308"><span class="lineNum"> 308</span> : } // 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,105 @@
<!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/c10/core/impl</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/c10/core/impl</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.9&nbsp;%</td>
<td class="headerCovTableEntry">18</td>
<td class="headerCovTableEntry">16</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">7</td>
<td class="headerCovTableEntry">7</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="SizesAndStrides.h.gcov.html">SizesAndStrides.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../../amber.png" width=89 height=10 alt="88.9%"><img src="../../../../../snow.png" width=11 height=10 alt="88.9%"></td></tr></table>
</td>
<td class="coverPerMed">88.9&nbsp;%</td>
<td class="coverNumDflt">18</td>
<td class="coverNumDflt">16</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">7</td>
<td class="coverNumDflt">7</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,105 @@
<!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/c10/core/impl</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/c10/core/impl</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.9&nbsp;%</td>
<td class="headerCovTableEntry">18</td>
<td class="headerCovTableEntry">16</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">7</td>
<td class="headerCovTableEntry">7</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="SizesAndStrides.h.gcov.html">SizesAndStrides.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../../amber.png" width=89 height=10 alt="88.9%"><img src="../../../../../snow.png" width=11 height=10 alt="88.9%"></td></tr></table>
</td>
<td class="coverPerMed">88.9&nbsp;%</td>
<td class="coverNumDflt">18</td>
<td class="coverNumDflt">16</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">7</td>
<td class="coverNumDflt">7</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,105 @@
<!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/c10/core/impl</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/c10/core/impl</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.9&nbsp;%</td>
<td class="headerCovTableEntry">18</td>
<td class="headerCovTableEntry">16</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">7</td>
<td class="headerCovTableEntry">7</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="SizesAndStrides.h.gcov.html">SizesAndStrides.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../../amber.png" width=89 height=10 alt="88.9%"><img src="../../../../../snow.png" width=11 height=10 alt="88.9%"></td></tr></table>
</td>
<td class="coverPerMed">88.9&nbsp;%</td>
<td class="coverNumDflt">18</td>
<td class="coverNumDflt">16</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">7</td>
<td class="coverNumDflt">7</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,225 @@
<!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/c10/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/c10/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="headerCovTableEntryMed">79.5&nbsp;%</td>
<td class="headerCovTableEntry">229</td>
<td class="headerCovTableEntry">182</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="headerCovTableEntryMed">85.7&nbsp;%</td>
<td class="headerCovTableEntry">77</td>
<td class="headerCovTableEntry">66</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="GradMode.h.gcov.html">GradMode.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">7</td>
<td class="coverNumDflt"></td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">3</td>
<td class="coverNumDflt"></td>
</tr>
<tr>
<td class="coverFile"><a href="ScalarType.h.gcov.html">ScalarType.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=50 height=10 alt="50.0%"><img src="../../../../snow.png" width=50 height=10 alt="50.0%"></td></tr></table>
</td>
<td class="coverPerLo">50.0&nbsp;%</td>
<td class="coverNumDflt">14</td>
<td class="coverNumDflt">7</td>
<td class="coverPerLo">50.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">2</td>
</tr>
<tr>
<td class="coverFile"><a href="TensorOptions.h.gcov.html">TensorOptions.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../amber.png" width=86 height=10 alt="85.9%"><img src="../../../../snow.png" width=14 height=10 alt="85.9%"></td></tr></table>
</td>
<td class="coverPerMed">85.9&nbsp;%</td>
<td class="coverNumDflt">85</td>
<td class="coverNumDflt">73</td>
<td class="coverPerMed">84.0&nbsp;%</td>
<td class="coverNumDflt">25</td>
<td class="coverNumDflt">21</td>
</tr>
<tr>
<td class="coverFile"><a href="SymInt.h.gcov.html">SymInt.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=71 height=10 alt="71.0%"><img src="../../../../snow.png" width=29 height=10 alt="71.0%"></td></tr></table>
</td>
<td class="coverPerLo">71.0&nbsp;%</td>
<td class="coverNumDflt">31</td>
<td class="coverNumDflt">22</td>
<td class="coverPerMed">87.5&nbsp;%</td>
<td class="coverNumDflt">8</td>
<td class="coverNumDflt">7</td>
</tr>
<tr>
<td class="coverFile"><a href="Scalar.h.gcov.html">Scalar.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="82.6%"><img src="../../../../snow.png" width=17 height=10 alt="82.6%"></td></tr></table>
</td>
<td class="coverPerMed">82.6&nbsp;%</td>
<td class="coverNumDflt">23</td>
<td class="coverNumDflt">19</td>
<td class="coverPerHi">93.3&nbsp;%</td>
<td class="coverNumDflt">15</td>
<td class="coverNumDflt">14</td>
</tr>
<tr>
<td class="coverFile"><a href="SymIntArrayRef.h.gcov.html">SymIntArrayRef.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">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="UndefinedTensorImpl.h.gcov.html">UndefinedTensorImpl.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="WrapDimMinimal.h.gcov.html">WrapDimMinimal.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=67 height=10 alt="66.7%"><img src="../../../../snow.png" width=33 height=10 alt="66.7%"></td></tr></table>
</td>
<td class="coverPerLo">66.7&nbsp;%</td>
<td class="coverNumDflt">9</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="Device.h.gcov.html">Device.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">3</td>
<td class="coverNumDflt">3</td>
</tr>
<tr>
<td class="coverFile"><a href="ScalarTypeToTypeMeta.h.gcov.html">ScalarTypeToTypeMeta.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">8</td>
<td class="coverNumDflt">8</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="TensorImpl.h.gcov.html">TensorImpl.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../amber.png" width=86 height=10 alt="85.7%"><img src="../../../../snow.png" width=14 height=10 alt="85.7%"></td></tr></table>
</td>
<td class="coverPerMed">85.7&nbsp;%</td>
<td class="coverNumDflt">35</td>
<td class="coverNumDflt">30</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">12</td>
<td class="coverNumDflt">12</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,225 @@
<!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/c10/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/c10/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="headerCovTableEntryMed">79.5&nbsp;%</td>
<td class="headerCovTableEntry">229</td>
<td class="headerCovTableEntry">182</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="headerCovTableEntryMed">85.7&nbsp;%</td>
<td class="headerCovTableEntry">77</td>
<td class="headerCovTableEntry">66</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="GradMode.h.gcov.html">GradMode.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">7</td>
<td class="coverNumDflt"></td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">3</td>
<td class="coverNumDflt"></td>
</tr>
<tr>
<td class="coverFile"><a href="ScalarType.h.gcov.html">ScalarType.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=50 height=10 alt="50.0%"><img src="../../../../snow.png" width=50 height=10 alt="50.0%"></td></tr></table>
</td>
<td class="coverPerLo">50.0&nbsp;%</td>
<td class="coverNumDflt">14</td>
<td class="coverNumDflt">7</td>
<td class="coverPerLo">50.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">2</td>
</tr>
<tr>
<td class="coverFile"><a href="WrapDimMinimal.h.gcov.html">WrapDimMinimal.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=67 height=10 alt="66.7%"><img src="../../../../snow.png" width=33 height=10 alt="66.7%"></td></tr></table>
</td>
<td class="coverPerLo">66.7&nbsp;%</td>
<td class="coverNumDflt">9</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="SymInt.h.gcov.html">SymInt.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=71 height=10 alt="71.0%"><img src="../../../../snow.png" width=29 height=10 alt="71.0%"></td></tr></table>
</td>
<td class="coverPerLo">71.0&nbsp;%</td>
<td class="coverNumDflt">31</td>
<td class="coverNumDflt">22</td>
<td class="coverPerMed">87.5&nbsp;%</td>
<td class="coverNumDflt">8</td>
<td class="coverNumDflt">7</td>
</tr>
<tr>
<td class="coverFile"><a href="Scalar.h.gcov.html">Scalar.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="82.6%"><img src="../../../../snow.png" width=17 height=10 alt="82.6%"></td></tr></table>
</td>
<td class="coverPerMed">82.6&nbsp;%</td>
<td class="coverNumDflt">23</td>
<td class="coverNumDflt">19</td>
<td class="coverPerHi">93.3&nbsp;%</td>
<td class="coverNumDflt">15</td>
<td class="coverNumDflt">14</td>
</tr>
<tr>
<td class="coverFile"><a href="TensorImpl.h.gcov.html">TensorImpl.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../amber.png" width=86 height=10 alt="85.7%"><img src="../../../../snow.png" width=14 height=10 alt="85.7%"></td></tr></table>
</td>
<td class="coverPerMed">85.7&nbsp;%</td>
<td class="coverNumDflt">35</td>
<td class="coverNumDflt">30</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">12</td>
<td class="coverNumDflt">12</td>
</tr>
<tr>
<td class="coverFile"><a href="TensorOptions.h.gcov.html">TensorOptions.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../amber.png" width=86 height=10 alt="85.9%"><img src="../../../../snow.png" width=14 height=10 alt="85.9%"></td></tr></table>
</td>
<td class="coverPerMed">85.9&nbsp;%</td>
<td class="coverNumDflt">85</td>
<td class="coverNumDflt">73</td>
<td class="coverPerMed">84.0&nbsp;%</td>
<td class="coverNumDflt">25</td>
<td class="coverNumDflt">21</td>
</tr>
<tr>
<td class="coverFile"><a href="UndefinedTensorImpl.h.gcov.html">UndefinedTensorImpl.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="SymIntArrayRef.h.gcov.html">SymIntArrayRef.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">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="ScalarTypeToTypeMeta.h.gcov.html">ScalarTypeToTypeMeta.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">8</td>
<td class="coverNumDflt">8</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="Device.h.gcov.html">Device.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">3</td>
<td class="coverNumDflt">3</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,225 @@
<!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/c10/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/c10/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="headerCovTableEntryMed">79.5&nbsp;%</td>
<td class="headerCovTableEntry">229</td>
<td class="headerCovTableEntry">182</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="headerCovTableEntryMed">85.7&nbsp;%</td>
<td class="headerCovTableEntry">77</td>
<td class="headerCovTableEntry">66</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="Device.h.gcov.html">Device.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">3</td>
<td class="coverNumDflt">3</td>
</tr>
<tr>
<td class="coverFile"><a href="GradMode.h.gcov.html">GradMode.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">7</td>
<td class="coverNumDflt"></td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">3</td>
<td class="coverNumDflt"></td>
</tr>
<tr>
<td class="coverFile"><a href="Scalar.h.gcov.html">Scalar.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="82.6%"><img src="../../../../snow.png" width=17 height=10 alt="82.6%"></td></tr></table>
</td>
<td class="coverPerMed">82.6&nbsp;%</td>
<td class="coverNumDflt">23</td>
<td class="coverNumDflt">19</td>
<td class="coverPerHi">93.3&nbsp;%</td>
<td class="coverNumDflt">15</td>
<td class="coverNumDflt">14</td>
</tr>
<tr>
<td class="coverFile"><a href="ScalarType.h.gcov.html">ScalarType.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=50 height=10 alt="50.0%"><img src="../../../../snow.png" width=50 height=10 alt="50.0%"></td></tr></table>
</td>
<td class="coverPerLo">50.0&nbsp;%</td>
<td class="coverNumDflt">14</td>
<td class="coverNumDflt">7</td>
<td class="coverPerLo">50.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">2</td>
</tr>
<tr>
<td class="coverFile"><a href="ScalarTypeToTypeMeta.h.gcov.html">ScalarTypeToTypeMeta.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">8</td>
<td class="coverNumDflt">8</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="SymInt.h.gcov.html">SymInt.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=71 height=10 alt="71.0%"><img src="../../../../snow.png" width=29 height=10 alt="71.0%"></td></tr></table>
</td>
<td class="coverPerLo">71.0&nbsp;%</td>
<td class="coverNumDflt">31</td>
<td class="coverNumDflt">22</td>
<td class="coverPerMed">87.5&nbsp;%</td>
<td class="coverNumDflt">8</td>
<td class="coverNumDflt">7</td>
</tr>
<tr>
<td class="coverFile"><a href="SymIntArrayRef.h.gcov.html">SymIntArrayRef.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">1</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="TensorImpl.h.gcov.html">TensorImpl.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../amber.png" width=86 height=10 alt="85.7%"><img src="../../../../snow.png" width=14 height=10 alt="85.7%"></td></tr></table>
</td>
<td class="coverPerMed">85.7&nbsp;%</td>
<td class="coverNumDflt">35</td>
<td class="coverNumDflt">30</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">12</td>
<td class="coverNumDflt">12</td>
</tr>
<tr>
<td class="coverFile"><a href="TensorOptions.h.gcov.html">TensorOptions.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../amber.png" width=86 height=10 alt="85.9%"><img src="../../../../snow.png" width=14 height=10 alt="85.9%"></td></tr></table>
</td>
<td class="coverPerMed">85.9&nbsp;%</td>
<td class="coverNumDflt">85</td>
<td class="coverNumDflt">73</td>
<td class="coverPerMed">84.0&nbsp;%</td>
<td class="coverNumDflt">25</td>
<td class="coverNumDflt">21</td>
</tr>
<tr>
<td class="coverFile"><a href="UndefinedTensorImpl.h.gcov.html">UndefinedTensorImpl.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="WrapDimMinimal.h.gcov.html">WrapDimMinimal.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=67 height=10 alt="66.7%"><img src="../../../../snow.png" width=33 height=10 alt="66.7%"></td></tr></table>
</td>
<td class="coverPerLo">66.7&nbsp;%</td>
<td class="coverNumDflt">9</td>
<td class="coverNumDflt">6</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">2</td>
<td class="coverNumDflt">2</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,264 @@
<!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/c10/util/ArrayRef.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/c10/util</a> - ArrayRef.h<span style="font-size: 80%;"> (<a href="ArrayRef.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">35</td>
<td class="headerCovTableEntry">35</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">21</td>
<td class="headerCovTableEntry">21</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="ArrayRef.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="ArrayRef.h.gcov.html#L255">_ZN3c10lsIlEERSoS1_NS_8ArrayRefIT_EE</a></td>
<td class="coverFnHi">36</td>
</tr>
<tr>
<td class="coverFn"><a href="ArrayRef.h.gcov.html#L124">_ZN3c108ArrayRefIlEC2ERKSt16initializer_listIlE</a></td>
<td class="coverFnHi">3934</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L124">_ZN3c108ArrayRefIN2at6TensorEEC2ERKSt16initializer_listIS2_E</a></td>
<td class="coverFnAliasHi">378</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L124">_ZN3c108ArrayRefIlEC2ERKSt16initializer_listIlE</a></td>
<td class="coverFnAliasHi">3556</td>
</tr>
<tr>
<td class="coverFn"><a href="ArrayRef.h.gcov.html#L137">_ZNK3c108ArrayRefIlE3endEv</a></td>
<td class="coverFnHi">17786</td>
</tr>
<tr>
<td class="coverFn"><a href="ArrayRef.h.gcov.html#L134">_ZNK3c108ArrayRefIlE5beginEv</a></td>
<td class="coverFnHi">17786</td>
</tr>
<tr>
<td class="coverFn"><a href="ArrayRef.h.gcov.html#L162">_ZNK3c108ArrayRefIlE4dataEv</a></td>
<td class="coverFnHi">17910</td>
</tr>
<tr>
<td class="coverFn"><a href="ArrayRef.h.gcov.html#L213">_ZNK3c108ArrayRefIlEixEm</a></td>
<td class="coverFnHi">88590</td>
</tr>
<tr>
<td class="coverFn"><a href="ArrayRef.h.gcov.html#L54">_ZN3c108ArrayRefIlE26debugCheckNullptrInvariantEv</a></td>
<td class="coverFnHi">106536</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L54">_ZN3c108ArrayRefINS_6SymIntEE26debugCheckNullptrInvariantEv</a></td>
<td class="coverFnAliasHi">17750</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L54">_ZN3c108ArrayRefIlE26debugCheckNullptrInvariantEv</a></td>
<td class="coverFnAliasHi">88786</td>
</tr>
<tr>
<td class="coverFn"><a href="ArrayRef.h.gcov.html#L72">_ZN3c108ArrayRefIlEC2EPKlm</a></td>
<td class="coverFnHi">106536</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L72">_ZN3c108ArrayRefINS_6SymIntEEC2EPKS1_m</a></td>
<td class="coverFnAliasHi">17750</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L72">_ZN3c108ArrayRefIlEC2EPKlm</a></td>
<td class="coverFnAliasHi">88786</td>
</tr>
<tr>
<td class="coverFn"><a href="ArrayRef.h.gcov.html#L107">_ZN3c108ArrayRefIdEC2ISaIdEEERKSt6vectorIdT_E</a></td>
<td class="coverFnHi">415512</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L107">_ZN3c108ArrayRefIfEC2ISaIfEEERKSt6vectorIfT_E</a></td>
<td class="coverFnAliasHi">274</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L107">_ZN3c108ArrayRefIiEC2ISaIiEEERKSt6vectorIiT_E</a></td>
<td class="coverFnAliasHi">5026</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L107">_ZN3c108ArrayRefIlEC2ISaIlEEERKSt6vectorIlT_E</a></td>
<td class="coverFnAliasHi">14194</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L107">_ZN3c108ArrayRefIdEC2ISaIdEEERKSt6vectorIdT_E</a></td>
<td class="coverFnAliasHi">396018</td>
</tr>
<tr>
<td class="coverFn"><a href="ArrayRef.h.gcov.html#L167">_ZNK3c108ArrayRefIdE4sizeEv</a></td>
<td class="coverFnHi">419068</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L167">_ZNK3c108ArrayRefIfE4sizeEv</a></td>
<td class="coverFnAliasHi">274</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L167">_ZNK3c108ArrayRefIiE4sizeEv</a></td>
<td class="coverFnAliasHi">5026</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L167">_ZNK3c108ArrayRefIlE4sizeEv</a></td>
<td class="coverFnAliasHi">17750</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L167">_ZNK3c108ArrayRefIdE4sizeEv</a></td>
<td class="coverFnAliasHi">396018</td>
</tr>
<tr>
<td class="coverFn"><a href="ArrayRef.h.gcov.html#L69">_ZN3c108ArrayRefIiEC2ERKi</a></td>
<td class="coverFnHi">90643162</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L69">_ZN3c108ArrayRefIlEC2ERKl</a></td>
<td class="coverFnAliasHi">14194</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L69">_ZN3c108ArrayRefIiEC2ERKi</a></td>
<td class="coverFnAliasHi">90628968</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,264 @@
<!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/c10/util/ArrayRef.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/c10/util</a> - ArrayRef.h<span style="font-size: 80%;"> (<a href="ArrayRef.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">35</td>
<td class="headerCovTableEntry">35</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">21</td>
<td class="headerCovTableEntry">21</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="ArrayRef.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="ArrayRef.h.gcov.html#L107">_ZN3c108ArrayRefIdEC2ISaIdEEERKSt6vectorIdT_E</a></td>
<td class="coverFnHi">415512</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L107">_ZN3c108ArrayRefIdEC2ISaIdEEERKSt6vectorIdT_E</a></td>
<td class="coverFnAliasHi">396018</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L107">_ZN3c108ArrayRefIfEC2ISaIfEEERKSt6vectorIfT_E</a></td>
<td class="coverFnAliasHi">274</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L107">_ZN3c108ArrayRefIiEC2ISaIiEEERKSt6vectorIiT_E</a></td>
<td class="coverFnAliasHi">5026</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L107">_ZN3c108ArrayRefIlEC2ISaIlEEERKSt6vectorIlT_E</a></td>
<td class="coverFnAliasHi">14194</td>
</tr>
<tr>
<td class="coverFn"><a href="ArrayRef.h.gcov.html#L69">_ZN3c108ArrayRefIiEC2ERKi</a></td>
<td class="coverFnHi">90643162</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L69">_ZN3c108ArrayRefIiEC2ERKi</a></td>
<td class="coverFnAliasHi">90628968</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L69">_ZN3c108ArrayRefIlEC2ERKl</a></td>
<td class="coverFnAliasHi">14194</td>
</tr>
<tr>
<td class="coverFn"><a href="ArrayRef.h.gcov.html#L54">_ZN3c108ArrayRefIlE26debugCheckNullptrInvariantEv</a></td>
<td class="coverFnHi">106536</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L54">_ZN3c108ArrayRefINS_6SymIntEE26debugCheckNullptrInvariantEv</a></td>
<td class="coverFnAliasHi">17750</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L54">_ZN3c108ArrayRefIlE26debugCheckNullptrInvariantEv</a></td>
<td class="coverFnAliasHi">88786</td>
</tr>
<tr>
<td class="coverFn"><a href="ArrayRef.h.gcov.html#L72">_ZN3c108ArrayRefIlEC2EPKlm</a></td>
<td class="coverFnHi">106536</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L72">_ZN3c108ArrayRefINS_6SymIntEEC2EPKS1_m</a></td>
<td class="coverFnAliasHi">17750</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L72">_ZN3c108ArrayRefIlEC2EPKlm</a></td>
<td class="coverFnAliasHi">88786</td>
</tr>
<tr>
<td class="coverFn"><a href="ArrayRef.h.gcov.html#L124">_ZN3c108ArrayRefIlEC2ERKSt16initializer_listIlE</a></td>
<td class="coverFnHi">3934</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L124">_ZN3c108ArrayRefIN2at6TensorEEC2ERKSt16initializer_listIS2_E</a></td>
<td class="coverFnAliasHi">378</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L124">_ZN3c108ArrayRefIlEC2ERKSt16initializer_listIlE</a></td>
<td class="coverFnAliasHi">3556</td>
</tr>
<tr>
<td class="coverFn"><a href="ArrayRef.h.gcov.html#L255">_ZN3c10lsIlEERSoS1_NS_8ArrayRefIT_EE</a></td>
<td class="coverFnHi">36</td>
</tr>
<tr>
<td class="coverFn"><a href="ArrayRef.h.gcov.html#L167">_ZNK3c108ArrayRefIdE4sizeEv</a></td>
<td class="coverFnHi">419068</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L167">_ZNK3c108ArrayRefIdE4sizeEv</a></td>
<td class="coverFnAliasHi">396018</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L167">_ZNK3c108ArrayRefIfE4sizeEv</a></td>
<td class="coverFnAliasHi">274</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L167">_ZNK3c108ArrayRefIiE4sizeEv</a></td>
<td class="coverFnAliasHi">5026</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="ArrayRef.h.gcov.html#L167">_ZNK3c108ArrayRefIlE4sizeEv</a></td>
<td class="coverFnAliasHi">17750</td>
</tr>
<tr>
<td class="coverFn"><a href="ArrayRef.h.gcov.html#L137">_ZNK3c108ArrayRefIlE3endEv</a></td>
<td class="coverFnHi">17786</td>
</tr>
<tr>
<td class="coverFn"><a href="ArrayRef.h.gcov.html#L162">_ZNK3c108ArrayRefIlE4dataEv</a></td>
<td class="coverFnHi">17910</td>
</tr>
<tr>
<td class="coverFn"><a href="ArrayRef.h.gcov.html#L134">_ZNK3c108ArrayRefIlE5beginEv</a></td>
<td class="coverFnHi">17786</td>
</tr>
<tr>
<td class="coverFn"><a href="ArrayRef.h.gcov.html#L213">_ZNK3c108ArrayRefIlEixEm</a></td>
<td class="coverFnHi">88590</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,448 @@
<!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/c10/util/ArrayRef.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/c10/util</a> - ArrayRef.h<span style="font-size: 80%;"> (source / <a href="ArrayRef.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">35</td>
<td class="headerCovTableEntry">35</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">21</td>
<td class="headerCovTableEntry">21</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> : //===--- ArrayRef.h - Array Reference Wrapper -------------------*- C++ -*-===//</span>
<span id="L2"><span class="lineNum"> 2</span> : //</span>
<span id="L3"><span class="lineNum"> 3</span> : // The LLVM Compiler Infrastructure</span>
<span id="L4"><span class="lineNum"> 4</span> : //</span>
<span id="L5"><span class="lineNum"> 5</span> : // This file is distributed under the University of Illinois Open Source</span>
<span id="L6"><span class="lineNum"> 6</span> : // License. See LICENSE.TXT for details.</span>
<span id="L7"><span class="lineNum"> 7</span> : //</span>
<span id="L8"><span class="lineNum"> 8</span> : //===----------------------------------------------------------------------===//</span>
<span id="L9"><span class="lineNum"> 9</span> : </span>
<span id="L10"><span class="lineNum"> 10</span> : // ATen: modified from llvm::ArrayRef.</span>
<span id="L11"><span class="lineNum"> 11</span> : // removed llvm-specific functionality</span>
<span id="L12"><span class="lineNum"> 12</span> : // removed some implicit const -&gt; non-const conversions that rely on</span>
<span id="L13"><span class="lineNum"> 13</span> : // complicated std::enable_if meta-programming</span>
<span id="L14"><span class="lineNum"> 14</span> : // removed a bunch of slice variants for simplicity...</span>
<span id="L15"><span class="lineNum"> 15</span> : </span>
<span id="L16"><span class="lineNum"> 16</span> : #pragma once</span>
<span id="L17"><span class="lineNum"> 17</span> : </span>
<span id="L18"><span class="lineNum"> 18</span> : #include &lt;c10/util/C++17.h&gt;</span>
<span id="L19"><span class="lineNum"> 19</span> : #include &lt;c10/util/Deprecated.h&gt;</span>
<span id="L20"><span class="lineNum"> 20</span> : #include &lt;c10/util/Exception.h&gt;</span>
<span id="L21"><span class="lineNum"> 21</span> : #include &lt;c10/util/SmallVector.h&gt;</span>
<span id="L22"><span class="lineNum"> 22</span> : </span>
<span id="L23"><span class="lineNum"> 23</span> : #include &lt;array&gt;</span>
<span id="L24"><span class="lineNum"> 24</span> : #include &lt;iterator&gt;</span>
<span id="L25"><span class="lineNum"> 25</span> : #include &lt;vector&gt;</span>
<span id="L26"><span class="lineNum"> 26</span> : </span>
<span id="L27"><span class="lineNum"> 27</span> : namespace c10 {</span>
<span id="L28"><span class="lineNum"> 28</span> : /// ArrayRef - Represent a constant reference to an array (0 or more elements</span>
<span id="L29"><span class="lineNum"> 29</span> : /// consecutively in memory), i.e. a start pointer and a length. It allows</span>
<span id="L30"><span class="lineNum"> 30</span> : /// various APIs to take consecutive elements easily and conveniently.</span>
<span id="L31"><span class="lineNum"> 31</span> : ///</span>
<span id="L32"><span class="lineNum"> 32</span> : /// This class does not own the underlying data, it is expected to be used in</span>
<span id="L33"><span class="lineNum"> 33</span> : /// situations where the data resides in some other buffer, whose lifetime</span>
<span id="L34"><span class="lineNum"> 34</span> : /// extends past that of the ArrayRef. For this reason, it is not in general</span>
<span id="L35"><span class="lineNum"> 35</span> : /// safe to store an ArrayRef.</span>
<span id="L36"><span class="lineNum"> 36</span> : ///</span>
<span id="L37"><span class="lineNum"> 37</span> : /// This is intended to be trivially copyable, so it should be passed by</span>
<span id="L38"><span class="lineNum"> 38</span> : /// value.</span>
<span id="L39"><span class="lineNum"> 39</span> : template &lt;typename T&gt;</span>
<span id="L40"><span class="lineNum"> 40</span> : class ArrayRef final {</span>
<span id="L41"><span class="lineNum"> 41</span> : public:</span>
<span id="L42"><span class="lineNum"> 42</span> : using iterator = const T*;</span>
<span id="L43"><span class="lineNum"> 43</span> : using const_iterator = const T*;</span>
<span id="L44"><span class="lineNum"> 44</span> : using size_type = size_t;</span>
<span id="L45"><span class="lineNum"> 45</span> : using value_type = T;</span>
<span id="L46"><span class="lineNum"> 46</span> : </span>
<span id="L47"><span class="lineNum"> 47</span> : using reverse_iterator = std::reverse_iterator&lt;iterator&gt;;</span>
<span id="L48"><span class="lineNum"> 48</span> : </span>
<span id="L49"><span class="lineNum"> 49</span> : private:</span>
<span id="L50"><span class="lineNum"> 50</span> : /// The start of the array, in an external buffer.</span>
<span id="L51"><span class="lineNum"> 51</span> : const T* Data;</span>
<span id="L52"><span class="lineNum"> 52</span> : </span>
<span id="L53"><span class="lineNum"> 53</span> : /// The number of elements.</span>
<span id="L54"><span class="lineNum"> 54</span> : size_type Length;</span>
<span id="L55"><span class="lineNum"> 55</span> : </span>
<span id="L56"><span class="lineNum"> 56</span> <span class="tlaGNC tlaBgGNC"> 106536 : void debugCheckNullptrInvariant() {</span></span>
<span id="L57"><span class="lineNum"> 57</span> <span class="tlaGNC"> 106536 : TORCH_INTERNAL_ASSERT_DEBUG_ONLY(</span></span>
<span id="L58"><span class="lineNum"> 58</span> : Data != nullptr || Length == 0,</span>
<span id="L59"><span class="lineNum"> 59</span> : &quot;created ArrayRef with nullptr and non-zero length! c10::optional relies on this being illegal&quot;);</span>
<span id="L60"><span class="lineNum"> 60</span> <span class="tlaGNC"> 106536 : }</span></span>
<span id="L61"><span class="lineNum"> 61</span> : </span>
<span id="L62"><span class="lineNum"> 62</span> : public:</span>
<span id="L63"><span class="lineNum"> 63</span> : /// @name Constructors</span>
<span id="L64"><span class="lineNum"> 64</span> : /// @{</span>
<span id="L65"><span class="lineNum"> 65</span> : </span>
<span id="L66"><span class="lineNum"> 66</span> : /// Construct an empty ArrayRef.</span>
<span id="L67"><span class="lineNum"> 67</span> : /* implicit */ constexpr ArrayRef() : Data(nullptr), Length(0) {}</span>
<span id="L68"><span class="lineNum"> 68</span> : </span>
<span id="L69"><span class="lineNum"> 69</span> : /// Construct an ArrayRef from a single element.</span>
<span id="L70"><span class="lineNum"> 70</span> : // TODO Make this explicit</span>
<span id="L71"><span class="lineNum"> 71</span> <span class="tlaGNC"> 90643162 : constexpr ArrayRef(const T&amp; OneElt) : Data(&amp;OneElt), Length(1) {}</span></span>
<span id="L72"><span class="lineNum"> 72</span> : </span>
<span id="L73"><span class="lineNum"> 73</span> : /// Construct an ArrayRef from a pointer and length.</span>
<span id="L74"><span class="lineNum"> 74</span> <span class="tlaGNC"> 106536 : C10_HOST_CONSTEXPR_EXCEPT_WIN_CUDA ArrayRef(const T* data, size_t length)</span></span>
<span id="L75"><span class="lineNum"> 75</span> <span class="tlaGNC"> 106536 : : Data(data), Length(length) {</span></span>
<span id="L76"><span class="lineNum"> 76</span> <span class="tlaGNC"> 106536 : debugCheckNullptrInvariant();</span></span>
<span id="L77"><span class="lineNum"> 77</span> <span class="tlaGNC"> 106536 : }</span></span>
<span id="L78"><span class="lineNum"> 78</span> : </span>
<span id="L79"><span class="lineNum"> 79</span> : /// Construct an ArrayRef from a range.</span>
<span id="L80"><span class="lineNum"> 80</span> : C10_HOST_CONSTEXPR_EXCEPT_WIN_CUDA ArrayRef(const T* begin, const T* end)</span>
<span id="L81"><span class="lineNum"> 81</span> : : Data(begin), Length(end - begin) {</span>
<span id="L82"><span class="lineNum"> 82</span> : debugCheckNullptrInvariant();</span>
<span id="L83"><span class="lineNum"> 83</span> : }</span>
<span id="L84"><span class="lineNum"> 84</span> : </span>
<span id="L85"><span class="lineNum"> 85</span> : /// Construct an ArrayRef from a SmallVector. This is templated in order to</span>
<span id="L86"><span class="lineNum"> 86</span> : /// avoid instantiating SmallVectorTemplateCommon&lt;T&gt; whenever we</span>
<span id="L87"><span class="lineNum"> 87</span> : /// copy-construct an ArrayRef.</span>
<span id="L88"><span class="lineNum"> 88</span> : template &lt;typename U&gt;</span>
<span id="L89"><span class="lineNum"> 89</span> : /* implicit */ ArrayRef(const SmallVectorTemplateCommon&lt;T, U&gt;&amp; Vec)</span>
<span id="L90"><span class="lineNum"> 90</span> : : Data(Vec.data()), Length(Vec.size()) {</span>
<span id="L91"><span class="lineNum"> 91</span> : debugCheckNullptrInvariant();</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> : template &lt;</span>
<span id="L95"><span class="lineNum"> 95</span> : typename Container,</span>
<span id="L96"><span class="lineNum"> 96</span> : typename = std::enable_if_t&lt;std::is_same&lt;</span>
<span id="L97"><span class="lineNum"> 97</span> : std::remove_const_t&lt;decltype(std::declval&lt;Container&gt;().data())&gt;,</span>
<span id="L98"><span class="lineNum"> 98</span> : T*&gt;::value&gt;&gt;</span>
<span id="L99"><span class="lineNum"> 99</span> : /* implicit */ ArrayRef(const Container&amp; container)</span>
<span id="L100"><span class="lineNum"> 100</span> : : Data(container.data()), Length(container.size()) {</span>
<span id="L101"><span class="lineNum"> 101</span> : debugCheckNullptrInvariant();</span>
<span id="L102"><span class="lineNum"> 102</span> : }</span>
<span id="L103"><span class="lineNum"> 103</span> : </span>
<span id="L104"><span class="lineNum"> 104</span> : /// Construct an ArrayRef from a std::vector.</span>
<span id="L105"><span class="lineNum"> 105</span> : // The enable_if stuff here makes sure that this isn't used for</span>
<span id="L106"><span class="lineNum"> 106</span> : // std::vector&lt;bool&gt;, because ArrayRef can't work on a std::vector&lt;bool&gt;</span>
<span id="L107"><span class="lineNum"> 107</span> : // bitfield.</span>
<span id="L108"><span class="lineNum"> 108</span> : template &lt;typename A&gt;</span>
<span id="L109"><span class="lineNum"> 109</span> <span class="tlaGNC"> 415512 : /* implicit */ ArrayRef(const std::vector&lt;T, A&gt;&amp; Vec)</span></span>
<span id="L110"><span class="lineNum"> 110</span> <span class="tlaGNC"> 415512 : : Data(Vec.data()), Length(Vec.size()) {</span></span>
<span id="L111"><span class="lineNum"> 111</span> : static_assert(</span>
<span id="L112"><span class="lineNum"> 112</span> : !std::is_same&lt;T, bool&gt;::value,</span>
<span id="L113"><span class="lineNum"> 113</span> : &quot;ArrayRef&lt;bool&gt; cannot be constructed from a std::vector&lt;bool&gt; bitfield.&quot;);</span>
<span id="L114"><span class="lineNum"> 114</span> <span class="tlaGNC"> 415512 : }</span></span>
<span id="L115"><span class="lineNum"> 115</span> : </span>
<span id="L116"><span class="lineNum"> 116</span> : /// Construct an ArrayRef from a std::array</span>
<span id="L117"><span class="lineNum"> 117</span> : template &lt;size_t N&gt;</span>
<span id="L118"><span class="lineNum"> 118</span> : /* implicit */ constexpr ArrayRef(const std::array&lt;T, N&gt;&amp; Arr)</span>
<span id="L119"><span class="lineNum"> 119</span> : : Data(Arr.data()), Length(N) {}</span>
<span id="L120"><span class="lineNum"> 120</span> : </span>
<span id="L121"><span class="lineNum"> 121</span> : /// Construct an ArrayRef from a C array.</span>
<span id="L122"><span class="lineNum"> 122</span> : template &lt;size_t N&gt;</span>
<span id="L123"><span class="lineNum"> 123</span> : /* implicit */ constexpr ArrayRef(const T (&amp;Arr)[N]) : Data(Arr), Length(N) {}</span>
<span id="L124"><span class="lineNum"> 124</span> : </span>
<span id="L125"><span class="lineNum"> 125</span> : /// Construct an ArrayRef from a std::initializer_list.</span>
<span id="L126"><span class="lineNum"> 126</span> <span class="tlaGNC"> 3934 : /* implicit */ constexpr ArrayRef(const std::initializer_list&lt;T&gt;&amp; Vec)</span></span>
<span id="L127"><span class="lineNum"> 127</span> <span class="tlaGNC"> 3934 : : Data(</span></span>
<span id="L128"><span class="lineNum"> 128</span> <span class="tlaGNC"> 3934 : std::begin(Vec) == std::end(Vec) ? static_cast&lt;T*&gt;(nullptr)</span></span>
<span id="L129"><span class="lineNum"> 129</span> <span class="tlaGNC"> 3934 : : std::begin(Vec)),</span></span>
<span id="L130"><span class="lineNum"> 130</span> <span class="tlaGNC"> 3934 : Length(Vec.size()) {}</span></span>
<span id="L131"><span class="lineNum"> 131</span> : </span>
<span id="L132"><span class="lineNum"> 132</span> : /// @}</span>
<span id="L133"><span class="lineNum"> 133</span> : /// @name Simple Operations</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> <span class="tlaGNC"> 17786 : constexpr iterator begin() const {</span></span>
<span id="L137"><span class="lineNum"> 137</span> <span class="tlaGNC"> 17786 : return Data;</span></span>
<span id="L138"><span class="lineNum"> 138</span> : }</span>
<span id="L139"><span class="lineNum"> 139</span> <span class="tlaGNC"> 17786 : constexpr iterator end() const {</span></span>
<span id="L140"><span class="lineNum"> 140</span> <span class="tlaGNC"> 17786 : return Data + Length;</span></span>
<span id="L141"><span class="lineNum"> 141</span> : }</span>
<span id="L142"><span class="lineNum"> 142</span> : </span>
<span id="L143"><span class="lineNum"> 143</span> : // These are actually the same as iterator, since ArrayRef only</span>
<span id="L144"><span class="lineNum"> 144</span> : // gives you const iterators.</span>
<span id="L145"><span class="lineNum"> 145</span> : constexpr const_iterator cbegin() const {</span>
<span id="L146"><span class="lineNum"> 146</span> : return Data;</span>
<span id="L147"><span class="lineNum"> 147</span> : }</span>
<span id="L148"><span class="lineNum"> 148</span> : constexpr const_iterator cend() const {</span>
<span id="L149"><span class="lineNum"> 149</span> : return Data + Length;</span>
<span id="L150"><span class="lineNum"> 150</span> : }</span>
<span id="L151"><span class="lineNum"> 151</span> : </span>
<span id="L152"><span class="lineNum"> 152</span> : constexpr reverse_iterator rbegin() const {</span>
<span id="L153"><span class="lineNum"> 153</span> : return reverse_iterator(end());</span>
<span id="L154"><span class="lineNum"> 154</span> : }</span>
<span id="L155"><span class="lineNum"> 155</span> : constexpr reverse_iterator rend() const {</span>
<span id="L156"><span class="lineNum"> 156</span> : return reverse_iterator(begin());</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> : /// empty - Check if the array is empty.</span>
<span id="L160"><span class="lineNum"> 160</span> : constexpr bool empty() const {</span>
<span id="L161"><span class="lineNum"> 161</span> : return Length == 0;</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> <span class="tlaGNC"> 17910 : constexpr const T* data() const {</span></span>
<span id="L165"><span class="lineNum"> 165</span> <span class="tlaGNC"> 17910 : return Data;</span></span>
<span id="L166"><span class="lineNum"> 166</span> : }</span>
<span id="L167"><span class="lineNum"> 167</span> : </span>
<span id="L168"><span class="lineNum"> 168</span> : /// size - Get the array size.</span>
<span id="L169"><span class="lineNum"> 169</span> <span class="tlaGNC"> 419068 : constexpr size_t size() const {</span></span>
<span id="L170"><span class="lineNum"> 170</span> <span class="tlaGNC"> 419068 : return Length;</span></span>
<span id="L171"><span class="lineNum"> 171</span> : }</span>
<span id="L172"><span class="lineNum"> 172</span> : </span>
<span id="L173"><span class="lineNum"> 173</span> : /// front - Get the first element.</span>
<span id="L174"><span class="lineNum"> 174</span> : C10_HOST_CONSTEXPR_EXCEPT_WIN_CUDA const T&amp; front() const {</span>
<span id="L175"><span class="lineNum"> 175</span> : TORCH_CHECK(</span>
<span id="L176"><span class="lineNum"> 176</span> : !empty(), &quot;ArrayRef: attempted to access front() of empty list&quot;);</span>
<span id="L177"><span class="lineNum"> 177</span> : return Data[0];</span>
<span id="L178"><span class="lineNum"> 178</span> : }</span>
<span id="L179"><span class="lineNum"> 179</span> : </span>
<span id="L180"><span class="lineNum"> 180</span> : /// back - Get the last element.</span>
<span id="L181"><span class="lineNum"> 181</span> : C10_HOST_CONSTEXPR_EXCEPT_WIN_CUDA const T&amp; back() const {</span>
<span id="L182"><span class="lineNum"> 182</span> : TORCH_CHECK(!empty(), &quot;ArrayRef: attempted to access back() of empty list&quot;);</span>
<span id="L183"><span class="lineNum"> 183</span> : return Data[Length - 1];</span>
<span id="L184"><span class="lineNum"> 184</span> : }</span>
<span id="L185"><span class="lineNum"> 185</span> : </span>
<span id="L186"><span class="lineNum"> 186</span> : /// equals - Check for element-wise equality.</span>
<span id="L187"><span class="lineNum"> 187</span> : constexpr bool equals(ArrayRef RHS) const {</span>
<span id="L188"><span class="lineNum"> 188</span> : return Length == RHS.Length &amp;&amp; std::equal(begin(), end(), RHS.begin());</span>
<span id="L189"><span class="lineNum"> 189</span> : }</span>
<span id="L190"><span class="lineNum"> 190</span> : </span>
<span id="L191"><span class="lineNum"> 191</span> : /// slice(n, m) - Take M elements of the array starting at element N</span>
<span id="L192"><span class="lineNum"> 192</span> : C10_HOST_CONSTEXPR_EXCEPT_WIN_CUDA ArrayRef&lt;T&gt; slice(size_t N, size_t M)</span>
<span id="L193"><span class="lineNum"> 193</span> : const {</span>
<span id="L194"><span class="lineNum"> 194</span> : TORCH_CHECK(</span>
<span id="L195"><span class="lineNum"> 195</span> : N + M &lt;= size(),</span>
<span id="L196"><span class="lineNum"> 196</span> : &quot;ArrayRef: invalid slice, N = &quot;,</span>
<span id="L197"><span class="lineNum"> 197</span> : N,</span>
<span id="L198"><span class="lineNum"> 198</span> : &quot;; M = &quot;,</span>
<span id="L199"><span class="lineNum"> 199</span> : M,</span>
<span id="L200"><span class="lineNum"> 200</span> : &quot;; size = &quot;,</span>
<span id="L201"><span class="lineNum"> 201</span> : size());</span>
<span id="L202"><span class="lineNum"> 202</span> : return ArrayRef&lt;T&gt;(data() + N, M);</span>
<span id="L203"><span class="lineNum"> 203</span> : }</span>
<span id="L204"><span class="lineNum"> 204</span> : </span>
<span id="L205"><span class="lineNum"> 205</span> : /// slice(n) - Chop off the first N elements of the array.</span>
<span id="L206"><span class="lineNum"> 206</span> : C10_HOST_CONSTEXPR_EXCEPT_WIN_CUDA ArrayRef&lt;T&gt; slice(size_t N) const {</span>
<span id="L207"><span class="lineNum"> 207</span> : TORCH_CHECK(</span>
<span id="L208"><span class="lineNum"> 208</span> : N &lt;= size(), &quot;ArrayRef: invalid slice, N = &quot;, N, &quot;; size = &quot;, size());</span>
<span id="L209"><span class="lineNum"> 209</span> : return slice(N, size() - N);</span>
<span id="L210"><span class="lineNum"> 210</span> : }</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> : /// @name Operator Overloads</span>
<span id="L214"><span class="lineNum"> 214</span> : /// @{</span>
<span id="L215"><span class="lineNum"> 215</span> <span class="tlaGNC"> 88590 : constexpr const T&amp; operator[](size_t Index) const {</span></span>
<span id="L216"><span class="lineNum"> 216</span> <span class="tlaGNC"> 88590 : return Data[Index];</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> : /// Vector compatibility</span>
<span id="L220"><span class="lineNum"> 220</span> : C10_HOST_CONSTEXPR_EXCEPT_WIN_CUDA const T&amp; at(size_t Index) const {</span>
<span id="L221"><span class="lineNum"> 221</span> : TORCH_CHECK(</span>
<span id="L222"><span class="lineNum"> 222</span> : Index &lt; Length,</span>
<span id="L223"><span class="lineNum"> 223</span> : &quot;ArrayRef: invalid index Index = &quot;,</span>
<span id="L224"><span class="lineNum"> 224</span> : Index,</span>
<span id="L225"><span class="lineNum"> 225</span> : &quot;; Length = &quot;,</span>
<span id="L226"><span class="lineNum"> 226</span> : Length);</span>
<span id="L227"><span class="lineNum"> 227</span> : return Data[Index];</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> : /// Disallow accidental assignment from a temporary.</span>
<span id="L231"><span class="lineNum"> 231</span> : ///</span>
<span id="L232"><span class="lineNum"> 232</span> : /// The declaration here is extra complicated so that &quot;arrayRef = {}&quot;</span>
<span id="L233"><span class="lineNum"> 233</span> : /// continues to select the move assignment operator.</span>
<span id="L234"><span class="lineNum"> 234</span> : template &lt;typename U&gt;</span>
<span id="L235"><span class="lineNum"> 235</span> : typename std::enable_if&lt;std::is_same&lt;U, T&gt;::value, ArrayRef&lt;T&gt;&gt;::type&amp;</span>
<span id="L236"><span class="lineNum"> 236</span> : operator=(U&amp;&amp; Temporary) = delete;</span>
<span id="L237"><span class="lineNum"> 237</span> : </span>
<span id="L238"><span class="lineNum"> 238</span> : /// Disallow accidental assignment from a temporary.</span>
<span id="L239"><span class="lineNum"> 239</span> : ///</span>
<span id="L240"><span class="lineNum"> 240</span> : /// The declaration here is extra complicated so that &quot;arrayRef = {}&quot;</span>
<span id="L241"><span class="lineNum"> 241</span> : /// continues to select the move assignment operator.</span>
<span id="L242"><span class="lineNum"> 242</span> : template &lt;typename U&gt;</span>
<span id="L243"><span class="lineNum"> 243</span> : typename std::enable_if&lt;std::is_same&lt;U, T&gt;::value, ArrayRef&lt;T&gt;&gt;::type&amp;</span>
<span id="L244"><span class="lineNum"> 244</span> : operator=(std::initializer_list&lt;U&gt;) = delete;</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> : /// @name Expensive Operations</span>
<span id="L248"><span class="lineNum"> 248</span> : /// @{</span>
<span id="L249"><span class="lineNum"> 249</span> : std::vector&lt;T&gt; vec() const {</span>
<span id="L250"><span class="lineNum"> 250</span> : return std::vector&lt;T&gt;(Data, Data + Length);</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> : /// @}</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> : template &lt;typename T&gt;</span>
<span id="L257"><span class="lineNum"> 257</span> <span class="tlaGNC"> 36 : std::ostream&amp; operator&lt;&lt;(std::ostream&amp; out, ArrayRef&lt;T&gt; list) {</span></span>
<span id="L258"><span class="lineNum"> 258</span> <span class="tlaGNC"> 36 : int i = 0;</span></span>
<span id="L259"><span class="lineNum"> 259</span> <span class="tlaGNC"> 36 : out &lt;&lt; &quot;[&quot;;</span></span>
<span id="L260"><span class="lineNum"> 260</span> <span class="tlaGNC"> 108 : for (const auto&amp; e : list) {</span></span>
<span id="L261"><span class="lineNum"> 261</span> <span class="tlaGNC"> 72 : if (i++ &gt; 0)</span></span>
<span id="L262"><span class="lineNum"> 262</span> <span class="tlaGNC"> 36 : out &lt;&lt; &quot;, &quot;;</span></span>
<span id="L263"><span class="lineNum"> 263</span> <span class="tlaGNC"> 72 : out &lt;&lt; e;</span></span>
<span id="L264"><span class="lineNum"> 264</span> : }</span>
<span id="L265"><span class="lineNum"> 265</span> <span class="tlaGNC"> 36 : out &lt;&lt; &quot;]&quot;;</span></span>
<span id="L266"><span class="lineNum"> 266</span> <span class="tlaGNC"> 36 : return out;</span></span>
<span id="L267"><span class="lineNum"> 267</span> : }</span>
<span id="L268"><span class="lineNum"> 268</span> : </span>
<span id="L269"><span class="lineNum"> 269</span> : /// @name ArrayRef Convenience constructors</span>
<span id="L270"><span class="lineNum"> 270</span> : /// @{</span>
<span id="L271"><span class="lineNum"> 271</span> : </span>
<span id="L272"><span class="lineNum"> 272</span> : /// Construct an ArrayRef from a single element.</span>
<span id="L273"><span class="lineNum"> 273</span> : template &lt;typename T&gt;</span>
<span id="L274"><span class="lineNum"> 274</span> : ArrayRef&lt;T&gt; makeArrayRef(const T&amp; OneElt) {</span>
<span id="L275"><span class="lineNum"> 275</span> : return OneElt;</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> : /// Construct an ArrayRef from a pointer and length.</span>
<span id="L279"><span class="lineNum"> 279</span> : template &lt;typename T&gt;</span>
<span id="L280"><span class="lineNum"> 280</span> : ArrayRef&lt;T&gt; makeArrayRef(const T* data, size_t length) {</span>
<span id="L281"><span class="lineNum"> 281</span> : return ArrayRef&lt;T&gt;(data, length);</span>
<span id="L282"><span class="lineNum"> 282</span> : }</span>
<span id="L283"><span class="lineNum"> 283</span> : </span>
<span id="L284"><span class="lineNum"> 284</span> : /// Construct an ArrayRef from a range.</span>
<span id="L285"><span class="lineNum"> 285</span> : template &lt;typename T&gt;</span>
<span id="L286"><span class="lineNum"> 286</span> : ArrayRef&lt;T&gt; makeArrayRef(const T* begin, const T* end) {</span>
<span id="L287"><span class="lineNum"> 287</span> : return ArrayRef&lt;T&gt;(begin, end);</span>
<span id="L288"><span class="lineNum"> 288</span> : }</span>
<span id="L289"><span class="lineNum"> 289</span> : </span>
<span id="L290"><span class="lineNum"> 290</span> : /// Construct an ArrayRef from a SmallVector.</span>
<span id="L291"><span class="lineNum"> 291</span> : template &lt;typename T&gt;</span>
<span id="L292"><span class="lineNum"> 292</span> : ArrayRef&lt;T&gt; makeArrayRef(const SmallVectorImpl&lt;T&gt;&amp; Vec) {</span>
<span id="L293"><span class="lineNum"> 293</span> : return Vec;</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> : /// Construct an ArrayRef from a SmallVector.</span>
<span id="L297"><span class="lineNum"> 297</span> : template &lt;typename T, unsigned N&gt;</span>
<span id="L298"><span class="lineNum"> 298</span> : ArrayRef&lt;T&gt; makeArrayRef(const SmallVector&lt;T, N&gt;&amp; Vec) {</span>
<span id="L299"><span class="lineNum"> 299</span> : return Vec;</span>
<span id="L300"><span class="lineNum"> 300</span> : }</span>
<span id="L301"><span class="lineNum"> 301</span> : </span>
<span id="L302"><span class="lineNum"> 302</span> : /// Construct an ArrayRef from a std::vector.</span>
<span id="L303"><span class="lineNum"> 303</span> : template &lt;typename T&gt;</span>
<span id="L304"><span class="lineNum"> 304</span> : ArrayRef&lt;T&gt; makeArrayRef(const std::vector&lt;T&gt;&amp; Vec) {</span>
<span id="L305"><span class="lineNum"> 305</span> : return Vec;</span>
<span id="L306"><span class="lineNum"> 306</span> : }</span>
<span id="L307"><span class="lineNum"> 307</span> : </span>
<span id="L308"><span class="lineNum"> 308</span> : /// Construct an ArrayRef from a std::array.</span>
<span id="L309"><span class="lineNum"> 309</span> : template &lt;typename T, std::size_t N&gt;</span>
<span id="L310"><span class="lineNum"> 310</span> : ArrayRef&lt;T&gt; makeArrayRef(const std::array&lt;T, N&gt;&amp; Arr) {</span>
<span id="L311"><span class="lineNum"> 311</span> : return Arr;</span>
<span id="L312"><span class="lineNum"> 312</span> : }</span>
<span id="L313"><span class="lineNum"> 313</span> : </span>
<span id="L314"><span class="lineNum"> 314</span> : /// Construct an ArrayRef from an ArrayRef (no-op) (const)</span>
<span id="L315"><span class="lineNum"> 315</span> : template &lt;typename T&gt;</span>
<span id="L316"><span class="lineNum"> 316</span> : ArrayRef&lt;T&gt; makeArrayRef(const ArrayRef&lt;T&gt;&amp; Vec) {</span>
<span id="L317"><span class="lineNum"> 317</span> : return Vec;</span>
<span id="L318"><span class="lineNum"> 318</span> : }</span>
<span id="L319"><span class="lineNum"> 319</span> : </span>
<span id="L320"><span class="lineNum"> 320</span> : /// Construct an ArrayRef from an ArrayRef (no-op)</span>
<span id="L321"><span class="lineNum"> 321</span> : template &lt;typename T&gt;</span>
<span id="L322"><span class="lineNum"> 322</span> : ArrayRef&lt;T&gt;&amp; makeArrayRef(ArrayRef&lt;T&gt;&amp; Vec) {</span>
<span id="L323"><span class="lineNum"> 323</span> : return Vec;</span>
<span id="L324"><span class="lineNum"> 324</span> : }</span>
<span id="L325"><span class="lineNum"> 325</span> : </span>
<span id="L326"><span class="lineNum"> 326</span> : /// Construct an ArrayRef from a C array.</span>
<span id="L327"><span class="lineNum"> 327</span> : template &lt;typename T, size_t N&gt;</span>
<span id="L328"><span class="lineNum"> 328</span> : ArrayRef&lt;T&gt; makeArrayRef(const T (&amp;Arr)[N]) {</span>
<span id="L329"><span class="lineNum"> 329</span> : return ArrayRef&lt;T&gt;(Arr);</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> : // WARNING: Template instantiation will NOT be willing to do an implicit</span>
<span id="L333"><span class="lineNum"> 333</span> : // conversions to get you to an c10::ArrayRef, which is why we need so</span>
<span id="L334"><span class="lineNum"> 334</span> : // many overloads.</span>
<span id="L335"><span class="lineNum"> 335</span> : </span>
<span id="L336"><span class="lineNum"> 336</span> : template &lt;typename T&gt;</span>
<span id="L337"><span class="lineNum"> 337</span> : bool operator==(c10::ArrayRef&lt;T&gt; a1, c10::ArrayRef&lt;T&gt; a2) {</span>
<span id="L338"><span class="lineNum"> 338</span> : return a1.equals(a2);</span>
<span id="L339"><span class="lineNum"> 339</span> : }</span>
<span id="L340"><span class="lineNum"> 340</span> : </span>
<span id="L341"><span class="lineNum"> 341</span> : template &lt;typename T&gt;</span>
<span id="L342"><span class="lineNum"> 342</span> : bool operator!=(c10::ArrayRef&lt;T&gt; a1, c10::ArrayRef&lt;T&gt; a2) {</span>
<span id="L343"><span class="lineNum"> 343</span> : return !a1.equals(a2);</span>
<span id="L344"><span class="lineNum"> 344</span> : }</span>
<span id="L345"><span class="lineNum"> 345</span> : </span>
<span id="L346"><span class="lineNum"> 346</span> : template &lt;typename T&gt;</span>
<span id="L347"><span class="lineNum"> 347</span> : bool operator==(const std::vector&lt;T&gt;&amp; a1, c10::ArrayRef&lt;T&gt; a2) {</span>
<span id="L348"><span class="lineNum"> 348</span> : return c10::ArrayRef&lt;T&gt;(a1).equals(a2);</span>
<span id="L349"><span class="lineNum"> 349</span> : }</span>
<span id="L350"><span class="lineNum"> 350</span> : </span>
<span id="L351"><span class="lineNum"> 351</span> : template &lt;typename T&gt;</span>
<span id="L352"><span class="lineNum"> 352</span> : bool operator!=(const std::vector&lt;T&gt;&amp; a1, c10::ArrayRef&lt;T&gt; a2) {</span>
<span id="L353"><span class="lineNum"> 353</span> : return !c10::ArrayRef&lt;T&gt;(a1).equals(a2);</span>
<span id="L354"><span class="lineNum"> 354</span> : }</span>
<span id="L355"><span class="lineNum"> 355</span> : </span>
<span id="L356"><span class="lineNum"> 356</span> : template &lt;typename T&gt;</span>
<span id="L357"><span class="lineNum"> 357</span> : bool operator==(c10::ArrayRef&lt;T&gt; a1, const std::vector&lt;T&gt;&amp; a2) {</span>
<span id="L358"><span class="lineNum"> 358</span> : return a1.equals(c10::ArrayRef&lt;T&gt;(a2));</span>
<span id="L359"><span class="lineNum"> 359</span> : }</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> : bool operator!=(c10::ArrayRef&lt;T&gt; a1, const std::vector&lt;T&gt;&amp; a2) {</span>
<span id="L363"><span class="lineNum"> 363</span> : return !a1.equals(c10::ArrayRef&lt;T&gt;(a2));</span>
<span id="L364"><span class="lineNum"> 364</span> : }</span>
<span id="L365"><span class="lineNum"> 365</span> : </span>
<span id="L366"><span class="lineNum"> 366</span> : using IntArrayRef = ArrayRef&lt;int64_t&gt;;</span>
<span id="L367"><span class="lineNum"> 367</span> : </span>
<span id="L368"><span class="lineNum"> 368</span> : // This alias is deprecated because it doesn't make ownership</span>
<span id="L369"><span class="lineNum"> 369</span> : // semantics obvious. Use IntArrayRef instead!</span>
<span id="L370"><span class="lineNum"> 370</span> : C10_DEFINE_DEPRECATED_USING(IntList, ArrayRef&lt;int64_t&gt;)</span>
<span id="L371"><span class="lineNum"> 371</span> : </span>
<span id="L372"><span class="lineNum"> 372</span> : } // 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,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/c10/util/C++17.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/c10/util</a> - C++17.h<span style="font-size: 80%;"> (<a href="C++17.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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">0</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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">2</td>
<td class="headerCovTableEntry">0</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="C++17.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="C++17.h.gcov.html#L268">_ZN3c104guts6detail10to_string_IivE4callB5cxx11Ei</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="C++17.h.gcov.html#L274">_ZN3c104guts9to_stringIiEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_</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>

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/c10/util/C++17.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/c10/util</a> - C++17.h<span style="font-size: 80%;"> (<a href="C++17.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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">0</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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">2</td>
<td class="headerCovTableEntry">0</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="C++17.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="C++17.h.gcov.html#L268">_ZN3c104guts6detail10to_string_IivE4callB5cxx11Ei</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="C++17.h.gcov.html#L274">_ZN3c104guts9to_stringIiEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_</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>

View File

@@ -0,0 +1,359 @@
<!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/c10/util/C++17.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/c10/util</a> - C++17.h<span style="font-size: 80%;"> (source / <a href="C++17.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="headerCovTableEntryLo">0.0&nbsp;%</td>
<td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">0</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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">2</td>
<td class="headerCovTableEntry">0</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> : #ifndef C10_UTIL_CPP17_H_</span>
<span id="L3"><span class="lineNum"> 3</span> : #define C10_UTIL_CPP17_H_</span>
<span id="L4"><span class="lineNum"> 4</span> : </span>
<span id="L5"><span class="lineNum"> 5</span> : #include &lt;c10/macros/Macros.h&gt;</span>
<span id="L6"><span class="lineNum"> 6</span> : #include &lt;cstdlib&gt;</span>
<span id="L7"><span class="lineNum"> 7</span> : #include &lt;functional&gt;</span>
<span id="L8"><span class="lineNum"> 8</span> : #include &lt;memory&gt;</span>
<span id="L9"><span class="lineNum"> 9</span> : #include &lt;sstream&gt;</span>
<span id="L10"><span class="lineNum"> 10</span> : #include &lt;string&gt;</span>
<span id="L11"><span class="lineNum"> 11</span> : #include &lt;type_traits&gt;</span>
<span id="L12"><span class="lineNum"> 12</span> : #include &lt;utility&gt;</span>
<span id="L13"><span class="lineNum"> 13</span> : </span>
<span id="L14"><span class="lineNum"> 14</span> : #if !defined(__clang__) &amp;&amp; !defined(_MSC_VER) &amp;&amp; defined(__GNUC__) &amp;&amp; \</span>
<span id="L15"><span class="lineNum"> 15</span> : __GNUC__ &lt; 5</span>
<span id="L16"><span class="lineNum"> 16</span> : #error \</span>
<span id="L17"><span class="lineNum"> 17</span> : &quot;You're trying to build PyTorch with a too old version of GCC. We need GCC 5 or later.&quot;</span>
<span id="L18"><span class="lineNum"> 18</span> : #endif</span>
<span id="L19"><span class="lineNum"> 19</span> : </span>
<span id="L20"><span class="lineNum"> 20</span> : #if defined(__clang__) &amp;&amp; __clang_major__ &lt; 4</span>
<span id="L21"><span class="lineNum"> 21</span> : #error \</span>
<span id="L22"><span class="lineNum"> 22</span> : &quot;You're trying to build PyTorch with a too old version of Clang. We need Clang 4 or later.&quot;</span>
<span id="L23"><span class="lineNum"> 23</span> : #endif</span>
<span id="L24"><span class="lineNum"> 24</span> : </span>
<span id="L25"><span class="lineNum"> 25</span> : #if (defined(_MSC_VER) &amp;&amp; (!defined(_MSVC_LANG) || _MSVC_LANG &lt; 201703L)) || \</span>
<span id="L26"><span class="lineNum"> 26</span> : (!defined(_MSC_VER) &amp;&amp; __cplusplus &lt; 201703L)</span>
<span id="L27"><span class="lineNum"> 27</span> : #error You need C++17 to compile PyTorch</span>
<span id="L28"><span class="lineNum"> 28</span> : #endif</span>
<span id="L29"><span class="lineNum"> 29</span> : </span>
<span id="L30"><span class="lineNum"> 30</span> : #if defined(_WIN32) &amp;&amp; (defined(min) || defined(max))</span>
<span id="L31"><span class="lineNum"> 31</span> : #error Macro clash with min and max -- define NOMINMAX when compiling your program on Windows</span>
<span id="L32"><span class="lineNum"> 32</span> : #endif</span>
<span id="L33"><span class="lineNum"> 33</span> : </span>
<span id="L34"><span class="lineNum"> 34</span> : /*</span>
<span id="L35"><span class="lineNum"> 35</span> : * This header adds some polyfills with C++17 functionality</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> : namespace c10 {</span>
<span id="L39"><span class="lineNum"> 39</span> : </span>
<span id="L40"><span class="lineNum"> 40</span> : // in c++17 std::result_of has been superceded by std::invoke_result. Since</span>
<span id="L41"><span class="lineNum"> 41</span> : // c++20, std::result_of is removed.</span>
<span id="L42"><span class="lineNum"> 42</span> : template &lt;typename F, typename... args&gt;</span>
<span id="L43"><span class="lineNum"> 43</span> : #if defined(__cpp_lib_is_invocable) &amp;&amp; __cpp_lib_is_invocable &gt;= 201703L</span>
<span id="L44"><span class="lineNum"> 44</span> : using invoke_result = typename std::invoke_result&lt;F, args...&gt;;</span>
<span id="L45"><span class="lineNum"> 45</span> : #else</span>
<span id="L46"><span class="lineNum"> 46</span> : using invoke_result = typename std::result_of&lt;F &amp;&amp; (args &amp;&amp; ...)&gt;;</span>
<span id="L47"><span class="lineNum"> 47</span> : #endif</span>
<span id="L48"><span class="lineNum"> 48</span> : </span>
<span id="L49"><span class="lineNum"> 49</span> : template &lt;typename F, typename... args&gt;</span>
<span id="L50"><span class="lineNum"> 50</span> : using invoke_result_t = typename invoke_result&lt;F, args...&gt;::type;</span>
<span id="L51"><span class="lineNum"> 51</span> : </span>
<span id="L52"><span class="lineNum"> 52</span> : // std::is_pod is deprecated in C++20, std::is_standard_layout and</span>
<span id="L53"><span class="lineNum"> 53</span> : // std::is_trivial are introduced in C++11, std::conjunction has been introduced</span>
<span id="L54"><span class="lineNum"> 54</span> : // in C++17.</span>
<span id="L55"><span class="lineNum"> 55</span> : template &lt;typename T&gt;</span>
<span id="L56"><span class="lineNum"> 56</span> : #if defined(__cpp_lib_logical_traits) &amp;&amp; __cpp_lib_logical_traits &gt;= 201510L</span>
<span id="L57"><span class="lineNum"> 57</span> : using is_pod = std::conjunction&lt;std::is_standard_layout&lt;T&gt;, std::is_trivial&lt;T&gt;&gt;;</span>
<span id="L58"><span class="lineNum"> 58</span> : #else</span>
<span id="L59"><span class="lineNum"> 59</span> : using is_pod = std::is_pod&lt;T&gt;;</span>
<span id="L60"><span class="lineNum"> 60</span> : #endif</span>
<span id="L61"><span class="lineNum"> 61</span> : </span>
<span id="L62"><span class="lineNum"> 62</span> : template &lt;typename T&gt;</span>
<span id="L63"><span class="lineNum"> 63</span> : constexpr bool is_pod_v = is_pod&lt;T&gt;::value;</span>
<span id="L64"><span class="lineNum"> 64</span> : </span>
<span id="L65"><span class="lineNum"> 65</span> : namespace guts {</span>
<span id="L66"><span class="lineNum"> 66</span> : </span>
<span id="L67"><span class="lineNum"> 67</span> : template &lt;typename Base, typename Child, typename... Args&gt;</span>
<span id="L68"><span class="lineNum"> 68</span> : typename std::enable_if&lt;</span>
<span id="L69"><span class="lineNum"> 69</span> : !std::is_array&lt;Base&gt;::value &amp;&amp; !std::is_array&lt;Child&gt;::value &amp;&amp;</span>
<span id="L70"><span class="lineNum"> 70</span> : std::is_base_of&lt;Base, Child&gt;::value,</span>
<span id="L71"><span class="lineNum"> 71</span> : std::unique_ptr&lt;Base&gt;&gt;::type</span>
<span id="L72"><span class="lineNum"> 72</span> : make_unique_base(Args&amp;&amp;... args) {</span>
<span id="L73"><span class="lineNum"> 73</span> : return std::unique_ptr&lt;Base&gt;(new Child(std::forward&lt;Args&gt;(args)...));</span>
<span id="L74"><span class="lineNum"> 74</span> : }</span>
<span id="L75"><span class="lineNum"> 75</span> : </span>
<span id="L76"><span class="lineNum"> 76</span> : #if defined(__cpp_lib_logical_traits) &amp;&amp; !(defined(_MSC_VER) &amp;&amp; _MSC_VER &lt; 1920)</span>
<span id="L77"><span class="lineNum"> 77</span> : </span>
<span id="L78"><span class="lineNum"> 78</span> : template &lt;class... B&gt;</span>
<span id="L79"><span class="lineNum"> 79</span> : using conjunction = std::conjunction&lt;B...&gt;;</span>
<span id="L80"><span class="lineNum"> 80</span> : template &lt;class... B&gt;</span>
<span id="L81"><span class="lineNum"> 81</span> : using disjunction = std::disjunction&lt;B...&gt;;</span>
<span id="L82"><span class="lineNum"> 82</span> : template &lt;bool B&gt;</span>
<span id="L83"><span class="lineNum"> 83</span> : using bool_constant = std::bool_constant&lt;B&gt;;</span>
<span id="L84"><span class="lineNum"> 84</span> : template &lt;class B&gt;</span>
<span id="L85"><span class="lineNum"> 85</span> : using negation = std::negation&lt;B&gt;;</span>
<span id="L86"><span class="lineNum"> 86</span> : </span>
<span id="L87"><span class="lineNum"> 87</span> : #else</span>
<span id="L88"><span class="lineNum"> 88</span> : </span>
<span id="L89"><span class="lineNum"> 89</span> : // Implementation taken from http://en.cppreference.com/w/cpp/types/conjunction</span>
<span id="L90"><span class="lineNum"> 90</span> : template &lt;class...&gt;</span>
<span id="L91"><span class="lineNum"> 91</span> : struct conjunction : std::true_type {};</span>
<span id="L92"><span class="lineNum"> 92</span> : template &lt;class B1&gt;</span>
<span id="L93"><span class="lineNum"> 93</span> : struct conjunction&lt;B1&gt; : B1 {};</span>
<span id="L94"><span class="lineNum"> 94</span> : template &lt;class B1, class... Bn&gt;</span>
<span id="L95"><span class="lineNum"> 95</span> : struct conjunction&lt;B1, Bn...&gt;</span>
<span id="L96"><span class="lineNum"> 96</span> : : std::conditional_t&lt;bool(B1::value), conjunction&lt;Bn...&gt;, B1&gt; {};</span>
<span id="L97"><span class="lineNum"> 97</span> : </span>
<span id="L98"><span class="lineNum"> 98</span> : // Implementation taken from http://en.cppreference.com/w/cpp/types/disjunction</span>
<span id="L99"><span class="lineNum"> 99</span> : template &lt;class...&gt;</span>
<span id="L100"><span class="lineNum"> 100</span> : struct disjunction : std::false_type {};</span>
<span id="L101"><span class="lineNum"> 101</span> : template &lt;class B1&gt;</span>
<span id="L102"><span class="lineNum"> 102</span> : struct disjunction&lt;B1&gt; : B1 {};</span>
<span id="L103"><span class="lineNum"> 103</span> : template &lt;class B1, class... Bn&gt;</span>
<span id="L104"><span class="lineNum"> 104</span> : struct disjunction&lt;B1, Bn...&gt;</span>
<span id="L105"><span class="lineNum"> 105</span> : : std::conditional_t&lt;bool(B1::value), B1, disjunction&lt;Bn...&gt;&gt; {};</span>
<span id="L106"><span class="lineNum"> 106</span> : </span>
<span id="L107"><span class="lineNum"> 107</span> : // Implementation taken from</span>
<span id="L108"><span class="lineNum"> 108</span> : // http://en.cppreference.com/w/cpp/types/integral_constant</span>
<span id="L109"><span class="lineNum"> 109</span> : template &lt;bool B&gt;</span>
<span id="L110"><span class="lineNum"> 110</span> : using bool_constant = std::integral_constant&lt;bool, B&gt;;</span>
<span id="L111"><span class="lineNum"> 111</span> : </span>
<span id="L112"><span class="lineNum"> 112</span> : // Implementation taken from http://en.cppreference.com/w/cpp/types/negation</span>
<span id="L113"><span class="lineNum"> 113</span> : template &lt;class B&gt;</span>
<span id="L114"><span class="lineNum"> 114</span> : struct negation : bool_constant&lt;!bool(B::value)&gt; {};</span>
<span id="L115"><span class="lineNum"> 115</span> : </span>
<span id="L116"><span class="lineNum"> 116</span> : #endif</span>
<span id="L117"><span class="lineNum"> 117</span> : </span>
<span id="L118"><span class="lineNum"> 118</span> : #ifdef __cpp_lib_void_t</span>
<span id="L119"><span class="lineNum"> 119</span> : </span>
<span id="L120"><span class="lineNum"> 120</span> : template &lt;class T&gt;</span>
<span id="L121"><span class="lineNum"> 121</span> : using void_t = std::void_t&lt;T&gt;;</span>
<span id="L122"><span class="lineNum"> 122</span> : </span>
<span id="L123"><span class="lineNum"> 123</span> : #else</span>
<span id="L124"><span class="lineNum"> 124</span> : </span>
<span id="L125"><span class="lineNum"> 125</span> : // Implementation taken from http://en.cppreference.com/w/cpp/types/void_t</span>
<span id="L126"><span class="lineNum"> 126</span> : // (it takes CWG1558 into account and also works for older compilers)</span>
<span id="L127"><span class="lineNum"> 127</span> : template &lt;typename... Ts&gt;</span>
<span id="L128"><span class="lineNum"> 128</span> : struct make_void {</span>
<span id="L129"><span class="lineNum"> 129</span> : typedef void type;</span>
<span id="L130"><span class="lineNum"> 130</span> : };</span>
<span id="L131"><span class="lineNum"> 131</span> : template &lt;typename... Ts&gt;</span>
<span id="L132"><span class="lineNum"> 132</span> : using void_t = typename make_void&lt;Ts...&gt;::type;</span>
<span id="L133"><span class="lineNum"> 133</span> : </span>
<span id="L134"><span class="lineNum"> 134</span> : #endif</span>
<span id="L135"><span class="lineNum"> 135</span> : </span>
<span id="L136"><span class="lineNum"> 136</span> : #if defined(USE_ROCM)</span>
<span id="L137"><span class="lineNum"> 137</span> : // rocm doesn't like the C10_HOST_DEVICE</span>
<span id="L138"><span class="lineNum"> 138</span> : #define CUDA_HOST_DEVICE</span>
<span id="L139"><span class="lineNum"> 139</span> : #else</span>
<span id="L140"><span class="lineNum"> 140</span> : #define CUDA_HOST_DEVICE C10_HOST_DEVICE</span>
<span id="L141"><span class="lineNum"> 141</span> : #endif</span>
<span id="L142"><span class="lineNum"> 142</span> : </span>
<span id="L143"><span class="lineNum"> 143</span> : #if defined(__cpp_lib_apply) &amp;&amp; !defined(__CUDA_ARCH__)</span>
<span id="L144"><span class="lineNum"> 144</span> : </span>
<span id="L145"><span class="lineNum"> 145</span> : template &lt;class F, class Tuple&gt;</span>
<span id="L146"><span class="lineNum"> 146</span> : CUDA_HOST_DEVICE inline constexpr decltype(auto) apply(F&amp;&amp; f, Tuple&amp;&amp; t) {</span>
<span id="L147"><span class="lineNum"> 147</span> : return std::apply(std::forward&lt;F&gt;(f), std::forward&lt;Tuple&gt;(t));</span>
<span id="L148"><span class="lineNum"> 148</span> : }</span>
<span id="L149"><span class="lineNum"> 149</span> : </span>
<span id="L150"><span class="lineNum"> 150</span> : #else</span>
<span id="L151"><span class="lineNum"> 151</span> : </span>
<span id="L152"><span class="lineNum"> 152</span> : // Implementation from http://en.cppreference.com/w/cpp/utility/apply (but</span>
<span id="L153"><span class="lineNum"> 153</span> : // modified)</span>
<span id="L154"><span class="lineNum"> 154</span> : // TODO This is an incomplete implementation of std::apply, not working for</span>
<span id="L155"><span class="lineNum"> 155</span> : // member functions.</span>
<span id="L156"><span class="lineNum"> 156</span> : namespace detail {</span>
<span id="L157"><span class="lineNum"> 157</span> : template &lt;class F, class Tuple, std::size_t... INDEX&gt;</span>
<span id="L158"><span class="lineNum"> 158</span> : #if defined(_MSC_VER)</span>
<span id="L159"><span class="lineNum"> 159</span> : // MSVC has a problem with the decltype() return type, but it also doesn't need</span>
<span id="L160"><span class="lineNum"> 160</span> : // it</span>
<span id="L161"><span class="lineNum"> 161</span> : C10_HOST_DEVICE constexpr auto apply_impl(</span>
<span id="L162"><span class="lineNum"> 162</span> : F&amp;&amp; f,</span>
<span id="L163"><span class="lineNum"> 163</span> : Tuple&amp;&amp; t,</span>
<span id="L164"><span class="lineNum"> 164</span> : std::index_sequence&lt;INDEX...&gt;)</span>
<span id="L165"><span class="lineNum"> 165</span> : #else</span>
<span id="L166"><span class="lineNum"> 166</span> : // GCC/Clang need the decltype() return type</span>
<span id="L167"><span class="lineNum"> 167</span> : CUDA_HOST_DEVICE constexpr decltype(auto) apply_impl(</span>
<span id="L168"><span class="lineNum"> 168</span> : F&amp;&amp; f,</span>
<span id="L169"><span class="lineNum"> 169</span> : Tuple&amp;&amp; t,</span>
<span id="L170"><span class="lineNum"> 170</span> : std::index_sequence&lt;INDEX...&gt;)</span>
<span id="L171"><span class="lineNum"> 171</span> : #endif</span>
<span id="L172"><span class="lineNum"> 172</span> : {</span>
<span id="L173"><span class="lineNum"> 173</span> : return std::forward&lt;F&gt;(f)(std::get&lt;INDEX&gt;(std::forward&lt;Tuple&gt;(t))...);</span>
<span id="L174"><span class="lineNum"> 174</span> : }</span>
<span id="L175"><span class="lineNum"> 175</span> : } // namespace detail</span>
<span id="L176"><span class="lineNum"> 176</span> : </span>
<span id="L177"><span class="lineNum"> 177</span> : template &lt;class F, class Tuple&gt;</span>
<span id="L178"><span class="lineNum"> 178</span> : CUDA_HOST_DEVICE constexpr decltype(auto) apply(F&amp;&amp; f, Tuple&amp;&amp; t) {</span>
<span id="L179"><span class="lineNum"> 179</span> : return detail::apply_impl(</span>
<span id="L180"><span class="lineNum"> 180</span> : std::forward&lt;F&gt;(f),</span>
<span id="L181"><span class="lineNum"> 181</span> : std::forward&lt;Tuple&gt;(t),</span>
<span id="L182"><span class="lineNum"> 182</span> : std::make_index_sequence&lt;</span>
<span id="L183"><span class="lineNum"> 183</span> : std::tuple_size&lt;std::remove_reference_t&lt;Tuple&gt;&gt;::value&gt;{});</span>
<span id="L184"><span class="lineNum"> 184</span> : }</span>
<span id="L185"><span class="lineNum"> 185</span> : </span>
<span id="L186"><span class="lineNum"> 186</span> : #endif</span>
<span id="L187"><span class="lineNum"> 187</span> : </span>
<span id="L188"><span class="lineNum"> 188</span> : #undef CUDA_HOST_DEVICE</span>
<span id="L189"><span class="lineNum"> 189</span> : </span>
<span id="L190"><span class="lineNum"> 190</span> : template &lt;typename Functor, typename... Args&gt;</span>
<span id="L191"><span class="lineNum"> 191</span> : typename std::enable_if&lt;</span>
<span id="L192"><span class="lineNum"> 192</span> : std::is_member_pointer&lt;typename std::decay&lt;Functor&gt;::type&gt;::value,</span>
<span id="L193"><span class="lineNum"> 193</span> : typename c10::invoke_result_t&lt;Functor, Args...&gt;&gt;::type</span>
<span id="L194"><span class="lineNum"> 194</span> : invoke(Functor&amp;&amp; f, Args&amp;&amp;... args) {</span>
<span id="L195"><span class="lineNum"> 195</span> : return std::mem_fn(std::forward&lt;Functor&gt;(f))(std::forward&lt;Args&gt;(args)...);</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;typename Functor, typename... Args&gt;</span>
<span id="L199"><span class="lineNum"> 199</span> : typename std::enable_if&lt;</span>
<span id="L200"><span class="lineNum"> 200</span> : !std::is_member_pointer&lt;typename std::decay&lt;Functor&gt;::type&gt;::value,</span>
<span id="L201"><span class="lineNum"> 201</span> : typename c10::invoke_result_t&lt;Functor, Args...&gt;&gt;::type</span>
<span id="L202"><span class="lineNum"> 202</span> : invoke(Functor&amp;&amp; f, Args&amp;&amp;... args) {</span>
<span id="L203"><span class="lineNum"> 203</span> : return std::forward&lt;Functor&gt;(f)(std::forward&lt;Args&gt;(args)...);</span>
<span id="L204"><span class="lineNum"> 204</span> : }</span>
<span id="L205"><span class="lineNum"> 205</span> : </span>
<span id="L206"><span class="lineNum"> 206</span> : namespace detail {</span>
<span id="L207"><span class="lineNum"> 207</span> : struct _identity final {</span>
<span id="L208"><span class="lineNum"> 208</span> : template &lt;class T&gt;</span>
<span id="L209"><span class="lineNum"> 209</span> : using type_identity = T;</span>
<span id="L210"><span class="lineNum"> 210</span> : </span>
<span id="L211"><span class="lineNum"> 211</span> : template &lt;class T&gt;</span>
<span id="L212"><span class="lineNum"> 212</span> : decltype(auto) operator()(T&amp;&amp; arg) {</span>
<span id="L213"><span class="lineNum"> 213</span> : return std::forward&lt;T&gt;(arg);</span>
<span id="L214"><span class="lineNum"> 214</span> : }</span>
<span id="L215"><span class="lineNum"> 215</span> : };</span>
<span id="L216"><span class="lineNum"> 216</span> : </span>
<span id="L217"><span class="lineNum"> 217</span> : template &lt;class Func, class Enable = void&gt;</span>
<span id="L218"><span class="lineNum"> 218</span> : struct function_takes_identity_argument : std::false_type {};</span>
<span id="L219"><span class="lineNum"> 219</span> : #if defined(_MSC_VER)</span>
<span id="L220"><span class="lineNum"> 220</span> : // For some weird reason, MSVC shows a compiler error when using guts::void_t</span>
<span id="L221"><span class="lineNum"> 221</span> : // instead of std::void_t. But we're only building on MSVC versions that have</span>
<span id="L222"><span class="lineNum"> 222</span> : // std::void_t, so let's just use that one.</span>
<span id="L223"><span class="lineNum"> 223</span> : template &lt;class Func&gt;</span>
<span id="L224"><span class="lineNum"> 224</span> : struct function_takes_identity_argument&lt;</span>
<span id="L225"><span class="lineNum"> 225</span> : Func,</span>
<span id="L226"><span class="lineNum"> 226</span> : std::void_t&lt;decltype(std::declval&lt;Func&gt;()(_identity()))&gt;&gt; : std::true_type {</span>
<span id="L227"><span class="lineNum"> 227</span> : };</span>
<span id="L228"><span class="lineNum"> 228</span> : #else</span>
<span id="L229"><span class="lineNum"> 229</span> : template &lt;class Func&gt;</span>
<span id="L230"><span class="lineNum"> 230</span> : struct function_takes_identity_argument&lt;</span>
<span id="L231"><span class="lineNum"> 231</span> : Func,</span>
<span id="L232"><span class="lineNum"> 232</span> : void_t&lt;decltype(std::declval&lt;Func&gt;()(_identity()))&gt;&gt; : std::true_type {};</span>
<span id="L233"><span class="lineNum"> 233</span> : #endif</span>
<span id="L234"><span class="lineNum"> 234</span> : } // namespace detail</span>
<span id="L235"><span class="lineNum"> 235</span> : </span>
<span id="L236"><span class="lineNum"> 236</span> : // GCC 4.8 doesn't define std::to_string, even though that's in C++11. Let's</span>
<span id="L237"><span class="lineNum"> 237</span> : // define it.</span>
<span id="L238"><span class="lineNum"> 238</span> : namespace detail {</span>
<span id="L239"><span class="lineNum"> 239</span> : class DummyClassForToString final {};</span>
<span id="L240"><span class="lineNum"> 240</span> : } // namespace detail</span>
<span id="L241"><span class="lineNum"> 241</span> : } // namespace guts</span>
<span id="L242"><span class="lineNum"> 242</span> : } // namespace c10</span>
<span id="L243"><span class="lineNum"> 243</span> : namespace std {</span>
<span id="L244"><span class="lineNum"> 244</span> : // We use SFINAE to detect if std::to_string exists for a type, but that only</span>
<span id="L245"><span class="lineNum"> 245</span> : // works if the function name is defined. So let's define a std::to_string for a</span>
<span id="L246"><span class="lineNum"> 246</span> : // dummy type. If you're getting an error here saying that this overload doesn't</span>
<span id="L247"><span class="lineNum"> 247</span> : // match your std::to_string() call, then you're calling std::to_string() but</span>
<span id="L248"><span class="lineNum"> 248</span> : // should be calling c10::guts::to_string().</span>
<span id="L249"><span class="lineNum"> 249</span> : inline std::string to_string(c10::guts::detail::DummyClassForToString) {</span>
<span id="L250"><span class="lineNum"> 250</span> : return &quot;&quot;;</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> : } // namespace std</span>
<span id="L254"><span class="lineNum"> 254</span> : namespace c10 {</span>
<span id="L255"><span class="lineNum"> 255</span> : namespace guts {</span>
<span id="L256"><span class="lineNum"> 256</span> : namespace detail {</span>
<span id="L257"><span class="lineNum"> 257</span> : </span>
<span id="L258"><span class="lineNum"> 258</span> : template &lt;class T, class Enable = void&gt;</span>
<span id="L259"><span class="lineNum"> 259</span> : struct to_string_ final {</span>
<span id="L260"><span class="lineNum"> 260</span> : static std::string call(T value) {</span>
<span id="L261"><span class="lineNum"> 261</span> : std::ostringstream str;</span>
<span id="L262"><span class="lineNum"> 262</span> : str &lt;&lt; value;</span>
<span id="L263"><span class="lineNum"> 263</span> : return str.str();</span>
<span id="L264"><span class="lineNum"> 264</span> : }</span>
<span id="L265"><span class="lineNum"> 265</span> : };</span>
<span id="L266"><span class="lineNum"> 266</span> : // If a std::to_string exists, use that instead</span>
<span id="L267"><span class="lineNum"> 267</span> : template &lt;class T&gt;</span>
<span id="L268"><span class="lineNum"> 268</span> : struct to_string_&lt;T, void_t&lt;decltype(std::to_string(std::declval&lt;T&gt;()))&gt;&gt;</span>
<span id="L269"><span class="lineNum"> 269</span> : final {</span>
<span id="L270"><span class="lineNum"> 270</span> <span class="tlaUNC tlaBgUNC"> 0 : static std::string call(T value) {</span></span>
<span id="L271"><span class="lineNum"> 271</span> <span class="tlaUNC"> 0 : return std::to_string(value);</span></span>
<span id="L272"><span class="lineNum"> 272</span> : }</span>
<span id="L273"><span class="lineNum"> 273</span> : };</span>
<span id="L274"><span class="lineNum"> 274</span> : } // namespace detail</span>
<span id="L275"><span class="lineNum"> 275</span> : template &lt;class T&gt;</span>
<span id="L276"><span class="lineNum"> 276</span> <span class="tlaUNC"> 0 : inline std::string to_string(T value) {</span></span>
<span id="L277"><span class="lineNum"> 277</span> <span class="tlaUNC"> 0 : return detail::to_string_&lt;T&gt;::call(value);</span></span>
<span id="L278"><span class="lineNum"> 278</span> : }</span>
<span id="L279"><span class="lineNum"> 279</span> : </span>
<span id="L280"><span class="lineNum"> 280</span> : } // namespace guts</span>
<span id="L281"><span class="lineNum"> 281</span> : } // namespace c10</span>
<span id="L282"><span class="lineNum"> 282</span> : </span>
<span id="L283"><span class="lineNum"> 283</span> : #endif // C10_UTIL_CPP17_H_</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,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/c10/util/Exception.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/c10/util</a> - Exception.h<span style="font-size: 80%;"> (<a href="Exception.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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">11</td>
<td class="headerCovTableEntry">0</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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">8</td>
<td class="headerCovTableEntry">0</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="Exception.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="Exception.h.gcov.html#L422">_ZN3c106detail17torchCheckMsgImplEPKc</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="Exception.h.gcov.html#L426">_ZN3c106detail17torchCheckMsgImplEPKcS2_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="Exception.h.gcov.html#L419">_ZN3c106detail17torchCheckMsgImplIJA69_clEEEDcPKcDpRKT_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="Exception.h.gcov.html#L419">_ZN3c106detail17torchCheckMsgImplIJA25_cmA22_clEEEDcPKcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="Exception.h.gcov.html#L419">_ZN3c106detail17torchCheckMsgImplIJA57_cPKcA2_cEEEDcS4_DpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="Exception.h.gcov.html#L419">_ZN3c106detail17torchCheckMsgImplIJA69_clEEEDcPKcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="Exception.h.gcov.html#L630">_ZN3c106detail20deprecated_AT_ASSERTEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="Exception.h.gcov.html#L472">_ZN3c106detail23torchInternalAssertFailEPKcS2_jS2_NS0_22CompileTimeEmptyStringE</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="Exception.h.gcov.html#L91">_ZNK3c105Error4whatEv</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>

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/c10/util/Exception.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/c10/util</a> - Exception.h<span style="font-size: 80%;"> (<a href="Exception.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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">11</td>
<td class="headerCovTableEntry">0</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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">8</td>
<td class="headerCovTableEntry">0</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="Exception.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="Exception.h.gcov.html#L422">_ZN3c106detail17torchCheckMsgImplEPKc</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="Exception.h.gcov.html#L426">_ZN3c106detail17torchCheckMsgImplEPKcS2_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="Exception.h.gcov.html#L419">_ZN3c106detail17torchCheckMsgImplIJA69_clEEEDcPKcDpRKT_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="Exception.h.gcov.html#L419">_ZN3c106detail17torchCheckMsgImplIJA25_cmA22_clEEEDcPKcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="Exception.h.gcov.html#L419">_ZN3c106detail17torchCheckMsgImplIJA57_cPKcA2_cEEEDcS4_DpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="Exception.h.gcov.html#L419">_ZN3c106detail17torchCheckMsgImplIJA69_clEEEDcPKcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="Exception.h.gcov.html#L630">_ZN3c106detail20deprecated_AT_ASSERTEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="Exception.h.gcov.html#L472">_ZN3c106detail23torchInternalAssertFailEPKcS2_jS2_NS0_22CompileTimeEmptyStringE</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="Exception.h.gcov.html#L91">_ZNK3c105Error4whatEv</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>

View File

@@ -0,0 +1,757 @@
<!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/c10/util/Exception.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/c10/util</a> - Exception.h<span style="font-size: 80%;"> (source / <a href="Exception.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="headerCovTableEntryLo">0.0&nbsp;%</td>
<td class="headerCovTableEntry">11</td>
<td class="headerCovTableEntry">0</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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">8</td>
<td class="headerCovTableEntry">0</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> : #ifndef C10_UTIL_EXCEPTION_H_</span>
<span id="L2"><span class="lineNum"> 2</span> : #define C10_UTIL_EXCEPTION_H_</span>
<span id="L3"><span class="lineNum"> 3</span> : </span>
<span id="L4"><span class="lineNum"> 4</span> : #include &lt;c10/macros/Macros.h&gt;</span>
<span id="L5"><span class="lineNum"> 5</span> : #include &lt;c10/util/StringUtil.h&gt;</span>
<span id="L6"><span class="lineNum"> 6</span> : #include &lt;c10/util/variant.h&gt;</span>
<span id="L7"><span class="lineNum"> 7</span> : </span>
<span id="L8"><span class="lineNum"> 8</span> : #include &lt;cstddef&gt;</span>
<span id="L9"><span class="lineNum"> 9</span> : #include &lt;exception&gt;</span>
<span id="L10"><span class="lineNum"> 10</span> : #include &lt;string&gt;</span>
<span id="L11"><span class="lineNum"> 11</span> : #include &lt;vector&gt;</span>
<span id="L12"><span class="lineNum"> 12</span> : </span>
<span id="L13"><span class="lineNum"> 13</span> : #if defined(_MSC_VER) &amp;&amp; _MSC_VER &lt;= 1900</span>
<span id="L14"><span class="lineNum"> 14</span> : #define __func__ __FUNCTION__</span>
<span id="L15"><span class="lineNum"> 15</span> : #endif</span>
<span id="L16"><span class="lineNum"> 16</span> : </span>
<span id="L17"><span class="lineNum"> 17</span> : namespace c10 {</span>
<span id="L18"><span class="lineNum"> 18</span> : </span>
<span id="L19"><span class="lineNum"> 19</span> : /// The primary ATen error class.</span>
<span id="L20"><span class="lineNum"> 20</span> : /// Provides a complete error message with source location information via</span>
<span id="L21"><span class="lineNum"> 21</span> : /// `what()`, and a more concise message via `what_without_backtrace()`.</span>
<span id="L22"><span class="lineNum"> 22</span> : /// Don't throw this directly; use TORCH_CHECK/TORCH_INTERNAL_ASSERT instead.</span>
<span id="L23"><span class="lineNum"> 23</span> : ///</span>
<span id="L24"><span class="lineNum"> 24</span> : /// NB: c10::Error is handled specially by the default torch to suppress the</span>
<span id="L25"><span class="lineNum"> 25</span> : /// backtrace, see torch/csrc/Exceptions.h</span>
<span id="L26"><span class="lineNum"> 26</span> : class C10_API Error : public std::exception {</span>
<span id="L27"><span class="lineNum"> 27</span> : // The actual error message.</span>
<span id="L28"><span class="lineNum"> 28</span> : std::string msg_;</span>
<span id="L29"><span class="lineNum"> 29</span> : </span>
<span id="L30"><span class="lineNum"> 30</span> : // Context for the message (in order of decreasing specificity). Context will</span>
<span id="L31"><span class="lineNum"> 31</span> : // be automatically formatted appropriately, so it is not necessary to add</span>
<span id="L32"><span class="lineNum"> 32</span> : // extra leading/trailing newlines to strings inside this vector</span>
<span id="L33"><span class="lineNum"> 33</span> : std::vector&lt;std::string&gt; context_;</span>
<span id="L34"><span class="lineNum"> 34</span> : </span>
<span id="L35"><span class="lineNum"> 35</span> : // The C++ backtrace at the point when this exception was raised. This</span>
<span id="L36"><span class="lineNum"> 36</span> : // may be empty if there is no valid backtrace. (We don't use optional</span>
<span id="L37"><span class="lineNum"> 37</span> : // here to reduce the dependencies this file has.)</span>
<span id="L38"><span class="lineNum"> 38</span> : std::string backtrace_;</span>
<span id="L39"><span class="lineNum"> 39</span> : </span>
<span id="L40"><span class="lineNum"> 40</span> : // These two are derived fields from msg_stack_ and backtrace_, but we need</span>
<span id="L41"><span class="lineNum"> 41</span> : // fields for the strings so that we can return a const char* (as the</span>
<span id="L42"><span class="lineNum"> 42</span> : // signature of std::exception requires). Currently, the invariant</span>
<span id="L43"><span class="lineNum"> 43</span> : // is that these fields are ALWAYS populated consistently with respect</span>
<span id="L44"><span class="lineNum"> 44</span> : // to msg_stack_ and backtrace_.</span>
<span id="L45"><span class="lineNum"> 45</span> : std::string what_;</span>
<span id="L46"><span class="lineNum"> 46</span> : std::string what_without_backtrace_;</span>
<span id="L47"><span class="lineNum"> 47</span> : </span>
<span id="L48"><span class="lineNum"> 48</span> : // This is a little debugging trick: you can stash a relevant pointer</span>
<span id="L49"><span class="lineNum"> 49</span> : // in caller, and then when you catch the exception, you can compare</span>
<span id="L50"><span class="lineNum"> 50</span> : // against pointers you have on hand to get more information about</span>
<span id="L51"><span class="lineNum"> 51</span> : // where the exception came from. In Caffe2, this is used to figure</span>
<span id="L52"><span class="lineNum"> 52</span> : // out which operator raised an exception.</span>
<span id="L53"><span class="lineNum"> 53</span> : const void* caller_;</span>
<span id="L54"><span class="lineNum"> 54</span> : </span>
<span id="L55"><span class="lineNum"> 55</span> : public:</span>
<span id="L56"><span class="lineNum"> 56</span> : // PyTorch-style Error constructor. NB: the implementation of this</span>
<span id="L57"><span class="lineNum"> 57</span> : // is actually in Logging.cpp</span>
<span id="L58"><span class="lineNum"> 58</span> : Error(SourceLocation source_location, std::string msg);</span>
<span id="L59"><span class="lineNum"> 59</span> : </span>
<span id="L60"><span class="lineNum"> 60</span> : // Caffe2-style error message</span>
<span id="L61"><span class="lineNum"> 61</span> : Error(</span>
<span id="L62"><span class="lineNum"> 62</span> : const char* file,</span>
<span id="L63"><span class="lineNum"> 63</span> : const uint32_t line,</span>
<span id="L64"><span class="lineNum"> 64</span> : const char* condition,</span>
<span id="L65"><span class="lineNum"> 65</span> : const std::string&amp; msg,</span>
<span id="L66"><span class="lineNum"> 66</span> : const std::string&amp; backtrace,</span>
<span id="L67"><span class="lineNum"> 67</span> : const void* caller = nullptr);</span>
<span id="L68"><span class="lineNum"> 68</span> : </span>
<span id="L69"><span class="lineNum"> 69</span> : // Base constructor</span>
<span id="L70"><span class="lineNum"> 70</span> : Error(std::string msg, std::string backtrace, const void* caller = nullptr);</span>
<span id="L71"><span class="lineNum"> 71</span> : </span>
<span id="L72"><span class="lineNum"> 72</span> : // Add some new context to the message stack. The last added context</span>
<span id="L73"><span class="lineNum"> 73</span> : // will be formatted at the end of the context list upon printing.</span>
<span id="L74"><span class="lineNum"> 74</span> : // WARNING: This method is O(n) in the size of the stack, so don't go</span>
<span id="L75"><span class="lineNum"> 75</span> : // wild adding a ridiculous amount of context to error messages.</span>
<span id="L76"><span class="lineNum"> 76</span> : void add_context(std::string msg);</span>
<span id="L77"><span class="lineNum"> 77</span> : </span>
<span id="L78"><span class="lineNum"> 78</span> : const std::string&amp; msg() const {</span>
<span id="L79"><span class="lineNum"> 79</span> : return msg_;</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> : const std::vector&lt;std::string&gt;&amp; context() const {</span>
<span id="L83"><span class="lineNum"> 83</span> : return context_;</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> : const std::string&amp; backtrace() const {</span>
<span id="L87"><span class="lineNum"> 87</span> : return backtrace_;</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> : /// Returns the complete error message, including the source location.</span>
<span id="L91"><span class="lineNum"> 91</span> : /// The returned pointer is invalidated if you call add_context() on</span>
<span id="L92"><span class="lineNum"> 92</span> : /// this object.</span>
<span id="L93"><span class="lineNum"> 93</span> <span class="tlaUNC tlaBgUNC"> 0 : const char* what() const noexcept override {</span></span>
<span id="L94"><span class="lineNum"> 94</span> <span class="tlaUNC"> 0 : return what_.c_str();</span></span>
<span id="L95"><span class="lineNum"> 95</span> : }</span>
<span id="L96"><span class="lineNum"> 96</span> : </span>
<span id="L97"><span class="lineNum"> 97</span> : const void* caller() const noexcept {</span>
<span id="L98"><span class="lineNum"> 98</span> : return caller_;</span>
<span id="L99"><span class="lineNum"> 99</span> : }</span>
<span id="L100"><span class="lineNum"> 100</span> : </span>
<span id="L101"><span class="lineNum"> 101</span> : /// Returns only the error message string, without source location.</span>
<span id="L102"><span class="lineNum"> 102</span> : /// The returned pointer is invalidated if you call add_context() on</span>
<span id="L103"><span class="lineNum"> 103</span> : /// this object.</span>
<span id="L104"><span class="lineNum"> 104</span> : const char* what_without_backtrace() const noexcept {</span>
<span id="L105"><span class="lineNum"> 105</span> : return what_without_backtrace_.c_str();</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> : private:</span>
<span id="L109"><span class="lineNum"> 109</span> : void refresh_what();</span>
<span id="L110"><span class="lineNum"> 110</span> : std::string compute_what(bool include_backtrace) const;</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> : class C10_API Warning {</span>
<span id="L114"><span class="lineNum"> 114</span> : public:</span>
<span id="L115"><span class="lineNum"> 115</span> : class C10_API UserWarning {};</span>
<span id="L116"><span class="lineNum"> 116</span> : class C10_API DeprecationWarning {};</span>
<span id="L117"><span class="lineNum"> 117</span> : </span>
<span id="L118"><span class="lineNum"> 118</span> : using warning_variant_t = c10::variant&lt;UserWarning, DeprecationWarning&gt;;</span>
<span id="L119"><span class="lineNum"> 119</span> : </span>
<span id="L120"><span class="lineNum"> 120</span> : Warning(</span>
<span id="L121"><span class="lineNum"> 121</span> : warning_variant_t type,</span>
<span id="L122"><span class="lineNum"> 122</span> : const SourceLocation&amp; source_location,</span>
<span id="L123"><span class="lineNum"> 123</span> : std::string msg,</span>
<span id="L124"><span class="lineNum"> 124</span> : bool verbatim);</span>
<span id="L125"><span class="lineNum"> 125</span> : </span>
<span id="L126"><span class="lineNum"> 126</span> : Warning(</span>
<span id="L127"><span class="lineNum"> 127</span> : warning_variant_t type,</span>
<span id="L128"><span class="lineNum"> 128</span> : SourceLocation source_location,</span>
<span id="L129"><span class="lineNum"> 129</span> : const char* msg,</span>
<span id="L130"><span class="lineNum"> 130</span> : bool verbatim);</span>
<span id="L131"><span class="lineNum"> 131</span> : </span>
<span id="L132"><span class="lineNum"> 132</span> : Warning(</span>
<span id="L133"><span class="lineNum"> 133</span> : warning_variant_t type,</span>
<span id="L134"><span class="lineNum"> 134</span> : SourceLocation source_location,</span>
<span id="L135"><span class="lineNum"> 135</span> : ::c10::detail::CompileTimeEmptyString msg,</span>
<span id="L136"><span class="lineNum"> 136</span> : bool verbatim);</span>
<span id="L137"><span class="lineNum"> 137</span> : </span>
<span id="L138"><span class="lineNum"> 138</span> : // Getters for members</span>
<span id="L139"><span class="lineNum"> 139</span> : warning_variant_t type() const;</span>
<span id="L140"><span class="lineNum"> 140</span> : const SourceLocation&amp; source_location() const;</span>
<span id="L141"><span class="lineNum"> 141</span> : const std::string&amp; msg() const;</span>
<span id="L142"><span class="lineNum"> 142</span> : bool verbatim() const;</span>
<span id="L143"><span class="lineNum"> 143</span> : </span>
<span id="L144"><span class="lineNum"> 144</span> : private:</span>
<span id="L145"><span class="lineNum"> 145</span> : // The type of warning</span>
<span id="L146"><span class="lineNum"> 146</span> : warning_variant_t type_;</span>
<span id="L147"><span class="lineNum"> 147</span> : </span>
<span id="L148"><span class="lineNum"> 148</span> : // Where the warning happened.</span>
<span id="L149"><span class="lineNum"> 149</span> : SourceLocation source_location_;</span>
<span id="L150"><span class="lineNum"> 150</span> : </span>
<span id="L151"><span class="lineNum"> 151</span> : // The actual warning message.</span>
<span id="L152"><span class="lineNum"> 152</span> : std::string msg_;</span>
<span id="L153"><span class="lineNum"> 153</span> : </span>
<span id="L154"><span class="lineNum"> 154</span> : // See note: [Verbatim Warnings]</span>
<span id="L155"><span class="lineNum"> 155</span> : bool verbatim_;</span>
<span id="L156"><span class="lineNum"> 156</span> : };</span>
<span id="L157"><span class="lineNum"> 157</span> : </span>
<span id="L158"><span class="lineNum"> 158</span> : using UserWarning = Warning::UserWarning;</span>
<span id="L159"><span class="lineNum"> 159</span> : using DeprecationWarning = Warning::DeprecationWarning;</span>
<span id="L160"><span class="lineNum"> 160</span> : </span>
<span id="L161"><span class="lineNum"> 161</span> : // Issue a warning with a given message. Dispatched to the current</span>
<span id="L162"><span class="lineNum"> 162</span> : // warning handler.</span>
<span id="L163"><span class="lineNum"> 163</span> : void C10_API warn(const Warning&amp; warning);</span>
<span id="L164"><span class="lineNum"> 164</span> : </span>
<span id="L165"><span class="lineNum"> 165</span> : class C10_API WarningHandler {</span>
<span id="L166"><span class="lineNum"> 166</span> : public:</span>
<span id="L167"><span class="lineNum"> 167</span> : virtual ~WarningHandler() = default;</span>
<span id="L168"><span class="lineNum"> 168</span> : /// The default warning handler. Prints the message to stderr.</span>
<span id="L169"><span class="lineNum"> 169</span> : virtual void process(const Warning&amp; warning);</span>
<span id="L170"><span class="lineNum"> 170</span> : };</span>
<span id="L171"><span class="lineNum"> 171</span> : </span>
<span id="L172"><span class="lineNum"> 172</span> : namespace WarningUtils {</span>
<span id="L173"><span class="lineNum"> 173</span> : </span>
<span id="L174"><span class="lineNum"> 174</span> : // Note: [Verbatim Warnings]</span>
<span id="L175"><span class="lineNum"> 175</span> : // Warnings originating in C++ code can appear out-of-place to Python users:</span>
<span id="L176"><span class="lineNum"> 176</span> : // a user runs a line in Python, but the warning references a line in C++.</span>
<span id="L177"><span class="lineNum"> 177</span> : // Some parts of PyTorch, like the JIT, are cognizant of this mismatch</span>
<span id="L178"><span class="lineNum"> 178</span> : // and take care to map warnings back to the user's program, but most</span>
<span id="L179"><span class="lineNum"> 179</span> : // of PyTorch simply throws a context-free warning. To allow warning</span>
<span id="L180"><span class="lineNum"> 180</span> : // handlers to add context where appropriate, warn takes the</span>
<span id="L181"><span class="lineNum"> 181</span> : // &quot;verbatim&quot; flag. When this is false a warning handler might append</span>
<span id="L182"><span class="lineNum"> 182</span> : // the C++ warning to a Python warning message that relates the warning</span>
<span id="L183"><span class="lineNum"> 183</span> : // back to the user's program. Callers who have already accounted for</span>
<span id="L184"><span class="lineNum"> 184</span> : // context in their warnings should set verbatim to true so their warnings</span>
<span id="L185"><span class="lineNum"> 185</span> : // appear without modification.</span>
<span id="L186"><span class="lineNum"> 186</span> : </span>
<span id="L187"><span class="lineNum"> 187</span> : /// Sets the global warning handler. This is not thread-safe, so it should</span>
<span id="L188"><span class="lineNum"> 188</span> : /// generally be called once during initialization or while holding the GIL</span>
<span id="L189"><span class="lineNum"> 189</span> : /// for programs that use python.</span>
<span id="L190"><span class="lineNum"> 190</span> : /// User is responsible for keeping the WarningHandler alive until</span>
<span id="L191"><span class="lineNum"> 191</span> : /// it is not needed.</span>
<span id="L192"><span class="lineNum"> 192</span> : C10_API void set_warning_handler(WarningHandler* handler) noexcept(true);</span>
<span id="L193"><span class="lineNum"> 193</span> : /// Gets the global warning handler.</span>
<span id="L194"><span class="lineNum"> 194</span> : C10_API WarningHandler* get_warning_handler() noexcept(true);</span>
<span id="L195"><span class="lineNum"> 195</span> : </span>
<span id="L196"><span class="lineNum"> 196</span> : class C10_API WarningHandlerGuard {</span>
<span id="L197"><span class="lineNum"> 197</span> : WarningHandler* prev_handler_;</span>
<span id="L198"><span class="lineNum"> 198</span> : </span>
<span id="L199"><span class="lineNum"> 199</span> : public:</span>
<span id="L200"><span class="lineNum"> 200</span> : WarningHandlerGuard(WarningHandler* new_handler)</span>
<span id="L201"><span class="lineNum"> 201</span> : : prev_handler_(c10::WarningUtils::get_warning_handler()) {</span>
<span id="L202"><span class="lineNum"> 202</span> : c10::WarningUtils::set_warning_handler(new_handler);</span>
<span id="L203"><span class="lineNum"> 203</span> : }</span>
<span id="L204"><span class="lineNum"> 204</span> : ~WarningHandlerGuard() {</span>
<span id="L205"><span class="lineNum"> 205</span> : c10::WarningUtils::set_warning_handler(prev_handler_);</span>
<span id="L206"><span class="lineNum"> 206</span> : }</span>
<span id="L207"><span class="lineNum"> 207</span> : };</span>
<span id="L208"><span class="lineNum"> 208</span> : </span>
<span id="L209"><span class="lineNum"> 209</span> : /// The TORCH_WARN_ONCE macro is difficult to test for. Use</span>
<span id="L210"><span class="lineNum"> 210</span> : /// setWarnAlways(true) to turn it into TORCH_WARN, which can be</span>
<span id="L211"><span class="lineNum"> 211</span> : /// tested for more easily.</span>
<span id="L212"><span class="lineNum"> 212</span> : C10_API void set_warnAlways(bool) noexcept(true);</span>
<span id="L213"><span class="lineNum"> 213</span> : C10_API bool get_warnAlways(void) noexcept(true);</span>
<span id="L214"><span class="lineNum"> 214</span> : </span>
<span id="L215"><span class="lineNum"> 215</span> : // A RAII guard that sets warn_always (not thread-local) on</span>
<span id="L216"><span class="lineNum"> 216</span> : // construction, and sets it back to the original value upon destruction.</span>
<span id="L217"><span class="lineNum"> 217</span> : struct C10_API WarnAlways {</span>
<span id="L218"><span class="lineNum"> 218</span> : public:</span>
<span id="L219"><span class="lineNum"> 219</span> : explicit WarnAlways(bool setting = true);</span>
<span id="L220"><span class="lineNum"> 220</span> : ~WarnAlways();</span>
<span id="L221"><span class="lineNum"> 221</span> : </span>
<span id="L222"><span class="lineNum"> 222</span> : private:</span>
<span id="L223"><span class="lineNum"> 223</span> : bool prev_setting;</span>
<span id="L224"><span class="lineNum"> 224</span> : };</span>
<span id="L225"><span class="lineNum"> 225</span> : </span>
<span id="L226"><span class="lineNum"> 226</span> : } // namespace WarningUtils</span>
<span id="L227"><span class="lineNum"> 227</span> : </span>
<span id="L228"><span class="lineNum"> 228</span> : // Used in ATen for out-of-bound indices that can reasonably only be detected</span>
<span id="L229"><span class="lineNum"> 229</span> : // lazily inside a kernel (See: advanced indexing). These turn into</span>
<span id="L230"><span class="lineNum"> 230</span> : // IndexError when they cross to Python.</span>
<span id="L231"><span class="lineNum"> 231</span> : class C10_API IndexError : public Error {</span>
<span id="L232"><span class="lineNum"> 232</span> : using Error::Error;</span>
<span id="L233"><span class="lineNum"> 233</span> : };</span>
<span id="L234"><span class="lineNum"> 234</span> : </span>
<span id="L235"><span class="lineNum"> 235</span> : // Used in ATen for invalid values. These turn into</span>
<span id="L236"><span class="lineNum"> 236</span> : // ValueError when they cross to Python.</span>
<span id="L237"><span class="lineNum"> 237</span> : class C10_API ValueError : public Error {</span>
<span id="L238"><span class="lineNum"> 238</span> : using Error::Error;</span>
<span id="L239"><span class="lineNum"> 239</span> : };</span>
<span id="L240"><span class="lineNum"> 240</span> : </span>
<span id="L241"><span class="lineNum"> 241</span> : // Used in ATen for invalid types. These turn into</span>
<span id="L242"><span class="lineNum"> 242</span> : // TypeError when they cross to Python.</span>
<span id="L243"><span class="lineNum"> 243</span> : class C10_API TypeError : public Error {</span>
<span id="L244"><span class="lineNum"> 244</span> : using Error::Error;</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> : // Used in ATen for functionality that is not implemented. These turn into</span>
<span id="L248"><span class="lineNum"> 248</span> : // NotImplementedError when they cross to Python.</span>
<span id="L249"><span class="lineNum"> 249</span> : class C10_API NotImplementedError : public Error {</span>
<span id="L250"><span class="lineNum"> 250</span> : using Error::Error;</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> : // Used in ATen for non finite indices. These turn into</span>
<span id="L254"><span class="lineNum"> 254</span> : // ExitException when they cross to Python.</span>
<span id="L255"><span class="lineNum"> 255</span> : class C10_API EnforceFiniteError : public Error {</span>
<span id="L256"><span class="lineNum"> 256</span> : using Error::Error;</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> : // Used in Onnxifi backend lowering. These turn into</span>
<span id="L260"><span class="lineNum"> 260</span> : // ExitException when they cross to Python.</span>
<span id="L261"><span class="lineNum"> 261</span> : class C10_API OnnxfiBackendSystemError : public Error {</span>
<span id="L262"><span class="lineNum"> 262</span> : using Error::Error;</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> : // Used for numerical errors from the linalg module. These</span>
<span id="L266"><span class="lineNum"> 266</span> : // turn into LinAlgError when they cross into Python.</span>
<span id="L267"><span class="lineNum"> 267</span> : class C10_API LinAlgError : public Error {</span>
<span id="L268"><span class="lineNum"> 268</span> : using Error::Error;</span>
<span id="L269"><span class="lineNum"> 269</span> : };</span>
<span id="L270"><span class="lineNum"> 270</span> : </span>
<span id="L271"><span class="lineNum"> 271</span> : class C10_API OutOfMemoryError : public Error {</span>
<span id="L272"><span class="lineNum"> 272</span> : using Error::Error;</span>
<span id="L273"><span class="lineNum"> 273</span> : };</span>
<span id="L274"><span class="lineNum"> 274</span> : </span>
<span id="L275"><span class="lineNum"> 275</span> : // Used for collective communication library errors from the distributed module.</span>
<span id="L276"><span class="lineNum"> 276</span> : // These turn into DistBackendError when they cross into Python.</span>
<span id="L277"><span class="lineNum"> 277</span> : class C10_API DistBackendError : public Error {</span>
<span id="L278"><span class="lineNum"> 278</span> : using Error::Error;</span>
<span id="L279"><span class="lineNum"> 279</span> : };</span>
<span id="L280"><span class="lineNum"> 280</span> : </span>
<span id="L281"><span class="lineNum"> 281</span> : // A utility function to return an exception std::string by prepending its</span>
<span id="L282"><span class="lineNum"> 282</span> : // exception type before its what() content</span>
<span id="L283"><span class="lineNum"> 283</span> : C10_API std::string GetExceptionString(const std::exception&amp; e);</span>
<span id="L284"><span class="lineNum"> 284</span> : </span>
<span id="L285"><span class="lineNum"> 285</span> : } // namespace c10</span>
<span id="L286"><span class="lineNum"> 286</span> : </span>
<span id="L287"><span class="lineNum"> 287</span> : // Private helper macro for implementing TORCH_INTERNAL_ASSERT and TORCH_CHECK</span>
<span id="L288"><span class="lineNum"> 288</span> : //</span>
<span id="L289"><span class="lineNum"> 289</span> : // Note: In the debug build With MSVC, __LINE__ might be of long type (a.k.a</span>
<span id="L290"><span class="lineNum"> 290</span> : // int32_t), which is different from the definition of `SourceLocation` that</span>
<span id="L291"><span class="lineNum"> 291</span> : // requires unsigned int (a.k.a uint32_t) and may cause a compile error with the</span>
<span id="L292"><span class="lineNum"> 292</span> : // message: error C2397: conversion from 'long' to 'uint32_t' requires a</span>
<span id="L293"><span class="lineNum"> 293</span> : // narrowing conversion Here the static cast is used to pass the build. if this</span>
<span id="L294"><span class="lineNum"> 294</span> : // is used inside a lambda the __func__ macro expands to operator(), which isn't</span>
<span id="L295"><span class="lineNum"> 295</span> : // very useful, but hard to fix in a macro so suppressing the warning.</span>
<span id="L296"><span class="lineNum"> 296</span> : #define C10_THROW_ERROR(err_type, msg) \</span>
<span id="L297"><span class="lineNum"> 297</span> : throw ::c10::err_type( \</span>
<span id="L298"><span class="lineNum"> 298</span> : {__func__, __FILE__, static_cast&lt;uint32_t&gt;(__LINE__)}, msg)</span>
<span id="L299"><span class="lineNum"> 299</span> : </span>
<span id="L300"><span class="lineNum"> 300</span> : // Private helper macro for workaround MSVC misexpansion of nested macro</span>
<span id="L301"><span class="lineNum"> 301</span> : // invocations involving __VA_ARGS__. See</span>
<span id="L302"><span class="lineNum"> 302</span> : // https://stackoverflow.com/questions/5134523/msvc-doesnt-expand-va-args-correctly</span>
<span id="L303"><span class="lineNum"> 303</span> : #define C10_EXPAND_MSVC_WORKAROUND(x) x</span>
<span id="L304"><span class="lineNum"> 304</span> : </span>
<span id="L305"><span class="lineNum"> 305</span> : // On nvcc, C10_UNLIKELY thwarts missing return statement analysis. In cases</span>
<span id="L306"><span class="lineNum"> 306</span> : // where the unlikely expression may be a constant, use this macro to ensure</span>
<span id="L307"><span class="lineNum"> 307</span> : // return statement analysis keeps working (at the cost of not getting the</span>
<span id="L308"><span class="lineNum"> 308</span> : // likely/unlikely annotation on nvcc).</span>
<span id="L309"><span class="lineNum"> 309</span> : // https://github.com/pytorch/pytorch/issues/21418</span>
<span id="L310"><span class="lineNum"> 310</span> : //</span>
<span id="L311"><span class="lineNum"> 311</span> : // Currently, this is only used in the error reporting macros below. If you</span>
<span id="L312"><span class="lineNum"> 312</span> : // want to use it more generally, move me to Macros.h</span>
<span id="L313"><span class="lineNum"> 313</span> : //</span>
<span id="L314"><span class="lineNum"> 314</span> : // TODO: Brian Vaughan observed that we might be able to get this to work on</span>
<span id="L315"><span class="lineNum"> 315</span> : // nvcc by writing some sort of C++ overload that distinguishes constexpr inputs</span>
<span id="L316"><span class="lineNum"> 316</span> : // from non-constexpr. Since there isn't any evidence that losing C10_UNLIKELY</span>
<span id="L317"><span class="lineNum"> 317</span> : // in nvcc is causing us perf problems, this is not yet implemented, but this</span>
<span id="L318"><span class="lineNum"> 318</span> : // might be an interesting piece of C++ code for an intrepid bootcamper to</span>
<span id="L319"><span class="lineNum"> 319</span> : // write.</span>
<span id="L320"><span class="lineNum"> 320</span> : #if defined(__CUDACC__)</span>
<span id="L321"><span class="lineNum"> 321</span> : #define C10_UNLIKELY_OR_CONST(e) e</span>
<span id="L322"><span class="lineNum"> 322</span> : #else</span>
<span id="L323"><span class="lineNum"> 323</span> : #define C10_UNLIKELY_OR_CONST(e) C10_UNLIKELY(e)</span>
<span id="L324"><span class="lineNum"> 324</span> : #endif</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> : // Error reporting macros</span>
<span id="L328"><span class="lineNum"> 328</span> : // ----------------------------------------------------------------------------</span>
<span id="L329"><span class="lineNum"> 329</span> : </span>
<span id="L330"><span class="lineNum"> 330</span> : #ifdef STRIP_ERROR_MESSAGES</span>
<span id="L331"><span class="lineNum"> 331</span> : #define TORCH_RETHROW(e, ...) throw</span>
<span id="L332"><span class="lineNum"> 332</span> : #else</span>
<span id="L333"><span class="lineNum"> 333</span> : #define TORCH_RETHROW(e, ...) \</span>
<span id="L334"><span class="lineNum"> 334</span> : do { \</span>
<span id="L335"><span class="lineNum"> 335</span> : e.add_context(::c10::str(__VA_ARGS__)); \</span>
<span id="L336"><span class="lineNum"> 336</span> : throw; \</span>
<span id="L337"><span class="lineNum"> 337</span> : } while (false)</span>
<span id="L338"><span class="lineNum"> 338</span> : #endif</span>
<span id="L339"><span class="lineNum"> 339</span> : </span>
<span id="L340"><span class="lineNum"> 340</span> : // A utility macro to provide assert()-like functionality; that is, enforcement</span>
<span id="L341"><span class="lineNum"> 341</span> : // of internal invariants in code. It supports an arbitrary number of extra</span>
<span id="L342"><span class="lineNum"> 342</span> : // arguments (evaluated only on failure), which will be printed in the assert</span>
<span id="L343"><span class="lineNum"> 343</span> : // failure message using operator&lt;&lt; (this is useful to print some variables</span>
<span id="L344"><span class="lineNum"> 344</span> : // which may be useful for debugging.)</span>
<span id="L345"><span class="lineNum"> 345</span> : //</span>
<span id="L346"><span class="lineNum"> 346</span> : // Usage:</span>
<span id="L347"><span class="lineNum"> 347</span> : // TORCH_INTERNAL_ASSERT(should_be_true);</span>
<span id="L348"><span class="lineNum"> 348</span> : // TORCH_INTERNAL_ASSERT(x == 0, &quot;x = &quot;, x);</span>
<span id="L349"><span class="lineNum"> 349</span> : //</span>
<span id="L350"><span class="lineNum"> 350</span> : // Assuming no bugs in PyTorch, the conditions tested by this macro should</span>
<span id="L351"><span class="lineNum"> 351</span> : // always be true; e.g., it should be possible to disable all of these</span>
<span id="L352"><span class="lineNum"> 352</span> : // conditions without changing observable user behavior. If you would like to</span>
<span id="L353"><span class="lineNum"> 353</span> : // do error reporting for user input, please use TORCH_CHECK instead.</span>
<span id="L354"><span class="lineNum"> 354</span> : //</span>
<span id="L355"><span class="lineNum"> 355</span> : // NOTE: It is SAFE to use this macro in production code; on failure, this</span>
<span id="L356"><span class="lineNum"> 356</span> : // simply raises an exception, it does NOT unceremoniously quit the process</span>
<span id="L357"><span class="lineNum"> 357</span> : // (unlike assert()).</span>
<span id="L358"><span class="lineNum"> 358</span> : //</span>
<span id="L359"><span class="lineNum"> 359</span> : #ifdef STRIP_ERROR_MESSAGES</span>
<span id="L360"><span class="lineNum"> 360</span> : #define TORCH_INTERNAL_ASSERT(cond, ...) \</span>
<span id="L361"><span class="lineNum"> 361</span> : if (C10_UNLIKELY_OR_CONST(!(cond))) { \</span>
<span id="L362"><span class="lineNum"> 362</span> : ::c10::detail::torchCheckFail( \</span>
<span id="L363"><span class="lineNum"> 363</span> : __func__, \</span>
<span id="L364"><span class="lineNum"> 364</span> : __FILE__, \</span>
<span id="L365"><span class="lineNum"> 365</span> : static_cast&lt;uint32_t&gt;(__LINE__), \</span>
<span id="L366"><span class="lineNum"> 366</span> : #cond &quot; INTERNAL ASSERT FAILED at &quot; C10_STRINGIZE(__FILE__)); \</span>
<span id="L367"><span class="lineNum"> 367</span> : }</span>
<span id="L368"><span class="lineNum"> 368</span> : #else</span>
<span id="L369"><span class="lineNum"> 369</span> : // It would be nice if we could build a combined string literal out of</span>
<span id="L370"><span class="lineNum"> 370</span> : // the TORCH_INTERNAL_ASSERT prefix and a user-provided string literal</span>
<span id="L371"><span class="lineNum"> 371</span> : // as the first argument, but there doesn't seem to be any good way to</span>
<span id="L372"><span class="lineNum"> 372</span> : // do that while still supporting having a first argument that isn't a</span>
<span id="L373"><span class="lineNum"> 373</span> : // string literal.</span>
<span id="L374"><span class="lineNum"> 374</span> : #define TORCH_INTERNAL_ASSERT(cond, ...) \</span>
<span id="L375"><span class="lineNum"> 375</span> : if (C10_UNLIKELY_OR_CONST(!(cond))) { \</span>
<span id="L376"><span class="lineNum"> 376</span> : ::c10::detail::torchInternalAssertFail( \</span>
<span id="L377"><span class="lineNum"> 377</span> : __func__, \</span>
<span id="L378"><span class="lineNum"> 378</span> : __FILE__, \</span>
<span id="L379"><span class="lineNum"> 379</span> : static_cast&lt;uint32_t&gt;(__LINE__), \</span>
<span id="L380"><span class="lineNum"> 380</span> : #cond \</span>
<span id="L381"><span class="lineNum"> 381</span> : &quot; INTERNAL ASSERT FAILED at &quot; C10_STRINGIZE(__FILE__) &quot;:&quot; C10_STRINGIZE( \</span>
<span id="L382"><span class="lineNum"> 382</span> : __LINE__) &quot;, please report a bug to PyTorch. &quot;, \</span>
<span id="L383"><span class="lineNum"> 383</span> : c10::str(__VA_ARGS__)); \</span>
<span id="L384"><span class="lineNum"> 384</span> : }</span>
<span id="L385"><span class="lineNum"> 385</span> : #endif</span>
<span id="L386"><span class="lineNum"> 386</span> : </span>
<span id="L387"><span class="lineNum"> 387</span> : // A utility macro to make it easier to test for error conditions from user</span>
<span id="L388"><span class="lineNum"> 388</span> : // input. Like TORCH_INTERNAL_ASSERT, it supports an arbitrary number of extra</span>
<span id="L389"><span class="lineNum"> 389</span> : // arguments (evaluated only on failure), which will be printed in the error</span>
<span id="L390"><span class="lineNum"> 390</span> : // message using operator&lt;&lt; (e.g., you can pass any object which has</span>
<span id="L391"><span class="lineNum"> 391</span> : // operator&lt;&lt; defined. Most objects in PyTorch have these definitions!)</span>
<span id="L392"><span class="lineNum"> 392</span> : //</span>
<span id="L393"><span class="lineNum"> 393</span> : // Usage:</span>
<span id="L394"><span class="lineNum"> 394</span> : // TORCH_CHECK(should_be_true); // A default error message will be provided</span>
<span id="L395"><span class="lineNum"> 395</span> : // // in this case; but we recommend writing an</span>
<span id="L396"><span class="lineNum"> 396</span> : // // explicit error message, as it is more</span>
<span id="L397"><span class="lineNum"> 397</span> : // // user friendly.</span>
<span id="L398"><span class="lineNum"> 398</span> : // TORCH_CHECK(x == 0, &quot;Expected x to be 0, but got &quot;, x);</span>
<span id="L399"><span class="lineNum"> 399</span> : //</span>
<span id="L400"><span class="lineNum"> 400</span> : // On failure, this macro will raise an exception. If this exception propagates</span>
<span id="L401"><span class="lineNum"> 401</span> : // to Python, it will convert into a Python RuntimeError.</span>
<span id="L402"><span class="lineNum"> 402</span> : //</span>
<span id="L403"><span class="lineNum"> 403</span> : // NOTE: It is SAFE to use this macro in production code; on failure, this</span>
<span id="L404"><span class="lineNum"> 404</span> : // simply raises an exception, it does NOT unceremoniously quit the process</span>
<span id="L405"><span class="lineNum"> 405</span> : // (unlike CHECK() from glog.)</span>
<span id="L406"><span class="lineNum"> 406</span> : //</span>
<span id="L407"><span class="lineNum"> 407</span> : #define TORCH_CHECK_WITH(error_t, cond, ...) \</span>
<span id="L408"><span class="lineNum"> 408</span> : TORCH_CHECK_WITH_MSG(error_t, cond, &quot;&quot;, __VA_ARGS__)</span>
<span id="L409"><span class="lineNum"> 409</span> : </span>
<span id="L410"><span class="lineNum"> 410</span> : #ifdef STRIP_ERROR_MESSAGES</span>
<span id="L411"><span class="lineNum"> 411</span> : #define TORCH_CHECK_MSG(cond, type, ...) \</span>
<span id="L412"><span class="lineNum"> 412</span> : (#cond #type &quot; CHECK FAILED at &quot; C10_STRINGIZE(__FILE__))</span>
<span id="L413"><span class="lineNum"> 413</span> : #define TORCH_CHECK_WITH_MSG(error_t, cond, type, ...) \</span>
<span id="L414"><span class="lineNum"> 414</span> : if (C10_UNLIKELY_OR_CONST(!(cond))) { \</span>
<span id="L415"><span class="lineNum"> 415</span> : C10_THROW_ERROR(Error, TORCH_CHECK_MSG(cond, type, __VA_ARGS__)); \</span>
<span id="L416"><span class="lineNum"> 416</span> : }</span>
<span id="L417"><span class="lineNum"> 417</span> : #else</span>
<span id="L418"><span class="lineNum"> 418</span> : namespace c10 {</span>
<span id="L419"><span class="lineNum"> 419</span> : namespace detail {</span>
<span id="L420"><span class="lineNum"> 420</span> : template &lt;typename... Args&gt;</span>
<span id="L421"><span class="lineNum"> 421</span> <span class="tlaUNC"> 0 : decltype(auto) torchCheckMsgImpl(const char* /*msg*/, const Args&amp;... args) {</span></span>
<span id="L422"><span class="lineNum"> 422</span> <span class="tlaUNC"> 0 : return ::c10::str(args...);</span></span>
<span id="L423"><span class="lineNum"> 423</span> : }</span>
<span id="L424"><span class="lineNum"> 424</span> <span class="tlaUNC"> 0 : inline C10_API const char* torchCheckMsgImpl(const char* msg) {</span></span>
<span id="L425"><span class="lineNum"> 425</span> <span class="tlaUNC"> 0 : return msg;</span></span>
<span id="L426"><span class="lineNum"> 426</span> : }</span>
<span id="L427"><span class="lineNum"> 427</span> : // If there is just 1 user-provided C-string argument, use it.</span>
<span id="L428"><span class="lineNum"> 428</span> <span class="tlaUNC"> 0 : inline C10_API const char* torchCheckMsgImpl(</span></span>
<span id="L429"><span class="lineNum"> 429</span> : const char* /*msg*/,</span>
<span id="L430"><span class="lineNum"> 430</span> : const char* args) {</span>
<span id="L431"><span class="lineNum"> 431</span> <span class="tlaUNC"> 0 : return args;</span></span>
<span id="L432"><span class="lineNum"> 432</span> : }</span>
<span id="L433"><span class="lineNum"> 433</span> : } // namespace detail</span>
<span id="L434"><span class="lineNum"> 434</span> : } // namespace c10</span>
<span id="L435"><span class="lineNum"> 435</span> : </span>
<span id="L436"><span class="lineNum"> 436</span> : #define TORCH_CHECK_MSG(cond, type, ...) \</span>
<span id="L437"><span class="lineNum"> 437</span> : (::c10::detail::torchCheckMsgImpl( \</span>
<span id="L438"><span class="lineNum"> 438</span> : &quot;Expected &quot; #cond \</span>
<span id="L439"><span class="lineNum"> 439</span> : &quot; to be true, but got false. &quot; \</span>
<span id="L440"><span class="lineNum"> 440</span> : &quot;(Could this error message be improved? If so, &quot; \</span>
<span id="L441"><span class="lineNum"> 441</span> : &quot;please report an enhancement request to PyTorch.)&quot;, \</span>
<span id="L442"><span class="lineNum"> 442</span> : ##__VA_ARGS__))</span>
<span id="L443"><span class="lineNum"> 443</span> : #define TORCH_CHECK_WITH_MSG(error_t, cond, type, ...) \</span>
<span id="L444"><span class="lineNum"> 444</span> : if (C10_UNLIKELY_OR_CONST(!(cond))) { \</span>
<span id="L445"><span class="lineNum"> 445</span> : C10_THROW_ERROR(error_t, TORCH_CHECK_MSG(cond, type, __VA_ARGS__)); \</span>
<span id="L446"><span class="lineNum"> 446</span> : }</span>
<span id="L447"><span class="lineNum"> 447</span> : #endif</span>
<span id="L448"><span class="lineNum"> 448</span> : </span>
<span id="L449"><span class="lineNum"> 449</span> : namespace c10 {</span>
<span id="L450"><span class="lineNum"> 450</span> : namespace detail {</span>
<span id="L451"><span class="lineNum"> 451</span> : </span>
<span id="L452"><span class="lineNum"> 452</span> : [[noreturn]] C10_API void torchCheckFail(</span>
<span id="L453"><span class="lineNum"> 453</span> : const char* func,</span>
<span id="L454"><span class="lineNum"> 454</span> : const char* file,</span>
<span id="L455"><span class="lineNum"> 455</span> : uint32_t line,</span>
<span id="L456"><span class="lineNum"> 456</span> : const std::string&amp; msg);</span>
<span id="L457"><span class="lineNum"> 457</span> : [[noreturn]] C10_API void torchCheckFail(</span>
<span id="L458"><span class="lineNum"> 458</span> : const char* func,</span>
<span id="L459"><span class="lineNum"> 459</span> : const char* file,</span>
<span id="L460"><span class="lineNum"> 460</span> : uint32_t line,</span>
<span id="L461"><span class="lineNum"> 461</span> : const char* msg);</span>
<span id="L462"><span class="lineNum"> 462</span> : </span>
<span id="L463"><span class="lineNum"> 463</span> : // The c10::str() call that creates userMsg can have 1 of 3 return</span>
<span id="L464"><span class="lineNum"> 464</span> : // types depending on the number and types of arguments passed to</span>
<span id="L465"><span class="lineNum"> 465</span> : // TORCH_INTERNAL_ASSERT. 0 arguments will get a</span>
<span id="L466"><span class="lineNum"> 466</span> : // CompileTimeEmptyString, 1 const char * will be passed straight</span>
<span id="L467"><span class="lineNum"> 467</span> : // through, and anything else will get converted to std::string.</span>
<span id="L468"><span class="lineNum"> 468</span> : [[noreturn]] C10_API void torchInternalAssertFail(</span>
<span id="L469"><span class="lineNum"> 469</span> : const char* func,</span>
<span id="L470"><span class="lineNum"> 470</span> : const char* file,</span>
<span id="L471"><span class="lineNum"> 471</span> : uint32_t line,</span>
<span id="L472"><span class="lineNum"> 472</span> : const char* condMsg,</span>
<span id="L473"><span class="lineNum"> 473</span> : const char* userMsg);</span>
<span id="L474"><span class="lineNum"> 474</span> <span class="tlaUNC"> 0 : [[noreturn]] inline C10_API void torchInternalAssertFail(</span></span>
<span id="L475"><span class="lineNum"> 475</span> : const char* func,</span>
<span id="L476"><span class="lineNum"> 476</span> : const char* file,</span>
<span id="L477"><span class="lineNum"> 477</span> : uint32_t line,</span>
<span id="L478"><span class="lineNum"> 478</span> : const char* condMsg,</span>
<span id="L479"><span class="lineNum"> 479</span> : ::c10::detail::CompileTimeEmptyString /*userMsg*/) {</span>
<span id="L480"><span class="lineNum"> 480</span> <span class="tlaUNC"> 0 : torchCheckFail(func, file, line, condMsg);</span></span>
<span id="L481"><span class="lineNum"> 481</span> : }</span>
<span id="L482"><span class="lineNum"> 482</span> : [[noreturn]] C10_API void torchInternalAssertFail(</span>
<span id="L483"><span class="lineNum"> 483</span> : const char* func,</span>
<span id="L484"><span class="lineNum"> 484</span> : const char* file,</span>
<span id="L485"><span class="lineNum"> 485</span> : uint32_t line,</span>
<span id="L486"><span class="lineNum"> 486</span> : const char* condMsg,</span>
<span id="L487"><span class="lineNum"> 487</span> : const std::string&amp; userMsg);</span>
<span id="L488"><span class="lineNum"> 488</span> : </span>
<span id="L489"><span class="lineNum"> 489</span> : } // namespace detail</span>
<span id="L490"><span class="lineNum"> 490</span> : } // namespace c10</span>
<span id="L491"><span class="lineNum"> 491</span> : </span>
<span id="L492"><span class="lineNum"> 492</span> : #ifdef STRIP_ERROR_MESSAGES</span>
<span id="L493"><span class="lineNum"> 493</span> : #define TORCH_CHECK(cond, ...) \</span>
<span id="L494"><span class="lineNum"> 494</span> : if (C10_UNLIKELY_OR_CONST(!(cond))) { \</span>
<span id="L495"><span class="lineNum"> 495</span> : ::c10::detail::torchCheckFail( \</span>
<span id="L496"><span class="lineNum"> 496</span> : __func__, \</span>
<span id="L497"><span class="lineNum"> 497</span> : __FILE__, \</span>
<span id="L498"><span class="lineNum"> 498</span> : static_cast&lt;uint32_t&gt;(__LINE__), \</span>
<span id="L499"><span class="lineNum"> 499</span> : TORCH_CHECK_MSG(cond, &quot;&quot;, __VA_ARGS__)); \</span>
<span id="L500"><span class="lineNum"> 500</span> : }</span>
<span id="L501"><span class="lineNum"> 501</span> : #else</span>
<span id="L502"><span class="lineNum"> 502</span> : #define TORCH_CHECK(cond, ...) \</span>
<span id="L503"><span class="lineNum"> 503</span> : if (C10_UNLIKELY_OR_CONST(!(cond))) { \</span>
<span id="L504"><span class="lineNum"> 504</span> : ::c10::detail::torchCheckFail( \</span>
<span id="L505"><span class="lineNum"> 505</span> : __func__, \</span>
<span id="L506"><span class="lineNum"> 506</span> : __FILE__, \</span>
<span id="L507"><span class="lineNum"> 507</span> : static_cast&lt;uint32_t&gt;(__LINE__), \</span>
<span id="L508"><span class="lineNum"> 508</span> : TORCH_CHECK_MSG(cond, &quot;&quot;, ##__VA_ARGS__)); \</span>
<span id="L509"><span class="lineNum"> 509</span> : }</span>
<span id="L510"><span class="lineNum"> 510</span> : #endif</span>
<span id="L511"><span class="lineNum"> 511</span> : </span>
<span id="L512"><span class="lineNum"> 512</span> : // An utility macro that does what `TORCH_CHECK` does if compiled in the host</span>
<span id="L513"><span class="lineNum"> 513</span> : // code, otherwise does nothing. Supposed to be used in the code shared between</span>
<span id="L514"><span class="lineNum"> 514</span> : // host and device code as an alternative for `TORCH_CHECK`.</span>
<span id="L515"><span class="lineNum"> 515</span> : #if defined(__CUDACC__) || defined(__HIPCC__)</span>
<span id="L516"><span class="lineNum"> 516</span> : #define TORCH_CHECK_IF_NOT_ON_CUDA(cond, ...)</span>
<span id="L517"><span class="lineNum"> 517</span> : #else</span>
<span id="L518"><span class="lineNum"> 518</span> : #define TORCH_CHECK_IF_NOT_ON_CUDA(cond, ...) TORCH_CHECK(cond, ##__VA_ARGS__)</span>
<span id="L519"><span class="lineNum"> 519</span> : #endif</span>
<span id="L520"><span class="lineNum"> 520</span> : </span>
<span id="L521"><span class="lineNum"> 521</span> : // Debug only version of TORCH_INTERNAL_ASSERT. This macro only checks in debug</span>
<span id="L522"><span class="lineNum"> 522</span> : // build, and does nothing in release build. It is appropriate to use</span>
<span id="L523"><span class="lineNum"> 523</span> : // in situations where you want to add an assert to a hotpath, but it is</span>
<span id="L524"><span class="lineNum"> 524</span> : // too expensive to run this assert on production builds.</span>
<span id="L525"><span class="lineNum"> 525</span> : #ifdef NDEBUG</span>
<span id="L526"><span class="lineNum"> 526</span> : // Optimized version - generates no code.</span>
<span id="L527"><span class="lineNum"> 527</span> : #define TORCH_INTERNAL_ASSERT_DEBUG_ONLY(...) \</span>
<span id="L528"><span class="lineNum"> 528</span> : while (false) \</span>
<span id="L529"><span class="lineNum"> 529</span> : C10_EXPAND_MSVC_WORKAROUND(TORCH_INTERNAL_ASSERT(__VA_ARGS__))</span>
<span id="L530"><span class="lineNum"> 530</span> : #else</span>
<span id="L531"><span class="lineNum"> 531</span> : #define TORCH_INTERNAL_ASSERT_DEBUG_ONLY(...) \</span>
<span id="L532"><span class="lineNum"> 532</span> : C10_EXPAND_MSVC_WORKAROUND(TORCH_INTERNAL_ASSERT(__VA_ARGS__))</span>
<span id="L533"><span class="lineNum"> 533</span> : #endif</span>
<span id="L534"><span class="lineNum"> 534</span> : </span>
<span id="L535"><span class="lineNum"> 535</span> : // TODO: We're going to get a lot of similar looking string literals</span>
<span id="L536"><span class="lineNum"> 536</span> : // this way; check if this actually affects binary size.</span>
<span id="L537"><span class="lineNum"> 537</span> : </span>
<span id="L538"><span class="lineNum"> 538</span> : // Like TORCH_CHECK, but raises LinAlgError instead of Error.</span>
<span id="L539"><span class="lineNum"> 539</span> : #define TORCH_CHECK_LINALG(cond, ...) \</span>
<span id="L540"><span class="lineNum"> 540</span> : TORCH_CHECK_WITH_MSG(LinAlgError, cond, &quot;LINALG&quot;, __VA_ARGS__)</span>
<span id="L541"><span class="lineNum"> 541</span> : </span>
<span id="L542"><span class="lineNum"> 542</span> : // Like TORCH_CHECK, but raises IndexErrors instead of Errors.</span>
<span id="L543"><span class="lineNum"> 543</span> : #define TORCH_CHECK_INDEX(cond, ...) \</span>
<span id="L544"><span class="lineNum"> 544</span> : TORCH_CHECK_WITH_MSG(IndexError, cond, &quot;INDEX&quot;, __VA_ARGS__)</span>
<span id="L545"><span class="lineNum"> 545</span> : </span>
<span id="L546"><span class="lineNum"> 546</span> : // Like TORCH_CHECK, but raises ValueErrors instead of Errors.</span>
<span id="L547"><span class="lineNum"> 547</span> : #define TORCH_CHECK_VALUE(cond, ...) \</span>
<span id="L548"><span class="lineNum"> 548</span> : TORCH_CHECK_WITH_MSG(ValueError, cond, &quot;VALUE&quot;, __VA_ARGS__)</span>
<span id="L549"><span class="lineNum"> 549</span> : </span>
<span id="L550"><span class="lineNum"> 550</span> : // Like TORCH_CHECK, but raises TypeErrors instead of Errors.</span>
<span id="L551"><span class="lineNum"> 551</span> : #define TORCH_CHECK_TYPE(cond, ...) \</span>
<span id="L552"><span class="lineNum"> 552</span> : TORCH_CHECK_WITH_MSG(TypeError, cond, &quot;TYPE&quot;, __VA_ARGS__)</span>
<span id="L553"><span class="lineNum"> 553</span> : </span>
<span id="L554"><span class="lineNum"> 554</span> : // Like TORCH_CHECK, but raises NotImplementedErrors instead of Errors.</span>
<span id="L555"><span class="lineNum"> 555</span> : #define TORCH_CHECK_NOT_IMPLEMENTED(cond, ...) \</span>
<span id="L556"><span class="lineNum"> 556</span> : TORCH_CHECK_WITH_MSG(NotImplementedError, cond, &quot;TYPE&quot;, __VA_ARGS__)</span>
<span id="L557"><span class="lineNum"> 557</span> : </span>
<span id="L558"><span class="lineNum"> 558</span> : #ifdef STRIP_ERROR_MESSAGES</span>
<span id="L559"><span class="lineNum"> 559</span> : #define WARNING_MESSAGE_STRING(...) \</span>
<span id="L560"><span class="lineNum"> 560</span> : ::c10::detail::CompileTimeEmptyString {}</span>
<span id="L561"><span class="lineNum"> 561</span> : #else</span>
<span id="L562"><span class="lineNum"> 562</span> : #define WARNING_MESSAGE_STRING(...) ::c10::str(__VA_ARGS__)</span>
<span id="L563"><span class="lineNum"> 563</span> : #endif</span>
<span id="L564"><span class="lineNum"> 564</span> : </span>
<span id="L565"><span class="lineNum"> 565</span> : // Report a warning to the user. Accepts an arbitrary number of extra</span>
<span id="L566"><span class="lineNum"> 566</span> : // arguments which are concatenated into the warning message using operator&lt;&lt;</span>
<span id="L567"><span class="lineNum"> 567</span> : //</span>
<span id="L568"><span class="lineNum"> 568</span> : #ifdef DISABLE_WARN</span>
<span id="L569"><span class="lineNum"> 569</span> : #define _TORCH_WARN_WITH(...) ((void)0);</span>
<span id="L570"><span class="lineNum"> 570</span> : #else</span>
<span id="L571"><span class="lineNum"> 571</span> : #define _TORCH_WARN_WITH(warning_t, ...) \</span>
<span id="L572"><span class="lineNum"> 572</span> : ::c10::warn(::c10::Warning( \</span>
<span id="L573"><span class="lineNum"> 573</span> : warning_t(), \</span>
<span id="L574"><span class="lineNum"> 574</span> : {__func__, __FILE__, static_cast&lt;uint32_t&gt;(__LINE__)}, \</span>
<span id="L575"><span class="lineNum"> 575</span> : WARNING_MESSAGE_STRING(__VA_ARGS__), \</span>
<span id="L576"><span class="lineNum"> 576</span> : false));</span>
<span id="L577"><span class="lineNum"> 577</span> : #endif</span>
<span id="L578"><span class="lineNum"> 578</span> : </span>
<span id="L579"><span class="lineNum"> 579</span> : #define TORCH_WARN(...) _TORCH_WARN_WITH(::c10::UserWarning, __VA_ARGS__);</span>
<span id="L580"><span class="lineNum"> 580</span> : </span>
<span id="L581"><span class="lineNum"> 581</span> : #define TORCH_WARN_DEPRECATION(...) \</span>
<span id="L582"><span class="lineNum"> 582</span> : _TORCH_WARN_WITH(::c10::DeprecationWarning, __VA_ARGS__);</span>
<span id="L583"><span class="lineNum"> 583</span> : </span>
<span id="L584"><span class="lineNum"> 584</span> : // Report a warning to the user only once. Accepts an arbitrary number of extra</span>
<span id="L585"><span class="lineNum"> 585</span> : // arguments which are concatenated into the warning message using operator&lt;&lt;</span>
<span id="L586"><span class="lineNum"> 586</span> : //</span>
<span id="L587"><span class="lineNum"> 587</span> : #define _TORCH_WARN_ONCE(...) \</span>
<span id="L588"><span class="lineNum"> 588</span> : C10_UNUSED static const auto C10_ANONYMOUS_VARIABLE(torch_warn_once_) = \</span>
<span id="L589"><span class="lineNum"> 589</span> : [&amp;] { \</span>
<span id="L590"><span class="lineNum"> 590</span> : TORCH_WARN(__VA_ARGS__); \</span>
<span id="L591"><span class="lineNum"> 591</span> : return true; \</span>
<span id="L592"><span class="lineNum"> 592</span> : }()</span>
<span id="L593"><span class="lineNum"> 593</span> : </span>
<span id="L594"><span class="lineNum"> 594</span> : #ifdef DISABLE_WARN</span>
<span id="L595"><span class="lineNum"> 595</span> : #define TORCH_WARN_ONCE(...) ((void)0);</span>
<span id="L596"><span class="lineNum"> 596</span> : #else</span>
<span id="L597"><span class="lineNum"> 597</span> : #define TORCH_WARN_ONCE(...) \</span>
<span id="L598"><span class="lineNum"> 598</span> : if (::c10::WarningUtils::get_warnAlways()) { \</span>
<span id="L599"><span class="lineNum"> 599</span> : TORCH_WARN(__VA_ARGS__); \</span>
<span id="L600"><span class="lineNum"> 600</span> : } else { \</span>
<span id="L601"><span class="lineNum"> 601</span> : _TORCH_WARN_ONCE(__VA_ARGS__); \</span>
<span id="L602"><span class="lineNum"> 602</span> : }</span>
<span id="L603"><span class="lineNum"> 603</span> : #endif</span>
<span id="L604"><span class="lineNum"> 604</span> : </span>
<span id="L605"><span class="lineNum"> 605</span> : // Report an error with a specific argument</span>
<span id="L606"><span class="lineNum"> 606</span> : // NOTE: using the argument name in TORCH_CHECK's message is preferred</span>
<span id="L607"><span class="lineNum"> 607</span> : #define TORCH_CHECK_ARG(cond, argN, ...) \</span>
<span id="L608"><span class="lineNum"> 608</span> : TORCH_CHECK(cond, &quot;invalid argument &quot;, argN, &quot;: &quot;, __VA_ARGS__)</span>
<span id="L609"><span class="lineNum"> 609</span> : </span>
<span id="L610"><span class="lineNum"> 610</span> : // ----------------------------------------------------------------------------</span>
<span id="L611"><span class="lineNum"> 611</span> : // Deprecated macros</span>
<span id="L612"><span class="lineNum"> 612</span> : // ----------------------------------------------------------------------------</span>
<span id="L613"><span class="lineNum"> 613</span> : </span>
<span id="L614"><span class="lineNum"> 614</span> : namespace c10 {</span>
<span id="L615"><span class="lineNum"> 615</span> : namespace detail {</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> : // Deprecation disabled until we fix sites in our codebase</span>
<span id="L619"><span class="lineNum"> 619</span> : C10_DEPRECATED_MESSAGE(&quot;AT_ERROR(msg) is deprecated, use TORCH_CHECK(false, msg)</span>
<span id="L620"><span class="lineNum"> 620</span> : instead.&quot;)</span>
<span id="L621"><span class="lineNum"> 621</span> : */</span>
<span id="L622"><span class="lineNum"> 622</span> : inline void deprecated_AT_ERROR() {}</span>
<span id="L623"><span class="lineNum"> 623</span> : </span>
<span id="L624"><span class="lineNum"> 624</span> : /*</span>
<span id="L625"><span class="lineNum"> 625</span> : // Deprecation disabled until we fix sites in our codebase</span>
<span id="L626"><span class="lineNum"> 626</span> : C10_DEPRECATED_MESSAGE(&quot;AT_ASSERT is deprecated, if you mean to indicate an</span>
<span id="L627"><span class="lineNum"> 627</span> : internal invariant failure, use &quot; \</span>
<span id="L628"><span class="lineNum"> 628</span> : &quot;TORCH_INTERNAL_ASSERT instead; if you mean to do user</span>
<span id="L629"><span class="lineNum"> 629</span> : error checking, use &quot; \ &quot;TORCH_CHECK. See</span>
<span id="L630"><span class="lineNum"> 630</span> : https://github.com/pytorch/pytorch/issues/20287 for more details.&quot;)</span>
<span id="L631"><span class="lineNum"> 631</span> : */</span>
<span id="L632"><span class="lineNum"> 632</span> <span class="tlaUNC"> 0 : inline void deprecated_AT_ASSERT() {}</span></span>
<span id="L633"><span class="lineNum"> 633</span> : </span>
<span id="L634"><span class="lineNum"> 634</span> : /*</span>
<span id="L635"><span class="lineNum"> 635</span> : // Deprecation disabled until we fix sites in our codebase</span>
<span id="L636"><span class="lineNum"> 636</span> : C10_DEPRECATED_MESSAGE(&quot;AT_ASSERTM is deprecated, if you mean to indicate an</span>
<span id="L637"><span class="lineNum"> 637</span> : internal invariant failure, use &quot; \</span>
<span id="L638"><span class="lineNum"> 638</span> : &quot;TORCH_INTERNAL_ASSERT instead; if you mean to do user</span>
<span id="L639"><span class="lineNum"> 639</span> : error checking, use &quot; \ &quot;TORCH_CHECK. See</span>
<span id="L640"><span class="lineNum"> 640</span> : https://github.com/pytorch/pytorch/issues/20287 for more details.&quot;)</span>
<span id="L641"><span class="lineNum"> 641</span> : */</span>
<span id="L642"><span class="lineNum"> 642</span> : inline void deprecated_AT_ASSERTM() {}</span>
<span id="L643"><span class="lineNum"> 643</span> : </span>
<span id="L644"><span class="lineNum"> 644</span> : } // namespace detail</span>
<span id="L645"><span class="lineNum"> 645</span> : } // namespace c10</span>
<span id="L646"><span class="lineNum"> 646</span> : </span>
<span id="L647"><span class="lineNum"> 647</span> : // Deprecated alias; this alias was deprecated because people kept mistakenly</span>
<span id="L648"><span class="lineNum"> 648</span> : // using it for user error checking. Use TORCH_INTERNAL_ASSERT or TORCH_CHECK</span>
<span id="L649"><span class="lineNum"> 649</span> : // instead. See https://github.com/pytorch/pytorch/issues/20287 for more</span>
<span id="L650"><span class="lineNum"> 650</span> : // details.</span>
<span id="L651"><span class="lineNum"> 651</span> : #define AT_ASSERT(...) \</span>
<span id="L652"><span class="lineNum"> 652</span> : do { \</span>
<span id="L653"><span class="lineNum"> 653</span> : ::c10::detail::deprecated_AT_ASSERT(); \</span>
<span id="L654"><span class="lineNum"> 654</span> : C10_EXPAND_MSVC_WORKAROUND(TORCH_INTERNAL_ASSERT(__VA_ARGS__)); \</span>
<span id="L655"><span class="lineNum"> 655</span> : } while (false)</span>
<span id="L656"><span class="lineNum"> 656</span> : </span>
<span id="L657"><span class="lineNum"> 657</span> : // Deprecated alias, like AT_ASSERT. The new TORCH_INTERNAL_ASSERT macro</span>
<span id="L658"><span class="lineNum"> 658</span> : // supports both 0-ary and variadic calls, so having a separate</span>
<span id="L659"><span class="lineNum"> 659</span> : // message-accepting macro is not necessary.</span>
<span id="L660"><span class="lineNum"> 660</span> : //</span>
<span id="L661"><span class="lineNum"> 661</span> : // NB: we MUST include cond explicitly here, as MSVC will miscompile the macro</span>
<span id="L662"><span class="lineNum"> 662</span> : // expansion, shunting all of __VA_ARGS__ to cond. An alternate workaround</span>
<span id="L663"><span class="lineNum"> 663</span> : // can be seen at</span>
<span id="L664"><span class="lineNum"> 664</span> : // https://stackoverflow.com/questions/5134523/msvc-doesnt-expand-va-args-correctly</span>
<span id="L665"><span class="lineNum"> 665</span> : #define AT_ASSERTM(cond, ...) \</span>
<span id="L666"><span class="lineNum"> 666</span> : do { \</span>
<span id="L667"><span class="lineNum"> 667</span> : ::c10::detail::deprecated_AT_ASSERTM(); \</span>
<span id="L668"><span class="lineNum"> 668</span> : C10_EXPAND_MSVC_WORKAROUND(TORCH_INTERNAL_ASSERT(cond, __VA_ARGS__)); \</span>
<span id="L669"><span class="lineNum"> 669</span> : } while (false)</span>
<span id="L670"><span class="lineNum"> 670</span> : </span>
<span id="L671"><span class="lineNum"> 671</span> : // Deprecated alias; this alias was deprecated because it represents extra API</span>
<span id="L672"><span class="lineNum"> 672</span> : // surface that makes it hard for people to understand what macro to use.</span>
<span id="L673"><span class="lineNum"> 673</span> : // Use TORCH_CHECK(false, ...) or TORCH_INTERNAL_ASSERT(false, ...) to</span>
<span id="L674"><span class="lineNum"> 674</span> : // unconditionally fail at a line of code.</span>
<span id="L675"><span class="lineNum"> 675</span> : #define AT_ERROR(...) \</span>
<span id="L676"><span class="lineNum"> 676</span> : do { \</span>
<span id="L677"><span class="lineNum"> 677</span> : ::c10::detail::deprecated_AT_ERROR(); \</span>
<span id="L678"><span class="lineNum"> 678</span> : C10_EXPAND_MSVC_WORKAROUND(TORCH_CHECK(false, ::c10::str(__VA_ARGS__))); \</span>
<span id="L679"><span class="lineNum"> 679</span> : } while (false)</span>
<span id="L680"><span class="lineNum"> 680</span> : </span>
<span id="L681"><span class="lineNum"> 681</span> : #endif // C10_UTIL_EXCEPTION_H_</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/c10/util/Half.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/c10/util</a> - Half.h<span style="font-size: 80%;"> (<a href="Half.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">15.4&nbsp;%</td>
<td class="headerCovTableEntry">13</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="headerCovTableEntryLo">25.0&nbsp;%</td>
<td class="headerCovTableEntry">4</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="Half.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="Half.h.gcov.html#L482">_ZN3c109overflowsIlNS_7complexIdEEEENSt9enable_ifIXsrNS_10is_complexIT0_EE5valueEbE4typeES5_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="Half.h.gcov.html#L439">_ZN3c109overflowsIlbEENSt9enable_ifIXsrSt7is_sameIT0_bE5valueEbE4typeES3_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="Half.h.gcov.html#L464">_ZN3c109overflowsIldEENSt9enable_ifIXsrSt17is_floating_pointIT0_E5valueEbE4typeES3_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="Half.h.gcov.html#L449">_ZN3c109overflowsIllEENSt9enable_ifIXaasrSt11is_integralIT0_E5valuentsrSt7is_sameIS3_bE5valueEbE4typeES3_</a></td>
<td class="coverFnHi">7072</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/c10/util/Half.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/c10/util</a> - Half.h<span style="font-size: 80%;"> (<a href="Half.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">15.4&nbsp;%</td>
<td class="headerCovTableEntry">13</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="headerCovTableEntryLo">25.0&nbsp;%</td>
<td class="headerCovTableEntry">4</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="Half.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="Half.h.gcov.html#L482">_ZN3c109overflowsIlNS_7complexIdEEEENSt9enable_ifIXsrNS_10is_complexIT0_EE5valueEbE4typeES5_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="Half.h.gcov.html#L439">_ZN3c109overflowsIlbEENSt9enable_ifIXsrSt7is_sameIT0_bE5valueEbE4typeES3_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="Half.h.gcov.html#L464">_ZN3c109overflowsIldEENSt9enable_ifIXsrSt17is_floating_pointIT0_E5valueEbE4typeES3_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="Half.h.gcov.html#L449">_ZN3c109overflowsIllEENSt9enable_ifIXaasrSt11is_integralIT0_E5valuentsrSt7is_sameIS3_bE5valueEbE4typeES3_</a></td>
<td class="coverFnHi">7072</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,582 @@
<!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/c10/util/Half.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/c10/util</a> - Half.h<span style="font-size: 80%;"> (source / <a href="Half.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="headerCovTableEntryLo">15.4&nbsp;%</td>
<td class="headerCovTableEntry">13</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="headerCovTableEntryLo">25.0&nbsp;%</td>
<td class="headerCovTableEntry">4</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> : /// Defines the Half type (half-precision floating-point) including conversions</span>
<span id="L4"><span class="lineNum"> 4</span> : /// to standard C types and basic arithmetic operations. Note that arithmetic</span>
<span id="L5"><span class="lineNum"> 5</span> : /// operations are implemented by converting to floating point and</span>
<span id="L6"><span class="lineNum"> 6</span> : /// performing the operation in float32, instead of using CUDA half intrinsics.</span>
<span id="L7"><span class="lineNum"> 7</span> : /// Most uses of this type within ATen are memory bound, including the</span>
<span id="L8"><span class="lineNum"> 8</span> : /// element-wise kernels, and the half intrinsics aren't efficient on all GPUs.</span>
<span id="L9"><span class="lineNum"> 9</span> : /// If you are writing a compute bound kernel, you can use the CUDA half</span>
<span id="L10"><span class="lineNum"> 10</span> : /// intrinsics directly on the Half type from device code.</span>
<span id="L11"><span class="lineNum"> 11</span> : </span>
<span id="L12"><span class="lineNum"> 12</span> : #include &lt;c10/macros/Macros.h&gt;</span>
<span id="L13"><span class="lineNum"> 13</span> : #include &lt;c10/util/C++17.h&gt;</span>
<span id="L14"><span class="lineNum"> 14</span> : #include &lt;c10/util/TypeSafeSignMath.h&gt;</span>
<span id="L15"><span class="lineNum"> 15</span> : #include &lt;c10/util/complex.h&gt;</span>
<span id="L16"><span class="lineNum"> 16</span> : #include &lt;c10/util/floating_point_utils.h&gt;</span>
<span id="L17"><span class="lineNum"> 17</span> : #include &lt;type_traits&gt;</span>
<span id="L18"><span class="lineNum"> 18</span> : </span>
<span id="L19"><span class="lineNum"> 19</span> : #if defined(__cplusplus) &amp;&amp; (__cplusplus &gt;= 201103L)</span>
<span id="L20"><span class="lineNum"> 20</span> : #include &lt;cmath&gt;</span>
<span id="L21"><span class="lineNum"> 21</span> : #include &lt;cstdint&gt;</span>
<span id="L22"><span class="lineNum"> 22</span> : #elif !defined(__OPENCL_VERSION__)</span>
<span id="L23"><span class="lineNum"> 23</span> : #include &lt;math.h&gt;</span>
<span id="L24"><span class="lineNum"> 24</span> : #include &lt;stdint.h&gt;</span>
<span id="L25"><span class="lineNum"> 25</span> : #endif</span>
<span id="L26"><span class="lineNum"> 26</span> : </span>
<span id="L27"><span class="lineNum"> 27</span> : #ifdef _MSC_VER</span>
<span id="L28"><span class="lineNum"> 28</span> : #include &lt;intrin.h&gt;</span>
<span id="L29"><span class="lineNum"> 29</span> : #endif</span>
<span id="L30"><span class="lineNum"> 30</span> : </span>
<span id="L31"><span class="lineNum"> 31</span> : #include &lt;complex&gt;</span>
<span id="L32"><span class="lineNum"> 32</span> : #include &lt;cstdint&gt;</span>
<span id="L33"><span class="lineNum"> 33</span> : #include &lt;cstring&gt;</span>
<span id="L34"><span class="lineNum"> 34</span> : #include &lt;iosfwd&gt;</span>
<span id="L35"><span class="lineNum"> 35</span> : #include &lt;limits&gt;</span>
<span id="L36"><span class="lineNum"> 36</span> : #include &lt;sstream&gt;</span>
<span id="L37"><span class="lineNum"> 37</span> : #include &lt;stdexcept&gt;</span>
<span id="L38"><span class="lineNum"> 38</span> : #include &lt;string&gt;</span>
<span id="L39"><span class="lineNum"> 39</span> : #include &lt;utility&gt;</span>
<span id="L40"><span class="lineNum"> 40</span> : </span>
<span id="L41"><span class="lineNum"> 41</span> : #ifdef __CUDACC__</span>
<span id="L42"><span class="lineNum"> 42</span> : #include &lt;cuda_fp16.h&gt;</span>
<span id="L43"><span class="lineNum"> 43</span> : #endif</span>
<span id="L44"><span class="lineNum"> 44</span> : </span>
<span id="L45"><span class="lineNum"> 45</span> : #ifdef __HIPCC__</span>
<span id="L46"><span class="lineNum"> 46</span> : #include &lt;hip/hip_fp16.h&gt;</span>
<span id="L47"><span class="lineNum"> 47</span> : #endif</span>
<span id="L48"><span class="lineNum"> 48</span> : </span>
<span id="L49"><span class="lineNum"> 49</span> : #if defined(CL_SYCL_LANGUAGE_VERSION)</span>
<span id="L50"><span class="lineNum"> 50</span> : #include &lt;CL/sycl.hpp&gt; // for SYCL 1.2.1</span>
<span id="L51"><span class="lineNum"> 51</span> : #elif defined(SYCL_LANGUAGE_VERSION)</span>
<span id="L52"><span class="lineNum"> 52</span> : #include &lt;sycl/sycl.hpp&gt; // for SYCL 2020</span>
<span id="L53"><span class="lineNum"> 53</span> : #endif</span>
<span id="L54"><span class="lineNum"> 54</span> : </span>
<span id="L55"><span class="lineNum"> 55</span> : #include &lt;typeinfo&gt; // operator typeid</span>
<span id="L56"><span class="lineNum"> 56</span> : </span>
<span id="L57"><span class="lineNum"> 57</span> : namespace c10 {</span>
<span id="L58"><span class="lineNum"> 58</span> : </span>
<span id="L59"><span class="lineNum"> 59</span> : namespace detail {</span>
<span id="L60"><span class="lineNum"> 60</span> : </span>
<span id="L61"><span class="lineNum"> 61</span> : /*</span>
<span id="L62"><span class="lineNum"> 62</span> : * Convert a 16-bit floating-point number in IEEE half-precision format, in bit</span>
<span id="L63"><span class="lineNum"> 63</span> : * representation, to a 32-bit floating-point number in IEEE single-precision</span>
<span id="L64"><span class="lineNum"> 64</span> : * format, in bit representation.</span>
<span id="L65"><span class="lineNum"> 65</span> : *</span>
<span id="L66"><span class="lineNum"> 66</span> : * @note The implementation doesn't use any floating-point operations.</span>
<span id="L67"><span class="lineNum"> 67</span> : */</span>
<span id="L68"><span class="lineNum"> 68</span> : inline uint32_t fp16_ieee_to_fp32_bits(uint16_t h) {</span>
<span id="L69"><span class="lineNum"> 69</span> : /*</span>
<span id="L70"><span class="lineNum"> 70</span> : * Extend the half-precision floating-point number to 32 bits and shift to the</span>
<span id="L71"><span class="lineNum"> 71</span> : * upper part of the 32-bit word:</span>
<span id="L72"><span class="lineNum"> 72</span> : * +---+-----+------------+-------------------+</span>
<span id="L73"><span class="lineNum"> 73</span> : * | S |EEEEE|MM MMMM MMMM|0000 0000 0000 0000|</span>
<span id="L74"><span class="lineNum"> 74</span> : * +---+-----+------------+-------------------+</span>
<span id="L75"><span class="lineNum"> 75</span> : * Bits 31 26-30 16-25 0-15</span>
<span id="L76"><span class="lineNum"> 76</span> : *</span>
<span id="L77"><span class="lineNum"> 77</span> : * S - sign bit, E - bits of the biased exponent, M - bits of the mantissa, 0</span>
<span id="L78"><span class="lineNum"> 78</span> : * - zero bits.</span>
<span id="L79"><span class="lineNum"> 79</span> : */</span>
<span id="L80"><span class="lineNum"> 80</span> : const uint32_t w = (uint32_t)h &lt;&lt; 16;</span>
<span id="L81"><span class="lineNum"> 81</span> : /*</span>
<span id="L82"><span class="lineNum"> 82</span> : * Extract the sign of the input number into the high bit of the 32-bit word:</span>
<span id="L83"><span class="lineNum"> 83</span> : *</span>
<span id="L84"><span class="lineNum"> 84</span> : * +---+----------------------------------+</span>
<span id="L85"><span class="lineNum"> 85</span> : * | S |0000000 00000000 00000000 00000000|</span>
<span id="L86"><span class="lineNum"> 86</span> : * +---+----------------------------------+</span>
<span id="L87"><span class="lineNum"> 87</span> : * Bits 31 0-31</span>
<span id="L88"><span class="lineNum"> 88</span> : */</span>
<span id="L89"><span class="lineNum"> 89</span> : const uint32_t sign = w &amp; UINT32_C(0x80000000);</span>
<span id="L90"><span class="lineNum"> 90</span> : /*</span>
<span id="L91"><span class="lineNum"> 91</span> : * Extract mantissa and biased exponent of the input number into the bits 0-30</span>
<span id="L92"><span class="lineNum"> 92</span> : * of the 32-bit word:</span>
<span id="L93"><span class="lineNum"> 93</span> : *</span>
<span id="L94"><span class="lineNum"> 94</span> : * +---+-----+------------+-------------------+</span>
<span id="L95"><span class="lineNum"> 95</span> : * | 0 |EEEEE|MM MMMM MMMM|0000 0000 0000 0000|</span>
<span id="L96"><span class="lineNum"> 96</span> : * +---+-----+------------+-------------------+</span>
<span id="L97"><span class="lineNum"> 97</span> : * Bits 30 27-31 17-26 0-16</span>
<span id="L98"><span class="lineNum"> 98</span> : */</span>
<span id="L99"><span class="lineNum"> 99</span> : const uint32_t nonsign = w &amp; UINT32_C(0x7FFFFFFF);</span>
<span id="L100"><span class="lineNum"> 100</span> : /*</span>
<span id="L101"><span class="lineNum"> 101</span> : * Renorm shift is the number of bits to shift mantissa left to make the</span>
<span id="L102"><span class="lineNum"> 102</span> : * half-precision number normalized. If the initial number is normalized, some</span>
<span id="L103"><span class="lineNum"> 103</span> : * of its high 6 bits (sign == 0 and 5-bit exponent) equals one. In this case</span>
<span id="L104"><span class="lineNum"> 104</span> : * renorm_shift == 0. If the number is denormalize, renorm_shift &gt; 0. Note</span>
<span id="L105"><span class="lineNum"> 105</span> : * that if we shift denormalized nonsign by renorm_shift, the unit bit of</span>
<span id="L106"><span class="lineNum"> 106</span> : * mantissa will shift into exponent, turning the biased exponent into 1, and</span>
<span id="L107"><span class="lineNum"> 107</span> : * making mantissa normalized (i.e. without leading 1).</span>
<span id="L108"><span class="lineNum"> 108</span> : */</span>
<span id="L109"><span class="lineNum"> 109</span> : #ifdef _MSC_VER</span>
<span id="L110"><span class="lineNum"> 110</span> : unsigned long nonsign_bsr;</span>
<span id="L111"><span class="lineNum"> 111</span> : _BitScanReverse(&amp;nonsign_bsr, (unsigned long)nonsign);</span>
<span id="L112"><span class="lineNum"> 112</span> : uint32_t renorm_shift = (uint32_t)nonsign_bsr ^ 31;</span>
<span id="L113"><span class="lineNum"> 113</span> : #else</span>
<span id="L114"><span class="lineNum"> 114</span> : uint32_t renorm_shift = __builtin_clz(nonsign);</span>
<span id="L115"><span class="lineNum"> 115</span> : #endif</span>
<span id="L116"><span class="lineNum"> 116</span> : renorm_shift = renorm_shift &gt; 5 ? renorm_shift - 5 : 0;</span>
<span id="L117"><span class="lineNum"> 117</span> : /*</span>
<span id="L118"><span class="lineNum"> 118</span> : * Iff half-precision number has exponent of 15, the addition overflows</span>
<span id="L119"><span class="lineNum"> 119</span> : * it into bit 31, and the subsequent shift turns the high 9 bits</span>
<span id="L120"><span class="lineNum"> 120</span> : * into 1. Thus inf_nan_mask == 0x7F800000 if the half-precision number</span>
<span id="L121"><span class="lineNum"> 121</span> : * had exponent of 15 (i.e. was NaN or infinity) 0x00000000 otherwise</span>
<span id="L122"><span class="lineNum"> 122</span> : */</span>
<span id="L123"><span class="lineNum"> 123</span> : const int32_t inf_nan_mask =</span>
<span id="L124"><span class="lineNum"> 124</span> : ((int32_t)(nonsign + 0x04000000) &gt;&gt; 8) &amp; INT32_C(0x7F800000);</span>
<span id="L125"><span class="lineNum"> 125</span> : /*</span>
<span id="L126"><span class="lineNum"> 126</span> : * Iff nonsign is 0, it overflows into 0xFFFFFFFF, turning bit 31</span>
<span id="L127"><span class="lineNum"> 127</span> : * into 1. Otherwise, bit 31 remains 0. The signed shift right by 31</span>
<span id="L128"><span class="lineNum"> 128</span> : * broadcasts bit 31 into all bits of the zero_mask. Thus zero_mask ==</span>
<span id="L129"><span class="lineNum"> 129</span> : * 0xFFFFFFFF if the half-precision number was zero (+0.0h or -0.0h)</span>
<span id="L130"><span class="lineNum"> 130</span> : * 0x00000000 otherwise</span>
<span id="L131"><span class="lineNum"> 131</span> : */</span>
<span id="L132"><span class="lineNum"> 132</span> : const int32_t zero_mask = (int32_t)(nonsign - 1) &gt;&gt; 31;</span>
<span id="L133"><span class="lineNum"> 133</span> : /*</span>
<span id="L134"><span class="lineNum"> 134</span> : * 1. Shift nonsign left by renorm_shift to normalize it (if the input</span>
<span id="L135"><span class="lineNum"> 135</span> : * was denormal)</span>
<span id="L136"><span class="lineNum"> 136</span> : * 2. Shift nonsign right by 3 so the exponent (5 bits originally)</span>
<span id="L137"><span class="lineNum"> 137</span> : * becomes an 8-bit field and 10-bit mantissa shifts into the 10 high</span>
<span id="L138"><span class="lineNum"> 138</span> : * bits of the 23-bit mantissa of IEEE single-precision number.</span>
<span id="L139"><span class="lineNum"> 139</span> : * 3. Add 0x70 to the exponent (starting at bit 23) to compensate the</span>
<span id="L140"><span class="lineNum"> 140</span> : * different in exponent bias (0x7F for single-precision number less 0xF</span>
<span id="L141"><span class="lineNum"> 141</span> : * for half-precision number).</span>
<span id="L142"><span class="lineNum"> 142</span> : * 4. Subtract renorm_shift from the exponent (starting at bit 23) to</span>
<span id="L143"><span class="lineNum"> 143</span> : * account for renormalization. As renorm_shift is less than 0x70, this</span>
<span id="L144"><span class="lineNum"> 144</span> : * can be combined with step 3.</span>
<span id="L145"><span class="lineNum"> 145</span> : * 5. Binary OR with inf_nan_mask to turn the exponent into 0xFF if the</span>
<span id="L146"><span class="lineNum"> 146</span> : * input was NaN or infinity.</span>
<span id="L147"><span class="lineNum"> 147</span> : * 6. Binary ANDNOT with zero_mask to turn the mantissa and exponent</span>
<span id="L148"><span class="lineNum"> 148</span> : * into zero if the input was zero.</span>
<span id="L149"><span class="lineNum"> 149</span> : * 7. Combine with the sign of the input number.</span>
<span id="L150"><span class="lineNum"> 150</span> : */</span>
<span id="L151"><span class="lineNum"> 151</span> : return sign |</span>
<span id="L152"><span class="lineNum"> 152</span> : ((((nonsign &lt;&lt; renorm_shift &gt;&gt; 3) + ((0x70 - renorm_shift) &lt;&lt; 23)) |</span>
<span id="L153"><span class="lineNum"> 153</span> : inf_nan_mask) &amp;</span>
<span id="L154"><span class="lineNum"> 154</span> : ~zero_mask);</span>
<span id="L155"><span class="lineNum"> 155</span> : }</span>
<span id="L156"><span class="lineNum"> 156</span> : </span>
<span id="L157"><span class="lineNum"> 157</span> : /*</span>
<span id="L158"><span class="lineNum"> 158</span> : * Convert a 16-bit floating-point number in IEEE half-precision format, in bit</span>
<span id="L159"><span class="lineNum"> 159</span> : * representation, to a 32-bit floating-point number in IEEE single-precision</span>
<span id="L160"><span class="lineNum"> 160</span> : * format.</span>
<span id="L161"><span class="lineNum"> 161</span> : *</span>
<span id="L162"><span class="lineNum"> 162</span> : * @note The implementation relies on IEEE-like (no assumption about rounding</span>
<span id="L163"><span class="lineNum"> 163</span> : * mode and no operations on denormals) floating-point operations and bitcasts</span>
<span id="L164"><span class="lineNum"> 164</span> : * between integer and floating-point variables.</span>
<span id="L165"><span class="lineNum"> 165</span> : */</span>
<span id="L166"><span class="lineNum"> 166</span> : C10_HOST_DEVICE inline float fp16_ieee_to_fp32_value(uint16_t h) {</span>
<span id="L167"><span class="lineNum"> 167</span> : /*</span>
<span id="L168"><span class="lineNum"> 168</span> : * Extend the half-precision floating-point number to 32 bits and shift to the</span>
<span id="L169"><span class="lineNum"> 169</span> : * upper part of the 32-bit word:</span>
<span id="L170"><span class="lineNum"> 170</span> : * +---+-----+------------+-------------------+</span>
<span id="L171"><span class="lineNum"> 171</span> : * | S |EEEEE|MM MMMM MMMM|0000 0000 0000 0000|</span>
<span id="L172"><span class="lineNum"> 172</span> : * +---+-----+------------+-------------------+</span>
<span id="L173"><span class="lineNum"> 173</span> : * Bits 31 26-30 16-25 0-15</span>
<span id="L174"><span class="lineNum"> 174</span> : *</span>
<span id="L175"><span class="lineNum"> 175</span> : * S - sign bit, E - bits of the biased exponent, M - bits of the mantissa, 0</span>
<span id="L176"><span class="lineNum"> 176</span> : * - zero bits.</span>
<span id="L177"><span class="lineNum"> 177</span> : */</span>
<span id="L178"><span class="lineNum"> 178</span> : const uint32_t w = (uint32_t)h &lt;&lt; 16;</span>
<span id="L179"><span class="lineNum"> 179</span> : /*</span>
<span id="L180"><span class="lineNum"> 180</span> : * Extract the sign of the input number into the high bit of the 32-bit word:</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> : * | S |0000000 00000000 00000000 00000000|</span>
<span id="L184"><span class="lineNum"> 184</span> : * +---+----------------------------------+</span>
<span id="L185"><span class="lineNum"> 185</span> : * Bits 31 0-31</span>
<span id="L186"><span class="lineNum"> 186</span> : */</span>
<span id="L187"><span class="lineNum"> 187</span> : const uint32_t sign = w &amp; UINT32_C(0x80000000);</span>
<span id="L188"><span class="lineNum"> 188</span> : /*</span>
<span id="L189"><span class="lineNum"> 189</span> : * Extract mantissa and biased exponent of the input number into the high bits</span>
<span id="L190"><span class="lineNum"> 190</span> : * of the 32-bit word:</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> : * |EEEEE|MM MMMM MMMM|0 0000 0000 0000 0000|</span>
<span id="L194"><span class="lineNum"> 194</span> : * +-----+------------+---------------------+</span>
<span id="L195"><span class="lineNum"> 195</span> : * Bits 27-31 17-26 0-16</span>
<span id="L196"><span class="lineNum"> 196</span> : */</span>
<span id="L197"><span class="lineNum"> 197</span> : const uint32_t two_w = w + w;</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> : * Shift mantissa and exponent into bits 23-28 and bits 13-22 so they become</span>
<span id="L201"><span class="lineNum"> 201</span> : * mantissa and exponent of a single-precision floating-point number:</span>
<span id="L202"><span class="lineNum"> 202</span> : *</span>
<span id="L203"><span class="lineNum"> 203</span> : * S|Exponent | Mantissa</span>
<span id="L204"><span class="lineNum"> 204</span> : * +-+---+-----+------------+----------------+</span>
<span id="L205"><span class="lineNum"> 205</span> : * |0|000|EEEEE|MM MMMM MMMM|0 0000 0000 0000|</span>
<span id="L206"><span class="lineNum"> 206</span> : * +-+---+-----+------------+----------------+</span>
<span id="L207"><span class="lineNum"> 207</span> : * Bits | 23-31 | 0-22</span>
<span id="L208"><span class="lineNum"> 208</span> : *</span>
<span id="L209"><span class="lineNum"> 209</span> : * Next, there are some adjustments to the exponent:</span>
<span id="L210"><span class="lineNum"> 210</span> : * - The exponent needs to be corrected by the difference in exponent bias</span>
<span id="L211"><span class="lineNum"> 211</span> : * between single-precision and half-precision formats (0x7F - 0xF = 0x70)</span>
<span id="L212"><span class="lineNum"> 212</span> : * - Inf and NaN values in the inputs should become Inf and NaN values after</span>
<span id="L213"><span class="lineNum"> 213</span> : * conversion to the single-precision number. Therefore, if the biased</span>
<span id="L214"><span class="lineNum"> 214</span> : * exponent of the half-precision input was 0x1F (max possible value), the</span>
<span id="L215"><span class="lineNum"> 215</span> : * biased exponent of the single-precision output must be 0xFF (max possible</span>
<span id="L216"><span class="lineNum"> 216</span> : * value). We do this correction in two steps:</span>
<span id="L217"><span class="lineNum"> 217</span> : * - First, we adjust the exponent by (0xFF - 0x1F) = 0xE0 (see exp_offset</span>
<span id="L218"><span class="lineNum"> 218</span> : * below) rather than by 0x70 suggested by the difference in the exponent bias</span>
<span id="L219"><span class="lineNum"> 219</span> : * (see above).</span>
<span id="L220"><span class="lineNum"> 220</span> : * - Then we multiply the single-precision result of exponent adjustment by</span>
<span id="L221"><span class="lineNum"> 221</span> : * 2**(-112) to reverse the effect of exponent adjustment by 0xE0 less the</span>
<span id="L222"><span class="lineNum"> 222</span> : * necessary exponent adjustment by 0x70 due to difference in exponent bias.</span>
<span id="L223"><span class="lineNum"> 223</span> : * The floating-point multiplication hardware would ensure than Inf and</span>
<span id="L224"><span class="lineNum"> 224</span> : * NaN would retain their value on at least partially IEEE754-compliant</span>
<span id="L225"><span class="lineNum"> 225</span> : * implementations.</span>
<span id="L226"><span class="lineNum"> 226</span> : *</span>
<span id="L227"><span class="lineNum"> 227</span> : * Note that the above operations do not handle denormal inputs (where biased</span>
<span id="L228"><span class="lineNum"> 228</span> : * exponent == 0). However, they also do not operate on denormal inputs, and</span>
<span id="L229"><span class="lineNum"> 229</span> : * do not produce denormal results.</span>
<span id="L230"><span class="lineNum"> 230</span> : */</span>
<span id="L231"><span class="lineNum"> 231</span> : constexpr uint32_t exp_offset = UINT32_C(0xE0) &lt;&lt; 23;</span>
<span id="L232"><span class="lineNum"> 232</span> : // const float exp_scale = 0x1.0p-112f;</span>
<span id="L233"><span class="lineNum"> 233</span> : constexpr uint32_t scale_bits = (uint32_t)15 &lt;&lt; 23;</span>
<span id="L234"><span class="lineNum"> 234</span> : float exp_scale_val;</span>
<span id="L235"><span class="lineNum"> 235</span> : std::memcpy(&amp;exp_scale_val, &amp;scale_bits, sizeof(exp_scale_val));</span>
<span id="L236"><span class="lineNum"> 236</span> : const float exp_scale = exp_scale_val;</span>
<span id="L237"><span class="lineNum"> 237</span> : const float normalized_value =</span>
<span id="L238"><span class="lineNum"> 238</span> : fp32_from_bits((two_w &gt;&gt; 4) + exp_offset) * exp_scale;</span>
<span id="L239"><span class="lineNum"> 239</span> : </span>
<span id="L240"><span class="lineNum"> 240</span> : /*</span>
<span id="L241"><span class="lineNum"> 241</span> : * Convert denormalized half-precision inputs into single-precision results</span>
<span id="L242"><span class="lineNum"> 242</span> : * (always normalized). Zero inputs are also handled here.</span>
<span id="L243"><span class="lineNum"> 243</span> : *</span>
<span id="L244"><span class="lineNum"> 244</span> : * In a denormalized number the biased exponent is zero, and mantissa has</span>
<span id="L245"><span class="lineNum"> 245</span> : * on-zero bits. First, we shift mantissa into bits 0-9 of the 32-bit word.</span>
<span id="L246"><span class="lineNum"> 246</span> : *</span>
<span id="L247"><span class="lineNum"> 247</span> : * zeros | mantissa</span>
<span id="L248"><span class="lineNum"> 248</span> : * +---------------------------+------------+</span>
<span id="L249"><span class="lineNum"> 249</span> : * |0000 0000 0000 0000 0000 00|MM MMMM MMMM|</span>
<span id="L250"><span class="lineNum"> 250</span> : * +---------------------------+------------+</span>
<span id="L251"><span class="lineNum"> 251</span> : * Bits 10-31 0-9</span>
<span id="L252"><span class="lineNum"> 252</span> : *</span>
<span id="L253"><span class="lineNum"> 253</span> : * Now, remember that denormalized half-precision numbers are represented as:</span>
<span id="L254"><span class="lineNum"> 254</span> : * FP16 = mantissa * 2**(-24).</span>
<span id="L255"><span class="lineNum"> 255</span> : * The trick is to construct a normalized single-precision number with the</span>
<span id="L256"><span class="lineNum"> 256</span> : * same mantissa and thehalf-precision input and with an exponent which would</span>
<span id="L257"><span class="lineNum"> 257</span> : * scale the corresponding mantissa bits to 2**(-24). A normalized</span>
<span id="L258"><span class="lineNum"> 258</span> : * single-precision floating-point number is represented as: FP32 = (1 +</span>
<span id="L259"><span class="lineNum"> 259</span> : * mantissa * 2**(-23)) * 2**(exponent - 127) Therefore, when the biased</span>
<span id="L260"><span class="lineNum"> 260</span> : * exponent is 126, a unit change in the mantissa of the input denormalized</span>
<span id="L261"><span class="lineNum"> 261</span> : * half-precision number causes a change of the constructed single-precision</span>
<span id="L262"><span class="lineNum"> 262</span> : * number by 2**(-24), i.e. the same amount.</span>
<span id="L263"><span class="lineNum"> 263</span> : *</span>
<span id="L264"><span class="lineNum"> 264</span> : * The last step is to adjust the bias of the constructed single-precision</span>
<span id="L265"><span class="lineNum"> 265</span> : * number. When the input half-precision number is zero, the constructed</span>
<span id="L266"><span class="lineNum"> 266</span> : * single-precision number has the value of FP32 = 1 * 2**(126 - 127) =</span>
<span id="L267"><span class="lineNum"> 267</span> : * 2**(-1) = 0.5 Therefore, we need to subtract 0.5 from the constructed</span>
<span id="L268"><span class="lineNum"> 268</span> : * single-precision number to get the numerical equivalent of the input</span>
<span id="L269"><span class="lineNum"> 269</span> : * half-precision number.</span>
<span id="L270"><span class="lineNum"> 270</span> : */</span>
<span id="L271"><span class="lineNum"> 271</span> : constexpr uint32_t magic_mask = UINT32_C(126) &lt;&lt; 23;</span>
<span id="L272"><span class="lineNum"> 272</span> : constexpr float magic_bias = 0.5f;</span>
<span id="L273"><span class="lineNum"> 273</span> : const float denormalized_value =</span>
<span id="L274"><span class="lineNum"> 274</span> : fp32_from_bits((two_w &gt;&gt; 17) | magic_mask) - magic_bias;</span>
<span id="L275"><span class="lineNum"> 275</span> : </span>
<span id="L276"><span class="lineNum"> 276</span> : /*</span>
<span id="L277"><span class="lineNum"> 277</span> : * - Choose either results of conversion of input as a normalized number, or</span>
<span id="L278"><span class="lineNum"> 278</span> : * as a denormalized number, depending on the input exponent. The variable</span>
<span id="L279"><span class="lineNum"> 279</span> : * two_w contains input exponent in bits 27-31, therefore if its smaller than</span>
<span id="L280"><span class="lineNum"> 280</span> : * 2**27, the input is either a denormal number, or zero.</span>
<span id="L281"><span class="lineNum"> 281</span> : * - Combine the result of conversion of exponent and mantissa with the sign</span>
<span id="L282"><span class="lineNum"> 282</span> : * of the input number.</span>
<span id="L283"><span class="lineNum"> 283</span> : */</span>
<span id="L284"><span class="lineNum"> 284</span> : constexpr uint32_t denormalized_cutoff = UINT32_C(1) &lt;&lt; 27;</span>
<span id="L285"><span class="lineNum"> 285</span> : const uint32_t result = sign |</span>
<span id="L286"><span class="lineNum"> 286</span> : (two_w &lt; denormalized_cutoff ? fp32_to_bits(denormalized_value)</span>
<span id="L287"><span class="lineNum"> 287</span> : : fp32_to_bits(normalized_value));</span>
<span id="L288"><span class="lineNum"> 288</span> : return fp32_from_bits(result);</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> : /*</span>
<span id="L292"><span class="lineNum"> 292</span> : * Convert a 32-bit floating-point number in IEEE single-precision format to a</span>
<span id="L293"><span class="lineNum"> 293</span> : * 16-bit floating-point number in IEEE half-precision format, in bit</span>
<span id="L294"><span class="lineNum"> 294</span> : * representation.</span>
<span id="L295"><span class="lineNum"> 295</span> : *</span>
<span id="L296"><span class="lineNum"> 296</span> : * @note The implementation relies on IEEE-like (no assumption about rounding</span>
<span id="L297"><span class="lineNum"> 297</span> : * mode and no operations on denormals) floating-point operations and bitcasts</span>
<span id="L298"><span class="lineNum"> 298</span> : * between integer and floating-point variables.</span>
<span id="L299"><span class="lineNum"> 299</span> : */</span>
<span id="L300"><span class="lineNum"> 300</span> : inline uint16_t fp16_ieee_from_fp32_value(float f) {</span>
<span id="L301"><span class="lineNum"> 301</span> : // const float scale_to_inf = 0x1.0p+112f;</span>
<span id="L302"><span class="lineNum"> 302</span> : // const float scale_to_zero = 0x1.0p-110f;</span>
<span id="L303"><span class="lineNum"> 303</span> : constexpr uint32_t scale_to_inf_bits = (uint32_t)239 &lt;&lt; 23;</span>
<span id="L304"><span class="lineNum"> 304</span> : constexpr uint32_t scale_to_zero_bits = (uint32_t)17 &lt;&lt; 23;</span>
<span id="L305"><span class="lineNum"> 305</span> : float scale_to_inf_val, scale_to_zero_val;</span>
<span id="L306"><span class="lineNum"> 306</span> : std::memcpy(&amp;scale_to_inf_val, &amp;scale_to_inf_bits, sizeof(scale_to_inf_val));</span>
<span id="L307"><span class="lineNum"> 307</span> : std::memcpy(</span>
<span id="L308"><span class="lineNum"> 308</span> : &amp;scale_to_zero_val, &amp;scale_to_zero_bits, sizeof(scale_to_zero_val));</span>
<span id="L309"><span class="lineNum"> 309</span> : const float scale_to_inf = scale_to_inf_val;</span>
<span id="L310"><span class="lineNum"> 310</span> : const float scale_to_zero = scale_to_zero_val;</span>
<span id="L311"><span class="lineNum"> 311</span> : </span>
<span id="L312"><span class="lineNum"> 312</span> : #if defined(_MSC_VER) &amp;&amp; _MSC_VER == 1916</span>
<span id="L313"><span class="lineNum"> 313</span> : float base = ((signbit(f) != 0 ? -f : f) * scale_to_inf) * scale_to_zero;</span>
<span id="L314"><span class="lineNum"> 314</span> : #else</span>
<span id="L315"><span class="lineNum"> 315</span> : float base = (fabsf(f) * scale_to_inf) * scale_to_zero;</span>
<span id="L316"><span class="lineNum"> 316</span> : #endif</span>
<span id="L317"><span class="lineNum"> 317</span> : </span>
<span id="L318"><span class="lineNum"> 318</span> : const uint32_t w = fp32_to_bits(f);</span>
<span id="L319"><span class="lineNum"> 319</span> : const uint32_t shl1_w = w + w;</span>
<span id="L320"><span class="lineNum"> 320</span> : const uint32_t sign = w &amp; UINT32_C(0x80000000);</span>
<span id="L321"><span class="lineNum"> 321</span> : uint32_t bias = shl1_w &amp; UINT32_C(0xFF000000);</span>
<span id="L322"><span class="lineNum"> 322</span> : if (bias &lt; UINT32_C(0x71000000)) {</span>
<span id="L323"><span class="lineNum"> 323</span> : bias = UINT32_C(0x71000000);</span>
<span id="L324"><span class="lineNum"> 324</span> : }</span>
<span id="L325"><span class="lineNum"> 325</span> : </span>
<span id="L326"><span class="lineNum"> 326</span> : base = fp32_from_bits((bias &gt;&gt; 1) + UINT32_C(0x07800000)) + base;</span>
<span id="L327"><span class="lineNum"> 327</span> : const uint32_t bits = fp32_to_bits(base);</span>
<span id="L328"><span class="lineNum"> 328</span> : const uint32_t exp_bits = (bits &gt;&gt; 13) &amp; UINT32_C(0x00007C00);</span>
<span id="L329"><span class="lineNum"> 329</span> : const uint32_t mantissa_bits = bits &amp; UINT32_C(0x00000FFF);</span>
<span id="L330"><span class="lineNum"> 330</span> : const uint32_t nonsign = exp_bits + mantissa_bits;</span>
<span id="L331"><span class="lineNum"> 331</span> : return static_cast&lt;uint16_t&gt;(</span>
<span id="L332"><span class="lineNum"> 332</span> : (sign &gt;&gt; 16) |</span>
<span id="L333"><span class="lineNum"> 333</span> : (shl1_w &gt; UINT32_C(0xFF000000) ? UINT16_C(0x7E00) : nonsign));</span>
<span id="L334"><span class="lineNum"> 334</span> : }</span>
<span id="L335"><span class="lineNum"> 335</span> : </span>
<span id="L336"><span class="lineNum"> 336</span> : } // namespace detail</span>
<span id="L337"><span class="lineNum"> 337</span> : </span>
<span id="L338"><span class="lineNum"> 338</span> : struct alignas(2) Half {</span>
<span id="L339"><span class="lineNum"> 339</span> : unsigned short x;</span>
<span id="L340"><span class="lineNum"> 340</span> : </span>
<span id="L341"><span class="lineNum"> 341</span> : struct from_bits_t {};</span>
<span id="L342"><span class="lineNum"> 342</span> : C10_HOST_DEVICE static constexpr from_bits_t from_bits() {</span>
<span id="L343"><span class="lineNum"> 343</span> : return from_bits_t();</span>
<span id="L344"><span class="lineNum"> 344</span> : }</span>
<span id="L345"><span class="lineNum"> 345</span> : </span>
<span id="L346"><span class="lineNum"> 346</span> : // HIP wants __host__ __device__ tag, CUDA does not</span>
<span id="L347"><span class="lineNum"> 347</span> : #if defined(USE_ROCM)</span>
<span id="L348"><span class="lineNum"> 348</span> : C10_HOST_DEVICE Half() = default;</span>
<span id="L349"><span class="lineNum"> 349</span> : #else</span>
<span id="L350"><span class="lineNum"> 350</span> : Half() = default;</span>
<span id="L351"><span class="lineNum"> 351</span> : #endif</span>
<span id="L352"><span class="lineNum"> 352</span> : </span>
<span id="L353"><span class="lineNum"> 353</span> : constexpr C10_HOST_DEVICE Half(unsigned short bits, from_bits_t) : x(bits){};</span>
<span id="L354"><span class="lineNum"> 354</span> : inline C10_HOST_DEVICE Half(float value);</span>
<span id="L355"><span class="lineNum"> 355</span> : inline C10_HOST_DEVICE operator float() const;</span>
<span id="L356"><span class="lineNum"> 356</span> : </span>
<span id="L357"><span class="lineNum"> 357</span> : #if defined(__CUDACC__) || defined(__HIPCC__)</span>
<span id="L358"><span class="lineNum"> 358</span> : inline C10_HOST_DEVICE Half(const __half&amp; value);</span>
<span id="L359"><span class="lineNum"> 359</span> : inline C10_HOST_DEVICE operator __half() const;</span>
<span id="L360"><span class="lineNum"> 360</span> : #endif</span>
<span id="L361"><span class="lineNum"> 361</span> : #ifdef SYCL_LANGUAGE_VERSION</span>
<span id="L362"><span class="lineNum"> 362</span> : inline C10_HOST_DEVICE Half(const sycl::half&amp; value);</span>
<span id="L363"><span class="lineNum"> 363</span> : inline C10_HOST_DEVICE operator sycl::half() const;</span>
<span id="L364"><span class="lineNum"> 364</span> : #endif</span>
<span id="L365"><span class="lineNum"> 365</span> : };</span>
<span id="L366"><span class="lineNum"> 366</span> : </span>
<span id="L367"><span class="lineNum"> 367</span> : // TODO : move to complex.h</span>
<span id="L368"><span class="lineNum"> 368</span> : template &lt;&gt;</span>
<span id="L369"><span class="lineNum"> 369</span> : struct alignas(4) complex&lt;Half&gt; {</span>
<span id="L370"><span class="lineNum"> 370</span> : Half real_;</span>
<span id="L371"><span class="lineNum"> 371</span> : Half imag_;</span>
<span id="L372"><span class="lineNum"> 372</span> : </span>
<span id="L373"><span class="lineNum"> 373</span> : // Constructors</span>
<span id="L374"><span class="lineNum"> 374</span> : complex() = default;</span>
<span id="L375"><span class="lineNum"> 375</span> : // Half constructor is not constexpr so the following constructor can't</span>
<span id="L376"><span class="lineNum"> 376</span> : // be constexpr</span>
<span id="L377"><span class="lineNum"> 377</span> : C10_HOST_DEVICE explicit inline complex(const Half&amp; real, const Half&amp; imag)</span>
<span id="L378"><span class="lineNum"> 378</span> : : real_(real), imag_(imag) {}</span>
<span id="L379"><span class="lineNum"> 379</span> : C10_HOST_DEVICE inline complex(const c10::complex&lt;float&gt;&amp; value)</span>
<span id="L380"><span class="lineNum"> 380</span> : : real_(value.real()), imag_(value.imag()) {}</span>
<span id="L381"><span class="lineNum"> 381</span> : </span>
<span id="L382"><span class="lineNum"> 382</span> : // Conversion operator</span>
<span id="L383"><span class="lineNum"> 383</span> : inline C10_HOST_DEVICE operator c10::complex&lt;float&gt;() const {</span>
<span id="L384"><span class="lineNum"> 384</span> : return {real_, imag_};</span>
<span id="L385"><span class="lineNum"> 385</span> : }</span>
<span id="L386"><span class="lineNum"> 386</span> : </span>
<span id="L387"><span class="lineNum"> 387</span> : constexpr C10_HOST_DEVICE Half real() const {</span>
<span id="L388"><span class="lineNum"> 388</span> : return real_;</span>
<span id="L389"><span class="lineNum"> 389</span> : }</span>
<span id="L390"><span class="lineNum"> 390</span> : constexpr C10_HOST_DEVICE Half imag() const {</span>
<span id="L391"><span class="lineNum"> 391</span> : return imag_;</span>
<span id="L392"><span class="lineNum"> 392</span> : }</span>
<span id="L393"><span class="lineNum"> 393</span> : </span>
<span id="L394"><span class="lineNum"> 394</span> : C10_HOST_DEVICE complex&lt;Half&gt;&amp; operator+=(const complex&lt;Half&gt;&amp; other) {</span>
<span id="L395"><span class="lineNum"> 395</span> : real_ = static_cast&lt;float&gt;(real_) + static_cast&lt;float&gt;(other.real_);</span>
<span id="L396"><span class="lineNum"> 396</span> : imag_ = static_cast&lt;float&gt;(imag_) + static_cast&lt;float&gt;(other.imag_);</span>
<span id="L397"><span class="lineNum"> 397</span> : return *this;</span>
<span id="L398"><span class="lineNum"> 398</span> : }</span>
<span id="L399"><span class="lineNum"> 399</span> : </span>
<span id="L400"><span class="lineNum"> 400</span> : C10_HOST_DEVICE complex&lt;Half&gt;&amp; operator-=(const complex&lt;Half&gt;&amp; other) {</span>
<span id="L401"><span class="lineNum"> 401</span> : real_ = static_cast&lt;float&gt;(real_) - static_cast&lt;float&gt;(other.real_);</span>
<span id="L402"><span class="lineNum"> 402</span> : imag_ = static_cast&lt;float&gt;(imag_) - static_cast&lt;float&gt;(other.imag_);</span>
<span id="L403"><span class="lineNum"> 403</span> : return *this;</span>
<span id="L404"><span class="lineNum"> 404</span> : }</span>
<span id="L405"><span class="lineNum"> 405</span> : </span>
<span id="L406"><span class="lineNum"> 406</span> : C10_HOST_DEVICE complex&lt;Half&gt;&amp; operator*=(const complex&lt;Half&gt;&amp; other) {</span>
<span id="L407"><span class="lineNum"> 407</span> : auto a = static_cast&lt;float&gt;(real_);</span>
<span id="L408"><span class="lineNum"> 408</span> : auto b = static_cast&lt;float&gt;(imag_);</span>
<span id="L409"><span class="lineNum"> 409</span> : auto c = static_cast&lt;float&gt;(other.real());</span>
<span id="L410"><span class="lineNum"> 410</span> : auto d = static_cast&lt;float&gt;(other.imag());</span>
<span id="L411"><span class="lineNum"> 411</span> : real_ = a * c - b * d;</span>
<span id="L412"><span class="lineNum"> 412</span> : imag_ = a * d + b * c;</span>
<span id="L413"><span class="lineNum"> 413</span> : return *this;</span>
<span id="L414"><span class="lineNum"> 414</span> : }</span>
<span id="L415"><span class="lineNum"> 415</span> : };</span>
<span id="L416"><span class="lineNum"> 416</span> : </span>
<span id="L417"><span class="lineNum"> 417</span> : // In some versions of MSVC, there will be a compiler error when building.</span>
<span id="L418"><span class="lineNum"> 418</span> : // C4146: unary minus operator applied to unsigned type, result still unsigned</span>
<span id="L419"><span class="lineNum"> 419</span> : // C4804: unsafe use of type 'bool' in operation</span>
<span id="L420"><span class="lineNum"> 420</span> : // It can be addressed by disabling the following warning.</span>
<span id="L421"><span class="lineNum"> 421</span> : #ifdef _MSC_VER</span>
<span id="L422"><span class="lineNum"> 422</span> : #pragma warning(push)</span>
<span id="L423"><span class="lineNum"> 423</span> : #pragma warning(disable : 4146)</span>
<span id="L424"><span class="lineNum"> 424</span> : #pragma warning(disable : 4804)</span>
<span id="L425"><span class="lineNum"> 425</span> : #pragma warning(disable : 4018)</span>
<span id="L426"><span class="lineNum"> 426</span> : #endif</span>
<span id="L427"><span class="lineNum"> 427</span> : </span>
<span id="L428"><span class="lineNum"> 428</span> : // The overflow checks may involve float to int conversion which may</span>
<span id="L429"><span class="lineNum"> 429</span> : // trigger precision loss warning. Re-enable the warning once the code</span>
<span id="L430"><span class="lineNum"> 430</span> : // is fixed. See T58053069.</span>
<span id="L431"><span class="lineNum"> 431</span> : C10_CLANG_DIAGNOSTIC_PUSH()</span>
<span id="L432"><span class="lineNum"> 432</span> : #if C10_CLANG_HAS_WARNING(&quot;-Wimplicit-float-conversion&quot;)</span>
<span id="L433"><span class="lineNum"> 433</span> : C10_CLANG_DIAGNOSTIC_IGNORE(&quot;-Wimplicit-float-conversion&quot;)</span>
<span id="L434"><span class="lineNum"> 434</span> : #endif</span>
<span id="L435"><span class="lineNum"> 435</span> : </span>
<span id="L436"><span class="lineNum"> 436</span> : // bool can be converted to any type.</span>
<span id="L437"><span class="lineNum"> 437</span> : // Without specializing on bool, in pytorch_linux_trusty_py2_7_9_build:</span>
<span id="L438"><span class="lineNum"> 438</span> : // `error: comparison of constant '255' with boolean expression is always false`</span>
<span id="L439"><span class="lineNum"> 439</span> : // for `f &gt; limit::max()` below</span>
<span id="L440"><span class="lineNum"> 440</span> : template &lt;typename To, typename From&gt;</span>
<span id="L441"><span class="lineNum"> 441</span> <span class="tlaUNC tlaBgUNC"> 0 : typename std::enable_if&lt;std::is_same&lt;From, bool&gt;::value, bool&gt;::type overflows(</span></span>
<span id="L442"><span class="lineNum"> 442</span> : From /*f*/) {</span>
<span id="L443"><span class="lineNum"> 443</span> <span class="tlaUNC"> 0 : return false;</span></span>
<span id="L444"><span class="lineNum"> 444</span> : }</span>
<span id="L445"><span class="lineNum"> 445</span> : </span>
<span id="L446"><span class="lineNum"> 446</span> : // skip isnan and isinf check for integral types</span>
<span id="L447"><span class="lineNum"> 447</span> : template &lt;typename To, typename From&gt;</span>
<span id="L448"><span class="lineNum"> 448</span> : typename std::enable_if&lt;</span>
<span id="L449"><span class="lineNum"> 449</span> : std::is_integral&lt;From&gt;::value &amp;&amp; !std::is_same&lt;From, bool&gt;::value,</span>
<span id="L450"><span class="lineNum"> 450</span> : bool&gt;::type</span>
<span id="L451"><span class="lineNum"> 451</span> <span class="tlaGNC tlaBgGNC"> 7072 : overflows(From f) {</span></span>
<span id="L452"><span class="lineNum"> 452</span> : using limit = std::numeric_limits&lt;typename scalar_value_type&lt;To&gt;::type&gt;;</span>
<span id="L453"><span class="lineNum"> 453</span> : if (!limit::is_signed &amp;&amp; std::numeric_limits&lt;From&gt;::is_signed) {</span>
<span id="L454"><span class="lineNum"> 454</span> : // allow for negative numbers to wrap using two's complement arithmetic.</span>
<span id="L455"><span class="lineNum"> 455</span> : // For example, with uint8, this allows for `a - b` to be treated as</span>
<span id="L456"><span class="lineNum"> 456</span> : // `a + 255 * b`.</span>
<span id="L457"><span class="lineNum"> 457</span> : return greater_than_max&lt;To&gt;(f) ||</span>
<span id="L458"><span class="lineNum"> 458</span> : (c10::is_negative(f) &amp;&amp; -static_cast&lt;uint64_t&gt;(f) &gt; limit::max());</span>
<span id="L459"><span class="lineNum"> 459</span> : } else {</span>
<span id="L460"><span class="lineNum"> 460</span> <span class="tlaGNC"> 7072 : return c10::less_than_lowest&lt;To&gt;(f) || greater_than_max&lt;To&gt;(f);</span></span>
<span id="L461"><span class="lineNum"> 461</span> : }</span>
<span id="L462"><span class="lineNum"> 462</span> : }</span>
<span id="L463"><span class="lineNum"> 463</span> : </span>
<span id="L464"><span class="lineNum"> 464</span> : template &lt;typename To, typename From&gt;</span>
<span id="L465"><span class="lineNum"> 465</span> : typename std::enable_if&lt;std::is_floating_point&lt;From&gt;::value, bool&gt;::type</span>
<span id="L466"><span class="lineNum"> 466</span> <span class="tlaUNC tlaBgUNC"> 0 : overflows(From f) {</span></span>
<span id="L467"><span class="lineNum"> 467</span> : using limit = std::numeric_limits&lt;typename scalar_value_type&lt;To&gt;::type&gt;;</span>
<span id="L468"><span class="lineNum"> 468</span> : if (limit::has_infinity &amp;&amp; std::isinf(static_cast&lt;double&gt;(f))) {</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> <span class="tlaUNC"> 0 : if (!limit::has_quiet_NaN &amp;&amp; (f != f)) {</span></span>
<span id="L472"><span class="lineNum"> 472</span> <span class="tlaUNC"> 0 : return true;</span></span>
<span id="L473"><span class="lineNum"> 473</span> : }</span>
<span id="L474"><span class="lineNum"> 474</span> <span class="tlaUNC"> 0 : return f &lt; limit::lowest() || f &gt; limit::max();</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> : C10_CLANG_DIAGNOSTIC_POP()</span>
<span id="L478"><span class="lineNum"> 478</span> : </span>
<span id="L479"><span class="lineNum"> 479</span> : #ifdef _MSC_VER</span>
<span id="L480"><span class="lineNum"> 480</span> : #pragma warning(pop)</span>
<span id="L481"><span class="lineNum"> 481</span> : #endif</span>
<span id="L482"><span class="lineNum"> 482</span> : </span>
<span id="L483"><span class="lineNum"> 483</span> : template &lt;typename To, typename From&gt;</span>
<span id="L484"><span class="lineNum"> 484</span> <span class="tlaUNC"> 0 : typename std::enable_if&lt;is_complex&lt;From&gt;::value, bool&gt;::type overflows(From f) {</span></span>
<span id="L485"><span class="lineNum"> 485</span> : // casts from complex to real are considered to overflow if the</span>
<span id="L486"><span class="lineNum"> 486</span> : // imaginary component is non-zero</span>
<span id="L487"><span class="lineNum"> 487</span> <span class="tlaUNC"> 0 : if (!is_complex&lt;To&gt;::value &amp;&amp; f.imag() != 0) {</span></span>
<span id="L488"><span class="lineNum"> 488</span> <span class="tlaUNC"> 0 : return true;</span></span>
<span id="L489"><span class="lineNum"> 489</span> : }</span>
<span id="L490"><span class="lineNum"> 490</span> : // Check for overflow componentwise</span>
<span id="L491"><span class="lineNum"> 491</span> : // (Technically, the imag overflow check is guaranteed to be false</span>
<span id="L492"><span class="lineNum"> 492</span> : // when !is_complex&lt;To&gt;, but any optimizer worth its salt will be</span>
<span id="L493"><span class="lineNum"> 493</span> : // able to figure it out.)</span>
<span id="L494"><span class="lineNum"> 494</span> : return overflows&lt;</span>
<span id="L495"><span class="lineNum"> 495</span> : typename scalar_value_type&lt;To&gt;::type,</span>
<span id="L496"><span class="lineNum"> 496</span> <span class="tlaUNC"> 0 : typename From::value_type&gt;(f.real()) ||</span></span>
<span id="L497"><span class="lineNum"> 497</span> : overflows&lt;</span>
<span id="L498"><span class="lineNum"> 498</span> : typename scalar_value_type&lt;To&gt;::type,</span>
<span id="L499"><span class="lineNum"> 499</span> <span class="tlaUNC"> 0 : typename From::value_type&gt;(f.imag());</span></span>
<span id="L500"><span class="lineNum"> 500</span> : }</span>
<span id="L501"><span class="lineNum"> 501</span> : </span>
<span id="L502"><span class="lineNum"> 502</span> : C10_API std::ostream&amp; operator&lt;&lt;(std::ostream&amp; out, const Half&amp; value);</span>
<span id="L503"><span class="lineNum"> 503</span> : </span>
<span id="L504"><span class="lineNum"> 504</span> : } // namespace c10</span>
<span id="L505"><span class="lineNum"> 505</span> : </span>
<span id="L506"><span class="lineNum"> 506</span> : #include &lt;c10/util/Half-inl.h&gt; // IWYU pragma: keep</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>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

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/c10/util/OptionalArrayRef.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/c10/util</a> - OptionalArrayRef.h<span style="font-size: 80%;"> (<a href="OptionalArrayRef.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">3</td>
<td class="headerCovTableEntry">3</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="OptionalArrayRef.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="OptionalArrayRef.h.gcov.html#L36">_ZN3c1016OptionalArrayRefIlEC2ERKl</a></td>
<td class="coverFnHi">14194</td>
</tr>
<tr>
<td class="coverFn"><a href="OptionalArrayRef.h.gcov.html#L24">_ZN3c1016OptionalArrayRefIlEC2ENS_9nullopt_tE</a></td>
<td class="coverFnHi">16480</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/c10/util/OptionalArrayRef.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/c10/util</a> - OptionalArrayRef.h<span style="font-size: 80%;"> (<a href="OptionalArrayRef.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">3</td>
<td class="headerCovTableEntry">3</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="OptionalArrayRef.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="OptionalArrayRef.h.gcov.html#L24">_ZN3c1016OptionalArrayRefIlEC2ENS_9nullopt_tE</a></td>
<td class="coverFnHi">16480</td>
</tr>
<tr>
<td class="coverFn"><a href="OptionalArrayRef.h.gcov.html#L36">_ZN3c1016OptionalArrayRefIlEC2ERKl</a></td>
<td class="coverFnHi">14194</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,307 @@
<!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/c10/util/OptionalArrayRef.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/c10/util</a> - OptionalArrayRef.h<span style="font-size: 80%;"> (source / <a href="OptionalArrayRef.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">3</td>
<td class="headerCovTableEntry">3</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> : // This file defines OptionalArrayRef&lt;T&gt;, a class that has almost the same</span>
<span id="L2"><span class="lineNum"> 2</span> : // exact functionality as c10::optional&lt;ArrayRef&lt;T&gt;&gt;, except that its</span>
<span id="L3"><span class="lineNum"> 3</span> : // converting constructor fixes a dangling pointer issue.</span>
<span id="L4"><span class="lineNum"> 4</span> : //</span>
<span id="L5"><span class="lineNum"> 5</span> : // The implicit converting constructor of both c10::optional&lt;ArrayRef&lt;T&gt;&gt; and</span>
<span id="L6"><span class="lineNum"> 6</span> : // std::optional&lt;ArrayRef&lt;T&gt;&gt; can cause the underlying ArrayRef&lt;T&gt; to store</span>
<span id="L7"><span class="lineNum"> 7</span> : // a dangling pointer. OptionalArrayRef&lt;T&gt; prevents this by wrapping</span>
<span id="L8"><span class="lineNum"> 8</span> : // a c10::optional&lt;ArrayRef&lt;T&gt;&gt; and fixing the constructor implementation.</span>
<span id="L9"><span class="lineNum"> 9</span> : //</span>
<span id="L10"><span class="lineNum"> 10</span> : // See https://github.com/pytorch/pytorch/issues/63645 for more on this.</span>
<span id="L11"><span class="lineNum"> 11</span> : </span>
<span id="L12"><span class="lineNum"> 12</span> : #pragma once</span>
<span id="L13"><span class="lineNum"> 13</span> : </span>
<span id="L14"><span class="lineNum"> 14</span> : #include &lt;c10/util/ArrayRef.h&gt;</span>
<span id="L15"><span class="lineNum"> 15</span> : #include &lt;c10/util/Optional.h&gt;</span>
<span id="L16"><span class="lineNum"> 16</span> : </span>
<span id="L17"><span class="lineNum"> 17</span> : namespace c10 {</span>
<span id="L18"><span class="lineNum"> 18</span> : </span>
<span id="L19"><span class="lineNum"> 19</span> : template &lt;typename T&gt;</span>
<span id="L20"><span class="lineNum"> 20</span> : class OptionalArrayRef final {</span>
<span id="L21"><span class="lineNum"> 21</span> : public:</span>
<span id="L22"><span class="lineNum"> 22</span> : // Constructors</span>
<span id="L23"><span class="lineNum"> 23</span> : </span>
<span id="L24"><span class="lineNum"> 24</span> : constexpr OptionalArrayRef() noexcept = default;</span>
<span id="L25"><span class="lineNum"> 25</span> : </span>
<span id="L26"><span class="lineNum"> 26</span> <span class="tlaGNC tlaBgGNC"> 16480 : constexpr OptionalArrayRef(nullopt_t) noexcept {}</span></span>
<span id="L27"><span class="lineNum"> 27</span> : </span>
<span id="L28"><span class="lineNum"> 28</span> : OptionalArrayRef(const OptionalArrayRef&amp; other) = default;</span>
<span id="L29"><span class="lineNum"> 29</span> : </span>
<span id="L30"><span class="lineNum"> 30</span> : OptionalArrayRef(OptionalArrayRef&amp;&amp; other) = default;</span>
<span id="L31"><span class="lineNum"> 31</span> : </span>
<span id="L32"><span class="lineNum"> 32</span> : constexpr OptionalArrayRef(const optional&lt;ArrayRef&lt;T&gt;&gt;&amp; other) noexcept</span>
<span id="L33"><span class="lineNum"> 33</span> : : wrapped_opt_array_ref(other) {}</span>
<span id="L34"><span class="lineNum"> 34</span> : </span>
<span id="L35"><span class="lineNum"> 35</span> : constexpr OptionalArrayRef(optional&lt;ArrayRef&lt;T&gt;&gt;&amp;&amp; other) noexcept</span>
<span id="L36"><span class="lineNum"> 36</span> : : wrapped_opt_array_ref(other) {}</span>
<span id="L37"><span class="lineNum"> 37</span> : </span>
<span id="L38"><span class="lineNum"> 38</span> <span class="tlaGNC"> 14194 : constexpr OptionalArrayRef(const T&amp; value) noexcept</span></span>
<span id="L39"><span class="lineNum"> 39</span> <span class="tlaGNC"> 14194 : : wrapped_opt_array_ref(value) {}</span></span>
<span id="L40"><span class="lineNum"> 40</span> : </span>
<span id="L41"><span class="lineNum"> 41</span> : template &lt;</span>
<span id="L42"><span class="lineNum"> 42</span> : typename U = ArrayRef&lt;T&gt;,</span>
<span id="L43"><span class="lineNum"> 43</span> : std::enable_if_t&lt;</span>
<span id="L44"><span class="lineNum"> 44</span> : !std::is_same&lt;std::decay_t&lt;U&gt;, OptionalArrayRef&gt;::value &amp;&amp;</span>
<span id="L45"><span class="lineNum"> 45</span> : !std::is_same&lt;std::decay_t&lt;U&gt;, in_place_t&gt;::value &amp;&amp;</span>
<span id="L46"><span class="lineNum"> 46</span> : std::is_constructible&lt;ArrayRef&lt;T&gt;, U&amp;&amp;&gt;::value &amp;&amp;</span>
<span id="L47"><span class="lineNum"> 47</span> : std::is_convertible&lt;U&amp;&amp;, ArrayRef&lt;T&gt;&gt;::value &amp;&amp;</span>
<span id="L48"><span class="lineNum"> 48</span> : !std::is_convertible&lt;U&amp;&amp;, T&gt;::value,</span>
<span id="L49"><span class="lineNum"> 49</span> : bool&gt; = false&gt;</span>
<span id="L50"><span class="lineNum"> 50</span> : constexpr OptionalArrayRef(U&amp;&amp; value) noexcept(</span>
<span id="L51"><span class="lineNum"> 51</span> : std::is_nothrow_constructible&lt;ArrayRef&lt;T&gt;, U&amp;&amp;&gt;::value)</span>
<span id="L52"><span class="lineNum"> 52</span> : : wrapped_opt_array_ref(value) {}</span>
<span id="L53"><span class="lineNum"> 53</span> : </span>
<span id="L54"><span class="lineNum"> 54</span> : template &lt;</span>
<span id="L55"><span class="lineNum"> 55</span> : typename U = ArrayRef&lt;T&gt;,</span>
<span id="L56"><span class="lineNum"> 56</span> : std::enable_if_t&lt;</span>
<span id="L57"><span class="lineNum"> 57</span> : !std::is_same&lt;std::decay_t&lt;U&gt;, OptionalArrayRef&gt;::value &amp;&amp;</span>
<span id="L58"><span class="lineNum"> 58</span> : !std::is_same&lt;std::decay_t&lt;U&gt;, in_place_t&gt;::value &amp;&amp;</span>
<span id="L59"><span class="lineNum"> 59</span> : std::is_constructible&lt;ArrayRef&lt;T&gt;, U&amp;&amp;&gt;::value &amp;&amp;</span>
<span id="L60"><span class="lineNum"> 60</span> : !std::is_convertible&lt;U&amp;&amp;, ArrayRef&lt;T&gt;&gt;::value,</span>
<span id="L61"><span class="lineNum"> 61</span> : bool&gt; = false&gt;</span>
<span id="L62"><span class="lineNum"> 62</span> : constexpr explicit OptionalArrayRef(U&amp;&amp; value) noexcept(</span>
<span id="L63"><span class="lineNum"> 63</span> : std::is_nothrow_constructible&lt;ArrayRef&lt;T&gt;, U&amp;&amp;&gt;::value)</span>
<span id="L64"><span class="lineNum"> 64</span> : : wrapped_opt_array_ref(value) {}</span>
<span id="L65"><span class="lineNum"> 65</span> : </span>
<span id="L66"><span class="lineNum"> 66</span> : template &lt;typename... Args&gt;</span>
<span id="L67"><span class="lineNum"> 67</span> : constexpr explicit OptionalArrayRef(in_place_t ip, Args&amp;&amp;... args) noexcept</span>
<span id="L68"><span class="lineNum"> 68</span> : : wrapped_opt_array_ref(ip, args...) {}</span>
<span id="L69"><span class="lineNum"> 69</span> : </span>
<span id="L70"><span class="lineNum"> 70</span> : template &lt;typename U, typename... Args&gt;</span>
<span id="L71"><span class="lineNum"> 71</span> : constexpr explicit OptionalArrayRef(</span>
<span id="L72"><span class="lineNum"> 72</span> : in_place_t ip,</span>
<span id="L73"><span class="lineNum"> 73</span> : std::initializer_list&lt;U&gt; il,</span>
<span id="L74"><span class="lineNum"> 74</span> : Args&amp;&amp;... args)</span>
<span id="L75"><span class="lineNum"> 75</span> : : wrapped_opt_array_ref(ip, il, args...) {}</span>
<span id="L76"><span class="lineNum"> 76</span> : </span>
<span id="L77"><span class="lineNum"> 77</span> : constexpr OptionalArrayRef(const std::initializer_list&lt;T&gt;&amp; Vec)</span>
<span id="L78"><span class="lineNum"> 78</span> : : wrapped_opt_array_ref(ArrayRef&lt;T&gt;(Vec)) {}</span>
<span id="L79"><span class="lineNum"> 79</span> : </span>
<span id="L80"><span class="lineNum"> 80</span> : // Destructor</span>
<span id="L81"><span class="lineNum"> 81</span> : </span>
<span id="L82"><span class="lineNum"> 82</span> : ~OptionalArrayRef() = default;</span>
<span id="L83"><span class="lineNum"> 83</span> : </span>
<span id="L84"><span class="lineNum"> 84</span> : // Assignment</span>
<span id="L85"><span class="lineNum"> 85</span> : </span>
<span id="L86"><span class="lineNum"> 86</span> : constexpr OptionalArrayRef&amp; operator=(nullopt_t) noexcept {</span>
<span id="L87"><span class="lineNum"> 87</span> : wrapped_opt_array_ref = c10::nullopt;</span>
<span id="L88"><span class="lineNum"> 88</span> : return *this;</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> : OptionalArrayRef&amp; operator=(const OptionalArrayRef&amp; other) = default;</span>
<span id="L92"><span class="lineNum"> 92</span> : </span>
<span id="L93"><span class="lineNum"> 93</span> : OptionalArrayRef&amp; operator=(OptionalArrayRef&amp;&amp; other) = default;</span>
<span id="L94"><span class="lineNum"> 94</span> : </span>
<span id="L95"><span class="lineNum"> 95</span> : constexpr OptionalArrayRef&amp; operator=(</span>
<span id="L96"><span class="lineNum"> 96</span> : const optional&lt;ArrayRef&lt;T&gt;&gt;&amp; other) noexcept {</span>
<span id="L97"><span class="lineNum"> 97</span> : wrapped_opt_array_ref = other;</span>
<span id="L98"><span class="lineNum"> 98</span> : return *this;</span>
<span id="L99"><span class="lineNum"> 99</span> : }</span>
<span id="L100"><span class="lineNum"> 100</span> : </span>
<span id="L101"><span class="lineNum"> 101</span> : constexpr OptionalArrayRef&amp; operator=(</span>
<span id="L102"><span class="lineNum"> 102</span> : optional&lt;ArrayRef&lt;T&gt;&gt;&amp;&amp; other) noexcept {</span>
<span id="L103"><span class="lineNum"> 103</span> : wrapped_opt_array_ref = other;</span>
<span id="L104"><span class="lineNum"> 104</span> : return *this;</span>
<span id="L105"><span class="lineNum"> 105</span> : }</span>
<span id="L106"><span class="lineNum"> 106</span> : </span>
<span id="L107"><span class="lineNum"> 107</span> : template &lt;typename U = ArrayRef&lt;T&gt;&gt;</span>
<span id="L108"><span class="lineNum"> 108</span> : constexpr std::enable_if_t&lt;</span>
<span id="L109"><span class="lineNum"> 109</span> : !std::is_same&lt;std::decay_t&lt;U&gt;, OptionalArrayRef&gt;::value &amp;&amp;</span>
<span id="L110"><span class="lineNum"> 110</span> : std::is_constructible&lt;ArrayRef&lt;T&gt;, U&amp;&amp;&gt;::value &amp;&amp;</span>
<span id="L111"><span class="lineNum"> 111</span> : std::is_assignable&lt;ArrayRef&lt;T&gt;&amp;, U&amp;&amp;&gt;::value,</span>
<span id="L112"><span class="lineNum"> 112</span> : OptionalArrayRef&amp;&gt;</span>
<span id="L113"><span class="lineNum"> 113</span> : operator=(U&amp;&amp; value) noexcept(</span>
<span id="L114"><span class="lineNum"> 114</span> : std::is_nothrow_constructible&lt;ArrayRef&lt;T&gt;, U&amp;&amp;&gt;::value&amp;&amp;</span>
<span id="L115"><span class="lineNum"> 115</span> : std::is_nothrow_assignable&lt;ArrayRef&lt;T&gt;&amp;, U&amp;&amp;&gt;::value) {</span>
<span id="L116"><span class="lineNum"> 116</span> : wrapped_opt_array_ref = value;</span>
<span id="L117"><span class="lineNum"> 117</span> : return *this;</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> : // Observers</span>
<span id="L121"><span class="lineNum"> 121</span> : </span>
<span id="L122"><span class="lineNum"> 122</span> : constexpr ArrayRef&lt;T&gt;* operator-&gt;() noexcept {</span>
<span id="L123"><span class="lineNum"> 123</span> : return &amp;wrapped_opt_array_ref.value();</span>
<span id="L124"><span class="lineNum"> 124</span> : }</span>
<span id="L125"><span class="lineNum"> 125</span> : </span>
<span id="L126"><span class="lineNum"> 126</span> : constexpr const ArrayRef&lt;T&gt;* operator-&gt;() const noexcept {</span>
<span id="L127"><span class="lineNum"> 127</span> : return &amp;wrapped_opt_array_ref.value();</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> : constexpr ArrayRef&lt;T&gt;&amp; operator*() &amp; noexcept {</span>
<span id="L131"><span class="lineNum"> 131</span> : return wrapped_opt_array_ref.value();</span>
<span id="L132"><span class="lineNum"> 132</span> : }</span>
<span id="L133"><span class="lineNum"> 133</span> : </span>
<span id="L134"><span class="lineNum"> 134</span> : constexpr const ArrayRef&lt;T&gt;&amp; operator*() const&amp; noexcept {</span>
<span id="L135"><span class="lineNum"> 135</span> : return wrapped_opt_array_ref.value();</span>
<span id="L136"><span class="lineNum"> 136</span> : }</span>
<span id="L137"><span class="lineNum"> 137</span> : </span>
<span id="L138"><span class="lineNum"> 138</span> : constexpr ArrayRef&lt;T&gt;&amp;&amp; operator*() &amp;&amp; noexcept {</span>
<span id="L139"><span class="lineNum"> 139</span> : return std::move(wrapped_opt_array_ref.value());</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> : constexpr const ArrayRef&lt;T&gt;&amp;&amp; operator*() const&amp;&amp; noexcept {</span>
<span id="L143"><span class="lineNum"> 143</span> : return std::move(wrapped_opt_array_ref.value());</span>
<span id="L144"><span class="lineNum"> 144</span> : }</span>
<span id="L145"><span class="lineNum"> 145</span> : </span>
<span id="L146"><span class="lineNum"> 146</span> : constexpr explicit operator bool() const noexcept {</span>
<span id="L147"><span class="lineNum"> 147</span> : return wrapped_opt_array_ref.has_value();</span>
<span id="L148"><span class="lineNum"> 148</span> : }</span>
<span id="L149"><span class="lineNum"> 149</span> : </span>
<span id="L150"><span class="lineNum"> 150</span> : constexpr bool has_value() const noexcept {</span>
<span id="L151"><span class="lineNum"> 151</span> : return wrapped_opt_array_ref.has_value();</span>
<span id="L152"><span class="lineNum"> 152</span> : }</span>
<span id="L153"><span class="lineNum"> 153</span> : </span>
<span id="L154"><span class="lineNum"> 154</span> : constexpr ArrayRef&lt;T&gt;&amp; value() &amp; {</span>
<span id="L155"><span class="lineNum"> 155</span> : return wrapped_opt_array_ref.value();</span>
<span id="L156"><span class="lineNum"> 156</span> : }</span>
<span id="L157"><span class="lineNum"> 157</span> : </span>
<span id="L158"><span class="lineNum"> 158</span> : constexpr const ArrayRef&lt;T&gt;&amp; value() const&amp; {</span>
<span id="L159"><span class="lineNum"> 159</span> : return wrapped_opt_array_ref.value();</span>
<span id="L160"><span class="lineNum"> 160</span> : }</span>
<span id="L161"><span class="lineNum"> 161</span> : </span>
<span id="L162"><span class="lineNum"> 162</span> : constexpr ArrayRef&lt;T&gt;&amp;&amp; value() &amp;&amp; {</span>
<span id="L163"><span class="lineNum"> 163</span> : return std::move(wrapped_opt_array_ref.value());</span>
<span id="L164"><span class="lineNum"> 164</span> : }</span>
<span id="L165"><span class="lineNum"> 165</span> : </span>
<span id="L166"><span class="lineNum"> 166</span> : constexpr const ArrayRef&lt;T&gt;&amp;&amp; value() const&amp;&amp; {</span>
<span id="L167"><span class="lineNum"> 167</span> : return std::move(wrapped_opt_array_ref.value());</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;typename U&gt;</span>
<span id="L171"><span class="lineNum"> 171</span> : constexpr std::</span>
<span id="L172"><span class="lineNum"> 172</span> : enable_if_t&lt;std::is_convertible&lt;U&amp;&amp;, ArrayRef&lt;T&gt;&gt;::value, ArrayRef&lt;T&gt;&gt;</span>
<span id="L173"><span class="lineNum"> 173</span> : value_or(U&amp;&amp; default_value) const&amp; {</span>
<span id="L174"><span class="lineNum"> 174</span> : return wrapped_opt_array_ref.value_or(default_value);</span>
<span id="L175"><span class="lineNum"> 175</span> : }</span>
<span id="L176"><span class="lineNum"> 176</span> : </span>
<span id="L177"><span class="lineNum"> 177</span> : template &lt;typename U&gt;</span>
<span id="L178"><span class="lineNum"> 178</span> : constexpr std::</span>
<span id="L179"><span class="lineNum"> 179</span> : enable_if_t&lt;std::is_convertible&lt;U&amp;&amp;, ArrayRef&lt;T&gt;&gt;::value, ArrayRef&lt;T&gt;&gt;</span>
<span id="L180"><span class="lineNum"> 180</span> : value_or(U&amp;&amp; default_value) &amp;&amp; {</span>
<span id="L181"><span class="lineNum"> 181</span> : return wrapped_opt_array_ref.value_or(default_value);</span>
<span id="L182"><span class="lineNum"> 182</span> : }</span>
<span id="L183"><span class="lineNum"> 183</span> : </span>
<span id="L184"><span class="lineNum"> 184</span> : // Modifiers</span>
<span id="L185"><span class="lineNum"> 185</span> : </span>
<span id="L186"><span class="lineNum"> 186</span> : constexpr void swap(OptionalArrayRef&amp; other) noexcept {</span>
<span id="L187"><span class="lineNum"> 187</span> : std::swap(wrapped_opt_array_ref, other.wrapped_opt_array_ref);</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> : constexpr void reset() noexcept {</span>
<span id="L191"><span class="lineNum"> 191</span> : wrapped_opt_array_ref.reset();</span>
<span id="L192"><span class="lineNum"> 192</span> : }</span>
<span id="L193"><span class="lineNum"> 193</span> : </span>
<span id="L194"><span class="lineNum"> 194</span> : template &lt;typename... Args&gt;</span>
<span id="L195"><span class="lineNum"> 195</span> : constexpr std::enable_if_t&lt;</span>
<span id="L196"><span class="lineNum"> 196</span> : std::is_constructible&lt;ArrayRef&lt;T&gt;, Args&amp;&amp;...&gt;::value,</span>
<span id="L197"><span class="lineNum"> 197</span> : ArrayRef&lt;T&gt;&amp;&gt;</span>
<span id="L198"><span class="lineNum"> 198</span> : emplace(Args&amp;&amp;... args) noexcept(</span>
<span id="L199"><span class="lineNum"> 199</span> : std::is_nothrow_constructible&lt;ArrayRef&lt;T&gt;, Args&amp;&amp;...&gt;::value) {</span>
<span id="L200"><span class="lineNum"> 200</span> : return wrapped_opt_array_ref.emplace(args...);</span>
<span id="L201"><span class="lineNum"> 201</span> : }</span>
<span id="L202"><span class="lineNum"> 202</span> : </span>
<span id="L203"><span class="lineNum"> 203</span> : template &lt;typename U, typename... Args&gt;</span>
<span id="L204"><span class="lineNum"> 204</span> : constexpr ArrayRef&lt;T&gt;&amp; emplace(</span>
<span id="L205"><span class="lineNum"> 205</span> : std::initializer_list&lt;U&gt; il,</span>
<span id="L206"><span class="lineNum"> 206</span> : Args&amp;&amp;... args) noexcept {</span>
<span id="L207"><span class="lineNum"> 207</span> : return wrapped_opt_array_ref.emplace(il, args...);</span>
<span id="L208"><span class="lineNum"> 208</span> : }</span>
<span id="L209"><span class="lineNum"> 209</span> : </span>
<span id="L210"><span class="lineNum"> 210</span> : private:</span>
<span id="L211"><span class="lineNum"> 211</span> : optional&lt;ArrayRef&lt;T&gt;&gt; wrapped_opt_array_ref;</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> : using OptionalIntArrayRef = OptionalArrayRef&lt;int64_t&gt;;</span>
<span id="L215"><span class="lineNum"> 215</span> : </span>
<span id="L216"><span class="lineNum"> 216</span> : inline bool operator==(</span>
<span id="L217"><span class="lineNum"> 217</span> : const OptionalIntArrayRef&amp; a1,</span>
<span id="L218"><span class="lineNum"> 218</span> : const IntArrayRef&amp; other) {</span>
<span id="L219"><span class="lineNum"> 219</span> : if (!a1.has_value()) {</span>
<span id="L220"><span class="lineNum"> 220</span> : return false;</span>
<span id="L221"><span class="lineNum"> 221</span> : }</span>
<span id="L222"><span class="lineNum"> 222</span> : return a1.value() == other;</span>
<span id="L223"><span class="lineNum"> 223</span> : }</span>
<span id="L224"><span class="lineNum"> 224</span> : </span>
<span id="L225"><span class="lineNum"> 225</span> : inline bool operator==(</span>
<span id="L226"><span class="lineNum"> 226</span> : const c10::IntArrayRef&amp; a1,</span>
<span id="L227"><span class="lineNum"> 227</span> : const c10::OptionalIntArrayRef&amp; a2) {</span>
<span id="L228"><span class="lineNum"> 228</span> : return a2 == a1;</span>
<span id="L229"><span class="lineNum"> 229</span> : }</span>
<span id="L230"><span class="lineNum"> 230</span> : </span>
<span id="L231"><span class="lineNum"> 231</span> : } // 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,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/c10/util/SmallVector.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/c10/util</a> - SmallVector.h<span style="font-size: 80%;"> (<a href="SmallVector.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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">55</td>
<td class="headerCovTableEntry">0</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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">21</td>
<td class="headerCovTableEntry">0</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="SmallVector.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="SmallVector.h.gcov.html#L1285">_ZN3c1011SmallVectorIlLj5EEC2Ev</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L1287">_ZN3c1011SmallVectorIlLj5EED2Ev</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L101">_ZN3c1015SmallVectorBaseIjE8set_sizeEm</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L66">_ZN3c1015SmallVectorBaseIjEC2EPvm</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L707">_ZN3c1015SmallVectorImplIlE7reserveEm</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L651">_ZN3c1015SmallVectorImplIlEC2Ej</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L656">_ZN3c1015SmallVectorImplIlED2Ev</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L545">_ZN3c1023SmallVectorTemplateBaseIlLb1EE13destroy_rangeEPlS2_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L595">_ZN3c1023SmallVectorTemplateBaseIlLb1EE28reserveForParamAndGetAddressERlm</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L583">_ZN3c1023SmallVectorTemplateBaseIlLb1EE4growEm</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L623">_ZN3c1023SmallVectorTemplateBaseIlLb1EE9push_backEl</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L542">_ZN3c1023SmallVectorTemplateBaseIlLb1EEC2Em</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L240">_ZN3c1025SmallVectorTemplateCommonIlvE32reserveForParamAndGetAddressImplINS_23SmallVectorTemplateBaseIlLb1EEEEEPKlPT_RS5_m</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L286">_ZN3c1025SmallVectorTemplateCommonIlvE3endEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L280">_ZN3c1025SmallVectorTemplateCommonIlvE5beginEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L140">_ZN3c1025SmallVectorTemplateCommonIlvE8grow_podEmm</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L138">_ZN3c1025SmallVectorTemplateCommonIlvEC2Em</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L81">_ZNK3c1015SmallVectorBaseIjE4sizeEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L84">_ZNK3c1015SmallVectorBaseIjE8capacityEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L130">_ZNK3c1025SmallVectorTemplateCommonIlvE10getFirstElEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L146">_ZNK3c1025SmallVectorTemplateCommonIlvE7isSmallEv</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>

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/c10/util/SmallVector.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/c10/util</a> - SmallVector.h<span style="font-size: 80%;"> (<a href="SmallVector.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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">55</td>
<td class="headerCovTableEntry">0</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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">21</td>
<td class="headerCovTableEntry">0</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="SmallVector.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="SmallVector.h.gcov.html#L1285">_ZN3c1011SmallVectorIlLj5EEC2Ev</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L1287">_ZN3c1011SmallVectorIlLj5EED2Ev</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L101">_ZN3c1015SmallVectorBaseIjE8set_sizeEm</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L66">_ZN3c1015SmallVectorBaseIjEC2EPvm</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L707">_ZN3c1015SmallVectorImplIlE7reserveEm</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L651">_ZN3c1015SmallVectorImplIlEC2Ej</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L656">_ZN3c1015SmallVectorImplIlED2Ev</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L545">_ZN3c1023SmallVectorTemplateBaseIlLb1EE13destroy_rangeEPlS2_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L595">_ZN3c1023SmallVectorTemplateBaseIlLb1EE28reserveForParamAndGetAddressERlm</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L583">_ZN3c1023SmallVectorTemplateBaseIlLb1EE4growEm</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L623">_ZN3c1023SmallVectorTemplateBaseIlLb1EE9push_backEl</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L542">_ZN3c1023SmallVectorTemplateBaseIlLb1EEC2Em</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L240">_ZN3c1025SmallVectorTemplateCommonIlvE32reserveForParamAndGetAddressImplINS_23SmallVectorTemplateBaseIlLb1EEEEEPKlPT_RS5_m</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L286">_ZN3c1025SmallVectorTemplateCommonIlvE3endEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L280">_ZN3c1025SmallVectorTemplateCommonIlvE5beginEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L140">_ZN3c1025SmallVectorTemplateCommonIlvE8grow_podEmm</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L138">_ZN3c1025SmallVectorTemplateCommonIlvEC2Em</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L81">_ZNK3c1015SmallVectorBaseIjE4sizeEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L84">_ZNK3c1015SmallVectorBaseIjE8capacityEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L130">_ZNK3c1025SmallVectorTemplateCommonIlvE10getFirstElEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="SmallVector.h.gcov.html#L146">_ZNK3c1025SmallVectorTemplateCommonIlvE7isSmallEv</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,446 @@
<!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/c10/util/StringUtil.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/c10/util</a> - StringUtil.h<span style="font-size: 80%;"> (<a href="StringUtil.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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">16</td>
<td class="headerCovTableEntry">0</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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">49</td>
<td class="headerCovTableEntry">0</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="StringUtil.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="StringUtil.h.gcov.html#L108">_ZN3c103strIJEEEDcDpRKT_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA154_cEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA16_ciEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA25_cNS_10ScalarTypeEA28_cEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA25_cmA22_clEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA29_cmA51_clA24_cEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA32_cNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA33_cEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA42_ciEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA46_ciEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA57_cPKcA2_cEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA58_clEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA63_cEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA68_cEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA69_clEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA81_cEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA82_cEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA92_cmEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA94_cEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="StringUtil.h.gcov.html#L99">_ZN3c106detail12_str_wrapperIJEE4callEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="StringUtil.h.gcov.html#L89">_ZN3c106detail12_str_wrapperIJPKcEE4callES3_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="StringUtil.h.gcov.html#L71">_ZN3c106detail12_str_wrapperIJPKcRKiEE4callB5cxx11ERKS3_S5_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L71">_ZN3c106detail12_str_wrapperIJPKcRKNS_10ScalarTypeES3_EE4callB5cxx11ERKS3_S6_S9_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L71">_ZN3c106detail12_str_wrapperIJPKcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE4callERKS3_SB_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L71">_ZN3c106detail12_str_wrapperIJPKcRKS3_S3_EE4callB5cxx11ES5_S5_S5_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L71">_ZN3c106detail12_str_wrapperIJPKcRKiEE4callB5cxx11ERKS3_S5_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L71">_ZN3c106detail12_str_wrapperIJPKcRKlEE4callB5cxx11ERKS3_S5_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L71">_ZN3c106detail12_str_wrapperIJPKcRKmEE4callB5cxx11ERKS3_S5_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L71">_ZN3c106detail12_str_wrapperIJPKcRKmS3_RKlEE4callB5cxx11ERKS3_S5_SA_S7_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L71">_ZN3c106detail12_str_wrapperIJPKcRKmS3_RKlS3_EE4callB5cxx11ERKS3_S5_SA_S7_SA_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="StringUtil.h.gcov.html#L65">_ZN3c106detail4_strIPKcJiEEERSoS4_RKT_DpRKT0_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L65">_ZN3c106detail4_strINS_10ScalarTypeEJPKcEEERSoS5_RKT_DpRKT0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L65">_ZN3c106detail4_strIPKcJNS_10ScalarTypeES3_EEERSoS5_RKT_DpRKT0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L65">_ZN3c106detail4_strIPKcJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEERSoSA_RKT_DpRKT0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L65">_ZN3c106detail4_strIPKcJS3_EEERSoS4_RKT_DpRKT0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L65">_ZN3c106detail4_strIPKcJS3_S3_EEERSoS4_RKT_DpRKT0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L65">_ZN3c106detail4_strIPKcJiEEERSoS4_RKT_DpRKT0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L65">_ZN3c106detail4_strIPKcJlEEERSoS4_RKT_DpRKT0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L65">_ZN3c106detail4_strIPKcJlS3_EEERSoS4_RKT_DpRKT0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L65">_ZN3c106detail4_strIPKcJmEEERSoS4_RKT_DpRKT0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L65">_ZN3c106detail4_strIPKcJmS3_lEEERSoS4_RKT_DpRKT0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L65">_ZN3c106detail4_strIPKcJmS3_lS3_EEERSoS4_RKT_DpRKT0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L65">_ZN3c106detail4_strIlJPKcEEERSoS4_RKT_DpRKT0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L65">_ZN3c106detail4_strImJPKclEEERSoS4_RKT_DpRKT0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L65">_ZN3c106detail4_strImJPKclS3_EEERSoS4_RKT_DpRKT0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="StringUtil.h.gcov.html#L51">_ZN3c106detail4_strIiEERSoS2_RKT_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L51">_ZN3c106detail4_strINS_10ScalarTypeEEERSoS3_RKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L51">_ZN3c106detail4_strINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEERSoS8_RKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L51">_ZN3c106detail4_strIPKcEERSoS4_RKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L51">_ZN3c106detail4_strIiEERSoS2_RKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L51">_ZN3c106detail4_strIlEERSoS2_RKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L51">_ZN3c106detail4_strImEERSoS2_RKT_</a></td>
<td class="coverFnAliasLo">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>

View File

@@ -0,0 +1,446 @@
<!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/c10/util/StringUtil.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/c10/util</a> - StringUtil.h<span style="font-size: 80%;"> (<a href="StringUtil.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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">16</td>
<td class="headerCovTableEntry">0</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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">49</td>
<td class="headerCovTableEntry">0</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="StringUtil.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="StringUtil.h.gcov.html#L108">_ZN3c103strIJEEEDcDpRKT_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA154_cEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA16_ciEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA25_cNS_10ScalarTypeEA28_cEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA25_cmA22_clEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA29_cmA51_clA24_cEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA32_cNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA33_cEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA42_ciEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA46_ciEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA57_cPKcA2_cEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA58_clEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA63_cEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA68_cEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA69_clEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA81_cEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA82_cEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA92_cmEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJA94_cEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L108">_ZN3c103strIJEEEDcDpRKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="StringUtil.h.gcov.html#L99">_ZN3c106detail12_str_wrapperIJEE4callEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="StringUtil.h.gcov.html#L89">_ZN3c106detail12_str_wrapperIJPKcEE4callES3_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="StringUtil.h.gcov.html#L71">_ZN3c106detail12_str_wrapperIJPKcRKiEE4callB5cxx11ERKS3_S5_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L71">_ZN3c106detail12_str_wrapperIJPKcRKNS_10ScalarTypeES3_EE4callB5cxx11ERKS3_S6_S9_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L71">_ZN3c106detail12_str_wrapperIJPKcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE4callERKS3_SB_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L71">_ZN3c106detail12_str_wrapperIJPKcRKS3_S3_EE4callB5cxx11ES5_S5_S5_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L71">_ZN3c106detail12_str_wrapperIJPKcRKiEE4callB5cxx11ERKS3_S5_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L71">_ZN3c106detail12_str_wrapperIJPKcRKlEE4callB5cxx11ERKS3_S5_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L71">_ZN3c106detail12_str_wrapperIJPKcRKmEE4callB5cxx11ERKS3_S5_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L71">_ZN3c106detail12_str_wrapperIJPKcRKmS3_RKlEE4callB5cxx11ERKS3_S5_SA_S7_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L71">_ZN3c106detail12_str_wrapperIJPKcRKmS3_RKlS3_EE4callB5cxx11ERKS3_S5_SA_S7_SA_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="StringUtil.h.gcov.html#L65">_ZN3c106detail4_strIPKcJiEEERSoS4_RKT_DpRKT0_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L65">_ZN3c106detail4_strINS_10ScalarTypeEJPKcEEERSoS5_RKT_DpRKT0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L65">_ZN3c106detail4_strIPKcJNS_10ScalarTypeES3_EEERSoS5_RKT_DpRKT0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L65">_ZN3c106detail4_strIPKcJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEERSoSA_RKT_DpRKT0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L65">_ZN3c106detail4_strIPKcJS3_EEERSoS4_RKT_DpRKT0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L65">_ZN3c106detail4_strIPKcJS3_S3_EEERSoS4_RKT_DpRKT0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L65">_ZN3c106detail4_strIPKcJiEEERSoS4_RKT_DpRKT0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L65">_ZN3c106detail4_strIPKcJlEEERSoS4_RKT_DpRKT0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L65">_ZN3c106detail4_strIPKcJlS3_EEERSoS4_RKT_DpRKT0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L65">_ZN3c106detail4_strIPKcJmEEERSoS4_RKT_DpRKT0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L65">_ZN3c106detail4_strIPKcJmS3_lEEERSoS4_RKT_DpRKT0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L65">_ZN3c106detail4_strIPKcJmS3_lS3_EEERSoS4_RKT_DpRKT0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L65">_ZN3c106detail4_strIlJPKcEEERSoS4_RKT_DpRKT0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L65">_ZN3c106detail4_strImJPKclEEERSoS4_RKT_DpRKT0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L65">_ZN3c106detail4_strImJPKclS3_EEERSoS4_RKT_DpRKT0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="StringUtil.h.gcov.html#L51">_ZN3c106detail4_strIiEERSoS2_RKT_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L51">_ZN3c106detail4_strINS_10ScalarTypeEEERSoS3_RKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L51">_ZN3c106detail4_strINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEERSoS8_RKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L51">_ZN3c106detail4_strIPKcEERSoS4_RKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L51">_ZN3c106detail4_strIiEERSoS2_RKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L51">_ZN3c106detail4_strIlEERSoS2_RKT_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="StringUtil.h.gcov.html#L51">_ZN3c106detail4_strImEERSoS2_RKT_</a></td>
<td class="coverFnAliasLo">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>

View File

@@ -0,0 +1,278 @@
<!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/c10/util/StringUtil.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/c10/util</a> - StringUtil.h<span style="font-size: 80%;"> (source / <a href="StringUtil.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="headerCovTableEntryLo">0.0&nbsp;%</td>
<td class="headerCovTableEntry">16</td>
<td class="headerCovTableEntry">0</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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">49</td>
<td class="headerCovTableEntry">0</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> : #ifndef C10_UTIL_STRINGUTIL_H_</span>
<span id="L2"><span class="lineNum"> 2</span> : #define C10_UTIL_STRINGUTIL_H_</span>
<span id="L3"><span class="lineNum"> 3</span> : </span>
<span id="L4"><span class="lineNum"> 4</span> : #include &lt;c10/macros/Macros.h&gt;</span>
<span id="L5"><span class="lineNum"> 5</span> : #include &lt;c10/util/string_utils.h&gt;</span>
<span id="L6"><span class="lineNum"> 6</span> : #include &lt;c10/util/string_view.h&gt;</span>
<span id="L7"><span class="lineNum"> 7</span> : </span>
<span id="L8"><span class="lineNum"> 8</span> : #include &lt;cstddef&gt;</span>
<span id="L9"><span class="lineNum"> 9</span> : #include &lt;ostream&gt;</span>
<span id="L10"><span class="lineNum"> 10</span> : #include &lt;sstream&gt;</span>
<span id="L11"><span class="lineNum"> 11</span> : #include &lt;string&gt;</span>
<span id="L12"><span class="lineNum"> 12</span> : #include &lt;vector&gt;</span>
<span id="L13"><span class="lineNum"> 13</span> : </span>
<span id="L14"><span class="lineNum"> 14</span> : C10_CLANG_DIAGNOSTIC_PUSH()</span>
<span id="L15"><span class="lineNum"> 15</span> : #if C10_CLANG_HAS_WARNING(&quot;-Wshorten-64-to-32&quot;)</span>
<span id="L16"><span class="lineNum"> 16</span> : C10_CLANG_DIAGNOSTIC_IGNORE(&quot;-Wshorten-64-to-32&quot;)</span>
<span id="L17"><span class="lineNum"> 17</span> : #endif</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> : namespace detail {</span>
<span id="L22"><span class="lineNum"> 22</span> : </span>
<span id="L23"><span class="lineNum"> 23</span> : // Obtains the base name from a full path.</span>
<span id="L24"><span class="lineNum"> 24</span> : C10_API std::string StripBasename(const std::string&amp; full_path);</span>
<span id="L25"><span class="lineNum"> 25</span> : </span>
<span id="L26"><span class="lineNum"> 26</span> : C10_API std::string ExcludeFileExtension(const std::string&amp; full_path);</span>
<span id="L27"><span class="lineNum"> 27</span> : </span>
<span id="L28"><span class="lineNum"> 28</span> : struct CompileTimeEmptyString {</span>
<span id="L29"><span class="lineNum"> 29</span> : operator const std::string&amp;() const {</span>
<span id="L30"><span class="lineNum"> 30</span> : static const std::string empty_string_literal;</span>
<span id="L31"><span class="lineNum"> 31</span> : return empty_string_literal;</span>
<span id="L32"><span class="lineNum"> 32</span> : }</span>
<span id="L33"><span class="lineNum"> 33</span> : operator const char*() const {</span>
<span id="L34"><span class="lineNum"> 34</span> : return &quot;&quot;;</span>
<span id="L35"><span class="lineNum"> 35</span> : }</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> : template &lt;typename T&gt;</span>
<span id="L39"><span class="lineNum"> 39</span> : struct CanonicalizeStrTypes {</span>
<span id="L40"><span class="lineNum"> 40</span> : using type = const T&amp;;</span>
<span id="L41"><span class="lineNum"> 41</span> : };</span>
<span id="L42"><span class="lineNum"> 42</span> : </span>
<span id="L43"><span class="lineNum"> 43</span> : template &lt;size_t N&gt;</span>
<span id="L44"><span class="lineNum"> 44</span> : struct CanonicalizeStrTypes&lt;char[N]&gt; {</span>
<span id="L45"><span class="lineNum"> 45</span> : using type = const char*;</span>
<span id="L46"><span class="lineNum"> 46</span> : };</span>
<span id="L47"><span class="lineNum"> 47</span> : </span>
<span id="L48"><span class="lineNum"> 48</span> : inline std::ostream&amp; _str(std::ostream&amp; ss) {</span>
<span id="L49"><span class="lineNum"> 49</span> : return ss;</span>
<span id="L50"><span class="lineNum"> 50</span> : }</span>
<span id="L51"><span class="lineNum"> 51</span> : </span>
<span id="L52"><span class="lineNum"> 52</span> : template &lt;typename T&gt;</span>
<span id="L53"><span class="lineNum"> 53</span> <span class="tlaUNC tlaBgUNC"> 0 : inline std::ostream&amp; _str(std::ostream&amp; ss, const T&amp; t) {</span></span>
<span id="L54"><span class="lineNum"> 54</span> : // NOLINTNEXTLINE(clang-analyzer-core.CallAndMessage)</span>
<span id="L55"><span class="lineNum"> 55</span> <span class="tlaUNC"> 0 : ss &lt;&lt; t;</span></span>
<span id="L56"><span class="lineNum"> 56</span> <span class="tlaUNC"> 0 : return ss;</span></span>
<span id="L57"><span class="lineNum"> 57</span> : }</span>
<span id="L58"><span class="lineNum"> 58</span> : </span>
<span id="L59"><span class="lineNum"> 59</span> : template &lt;&gt;</span>
<span id="L60"><span class="lineNum"> 60</span> : inline std::ostream&amp; _str&lt;CompileTimeEmptyString&gt;(</span>
<span id="L61"><span class="lineNum"> 61</span> : std::ostream&amp; ss,</span>
<span id="L62"><span class="lineNum"> 62</span> : const CompileTimeEmptyString&amp;) {</span>
<span id="L63"><span class="lineNum"> 63</span> : return ss;</span>
<span id="L64"><span class="lineNum"> 64</span> : }</span>
<span id="L65"><span class="lineNum"> 65</span> : </span>
<span id="L66"><span class="lineNum"> 66</span> : template &lt;typename T, typename... Args&gt;</span>
<span id="L67"><span class="lineNum"> 67</span> <span class="tlaUNC"> 0 : inline std::ostream&amp; _str(std::ostream&amp; ss, const T&amp; t, const Args&amp;... args) {</span></span>
<span id="L68"><span class="lineNum"> 68</span> <span class="tlaUNC"> 0 : return _str(_str(ss, t), args...);</span></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;typename... Args&gt;</span>
<span id="L72"><span class="lineNum"> 72</span> : struct _str_wrapper final {</span>
<span id="L73"><span class="lineNum"> 73</span> <span class="tlaUNC"> 0 : static std::string call(const Args&amp;... args) {</span></span>
<span id="L74"><span class="lineNum"> 74</span> <span class="tlaUNC"> 0 : std::ostringstream ss;</span></span>
<span id="L75"><span class="lineNum"> 75</span> <span class="tlaUNC"> 0 : _str(ss, args...);</span></span>
<span id="L76"><span class="lineNum"> 76</span> <span class="tlaUNC"> 0 : return ss.str();</span></span>
<span id="L77"><span class="lineNum"> 77</span> <span class="tlaUNC"> 0 : }</span></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> : // Specializations for already-a-string types.</span>
<span id="L81"><span class="lineNum"> 81</span> : template &lt;&gt;</span>
<span id="L82"><span class="lineNum"> 82</span> : struct _str_wrapper&lt;std::string&gt; final {</span>
<span id="L83"><span class="lineNum"> 83</span> : // return by reference to avoid the binary size of a string copy</span>
<span id="L84"><span class="lineNum"> 84</span> : static const std::string&amp; call(const std::string&amp; str) {</span>
<span id="L85"><span class="lineNum"> 85</span> : return str;</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> : template &lt;&gt;</span>
<span id="L90"><span class="lineNum"> 90</span> : struct _str_wrapper&lt;const char*&gt; final {</span>
<span id="L91"><span class="lineNum"> 91</span> <span class="tlaUNC"> 0 : static const char* call(const char* str) {</span></span>
<span id="L92"><span class="lineNum"> 92</span> <span class="tlaUNC"> 0 : return str;</span></span>
<span id="L93"><span class="lineNum"> 93</span> : }</span>
<span id="L94"><span class="lineNum"> 94</span> : };</span>
<span id="L95"><span class="lineNum"> 95</span> : </span>
<span id="L96"><span class="lineNum"> 96</span> : // For c10::str() with an empty argument list (which is common in our assert</span>
<span id="L97"><span class="lineNum"> 97</span> : // macros), we don't want to pay the binary size for constructing and</span>
<span id="L98"><span class="lineNum"> 98</span> : // destructing a stringstream or even constructing a string.</span>
<span id="L99"><span class="lineNum"> 99</span> : template &lt;&gt;</span>
<span id="L100"><span class="lineNum"> 100</span> : struct _str_wrapper&lt;&gt; final {</span>
<span id="L101"><span class="lineNum"> 101</span> <span class="tlaUNC"> 0 : static CompileTimeEmptyString call() {</span></span>
<span id="L102"><span class="lineNum"> 102</span> <span class="tlaUNC"> 0 : return CompileTimeEmptyString();</span></span>
<span id="L103"><span class="lineNum"> 103</span> : }</span>
<span id="L104"><span class="lineNum"> 104</span> : };</span>
<span id="L105"><span class="lineNum"> 105</span> : </span>
<span id="L106"><span class="lineNum"> 106</span> : } // namespace detail</span>
<span id="L107"><span class="lineNum"> 107</span> : </span>
<span id="L108"><span class="lineNum"> 108</span> : // Convert a list of string-like arguments into a single string.</span>
<span id="L109"><span class="lineNum"> 109</span> : template &lt;typename... Args&gt;</span>
<span id="L110"><span class="lineNum"> 110</span> <span class="tlaUNC"> 0 : inline decltype(auto) str(const Args&amp;... args) {</span></span>
<span id="L111"><span class="lineNum"> 111</span> : return detail::_str_wrapper&lt;</span>
<span id="L112"><span class="lineNum"> 112</span> <span class="tlaUNC"> 0 : typename detail::CanonicalizeStrTypes&lt;Args&gt;::type...&gt;::call(args...);</span></span>
<span id="L113"><span class="lineNum"> 113</span> : }</span>
<span id="L114"><span class="lineNum"> 114</span> : </span>
<span id="L115"><span class="lineNum"> 115</span> : template &lt;class Container&gt;</span>
<span id="L116"><span class="lineNum"> 116</span> : inline std::string Join(const std::string&amp; delimiter, const Container&amp; v) {</span>
<span id="L117"><span class="lineNum"> 117</span> : std::stringstream s;</span>
<span id="L118"><span class="lineNum"> 118</span> : int cnt = static_cast&lt;int64_t&gt;(v.size()) - 1;</span>
<span id="L119"><span class="lineNum"> 119</span> : for (auto i = v.begin(); i != v.end(); ++i, --cnt) {</span>
<span id="L120"><span class="lineNum"> 120</span> : s &lt;&lt; (*i) &lt;&lt; (cnt ? delimiter : &quot;&quot;);</span>
<span id="L121"><span class="lineNum"> 121</span> : }</span>
<span id="L122"><span class="lineNum"> 122</span> : return s.str();</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> : // Replace all occurrences of &quot;from&quot; substring to &quot;to&quot; string.</span>
<span id="L126"><span class="lineNum"> 126</span> : // Returns number of replacements</span>
<span id="L127"><span class="lineNum"> 127</span> : size_t C10_API</span>
<span id="L128"><span class="lineNum"> 128</span> : ReplaceAll(std::string&amp; s, c10::string_view from, c10::string_view to);</span>
<span id="L129"><span class="lineNum"> 129</span> : </span>
<span id="L130"><span class="lineNum"> 130</span> : /// Represents a location in source code (for debugging).</span>
<span id="L131"><span class="lineNum"> 131</span> : struct C10_API SourceLocation {</span>
<span id="L132"><span class="lineNum"> 132</span> : const char* function;</span>
<span id="L133"><span class="lineNum"> 133</span> : const char* file;</span>
<span id="L134"><span class="lineNum"> 134</span> : uint32_t line;</span>
<span id="L135"><span class="lineNum"> 135</span> : };</span>
<span id="L136"><span class="lineNum"> 136</span> : </span>
<span id="L137"><span class="lineNum"> 137</span> : std::ostream&amp; operator&lt;&lt;(std::ostream&amp; out, const SourceLocation&amp; loc);</span>
<span id="L138"><span class="lineNum"> 138</span> : </span>
<span id="L139"><span class="lineNum"> 139</span> : // unix isprint but insensitive to locale</span>
<span id="L140"><span class="lineNum"> 140</span> : inline static bool isPrint(char s) {</span>
<span id="L141"><span class="lineNum"> 141</span> : return s &gt; 0x1f &amp;&amp; s &lt; 0x7f;</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> : inline void printQuotedString(std::ostream&amp; stmt, const string_view str) {</span>
<span id="L145"><span class="lineNum"> 145</span> : stmt &lt;&lt; &quot;\&quot;&quot;;</span>
<span id="L146"><span class="lineNum"> 146</span> : for (auto s : str) {</span>
<span id="L147"><span class="lineNum"> 147</span> : switch (s) {</span>
<span id="L148"><span class="lineNum"> 148</span> : case '\\':</span>
<span id="L149"><span class="lineNum"> 149</span> : stmt &lt;&lt; &quot;\\\\&quot;;</span>
<span id="L150"><span class="lineNum"> 150</span> : break;</span>
<span id="L151"><span class="lineNum"> 151</span> : case '\'':</span>
<span id="L152"><span class="lineNum"> 152</span> : stmt &lt;&lt; &quot;\\'&quot;;</span>
<span id="L153"><span class="lineNum"> 153</span> : break;</span>
<span id="L154"><span class="lineNum"> 154</span> : case '\&quot;':</span>
<span id="L155"><span class="lineNum"> 155</span> : stmt &lt;&lt; &quot;\\\&quot;&quot;;</span>
<span id="L156"><span class="lineNum"> 156</span> : break;</span>
<span id="L157"><span class="lineNum"> 157</span> : case '\a':</span>
<span id="L158"><span class="lineNum"> 158</span> : stmt &lt;&lt; &quot;\\a&quot;;</span>
<span id="L159"><span class="lineNum"> 159</span> : break;</span>
<span id="L160"><span class="lineNum"> 160</span> : case '\b':</span>
<span id="L161"><span class="lineNum"> 161</span> : stmt &lt;&lt; &quot;\\b&quot;;</span>
<span id="L162"><span class="lineNum"> 162</span> : break;</span>
<span id="L163"><span class="lineNum"> 163</span> : case '\f':</span>
<span id="L164"><span class="lineNum"> 164</span> : stmt &lt;&lt; &quot;\\f&quot;;</span>
<span id="L165"><span class="lineNum"> 165</span> : break;</span>
<span id="L166"><span class="lineNum"> 166</span> : case '\n':</span>
<span id="L167"><span class="lineNum"> 167</span> : stmt &lt;&lt; &quot;\\n&quot;;</span>
<span id="L168"><span class="lineNum"> 168</span> : break;</span>
<span id="L169"><span class="lineNum"> 169</span> : case '\r':</span>
<span id="L170"><span class="lineNum"> 170</span> : stmt &lt;&lt; &quot;\\r&quot;;</span>
<span id="L171"><span class="lineNum"> 171</span> : break;</span>
<span id="L172"><span class="lineNum"> 172</span> : case '\t':</span>
<span id="L173"><span class="lineNum"> 173</span> : stmt &lt;&lt; &quot;\\t&quot;;</span>
<span id="L174"><span class="lineNum"> 174</span> : break;</span>
<span id="L175"><span class="lineNum"> 175</span> : case '\v':</span>
<span id="L176"><span class="lineNum"> 176</span> : stmt &lt;&lt; &quot;\\v&quot;;</span>
<span id="L177"><span class="lineNum"> 177</span> : break;</span>
<span id="L178"><span class="lineNum"> 178</span> : default:</span>
<span id="L179"><span class="lineNum"> 179</span> : if (isPrint(s)) {</span>
<span id="L180"><span class="lineNum"> 180</span> : stmt &lt;&lt; s;</span>
<span id="L181"><span class="lineNum"> 181</span> : } else {</span>
<span id="L182"><span class="lineNum"> 182</span> : // C++ io has stateful formatting settings. Messing with</span>
<span id="L183"><span class="lineNum"> 183</span> : // them is probably worse than doing this manually.</span>
<span id="L184"><span class="lineNum"> 184</span> : char buf[4] = &quot;000&quot;;</span>
<span id="L185"><span class="lineNum"> 185</span> : buf[2] += s % 8;</span>
<span id="L186"><span class="lineNum"> 186</span> : s /= 8;</span>
<span id="L187"><span class="lineNum"> 187</span> : buf[1] += s % 8;</span>
<span id="L188"><span class="lineNum"> 188</span> : s /= 8;</span>
<span id="L189"><span class="lineNum"> 189</span> : buf[0] += s;</span>
<span id="L190"><span class="lineNum"> 190</span> : stmt &lt;&lt; &quot;\\&quot; &lt;&lt; buf;</span>
<span id="L191"><span class="lineNum"> 191</span> : }</span>
<span id="L192"><span class="lineNum"> 192</span> : break;</span>
<span id="L193"><span class="lineNum"> 193</span> : }</span>
<span id="L194"><span class="lineNum"> 194</span> : }</span>
<span id="L195"><span class="lineNum"> 195</span> : stmt &lt;&lt; &quot;\&quot;&quot;;</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> : } // namespace c10</span>
<span id="L199"><span class="lineNum"> 199</span> : </span>
<span id="L200"><span class="lineNum"> 200</span> : C10_CLANG_DIAGNOSTIC_POP()</span>
<span id="L201"><span class="lineNum"> 201</span> : </span>
<span id="L202"><span class="lineNum"> 202</span> : #endif // C10_UTIL_STRINGUTIL_H_</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,271 @@
<!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/c10/util/TypeCast.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/c10/util</a> - TypeCast.h<span style="font-size: 80%;"> (<a href="TypeCast.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">78.6&nbsp;%</td>
<td class="headerCovTableEntry">14</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="headerCovTableEntryLo">54.2&nbsp;%</td>
<td class="headerCovTableEntry">24</td>
<td class="headerCovTableEntry">13</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="TypeCast.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="TypeCast.h.gcov.html#L33">_ZN3c1010maybe_realILb1ENS_7complexIdEEE5applyES2_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="TypeCast.h.gcov.html#L130">_ZN3c1015checked_convertIlbEET_T0_PKc</a></td>
<td class="coverFnHi">7072</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L130">_ZN3c1015checked_convertIlNS_7complexIdEEEET_T0_PKc</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L130">_ZN3c1015checked_convertIlbEET_T0_PKc</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L130">_ZN3c1015checked_convertIldEET_T0_PKc</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L130">_ZN3c1015checked_convertIllEET_T0_PKc</a></td>
<td class="coverFnAliasHi">7072</td>
</tr>
<tr>
<td class="coverFn"><a href="TypeCast.h.gcov.html#L26">_ZN3c1010maybe_realILb0EbE5applyEb</a></td>
<td class="coverFnHi">10741350</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L26">_ZN3c1010maybe_realILb0EbE5applyEb</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L26">_ZN3c1010maybe_realILb0EfE5applyEf</a></td>
<td class="coverFnAliasHi">366</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L26">_ZN3c1010maybe_realILb0ElE5applyEl</a></td>
<td class="coverFnAliasHi">408390</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L26">_ZN3c1010maybe_realILb0EdE5applyEd</a></td>
<td class="coverFnAliasHi">5159946</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L26">_ZN3c1010maybe_realILb0EiE5applyEi</a></td>
<td class="coverFnAliasHi">5172648</td>
</tr>
<tr>
<td class="coverFn"><a href="TypeCast.h.gcov.html#L44">_ZN3c1027static_cast_with_inter_typeIddE5applyEd</a></td>
<td class="coverFnHi">10741350</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L44">_ZN3c1027static_cast_with_inter_typeIlNS_7complexIdEEE5applyES2_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L44">_ZN3c1027static_cast_with_inter_typeIlbE5applyEb</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L44">_ZN3c1027static_cast_with_inter_typeIldE5applyEd</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L44">_ZN3c1027static_cast_with_inter_typeIdfE5applyEf</a></td>
<td class="coverFnAliasHi">366</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L44">_ZN3c1027static_cast_with_inter_typeIllE5applyEl</a></td>
<td class="coverFnAliasHi">408390</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L44">_ZN3c1027static_cast_with_inter_typeIddE5applyEd</a></td>
<td class="coverFnAliasHi">5159946</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L44">_ZN3c1027static_cast_with_inter_typeIliE5applyEi</a></td>
<td class="coverFnAliasHi">5172648</td>
</tr>
<tr>
<td class="coverFn"><a href="TypeCast.h.gcov.html#L122">_ZN3c107convertIddEET_T0_</a></td>
<td class="coverFnHi">10741350</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L122">_ZN3c107convertIlNS_7complexIdEEEET_T0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L122">_ZN3c107convertIlbEET_T0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L122">_ZN3c107convertIldEET_T0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L122">_ZN3c107convertIdfEET_T0_</a></td>
<td class="coverFnAliasHi">366</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L122">_ZN3c107convertIllEET_T0_</a></td>
<td class="coverFnAliasHi">408390</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L122">_ZN3c107convertIddEET_T0_</a></td>
<td class="coverFnAliasHi">5159946</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L122">_ZN3c107convertIliEET_T0_</a></td>
<td class="coverFnAliasHi">5172648</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,271 @@
<!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/c10/util/TypeCast.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/c10/util</a> - TypeCast.h<span style="font-size: 80%;"> (<a href="TypeCast.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">78.6&nbsp;%</td>
<td class="headerCovTableEntry">14</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="headerCovTableEntryLo">54.2&nbsp;%</td>
<td class="headerCovTableEntry">24</td>
<td class="headerCovTableEntry">13</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="TypeCast.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="TypeCast.h.gcov.html#L26">_ZN3c1010maybe_realILb0EbE5applyEb</a></td>
<td class="coverFnHi">10741350</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L26">_ZN3c1010maybe_realILb0EbE5applyEb</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L26">_ZN3c1010maybe_realILb0EdE5applyEd</a></td>
<td class="coverFnAliasHi">5159946</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L26">_ZN3c1010maybe_realILb0EfE5applyEf</a></td>
<td class="coverFnAliasHi">366</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L26">_ZN3c1010maybe_realILb0EiE5applyEi</a></td>
<td class="coverFnAliasHi">5172648</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L26">_ZN3c1010maybe_realILb0ElE5applyEl</a></td>
<td class="coverFnAliasHi">408390</td>
</tr>
<tr>
<td class="coverFn"><a href="TypeCast.h.gcov.html#L33">_ZN3c1010maybe_realILb1ENS_7complexIdEEE5applyES2_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="TypeCast.h.gcov.html#L130">_ZN3c1015checked_convertIlbEET_T0_PKc</a></td>
<td class="coverFnHi">7072</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L130">_ZN3c1015checked_convertIlNS_7complexIdEEEET_T0_PKc</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L130">_ZN3c1015checked_convertIlbEET_T0_PKc</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L130">_ZN3c1015checked_convertIldEET_T0_PKc</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L130">_ZN3c1015checked_convertIllEET_T0_PKc</a></td>
<td class="coverFnAliasHi">7072</td>
</tr>
<tr>
<td class="coverFn"><a href="TypeCast.h.gcov.html#L44">_ZN3c1027static_cast_with_inter_typeIddE5applyEd</a></td>
<td class="coverFnHi">10741350</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L44">_ZN3c1027static_cast_with_inter_typeIddE5applyEd</a></td>
<td class="coverFnAliasHi">5159946</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L44">_ZN3c1027static_cast_with_inter_typeIdfE5applyEf</a></td>
<td class="coverFnAliasHi">366</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L44">_ZN3c1027static_cast_with_inter_typeIlNS_7complexIdEEE5applyES2_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L44">_ZN3c1027static_cast_with_inter_typeIlbE5applyEb</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L44">_ZN3c1027static_cast_with_inter_typeIldE5applyEd</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L44">_ZN3c1027static_cast_with_inter_typeIliE5applyEi</a></td>
<td class="coverFnAliasHi">5172648</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L44">_ZN3c1027static_cast_with_inter_typeIllE5applyEl</a></td>
<td class="coverFnAliasHi">408390</td>
</tr>
<tr>
<td class="coverFn"><a href="TypeCast.h.gcov.html#L122">_ZN3c107convertIddEET_T0_</a></td>
<td class="coverFnHi">10741350</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L122">_ZN3c107convertIddEET_T0_</a></td>
<td class="coverFnAliasHi">5159946</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L122">_ZN3c107convertIdfEET_T0_</a></td>
<td class="coverFnAliasHi">366</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L122">_ZN3c107convertIlNS_7complexIdEEEET_T0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L122">_ZN3c107convertIlbEET_T0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L122">_ZN3c107convertIldEET_T0_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L122">_ZN3c107convertIliEET_T0_</a></td>
<td class="coverFnAliasHi">5172648</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="TypeCast.h.gcov.html#L122">_ZN3c107convertIllEET_T0_</a></td>
<td class="coverFnAliasHi">408390</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,220 @@
<!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/c10/util/TypeCast.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/c10/util</a> - TypeCast.h<span style="font-size: 80%;"> (source / <a href="TypeCast.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">78.6&nbsp;%</td>
<td class="headerCovTableEntry">14</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="headerCovTableEntryLo">54.2&nbsp;%</td>
<td class="headerCovTableEntry">24</td>
<td class="headerCovTableEntry">13</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> : #include &lt;c10/macros/Macros.h&gt;</span>
<span id="L3"><span class="lineNum"> 3</span> : #include &lt;c10/util/BFloat16.h&gt;</span>
<span id="L4"><span class="lineNum"> 4</span> : #include &lt;c10/util/Float8_e4m3fn.h&gt;</span>
<span id="L5"><span class="lineNum"> 5</span> : #include &lt;c10/util/Float8_e5m2.h&gt;</span>
<span id="L6"><span class="lineNum"> 6</span> : #include &lt;c10/util/Half.h&gt;</span>
<span id="L7"><span class="lineNum"> 7</span> : </span>
<span id="L8"><span class="lineNum"> 8</span> : #include &lt;type_traits&gt;</span>
<span id="L9"><span class="lineNum"> 9</span> : </span>
<span id="L10"><span class="lineNum"> 10</span> : C10_CLANG_DIAGNOSTIC_PUSH()</span>
<span id="L11"><span class="lineNum"> 11</span> : #if C10_CLANG_HAS_WARNING(&quot;-Wimplicit-float-conversion&quot;)</span>
<span id="L12"><span class="lineNum"> 12</span> : C10_CLANG_DIAGNOSTIC_IGNORE(&quot;-Wimplicit-float-conversion&quot;)</span>
<span id="L13"><span class="lineNum"> 13</span> : #endif</span>
<span id="L14"><span class="lineNum"> 14</span> : #if C10_CLANG_HAS_WARNING(&quot;-Wimplicit-int-float-conversion&quot;)</span>
<span id="L15"><span class="lineNum"> 15</span> : C10_CLANG_DIAGNOSTIC_IGNORE(&quot;-Wimplicit-int-float-conversion&quot;)</span>
<span id="L16"><span class="lineNum"> 16</span> : #endif</span>
<span id="L17"><span class="lineNum"> 17</span> : </span>
<span id="L18"><span class="lineNum"> 18</span> : namespace c10 {</span>
<span id="L19"><span class="lineNum"> 19</span> : </span>
<span id="L20"><span class="lineNum"> 20</span> : template &lt;typename dest_t, typename src_t&gt;</span>
<span id="L21"><span class="lineNum"> 21</span> : struct needs_real {</span>
<span id="L22"><span class="lineNum"> 22</span> : constexpr static bool value =</span>
<span id="L23"><span class="lineNum"> 23</span> : (is_complex&lt;src_t&gt;::value &amp;&amp; !is_complex&lt;dest_t&gt;::value);</span>
<span id="L24"><span class="lineNum"> 24</span> : };</span>
<span id="L25"><span class="lineNum"> 25</span> : </span>
<span id="L26"><span class="lineNum"> 26</span> : template &lt;bool, typename src_t&gt;</span>
<span id="L27"><span class="lineNum"> 27</span> : struct maybe_real {</span>
<span id="L28"><span class="lineNum"> 28</span> <span class="tlaGNC tlaBgGNC"> 10741350 : C10_HOST_DEVICE static inline src_t apply(src_t src) {</span></span>
<span id="L29"><span class="lineNum"> 29</span> <span class="tlaGNC"> 10741350 : return src;</span></span>
<span id="L30"><span class="lineNum"> 30</span> : }</span>
<span id="L31"><span class="lineNum"> 31</span> : };</span>
<span id="L32"><span class="lineNum"> 32</span> : </span>
<span id="L33"><span class="lineNum"> 33</span> : template &lt;typename src_t&gt;</span>
<span id="L34"><span class="lineNum"> 34</span> : struct maybe_real&lt;true, src_t&gt; {</span>
<span id="L35"><span class="lineNum"> 35</span> <span class="tlaUNC tlaBgUNC"> 0 : C10_HOST_DEVICE static inline decltype(auto) apply(src_t src) {</span></span>
<span id="L36"><span class="lineNum"> 36</span> <span class="tlaUNC"> 0 : return src.real();</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> : </span>
<span id="L40"><span class="lineNum"> 40</span> : // Note: deliberately ignores undefined behavior, consistent with NumPy.</span>
<span id="L41"><span class="lineNum"> 41</span> : // PyTorch's type conversions can cause a variety of undefined behavior,</span>
<span id="L42"><span class="lineNum"> 42</span> : // including float to integral overflow and signed to unsigned integer overflow.</span>
<span id="L43"><span class="lineNum"> 43</span> : // Some of this undefined behavior is addressed below.</span>
<span id="L44"><span class="lineNum"> 44</span> : template &lt;typename dest_t, typename src_t&gt;</span>
<span id="L45"><span class="lineNum"> 45</span> : struct static_cast_with_inter_type {</span>
<span id="L46"><span class="lineNum"> 46</span> <span class="tlaGNC tlaBgGNC"> 10741350 : C10_HOST_DEVICE __ubsan_ignore_undefined__ static inline dest_t apply(</span></span>
<span id="L47"><span class="lineNum"> 47</span> : src_t src) {</span>
<span id="L48"><span class="lineNum"> 48</span> <span class="tlaGNC"> 10741350 : constexpr bool real = needs_real&lt;dest_t, src_t&gt;::value;</span></span>
<span id="L49"><span class="lineNum"> 49</span> <span class="tlaGNC"> 10741350 : auto r = maybe_real&lt;real, src_t&gt;::apply(src);</span></span>
<span id="L50"><span class="lineNum"> 50</span> <span class="tlaGNC"> 10741350 : return static_cast&lt;dest_t&gt;(r);</span></span>
<span id="L51"><span class="lineNum"> 51</span> : }</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> : // Partial template instantiation for casting to uint8.</span>
<span id="L55"><span class="lineNum"> 55</span> : // Note: Converting from negative float values to unsigned integer types is</span>
<span id="L56"><span class="lineNum"> 56</span> : // undefined behavior in C++, and current CPU and GPU compilers exhibit</span>
<span id="L57"><span class="lineNum"> 57</span> : // divergent behavior. Casting from negative float values to signed</span>
<span id="L58"><span class="lineNum"> 58</span> : // integer types and then to unsigned integer types is not undefined,</span>
<span id="L59"><span class="lineNum"> 59</span> : // however, so this cast improves the consistency of type conversions</span>
<span id="L60"><span class="lineNum"> 60</span> : // to uint8 across compilers.</span>
<span id="L61"><span class="lineNum"> 61</span> : // Further note: Type conversions across compilers still have other undefined</span>
<span id="L62"><span class="lineNum"> 62</span> : // and divergent behavior.</span>
<span id="L63"><span class="lineNum"> 63</span> : template &lt;typename src_t&gt;</span>
<span id="L64"><span class="lineNum"> 64</span> : struct static_cast_with_inter_type&lt;uint8_t, src_t&gt; {</span>
<span id="L65"><span class="lineNum"> 65</span> : C10_HOST_DEVICE __ubsan_ignore_undefined__ static inline uint8_t apply(</span>
<span id="L66"><span class="lineNum"> 66</span> : src_t src) {</span>
<span id="L67"><span class="lineNum"> 67</span> : constexpr bool real = needs_real&lt;uint8_t, src_t&gt;::value;</span>
<span id="L68"><span class="lineNum"> 68</span> : return static_cast&lt;uint8_t&gt;(</span>
<span id="L69"><span class="lineNum"> 69</span> : static_cast&lt;int64_t&gt;(maybe_real&lt;real, src_t&gt;::apply(src)));</span>
<span id="L70"><span class="lineNum"> 70</span> : }</span>
<span id="L71"><span class="lineNum"> 71</span> : };</span>
<span id="L72"><span class="lineNum"> 72</span> : </span>
<span id="L73"><span class="lineNum"> 73</span> : template &lt;&gt;</span>
<span id="L74"><span class="lineNum"> 74</span> : struct static_cast_with_inter_type&lt;c10::complex&lt;c10::Half&gt;, c10::BFloat16&gt; {</span>
<span id="L75"><span class="lineNum"> 75</span> : C10_HOST_DEVICE __ubsan_ignore_undefined__ static inline c10::complex&lt;</span>
<span id="L76"><span class="lineNum"> 76</span> : c10::Half&gt;</span>
<span id="L77"><span class="lineNum"> 77</span> : apply(c10::BFloat16 src) {</span>
<span id="L78"><span class="lineNum"> 78</span> : return static_cast&lt;c10::complex&lt;c10::Half&gt;&gt;(c10::complex&lt;float&gt;{src});</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> : </span>
<span id="L82"><span class="lineNum"> 82</span> : template &lt;&gt;</span>
<span id="L83"><span class="lineNum"> 83</span> : struct static_cast_with_inter_type&lt;c10::complex&lt;c10::Half&gt;, c10::Float8_e5m2&gt; {</span>
<span id="L84"><span class="lineNum"> 84</span> : C10_HOST_DEVICE __ubsan_ignore_undefined__ static inline c10::complex&lt;</span>
<span id="L85"><span class="lineNum"> 85</span> : c10::Half&gt;</span>
<span id="L86"><span class="lineNum"> 86</span> : apply(c10::Float8_e5m2 src) {</span>
<span id="L87"><span class="lineNum"> 87</span> : return static_cast&lt;c10::complex&lt;c10::Half&gt;&gt;(c10::complex&lt;float&gt;{src});</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;&gt;</span>
<span id="L92"><span class="lineNum"> 92</span> : struct static_cast_with_inter_type&lt;</span>
<span id="L93"><span class="lineNum"> 93</span> : c10::complex&lt;c10::Half&gt;,</span>
<span id="L94"><span class="lineNum"> 94</span> : c10::Float8_e4m3fn&gt; {</span>
<span id="L95"><span class="lineNum"> 95</span> : C10_HOST_DEVICE __ubsan_ignore_undefined__ static inline c10::complex&lt;</span>
<span id="L96"><span class="lineNum"> 96</span> : c10::Half&gt;</span>
<span id="L97"><span class="lineNum"> 97</span> : apply(c10::Float8_e4m3fn src) {</span>
<span id="L98"><span class="lineNum"> 98</span> : return static_cast&lt;c10::complex&lt;c10::Half&gt;&gt;(c10::complex&lt;float&gt;{src});</span>
<span id="L99"><span class="lineNum"> 99</span> : }</span>
<span id="L100"><span class="lineNum"> 100</span> : };</span>
<span id="L101"><span class="lineNum"> 101</span> : </span>
<span id="L102"><span class="lineNum"> 102</span> : template &lt;&gt;</span>
<span id="L103"><span class="lineNum"> 103</span> : struct static_cast_with_inter_type&lt;c10::complex&lt;c10::Half&gt;, c10::Half&gt; {</span>
<span id="L104"><span class="lineNum"> 104</span> : C10_HOST_DEVICE __ubsan_ignore_undefined__ static inline c10::complex&lt;</span>
<span id="L105"><span class="lineNum"> 105</span> : c10::Half&gt;</span>
<span id="L106"><span class="lineNum"> 106</span> : apply(c10::Half src) {</span>
<span id="L107"><span class="lineNum"> 107</span> : return static_cast&lt;c10::complex&lt;c10::Half&gt;&gt;(c10::complex&lt;float&gt;{src});</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> : template &lt;&gt;</span>
<span id="L112"><span class="lineNum"> 112</span> : struct static_cast_with_inter_type&lt;</span>
<span id="L113"><span class="lineNum"> 113</span> : c10::complex&lt;c10::Half&gt;,</span>
<span id="L114"><span class="lineNum"> 114</span> : c10::complex&lt;double&gt;&gt; {</span>
<span id="L115"><span class="lineNum"> 115</span> : C10_HOST_DEVICE __ubsan_ignore_undefined__ static inline c10::complex&lt;</span>
<span id="L116"><span class="lineNum"> 116</span> : c10::Half&gt;</span>
<span id="L117"><span class="lineNum"> 117</span> : apply(c10::complex&lt;double&gt; src) {</span>
<span id="L118"><span class="lineNum"> 118</span> : return static_cast&lt;c10::complex&lt;c10::Half&gt;&gt;(</span>
<span id="L119"><span class="lineNum"> 119</span> : static_cast&lt;c10::complex&lt;float&gt;&gt;(src));</span>
<span id="L120"><span class="lineNum"> 120</span> : }</span>
<span id="L121"><span class="lineNum"> 121</span> : };</span>
<span id="L122"><span class="lineNum"> 122</span> : </span>
<span id="L123"><span class="lineNum"> 123</span> : template &lt;typename To, typename From&gt;</span>
<span id="L124"><span class="lineNum"> 124</span> <span class="tlaGNC"> 10741350 : C10_HOST_DEVICE To convert(From f) {</span></span>
<span id="L125"><span class="lineNum"> 125</span> <span class="tlaGNC"> 10741350 : return static_cast_with_inter_type&lt;To, From&gt;::apply(f);</span></span>
<span id="L126"><span class="lineNum"> 126</span> : }</span>
<span id="L127"><span class="lineNum"> 127</span> : </span>
<span id="L128"><span class="lineNum"> 128</span> : // Define separately to avoid being inlined and prevent code-size bloat</span>
<span id="L129"><span class="lineNum"> 129</span> : C10_API void report_overflow(const char* name);</span>
<span id="L130"><span class="lineNum"> 130</span> : </span>
<span id="L131"><span class="lineNum"> 131</span> : template &lt;typename To, typename From&gt;</span>
<span id="L132"><span class="lineNum"> 132</span> <span class="tlaGNC"> 7072 : To checked_convert(From f, const char* name) {</span></span>
<span id="L133"><span class="lineNum"> 133</span> : // Converting to bool can't overflow so we exclude this case from checking.</span>
<span id="L134"><span class="lineNum"> 134</span> <span class="tlaGNC"> 7072 : if (!std::is_same&lt;To, bool&gt;::value &amp;&amp; overflows&lt;To, From&gt;(f)) {</span></span>
<span id="L135"><span class="lineNum"> 135</span> <span class="tlaUNC tlaBgUNC"> 0 : report_overflow(name);</span></span>
<span id="L136"><span class="lineNum"> 136</span> : }</span>
<span id="L137"><span class="lineNum"> 137</span> <span class="tlaGNC tlaBgGNC"> 7072 : return convert&lt;To, From&gt;(f);</span></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> : } // namespace c10</span>
<span id="L141"><span class="lineNum"> 141</span> : </span>
<span id="L142"><span class="lineNum"> 142</span> : C10_CLANG_DIAGNOSTIC_POP()</span>
<span id="L143"><span class="lineNum"> 143</span> : </span>
<span id="L144"><span class="lineNum"> 144</span> : // Trigger tests for D25440771. TODO: Remove this line any time you want.</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/c10/util/TypeSafeSignMath.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/c10/util</a> - TypeSafeSignMath.h<span style="font-size: 80%;"> (<a href="TypeSafeSignMath.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">8</td>
<td class="headerCovTableEntry">8</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="TypeSafeSignMath.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="TypeSafeSignMath.h.gcov.html#L81">_ZN3c1016greater_than_maxIllEEbRKT0_</a></td>
<td class="coverFnHi">7072</td>
</tr>
<tr>
<td class="coverFn"><a href="TypeSafeSignMath.h.gcov.html#L135">_ZN3c1016less_than_lowestIllEEbRKT0_</a></td>
<td class="coverFnHi">7072</td>
</tr>
<tr>
<td class="coverFn"><a href="TypeSafeSignMath.h.gcov.html#L93">_ZN3c10L16less_than_lowestIllEEbRKT0_St17integral_constantIbLb0EES5_</a></td>
<td class="coverFnHi">7072</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/c10/util/TypeSafeSignMath.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/c10/util</a> - TypeSafeSignMath.h<span style="font-size: 80%;"> (<a href="TypeSafeSignMath.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">8</td>
<td class="headerCovTableEntry">8</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="TypeSafeSignMath.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="TypeSafeSignMath.h.gcov.html#L81">_ZN3c1016greater_than_maxIllEEbRKT0_</a></td>
<td class="coverFnHi">7072</td>
</tr>
<tr>
<td class="coverFn"><a href="TypeSafeSignMath.h.gcov.html#L135">_ZN3c1016less_than_lowestIllEEbRKT0_</a></td>
<td class="coverFnHi">7072</td>
</tr>
<tr>
<td class="coverFn"><a href="TypeSafeSignMath.h.gcov.html#L93">_ZN3c10L16less_than_lowestIllEEbRKT0_St17integral_constantIbLb0EES5_</a></td>
<td class="coverFnHi">7072</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,220 @@
<!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/c10/util/TypeSafeSignMath.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/c10/util</a> - TypeSafeSignMath.h<span style="font-size: 80%;"> (source / <a href="TypeSafeSignMath.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">8</td>
<td class="headerCovTableEntry">8</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;c10/macros/Macros.h&gt;</span>
<span id="L4"><span class="lineNum"> 4</span> : #include &lt;limits&gt;</span>
<span id="L5"><span class="lineNum"> 5</span> : #include &lt;type_traits&gt;</span>
<span id="L6"><span class="lineNum"> 6</span> : </span>
<span id="L7"><span class="lineNum"> 7</span> : C10_CLANG_DIAGNOSTIC_PUSH()</span>
<span id="L8"><span class="lineNum"> 8</span> : #if C10_CLANG_HAS_WARNING(&quot;-Wstring-conversion&quot;)</span>
<span id="L9"><span class="lineNum"> 9</span> : C10_CLANG_DIAGNOSTIC_IGNORE(&quot;-Wstring-conversion&quot;)</span>
<span id="L10"><span class="lineNum"> 10</span> : #endif</span>
<span id="L11"><span class="lineNum"> 11</span> : #if C10_CLANG_HAS_WARNING(&quot;-Wimplicit-int-float-conversion&quot;)</span>
<span id="L12"><span class="lineNum"> 12</span> : C10_CLANG_DIAGNOSTIC_IGNORE(&quot;-Wimplicit-int-float-conversion&quot;)</span>
<span id="L13"><span class="lineNum"> 13</span> : #endif</span>
<span id="L14"><span class="lineNum"> 14</span> : </span>
<span id="L15"><span class="lineNum"> 15</span> : namespace c10 {</span>
<span id="L16"><span class="lineNum"> 16</span> : </span>
<span id="L17"><span class="lineNum"> 17</span> : /// Returns false since we cannot have x &lt; 0 if x is unsigned.</span>
<span id="L18"><span class="lineNum"> 18</span> : template &lt;typename T&gt;</span>
<span id="L19"><span class="lineNum"> 19</span> : static inline constexpr bool is_negative(</span>
<span id="L20"><span class="lineNum"> 20</span> : const T&amp; /*x*/,</span>
<span id="L21"><span class="lineNum"> 21</span> : std::true_type /*is_unsigned*/) {</span>
<span id="L22"><span class="lineNum"> 22</span> : return false;</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> : /// Returns true if a signed variable x &lt; 0</span>
<span id="L26"><span class="lineNum"> 26</span> : template &lt;typename T&gt;</span>
<span id="L27"><span class="lineNum"> 27</span> : static inline constexpr bool is_negative(</span>
<span id="L28"><span class="lineNum"> 28</span> : const T&amp; x,</span>
<span id="L29"><span class="lineNum"> 29</span> : std::false_type /*is_unsigned*/) {</span>
<span id="L30"><span class="lineNum"> 30</span> : return x &lt; T(0);</span>
<span id="L31"><span class="lineNum"> 31</span> : }</span>
<span id="L32"><span class="lineNum"> 32</span> : </span>
<span id="L33"><span class="lineNum"> 33</span> : /// Returns true if x &lt; 0</span>
<span id="L34"><span class="lineNum"> 34</span> : /// NOTE: Will fail on an unsigned custom type</span>
<span id="L35"><span class="lineNum"> 35</span> : /// For the most part it's possible to fix this if</span>
<span id="L36"><span class="lineNum"> 36</span> : /// the custom type has a constexpr constructor.</span>
<span id="L37"><span class="lineNum"> 37</span> : /// However, notably, c10::Half does not :-(</span>
<span id="L38"><span class="lineNum"> 38</span> : template &lt;typename T&gt;</span>
<span id="L39"><span class="lineNum"> 39</span> : inline constexpr bool is_negative(const T&amp; x) {</span>
<span id="L40"><span class="lineNum"> 40</span> : return is_negative(x, std::is_unsigned&lt;T&gt;());</span>
<span id="L41"><span class="lineNum"> 41</span> : }</span>
<span id="L42"><span class="lineNum"> 42</span> : </span>
<span id="L43"><span class="lineNum"> 43</span> : /// Returns the sign of an unsigned variable x as 0, 1</span>
<span id="L44"><span class="lineNum"> 44</span> : template &lt;typename T&gt;</span>
<span id="L45"><span class="lineNum"> 45</span> : static inline constexpr int signum(const T&amp; x, std::true_type /*is_unsigned*/) {</span>
<span id="L46"><span class="lineNum"> 46</span> : return T(0) &lt; x;</span>
<span id="L47"><span class="lineNum"> 47</span> : }</span>
<span id="L48"><span class="lineNum"> 48</span> : </span>
<span id="L49"><span class="lineNum"> 49</span> : /// Returns the sign of a signed variable x as -1, 0, 1</span>
<span id="L50"><span class="lineNum"> 50</span> : template &lt;typename T&gt;</span>
<span id="L51"><span class="lineNum"> 51</span> : static inline constexpr int signum(</span>
<span id="L52"><span class="lineNum"> 52</span> : const T&amp; x,</span>
<span id="L53"><span class="lineNum"> 53</span> : std::false_type /*is_unsigned*/) {</span>
<span id="L54"><span class="lineNum"> 54</span> : return (T(0) &lt; x) - (x &lt; T(0));</span>
<span id="L55"><span class="lineNum"> 55</span> : }</span>
<span id="L56"><span class="lineNum"> 56</span> : </span>
<span id="L57"><span class="lineNum"> 57</span> : /// Returns the sign of x as -1, 0, 1</span>
<span id="L58"><span class="lineNum"> 58</span> : /// NOTE: Will fail on an unsigned custom type</span>
<span id="L59"><span class="lineNum"> 59</span> : /// For the most part it's possible to fix this if</span>
<span id="L60"><span class="lineNum"> 60</span> : /// the custom type has a constexpr constructor.</span>
<span id="L61"><span class="lineNum"> 61</span> : /// However, notably, c10::Half does not :-(</span>
<span id="L62"><span class="lineNum"> 62</span> : template &lt;typename T&gt;</span>
<span id="L63"><span class="lineNum"> 63</span> : inline constexpr int signum(const T&amp; x) {</span>
<span id="L64"><span class="lineNum"> 64</span> : return signum(x, std::is_unsigned&lt;T&gt;());</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> : /// Returns true if a and b are not both negative</span>
<span id="L68"><span class="lineNum"> 68</span> : template &lt;typename T, typename U&gt;</span>
<span id="L69"><span class="lineNum"> 69</span> : inline constexpr bool signs_differ(const T&amp; a, const U&amp; b) {</span>
<span id="L70"><span class="lineNum"> 70</span> : return is_negative(a) != is_negative(b);</span>
<span id="L71"><span class="lineNum"> 71</span> : }</span>
<span id="L72"><span class="lineNum"> 72</span> : </span>
<span id="L73"><span class="lineNum"> 73</span> : // Suppress sign compare warning when compiling with GCC</span>
<span id="L74"><span class="lineNum"> 74</span> : // as later does not account for short-circuit rule before</span>
<span id="L75"><span class="lineNum"> 75</span> : // raising the warning, see https://godbolt.org/z/Tr3Msnz99</span>
<span id="L76"><span class="lineNum"> 76</span> : #ifdef __GNUC__</span>
<span id="L77"><span class="lineNum"> 77</span> : #pragma GCC diagnostic push</span>
<span id="L78"><span class="lineNum"> 78</span> : #pragma GCC diagnostic ignored &quot;-Wsign-compare&quot;</span>
<span id="L79"><span class="lineNum"> 79</span> : #endif</span>
<span id="L80"><span class="lineNum"> 80</span> : </span>
<span id="L81"><span class="lineNum"> 81</span> : /// Returns true if x is greater than the greatest value of the type Limit</span>
<span id="L82"><span class="lineNum"> 82</span> : template &lt;typename Limit, typename T&gt;</span>
<span id="L83"><span class="lineNum"> 83</span> <span class="tlaGNC tlaBgGNC"> 7072 : inline constexpr bool greater_than_max(const T&amp; x) {</span></span>
<span id="L84"><span class="lineNum"> 84</span> <span class="tlaGNC"> 7072 : constexpr bool can_overflow =</span></span>
<span id="L85"><span class="lineNum"> 85</span> : std::numeric_limits&lt;T&gt;::digits &gt; std::numeric_limits&lt;Limit&gt;::digits;</span>
<span id="L86"><span class="lineNum"> 86</span> <span class="tlaGNC"> 7072 : return can_overflow &amp;&amp; x &gt; std::numeric_limits&lt;Limit&gt;::max();</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> : #ifdef __GNUC__</span>
<span id="L90"><span class="lineNum"> 90</span> : #pragma GCC diagnostic pop</span>
<span id="L91"><span class="lineNum"> 91</span> : #endif</span>
<span id="L92"><span class="lineNum"> 92</span> : </span>
<span id="L93"><span class="lineNum"> 93</span> : /// Returns true if x &lt; lowest(Limit). Standard comparison</span>
<span id="L94"><span class="lineNum"> 94</span> : template &lt;typename Limit, typename T&gt;</span>
<span id="L95"><span class="lineNum"> 95</span> <span class="tlaGNC"> 7072 : static inline constexpr bool less_than_lowest(</span></span>
<span id="L96"><span class="lineNum"> 96</span> : const T&amp; x,</span>
<span id="L97"><span class="lineNum"> 97</span> : std::false_type /*limit_is_unsigned*/,</span>
<span id="L98"><span class="lineNum"> 98</span> : std::false_type /*x_is_unsigned*/) {</span>
<span id="L99"><span class="lineNum"> 99</span> <span class="tlaGNC"> 7072 : return x &lt; std::numeric_limits&lt;Limit&gt;::lowest();</span></span>
<span id="L100"><span class="lineNum"> 100</span> : }</span>
<span id="L101"><span class="lineNum"> 101</span> : </span>
<span id="L102"><span class="lineNum"> 102</span> : /// Returns false since all the limit is signed and therefore includes</span>
<span id="L103"><span class="lineNum"> 103</span> : /// negative values but x cannot be negative because it is unsigned</span>
<span id="L104"><span class="lineNum"> 104</span> : template &lt;typename Limit, typename T&gt;</span>
<span id="L105"><span class="lineNum"> 105</span> : static inline constexpr bool less_than_lowest(</span>
<span id="L106"><span class="lineNum"> 106</span> : const T&amp; /*x*/,</span>
<span id="L107"><span class="lineNum"> 107</span> : std::false_type /*limit_is_unsigned*/,</span>
<span id="L108"><span class="lineNum"> 108</span> : std::true_type /*x_is_unsigned*/) {</span>
<span id="L109"><span class="lineNum"> 109</span> : return false;</span>
<span id="L110"><span class="lineNum"> 110</span> : }</span>
<span id="L111"><span class="lineNum"> 111</span> : </span>
<span id="L112"><span class="lineNum"> 112</span> : /// Returns true if x &lt; 0, where 0 is constructed from T.</span>
<span id="L113"><span class="lineNum"> 113</span> : /// Limit is not signed, so its lower value is zero</span>
<span id="L114"><span class="lineNum"> 114</span> : template &lt;typename Limit, typename T&gt;</span>
<span id="L115"><span class="lineNum"> 115</span> : static inline constexpr bool less_than_lowest(</span>
<span id="L116"><span class="lineNum"> 116</span> : const T&amp; x,</span>
<span id="L117"><span class="lineNum"> 117</span> : std::true_type /*limit_is_unsigned*/,</span>
<span id="L118"><span class="lineNum"> 118</span> : std::false_type /*x_is_unsigned*/) {</span>
<span id="L119"><span class="lineNum"> 119</span> : return x &lt; T(0);</span>
<span id="L120"><span class="lineNum"> 120</span> : }</span>
<span id="L121"><span class="lineNum"> 121</span> : </span>
<span id="L122"><span class="lineNum"> 122</span> : /// Returns false sign both types are unsigned</span>
<span id="L123"><span class="lineNum"> 123</span> : template &lt;typename Limit, typename T&gt;</span>
<span id="L124"><span class="lineNum"> 124</span> : static inline constexpr bool less_than_lowest(</span>
<span id="L125"><span class="lineNum"> 125</span> : const T&amp; /*x*/,</span>
<span id="L126"><span class="lineNum"> 126</span> : std::true_type /*limit_is_unsigned*/,</span>
<span id="L127"><span class="lineNum"> 127</span> : std::true_type /*x_is_unsigned*/) {</span>
<span id="L128"><span class="lineNum"> 128</span> : return false;</span>
<span id="L129"><span class="lineNum"> 129</span> : }</span>
<span id="L130"><span class="lineNum"> 130</span> : </span>
<span id="L131"><span class="lineNum"> 131</span> : /// Returns true if x is less than the lowest value of type T</span>
<span id="L132"><span class="lineNum"> 132</span> : /// NOTE: Will fail on an unsigned custom type</span>
<span id="L133"><span class="lineNum"> 133</span> : /// For the most part it's possible to fix this if</span>
<span id="L134"><span class="lineNum"> 134</span> : /// the custom type has a constexpr constructor.</span>
<span id="L135"><span class="lineNum"> 135</span> : /// However, notably, c10::Half does not :</span>
<span id="L136"><span class="lineNum"> 136</span> : template &lt;typename Limit, typename T&gt;</span>
<span id="L137"><span class="lineNum"> 137</span> <span class="tlaGNC"> 7072 : inline constexpr bool less_than_lowest(const T&amp; x) {</span></span>
<span id="L138"><span class="lineNum"> 138</span> <span class="tlaGNC"> 7072 : return less_than_lowest&lt;Limit&gt;(</span></span>
<span id="L139"><span class="lineNum"> 139</span> <span class="tlaGNC"> 7072 : x, std::is_unsigned&lt;Limit&gt;(), std::is_unsigned&lt;T&gt;());</span></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> : } // namespace c10</span>
<span id="L143"><span class="lineNum"> 143</span> : </span>
<span id="L144"><span class="lineNum"> 144</span> : C10_CLANG_DIAGNOSTIC_POP()</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/c10/util/complex.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/c10/util</a> - complex.h<span style="font-size: 80%;"> (<a href="complex.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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">0</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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">2</td>
<td class="headerCovTableEntry">0</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="complex.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="complex.h.gcov.html#L323">_ZNK3c107complexIdE4imagEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="complex.h.gcov.html#L317">_ZNK3c107complexIdE4realEv</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>

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/c10/util/complex.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/c10/util</a> - complex.h<span style="font-size: 80%;"> (<a href="complex.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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">0</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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">2</td>
<td class="headerCovTableEntry">0</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="complex.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="complex.h.gcov.html#L323">_ZNK3c107complexIdE4imagEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="complex.h.gcov.html#L317">_ZNK3c107complexIdE4realEv</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>

View File

@@ -0,0 +1,696 @@
<!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/c10/util/complex.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/c10/util</a> - complex.h<span style="font-size: 80%;"> (source / <a href="complex.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="headerCovTableEntryLo">0.0&nbsp;%</td>
<td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">0</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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">2</td>
<td class="headerCovTableEntry">0</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;complex&gt;</span>
<span id="L4"><span class="lineNum"> 4</span> : </span>
<span id="L5"><span class="lineNum"> 5</span> : #include &lt;c10/macros/Macros.h&gt;</span>
<span id="L6"><span class="lineNum"> 6</span> : </span>
<span id="L7"><span class="lineNum"> 7</span> : #if defined(__CUDACC__) || defined(__HIPCC__)</span>
<span id="L8"><span class="lineNum"> 8</span> : #include &lt;thrust/complex.h&gt;</span>
<span id="L9"><span class="lineNum"> 9</span> : #endif</span>
<span id="L10"><span class="lineNum"> 10</span> : </span>
<span id="L11"><span class="lineNum"> 11</span> : C10_CLANG_DIAGNOSTIC_PUSH()</span>
<span id="L12"><span class="lineNum"> 12</span> : #if C10_CLANG_HAS_WARNING(&quot;-Wimplicit-float-conversion&quot;)</span>
<span id="L13"><span class="lineNum"> 13</span> : C10_CLANG_DIAGNOSTIC_IGNORE(&quot;-Wimplicit-float-conversion&quot;)</span>
<span id="L14"><span class="lineNum"> 14</span> : #endif</span>
<span id="L15"><span class="lineNum"> 15</span> : #if C10_CLANG_HAS_WARNING(&quot;-Wfloat-conversion&quot;)</span>
<span id="L16"><span class="lineNum"> 16</span> : C10_CLANG_DIAGNOSTIC_IGNORE(&quot;-Wfloat-conversion&quot;)</span>
<span id="L17"><span class="lineNum"> 17</span> : #endif</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> : // c10::complex is an implementation of complex numbers that aims</span>
<span id="L22"><span class="lineNum"> 22</span> : // to work on all devices supported by PyTorch</span>
<span id="L23"><span class="lineNum"> 23</span> : //</span>
<span id="L24"><span class="lineNum"> 24</span> : // Most of the APIs duplicates std::complex</span>
<span id="L25"><span class="lineNum"> 25</span> : // Reference: https://en.cppreference.com/w/cpp/numeric/complex</span>
<span id="L26"><span class="lineNum"> 26</span> : //</span>
<span id="L27"><span class="lineNum"> 27</span> : // [NOTE: Complex Operator Unification]</span>
<span id="L28"><span class="lineNum"> 28</span> : // Operators currently use a mix of std::complex, thrust::complex, and</span>
<span id="L29"><span class="lineNum"> 29</span> : // c10::complex internally. The end state is that all operators will use</span>
<span id="L30"><span class="lineNum"> 30</span> : // c10::complex internally. Until then, there may be some hacks to support all</span>
<span id="L31"><span class="lineNum"> 31</span> : // variants.</span>
<span id="L32"><span class="lineNum"> 32</span> : //</span>
<span id="L33"><span class="lineNum"> 33</span> : //</span>
<span id="L34"><span class="lineNum"> 34</span> : // [Note on Constructors]</span>
<span id="L35"><span class="lineNum"> 35</span> : //</span>
<span id="L36"><span class="lineNum"> 36</span> : // The APIs of constructors are mostly copied from C++ standard:</span>
<span id="L37"><span class="lineNum"> 37</span> : // https://en.cppreference.com/w/cpp/numeric/complex/complex</span>
<span id="L38"><span class="lineNum"> 38</span> : //</span>
<span id="L39"><span class="lineNum"> 39</span> : // Since C++14, all constructors are constexpr in std::complex</span>
<span id="L40"><span class="lineNum"> 40</span> : //</span>
<span id="L41"><span class="lineNum"> 41</span> : // There are three types of constructors:</span>
<span id="L42"><span class="lineNum"> 42</span> : // - initializing from real and imag:</span>
<span id="L43"><span class="lineNum"> 43</span> : // `constexpr complex( const T&amp; re = T(), const T&amp; im = T() );`</span>
<span id="L44"><span class="lineNum"> 44</span> : // - implicitly-declared copy constructor</span>
<span id="L45"><span class="lineNum"> 45</span> : // - converting constructors</span>
<span id="L46"><span class="lineNum"> 46</span> : //</span>
<span id="L47"><span class="lineNum"> 47</span> : // Converting constructors:</span>
<span id="L48"><span class="lineNum"> 48</span> : // - std::complex defines converting constructor between float/double/long</span>
<span id="L49"><span class="lineNum"> 49</span> : // double,</span>
<span id="L50"><span class="lineNum"> 50</span> : // while we define converting constructor between float/double.</span>
<span id="L51"><span class="lineNum"> 51</span> : // - For these converting constructors, upcasting is implicit, downcasting is</span>
<span id="L52"><span class="lineNum"> 52</span> : // explicit.</span>
<span id="L53"><span class="lineNum"> 53</span> : // - We also define explicit casting from std::complex/thrust::complex</span>
<span id="L54"><span class="lineNum"> 54</span> : // - Note that the conversion from thrust is not constexpr, because</span>
<span id="L55"><span class="lineNum"> 55</span> : // thrust does not define them as constexpr ????</span>
<span id="L56"><span class="lineNum"> 56</span> : //</span>
<span id="L57"><span class="lineNum"> 57</span> : //</span>
<span id="L58"><span class="lineNum"> 58</span> : // [Operator =]</span>
<span id="L59"><span class="lineNum"> 59</span> : //</span>
<span id="L60"><span class="lineNum"> 60</span> : // The APIs of operator = are mostly copied from C++ standard:</span>
<span id="L61"><span class="lineNum"> 61</span> : // https://en.cppreference.com/w/cpp/numeric/complex/operator%3D</span>
<span id="L62"><span class="lineNum"> 62</span> : //</span>
<span id="L63"><span class="lineNum"> 63</span> : // Since C++20, all operator= are constexpr. Although we are not building with</span>
<span id="L64"><span class="lineNum"> 64</span> : // C++20, we also obey this behavior.</span>
<span id="L65"><span class="lineNum"> 65</span> : //</span>
<span id="L66"><span class="lineNum"> 66</span> : // There are three types of assign operator:</span>
<span id="L67"><span class="lineNum"> 67</span> : // - Assign a real value from the same scalar type</span>
<span id="L68"><span class="lineNum"> 68</span> : // - In std, this is templated as complex&amp; operator=(const T&amp; x)</span>
<span id="L69"><span class="lineNum"> 69</span> : // with specialization `complex&amp; operator=(T x)` for float/double/long</span>
<span id="L70"><span class="lineNum"> 70</span> : // double Since we only support float and double, on will use `complex&amp;</span>
<span id="L71"><span class="lineNum"> 71</span> : // operator=(T x)`</span>
<span id="L72"><span class="lineNum"> 72</span> : // - Copy assignment operator and converting assignment operator</span>
<span id="L73"><span class="lineNum"> 73</span> : // - There is no specialization of converting assignment operators, which type</span>
<span id="L74"><span class="lineNum"> 74</span> : // is</span>
<span id="L75"><span class="lineNum"> 75</span> : // convertible is solely dependent on whether the scalar type is convertible</span>
<span id="L76"><span class="lineNum"> 76</span> : //</span>
<span id="L77"><span class="lineNum"> 77</span> : // In addition to the standard assignment, we also provide assignment operators</span>
<span id="L78"><span class="lineNum"> 78</span> : // with std and thrust</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> : // [Casting operators]</span>
<span id="L82"><span class="lineNum"> 82</span> : //</span>
<span id="L83"><span class="lineNum"> 83</span> : // std::complex does not have casting operators. We define casting operators</span>
<span id="L84"><span class="lineNum"> 84</span> : // casting to std::complex and thrust::complex</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> : // [Operator &quot;&quot;]</span>
<span id="L88"><span class="lineNum"> 88</span> : //</span>
<span id="L89"><span class="lineNum"> 89</span> : // std::complex has custom literals `i`, `if` and `il` defined in namespace</span>
<span id="L90"><span class="lineNum"> 90</span> : // `std::literals::complex_literals`. We define our own custom literals in the</span>
<span id="L91"><span class="lineNum"> 91</span> : // namespace `c10::complex_literals`. Our custom literals does not follow the</span>
<span id="L92"><span class="lineNum"> 92</span> : // same behavior as in std::complex, instead, we define _if, _id to construct</span>
<span id="L93"><span class="lineNum"> 93</span> : // float/double complex literals.</span>
<span id="L94"><span class="lineNum"> 94</span> : //</span>
<span id="L95"><span class="lineNum"> 95</span> : //</span>
<span id="L96"><span class="lineNum"> 96</span> : // [real() and imag()]</span>
<span id="L97"><span class="lineNum"> 97</span> : //</span>
<span id="L98"><span class="lineNum"> 98</span> : // In C++20, there are two overload of these functions, one it to return the</span>
<span id="L99"><span class="lineNum"> 99</span> : // real/imag, another is to set real/imag, they are both constexpr. We follow</span>
<span id="L100"><span class="lineNum"> 100</span> : // this design.</span>
<span id="L101"><span class="lineNum"> 101</span> : //</span>
<span id="L102"><span class="lineNum"> 102</span> : //</span>
<span id="L103"><span class="lineNum"> 103</span> : // [Operator +=,-=,*=,/=]</span>
<span id="L104"><span class="lineNum"> 104</span> : //</span>
<span id="L105"><span class="lineNum"> 105</span> : // Since C++20, these operators become constexpr. In our implementation, they</span>
<span id="L106"><span class="lineNum"> 106</span> : // are also constexpr.</span>
<span id="L107"><span class="lineNum"> 107</span> : //</span>
<span id="L108"><span class="lineNum"> 108</span> : // There are two types of such operators: operating with a real number, or</span>
<span id="L109"><span class="lineNum"> 109</span> : // operating with another complex number. For the operating with a real number,</span>
<span id="L110"><span class="lineNum"> 110</span> : // the generic template form has argument type `const T &amp;`, while the overload</span>
<span id="L111"><span class="lineNum"> 111</span> : // for float/double/long double has `T`. We will follow the same type as</span>
<span id="L112"><span class="lineNum"> 112</span> : // float/double/long double in std.</span>
<span id="L113"><span class="lineNum"> 113</span> : //</span>
<span id="L114"><span class="lineNum"> 114</span> : // [Unary operator +-]</span>
<span id="L115"><span class="lineNum"> 115</span> : //</span>
<span id="L116"><span class="lineNum"> 116</span> : // Since C++20, they are constexpr. We also make them expr</span>
<span id="L117"><span class="lineNum"> 117</span> : //</span>
<span id="L118"><span class="lineNum"> 118</span> : // [Binary operators +-*/]</span>
<span id="L119"><span class="lineNum"> 119</span> : //</span>
<span id="L120"><span class="lineNum"> 120</span> : // Each operator has three versions (taking + as example):</span>
<span id="L121"><span class="lineNum"> 121</span> : // - complex + complex</span>
<span id="L122"><span class="lineNum"> 122</span> : // - complex + real</span>
<span id="L123"><span class="lineNum"> 123</span> : // - real + complex</span>
<span id="L124"><span class="lineNum"> 124</span> : //</span>
<span id="L125"><span class="lineNum"> 125</span> : // [Operator ==, !=]</span>
<span id="L126"><span class="lineNum"> 126</span> : //</span>
<span id="L127"><span class="lineNum"> 127</span> : // Each operator has three versions (taking == as example):</span>
<span id="L128"><span class="lineNum"> 128</span> : // - complex == complex</span>
<span id="L129"><span class="lineNum"> 129</span> : // - complex == real</span>
<span id="L130"><span class="lineNum"> 130</span> : // - real == complex</span>
<span id="L131"><span class="lineNum"> 131</span> : //</span>
<span id="L132"><span class="lineNum"> 132</span> : // Some of them are removed on C++20, but we decide to keep them</span>
<span id="L133"><span class="lineNum"> 133</span> : //</span>
<span id="L134"><span class="lineNum"> 134</span> : // [Operator &lt;&lt;, &gt;&gt;]</span>
<span id="L135"><span class="lineNum"> 135</span> : //</span>
<span id="L136"><span class="lineNum"> 136</span> : // These are implemented by casting to std::complex</span>
<span id="L137"><span class="lineNum"> 137</span> : //</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> : // TODO(@zasdfgbnm): c10::complex&lt;c10::Half&gt; is not currently supported,</span>
<span id="L141"><span class="lineNum"> 141</span> : // because:</span>
<span id="L142"><span class="lineNum"> 142</span> : // - lots of members and functions of c10::Half are not constexpr</span>
<span id="L143"><span class="lineNum"> 143</span> : // - thrust::complex only support float and double</span>
<span id="L144"><span class="lineNum"> 144</span> : </span>
<span id="L145"><span class="lineNum"> 145</span> : template &lt;typename T&gt;</span>
<span id="L146"><span class="lineNum"> 146</span> : struct alignas(sizeof(T) * 2) complex {</span>
<span id="L147"><span class="lineNum"> 147</span> : using value_type = T;</span>
<span id="L148"><span class="lineNum"> 148</span> : </span>
<span id="L149"><span class="lineNum"> 149</span> : T real_ = T(0);</span>
<span id="L150"><span class="lineNum"> 150</span> : T imag_ = T(0);</span>
<span id="L151"><span class="lineNum"> 151</span> : </span>
<span id="L152"><span class="lineNum"> 152</span> : constexpr complex() = default;</span>
<span id="L153"><span class="lineNum"> 153</span> : C10_HOST_DEVICE constexpr complex(const T&amp; re, const T&amp; im = T())</span>
<span id="L154"><span class="lineNum"> 154</span> : : real_(re), imag_(im) {}</span>
<span id="L155"><span class="lineNum"> 155</span> : template &lt;typename U&gt;</span>
<span id="L156"><span class="lineNum"> 156</span> : explicit constexpr complex(const std::complex&lt;U&gt;&amp; other)</span>
<span id="L157"><span class="lineNum"> 157</span> : : complex(other.real(), other.imag()) {}</span>
<span id="L158"><span class="lineNum"> 158</span> : #if defined(__CUDACC__) || defined(__HIPCC__)</span>
<span id="L159"><span class="lineNum"> 159</span> : template &lt;typename U&gt;</span>
<span id="L160"><span class="lineNum"> 160</span> : explicit C10_HOST_DEVICE complex(const thrust::complex&lt;U&gt;&amp; other)</span>
<span id="L161"><span class="lineNum"> 161</span> : : real_(other.real()), imag_(other.imag()) {}</span>
<span id="L162"><span class="lineNum"> 162</span> : // NOTE can not be implemented as follow due to ROCm bug:</span>
<span id="L163"><span class="lineNum"> 163</span> : // explicit C10_HOST_DEVICE complex(const thrust::complex&lt;U&gt; &amp;other):</span>
<span id="L164"><span class="lineNum"> 164</span> : // complex(other.real(), other.imag()) {}</span>
<span id="L165"><span class="lineNum"> 165</span> : #endif</span>
<span id="L166"><span class="lineNum"> 166</span> : </span>
<span id="L167"><span class="lineNum"> 167</span> : // Use SFINAE to specialize casting constructor for c10::complex&lt;float&gt; and</span>
<span id="L168"><span class="lineNum"> 168</span> : // c10::complex&lt;double&gt;</span>
<span id="L169"><span class="lineNum"> 169</span> : template &lt;typename U = T&gt;</span>
<span id="L170"><span class="lineNum"> 170</span> : C10_HOST_DEVICE explicit constexpr complex(</span>
<span id="L171"><span class="lineNum"> 171</span> : const std::enable_if_t&lt;std::is_same&lt;U, float&gt;::value, complex&lt;double&gt;&gt;&amp;</span>
<span id="L172"><span class="lineNum"> 172</span> : other)</span>
<span id="L173"><span class="lineNum"> 173</span> : : real_(other.real_), imag_(other.imag_) {}</span>
<span id="L174"><span class="lineNum"> 174</span> : template &lt;typename U = T&gt;</span>
<span id="L175"><span class="lineNum"> 175</span> : C10_HOST_DEVICE constexpr complex(</span>
<span id="L176"><span class="lineNum"> 176</span> : const std::enable_if_t&lt;std::is_same&lt;U, double&gt;::value, complex&lt;float&gt;&gt;&amp;</span>
<span id="L177"><span class="lineNum"> 177</span> : other)</span>
<span id="L178"><span class="lineNum"> 178</span> : : real_(other.real_), imag_(other.imag_) {}</span>
<span id="L179"><span class="lineNum"> 179</span> : </span>
<span id="L180"><span class="lineNum"> 180</span> : constexpr complex&lt;T&gt;&amp; operator=(T re) {</span>
<span id="L181"><span class="lineNum"> 181</span> : real_ = re;</span>
<span id="L182"><span class="lineNum"> 182</span> : imag_ = 0;</span>
<span id="L183"><span class="lineNum"> 183</span> : return *this;</span>
<span id="L184"><span class="lineNum"> 184</span> : }</span>
<span id="L185"><span class="lineNum"> 185</span> : </span>
<span id="L186"><span class="lineNum"> 186</span> : constexpr complex&lt;T&gt;&amp; operator+=(T re) {</span>
<span id="L187"><span class="lineNum"> 187</span> : real_ += re;</span>
<span id="L188"><span class="lineNum"> 188</span> : return *this;</span>
<span id="L189"><span class="lineNum"> 189</span> : }</span>
<span id="L190"><span class="lineNum"> 190</span> : </span>
<span id="L191"><span class="lineNum"> 191</span> : constexpr complex&lt;T&gt;&amp; operator-=(T re) {</span>
<span id="L192"><span class="lineNum"> 192</span> : real_ -= re;</span>
<span id="L193"><span class="lineNum"> 193</span> : return *this;</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> : constexpr complex&lt;T&gt;&amp; operator*=(T re) {</span>
<span id="L197"><span class="lineNum"> 197</span> : real_ *= re;</span>
<span id="L198"><span class="lineNum"> 198</span> : imag_ *= re;</span>
<span id="L199"><span class="lineNum"> 199</span> : return *this;</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> : constexpr complex&lt;T&gt;&amp; operator/=(T re) {</span>
<span id="L203"><span class="lineNum"> 203</span> : real_ /= re;</span>
<span id="L204"><span class="lineNum"> 204</span> : imag_ /= re;</span>
<span id="L205"><span class="lineNum"> 205</span> : return *this;</span>
<span id="L206"><span class="lineNum"> 206</span> : }</span>
<span id="L207"><span class="lineNum"> 207</span> : </span>
<span id="L208"><span class="lineNum"> 208</span> : template &lt;typename U&gt;</span>
<span id="L209"><span class="lineNum"> 209</span> : constexpr complex&lt;T&gt;&amp; operator=(const complex&lt;U&gt;&amp; rhs) {</span>
<span id="L210"><span class="lineNum"> 210</span> : real_ = rhs.real();</span>
<span id="L211"><span class="lineNum"> 211</span> : imag_ = rhs.imag();</span>
<span id="L212"><span class="lineNum"> 212</span> : return *this;</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&gt;</span>
<span id="L216"><span class="lineNum"> 216</span> : constexpr complex&lt;T&gt;&amp; operator+=(const complex&lt;U&gt;&amp; rhs) {</span>
<span id="L217"><span class="lineNum"> 217</span> : real_ += rhs.real();</span>
<span id="L218"><span class="lineNum"> 218</span> : imag_ += rhs.imag();</span>
<span id="L219"><span class="lineNum"> 219</span> : return *this;</span>
<span id="L220"><span class="lineNum"> 220</span> : }</span>
<span id="L221"><span class="lineNum"> 221</span> : </span>
<span id="L222"><span class="lineNum"> 222</span> : template &lt;typename U&gt;</span>
<span id="L223"><span class="lineNum"> 223</span> : constexpr complex&lt;T&gt;&amp; operator-=(const complex&lt;U&gt;&amp; rhs) {</span>
<span id="L224"><span class="lineNum"> 224</span> : real_ -= rhs.real();</span>
<span id="L225"><span class="lineNum"> 225</span> : imag_ -= rhs.imag();</span>
<span id="L226"><span class="lineNum"> 226</span> : return *this;</span>
<span id="L227"><span class="lineNum"> 227</span> : }</span>
<span id="L228"><span class="lineNum"> 228</span> : </span>
<span id="L229"><span class="lineNum"> 229</span> : template &lt;typename U&gt;</span>
<span id="L230"><span class="lineNum"> 230</span> : constexpr complex&lt;T&gt;&amp; operator*=(const complex&lt;U&gt;&amp; rhs) {</span>
<span id="L231"><span class="lineNum"> 231</span> : // (a + bi) * (c + di) = (a*c - b*d) + (a * d + b * c) i</span>
<span id="L232"><span class="lineNum"> 232</span> : T a = real_;</span>
<span id="L233"><span class="lineNum"> 233</span> : T b = imag_;</span>
<span id="L234"><span class="lineNum"> 234</span> : U c = rhs.real();</span>
<span id="L235"><span class="lineNum"> 235</span> : U d = rhs.imag();</span>
<span id="L236"><span class="lineNum"> 236</span> : real_ = a * c - b * d;</span>
<span id="L237"><span class="lineNum"> 237</span> : imag_ = a * d + b * c;</span>
<span id="L238"><span class="lineNum"> 238</span> : return *this;</span>
<span id="L239"><span class="lineNum"> 239</span> : }</span>
<span id="L240"><span class="lineNum"> 240</span> : </span>
<span id="L241"><span class="lineNum"> 241</span> : #ifdef __APPLE__</span>
<span id="L242"><span class="lineNum"> 242</span> : #define FORCE_INLINE_APPLE __attribute__((always_inline))</span>
<span id="L243"><span class="lineNum"> 243</span> : #else</span>
<span id="L244"><span class="lineNum"> 244</span> : #define FORCE_INLINE_APPLE</span>
<span id="L245"><span class="lineNum"> 245</span> : #endif</span>
<span id="L246"><span class="lineNum"> 246</span> : template &lt;typename U&gt;</span>
<span id="L247"><span class="lineNum"> 247</span> : constexpr FORCE_INLINE_APPLE complex&lt;T&gt;&amp; operator/=(const complex&lt;U&gt;&amp; rhs)</span>
<span id="L248"><span class="lineNum"> 248</span> : __ubsan_ignore_float_divide_by_zero__ {</span>
<span id="L249"><span class="lineNum"> 249</span> : // (a + bi) / (c + di) = (ac + bd)/(c^2 + d^2) + (bc - ad)/(c^2 + d^2) i</span>
<span id="L250"><span class="lineNum"> 250</span> : // the calculation below follows numpy's complex division</span>
<span id="L251"><span class="lineNum"> 251</span> : T a = real_;</span>
<span id="L252"><span class="lineNum"> 252</span> : T b = imag_;</span>
<span id="L253"><span class="lineNum"> 253</span> : U c = rhs.real();</span>
<span id="L254"><span class="lineNum"> 254</span> : U d = rhs.imag();</span>
<span id="L255"><span class="lineNum"> 255</span> : </span>
<span id="L256"><span class="lineNum"> 256</span> : #if defined(__GNUC__) &amp;&amp; !defined(__clang__)</span>
<span id="L257"><span class="lineNum"> 257</span> : // std::abs is already constexpr by gcc</span>
<span id="L258"><span class="lineNum"> 258</span> : auto abs_c = std::abs(c);</span>
<span id="L259"><span class="lineNum"> 259</span> : auto abs_d = std::abs(d);</span>
<span id="L260"><span class="lineNum"> 260</span> : #else</span>
<span id="L261"><span class="lineNum"> 261</span> : auto abs_c = c &lt; 0 ? -c : c;</span>
<span id="L262"><span class="lineNum"> 262</span> : auto abs_d = d &lt; 0 ? -d : d;</span>
<span id="L263"><span class="lineNum"> 263</span> : #endif</span>
<span id="L264"><span class="lineNum"> 264</span> : </span>
<span id="L265"><span class="lineNum"> 265</span> : if (abs_c &gt;= abs_d) {</span>
<span id="L266"><span class="lineNum"> 266</span> : if (abs_c == 0 &amp;&amp; abs_d == 0) {</span>
<span id="L267"><span class="lineNum"> 267</span> : /* divide by zeros should yield a complex inf or nan */</span>
<span id="L268"><span class="lineNum"> 268</span> : real_ = a / abs_c;</span>
<span id="L269"><span class="lineNum"> 269</span> : imag_ = b / abs_d;</span>
<span id="L270"><span class="lineNum"> 270</span> : } else {</span>
<span id="L271"><span class="lineNum"> 271</span> : auto rat = d / c;</span>
<span id="L272"><span class="lineNum"> 272</span> : auto scl = 1.0 / (c + d * rat);</span>
<span id="L273"><span class="lineNum"> 273</span> : real_ = (a + b * rat) * scl;</span>
<span id="L274"><span class="lineNum"> 274</span> : imag_ = (b - a * rat) * scl;</span>
<span id="L275"><span class="lineNum"> 275</span> : }</span>
<span id="L276"><span class="lineNum"> 276</span> : } else {</span>
<span id="L277"><span class="lineNum"> 277</span> : auto rat = c / d;</span>
<span id="L278"><span class="lineNum"> 278</span> : auto scl = 1.0 / (d + c * rat);</span>
<span id="L279"><span class="lineNum"> 279</span> : real_ = (a * rat + b) * scl;</span>
<span id="L280"><span class="lineNum"> 280</span> : imag_ = (b * rat - a) * scl;</span>
<span id="L281"><span class="lineNum"> 281</span> : }</span>
<span id="L282"><span class="lineNum"> 282</span> : return *this;</span>
<span id="L283"><span class="lineNum"> 283</span> : }</span>
<span id="L284"><span class="lineNum"> 284</span> : #undef FORCE_INLINE_APPLE</span>
<span id="L285"><span class="lineNum"> 285</span> : </span>
<span id="L286"><span class="lineNum"> 286</span> : template &lt;typename U&gt;</span>
<span id="L287"><span class="lineNum"> 287</span> : constexpr complex&lt;T&gt;&amp; operator=(const std::complex&lt;U&gt;&amp; rhs) {</span>
<span id="L288"><span class="lineNum"> 288</span> : real_ = rhs.real();</span>
<span id="L289"><span class="lineNum"> 289</span> : imag_ = rhs.imag();</span>
<span id="L290"><span class="lineNum"> 290</span> : return *this;</span>
<span id="L291"><span class="lineNum"> 291</span> : }</span>
<span id="L292"><span class="lineNum"> 292</span> : </span>
<span id="L293"><span class="lineNum"> 293</span> : #if defined(__CUDACC__) || defined(__HIPCC__)</span>
<span id="L294"><span class="lineNum"> 294</span> : template &lt;typename U&gt;</span>
<span id="L295"><span class="lineNum"> 295</span> : C10_HOST_DEVICE complex&lt;T&gt;&amp; operator=(const thrust::complex&lt;U&gt;&amp; rhs) {</span>
<span id="L296"><span class="lineNum"> 296</span> : real_ = rhs.real();</span>
<span id="L297"><span class="lineNum"> 297</span> : imag_ = rhs.imag();</span>
<span id="L298"><span class="lineNum"> 298</span> : return *this;</span>
<span id="L299"><span class="lineNum"> 299</span> : }</span>
<span id="L300"><span class="lineNum"> 300</span> : #endif</span>
<span id="L301"><span class="lineNum"> 301</span> : </span>
<span id="L302"><span class="lineNum"> 302</span> : template &lt;typename U&gt;</span>
<span id="L303"><span class="lineNum"> 303</span> : explicit constexpr operator std::complex&lt;U&gt;() const {</span>
<span id="L304"><span class="lineNum"> 304</span> : return std::complex&lt;U&gt;(std::complex&lt;T&gt;(real(), imag()));</span>
<span id="L305"><span class="lineNum"> 305</span> : }</span>
<span id="L306"><span class="lineNum"> 306</span> : </span>
<span id="L307"><span class="lineNum"> 307</span> : #if defined(__CUDACC__) || defined(__HIPCC__)</span>
<span id="L308"><span class="lineNum"> 308</span> : template &lt;typename U&gt;</span>
<span id="L309"><span class="lineNum"> 309</span> : C10_HOST_DEVICE explicit operator thrust::complex&lt;U&gt;() const {</span>
<span id="L310"><span class="lineNum"> 310</span> : return static_cast&lt;thrust::complex&lt;U&gt;&gt;(thrust::complex&lt;T&gt;(real(), imag()));</span>
<span id="L311"><span class="lineNum"> 311</span> : }</span>
<span id="L312"><span class="lineNum"> 312</span> : #endif</span>
<span id="L313"><span class="lineNum"> 313</span> : </span>
<span id="L314"><span class="lineNum"> 314</span> : // consistent with NumPy behavior</span>
<span id="L315"><span class="lineNum"> 315</span> : explicit constexpr operator bool() const {</span>
<span id="L316"><span class="lineNum"> 316</span> : return real() || imag();</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> <span class="tlaUNC tlaBgUNC"> 0 : C10_HOST_DEVICE constexpr T real() const {</span></span>
<span id="L320"><span class="lineNum"> 320</span> <span class="tlaUNC"> 0 : return real_;</span></span>
<span id="L321"><span class="lineNum"> 321</span> : }</span>
<span id="L322"><span class="lineNum"> 322</span> : constexpr void real(T value) {</span>
<span id="L323"><span class="lineNum"> 323</span> : real_ = value;</span>
<span id="L324"><span class="lineNum"> 324</span> : }</span>
<span id="L325"><span class="lineNum"> 325</span> <span class="tlaUNC"> 0 : constexpr T imag() const {</span></span>
<span id="L326"><span class="lineNum"> 326</span> <span class="tlaUNC"> 0 : return imag_;</span></span>
<span id="L327"><span class="lineNum"> 327</span> : }</span>
<span id="L328"><span class="lineNum"> 328</span> : constexpr void imag(T value) {</span>
<span id="L329"><span class="lineNum"> 329</span> : imag_ = value;</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> : </span>
<span id="L333"><span class="lineNum"> 333</span> : namespace complex_literals {</span>
<span id="L334"><span class="lineNum"> 334</span> : </span>
<span id="L335"><span class="lineNum"> 335</span> : constexpr complex&lt;float&gt; operator&quot;&quot; _if(long double imag) {</span>
<span id="L336"><span class="lineNum"> 336</span> : return complex&lt;float&gt;(0.0f, static_cast&lt;float&gt;(imag));</span>
<span id="L337"><span class="lineNum"> 337</span> : }</span>
<span id="L338"><span class="lineNum"> 338</span> : </span>
<span id="L339"><span class="lineNum"> 339</span> : constexpr complex&lt;double&gt; operator&quot;&quot; _id(long double imag) {</span>
<span id="L340"><span class="lineNum"> 340</span> : return complex&lt;double&gt;(0.0, static_cast&lt;double&gt;(imag));</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> : constexpr complex&lt;float&gt; operator&quot;&quot; _if(unsigned long long imag) {</span>
<span id="L344"><span class="lineNum"> 344</span> : return complex&lt;float&gt;(0.0f, static_cast&lt;float&gt;(imag));</span>
<span id="L345"><span class="lineNum"> 345</span> : }</span>
<span id="L346"><span class="lineNum"> 346</span> : </span>
<span id="L347"><span class="lineNum"> 347</span> : constexpr complex&lt;double&gt; operator&quot;&quot; _id(unsigned long long imag) {</span>
<span id="L348"><span class="lineNum"> 348</span> : return complex&lt;double&gt;(0.0, static_cast&lt;double&gt;(imag));</span>
<span id="L349"><span class="lineNum"> 349</span> : }</span>
<span id="L350"><span class="lineNum"> 350</span> : </span>
<span id="L351"><span class="lineNum"> 351</span> : } // namespace complex_literals</span>
<span id="L352"><span class="lineNum"> 352</span> : </span>
<span id="L353"><span class="lineNum"> 353</span> : template &lt;typename T&gt;</span>
<span id="L354"><span class="lineNum"> 354</span> : constexpr complex&lt;T&gt; operator+(const complex&lt;T&gt;&amp; val) {</span>
<span id="L355"><span class="lineNum"> 355</span> : return val;</span>
<span id="L356"><span class="lineNum"> 356</span> : }</span>
<span id="L357"><span class="lineNum"> 357</span> : </span>
<span id="L358"><span class="lineNum"> 358</span> : template &lt;typename T&gt;</span>
<span id="L359"><span class="lineNum"> 359</span> : constexpr complex&lt;T&gt; operator-(const complex&lt;T&gt;&amp; val) {</span>
<span id="L360"><span class="lineNum"> 360</span> : return complex&lt;T&gt;(-val.real(), -val.imag());</span>
<span id="L361"><span class="lineNum"> 361</span> : }</span>
<span id="L362"><span class="lineNum"> 362</span> : </span>
<span id="L363"><span class="lineNum"> 363</span> : template &lt;typename T&gt;</span>
<span id="L364"><span class="lineNum"> 364</span> : constexpr complex&lt;T&gt; operator+(const complex&lt;T&gt;&amp; lhs, const complex&lt;T&gt;&amp; rhs) {</span>
<span id="L365"><span class="lineNum"> 365</span> : complex&lt;T&gt; result = lhs;</span>
<span id="L366"><span class="lineNum"> 366</span> : return result += rhs;</span>
<span id="L367"><span class="lineNum"> 367</span> : }</span>
<span id="L368"><span class="lineNum"> 368</span> : </span>
<span id="L369"><span class="lineNum"> 369</span> : template &lt;typename T&gt;</span>
<span id="L370"><span class="lineNum"> 370</span> : constexpr complex&lt;T&gt; operator+(const complex&lt;T&gt;&amp; lhs, const T&amp; rhs) {</span>
<span id="L371"><span class="lineNum"> 371</span> : complex&lt;T&gt; result = lhs;</span>
<span id="L372"><span class="lineNum"> 372</span> : return result += rhs;</span>
<span id="L373"><span class="lineNum"> 373</span> : }</span>
<span id="L374"><span class="lineNum"> 374</span> : </span>
<span id="L375"><span class="lineNum"> 375</span> : template &lt;typename T&gt;</span>
<span id="L376"><span class="lineNum"> 376</span> : constexpr complex&lt;T&gt; operator+(const T&amp; lhs, const complex&lt;T&gt;&amp; rhs) {</span>
<span id="L377"><span class="lineNum"> 377</span> : return complex&lt;T&gt;(lhs + rhs.real(), rhs.imag());</span>
<span id="L378"><span class="lineNum"> 378</span> : }</span>
<span id="L379"><span class="lineNum"> 379</span> : </span>
<span id="L380"><span class="lineNum"> 380</span> : template &lt;typename T&gt;</span>
<span id="L381"><span class="lineNum"> 381</span> : constexpr complex&lt;T&gt; operator-(const complex&lt;T&gt;&amp; lhs, const complex&lt;T&gt;&amp; rhs) {</span>
<span id="L382"><span class="lineNum"> 382</span> : complex&lt;T&gt; result = lhs;</span>
<span id="L383"><span class="lineNum"> 383</span> : return result -= rhs;</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> : template &lt;typename T&gt;</span>
<span id="L387"><span class="lineNum"> 387</span> : constexpr complex&lt;T&gt; operator-(const complex&lt;T&gt;&amp; lhs, const T&amp; rhs) {</span>
<span id="L388"><span class="lineNum"> 388</span> : complex&lt;T&gt; result = lhs;</span>
<span id="L389"><span class="lineNum"> 389</span> : return result -= rhs;</span>
<span id="L390"><span class="lineNum"> 390</span> : }</span>
<span id="L391"><span class="lineNum"> 391</span> : </span>
<span id="L392"><span class="lineNum"> 392</span> : template &lt;typename T&gt;</span>
<span id="L393"><span class="lineNum"> 393</span> : constexpr complex&lt;T&gt; operator-(const T&amp; lhs, const complex&lt;T&gt;&amp; rhs) {</span>
<span id="L394"><span class="lineNum"> 394</span> : complex&lt;T&gt; result = -rhs;</span>
<span id="L395"><span class="lineNum"> 395</span> : return result += lhs;</span>
<span id="L396"><span class="lineNum"> 396</span> : }</span>
<span id="L397"><span class="lineNum"> 397</span> : </span>
<span id="L398"><span class="lineNum"> 398</span> : template &lt;typename T&gt;</span>
<span id="L399"><span class="lineNum"> 399</span> : constexpr complex&lt;T&gt; operator*(const complex&lt;T&gt;&amp; lhs, const complex&lt;T&gt;&amp; rhs) {</span>
<span id="L400"><span class="lineNum"> 400</span> : complex&lt;T&gt; result = lhs;</span>
<span id="L401"><span class="lineNum"> 401</span> : return result *= rhs;</span>
<span id="L402"><span class="lineNum"> 402</span> : }</span>
<span id="L403"><span class="lineNum"> 403</span> : </span>
<span id="L404"><span class="lineNum"> 404</span> : template &lt;typename T&gt;</span>
<span id="L405"><span class="lineNum"> 405</span> : constexpr complex&lt;T&gt; operator*(const complex&lt;T&gt;&amp; lhs, const T&amp; rhs) {</span>
<span id="L406"><span class="lineNum"> 406</span> : complex&lt;T&gt; result = lhs;</span>
<span id="L407"><span class="lineNum"> 407</span> : return result *= rhs;</span>
<span id="L408"><span class="lineNum"> 408</span> : }</span>
<span id="L409"><span class="lineNum"> 409</span> : </span>
<span id="L410"><span class="lineNum"> 410</span> : template &lt;typename T&gt;</span>
<span id="L411"><span class="lineNum"> 411</span> : constexpr complex&lt;T&gt; operator*(const T&amp; lhs, const complex&lt;T&gt;&amp; rhs) {</span>
<span id="L412"><span class="lineNum"> 412</span> : complex&lt;T&gt; result = rhs;</span>
<span id="L413"><span class="lineNum"> 413</span> : return result *= lhs;</span>
<span id="L414"><span class="lineNum"> 414</span> : }</span>
<span id="L415"><span class="lineNum"> 415</span> : </span>
<span id="L416"><span class="lineNum"> 416</span> : template &lt;typename T&gt;</span>
<span id="L417"><span class="lineNum"> 417</span> : constexpr complex&lt;T&gt; operator/(const complex&lt;T&gt;&amp; lhs, const complex&lt;T&gt;&amp; rhs) {</span>
<span id="L418"><span class="lineNum"> 418</span> : complex&lt;T&gt; result = lhs;</span>
<span id="L419"><span class="lineNum"> 419</span> : return result /= rhs;</span>
<span id="L420"><span class="lineNum"> 420</span> : }</span>
<span id="L421"><span class="lineNum"> 421</span> : </span>
<span id="L422"><span class="lineNum"> 422</span> : template &lt;typename T&gt;</span>
<span id="L423"><span class="lineNum"> 423</span> : constexpr complex&lt;T&gt; operator/(const complex&lt;T&gt;&amp; lhs, const T&amp; rhs) {</span>
<span id="L424"><span class="lineNum"> 424</span> : complex&lt;T&gt; result = lhs;</span>
<span id="L425"><span class="lineNum"> 425</span> : return result /= rhs;</span>
<span id="L426"><span class="lineNum"> 426</span> : }</span>
<span id="L427"><span class="lineNum"> 427</span> : </span>
<span id="L428"><span class="lineNum"> 428</span> : template &lt;typename T&gt;</span>
<span id="L429"><span class="lineNum"> 429</span> : constexpr complex&lt;T&gt; operator/(const T&amp; lhs, const complex&lt;T&gt;&amp; rhs) {</span>
<span id="L430"><span class="lineNum"> 430</span> : complex&lt;T&gt; result(lhs, T());</span>
<span id="L431"><span class="lineNum"> 431</span> : return result /= rhs;</span>
<span id="L432"><span class="lineNum"> 432</span> : }</span>
<span id="L433"><span class="lineNum"> 433</span> : </span>
<span id="L434"><span class="lineNum"> 434</span> : // Define operators between integral scalars and c10::complex. std::complex does</span>
<span id="L435"><span class="lineNum"> 435</span> : // not support this when T is a floating-point number. This is useful because it</span>
<span id="L436"><span class="lineNum"> 436</span> : // saves a lot of &quot;static_cast&quot; when operate a complex and an integer. This</span>
<span id="L437"><span class="lineNum"> 437</span> : // makes the code both less verbose and potentially more efficient.</span>
<span id="L438"><span class="lineNum"> 438</span> : #define COMPLEX_INTEGER_OP_TEMPLATE_CONDITION \</span>
<span id="L439"><span class="lineNum"> 439</span> : typename std::enable_if_t&lt; \</span>
<span id="L440"><span class="lineNum"> 440</span> : std::is_floating_point&lt;fT&gt;::value &amp;&amp; std::is_integral&lt;iT&gt;::value, \</span>
<span id="L441"><span class="lineNum"> 441</span> : int&gt; = 0</span>
<span id="L442"><span class="lineNum"> 442</span> : </span>
<span id="L443"><span class="lineNum"> 443</span> : template &lt;typename fT, typename iT, COMPLEX_INTEGER_OP_TEMPLATE_CONDITION&gt;</span>
<span id="L444"><span class="lineNum"> 444</span> : constexpr c10::complex&lt;fT&gt; operator+(const c10::complex&lt;fT&gt;&amp; a, const iT&amp; b) {</span>
<span id="L445"><span class="lineNum"> 445</span> : return a + static_cast&lt;fT&gt;(b);</span>
<span id="L446"><span class="lineNum"> 446</span> : }</span>
<span id="L447"><span class="lineNum"> 447</span> : </span>
<span id="L448"><span class="lineNum"> 448</span> : template &lt;typename fT, typename iT, COMPLEX_INTEGER_OP_TEMPLATE_CONDITION&gt;</span>
<span id="L449"><span class="lineNum"> 449</span> : constexpr c10::complex&lt;fT&gt; operator+(const iT&amp; a, const c10::complex&lt;fT&gt;&amp; b) {</span>
<span id="L450"><span class="lineNum"> 450</span> : return static_cast&lt;fT&gt;(a) + b;</span>
<span id="L451"><span class="lineNum"> 451</span> : }</span>
<span id="L452"><span class="lineNum"> 452</span> : </span>
<span id="L453"><span class="lineNum"> 453</span> : template &lt;typename fT, typename iT, COMPLEX_INTEGER_OP_TEMPLATE_CONDITION&gt;</span>
<span id="L454"><span class="lineNum"> 454</span> : constexpr c10::complex&lt;fT&gt; operator-(const c10::complex&lt;fT&gt;&amp; a, const iT&amp; b) {</span>
<span id="L455"><span class="lineNum"> 455</span> : return a - static_cast&lt;fT&gt;(b);</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> : template &lt;typename fT, typename iT, COMPLEX_INTEGER_OP_TEMPLATE_CONDITION&gt;</span>
<span id="L459"><span class="lineNum"> 459</span> : constexpr c10::complex&lt;fT&gt; operator-(const iT&amp; a, const c10::complex&lt;fT&gt;&amp; b) {</span>
<span id="L460"><span class="lineNum"> 460</span> : return static_cast&lt;fT&gt;(a) - b;</span>
<span id="L461"><span class="lineNum"> 461</span> : }</span>
<span id="L462"><span class="lineNum"> 462</span> : </span>
<span id="L463"><span class="lineNum"> 463</span> : template &lt;typename fT, typename iT, COMPLEX_INTEGER_OP_TEMPLATE_CONDITION&gt;</span>
<span id="L464"><span class="lineNum"> 464</span> : constexpr c10::complex&lt;fT&gt; operator*(const c10::complex&lt;fT&gt;&amp; a, const iT&amp; b) {</span>
<span id="L465"><span class="lineNum"> 465</span> : return a * static_cast&lt;fT&gt;(b);</span>
<span id="L466"><span class="lineNum"> 466</span> : }</span>
<span id="L467"><span class="lineNum"> 467</span> : </span>
<span id="L468"><span class="lineNum"> 468</span> : template &lt;typename fT, typename iT, COMPLEX_INTEGER_OP_TEMPLATE_CONDITION&gt;</span>
<span id="L469"><span class="lineNum"> 469</span> : constexpr c10::complex&lt;fT&gt; operator*(const iT&amp; a, const c10::complex&lt;fT&gt;&amp; b) {</span>
<span id="L470"><span class="lineNum"> 470</span> : return static_cast&lt;fT&gt;(a) * b;</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> : template &lt;typename fT, typename iT, COMPLEX_INTEGER_OP_TEMPLATE_CONDITION&gt;</span>
<span id="L474"><span class="lineNum"> 474</span> : constexpr c10::complex&lt;fT&gt; operator/(const c10::complex&lt;fT&gt;&amp; a, const iT&amp; b) {</span>
<span id="L475"><span class="lineNum"> 475</span> : return a / static_cast&lt;fT&gt;(b);</span>
<span id="L476"><span class="lineNum"> 476</span> : }</span>
<span id="L477"><span class="lineNum"> 477</span> : </span>
<span id="L478"><span class="lineNum"> 478</span> : template &lt;typename fT, typename iT, COMPLEX_INTEGER_OP_TEMPLATE_CONDITION&gt;</span>
<span id="L479"><span class="lineNum"> 479</span> : constexpr c10::complex&lt;fT&gt; operator/(const iT&amp; a, const c10::complex&lt;fT&gt;&amp; b) {</span>
<span id="L480"><span class="lineNum"> 480</span> : return static_cast&lt;fT&gt;(a) / b;</span>
<span id="L481"><span class="lineNum"> 481</span> : }</span>
<span id="L482"><span class="lineNum"> 482</span> : </span>
<span id="L483"><span class="lineNum"> 483</span> : #undef COMPLEX_INTEGER_OP_TEMPLATE_CONDITION</span>
<span id="L484"><span class="lineNum"> 484</span> : </span>
<span id="L485"><span class="lineNum"> 485</span> : template &lt;typename T&gt;</span>
<span id="L486"><span class="lineNum"> 486</span> : constexpr bool operator==(const complex&lt;T&gt;&amp; lhs, const complex&lt;T&gt;&amp; rhs) {</span>
<span id="L487"><span class="lineNum"> 487</span> : return (lhs.real() == rhs.real()) &amp;&amp; (lhs.imag() == rhs.imag());</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> : template &lt;typename T&gt;</span>
<span id="L491"><span class="lineNum"> 491</span> : constexpr bool operator==(const complex&lt;T&gt;&amp; lhs, const T&amp; rhs) {</span>
<span id="L492"><span class="lineNum"> 492</span> : return (lhs.real() == rhs) &amp;&amp; (lhs.imag() == T());</span>
<span id="L493"><span class="lineNum"> 493</span> : }</span>
<span id="L494"><span class="lineNum"> 494</span> : </span>
<span id="L495"><span class="lineNum"> 495</span> : template &lt;typename T&gt;</span>
<span id="L496"><span class="lineNum"> 496</span> : constexpr bool operator==(const T&amp; lhs, const complex&lt;T&gt;&amp; rhs) {</span>
<span id="L497"><span class="lineNum"> 497</span> : return (lhs == rhs.real()) &amp;&amp; (T() == rhs.imag());</span>
<span id="L498"><span class="lineNum"> 498</span> : }</span>
<span id="L499"><span class="lineNum"> 499</span> : </span>
<span id="L500"><span class="lineNum"> 500</span> : template &lt;typename T&gt;</span>
<span id="L501"><span class="lineNum"> 501</span> : constexpr bool operator!=(const complex&lt;T&gt;&amp; lhs, const complex&lt;T&gt;&amp; rhs) {</span>
<span id="L502"><span class="lineNum"> 502</span> : return !(lhs == rhs);</span>
<span id="L503"><span class="lineNum"> 503</span> : }</span>
<span id="L504"><span class="lineNum"> 504</span> : </span>
<span id="L505"><span class="lineNum"> 505</span> : template &lt;typename T&gt;</span>
<span id="L506"><span class="lineNum"> 506</span> : constexpr bool operator!=(const complex&lt;T&gt;&amp; lhs, const T&amp; rhs) {</span>
<span id="L507"><span class="lineNum"> 507</span> : return !(lhs == rhs);</span>
<span id="L508"><span class="lineNum"> 508</span> : }</span>
<span id="L509"><span class="lineNum"> 509</span> : </span>
<span id="L510"><span class="lineNum"> 510</span> : template &lt;typename T&gt;</span>
<span id="L511"><span class="lineNum"> 511</span> : constexpr bool operator!=(const T&amp; lhs, const complex&lt;T&gt;&amp; rhs) {</span>
<span id="L512"><span class="lineNum"> 512</span> : return !(lhs == rhs);</span>
<span id="L513"><span class="lineNum"> 513</span> : }</span>
<span id="L514"><span class="lineNum"> 514</span> : </span>
<span id="L515"><span class="lineNum"> 515</span> : template &lt;typename T, typename CharT, typename Traits&gt;</span>
<span id="L516"><span class="lineNum"> 516</span> : std::basic_ostream&lt;CharT, Traits&gt;&amp; operator&lt;&lt;(</span>
<span id="L517"><span class="lineNum"> 517</span> : std::basic_ostream&lt;CharT, Traits&gt;&amp; os,</span>
<span id="L518"><span class="lineNum"> 518</span> : const complex&lt;T&gt;&amp; x) {</span>
<span id="L519"><span class="lineNum"> 519</span> : return (os &lt;&lt; static_cast&lt;std::complex&lt;T&gt;&gt;(x));</span>
<span id="L520"><span class="lineNum"> 520</span> : }</span>
<span id="L521"><span class="lineNum"> 521</span> : </span>
<span id="L522"><span class="lineNum"> 522</span> : template &lt;typename T, typename CharT, typename Traits&gt;</span>
<span id="L523"><span class="lineNum"> 523</span> : std::basic_istream&lt;CharT, Traits&gt;&amp; operator&gt;&gt;(</span>
<span id="L524"><span class="lineNum"> 524</span> : std::basic_istream&lt;CharT, Traits&gt;&amp; is,</span>
<span id="L525"><span class="lineNum"> 525</span> : complex&lt;T&gt;&amp; x) {</span>
<span id="L526"><span class="lineNum"> 526</span> : std::complex&lt;T&gt; tmp;</span>
<span id="L527"><span class="lineNum"> 527</span> : is &gt;&gt; tmp;</span>
<span id="L528"><span class="lineNum"> 528</span> : x = tmp;</span>
<span id="L529"><span class="lineNum"> 529</span> : return is;</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> : } // namespace c10</span>
<span id="L533"><span class="lineNum"> 533</span> : </span>
<span id="L534"><span class="lineNum"> 534</span> : // std functions</span>
<span id="L535"><span class="lineNum"> 535</span> : //</span>
<span id="L536"><span class="lineNum"> 536</span> : // The implementation of these functions also follow the design of C++20</span>
<span id="L537"><span class="lineNum"> 537</span> : </span>
<span id="L538"><span class="lineNum"> 538</span> : namespace std {</span>
<span id="L539"><span class="lineNum"> 539</span> : </span>
<span id="L540"><span class="lineNum"> 540</span> : template &lt;typename T&gt;</span>
<span id="L541"><span class="lineNum"> 541</span> : constexpr T real(const c10::complex&lt;T&gt;&amp; z) {</span>
<span id="L542"><span class="lineNum"> 542</span> : return z.real();</span>
<span id="L543"><span class="lineNum"> 543</span> : }</span>
<span id="L544"><span class="lineNum"> 544</span> : </span>
<span id="L545"><span class="lineNum"> 545</span> : template &lt;typename T&gt;</span>
<span id="L546"><span class="lineNum"> 546</span> : constexpr T imag(const c10::complex&lt;T&gt;&amp; z) {</span>
<span id="L547"><span class="lineNum"> 547</span> : return z.imag();</span>
<span id="L548"><span class="lineNum"> 548</span> : }</span>
<span id="L549"><span class="lineNum"> 549</span> : </span>
<span id="L550"><span class="lineNum"> 550</span> : template &lt;typename T&gt;</span>
<span id="L551"><span class="lineNum"> 551</span> : C10_HOST_DEVICE T abs(const c10::complex&lt;T&gt;&amp; z) {</span>
<span id="L552"><span class="lineNum"> 552</span> : #if defined(__CUDACC__) || defined(__HIPCC__)</span>
<span id="L553"><span class="lineNum"> 553</span> : return thrust::abs(static_cast&lt;thrust::complex&lt;T&gt;&gt;(z));</span>
<span id="L554"><span class="lineNum"> 554</span> : #else</span>
<span id="L555"><span class="lineNum"> 555</span> : return std::abs(static_cast&lt;std::complex&lt;T&gt;&gt;(z));</span>
<span id="L556"><span class="lineNum"> 556</span> : #endif</span>
<span id="L557"><span class="lineNum"> 557</span> : }</span>
<span id="L558"><span class="lineNum"> 558</span> : </span>
<span id="L559"><span class="lineNum"> 559</span> : #if defined(USE_ROCM)</span>
<span id="L560"><span class="lineNum"> 560</span> : #define ROCm_Bug(x)</span>
<span id="L561"><span class="lineNum"> 561</span> : #else</span>
<span id="L562"><span class="lineNum"> 562</span> : #define ROCm_Bug(x) x</span>
<span id="L563"><span class="lineNum"> 563</span> : #endif</span>
<span id="L564"><span class="lineNum"> 564</span> : </span>
<span id="L565"><span class="lineNum"> 565</span> : template &lt;typename T&gt;</span>
<span id="L566"><span class="lineNum"> 566</span> : C10_HOST_DEVICE T arg(const c10::complex&lt;T&gt;&amp; z) {</span>
<span id="L567"><span class="lineNum"> 567</span> : return ROCm_Bug(std)::atan2(std::imag(z), std::real(z));</span>
<span id="L568"><span class="lineNum"> 568</span> : }</span>
<span id="L569"><span class="lineNum"> 569</span> : </span>
<span id="L570"><span class="lineNum"> 570</span> : #undef ROCm_Bug</span>
<span id="L571"><span class="lineNum"> 571</span> : </span>
<span id="L572"><span class="lineNum"> 572</span> : template &lt;typename T&gt;</span>
<span id="L573"><span class="lineNum"> 573</span> : constexpr T norm(const c10::complex&lt;T&gt;&amp; z) {</span>
<span id="L574"><span class="lineNum"> 574</span> : return z.real() * z.real() + z.imag() * z.imag();</span>
<span id="L575"><span class="lineNum"> 575</span> : }</span>
<span id="L576"><span class="lineNum"> 576</span> : </span>
<span id="L577"><span class="lineNum"> 577</span> : // For std::conj, there are other versions of it:</span>
<span id="L578"><span class="lineNum"> 578</span> : // constexpr std::complex&lt;float&gt; conj( float z );</span>
<span id="L579"><span class="lineNum"> 579</span> : // template&lt; class DoubleOrInteger &gt;</span>
<span id="L580"><span class="lineNum"> 580</span> : // constexpr std::complex&lt;double&gt; conj( DoubleOrInteger z );</span>
<span id="L581"><span class="lineNum"> 581</span> : // constexpr std::complex&lt;long double&gt; conj( long double z );</span>
<span id="L582"><span class="lineNum"> 582</span> : // These are not implemented</span>
<span id="L583"><span class="lineNum"> 583</span> : // TODO(@zasdfgbnm): implement them as c10::conj</span>
<span id="L584"><span class="lineNum"> 584</span> : template &lt;typename T&gt;</span>
<span id="L585"><span class="lineNum"> 585</span> : constexpr c10::complex&lt;T&gt; conj(const c10::complex&lt;T&gt;&amp; z) {</span>
<span id="L586"><span class="lineNum"> 586</span> : return c10::complex&lt;T&gt;(z.real(), -z.imag());</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> : // Thrust does not have complex --&gt; complex version of thrust::proj,</span>
<span id="L590"><span class="lineNum"> 590</span> : // so this function is not implemented at c10 right now.</span>
<span id="L591"><span class="lineNum"> 591</span> : // TODO(@zasdfgbnm): implement it by ourselves</span>
<span id="L592"><span class="lineNum"> 592</span> : </span>
<span id="L593"><span class="lineNum"> 593</span> : // There is no c10 version of std::polar, because std::polar always</span>
<span id="L594"><span class="lineNum"> 594</span> : // returns std::complex. Use c10::polar instead;</span>
<span id="L595"><span class="lineNum"> 595</span> : </span>
<span id="L596"><span class="lineNum"> 596</span> : } // namespace std</span>
<span id="L597"><span class="lineNum"> 597</span> : </span>
<span id="L598"><span class="lineNum"> 598</span> : namespace c10 {</span>
<span id="L599"><span class="lineNum"> 599</span> : </span>
<span id="L600"><span class="lineNum"> 600</span> : template &lt;typename T&gt;</span>
<span id="L601"><span class="lineNum"> 601</span> : C10_HOST_DEVICE complex&lt;T&gt; polar(const T&amp; r, const T&amp; theta = T()) {</span>
<span id="L602"><span class="lineNum"> 602</span> : #if defined(__CUDACC__) || defined(__HIPCC__)</span>
<span id="L603"><span class="lineNum"> 603</span> : return static_cast&lt;complex&lt;T&gt;&gt;(thrust::polar(r, theta));</span>
<span id="L604"><span class="lineNum"> 604</span> : #else</span>
<span id="L605"><span class="lineNum"> 605</span> : // std::polar() requires r &gt;= 0, so spell out the explicit implementation to</span>
<span id="L606"><span class="lineNum"> 606</span> : // avoid a branch.</span>
<span id="L607"><span class="lineNum"> 607</span> : return complex&lt;T&gt;(r * std::cos(theta), r * std::sin(theta));</span>
<span id="L608"><span class="lineNum"> 608</span> : #endif</span>
<span id="L609"><span class="lineNum"> 609</span> : }</span>
<span id="L610"><span class="lineNum"> 610</span> : </span>
<span id="L611"><span class="lineNum"> 611</span> : } // namespace c10</span>
<span id="L612"><span class="lineNum"> 612</span> : </span>
<span id="L613"><span class="lineNum"> 613</span> : C10_CLANG_DIAGNOSTIC_POP()</span>
<span id="L614"><span class="lineNum"> 614</span> : </span>
<span id="L615"><span class="lineNum"> 615</span> : #define C10_INTERNAL_INCLUDE_COMPLEX_REMAINING_H</span>
<span id="L616"><span class="lineNum"> 616</span> : // math functions are included in a separate file</span>
<span id="L617"><span class="lineNum"> 617</span> : #include &lt;c10/util/complex_math.h&gt; // IWYU pragma: keep</span>
<span id="L618"><span class="lineNum"> 618</span> : // utilities for complex types</span>
<span id="L619"><span class="lineNum"> 619</span> : #include &lt;c10/util/complex_utils.h&gt; // IWYU pragma: keep</span>
<span id="L620"><span class="lineNum"> 620</span> : #undef C10_INTERNAL_INCLUDE_COMPLEX_REMAINING_H</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,261 @@
<!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/c10/util</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/c10/util</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">62.6&nbsp;%</td>
<td class="headerCovTableEntry">385</td>
<td class="headerCovTableEntry">241</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">56.2&nbsp;%</td>
<td class="headerCovTableEntry">381</td>
<td class="headerCovTableEntry">214</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="C++17.h.gcov.html">C++17.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt"></td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">2</td>
<td class="coverNumDflt"></td>
</tr>
<tr>
<td class="coverFile"><a href="complex.h.gcov.html">complex.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt"></td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">2</td>
<td class="coverNumDflt"></td>
</tr>
<tr>
<td class="coverFile"><a href="Exception.h.gcov.html">Exception.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">11</td>
<td class="coverNumDflt"></td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">8</td>
<td class="coverNumDflt"></td>
</tr>
<tr>
<td class="coverFile"><a href="logging_is_not_google_glog.h.gcov.html">logging_is_not_google_glog.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">12</td>
<td class="coverNumDflt"></td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">10</td>
<td class="coverNumDflt"></td>
</tr>
<tr>
<td class="coverFile"><a href="SmallVector.h.gcov.html">SmallVector.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">55</td>
<td class="coverNumDflt"></td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">21</td>
<td class="coverNumDflt"></td>
</tr>
<tr>
<td class="coverFile"><a href="StringUtil.h.gcov.html">StringUtil.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">16</td>
<td class="coverNumDflt"></td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">49</td>
<td class="coverNumDflt"></td>
</tr>
<tr>
<td class="coverFile"><a href="Half.h.gcov.html">Half.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=15 height=10 alt="15.4%"><img src="../../../../snow.png" width=85 height=10 alt="15.4%"></td></tr></table>
</td>
<td class="coverPerLo">15.4&nbsp;%</td>
<td class="coverNumDflt">13</td>
<td class="coverNumDflt">2</td>
<td class="coverPerLo">25.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="TypeCast.h.gcov.html">TypeCast.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../amber.png" width=79 height=10 alt="78.6%"><img src="../../../../snow.png" width=21 height=10 alt="78.6%"></td></tr></table>
</td>
<td class="coverPerMed">78.6&nbsp;%</td>
<td class="coverNumDflt">14</td>
<td class="coverNumDflt">11</td>
<td class="coverPerLo">54.2&nbsp;%</td>
<td class="coverNumDflt">24</td>
<td class="coverNumDflt">13</td>
</tr>
<tr>
<td class="coverFile"><a href="intrusive_ptr.h.gcov.html">intrusive_ptr.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../amber.png" width=84 height=10 alt="83.8%"><img src="../../../../snow.png" width=16 height=10 alt="83.8%"></td></tr></table>
</td>
<td class="coverPerMed">83.8&nbsp;%</td>
<td class="coverNumDflt">105</td>
<td class="coverNumDflt">88</td>
<td class="coverPerLo">66.7&nbsp;%</td>
<td class="coverNumDflt">72</td>
<td class="coverNumDflt">48</td>
</tr>
<tr>
<td class="coverFile"><a href="Optional.h.gcov.html">Optional.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../amber.png" width=89 height=10 alt="89.0%"><img src="../../../../snow.png" width=11 height=10 alt="89.0%"></td></tr></table>
</td>
<td class="coverPerMed">89.0&nbsp;%</td>
<td class="coverNumDflt">91</td>
<td class="coverNumDflt">81</td>
<td class="coverPerMed">76.4&nbsp;%</td>
<td class="coverNumDflt">157</td>
<td class="coverNumDflt">120</td>
</tr>
<tr>
<td class="coverFile"><a href="OptionalArrayRef.h.gcov.html">OptionalArrayRef.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">3</td>
<td class="coverNumDflt">3</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="TypeSafeSignMath.h.gcov.html">TypeSafeSignMath.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">8</td>
<td class="coverNumDflt">8</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="typeid.h.gcov.html">typeid.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=93 height=10 alt="92.9%"><img src="../../../../snow.png" width=7 height=10 alt="92.9%"></td></tr></table>
</td>
<td class="coverPerHi">92.9&nbsp;%</td>
<td class="coverNumDflt">14</td>
<td class="coverNumDflt">13</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="ArrayRef.h.gcov.html">ArrayRef.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">35</td>
<td class="coverNumDflt">35</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">21</td>
<td class="coverNumDflt">21</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,261 @@
<!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/c10/util</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/c10/util</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">62.6&nbsp;%</td>
<td class="headerCovTableEntry">385</td>
<td class="headerCovTableEntry">241</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">56.2&nbsp;%</td>
<td class="headerCovTableEntry">381</td>
<td class="headerCovTableEntry">214</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="C++17.h.gcov.html">C++17.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt"></td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">2</td>
<td class="coverNumDflt"></td>
</tr>
<tr>
<td class="coverFile"><a href="complex.h.gcov.html">complex.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt"></td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">2</td>
<td class="coverNumDflt"></td>
</tr>
<tr>
<td class="coverFile"><a href="Exception.h.gcov.html">Exception.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">11</td>
<td class="coverNumDflt"></td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">8</td>
<td class="coverNumDflt"></td>
</tr>
<tr>
<td class="coverFile"><a href="logging_is_not_google_glog.h.gcov.html">logging_is_not_google_glog.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">12</td>
<td class="coverNumDflt"></td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">10</td>
<td class="coverNumDflt"></td>
</tr>
<tr>
<td class="coverFile"><a href="StringUtil.h.gcov.html">StringUtil.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">16</td>
<td class="coverNumDflt"></td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">49</td>
<td class="coverNumDflt"></td>
</tr>
<tr>
<td class="coverFile"><a href="SmallVector.h.gcov.html">SmallVector.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">55</td>
<td class="coverNumDflt"></td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">21</td>
<td class="coverNumDflt"></td>
</tr>
<tr>
<td class="coverFile"><a href="Half.h.gcov.html">Half.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=15 height=10 alt="15.4%"><img src="../../../../snow.png" width=85 height=10 alt="15.4%"></td></tr></table>
</td>
<td class="coverPerLo">15.4&nbsp;%</td>
<td class="coverNumDflt">13</td>
<td class="coverNumDflt">2</td>
<td class="coverPerLo">25.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="TypeCast.h.gcov.html">TypeCast.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../amber.png" width=79 height=10 alt="78.6%"><img src="../../../../snow.png" width=21 height=10 alt="78.6%"></td></tr></table>
</td>
<td class="coverPerMed">78.6&nbsp;%</td>
<td class="coverNumDflt">14</td>
<td class="coverNumDflt">11</td>
<td class="coverPerLo">54.2&nbsp;%</td>
<td class="coverNumDflt">24</td>
<td class="coverNumDflt">13</td>
</tr>
<tr>
<td class="coverFile"><a href="intrusive_ptr.h.gcov.html">intrusive_ptr.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../amber.png" width=84 height=10 alt="83.8%"><img src="../../../../snow.png" width=16 height=10 alt="83.8%"></td></tr></table>
</td>
<td class="coverPerMed">83.8&nbsp;%</td>
<td class="coverNumDflt">105</td>
<td class="coverNumDflt">88</td>
<td class="coverPerLo">66.7&nbsp;%</td>
<td class="coverNumDflt">72</td>
<td class="coverNumDflt">48</td>
</tr>
<tr>
<td class="coverFile"><a href="Optional.h.gcov.html">Optional.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../amber.png" width=89 height=10 alt="89.0%"><img src="../../../../snow.png" width=11 height=10 alt="89.0%"></td></tr></table>
</td>
<td class="coverPerMed">89.0&nbsp;%</td>
<td class="coverNumDflt">91</td>
<td class="coverNumDflt">81</td>
<td class="coverPerMed">76.4&nbsp;%</td>
<td class="coverNumDflt">157</td>
<td class="coverNumDflt">120</td>
</tr>
<tr>
<td class="coverFile"><a href="typeid.h.gcov.html">typeid.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=93 height=10 alt="92.9%"><img src="../../../../snow.png" width=7 height=10 alt="92.9%"></td></tr></table>
</td>
<td class="coverPerHi">92.9&nbsp;%</td>
<td class="coverNumDflt">14</td>
<td class="coverNumDflt">13</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="OptionalArrayRef.h.gcov.html">OptionalArrayRef.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">3</td>
<td class="coverNumDflt">3</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="TypeSafeSignMath.h.gcov.html">TypeSafeSignMath.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">8</td>
<td class="coverNumDflt">8</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="ArrayRef.h.gcov.html">ArrayRef.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">35</td>
<td class="coverNumDflt">35</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">21</td>
<td class="coverNumDflt">21</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,261 @@
<!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/c10/util</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/c10/util</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">62.6&nbsp;%</td>
<td class="headerCovTableEntry">385</td>
<td class="headerCovTableEntry">241</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">56.2&nbsp;%</td>
<td class="headerCovTableEntry">381</td>
<td class="headerCovTableEntry">214</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="ArrayRef.h.gcov.html">ArrayRef.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">35</td>
<td class="coverNumDflt">35</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">21</td>
<td class="coverNumDflt">21</td>
</tr>
<tr>
<td class="coverFile"><a href="C++17.h.gcov.html">C++17.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt"></td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">2</td>
<td class="coverNumDflt"></td>
</tr>
<tr>
<td class="coverFile"><a href="Exception.h.gcov.html">Exception.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">11</td>
<td class="coverNumDflt"></td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">8</td>
<td class="coverNumDflt"></td>
</tr>
<tr>
<td class="coverFile"><a href="Half.h.gcov.html">Half.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=15 height=10 alt="15.4%"><img src="../../../../snow.png" width=85 height=10 alt="15.4%"></td></tr></table>
</td>
<td class="coverPerLo">15.4&nbsp;%</td>
<td class="coverNumDflt">13</td>
<td class="coverNumDflt">2</td>
<td class="coverPerLo">25.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt">1</td>
</tr>
<tr>
<td class="coverFile"><a href="Optional.h.gcov.html">Optional.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../amber.png" width=89 height=10 alt="89.0%"><img src="../../../../snow.png" width=11 height=10 alt="89.0%"></td></tr></table>
</td>
<td class="coverPerMed">89.0&nbsp;%</td>
<td class="coverNumDflt">91</td>
<td class="coverNumDflt">81</td>
<td class="coverPerMed">76.4&nbsp;%</td>
<td class="coverNumDflt">157</td>
<td class="coverNumDflt">120</td>
</tr>
<tr>
<td class="coverFile"><a href="OptionalArrayRef.h.gcov.html">OptionalArrayRef.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">3</td>
<td class="coverNumDflt">3</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="SmallVector.h.gcov.html">SmallVector.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">55</td>
<td class="coverNumDflt"></td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">21</td>
<td class="coverNumDflt"></td>
</tr>
<tr>
<td class="coverFile"><a href="StringUtil.h.gcov.html">StringUtil.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">16</td>
<td class="coverNumDflt"></td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">49</td>
<td class="coverNumDflt"></td>
</tr>
<tr>
<td class="coverFile"><a href="TypeCast.h.gcov.html">TypeCast.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../amber.png" width=79 height=10 alt="78.6%"><img src="../../../../snow.png" width=21 height=10 alt="78.6%"></td></tr></table>
</td>
<td class="coverPerMed">78.6&nbsp;%</td>
<td class="coverNumDflt">14</td>
<td class="coverNumDflt">11</td>
<td class="coverPerLo">54.2&nbsp;%</td>
<td class="coverNumDflt">24</td>
<td class="coverNumDflt">13</td>
</tr>
<tr>
<td class="coverFile"><a href="TypeSafeSignMath.h.gcov.html">TypeSafeSignMath.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">8</td>
<td class="coverNumDflt">8</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="complex.h.gcov.html">complex.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">4</td>
<td class="coverNumDflt"></td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">2</td>
<td class="coverNumDflt"></td>
</tr>
<tr>
<td class="coverFile"><a href="intrusive_ptr.h.gcov.html">intrusive_ptr.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../amber.png" width=84 height=10 alt="83.8%"><img src="../../../../snow.png" width=16 height=10 alt="83.8%"></td></tr></table>
</td>
<td class="coverPerMed">83.8&nbsp;%</td>
<td class="coverNumDflt">105</td>
<td class="coverNumDflt">88</td>
<td class="coverPerLo">66.7&nbsp;%</td>
<td class="coverNumDflt">72</td>
<td class="coverNumDflt">48</td>
</tr>
<tr>
<td class="coverFile"><a href="logging_is_not_google_glog.h.gcov.html">logging_is_not_google_glog.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">12</td>
<td class="coverNumDflt"></td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumDflt">10</td>
<td class="coverNumDflt"></td>
</tr>
<tr>
<td class="coverFile"><a href="typeid.h.gcov.html">typeid.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=93 height=10 alt="92.9%"><img src="../../../../snow.png" width=7 height=10 alt="92.9%"></td></tr></table>
</td>
<td class="coverPerHi">92.9&nbsp;%</td>
<td class="coverNumDflt">14</td>
<td class="coverNumDflt">13</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumDflt">6</td>
<td class="coverNumDflt">6</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,684 @@
<!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/c10/util/intrusive_ptr.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/c10/util</a> - intrusive_ptr.h<span style="font-size: 80%;"> (<a href="intrusive_ptr.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.8&nbsp;%</td>
<td class="headerCovTableEntry">105</td>
<td class="headerCovTableEntry">88</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">66.7&nbsp;%</td>
<td class="headerCovTableEntry">72</td>
<td class="headerCovTableEntry">48</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="intrusive_ptr.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="intrusive_ptr.h.gcov.html#L169">_ZN3c1020intrusive_ptr_target17release_resourcesEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L978">_ZN3c103raw13intrusive_ptr6decrefEPNS_20intrusive_ptr_targetE</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L970">_ZN3c103raw13intrusive_ptr6increfEPNS_20intrusive_ptr_targetE</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L207">_ZN3c106detail26atomic_weakcount_decrementERSt6atomicImE</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L401">_ZNK3c1013intrusive_ptrINS_6ivalue13ComplexHolderENS_6detail34intrusive_target_default_null_typeIS2_EEEdeEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L383">_ZNR3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEaSERKS3_</a></td>
<td class="coverFnHi">1820</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L388">_ZNR3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEaSIS1_S2_EERS3_RKNS0_IT_S2_EE</a></td>
<td class="coverFnHi">1820</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L351">_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2ERKS3_</a></td>
<td class="coverFnHi">62874</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L356">_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2IS1_NS_6detail34intrusive_target_default_null_typeIS1_EEEERKNS0_IT_T0_EE</a></td>
<td class="coverFnHi">378768</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L137">_ZN3c1020intrusive_ptr_targetC2Ev</a></td>
<td class="coverFnHi">378768</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L181">_ZN3c106detail11assign_ptr_INS_10TensorImplENS_19UndefinedTensorImplENS0_34intrusive_target_default_null_typeIS2_EEEEPT_S7_</a></td>
<td class="coverFnHi">378768</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L369">_ZNR3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEaSEOS3_</a></td>
<td class="coverFnHi">435080</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L374">_ZNR3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEaSIS1_S2_EERS3_ONS0_IT_T0_EE</a></td>
<td class="coverFnHi">435080</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L419">_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE4swapERS3_</a></td>
<td class="coverFnHi">436900</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L191">_ZN3c106detail25atomic_refcount_incrementERSt6atomicImE</a></td>
<td class="coverFnHi">440756</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L260">_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE7retain_Ev</a></td>
<td class="coverFnHi">441642</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L430">_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE9use_countEv</a></td>
<td class="coverFnHi">458920</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L430">_ZNK3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEE9use_countEv</a></td>
<td class="coverFnAliasHi">40076</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L430">_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE9use_countEv</a></td>
<td class="coverFnAliasHi">418844</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L410">_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEcvbEv</a></td>
<td class="coverFnHi">466880</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L410">_ZNK3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEEcvbEv</a></td>
<td class="coverFnAliasHi">40076</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L410">_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEcvbEv</a></td>
<td class="coverFnAliasHi">426804</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L493">_ZN3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEE4makeIJRjEEES6_DpOT_</a></td>
<td class="coverFnHi">37304192</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L493">_ZN3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEE4makeIJRjEEES6_DpOT_</a></td>
<td class="coverFnAliasHi">378768</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L493">_ZN3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEE4makeIJSt6vectorINS_6IValueESaIS8_EERKNS_4Type24SingletonOrSharedTypePtrISB_EEEEES5_DpOT_</a></td>
<td class="coverFnAliasHi">36925424</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L301">_ZN3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEEC2EPS2_</a></td>
<td class="coverFnHi">37304192</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L301">_ZN3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEEC2EPS2_</a></td>
<td class="coverFnAliasHi">378768</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L301">_ZN3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEEC2EPS2_</a></td>
<td class="coverFnAliasHi">36925424</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L573">_ZN3c1014make_intrusiveINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEJRjEEENS_13intrusive_ptrIT_T0_EEDpOT1_</a></td>
<td class="coverFnHi">37304192</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L573">_ZN3c1014make_intrusiveINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEJRjEEENS_13intrusive_ptrIT_T0_EEDpOT1_</a></td>
<td class="coverFnAliasHi">378768</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L573">_ZN3c1014make_intrusiveINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEJSt6vectorINS_6IValueESaIS6_EERKNS_4Type24SingletonOrSharedTypePtrIS9_EEEEENS_13intrusive_ptrIT_T0_EEDpOT1_</a></td>
<td class="coverFnAliasHi">36925424</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L322">_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2Ev</a></td>
<td class="coverFnHi">37370160</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L322">_ZN3c1013intrusive_ptrINS_11SymNodeImplENS_6detail34intrusive_target_default_null_typeIS1_EEEC2Ev</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L322">_ZN3c1013intrusive_ptrINS_6ivalue13ComplexHolderENS_6detail34intrusive_target_default_null_typeIS2_EEEC2Ev</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L322">_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2Ev</a></td>
<td class="coverFnAliasHi">37370160</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L468">_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_19UndefinedTensorImplEE7reclaimEPS1_</a></td>
<td class="coverFnHi">105276376</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L468">_ZN3c1013intrusive_ptrINS_11SymNodeImplENS_6detail34intrusive_target_default_null_typeIS1_EEE7reclaimEPS1_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L468">_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_6detail34intrusive_target_default_null_typeIS1_EEE7reclaimEPS1_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L468">_ZN3c1013intrusive_ptrINS_6ivalue13ComplexHolderENS_6detail34intrusive_target_default_null_typeIS2_EEE7reclaimEPS2_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L468">_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_19UndefinedTensorImplEE7reclaimEPS1_</a></td>
<td class="coverFnAliasHi">105276376</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L397">_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE3getEv</a></td>
<td class="coverFnHi">105695220</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L397">_ZNK3c1013intrusive_ptrINS_10TensorImplENS_6detail34intrusive_target_default_null_typeIS1_EEE3getEv</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L397">_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE3getEv</a></td>
<td class="coverFnAliasHi">105695220</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L405">_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEptEv</a></td>
<td class="coverFnHi">121964308</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L405">_ZNK3c1013intrusive_ptrINS_10TensorImplENS_6detail34intrusive_target_default_null_typeIS1_EEEptEv</a></td>
<td class="coverFnAliasHi">378768</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L405">_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEptEv</a></td>
<td class="coverFnAliasHi">16309164</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L405">_ZNK3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEEptEv</a></td>
<td class="coverFnAliasHi">105276376</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L175">_ZN3c106detail34intrusive_target_default_null_typeINS0_8ListImplEE9singletonEv</a></td>
<td class="coverFnHi">149296920</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L175">_ZN3c106detail34intrusive_target_default_null_typeINS_11SymNodeImplEE9singletonEv</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L175">_ZN3c106detail34intrusive_target_default_null_typeINS_20intrusive_ptr_targetEE9singletonEv</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L175">_ZN3c106detail34intrusive_target_default_null_typeINS_6ivalue13ComplexHolderEE9singletonEv</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L175">_ZN3c106detail34intrusive_target_default_null_typeINS_10TensorImplEE9singletonEv</a></td>
<td class="coverFnAliasHi">757536</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L175">_ZN3c106detail34intrusive_target_default_null_typeINS_15VariableVersion14VersionCounterEE9singletonEv</a></td>
<td class="coverFnAliasHi">837688</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L175">_ZN3c106detail34intrusive_target_default_null_typeINS0_8ListImplEE9singletonEv</a></td>
<td class="coverFnAliasHi">147701696</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L331">_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2EPS1_NS_3raw20DontIncreaseRefcountE</a></td>
<td class="coverFnHi">179950728</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L331">_ZN3c1013intrusive_ptrINS_11SymNodeImplENS_6detail34intrusive_target_default_null_typeIS1_EEEC2EPS1_NS_3raw20DontIncreaseRefcountE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L331">_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_6detail34intrusive_target_default_null_typeIS1_EEEC2EPS1_NS_3raw20DontIncreaseRefcountE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L331">_ZN3c1013intrusive_ptrINS_6ivalue13ComplexHolderENS_6detail34intrusive_target_default_null_typeIS2_EEEC2EPS2_NS_3raw20DontIncreaseRefcountE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L331">_ZN3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEEC2EPS2_NS_3raw20DontIncreaseRefcountE</a></td>
<td class="coverFnAliasHi">378768</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L331">_ZN3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEEC2EPS2_NS_3raw20DontIncreaseRefcountE</a></td>
<td class="coverFnAliasHi">36925424</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L331">_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2EPS1_NS_3raw20DontIncreaseRefcountE</a></td>
<td class="coverFnAliasHi">37370160</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L331">_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_19UndefinedTensorImplEEC2EPS1_NS_3raw20DontIncreaseRefcountE</a></td>
<td class="coverFnAliasHi">105276376</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L203">_ZN3c106detail25atomic_refcount_decrementERSt6atomicImE</a></td>
<td class="coverFnHi">212684736</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L93">_ZN3c1020intrusive_ptr_targetD0Ev</a></td>
<td class="coverFnHi">520215158</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L93">_ZN3c1020intrusive_ptr_targetD0Ev</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L93">_ZN3c1020intrusive_ptr_targetD2Ev</a></td>
<td class="coverFnAliasHi">520215158</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L270">_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE6reset_Ev</a></td>
<td class="coverFnHi">710681430</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L270">_ZN3c1013intrusive_ptrINS_11SymNodeImplENS_6detail34intrusive_target_default_null_typeIS1_EEE6reset_Ev</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L270">_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_6detail34intrusive_target_default_null_typeIS1_EEE6reset_Ev</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L270">_ZN3c1013intrusive_ptrINS_6ivalue13ComplexHolderENS_6detail34intrusive_target_default_null_typeIS2_EEE6reset_Ev</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L270">_ZN3c1013intrusive_ptrINS_10TensorImplENS_6detail34intrusive_target_default_null_typeIS1_EEE6reset_Ev</a></td>
<td class="coverFnAliasHi">378768</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L270">_ZN3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEE6reset_Ev</a></td>
<td class="coverFnAliasHi">378768</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L270">_ZN3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEE6reset_Ev</a></td>
<td class="coverFnAliasHi">73850848</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L270">_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_19UndefinedTensorImplEE6reset_Ev</a></td>
<td class="coverFnAliasHi">105276376</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L270">_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE6reset_Ev</a></td>
<td class="coverFnAliasHi">530796670</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L365">_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEED2Ev</a></td>
<td class="coverFnHi">710681430</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L365">_ZN3c1013intrusive_ptrINS_11SymNodeImplENS_6detail34intrusive_target_default_null_typeIS1_EEED2Ev</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L365">_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_6detail34intrusive_target_default_null_typeIS1_EEED2Ev</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L365">_ZN3c1013intrusive_ptrINS_6ivalue13ComplexHolderENS_6detail34intrusive_target_default_null_typeIS2_EEED2Ev</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L365">_ZN3c1013intrusive_ptrINS_10TensorImplENS_6detail34intrusive_target_default_null_typeIS1_EEED2Ev</a></td>
<td class="coverFnAliasHi">378768</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L365">_ZN3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEED2Ev</a></td>
<td class="coverFnAliasHi">378768</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L365">_ZN3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEED2Ev</a></td>
<td class="coverFnAliasHi">73850848</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L365">_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_19UndefinedTensorImplEED2Ev</a></td>
<td class="coverFnAliasHi">105276376</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L365">_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEED2Ev</a></td>
<td class="coverFnAliasHi">530796670</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L337">_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2EOS3_</a></td>
<td class="coverFnHi">772197404</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L337">_ZN3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEEC2EOS5_</a></td>
<td class="coverFnAliasHi">36925424</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L337">_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2EOS3_</a></td>
<td class="coverFnAliasHi">735271980</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,684 @@
<!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/c10/util/intrusive_ptr.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/c10/util</a> - intrusive_ptr.h<span style="font-size: 80%;"> (<a href="intrusive_ptr.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.8&nbsp;%</td>
<td class="headerCovTableEntry">105</td>
<td class="headerCovTableEntry">88</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">66.7&nbsp;%</td>
<td class="headerCovTableEntry">72</td>
<td class="headerCovTableEntry">48</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="intrusive_ptr.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="intrusive_ptr.h.gcov.html#L419">_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE4swapERS3_</a></td>
<td class="coverFnHi">436900</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L270">_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE6reset_Ev</a></td>
<td class="coverFnHi">710681430</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L270">_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE6reset_Ev</a></td>
<td class="coverFnAliasHi">530796670</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L270">_ZN3c1013intrusive_ptrINS_10TensorImplENS_6detail34intrusive_target_default_null_typeIS1_EEE6reset_Ev</a></td>
<td class="coverFnAliasHi">378768</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L270">_ZN3c1013intrusive_ptrINS_11SymNodeImplENS_6detail34intrusive_target_default_null_typeIS1_EEE6reset_Ev</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L270">_ZN3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEE6reset_Ev</a></td>
<td class="coverFnAliasHi">378768</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L270">_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_19UndefinedTensorImplEE6reset_Ev</a></td>
<td class="coverFnAliasHi">105276376</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L270">_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_6detail34intrusive_target_default_null_typeIS1_EEE6reset_Ev</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L270">_ZN3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEE6reset_Ev</a></td>
<td class="coverFnAliasHi">73850848</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L270">_ZN3c1013intrusive_ptrINS_6ivalue13ComplexHolderENS_6detail34intrusive_target_default_null_typeIS2_EEE6reset_Ev</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L260">_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE7retain_Ev</a></td>
<td class="coverFnHi">441642</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L337">_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2EOS3_</a></td>
<td class="coverFnHi">772197404</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L337">_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2EOS3_</a></td>
<td class="coverFnAliasHi">735271980</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L337">_ZN3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEEC2EOS5_</a></td>
<td class="coverFnAliasHi">36925424</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L331">_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2EPS1_NS_3raw20DontIncreaseRefcountE</a></td>
<td class="coverFnHi">179950728</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L331">_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2EPS1_NS_3raw20DontIncreaseRefcountE</a></td>
<td class="coverFnAliasHi">37370160</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L331">_ZN3c1013intrusive_ptrINS_11SymNodeImplENS_6detail34intrusive_target_default_null_typeIS1_EEEC2EPS1_NS_3raw20DontIncreaseRefcountE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L331">_ZN3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEEC2EPS2_NS_3raw20DontIncreaseRefcountE</a></td>
<td class="coverFnAliasHi">378768</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L331">_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_19UndefinedTensorImplEEC2EPS1_NS_3raw20DontIncreaseRefcountE</a></td>
<td class="coverFnAliasHi">105276376</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L331">_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_6detail34intrusive_target_default_null_typeIS1_EEEC2EPS1_NS_3raw20DontIncreaseRefcountE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L331">_ZN3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEEC2EPS2_NS_3raw20DontIncreaseRefcountE</a></td>
<td class="coverFnAliasHi">36925424</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L331">_ZN3c1013intrusive_ptrINS_6ivalue13ComplexHolderENS_6detail34intrusive_target_default_null_typeIS2_EEEC2EPS2_NS_3raw20DontIncreaseRefcountE</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L351">_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2ERKS3_</a></td>
<td class="coverFnHi">62874</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L322">_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2Ev</a></td>
<td class="coverFnHi">37370160</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L322">_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2Ev</a></td>
<td class="coverFnAliasHi">37370160</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L322">_ZN3c1013intrusive_ptrINS_11SymNodeImplENS_6detail34intrusive_target_default_null_typeIS1_EEEC2Ev</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L322">_ZN3c1013intrusive_ptrINS_6ivalue13ComplexHolderENS_6detail34intrusive_target_default_null_typeIS2_EEEC2Ev</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L356">_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2IS1_NS_6detail34intrusive_target_default_null_typeIS1_EEEERKNS0_IT_T0_EE</a></td>
<td class="coverFnHi">378768</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L365">_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEED2Ev</a></td>
<td class="coverFnHi">710681430</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L365">_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEED2Ev</a></td>
<td class="coverFnAliasHi">530796670</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L365">_ZN3c1013intrusive_ptrINS_10TensorImplENS_6detail34intrusive_target_default_null_typeIS1_EEED2Ev</a></td>
<td class="coverFnAliasHi">378768</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L365">_ZN3c1013intrusive_ptrINS_11SymNodeImplENS_6detail34intrusive_target_default_null_typeIS1_EEED2Ev</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L365">_ZN3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEED2Ev</a></td>
<td class="coverFnAliasHi">378768</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L365">_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_19UndefinedTensorImplEED2Ev</a></td>
<td class="coverFnAliasHi">105276376</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L365">_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_6detail34intrusive_target_default_null_typeIS1_EEED2Ev</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L365">_ZN3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEED2Ev</a></td>
<td class="coverFnAliasHi">73850848</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L365">_ZN3c1013intrusive_ptrINS_6ivalue13ComplexHolderENS_6detail34intrusive_target_default_null_typeIS2_EEED2Ev</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L493">_ZN3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEE4makeIJRjEEES6_DpOT_</a></td>
<td class="coverFnHi">37304192</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L493">_ZN3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEE4makeIJRjEEES6_DpOT_</a></td>
<td class="coverFnAliasHi">378768</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L493">_ZN3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEE4makeIJSt6vectorINS_6IValueESaIS8_EERKNS_4Type24SingletonOrSharedTypePtrISB_EEEEES5_DpOT_</a></td>
<td class="coverFnAliasHi">36925424</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L468">_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_19UndefinedTensorImplEE7reclaimEPS1_</a></td>
<td class="coverFnHi">105276376</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L468">_ZN3c1013intrusive_ptrINS_11SymNodeImplENS_6detail34intrusive_target_default_null_typeIS1_EEE7reclaimEPS1_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L468">_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_19UndefinedTensorImplEE7reclaimEPS1_</a></td>
<td class="coverFnAliasHi">105276376</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L468">_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_6detail34intrusive_target_default_null_typeIS1_EEE7reclaimEPS1_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L468">_ZN3c1013intrusive_ptrINS_6ivalue13ComplexHolderENS_6detail34intrusive_target_default_null_typeIS2_EEE7reclaimEPS2_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L301">_ZN3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEEC2EPS2_</a></td>
<td class="coverFnHi">37304192</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L301">_ZN3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEEC2EPS2_</a></td>
<td class="coverFnAliasHi">378768</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L301">_ZN3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEEC2EPS2_</a></td>
<td class="coverFnAliasHi">36925424</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L573">_ZN3c1014make_intrusiveINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEJRjEEENS_13intrusive_ptrIT_T0_EEDpOT1_</a></td>
<td class="coverFnHi">37304192</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L573">_ZN3c1014make_intrusiveINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEJRjEEENS_13intrusive_ptrIT_T0_EEDpOT1_</a></td>
<td class="coverFnAliasHi">378768</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L573">_ZN3c1014make_intrusiveINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEJSt6vectorINS_6IValueESaIS6_EERKNS_4Type24SingletonOrSharedTypePtrIS9_EEEEENS_13intrusive_ptrIT_T0_EEDpOT1_</a></td>
<td class="coverFnAliasHi">36925424</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L169">_ZN3c1020intrusive_ptr_target17release_resourcesEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L137">_ZN3c1020intrusive_ptr_targetC2Ev</a></td>
<td class="coverFnHi">378768</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L93">_ZN3c1020intrusive_ptr_targetD0Ev</a></td>
<td class="coverFnHi">520215158</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L93">_ZN3c1020intrusive_ptr_targetD0Ev</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L93">_ZN3c1020intrusive_ptr_targetD2Ev</a></td>
<td class="coverFnAliasHi">520215158</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L978">_ZN3c103raw13intrusive_ptr6decrefEPNS_20intrusive_ptr_targetE</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L970">_ZN3c103raw13intrusive_ptr6increfEPNS_20intrusive_ptr_targetE</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L181">_ZN3c106detail11assign_ptr_INS_10TensorImplENS_19UndefinedTensorImplENS0_34intrusive_target_default_null_typeIS2_EEEEPT_S7_</a></td>
<td class="coverFnHi">378768</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L203">_ZN3c106detail25atomic_refcount_decrementERSt6atomicImE</a></td>
<td class="coverFnHi">212684736</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L191">_ZN3c106detail25atomic_refcount_incrementERSt6atomicImE</a></td>
<td class="coverFnHi">440756</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L207">_ZN3c106detail26atomic_weakcount_decrementERSt6atomicImE</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L175">_ZN3c106detail34intrusive_target_default_null_typeINS0_8ListImplEE9singletonEv</a></td>
<td class="coverFnHi">149296920</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L175">_ZN3c106detail34intrusive_target_default_null_typeINS0_8ListImplEE9singletonEv</a></td>
<td class="coverFnAliasHi">147701696</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L175">_ZN3c106detail34intrusive_target_default_null_typeINS_10TensorImplEE9singletonEv</a></td>
<td class="coverFnAliasHi">757536</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L175">_ZN3c106detail34intrusive_target_default_null_typeINS_11SymNodeImplEE9singletonEv</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L175">_ZN3c106detail34intrusive_target_default_null_typeINS_15VariableVersion14VersionCounterEE9singletonEv</a></td>
<td class="coverFnAliasHi">837688</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L175">_ZN3c106detail34intrusive_target_default_null_typeINS_20intrusive_ptr_targetEE9singletonEv</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L175">_ZN3c106detail34intrusive_target_default_null_typeINS_6ivalue13ComplexHolderEE9singletonEv</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L397">_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE3getEv</a></td>
<td class="coverFnHi">105695220</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L397">_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE3getEv</a></td>
<td class="coverFnAliasHi">105695220</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L397">_ZNK3c1013intrusive_ptrINS_10TensorImplENS_6detail34intrusive_target_default_null_typeIS1_EEE3getEv</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L430">_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE9use_countEv</a></td>
<td class="coverFnHi">458920</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L430">_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE9use_countEv</a></td>
<td class="coverFnAliasHi">418844</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L430">_ZNK3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEE9use_countEv</a></td>
<td class="coverFnAliasHi">40076</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L410">_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEcvbEv</a></td>
<td class="coverFnHi">466880</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L410">_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEcvbEv</a></td>
<td class="coverFnAliasHi">426804</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L410">_ZNK3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEEcvbEv</a></td>
<td class="coverFnAliasHi">40076</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L405">_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEptEv</a></td>
<td class="coverFnHi">121964308</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L405">_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEptEv</a></td>
<td class="coverFnAliasHi">16309164</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L405">_ZNK3c1013intrusive_ptrINS_10TensorImplENS_6detail34intrusive_target_default_null_typeIS1_EEEptEv</a></td>
<td class="coverFnAliasHi">378768</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="intrusive_ptr.h.gcov.html#L405">_ZNK3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEEptEv</a></td>
<td class="coverFnAliasHi">105276376</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L401">_ZNK3c1013intrusive_ptrINS_6ivalue13ComplexHolderENS_6detail34intrusive_target_default_null_typeIS2_EEEdeEv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L369">_ZNR3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEaSEOS3_</a></td>
<td class="coverFnHi">435080</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L383">_ZNR3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEaSERKS3_</a></td>
<td class="coverFnHi">1820</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L374">_ZNR3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEaSIS1_S2_EERS3_ONS0_IT_T0_EE</a></td>
<td class="coverFnHi">435080</td>
</tr>
<tr>
<td class="coverFn"><a href="intrusive_ptr.h.gcov.html#L388">_ZNR3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEaSIS1_S2_EERS3_RKNS0_IT_S2_EE</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,166 @@
<!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/c10/util/logging_is_not_google_glog.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/c10/util</a> - logging_is_not_google_glog.h<span style="font-size: 80%;"> (<a href="logging_is_not_google_glog.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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">12</td>
<td class="headerCovTableEntry">0</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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">10</td>
<td class="headerCovTableEntry">0</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="logging_is_not_google_glog.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="logging_is_not_google_glog.h.gcov.html#L243">_ZN3c1013PrintSequenceIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEEEvRSoT_SA_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="logging_is_not_google_glog.h.gcov.html#L243">_ZN3c1013PrintSequenceIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_SaIS8_EEEEEEvRSoT_SG_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="logging_is_not_google_glog.h.gcov.html#L243">_ZN3c1013PrintSequenceIN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_ESt6vectorISA_SaISA_EEEEEEvRSoT_SI_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="logging_is_not_google_glog.h.gcov.html#L243">_ZN3c1013PrintSequenceIN9__gnu_cxx17__normal_iteratorIPKSt4pairIiiESt6vectorIS4_SaIS4_EEEEEEvRSoT_SC_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="logging_is_not_google_glog.h.gcov.html#L243">_ZN3c1013PrintSequenceIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEEEvRSoT_SA_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="logging_is_not_google_glog.h.gcov.html#L222">_ZStlsIJiSaIiEEERSoS1_RKSt6vectorIDpT_E</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="logging_is_not_google_glog.h.gcov.html#L222">_ZStlsIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEERSoS7_RKSt6vectorIDpT_E</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="logging_is_not_google_glog.h.gcov.html#L222">_ZStlsIJSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EEERSoS9_RKSt6vectorIDpT_E</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="logging_is_not_google_glog.h.gcov.html#L222">_ZStlsIJSt4pairIiiESaIS1_EEERSoS3_RKSt6vectorIDpT_E</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="logging_is_not_google_glog.h.gcov.html#L222">_ZStlsIJiSaIiEEERSoS1_RKSt6vectorIDpT_E</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="logging_is_not_google_glog.h.gcov.html#L228">_ZStlsIiiERSoS0_RKSt4pairIT_T0_E</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="logging_is_not_google_glog.h.gcov.html#L228">_ZStlsINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_ERSoS6_RKSt4pairIT_T0_E</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="logging_is_not_google_glog.h.gcov.html#L228">_ZStlsIiiERSoS0_RKSt4pairIT_T0_E</a></td>
<td class="coverFnAliasLo">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>

View File

@@ -0,0 +1,166 @@
<!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/c10/util/logging_is_not_google_glog.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/c10/util</a> - logging_is_not_google_glog.h<span style="font-size: 80%;"> (<a href="logging_is_not_google_glog.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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">12</td>
<td class="headerCovTableEntry">0</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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">10</td>
<td class="headerCovTableEntry">0</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="logging_is_not_google_glog.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="logging_is_not_google_glog.h.gcov.html#L243">_ZN3c1013PrintSequenceIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEEEvRSoT_SA_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="logging_is_not_google_glog.h.gcov.html#L243">_ZN3c1013PrintSequenceIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_SaIS8_EEEEEEvRSoT_SG_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="logging_is_not_google_glog.h.gcov.html#L243">_ZN3c1013PrintSequenceIN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_ESt6vectorISA_SaISA_EEEEEEvRSoT_SI_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="logging_is_not_google_glog.h.gcov.html#L243">_ZN3c1013PrintSequenceIN9__gnu_cxx17__normal_iteratorIPKSt4pairIiiESt6vectorIS4_SaIS4_EEEEEEvRSoT_SC_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="logging_is_not_google_glog.h.gcov.html#L243">_ZN3c1013PrintSequenceIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEEEvRSoT_SA_</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="logging_is_not_google_glog.h.gcov.html#L222">_ZStlsIJiSaIiEEERSoS1_RKSt6vectorIDpT_E</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="logging_is_not_google_glog.h.gcov.html#L222">_ZStlsIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEERSoS7_RKSt6vectorIDpT_E</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="logging_is_not_google_glog.h.gcov.html#L222">_ZStlsIJSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EEERSoS9_RKSt6vectorIDpT_E</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="logging_is_not_google_glog.h.gcov.html#L222">_ZStlsIJSt4pairIiiESaIS1_EEERSoS3_RKSt6vectorIDpT_E</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="logging_is_not_google_glog.h.gcov.html#L222">_ZStlsIJiSaIiEEERSoS1_RKSt6vectorIDpT_E</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="logging_is_not_google_glog.h.gcov.html#L228">_ZStlsIiiERSoS0_RKSt4pairIT_T0_E</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="logging_is_not_google_glog.h.gcov.html#L228">_ZStlsINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_ERSoS6_RKSt4pairIT_T0_E</a></td>
<td class="coverFnAliasLo">0</td>
</tr>
<tr>
<td class="coverFnAlias"><a href="logging_is_not_google_glog.h.gcov.html#L228">_ZStlsIiiERSoS0_RKSt4pairIT_T0_E</a></td>
<td class="coverFnAliasLo">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>

View File

@@ -0,0 +1,334 @@
<!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/c10/util/logging_is_not_google_glog.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/c10/util</a> - logging_is_not_google_glog.h<span style="font-size: 80%;"> (source / <a href="logging_is_not_google_glog.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="headerCovTableEntryLo">0.0&nbsp;%</td>
<td class="headerCovTableEntry">12</td>
<td class="headerCovTableEntry">0</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">0.0&nbsp;%</td>
<td class="headerCovTableEntry">10</td>
<td class="headerCovTableEntry">0</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> : #ifndef C10_UTIL_LOGGING_IS_NOT_GOOGLE_GLOG_H_</span>
<span id="L2"><span class="lineNum"> 2</span> : #define C10_UTIL_LOGGING_IS_NOT_GOOGLE_GLOG_H_</span>
<span id="L3"><span class="lineNum"> 3</span> : </span>
<span id="L4"><span class="lineNum"> 4</span> : #include &lt;chrono&gt;</span>
<span id="L5"><span class="lineNum"> 5</span> : #include &lt;climits&gt;</span>
<span id="L6"><span class="lineNum"> 6</span> : #include &lt;ctime&gt;</span>
<span id="L7"><span class="lineNum"> 7</span> : #include &lt;iomanip&gt;</span>
<span id="L8"><span class="lineNum"> 8</span> : #include &lt;map&gt;</span>
<span id="L9"><span class="lineNum"> 9</span> : #include &lt;ostream&gt;</span>
<span id="L10"><span class="lineNum"> 10</span> : #include &lt;set&gt;</span>
<span id="L11"><span class="lineNum"> 11</span> : #include &lt;sstream&gt;</span>
<span id="L12"><span class="lineNum"> 12</span> : #include &lt;string&gt;</span>
<span id="L13"><span class="lineNum"> 13</span> : #include &lt;vector&gt;</span>
<span id="L14"><span class="lineNum"> 14</span> : </span>
<span id="L15"><span class="lineNum"> 15</span> : #include &lt;c10/util/Flags.h&gt;</span>
<span id="L16"><span class="lineNum"> 16</span> : </span>
<span id="L17"><span class="lineNum"> 17</span> : const char CAFFE2_SEVERITY_PREFIX[] = &quot;FEWIV&quot;;</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> : // Log severity level constants.</span>
<span id="L22"><span class="lineNum"> 22</span> : const int GLOG_FATAL = 3;</span>
<span id="L23"><span class="lineNum"> 23</span> : const int GLOG_ERROR = 2;</span>
<span id="L24"><span class="lineNum"> 24</span> : const int GLOG_WARNING = 1;</span>
<span id="L25"><span class="lineNum"> 25</span> : const int GLOG_INFO = 0;</span>
<span id="L26"><span class="lineNum"> 26</span> : </span>
<span id="L27"><span class="lineNum"> 27</span> : class C10_API MessageLogger {</span>
<span id="L28"><span class="lineNum"> 28</span> : public:</span>
<span id="L29"><span class="lineNum"> 29</span> : MessageLogger(const char* file, int line, int severity);</span>
<span id="L30"><span class="lineNum"> 30</span> : ~MessageLogger();</span>
<span id="L31"><span class="lineNum"> 31</span> : // Return the stream associated with the logger object.</span>
<span id="L32"><span class="lineNum"> 32</span> : std::stringstream&amp; stream() {</span>
<span id="L33"><span class="lineNum"> 33</span> : return stream_;</span>
<span id="L34"><span class="lineNum"> 34</span> : }</span>
<span id="L35"><span class="lineNum"> 35</span> : </span>
<span id="L36"><span class="lineNum"> 36</span> : private:</span>
<span id="L37"><span class="lineNum"> 37</span> : // When there is a fatal log, we simply abort.</span>
<span id="L38"><span class="lineNum"> 38</span> : void DealWithFatal() {</span>
<span id="L39"><span class="lineNum"> 39</span> : abort();</span>
<span id="L40"><span class="lineNum"> 40</span> : }</span>
<span id="L41"><span class="lineNum"> 41</span> : </span>
<span id="L42"><span class="lineNum"> 42</span> : const char* tag_;</span>
<span id="L43"><span class="lineNum"> 43</span> : std::stringstream stream_;</span>
<span id="L44"><span class="lineNum"> 44</span> : int severity_;</span>
<span id="L45"><span class="lineNum"> 45</span> : };</span>
<span id="L46"><span class="lineNum"> 46</span> : </span>
<span id="L47"><span class="lineNum"> 47</span> : // This class is used to explicitly ignore values in the conditional</span>
<span id="L48"><span class="lineNum"> 48</span> : // logging macros. This avoids compiler warnings like &quot;value computed</span>
<span id="L49"><span class="lineNum"> 49</span> : // is not used&quot; and &quot;statement has no effect&quot;.</span>
<span id="L50"><span class="lineNum"> 50</span> : class C10_API LoggerVoidify {</span>
<span id="L51"><span class="lineNum"> 51</span> : public:</span>
<span id="L52"><span class="lineNum"> 52</span> : LoggerVoidify() = default;</span>
<span id="L53"><span class="lineNum"> 53</span> : // This has to be an operator with a precedence lower than &lt;&lt; but</span>
<span id="L54"><span class="lineNum"> 54</span> : // higher than ?:</span>
<span id="L55"><span class="lineNum"> 55</span> : void operator&amp;(const std::ostream&amp; s) {}</span>
<span id="L56"><span class="lineNum"> 56</span> : };</span>
<span id="L57"><span class="lineNum"> 57</span> : </span>
<span id="L58"><span class="lineNum"> 58</span> : // Log a message and terminate.</span>
<span id="L59"><span class="lineNum"> 59</span> : template &lt;class T&gt;</span>
<span id="L60"><span class="lineNum"> 60</span> : void LogMessageFatal(const char* file, int line, const T&amp; message) {</span>
<span id="L61"><span class="lineNum"> 61</span> : MessageLogger(file, line, GLOG_FATAL).stream() &lt;&lt; message;</span>
<span id="L62"><span class="lineNum"> 62</span> : }</span>
<span id="L63"><span class="lineNum"> 63</span> : </span>
<span id="L64"><span class="lineNum"> 64</span> : // Helpers for TORCH_CHECK_NOTNULL(). Two are necessary to support both raw</span>
<span id="L65"><span class="lineNum"> 65</span> : // pointers and smart pointers.</span>
<span id="L66"><span class="lineNum"> 66</span> : template &lt;typename T&gt;</span>
<span id="L67"><span class="lineNum"> 67</span> : T&amp; CheckNotNullCommon(const char* file, int line, const char* names, T&amp; t) {</span>
<span id="L68"><span class="lineNum"> 68</span> : if (t == nullptr) {</span>
<span id="L69"><span class="lineNum"> 69</span> : LogMessageFatal(file, line, std::string(names));</span>
<span id="L70"><span class="lineNum"> 70</span> : }</span>
<span id="L71"><span class="lineNum"> 71</span> : return t;</span>
<span id="L72"><span class="lineNum"> 72</span> : }</span>
<span id="L73"><span class="lineNum"> 73</span> : </span>
<span id="L74"><span class="lineNum"> 74</span> : template &lt;typename T&gt;</span>
<span id="L75"><span class="lineNum"> 75</span> : T* CheckNotNull(const char* file, int line, const char* names, T* t) {</span>
<span id="L76"><span class="lineNum"> 76</span> : return CheckNotNullCommon(file, line, names, t);</span>
<span id="L77"><span class="lineNum"> 77</span> : }</span>
<span id="L78"><span class="lineNum"> 78</span> : </span>
<span id="L79"><span class="lineNum"> 79</span> : template &lt;typename T&gt;</span>
<span id="L80"><span class="lineNum"> 80</span> : T&amp; CheckNotNull(const char* file, int line, const char* names, T&amp; t) {</span>
<span id="L81"><span class="lineNum"> 81</span> : return CheckNotNullCommon(file, line, names, t);</span>
<span id="L82"><span class="lineNum"> 82</span> : }</span>
<span id="L83"><span class="lineNum"> 83</span> : } // namespace c10</span>
<span id="L84"><span class="lineNum"> 84</span> : </span>
<span id="L85"><span class="lineNum"> 85</span> : // ---------------------- Logging Macro definitions --------------------------</span>
<span id="L86"><span class="lineNum"> 86</span> : </span>
<span id="L87"><span class="lineNum"> 87</span> : static_assert(</span>
<span id="L88"><span class="lineNum"> 88</span> : CAFFE2_LOG_THRESHOLD &lt;= ::c10::GLOG_FATAL,</span>
<span id="L89"><span class="lineNum"> 89</span> : &quot;CAFFE2_LOG_THRESHOLD should at most be GLOG_FATAL.&quot;);</span>
<span id="L90"><span class="lineNum"> 90</span> : // If n is under the compile time caffe log threshold, The _CAFFE_LOG(n)</span>
<span id="L91"><span class="lineNum"> 91</span> : // should not generate anything in optimized code.</span>
<span id="L92"><span class="lineNum"> 92</span> : #define LOG(n) \</span>
<span id="L93"><span class="lineNum"> 93</span> : if (::c10::GLOG_##n &gt;= CAFFE2_LOG_THRESHOLD) \</span>
<span id="L94"><span class="lineNum"> 94</span> : ::c10::MessageLogger(__FILE__, __LINE__, ::c10::GLOG_##n).stream()</span>
<span id="L95"><span class="lineNum"> 95</span> : #define VLOG(n) \</span>
<span id="L96"><span class="lineNum"> 96</span> : if (-n &gt;= CAFFE2_LOG_THRESHOLD) \</span>
<span id="L97"><span class="lineNum"> 97</span> : ::c10::MessageLogger(__FILE__, __LINE__, -n).stream()</span>
<span id="L98"><span class="lineNum"> 98</span> : </span>
<span id="L99"><span class="lineNum"> 99</span> : #define LOG_IF(n, condition) \</span>
<span id="L100"><span class="lineNum"> 100</span> : if (::c10::GLOG_##n &gt;= CAFFE2_LOG_THRESHOLD &amp;&amp; (condition)) \</span>
<span id="L101"><span class="lineNum"> 101</span> : ::c10::MessageLogger(__FILE__, __LINE__, ::c10::GLOG_##n).stream()</span>
<span id="L102"><span class="lineNum"> 102</span> : #define VLOG_IF(n, condition) \</span>
<span id="L103"><span class="lineNum"> 103</span> : if (-n &gt;= CAFFE2_LOG_THRESHOLD &amp;&amp; (condition)) \</span>
<span id="L104"><span class="lineNum"> 104</span> : ::c10::MessageLogger(__FILE__, __LINE__, -n).stream()</span>
<span id="L105"><span class="lineNum"> 105</span> : </span>
<span id="L106"><span class="lineNum"> 106</span> : #define VLOG_IS_ON(verboselevel) (CAFFE2_LOG_THRESHOLD &lt;= -(verboselevel))</span>
<span id="L107"><span class="lineNum"> 107</span> : </span>
<span id="L108"><span class="lineNum"> 108</span> : // Log with source location information override (to be used in generic</span>
<span id="L109"><span class="lineNum"> 109</span> : // warning/error handlers implemented as functions, not macros)</span>
<span id="L110"><span class="lineNum"> 110</span> : #define LOG_AT_FILE_LINE(n, file, line) \</span>
<span id="L111"><span class="lineNum"> 111</span> : if (::c10::GLOG_##n &gt;= CAFFE2_LOG_THRESHOLD) \</span>
<span id="L112"><span class="lineNum"> 112</span> : ::c10::MessageLogger(file, line, ::c10::GLOG_##n).stream()</span>
<span id="L113"><span class="lineNum"> 113</span> : </span>
<span id="L114"><span class="lineNum"> 114</span> : // Log only if condition is met. Otherwise evaluates to void.</span>
<span id="L115"><span class="lineNum"> 115</span> : #define FATAL_IF(condition) \</span>
<span id="L116"><span class="lineNum"> 116</span> : condition ? (void)0 \</span>
<span id="L117"><span class="lineNum"> 117</span> : : ::c10::LoggerVoidify() &amp; \</span>
<span id="L118"><span class="lineNum"> 118</span> : ::c10::MessageLogger(__FILE__, __LINE__, ::c10::GLOG_FATAL).stream()</span>
<span id="L119"><span class="lineNum"> 119</span> : </span>
<span id="L120"><span class="lineNum"> 120</span> : // Check for a given boolean condition.</span>
<span id="L121"><span class="lineNum"> 121</span> : #define CHECK(condition) FATAL_IF(condition) &lt;&lt; &quot;Check failed: &quot; #condition &quot; &quot;</span>
<span id="L122"><span class="lineNum"> 122</span> : </span>
<span id="L123"><span class="lineNum"> 123</span> : #ifndef NDEBUG</span>
<span id="L124"><span class="lineNum"> 124</span> : // Debug only version of CHECK</span>
<span id="L125"><span class="lineNum"> 125</span> : #define DCHECK(condition) FATAL_IF(condition) &lt;&lt; &quot;Check failed: &quot; #condition &quot; &quot;</span>
<span id="L126"><span class="lineNum"> 126</span> : #define DLOG(severity) LOG(severity)</span>
<span id="L127"><span class="lineNum"> 127</span> : #else // NDEBUG</span>
<span id="L128"><span class="lineNum"> 128</span> : // Optimized version - generates no code.</span>
<span id="L129"><span class="lineNum"> 129</span> : #define DCHECK(condition) \</span>
<span id="L130"><span class="lineNum"> 130</span> : while (false) \</span>
<span id="L131"><span class="lineNum"> 131</span> : CHECK(condition)</span>
<span id="L132"><span class="lineNum"> 132</span> : </span>
<span id="L133"><span class="lineNum"> 133</span> : #define DLOG(n) \</span>
<span id="L134"><span class="lineNum"> 134</span> : true ? (void)0 \</span>
<span id="L135"><span class="lineNum"> 135</span> : : ::c10::LoggerVoidify() &amp; \</span>
<span id="L136"><span class="lineNum"> 136</span> : ::c10::MessageLogger(__FILE__, __LINE__, ::c10::GLOG_##n).stream()</span>
<span id="L137"><span class="lineNum"> 137</span> : #endif // NDEBUG</span>
<span id="L138"><span class="lineNum"> 138</span> : </span>
<span id="L139"><span class="lineNum"> 139</span> : #define TORCH_CHECK_OP(val1, val2, op) \</span>
<span id="L140"><span class="lineNum"> 140</span> : FATAL_IF(((val1)op(val2))) &lt;&lt; &quot;Check failed: &quot; #val1 &quot; &quot; #op &quot; &quot; #val2 &quot; (&quot; \</span>
<span id="L141"><span class="lineNum"> 141</span> : &lt;&lt; (val1) &lt;&lt; &quot; vs. &quot; &lt;&lt; (val2) &lt;&lt; &quot;) &quot;</span>
<span id="L142"><span class="lineNum"> 142</span> : </span>
<span id="L143"><span class="lineNum"> 143</span> : // TORCH_CHECK_OP macro definitions</span>
<span id="L144"><span class="lineNum"> 144</span> : #define TORCH_CHECK_EQ(val1, val2) TORCH_CHECK_OP(val1, val2, ==)</span>
<span id="L145"><span class="lineNum"> 145</span> : #define TORCH_CHECK_NE(val1, val2) TORCH_CHECK_OP(val1, val2, !=)</span>
<span id="L146"><span class="lineNum"> 146</span> : #define TORCH_CHECK_LE(val1, val2) TORCH_CHECK_OP(val1, val2, &lt;=)</span>
<span id="L147"><span class="lineNum"> 147</span> : #define TORCH_CHECK_LT(val1, val2) TORCH_CHECK_OP(val1, val2, &lt;)</span>
<span id="L148"><span class="lineNum"> 148</span> : #define TORCH_CHECK_GE(val1, val2) TORCH_CHECK_OP(val1, val2, &gt;=)</span>
<span id="L149"><span class="lineNum"> 149</span> : #define TORCH_CHECK_GT(val1, val2) TORCH_CHECK_OP(val1, val2, &gt;)</span>
<span id="L150"><span class="lineNum"> 150</span> : </span>
<span id="L151"><span class="lineNum"> 151</span> : #ifndef NDEBUG</span>
<span id="L152"><span class="lineNum"> 152</span> : // Debug only versions of TORCH_CHECK_OP macros.</span>
<span id="L153"><span class="lineNum"> 153</span> : #define TORCH_DCHECK_EQ(val1, val2) TORCH_CHECK_OP(val1, val2, ==)</span>
<span id="L154"><span class="lineNum"> 154</span> : #define TORCH_DCHECK_NE(val1, val2) TORCH_CHECK_OP(val1, val2, !=)</span>
<span id="L155"><span class="lineNum"> 155</span> : #define TORCH_DCHECK_LE(val1, val2) TORCH_CHECK_OP(val1, val2, &lt;=)</span>
<span id="L156"><span class="lineNum"> 156</span> : #define TORCH_DCHECK_LT(val1, val2) TORCH_CHECK_OP(val1, val2, &lt;)</span>
<span id="L157"><span class="lineNum"> 157</span> : #define TORCH_DCHECK_GE(val1, val2) TORCH_CHECK_OP(val1, val2, &gt;=)</span>
<span id="L158"><span class="lineNum"> 158</span> : #define TORCH_DCHECK_GT(val1, val2) TORCH_CHECK_OP(val1, val2, &gt;)</span>
<span id="L159"><span class="lineNum"> 159</span> : #else // !NDEBUG</span>
<span id="L160"><span class="lineNum"> 160</span> : // These versions generate no code in optimized mode.</span>
<span id="L161"><span class="lineNum"> 161</span> : #define TORCH_DCHECK_EQ(val1, val2) \</span>
<span id="L162"><span class="lineNum"> 162</span> : while (false) \</span>
<span id="L163"><span class="lineNum"> 163</span> : TORCH_CHECK_OP(val1, val2, ==)</span>
<span id="L164"><span class="lineNum"> 164</span> : #define TORCH_DCHECK_NE(val1, val2) \</span>
<span id="L165"><span class="lineNum"> 165</span> : while (false) \</span>
<span id="L166"><span class="lineNum"> 166</span> : TORCH_CHECK_OP(val1, val2, !=)</span>
<span id="L167"><span class="lineNum"> 167</span> : #define TORCH_DCHECK_LE(val1, val2) \</span>
<span id="L168"><span class="lineNum"> 168</span> : while (false) \</span>
<span id="L169"><span class="lineNum"> 169</span> : TORCH_CHECK_OP(val1, val2, &lt;=)</span>
<span id="L170"><span class="lineNum"> 170</span> : #define TORCH_DCHECK_LT(val1, val2) \</span>
<span id="L171"><span class="lineNum"> 171</span> : while (false) \</span>
<span id="L172"><span class="lineNum"> 172</span> : TORCH_CHECK_OP(val1, val2, &lt;)</span>
<span id="L173"><span class="lineNum"> 173</span> : #define TORCH_DCHECK_GE(val1, val2) \</span>
<span id="L174"><span class="lineNum"> 174</span> : while (false) \</span>
<span id="L175"><span class="lineNum"> 175</span> : TORCH_CHECK_OP(val1, val2, &gt;=)</span>
<span id="L176"><span class="lineNum"> 176</span> : #define TORCH_DCHECK_GT(val1, val2) \</span>
<span id="L177"><span class="lineNum"> 177</span> : while (false) \</span>
<span id="L178"><span class="lineNum"> 178</span> : TORCH_CHECK_OP(val1, val2, &gt;)</span>
<span id="L179"><span class="lineNum"> 179</span> : #endif // NDEBUG</span>
<span id="L180"><span class="lineNum"> 180</span> : </span>
<span id="L181"><span class="lineNum"> 181</span> : // Check that a pointer is not null.</span>
<span id="L182"><span class="lineNum"> 182</span> : #define TORCH_CHECK_NOTNULL(val) \</span>
<span id="L183"><span class="lineNum"> 183</span> : ::c10::CheckNotNull( \</span>
<span id="L184"><span class="lineNum"> 184</span> : __FILE__, __LINE__, &quot;Check failed: '&quot; #val &quot;' Must be non NULL&quot;, (val))</span>
<span id="L185"><span class="lineNum"> 185</span> : </span>
<span id="L186"><span class="lineNum"> 186</span> : #ifndef NDEBUG</span>
<span id="L187"><span class="lineNum"> 187</span> : // Debug only version of TORCH_CHECK_NOTNULL</span>
<span id="L188"><span class="lineNum"> 188</span> : #define TORCH_DCHECK_NOTNULL(val) \</span>
<span id="L189"><span class="lineNum"> 189</span> : ::c10::CheckNotNull( \</span>
<span id="L190"><span class="lineNum"> 190</span> : __FILE__, __LINE__, &quot;Check failed: '&quot; #val &quot;' Must be non NULL&quot;, (val))</span>
<span id="L191"><span class="lineNum"> 191</span> : #else // !NDEBUG</span>
<span id="L192"><span class="lineNum"> 192</span> : // Optimized version - generates no code.</span>
<span id="L193"><span class="lineNum"> 193</span> : #define TORCH_DCHECK_NOTNULL(val) \</span>
<span id="L194"><span class="lineNum"> 194</span> : while (false) \</span>
<span id="L195"><span class="lineNum"> 195</span> : TORCH_CHECK_NOTNULL(val)</span>
<span id="L196"><span class="lineNum"> 196</span> : #endif // NDEBUG</span>
<span id="L197"><span class="lineNum"> 197</span> : </span>
<span id="L198"><span class="lineNum"> 198</span> : // ---------------------- Support for std objects --------------------------</span>
<span id="L199"><span class="lineNum"> 199</span> : // These are adapted from glog to support a limited set of logging capability</span>
<span id="L200"><span class="lineNum"> 200</span> : // for STL objects.</span>
<span id="L201"><span class="lineNum"> 201</span> : </span>
<span id="L202"><span class="lineNum"> 202</span> : namespace std {</span>
<span id="L203"><span class="lineNum"> 203</span> : // Forward declare these two, and define them after all the container streams</span>
<span id="L204"><span class="lineNum"> 204</span> : // operators so that we can recurse from pair -&gt; container -&gt; container -&gt; pair</span>
<span id="L205"><span class="lineNum"> 205</span> : // properly.</span>
<span id="L206"><span class="lineNum"> 206</span> : template &lt;class First, class Second&gt;</span>
<span id="L207"><span class="lineNum"> 207</span> : std::ostream&amp; operator&lt;&lt;(std::ostream&amp; out, const std::pair&lt;First, Second&gt;&amp; p);</span>
<span id="L208"><span class="lineNum"> 208</span> : } // namespace std</span>
<span id="L209"><span class="lineNum"> 209</span> : </span>
<span id="L210"><span class="lineNum"> 210</span> : namespace c10 {</span>
<span id="L211"><span class="lineNum"> 211</span> : template &lt;class Iter&gt;</span>
<span id="L212"><span class="lineNum"> 212</span> : void PrintSequence(std::ostream&amp; ss, Iter begin, Iter end);</span>
<span id="L213"><span class="lineNum"> 213</span> : } // namespace c10</span>
<span id="L214"><span class="lineNum"> 214</span> : </span>
<span id="L215"><span class="lineNum"> 215</span> : namespace std {</span>
<span id="L216"><span class="lineNum"> 216</span> : #define INSTANTIATE_FOR_CONTAINER(container) \</span>
<span id="L217"><span class="lineNum"> 217</span> : template &lt;class... Types&gt; \</span>
<span id="L218"><span class="lineNum"> 218</span> : std::ostream&amp; operator&lt;&lt;( \</span>
<span id="L219"><span class="lineNum"> 219</span> : std::ostream&amp; out, const container&lt;Types...&gt;&amp; seq) { \</span>
<span id="L220"><span class="lineNum"> 220</span> : c10::PrintSequence(out, seq.begin(), seq.end()); \</span>
<span id="L221"><span class="lineNum"> 221</span> : return out; \</span>
<span id="L222"><span class="lineNum"> 222</span> : }</span>
<span id="L223"><span class="lineNum"> 223</span> : </span>
<span id="L224"><span class="lineNum"> 224</span> <span class="tlaUNC tlaBgUNC"> 0 : INSTANTIATE_FOR_CONTAINER(std::vector)</span></span>
<span id="L225"><span class="lineNum"> 225</span> : INSTANTIATE_FOR_CONTAINER(std::map)</span>
<span id="L226"><span class="lineNum"> 226</span> : INSTANTIATE_FOR_CONTAINER(std::set)</span>
<span id="L227"><span class="lineNum"> 227</span> : #undef INSTANTIATE_FOR_CONTAINER</span>
<span id="L228"><span class="lineNum"> 228</span> : </span>
<span id="L229"><span class="lineNum"> 229</span> : template &lt;class First, class Second&gt;</span>
<span id="L230"><span class="lineNum"> 230</span> <span class="tlaUNC"> 0 : inline std::ostream&amp; operator&lt;&lt;(</span></span>
<span id="L231"><span class="lineNum"> 231</span> : std::ostream&amp; out,</span>
<span id="L232"><span class="lineNum"> 232</span> : const std::pair&lt;First, Second&gt;&amp; p) {</span>
<span id="L233"><span class="lineNum"> 233</span> <span class="tlaUNC"> 0 : out &lt;&lt; '(' &lt;&lt; p.first &lt;&lt; &quot;, &quot; &lt;&lt; p.second &lt;&lt; ')';</span></span>
<span id="L234"><span class="lineNum"> 234</span> <span class="tlaUNC"> 0 : return out;</span></span>
<span id="L235"><span class="lineNum"> 235</span> : }</span>
<span id="L236"><span class="lineNum"> 236</span> : </span>
<span id="L237"><span class="lineNum"> 237</span> : inline std::ostream&amp; operator&lt;&lt;(std::ostream&amp; out, const std::nullptr_t&amp;) {</span>
<span id="L238"><span class="lineNum"> 238</span> : out &lt;&lt; &quot;(null)&quot;;</span>
<span id="L239"><span class="lineNum"> 239</span> : return out;</span>
<span id="L240"><span class="lineNum"> 240</span> : }</span>
<span id="L241"><span class="lineNum"> 241</span> : } // namespace std</span>
<span id="L242"><span class="lineNum"> 242</span> : </span>
<span id="L243"><span class="lineNum"> 243</span> : namespace c10 {</span>
<span id="L244"><span class="lineNum"> 244</span> : template &lt;class Iter&gt;</span>
<span id="L245"><span class="lineNum"> 245</span> <span class="tlaUNC"> 0 : inline void PrintSequence(std::ostream&amp; out, Iter begin, Iter end) {</span></span>
<span id="L246"><span class="lineNum"> 246</span> : // Output at most 100 elements -- appropriate if used for logging.</span>
<span id="L247"><span class="lineNum"> 247</span> <span class="tlaUNC"> 0 : for (int i = 0; begin != end &amp;&amp; i &lt; 100; ++i, ++begin) {</span></span>
<span id="L248"><span class="lineNum"> 248</span> <span class="tlaUNC"> 0 : if (i &gt; 0)</span></span>
<span id="L249"><span class="lineNum"> 249</span> <span class="tlaUNC"> 0 : out &lt;&lt; ' ';</span></span>
<span id="L250"><span class="lineNum"> 250</span> <span class="tlaUNC"> 0 : out &lt;&lt; *begin;</span></span>
<span id="L251"><span class="lineNum"> 251</span> : }</span>
<span id="L252"><span class="lineNum"> 252</span> <span class="tlaUNC"> 0 : if (begin != end) {</span></span>
<span id="L253"><span class="lineNum"> 253</span> <span class="tlaUNC"> 0 : out &lt;&lt; &quot; ...&quot;;</span></span>
<span id="L254"><span class="lineNum"> 254</span> : }</span>
<span id="L255"><span class="lineNum"> 255</span> <span class="tlaUNC"> 0 : }</span></span>
<span id="L256"><span class="lineNum"> 256</span> : } // namespace c10</span>
<span id="L257"><span class="lineNum"> 257</span> : </span>
<span id="L258"><span class="lineNum"> 258</span> : #endif // C10_UTIL_LOGGING_IS_NOT_GOOGLE_GLOG_H_</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,117 @@
<!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/c10/util/typeid.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/c10/util</a> - typeid.h<span style="font-size: 80%;"> (<a href="typeid.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">92.9&nbsp;%</td>
<td class="headerCovTableEntry">14</td>
<td class="headerCovTableEntry">13</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="typeid.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="typeid.h.gcov.html#L472">_ZN6caffe28TypeMeta12toScalarTypeEv</a></td>
<td class="coverFnHi">842576</td>
</tr>
<tr>
<td class="coverFn"><a href="typeid.h.gcov.html#L358">_ZNK6caffe28TypeMeta12isScalarTypeEv</a></td>
<td class="coverFnHi">842576</td>
</tr>
<tr>
<td class="coverFn"><a href="typeid.h.gcov.html#L459">_ZN6caffe28TypeMeta14fromScalarTypeEN3c1010ScalarTypeE</a></td>
<td class="coverFnHi">91449062</td>
</tr>
<tr>
<td class="coverFn"><a href="typeid.h.gcov.html#L576">_ZN6caffe28TypeMeta13_typeMetaDataIfEEtv</a></td>
<td class="coverFnHi">91449130</td>
</tr>
<tr>
<td class="coverFn"><a href="typeid.h.gcov.html#L438">_ZN6caffe28TypeMeta4MakeIfEES0_v</a></td>
<td class="coverFnHi">91449130</td>
</tr>
<tr>
<td class="coverFn"><a href="typeid.h.gcov.html#L346">_ZN6caffe28TypeMetaC2Et</a></td>
<td class="coverFnHi">182898192</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,117 @@
<!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/c10/util/typeid.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/c10/util</a> - typeid.h<span style="font-size: 80%;"> (<a href="typeid.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">92.9&nbsp;%</td>
<td class="headerCovTableEntry">14</td>
<td class="headerCovTableEntry">13</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="typeid.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="typeid.h.gcov.html#L472">_ZN6caffe28TypeMeta12toScalarTypeEv</a></td>
<td class="coverFnHi">842576</td>
</tr>
<tr>
<td class="coverFn"><a href="typeid.h.gcov.html#L576">_ZN6caffe28TypeMeta13_typeMetaDataIfEEtv</a></td>
<td class="coverFnHi">91449130</td>
</tr>
<tr>
<td class="coverFn"><a href="typeid.h.gcov.html#L459">_ZN6caffe28TypeMeta14fromScalarTypeEN3c1010ScalarTypeE</a></td>
<td class="coverFnHi">91449062</td>
</tr>
<tr>
<td class="coverFn"><a href="typeid.h.gcov.html#L438">_ZN6caffe28TypeMeta4MakeIfEES0_v</a></td>
<td class="coverFnHi">91449130</td>
</tr>
<tr>
<td class="coverFn"><a href="typeid.h.gcov.html#L346">_ZN6caffe28TypeMetaC2Et</a></td>
<td class="coverFnHi">182898192</td>
</tr>
<tr>
<td class="coverFn"><a href="typeid.h.gcov.html#L358">_ZNK6caffe28TypeMeta12isScalarTypeEv</a></td>
<td class="coverFnHi">842576</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,787 @@
<!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/c10/util/typeid.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/c10/util</a> - typeid.h<span style="font-size: 80%;"> (source / <a href="typeid.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">92.9&nbsp;%</td>
<td class="headerCovTableEntry">14</td>
<td class="headerCovTableEntry">13</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;atomic&gt;</span>
<span id="L4"><span class="lineNum"> 4</span> : #include &lt;cstdlib&gt;</span>
<span id="L5"><span class="lineNum"> 5</span> : #include &lt;memory&gt;</span>
<span id="L6"><span class="lineNum"> 6</span> : #include &lt;mutex&gt;</span>
<span id="L7"><span class="lineNum"> 7</span> : #include &lt;type_traits&gt;</span>
<span id="L8"><span class="lineNum"> 8</span> : #include &lt;vector&gt;</span>
<span id="L9"><span class="lineNum"> 9</span> : </span>
<span id="L10"><span class="lineNum"> 10</span> : #include &lt;c10/macros/Macros.h&gt;</span>
<span id="L11"><span class="lineNum"> 11</span> : #include &lt;c10/util/Exception.h&gt;</span>
<span id="L12"><span class="lineNum"> 12</span> : #include &lt;c10/util/IdWrapper.h&gt;</span>
<span id="L13"><span class="lineNum"> 13</span> : #include &lt;c10/util/TypeIndex.h&gt;</span>
<span id="L14"><span class="lineNum"> 14</span> : #include &lt;c10/util/TypeTraits.h&gt;</span>
<span id="L15"><span class="lineNum"> 15</span> : </span>
<span id="L16"><span class="lineNum"> 16</span> : #include &lt;c10/core/ScalarType.h&gt;</span>
<span id="L17"><span class="lineNum"> 17</span> : #include &lt;c10/util/irange.h&gt;</span>
<span id="L18"><span class="lineNum"> 18</span> : </span>
<span id="L19"><span class="lineNum"> 19</span> : /*</span>
<span id="L20"><span class="lineNum"> 20</span> : * TypeIdentifier is a small type containing an id.</span>
<span id="L21"><span class="lineNum"> 21</span> : * Types must be registered using CAFFE_DECLARE_KNOWN_TYPE() (in their header)</span>
<span id="L22"><span class="lineNum"> 22</span> : * and CAFFE_DEFINE_KNOWN_TYPE() (in their .cpp file) for them to have a type</span>
<span id="L23"><span class="lineNum"> 23</span> : * id. If a type is registered, you can also create an object containing meta</span>
<span id="L24"><span class="lineNum"> 24</span> : * data like constructor, destructor, stringified name, ... about the type by</span>
<span id="L25"><span class="lineNum"> 25</span> : * calling TypeMeta::Make&lt;T&gt;. This returns a TypeMeta() object, which is</span>
<span id="L26"><span class="lineNum"> 26</span> : * basically just a pointer to the type information, so it's cheap to pass</span>
<span id="L27"><span class="lineNum"> 27</span> : * around.</span>
<span id="L28"><span class="lineNum"> 28</span> : */</span>
<span id="L29"><span class="lineNum"> 29</span> : </span>
<span id="L30"><span class="lineNum"> 30</span> : // TODO: This file is still in the caffe2 namespace, despite living</span>
<span id="L31"><span class="lineNum"> 31</span> : // in the ATen directory. This is because the macro</span>
<span id="L32"><span class="lineNum"> 32</span> : // CAFFE_KNOWN_TYPE (and CAFFE_DECLARE_KNOWN_TYPE) defines a template</span>
<span id="L33"><span class="lineNum"> 33</span> : // specialization, which relies</span>
<span id="L34"><span class="lineNum"> 34</span> : // on the namespace of TypeMeta matching the namespace where the macro is</span>
<span id="L35"><span class="lineNum"> 35</span> : // called. This requires us to fix all of the call-sites, which I want to do</span>
<span id="L36"><span class="lineNum"> 36</span> : // later. So the namespace is not fixed at the moment.</span>
<span id="L37"><span class="lineNum"> 37</span> : </span>
<span id="L38"><span class="lineNum"> 38</span> : // Make at::Half a fundamental type.</span>
<span id="L39"><span class="lineNum"> 39</span> : namespace c10 {</span>
<span id="L40"><span class="lineNum"> 40</span> : namespace guts {</span>
<span id="L41"><span class="lineNum"> 41</span> : template &lt;&gt;</span>
<span id="L42"><span class="lineNum"> 42</span> : struct is_fundamental&lt;at::Half&gt; : std::true_type {};</span>
<span id="L43"><span class="lineNum"> 43</span> : } // namespace guts</span>
<span id="L44"><span class="lineNum"> 44</span> : } // namespace c10</span>
<span id="L45"><span class="lineNum"> 45</span> : </span>
<span id="L46"><span class="lineNum"> 46</span> : namespace caffe2 {</span>
<span id="L47"><span class="lineNum"> 47</span> : </span>
<span id="L48"><span class="lineNum"> 48</span> : /**</span>
<span id="L49"><span class="lineNum"> 49</span> : * A type id is a unique id for a given C++ type.</span>
<span id="L50"><span class="lineNum"> 50</span> : * You need to register your types using CAFFE_KNOWN_TYPE(MyType) to be able to</span>
<span id="L51"><span class="lineNum"> 51</span> : * use TypeIdentifier with custom types. This is for example used to store the</span>
<span id="L52"><span class="lineNum"> 52</span> : * dtype of tensors.</span>
<span id="L53"><span class="lineNum"> 53</span> : */</span>
<span id="L54"><span class="lineNum"> 54</span> : class C10_API TypeIdentifier final</span>
<span id="L55"><span class="lineNum"> 55</span> : : public at::IdWrapper&lt;TypeIdentifier, c10::util::type_index&gt; {</span>
<span id="L56"><span class="lineNum"> 56</span> : public:</span>
<span id="L57"><span class="lineNum"> 57</span> : friend std::ostream&amp; operator&lt;&lt;(std::ostream&amp; stream, TypeIdentifier typeId);</span>
<span id="L58"><span class="lineNum"> 58</span> : friend constexpr bool operator&lt;(TypeIdentifier lhs, TypeIdentifier rhs);</span>
<span id="L59"><span class="lineNum"> 59</span> : </span>
<span id="L60"><span class="lineNum"> 60</span> : /**</span>
<span id="L61"><span class="lineNum"> 61</span> : * Returns the unique id for the given type T. The id is unique for the type T</span>
<span id="L62"><span class="lineNum"> 62</span> : * in the sense that for any two different types, their ids are different; for</span>
<span id="L63"><span class="lineNum"> 63</span> : * the same type T, the id remains the same over different calls of the</span>
<span id="L64"><span class="lineNum"> 64</span> : * function. However, this is not guaranteed over different runs, as the id</span>
<span id="L65"><span class="lineNum"> 65</span> : * is generated during run-time. Do NOT serialize the id for storage.</span>
<span id="L66"><span class="lineNum"> 66</span> : */</span>
<span id="L67"><span class="lineNum"> 67</span> : template &lt;typename T&gt;</span>
<span id="L68"><span class="lineNum"> 68</span> : static C10_HOST_CONSTEXPR_EXCEPT_WIN_CUDA TypeIdentifier Get() noexcept {</span>
<span id="L69"><span class="lineNum"> 69</span> : return TypeIdentifier(c10::util::get_type_index&lt;T&gt;());</span>
<span id="L70"><span class="lineNum"> 70</span> : }</span>
<span id="L71"><span class="lineNum"> 71</span> : </span>
<span id="L72"><span class="lineNum"> 72</span> : static constexpr TypeIdentifier uninitialized() {</span>
<span id="L73"><span class="lineNum"> 73</span> : return TypeIdentifier(c10::util::type_index{0});</span>
<span id="L74"><span class="lineNum"> 74</span> : }</span>
<span id="L75"><span class="lineNum"> 75</span> : </span>
<span id="L76"><span class="lineNum"> 76</span> : private:</span>
<span id="L77"><span class="lineNum"> 77</span> : constexpr explicit TypeIdentifier(c10::util::type_index id) : IdWrapper(id) {}</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> : // Allow usage in std::map / std::set</span>
<span id="L81"><span class="lineNum"> 81</span> : // TODO Disallow this and rather use std::unordered_map/set everywhere</span>
<span id="L82"><span class="lineNum"> 82</span> : inline constexpr bool operator&lt;(TypeIdentifier lhs, TypeIdentifier rhs) {</span>
<span id="L83"><span class="lineNum"> 83</span> : return lhs.underlyingId() &lt; rhs.underlyingId();</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> : inline std::ostream&amp; operator&lt;&lt;(</span>
<span id="L87"><span class="lineNum"> 87</span> : std::ostream&amp; stream,</span>
<span id="L88"><span class="lineNum"> 88</span> : caffe2::TypeIdentifier typeId) {</span>
<span id="L89"><span class="lineNum"> 89</span> : return stream &lt;&lt; typeId.underlyingId();</span>
<span id="L90"><span class="lineNum"> 90</span> : }</span>
<span id="L91"><span class="lineNum"> 91</span> : </span>
<span id="L92"><span class="lineNum"> 92</span> : } // namespace caffe2</span>
<span id="L93"><span class="lineNum"> 93</span> : </span>
<span id="L94"><span class="lineNum"> 94</span> : namespace at {</span>
<span id="L95"><span class="lineNum"> 95</span> : using DataType = caffe2::TypeIdentifier;</span>
<span id="L96"><span class="lineNum"> 96</span> : }</span>
<span id="L97"><span class="lineNum"> 97</span> : </span>
<span id="L98"><span class="lineNum"> 98</span> : C10_DEFINE_HASH_FOR_IDWRAPPER(caffe2::TypeIdentifier)</span>
<span id="L99"><span class="lineNum"> 99</span> : </span>
<span id="L100"><span class="lineNum"> 100</span> : namespace caffe2 {</span>
<span id="L101"><span class="lineNum"> 101</span> : </span>
<span id="L102"><span class="lineNum"> 102</span> : namespace detail {</span>
<span id="L103"><span class="lineNum"> 103</span> : </span>
<span id="L104"><span class="lineNum"> 104</span> : // This struct holds the actual type information. There will be</span>
<span id="L105"><span class="lineNum"> 105</span> : // one allocated per type. TypeMeta objects will then point to the struct</span>
<span id="L106"><span class="lineNum"> 106</span> : // instance for the type they're configured for.</span>
<span id="L107"><span class="lineNum"> 107</span> : struct TypeMetaData final {</span>
<span id="L108"><span class="lineNum"> 108</span> : using New = void*();</span>
<span id="L109"><span class="lineNum"> 109</span> : using PlacementNew = void(void*, size_t);</span>
<span id="L110"><span class="lineNum"> 110</span> : using Copy = void(const void*, void*, size_t);</span>
<span id="L111"><span class="lineNum"> 111</span> : using PlacementDelete = void(void*, size_t);</span>
<span id="L112"><span class="lineNum"> 112</span> : using Delete = void(void*);</span>
<span id="L113"><span class="lineNum"> 113</span> : </span>
<span id="L114"><span class="lineNum"> 114</span> : constexpr TypeMetaData() noexcept</span>
<span id="L115"><span class="lineNum"> 115</span> : : itemsize_(0),</span>
<span id="L116"><span class="lineNum"> 116</span> : new_(nullptr),</span>
<span id="L117"><span class="lineNum"> 117</span> : placementNew_(nullptr),</span>
<span id="L118"><span class="lineNum"> 118</span> : copy_(nullptr),</span>
<span id="L119"><span class="lineNum"> 119</span> : placementDelete_(nullptr),</span>
<span id="L120"><span class="lineNum"> 120</span> : delete_(nullptr),</span>
<span id="L121"><span class="lineNum"> 121</span> : id_(TypeIdentifier::uninitialized()),</span>
<span id="L122"><span class="lineNum"> 122</span> : name_(&quot;nullptr (uninitialized)&quot;) {}</span>
<span id="L123"><span class="lineNum"> 123</span> : </span>
<span id="L124"><span class="lineNum"> 124</span> : constexpr TypeMetaData(</span>
<span id="L125"><span class="lineNum"> 125</span> : size_t itemsize,</span>
<span id="L126"><span class="lineNum"> 126</span> : New* newFn,</span>
<span id="L127"><span class="lineNum"> 127</span> : PlacementNew* placementNew,</span>
<span id="L128"><span class="lineNum"> 128</span> : Copy* copy,</span>
<span id="L129"><span class="lineNum"> 129</span> : PlacementDelete* placementDelete,</span>
<span id="L130"><span class="lineNum"> 130</span> : Delete* deleteFn,</span>
<span id="L131"><span class="lineNum"> 131</span> : TypeIdentifier id,</span>
<span id="L132"><span class="lineNum"> 132</span> : c10::string_view name) noexcept</span>
<span id="L133"><span class="lineNum"> 133</span> : : itemsize_(itemsize),</span>
<span id="L134"><span class="lineNum"> 134</span> : new_(newFn),</span>
<span id="L135"><span class="lineNum"> 135</span> : placementNew_(placementNew),</span>
<span id="L136"><span class="lineNum"> 136</span> : copy_(copy),</span>
<span id="L137"><span class="lineNum"> 137</span> : placementDelete_(placementDelete),</span>
<span id="L138"><span class="lineNum"> 138</span> : delete_(deleteFn),</span>
<span id="L139"><span class="lineNum"> 139</span> : id_(id),</span>
<span id="L140"><span class="lineNum"> 140</span> : name_(name) {}</span>
<span id="L141"><span class="lineNum"> 141</span> : </span>
<span id="L142"><span class="lineNum"> 142</span> : size_t itemsize_;</span>
<span id="L143"><span class="lineNum"> 143</span> : New* new_;</span>
<span id="L144"><span class="lineNum"> 144</span> : PlacementNew* placementNew_;</span>
<span id="L145"><span class="lineNum"> 145</span> : Copy* copy_;</span>
<span id="L146"><span class="lineNum"> 146</span> : PlacementDelete* placementDelete_;</span>
<span id="L147"><span class="lineNum"> 147</span> : Delete* delete_;</span>
<span id="L148"><span class="lineNum"> 148</span> : TypeIdentifier id_;</span>
<span id="L149"><span class="lineNum"> 149</span> : c10::string_view name_;</span>
<span id="L150"><span class="lineNum"> 150</span> : };</span>
<span id="L151"><span class="lineNum"> 151</span> : </span>
<span id="L152"><span class="lineNum"> 152</span> : // Mechanism for throwing errors which can't be prevented at compile time</span>
<span id="L153"><span class="lineNum"> 153</span> : // due to type erasure. E.g. somebody calling TypeMeta::copy() for</span>
<span id="L154"><span class="lineNum"> 154</span> : // non-copyable type. Right now just throws exception but is implemented</span>
<span id="L155"><span class="lineNum"> 155</span> : // in .cpp to manage dependencies</span>
<span id="L156"><span class="lineNum"> 156</span> : [[noreturn]] C10_API void _ThrowRuntimeTypeLogicError(const std::string&amp; msg);</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> : * Placement new function for the type.</span>
<span id="L160"><span class="lineNum"> 160</span> : */</span>
<span id="L161"><span class="lineNum"> 161</span> : template &lt;typename T&gt;</span>
<span id="L162"><span class="lineNum"> 162</span> : inline void _PlacementNew(void* ptr, size_t n) {</span>
<span id="L163"><span class="lineNum"> 163</span> : T* typed_ptr = static_cast&lt;T*&gt;(ptr);</span>
<span id="L164"><span class="lineNum"> 164</span> : for (const auto i : c10::irange(n)) {</span>
<span id="L165"><span class="lineNum"> 165</span> : new (typed_ptr + i) T;</span>
<span id="L166"><span class="lineNum"> 166</span> : }</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> : template &lt;typename T&gt;</span>
<span id="L170"><span class="lineNum"> 170</span> : inline void _PlacementNewNotDefault(void* /*ptr*/, size_t /*n*/) {</span>
<span id="L171"><span class="lineNum"> 171</span> : _ThrowRuntimeTypeLogicError(</span>
<span id="L172"><span class="lineNum"> 172</span> : &quot;Type &quot; + std::string(c10::util::get_fully_qualified_type_name&lt;T&gt;()) +</span>
<span id="L173"><span class="lineNum"> 173</span> : &quot; is not default-constructible.&quot;);</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> : template &lt;</span>
<span id="L177"><span class="lineNum"> 177</span> : typename T,</span>
<span id="L178"><span class="lineNum"> 178</span> : std::enable_if_t&lt;std::is_default_constructible&lt;T&gt;::value&gt;* = nullptr&gt;</span>
<span id="L179"><span class="lineNum"> 179</span> : inline constexpr TypeMetaData::PlacementNew* _PickPlacementNew() {</span>
<span id="L180"><span class="lineNum"> 180</span> : return (c10::guts::is_fundamental&lt;T&gt;::value || std::is_pointer&lt;T&gt;::value)</span>
<span id="L181"><span class="lineNum"> 181</span> : ? nullptr</span>
<span id="L182"><span class="lineNum"> 182</span> : : &amp;_PlacementNew&lt;T&gt;;</span>
<span id="L183"><span class="lineNum"> 183</span> : }</span>
<span id="L184"><span class="lineNum"> 184</span> : </span>
<span id="L185"><span class="lineNum"> 185</span> : template &lt;</span>
<span id="L186"><span class="lineNum"> 186</span> : typename T,</span>
<span id="L187"><span class="lineNum"> 187</span> : std::enable_if_t&lt;!std::is_default_constructible&lt;T&gt;::value&gt;* = nullptr&gt;</span>
<span id="L188"><span class="lineNum"> 188</span> : inline constexpr TypeMetaData::PlacementNew* _PickPlacementNew() {</span>
<span id="L189"><span class="lineNum"> 189</span> : static_assert(</span>
<span id="L190"><span class="lineNum"> 190</span> : !c10::guts::is_fundamental&lt;T&gt;::value &amp;&amp; !std::is_pointer&lt;T&gt;::value,</span>
<span id="L191"><span class="lineNum"> 191</span> : &quot;this should have picked the other SFINAE case&quot;);</span>
<span id="L192"><span class="lineNum"> 192</span> : return &amp;_PlacementNewNotDefault&lt;T&gt;;</span>
<span id="L193"><span class="lineNum"> 193</span> : }</span>
<span id="L194"><span class="lineNum"> 194</span> : </span>
<span id="L195"><span class="lineNum"> 195</span> : template &lt;typename T&gt;</span>
<span id="L196"><span class="lineNum"> 196</span> : inline void* _New() {</span>
<span id="L197"><span class="lineNum"> 197</span> : return new T;</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> : template &lt;typename T&gt;</span>
<span id="L201"><span class="lineNum"> 201</span> : inline void* _NewNotDefault() {</span>
<span id="L202"><span class="lineNum"> 202</span> : _ThrowRuntimeTypeLogicError(</span>
<span id="L203"><span class="lineNum"> 203</span> : &quot;Type &quot; + std::string(c10::util::get_fully_qualified_type_name&lt;T&gt;()) +</span>
<span id="L204"><span class="lineNum"> 204</span> : &quot; is not default-constructible.&quot;);</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> : template &lt;</span>
<span id="L208"><span class="lineNum"> 208</span> : typename T,</span>
<span id="L209"><span class="lineNum"> 209</span> : std::enable_if_t&lt;std::is_default_constructible&lt;T&gt;::value&gt;* = nullptr&gt;</span>
<span id="L210"><span class="lineNum"> 210</span> : inline constexpr TypeMetaData::New* _PickNew() {</span>
<span id="L211"><span class="lineNum"> 211</span> : return &amp;_New&lt;T&gt;;</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> : template &lt;</span>
<span id="L215"><span class="lineNum"> 215</span> : typename T,</span>
<span id="L216"><span class="lineNum"> 216</span> : std::enable_if_t&lt;!std::is_default_constructible&lt;T&gt;::value&gt;* = nullptr&gt;</span>
<span id="L217"><span class="lineNum"> 217</span> : inline constexpr TypeMetaData::New* _PickNew() {</span>
<span id="L218"><span class="lineNum"> 218</span> : return &amp;_NewNotDefault&lt;T&gt;;</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>
<span id="L222"><span class="lineNum"> 222</span> : * Typed copy function for classes.</span>
<span id="L223"><span class="lineNum"> 223</span> : */</span>
<span id="L224"><span class="lineNum"> 224</span> : template &lt;typename T&gt;</span>
<span id="L225"><span class="lineNum"> 225</span> : inline void _Copy(const void* src, void* dst, size_t n) {</span>
<span id="L226"><span class="lineNum"> 226</span> : const T* typed_src = static_cast&lt;const T*&gt;(src);</span>
<span id="L227"><span class="lineNum"> 227</span> : T* typed_dst = static_cast&lt;T*&gt;(dst);</span>
<span id="L228"><span class="lineNum"> 228</span> : for (const auto i : c10::irange(n)) {</span>
<span id="L229"><span class="lineNum"> 229</span> : typed_dst[i] = typed_src[i];</span>
<span id="L230"><span class="lineNum"> 230</span> : }</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> : /**</span>
<span id="L234"><span class="lineNum"> 234</span> : * A placeholder function for types that do not allow assignment.</span>
<span id="L235"><span class="lineNum"> 235</span> : */</span>
<span id="L236"><span class="lineNum"> 236</span> : template &lt;typename T&gt;</span>
<span id="L237"><span class="lineNum"> 237</span> : inline void _CopyNotAllowed(const void* /*src*/, void* /*dst*/, size_t /*n*/) {</span>
<span id="L238"><span class="lineNum"> 238</span> : _ThrowRuntimeTypeLogicError(</span>
<span id="L239"><span class="lineNum"> 239</span> : &quot;Type &quot; + std::string(c10::util::get_fully_qualified_type_name&lt;T&gt;()) +</span>
<span id="L240"><span class="lineNum"> 240</span> : &quot; does not allow assignment.&quot;);</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;</span>
<span id="L244"><span class="lineNum"> 244</span> : typename T,</span>
<span id="L245"><span class="lineNum"> 245</span> : std::enable_if_t&lt;std::is_copy_assignable&lt;T&gt;::value&gt;* = nullptr&gt;</span>
<span id="L246"><span class="lineNum"> 246</span> : inline constexpr TypeMetaData::Copy* _PickCopy() {</span>
<span id="L247"><span class="lineNum"> 247</span> : return (c10::guts::is_fundamental&lt;T&gt;::value || std::is_pointer&lt;T&gt;::value)</span>
<span id="L248"><span class="lineNum"> 248</span> : ? nullptr</span>
<span id="L249"><span class="lineNum"> 249</span> : : &amp;_Copy&lt;T&gt;;</span>
<span id="L250"><span class="lineNum"> 250</span> : }</span>
<span id="L251"><span class="lineNum"> 251</span> : </span>
<span id="L252"><span class="lineNum"> 252</span> : template &lt;</span>
<span id="L253"><span class="lineNum"> 253</span> : typename T,</span>
<span id="L254"><span class="lineNum"> 254</span> : std::enable_if_t&lt;!std::is_copy_assignable&lt;T&gt;::value&gt;* = nullptr&gt;</span>
<span id="L255"><span class="lineNum"> 255</span> : inline constexpr TypeMetaData::Copy* _PickCopy() {</span>
<span id="L256"><span class="lineNum"> 256</span> : static_assert(</span>
<span id="L257"><span class="lineNum"> 257</span> : !c10::guts::is_fundamental&lt;T&gt;::value &amp;&amp; !std::is_pointer&lt;T&gt;::value,</span>
<span id="L258"><span class="lineNum"> 258</span> : &quot;this should have picked the other SFINAE case&quot;);</span>
<span id="L259"><span class="lineNum"> 259</span> : return &amp;_CopyNotAllowed&lt;T&gt;;</span>
<span id="L260"><span class="lineNum"> 260</span> : }</span>
<span id="L261"><span class="lineNum"> 261</span> : </span>
<span id="L262"><span class="lineNum"> 262</span> : /**</span>
<span id="L263"><span class="lineNum"> 263</span> : * Destructor for non-fundamental types.</span>
<span id="L264"><span class="lineNum"> 264</span> : */</span>
<span id="L265"><span class="lineNum"> 265</span> : template &lt;typename T&gt;</span>
<span id="L266"><span class="lineNum"> 266</span> : inline void _PlacementDelete(void* ptr, size_t n) {</span>
<span id="L267"><span class="lineNum"> 267</span> : T* typed_ptr = static_cast&lt;T*&gt;(ptr);</span>
<span id="L268"><span class="lineNum"> 268</span> : for (const auto i : c10::irange(n)) {</span>
<span id="L269"><span class="lineNum"> 269</span> : typed_ptr[i].~T();</span>
<span id="L270"><span class="lineNum"> 270</span> : }</span>
<span id="L271"><span class="lineNum"> 271</span> : }</span>
<span id="L272"><span class="lineNum"> 272</span> : </span>
<span id="L273"><span class="lineNum"> 273</span> : template &lt;typename T&gt;</span>
<span id="L274"><span class="lineNum"> 274</span> : inline constexpr TypeMetaData::PlacementDelete* _PickPlacementDelete() {</span>
<span id="L275"><span class="lineNum"> 275</span> : return (c10::guts::is_fundamental&lt;T&gt;::value || std::is_pointer&lt;T&gt;::value)</span>
<span id="L276"><span class="lineNum"> 276</span> : ? nullptr</span>
<span id="L277"><span class="lineNum"> 277</span> : : &amp;_PlacementDelete&lt;T&gt;;</span>
<span id="L278"><span class="lineNum"> 278</span> : }</span>
<span id="L279"><span class="lineNum"> 279</span> : </span>
<span id="L280"><span class="lineNum"> 280</span> : template &lt;typename T&gt;</span>
<span id="L281"><span class="lineNum"> 281</span> : inline void _Delete(void* ptr) {</span>
<span id="L282"><span class="lineNum"> 282</span> : T* typed_ptr = static_cast&lt;T*&gt;(ptr);</span>
<span id="L283"><span class="lineNum"> 283</span> : delete typed_ptr;</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> : inline constexpr TypeMetaData::Delete* _PickDelete() noexcept {</span>
<span id="L288"><span class="lineNum"> 288</span> : return &amp;_Delete&lt;T&gt;;</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> : class _Uninitialized final {};</span>
<span id="L292"><span class="lineNum"> 292</span> : </span>
<span id="L293"><span class="lineNum"> 293</span> : } // namespace detail</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> : // note: this is outside TypeMeta bc gcc seems to have trouble</span>
<span id="L297"><span class="lineNum"> 297</span> : // with scalarTypeItemSizes as a constexpr static member used by</span>
<span id="L298"><span class="lineNum"> 298</span> : // a public inline instance method</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> : // item sizes for TypeMeta::itemsize() fast path</span>
<span id="L302"><span class="lineNum"> 302</span> : static constexpr uint8_t scalarTypeItemSizes[NumScalarTypes] = {</span>
<span id="L303"><span class="lineNum"> 303</span> : #define SCALAR_TYPE_SIZE(T, name) sizeof(T),</span>
<span id="L304"><span class="lineNum"> 304</span> : AT_FORALL_SCALAR_TYPES_WITH_COMPLEX_AND_QINTS(SCALAR_TYPE_SIZE)</span>
<span id="L305"><span class="lineNum"> 305</span> : #undef SCALAR_TYPE_SIZE</span>
<span id="L306"><span class="lineNum"> 306</span> : 0, // Undefined</span>
<span id="L307"><span class="lineNum"> 307</span> : };</span>
<span id="L308"><span class="lineNum"> 308</span> : </span>
<span id="L309"><span class="lineNum"> 309</span> : /**</span>
<span id="L310"><span class="lineNum"> 310</span> : * TypeMeta is a thin class that allows us to store the type of a container such</span>
<span id="L311"><span class="lineNum"> 311</span> : * as a blob, or the data type of a tensor, with a unique run-time id. It also</span>
<span id="L312"><span class="lineNum"> 312</span> : * stores some additional data such as the item size and the name of the type</span>
<span id="L313"><span class="lineNum"> 313</span> : * for run-time inspection.</span>
<span id="L314"><span class="lineNum"> 314</span> : */</span>
<span id="L315"><span class="lineNum"> 315</span> : class C10_API TypeMeta final {</span>
<span id="L316"><span class="lineNum"> 316</span> : public:</span>
<span id="L317"><span class="lineNum"> 317</span> : using New = detail::TypeMetaData::New;</span>
<span id="L318"><span class="lineNum"> 318</span> : using PlacementNew = detail::TypeMetaData::PlacementNew;</span>
<span id="L319"><span class="lineNum"> 319</span> : using Copy = detail::TypeMetaData::Copy;</span>
<span id="L320"><span class="lineNum"> 320</span> : using PlacementDelete = detail::TypeMetaData::PlacementDelete;</span>
<span id="L321"><span class="lineNum"> 321</span> : using Delete = detail::TypeMetaData::Delete;</span>
<span id="L322"><span class="lineNum"> 322</span> : </span>
<span id="L323"><span class="lineNum"> 323</span> : /** Create a dummy TypeMeta object. To create a TypeMeta object for a specific</span>
<span id="L324"><span class="lineNum"> 324</span> : * type, use TypeMeta::Make&lt;T&gt;().</span>
<span id="L325"><span class="lineNum"> 325</span> : */</span>
<span id="L326"><span class="lineNum"> 326</span> : TypeMeta() noexcept;</span>
<span id="L327"><span class="lineNum"> 327</span> : </span>
<span id="L328"><span class="lineNum"> 328</span> : /**</span>
<span id="L329"><span class="lineNum"> 329</span> : * Copy constructor.</span>
<span id="L330"><span class="lineNum"> 330</span> : */</span>
<span id="L331"><span class="lineNum"> 331</span> : TypeMeta(const TypeMeta&amp; src) noexcept = default;</span>
<span id="L332"><span class="lineNum"> 332</span> : </span>
<span id="L333"><span class="lineNum"> 333</span> : /**</span>
<span id="L334"><span class="lineNum"> 334</span> : * Assignment operators.</span>
<span id="L335"><span class="lineNum"> 335</span> : */</span>
<span id="L336"><span class="lineNum"> 336</span> : TypeMeta&amp; operator=(const TypeMeta&amp; src) noexcept = default;</span>
<span id="L337"><span class="lineNum"> 337</span> : </span>
<span id="L338"><span class="lineNum"> 338</span> : TypeMeta(TypeMeta&amp;&amp; rhs) noexcept = default;</span>
<span id="L339"><span class="lineNum"> 339</span> : </span>
<span id="L340"><span class="lineNum"> 340</span> : inline TypeMeta&amp; operator=(ScalarType scalar_type) noexcept {</span>
<span id="L341"><span class="lineNum"> 341</span> : index_ = static_cast&lt;uint16_t&gt;(scalar_type);</span>
<span id="L342"><span class="lineNum"> 342</span> : return *this;</span>
<span id="L343"><span class="lineNum"> 343</span> : }</span>
<span id="L344"><span class="lineNum"> 344</span> : </span>
<span id="L345"><span class="lineNum"> 345</span> : private:</span>
<span id="L346"><span class="lineNum"> 346</span> : // TypeMeta can only be created by Make, making sure that we do not</span>
<span id="L347"><span class="lineNum"> 347</span> : // create incorrectly mixed up TypeMeta objects.</span>
<span id="L348"><span class="lineNum"> 348</span> <span class="tlaGNC tlaBgGNC"> 182898192 : explicit TypeMeta(const uint16_t index) noexcept : index_(index) {}</span></span>
<span id="L349"><span class="lineNum"> 349</span> : </span>
<span id="L350"><span class="lineNum"> 350</span> : public:</span>
<span id="L351"><span class="lineNum"> 351</span> : /**</span>
<span id="L352"><span class="lineNum"> 352</span> : * Returns the type id.</span>
<span id="L353"><span class="lineNum"> 353</span> : */</span>
<span id="L354"><span class="lineNum"> 354</span> : TypeIdentifier id() const noexcept {</span>
<span id="L355"><span class="lineNum"> 355</span> : return data().id_;</span>
<span id="L356"><span class="lineNum"> 356</span> : }</span>
<span id="L357"><span class="lineNum"> 357</span> : /**</span>
<span id="L358"><span class="lineNum"> 358</span> : * true if we represent some ScalarType type</span>
<span id="L359"><span class="lineNum"> 359</span> : */</span>
<span id="L360"><span class="lineNum"> 360</span> <span class="tlaGNC"> 842576 : inline bool isScalarType() const noexcept {</span></span>
<span id="L361"><span class="lineNum"> 361</span> <span class="tlaGNC"> 842576 : return index_ &lt; NumScalarTypes;</span></span>
<span id="L362"><span class="lineNum"> 362</span> : }</span>
<span id="L363"><span class="lineNum"> 363</span> : /**</span>
<span id="L364"><span class="lineNum"> 364</span> : * true if we represent ScalarType scalar_type</span>
<span id="L365"><span class="lineNum"> 365</span> : */</span>
<span id="L366"><span class="lineNum"> 366</span> : inline bool isScalarType(ScalarType scalar_type) const noexcept {</span>
<span id="L367"><span class="lineNum"> 367</span> : return index_ == static_cast&lt;uint16_t&gt;(scalar_type);</span>
<span id="L368"><span class="lineNum"> 368</span> : }</span>
<span id="L369"><span class="lineNum"> 369</span> : /**</span>
<span id="L370"><span class="lineNum"> 370</span> : * Returns the size of the item.</span>
<span id="L371"><span class="lineNum"> 371</span> : */</span>
<span id="L372"><span class="lineNum"> 372</span> : inline size_t itemsize() const noexcept {</span>
<span id="L373"><span class="lineNum"> 373</span> : if (C10_LIKELY(isScalarType())) {</span>
<span id="L374"><span class="lineNum"> 374</span> : return scalarTypeItemSizes[index_];</span>
<span id="L375"><span class="lineNum"> 375</span> : }</span>
<span id="L376"><span class="lineNum"> 376</span> : return data().itemsize_;</span>
<span id="L377"><span class="lineNum"> 377</span> : }</span>
<span id="L378"><span class="lineNum"> 378</span> : /**</span>
<span id="L379"><span class="lineNum"> 379</span> : * Returns the new function pointer for individual items.</span>
<span id="L380"><span class="lineNum"> 380</span> : */</span>
<span id="L381"><span class="lineNum"> 381</span> : New* newFn() const noexcept {</span>
<span id="L382"><span class="lineNum"> 382</span> : return data().new_;</span>
<span id="L383"><span class="lineNum"> 383</span> : }</span>
<span id="L384"><span class="lineNum"> 384</span> : /**</span>
<span id="L385"><span class="lineNum"> 385</span> : * Returns the placement new function pointer for individual items.</span>
<span id="L386"><span class="lineNum"> 386</span> : */</span>
<span id="L387"><span class="lineNum"> 387</span> : PlacementNew* placementNew() const noexcept {</span>
<span id="L388"><span class="lineNum"> 388</span> : return data().placementNew_;</span>
<span id="L389"><span class="lineNum"> 389</span> : }</span>
<span id="L390"><span class="lineNum"> 390</span> : /**</span>
<span id="L391"><span class="lineNum"> 391</span> : * Returns the typed copy function pointer for individual iterms.</span>
<span id="L392"><span class="lineNum"> 392</span> : */</span>
<span id="L393"><span class="lineNum"> 393</span> : Copy* copy() const noexcept {</span>
<span id="L394"><span class="lineNum"> 394</span> : return data().copy_;</span>
<span id="L395"><span class="lineNum"> 395</span> : }</span>
<span id="L396"><span class="lineNum"> 396</span> : /**</span>
<span id="L397"><span class="lineNum"> 397</span> : * Returns the destructor function pointer for individual items.</span>
<span id="L398"><span class="lineNum"> 398</span> : */</span>
<span id="L399"><span class="lineNum"> 399</span> : PlacementDelete* placementDelete() const noexcept {</span>
<span id="L400"><span class="lineNum"> 400</span> : return data().placementDelete_;</span>
<span id="L401"><span class="lineNum"> 401</span> : }</span>
<span id="L402"><span class="lineNum"> 402</span> : Delete* deleteFn() const noexcept {</span>
<span id="L403"><span class="lineNum"> 403</span> : return data().delete_;</span>
<span id="L404"><span class="lineNum"> 404</span> : }</span>
<span id="L405"><span class="lineNum"> 405</span> : /**</span>
<span id="L406"><span class="lineNum"> 406</span> : * Returns a printable name for the type.</span>
<span id="L407"><span class="lineNum"> 407</span> : */</span>
<span id="L408"><span class="lineNum"> 408</span> : c10::string_view name() const noexcept {</span>
<span id="L409"><span class="lineNum"> 409</span> : return data().name_;</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> : friend bool operator==(const TypeMeta&amp; lhs, const TypeMeta&amp; rhs) noexcept;</span>
<span id="L413"><span class="lineNum"> 413</span> : </span>
<span id="L414"><span class="lineNum"> 414</span> : template &lt;typename T&gt;</span>
<span id="L415"><span class="lineNum"> 415</span> : bool Match() const noexcept {</span>
<span id="L416"><span class="lineNum"> 416</span> : return (*this == Make&lt;T&gt;());</span>
<span id="L417"><span class="lineNum"> 417</span> : }</span>
<span id="L418"><span class="lineNum"> 418</span> : </span>
<span id="L419"><span class="lineNum"> 419</span> : // Below are static functions that can be called by passing a specific type.</span>
<span id="L420"><span class="lineNum"> 420</span> : </span>
<span id="L421"><span class="lineNum"> 421</span> : template &lt;class T&gt;</span>
<span id="L422"><span class="lineNum"> 422</span> : static C10_HOST_CONSTEXPR_EXCEPT_WIN_CUDA TypeIdentifier Id() noexcept {</span>
<span id="L423"><span class="lineNum"> 423</span> : return TypeIdentifier::Get&lt;T&gt;();</span>
<span id="L424"><span class="lineNum"> 424</span> : }</span>
<span id="L425"><span class="lineNum"> 425</span> : </span>
<span id="L426"><span class="lineNum"> 426</span> : template &lt;class T&gt;</span>
<span id="L427"><span class="lineNum"> 427</span> : static c10::string_view TypeName() noexcept {</span>
<span id="L428"><span class="lineNum"> 428</span> : return c10::util::get_fully_qualified_type_name&lt;T&gt;();</span>
<span id="L429"><span class="lineNum"> 429</span> : }</span>
<span id="L430"><span class="lineNum"> 430</span> : </span>
<span id="L431"><span class="lineNum"> 431</span> : template &lt;class T&gt;</span>
<span id="L432"><span class="lineNum"> 432</span> : static constexpr size_t ItemSize() noexcept {</span>
<span id="L433"><span class="lineNum"> 433</span> : return sizeof(T);</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> : /**</span>
<span id="L437"><span class="lineNum"> 437</span> : * Returns a TypeMeta object that corresponds to the typename T.</span>
<span id="L438"><span class="lineNum"> 438</span> : */</span>
<span id="L439"><span class="lineNum"> 439</span> : template &lt;typename T&gt;</span>
<span id="L440"><span class="lineNum"> 440</span> <span class="tlaGNC"> 91449130 : static TypeMeta Make() {</span></span>
<span id="L441"><span class="lineNum"> 441</span> : // The instance pointed to is declared here, but defined in a .cpp file.</span>
<span id="L442"><span class="lineNum"> 442</span> : // We need to silence the compiler warning about using an undefined</span>
<span id="L443"><span class="lineNum"> 443</span> : // variable template. '-Wpragmas' and '-Wunknown-warning-option' has to be</span>
<span id="L444"><span class="lineNum"> 444</span> : // disabled for compilers that don't know '-Wundefined-var-template' and</span>
<span id="L445"><span class="lineNum"> 445</span> : // would error at our attempt to disable it.</span>
<span id="L446"><span class="lineNum"> 446</span> : #ifndef _MSC_VER</span>
<span id="L447"><span class="lineNum"> 447</span> : #pragma GCC diagnostic push</span>
<span id="L448"><span class="lineNum"> 448</span> : #pragma GCC diagnostic ignored &quot;-Wpragmas&quot;</span>
<span id="L449"><span class="lineNum"> 449</span> : #pragma GCC diagnostic ignored &quot;-Wunknown-warning-option&quot;</span>
<span id="L450"><span class="lineNum"> 450</span> : #pragma GCC diagnostic ignored &quot;-Wundefined-var-template&quot;</span>
<span id="L451"><span class="lineNum"> 451</span> : #endif</span>
<span id="L452"><span class="lineNum"> 452</span> <span class="tlaGNC"> 91449130 : return TypeMeta(_typeMetaData&lt;T&gt;());</span></span>
<span id="L453"><span class="lineNum"> 453</span> : #ifndef _MSC_VER</span>
<span id="L454"><span class="lineNum"> 454</span> : #pragma GCC diagnostic pop</span>
<span id="L455"><span class="lineNum"> 455</span> : #endif</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> : /**</span>
<span id="L459"><span class="lineNum"> 459</span> : * convert ScalarType enum values to TypeMeta handles</span>
<span id="L460"><span class="lineNum"> 460</span> : */</span>
<span id="L461"><span class="lineNum"> 461</span> <span class="tlaGNC"> 91449062 : static inline caffe2::TypeMeta fromScalarType(ScalarType scalar_type) {</span></span>
<span id="L462"><span class="lineNum"> 462</span> <span class="tlaGNC"> 91449062 : const auto index = static_cast&lt;uint16_t&gt;(scalar_type);</span></span>
<span id="L463"><span class="lineNum"> 463</span> <span class="tlaGNC"> 91449062 : TORCH_INTERNAL_ASSERT_DEBUG_ONLY(</span></span>
<span id="L464"><span class="lineNum"> 464</span> : index &lt; NumScalarTypes,</span>
<span id="L465"><span class="lineNum"> 465</span> : &quot;Unrecognized Scalartype &quot;,</span>
<span id="L466"><span class="lineNum"> 466</span> : scalar_type,</span>
<span id="L467"><span class="lineNum"> 467</span> : &quot; (please report this error)&quot;);</span>
<span id="L468"><span class="lineNum"> 468</span> <span class="tlaGNC"> 91449062 : return TypeMeta(index);</span></span>
<span id="L469"><span class="lineNum"> 469</span> : }</span>
<span id="L470"><span class="lineNum"> 470</span> : </span>
<span id="L471"><span class="lineNum"> 471</span> : /**</span>
<span id="L472"><span class="lineNum"> 472</span> : * convert TypeMeta handles to ScalarType enum values</span>
<span id="L473"><span class="lineNum"> 473</span> : */</span>
<span id="L474"><span class="lineNum"> 474</span> <span class="tlaGNC"> 842576 : inline ScalarType toScalarType() {</span></span>
<span id="L475"><span class="lineNum"> 475</span> <span class="tlaGNC"> 842576 : if (C10_LIKELY(isScalarType())) {</span></span>
<span id="L476"><span class="lineNum"> 476</span> <span class="tlaGNC"> 842576 : return static_cast&lt;ScalarType&gt;(index_);</span></span>
<span id="L477"><span class="lineNum"> 477</span> : }</span>
<span id="L478"><span class="lineNum"> 478</span> <span class="tlaUNC tlaBgUNC"> 0 : error_unsupported_typemeta(*this);</span></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> : [[noreturn]] static void error_unsupported_typemeta(caffe2::TypeMeta dtype);</span>
<span id="L483"><span class="lineNum"> 483</span> : </span>
<span id="L484"><span class="lineNum"> 484</span> : // hard limit number of registered types</span>
<span id="L485"><span class="lineNum"> 485</span> : // note: constexpr provokes Windows compilation error &quot;member may not be</span>
<span id="L486"><span class="lineNum"> 486</span> : // initialized&quot; static constexpr size_t MaxTypeIndex = 32;</span>
<span id="L487"><span class="lineNum"> 487</span> : //</span>
<span id="L488"><span class="lineNum"> 488</span> : #if defined C10_MOBILE</span>
<span id="L489"><span class="lineNum"> 489</span> : // The reason for this not to be UINT8_MAX is that the array</span>
<span id="L490"><span class="lineNum"> 490</span> : // initialization takes space which is proportional to the size of the array.</span>
<span id="L491"><span class="lineNum"> 491</span> : // The compiler seems to add code (or data padding) to initialize the array with</span>
<span id="L492"><span class="lineNum"> 492</span> : // empty elements. Please see</span>
<span id="L493"><span class="lineNum"> 493</span> : // https://github.com/pytorch/pytorch/pull/51881 for details.</span>
<span id="L494"><span class="lineNum"> 494</span> : //</span>
<span id="L495"><span class="lineNum"> 495</span> : #define MaxTypeIndex \</span>
<span id="L496"><span class="lineNum"> 496</span> : (NumScalarTypes + 15 /* number of CAFFE_DEFINE_KNOWN_TYPE in typeid.cpp */ + \</span>
<span id="L497"><span class="lineNum"> 497</span> : 1 /* 1 more for caffe2 tensor */)</span>
<span id="L498"><span class="lineNum"> 498</span> : #else</span>
<span id="L499"><span class="lineNum"> 499</span> : #define MaxTypeIndex UINT8_MAX</span>
<span id="L500"><span class="lineNum"> 500</span> : #endif</span>
<span id="L501"><span class="lineNum"> 501</span> : </span>
<span id="L502"><span class="lineNum"> 502</span> : // Protects type metadata allocation.</span>
<span id="L503"><span class="lineNum"> 503</span> : // NOLINTNEXTLINE(facebook-hte-NonPodStaticDeclaration)</span>
<span id="L504"><span class="lineNum"> 504</span> : static std::mutex&amp; getTypeMetaDatasLock();</span>
<span id="L505"><span class="lineNum"> 505</span> : static uint16_t nextTypeIndex;</span>
<span id="L506"><span class="lineNum"> 506</span> : </span>
<span id="L507"><span class="lineNum"> 507</span> : static detail::TypeMetaData* typeMetaDatas();</span>
<span id="L508"><span class="lineNum"> 508</span> : </span>
<span id="L509"><span class="lineNum"> 509</span> : static uint16_t existingMetaDataIndexForType(TypeIdentifier identifier);</span>
<span id="L510"><span class="lineNum"> 510</span> : </span>
<span id="L511"><span class="lineNum"> 511</span> : public:</span>
<span id="L512"><span class="lineNum"> 512</span> : #ifdef __CUDACC__</span>
<span id="L513"><span class="lineNum"> 513</span> : // NOTE [ TypeIdentifier::Get nvcc/clang discrepancy]</span>
<span id="L514"><span class="lineNum"> 514</span> : // nvcc and clang do not produce identical results for</span>
<span id="L515"><span class="lineNum"> 515</span> : // TypeIdentifier::Get, because TypeIdentifier::Get relies on</span>
<span id="L516"><span class="lineNum"> 516</span> : // __PRETTY_FUNCTION__ and they don't agree on the canonical names</span>
<span id="L517"><span class="lineNum"> 517</span> : // of types (e.g., nvcc normalizes to `short unsigned int`, but clang</span>
<span id="L518"><span class="lineNum"> 518</span> : // calls it `unsigned short`). Hide the implementation of this function</span>
<span id="L519"><span class="lineNum"> 519</span> : // from nvcc so that we always use clang (or whatever host C++ compiler)</span>
<span id="L520"><span class="lineNum"> 520</span> : // for TypeIdentifier::Get.</span>
<span id="L521"><span class="lineNum"> 521</span> : template &lt;class T&gt;</span>
<span id="L522"><span class="lineNum"> 522</span> : C10_EXPORT static uint16_t addTypeMetaData();</span>
<span id="L523"><span class="lineNum"> 523</span> : #else</span>
<span id="L524"><span class="lineNum"> 524</span> : template &lt;class T&gt;</span>
<span id="L525"><span class="lineNum"> 525</span> : C10_EXPORT static uint16_t addTypeMetaData() {</span>
<span id="L526"><span class="lineNum"> 526</span> : const auto identifier = TypeIdentifier::Get&lt;T&gt;();</span>
<span id="L527"><span class="lineNum"> 527</span> : // Need to hold this for the rest of the function, protecting:</span>
<span id="L528"><span class="lineNum"> 528</span> : // 1) existingMetaDataIndexForType()</span>
<span id="L529"><span class="lineNum"> 529</span> : // 2) nextTypeIndex++</span>
<span id="L530"><span class="lineNum"> 530</span> : // 3) the write into typeMetaDatas()</span>
<span id="L531"><span class="lineNum"> 531</span> : std::lock_guard&lt;std::mutex&gt; lock(getTypeMetaDatasLock());</span>
<span id="L532"><span class="lineNum"> 532</span> : // It may exist already if added in a different dynamic shared library.</span>
<span id="L533"><span class="lineNum"> 533</span> : const uint16_t existing_index = existingMetaDataIndexForType(identifier);</span>
<span id="L534"><span class="lineNum"> 534</span> : if (existing_index != MaxTypeIndex) {</span>
<span id="L535"><span class="lineNum"> 535</span> : return existing_index;</span>
<span id="L536"><span class="lineNum"> 536</span> : }</span>
<span id="L537"><span class="lineNum"> 537</span> : const uint16_t index = nextTypeIndex++;</span>
<span id="L538"><span class="lineNum"> 538</span> : TORCH_CHECK(</span>
<span id="L539"><span class="lineNum"> 539</span> : index &lt;= MaxTypeIndex,</span>
<span id="L540"><span class="lineNum"> 540</span> : &quot;Maximum number of CAFFE_KNOWN_TYPE declarations has been exceeded. &quot;,</span>
<span id="L541"><span class="lineNum"> 541</span> : &quot;Please report this issue.&quot;);</span>
<span id="L542"><span class="lineNum"> 542</span> : typeMetaDatas()[index] = detail::TypeMetaData{</span>
<span id="L543"><span class="lineNum"> 543</span> : sizeof(T),</span>
<span id="L544"><span class="lineNum"> 544</span> : detail::_PickNew&lt;T&gt;(),</span>
<span id="L545"><span class="lineNum"> 545</span> : detail::_PickPlacementNew&lt;T&gt;(),</span>
<span id="L546"><span class="lineNum"> 546</span> : detail::_PickCopy&lt;T&gt;(),</span>
<span id="L547"><span class="lineNum"> 547</span> : detail::_PickPlacementDelete&lt;T&gt;(),</span>
<span id="L548"><span class="lineNum"> 548</span> : detail::_PickDelete&lt;T&gt;(),</span>
<span id="L549"><span class="lineNum"> 549</span> : identifier,</span>
<span id="L550"><span class="lineNum"> 550</span> : c10::util::get_fully_qualified_type_name&lt;T&gt;()};</span>
<span id="L551"><span class="lineNum"> 551</span> : return index;</span>
<span id="L552"><span class="lineNum"> 552</span> : }</span>
<span id="L553"><span class="lineNum"> 553</span> : #endif</span>
<span id="L554"><span class="lineNum"> 554</span> : </span>
<span id="L555"><span class="lineNum"> 555</span> : private:</span>
<span id="L556"><span class="lineNum"> 556</span> : // specializations return indexes into typeMetaDataInstances()</span>
<span id="L557"><span class="lineNum"> 557</span> : template &lt;class T&gt;</span>
<span id="L558"><span class="lineNum"> 558</span> : C10_API static uint16_t _typeMetaData() noexcept;</span>
<span id="L559"><span class="lineNum"> 559</span> : </span>
<span id="L560"><span class="lineNum"> 560</span> : //</span>
<span id="L561"><span class="lineNum"> 561</span> : // TypeMeta just wraps this index</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> : uint16_t index_;</span>
<span id="L565"><span class="lineNum"> 565</span> : </span>
<span id="L566"><span class="lineNum"> 566</span> : inline const detail::TypeMetaData&amp; data() const {</span>
<span id="L567"><span class="lineNum"> 567</span> : return typeMetaDatas()[index_];</span>
<span id="L568"><span class="lineNum"> 568</span> : }</span>
<span id="L569"><span class="lineNum"> 569</span> : };</span>
<span id="L570"><span class="lineNum"> 570</span> : </span>
<span id="L571"><span class="lineNum"> 571</span> : // specializations of TypeMeta::_typeMetaData for ScalarType types</span>
<span id="L572"><span class="lineNum"> 572</span> : </span>
<span id="L573"><span class="lineNum"> 573</span> : #define DEFINE_SCALAR_METADATA_INSTANCE(T, name) \</span>
<span id="L574"><span class="lineNum"> 574</span> : template &lt;&gt; \</span>
<span id="L575"><span class="lineNum"> 575</span> : constexpr uint16_t TypeMeta::_typeMetaData&lt;T&gt;() noexcept { \</span>
<span id="L576"><span class="lineNum"> 576</span> : return static_cast&lt;uint16_t&gt;(ScalarType::name); \</span>
<span id="L577"><span class="lineNum"> 577</span> : }</span>
<span id="L578"><span class="lineNum"> 578</span> <span class="tlaGNC tlaBgGNC"> 91449130 : AT_FORALL_SCALAR_TYPES_WITH_COMPLEX_AND_QINTS(DEFINE_SCALAR_METADATA_INSTANCE)</span></span>
<span id="L579"><span class="lineNum"> 579</span> : #undef DEFINE_SCALAR_METADATA_INSTANCE</span>
<span id="L580"><span class="lineNum"> 580</span> : </span>
<span id="L581"><span class="lineNum"> 581</span> : template &lt;&gt;</span>
<span id="L582"><span class="lineNum"> 582</span> : C10_EXPORT constexpr uint16_t TypeMeta::_typeMetaData&lt;</span>
<span id="L583"><span class="lineNum"> 583</span> : detail::_Uninitialized&gt;() noexcept {</span>
<span id="L584"><span class="lineNum"> 584</span> : return static_cast&lt;uint16_t&gt;(ScalarType::Undefined);</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> : inline TypeMeta::TypeMeta() noexcept</span>
<span id="L588"><span class="lineNum"> 588</span> : : index_(_typeMetaData&lt;detail::_Uninitialized&gt;()) {}</span>
<span id="L589"><span class="lineNum"> 589</span> : </span>
<span id="L590"><span class="lineNum"> 590</span> : inline bool operator==(const TypeMeta&amp; lhs, const TypeMeta&amp; rhs) noexcept {</span>
<span id="L591"><span class="lineNum"> 591</span> : return (lhs.index_ == rhs.index_);</span>
<span id="L592"><span class="lineNum"> 592</span> : }</span>
<span id="L593"><span class="lineNum"> 593</span> : inline bool operator!=(const TypeMeta&amp; lhs, const TypeMeta&amp; rhs) noexcept {</span>
<span id="L594"><span class="lineNum"> 594</span> : return !operator==(lhs, rhs);</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> : inline std::ostream&amp; operator&lt;&lt;(</span>
<span id="L598"><span class="lineNum"> 598</span> : std::ostream&amp; stream,</span>
<span id="L599"><span class="lineNum"> 599</span> : caffe2::TypeMeta typeMeta) {</span>
<span id="L600"><span class="lineNum"> 600</span> : return stream &lt;&lt; typeMeta.name();</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> : /**</span>
<span id="L604"><span class="lineNum"> 604</span> : * Register unique id for a type so it can be used in TypeMeta context, e.g. be</span>
<span id="L605"><span class="lineNum"> 605</span> : * used as a type for Blob or for Tensor elements.</span>
<span id="L606"><span class="lineNum"> 606</span> : *</span>
<span id="L607"><span class="lineNum"> 607</span> : * CAFFE_KNOWN_TYPE is deprecated; prefer CAFFE_DECLARE_KNOWN_TYPE and</span>
<span id="L608"><span class="lineNum"> 608</span> : * CAFFE_DEFINE_KNOWN_TYPE.</span>
<span id="L609"><span class="lineNum"> 609</span> : *</span>
<span id="L610"><span class="lineNum"> 610</span> : * CAFFE_KNOWN_TYPE does explicit instantiation of TypeIdentifier::Get&lt;T&gt;</span>
<span id="L611"><span class="lineNum"> 611</span> : * template function and thus needs to be put in a single translation unit (.cpp</span>
<span id="L612"><span class="lineNum"> 612</span> : * file) for a given type T. Other translation units that use type T as a type</span>
<span id="L613"><span class="lineNum"> 613</span> : * of the caffe2::Blob or element type of caffe2::Tensor need to depend on the</span>
<span id="L614"><span class="lineNum"> 614</span> : * translation unit that contains CAFFE_KNOWN_TYPE declaration via regular</span>
<span id="L615"><span class="lineNum"> 615</span> : * linkage dependencies.</span>
<span id="L616"><span class="lineNum"> 616</span> : *</span>
<span id="L617"><span class="lineNum"> 617</span> : * NOTE: the macro needs to be invoked in ::caffe2 namespace</span>
<span id="L618"><span class="lineNum"> 618</span> : */</span>
<span id="L619"><span class="lineNum"> 619</span> : // Implementation note: in MSVC, we will need to prepend the C10_API</span>
<span id="L620"><span class="lineNum"> 620</span> : // keyword in order to get things compiled properly. in Linux, gcc seems to</span>
<span id="L621"><span class="lineNum"> 621</span> : // create attribute ignored error for explicit template instantiations, see</span>
<span id="L622"><span class="lineNum"> 622</span> : // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0537r0.html</span>
<span id="L623"><span class="lineNum"> 623</span> : // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51930</span>
<span id="L624"><span class="lineNum"> 624</span> : // and as a result, we define these two macros slightly differently.</span>
<span id="L625"><span class="lineNum"> 625</span> : #if defined(_MSC_VER) || defined(__clang__)</span>
<span id="L626"><span class="lineNum"> 626</span> : #define EXPORT_IF_NOT_GCC C10_EXPORT</span>
<span id="L627"><span class="lineNum"> 627</span> : #else</span>
<span id="L628"><span class="lineNum"> 628</span> : #define EXPORT_IF_NOT_GCC</span>
<span id="L629"><span class="lineNum"> 629</span> : #endif</span>
<span id="L630"><span class="lineNum"> 630</span> : </span>
<span id="L631"><span class="lineNum"> 631</span> : // CAFFE_KNOWN_TYPE is deprecated! Use CAFFE_DECLARE_KNOWN_TYPE and</span>
<span id="L632"><span class="lineNum"> 632</span> : // CAFFE_DEFINE_KNOWN_TYPE instead.</span>
<span id="L633"><span class="lineNum"> 633</span> : #define CAFFE_KNOWN_TYPE(T) \</span>
<span id="L634"><span class="lineNum"> 634</span> : template uint16_t TypeMeta::addTypeMetaData&lt;T&gt;(); \</span>
<span id="L635"><span class="lineNum"> 635</span> : template &lt;&gt; \</span>
<span id="L636"><span class="lineNum"> 636</span> : EXPORT_IF_NOT_GCC uint16_t TypeMeta::_typeMetaData&lt;T&gt;() noexcept { \</span>
<span id="L637"><span class="lineNum"> 637</span> : static const uint16_t index = addTypeMetaData&lt;T&gt;(); \</span>
<span id="L638"><span class="lineNum"> 638</span> : return index; \</span>
<span id="L639"><span class="lineNum"> 639</span> : }</span>
<span id="L640"><span class="lineNum"> 640</span> : </span>
<span id="L641"><span class="lineNum"> 641</span> : #define CAFFE_DEFINE_KNOWN_TYPE(T, ident) \</span>
<span id="L642"><span class="lineNum"> 642</span> : template uint16_t TypeMeta::addTypeMetaData&lt;T&gt;(); \</span>
<span id="L643"><span class="lineNum"> 643</span> : namespace detail { \</span>
<span id="L644"><span class="lineNum"> 644</span> : EXPORT_IF_NOT_GCC const uint16_t ident##_metadata_index = \</span>
<span id="L645"><span class="lineNum"> 645</span> : TypeMeta::addTypeMetaData&lt;T&gt;(); \</span>
<span id="L646"><span class="lineNum"> 646</span> : } // namespace detail</span>
<span id="L647"><span class="lineNum"> 647</span> : </span>
<span id="L648"><span class="lineNum"> 648</span> : // Unlike CAFFE_KNOWN_TYPE, CAFFE_DECLARE_KNOWN_TYPE avoids a function</span>
<span id="L649"><span class="lineNum"> 649</span> : // call to access _typeMetaData in the common case.</span>
<span id="L650"><span class="lineNum"> 650</span> : #define CAFFE_DECLARE_KNOWN_TYPE(T, ident) \</span>
<span id="L651"><span class="lineNum"> 651</span> : extern template uint16_t TypeMeta::addTypeMetaData&lt;T&gt;(); \</span>
<span id="L652"><span class="lineNum"> 652</span> : namespace detail { \</span>
<span id="L653"><span class="lineNum"> 653</span> : extern C10_API const uint16_t ident##_metadata_index; \</span>
<span id="L654"><span class="lineNum"> 654</span> : } /* namespace detail */ \</span>
<span id="L655"><span class="lineNum"> 655</span> : template &lt;&gt; \</span>
<span id="L656"><span class="lineNum"> 656</span> : EXPORT_IF_NOT_GCC C10_ALWAYS_INLINE uint16_t \</span>
<span id="L657"><span class="lineNum"> 657</span> : TypeMeta::_typeMetaData&lt;T&gt;() noexcept { \</span>
<span id="L658"><span class="lineNum"> 658</span> : return detail::ident##_metadata_index; \</span>
<span id="L659"><span class="lineNum"> 659</span> : }</span>
<span id="L660"><span class="lineNum"> 660</span> : </span>
<span id="L661"><span class="lineNum"> 661</span> : #define CAFFE_KNOWN_TYPE_NOEXPORT(T) \</span>
<span id="L662"><span class="lineNum"> 662</span> : template &lt;&gt; \</span>
<span id="L663"><span class="lineNum"> 663</span> : uint16_t TypeMeta::_typeMetaData&lt;T&gt;() noexcept { \</span>
<span id="L664"><span class="lineNum"> 664</span> : static const uint16_t index = addTypeMetaData&lt;T&gt;(); \</span>
<span id="L665"><span class="lineNum"> 665</span> : return index; \</span>
<span id="L666"><span class="lineNum"> 666</span> : }</span>
<span id="L667"><span class="lineNum"> 667</span> : </span>
<span id="L668"><span class="lineNum"> 668</span> : CAFFE_DECLARE_KNOWN_TYPE(std::string, std_string)</span>
<span id="L669"><span class="lineNum"> 669</span> : CAFFE_DECLARE_KNOWN_TYPE(uint16_t, uint16_t)</span>
<span id="L670"><span class="lineNum"> 670</span> : CAFFE_DECLARE_KNOWN_TYPE(char, char)</span>
<span id="L671"><span class="lineNum"> 671</span> : CAFFE_DECLARE_KNOWN_TYPE(std::unique_ptr&lt;std::mutex&gt;, std_unique_ptr_std_mutex)</span>
<span id="L672"><span class="lineNum"> 672</span> : CAFFE_DECLARE_KNOWN_TYPE(</span>
<span id="L673"><span class="lineNum"> 673</span> : std::unique_ptr&lt;std::atomic&lt;bool&gt;&gt;,</span>
<span id="L674"><span class="lineNum"> 674</span> : std_unique_ptr_std_atomic_bool)</span>
<span id="L675"><span class="lineNum"> 675</span> : CAFFE_DECLARE_KNOWN_TYPE(std::vector&lt;int32_t&gt;, std_vector_int32_t)</span>
<span id="L676"><span class="lineNum"> 676</span> : CAFFE_DECLARE_KNOWN_TYPE(std::vector&lt;int64_t&gt;, std_vector_int64_t)</span>
<span id="L677"><span class="lineNum"> 677</span> : CAFFE_DECLARE_KNOWN_TYPE(std::vector&lt;unsigned long&gt;, std_vector_unsigned_long)</span>
<span id="L678"><span class="lineNum"> 678</span> : CAFFE_DECLARE_KNOWN_TYPE(bool*, bool_ptr)</span>
<span id="L679"><span class="lineNum"> 679</span> : CAFFE_DECLARE_KNOWN_TYPE(char*, char_ptr)</span>
<span id="L680"><span class="lineNum"> 680</span> : CAFFE_DECLARE_KNOWN_TYPE(int*, int_ptr)</span>
<span id="L681"><span class="lineNum"> 681</span> : </span>
<span id="L682"><span class="lineNum"> 682</span> : // For some of the compilers, long is defined separately from int32_t and</span>
<span id="L683"><span class="lineNum"> 683</span> : // int64_t. As a result we will need to actually define them separately.</span>
<span id="L684"><span class="lineNum"> 684</span> : // It is recommended that one does NOT use long - use int32_t and int64_t</span>
<span id="L685"><span class="lineNum"> 685</span> : // explicitly. Explicit long type annotation may go away in the future.</span>
<span id="L686"><span class="lineNum"> 686</span> : // details: This hack works by defining a _guard_long_unique type, which is</span>
<span id="L687"><span class="lineNum"> 687</span> : // long iff the compiler has a separate long type and is a dummy type otherwise.</span>
<span id="L688"><span class="lineNum"> 688</span> : // we then allocate a type id to that _guard_long_unique. If the compiler has a</span>
<span id="L689"><span class="lineNum"> 689</span> : // separate long type, this allocates a type id for long. Otherwise, it</span>
<span id="L690"><span class="lineNum"> 690</span> : // allocates a type id for the dummy type, which doesn't matter.</span>
<span id="L691"><span class="lineNum"> 691</span> : namespace detail {</span>
<span id="L692"><span class="lineNum"> 692</span> : template &lt;class T&gt;</span>
<span id="L693"><span class="lineNum"> 693</span> : class _guard_long_unique_dummy final {};</span>
<span id="L694"><span class="lineNum"> 694</span> : template &lt;class T&gt;</span>
<span id="L695"><span class="lineNum"> 695</span> : using _guard_long_unique = std::conditional_t&lt;</span>
<span id="L696"><span class="lineNum"> 696</span> : std::is_same&lt;long, int32_t&gt;::value || std::is_same&lt;long, int64_t&gt;::value,</span>
<span id="L697"><span class="lineNum"> 697</span> : _guard_long_unique_dummy&lt;T&gt;,</span>
<span id="L698"><span class="lineNum"> 698</span> : T&gt;;</span>
<span id="L699"><span class="lineNum"> 699</span> : } // namespace detail</span>
<span id="L700"><span class="lineNum"> 700</span> : </span>
<span id="L701"><span class="lineNum"> 701</span> : CAFFE_DECLARE_KNOWN_TYPE(</span>
<span id="L702"><span class="lineNum"> 702</span> : detail::_guard_long_unique&lt;long&gt;,</span>
<span id="L703"><span class="lineNum"> 703</span> : detail_guard_long_unique_long);</span>
<span id="L704"><span class="lineNum"> 704</span> : CAFFE_DECLARE_KNOWN_TYPE(</span>
<span id="L705"><span class="lineNum"> 705</span> : detail::_guard_long_unique&lt;std::vector&lt;long&gt;&gt;,</span>
<span id="L706"><span class="lineNum"> 706</span> : detail_guard_long_unique_std_vector_long)</span>
<span id="L707"><span class="lineNum"> 707</span> : </span>
<span id="L708"><span class="lineNum"> 708</span> : CAFFE_DECLARE_KNOWN_TYPE(float*, float_ptr)</span>
<span id="L709"><span class="lineNum"> 709</span> : CAFFE_DECLARE_KNOWN_TYPE(at::Half*, at_Half)</span>
<span id="L710"><span class="lineNum"> 710</span> : </span>
<span id="L711"><span class="lineNum"> 711</span> : } // namespace caffe2</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>