<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 6.2。低級擴展 API > 原文: [http://numba.pydata.org/numba-doc/latest/extending/low-level.html](http://numba.pydata.org/numba-doc/latest/extending/low-level.html) 此擴展 API 可通過 [`numba.extending`](index.html#module-numba.extending "numba.extending") 模塊獲得。它允許您直接掛鉤到 Numba 編譯鏈。因此,它區分了幾個編譯階段: * [輸入](../glossary.html#term-typing)階段通過查看執行的操作來推斷編譯函數中的變量類型。 * [降低](../glossary.html#term-lowering)階段將高級 Python 操作轉換為低級 LLVM 代碼。此階段利用由鍵入階段導出的鍵入信息。 * _ 拳擊 _ 和 _ 拆箱 _ 將 Python 對象轉換為本機值,反之亦然。它們出現在從 Python 解釋器調用 Numba 函數的邊界。 ## 6.2.1。輸入 類型推斷 - 或簡單地 _ 輸入 _ - 是將 Numba 類型分配給函數中涉及的所有值的過程,以便實現高效的代碼生成。從廣義上講,鍵入有兩種形式:鍵入普通 Python _ 值 _(例如函數參數或全局變量)并在已知值類型上鍵入 _ 操作 _(或 _ 函數 _) 。 ```py @typeof_impl.register(cls) ``` 將裝飾函數注冊為鍵入類 _cls_ 的 Python 值。裝飾函數將使用簽名`(val, c)`調用,其中 _val_ 是鍵入的 Python 值, _c_ 是上下文對象。 ```py @type_callable(func) ``` 將裝飾函數注冊為鍵入可調用 _func_ 。 _func_ 可以是實際的 Python 可調用函數,也可以是表示 Numba 內部已知的操作的字符串(例如`'getitem'`)。使用單個 _ 上下文 _ 參數調用修飾函數,并且必須返回一個 typer 函數。 typer 函數應該與被鍵入的函數具有相同的簽名,并且使用函數參數的 Numba _ 類型 _ 調用它;它應該返回函數返回值的 Numba 類型,或者如果推理失敗則返回`None`。 ## 6.2.2。降低 以下裝飾器都采用某種類型的規范。類型規范通常是類型類(例如`types.Float`)或特定類型實例(例如`types.float64`)。有些值具有特殊含義: * `types.Any`匹配任何類型;這允許在實現中進行自己的調度 * `types.VarArg(&lt;some type&gt;)`匹配給定類型的任意數量的參數;它只能在描述函數的參數時顯示為最后一個類型規范。 以下 API 中的 _ 上下文 _ 參數是一個目標上下文,為代碼生成提供各種實用程序方法(例如創建常量,從類型轉換為另一種,查找特定函數的實現等) 。 _ 構建器 _ 參數是生成的 LLVM 代碼的 [`llvmlite.ir.IRBuilder`](http://llvmlite.pydata.org/en/latest/user-guide/ir/ir-builder.html#llvmlite.ir.IRBuilder "(in llvmlite v0.27.0)") 實例。 _ 簽名 _ 是指定操作的具體類型的對象。簽名的`args`屬性是參數類型的元組。簽名的`return_type`屬性是操作應返回的類型。 注意 Numba 總是以 Numba 類型為由,但在降低期間傳遞的值是 LLVM 值:它們不包含所需的類型信息,這也是 Numba 類型也被明確傳遞的原因。 LLVM 有自己的,非常低級的類型系統:您可以通過查找其`.type`屬性來訪問值的 LLVM 類型。 ### 6.2.2.1。原生作業 ```py @lower_builtin(func, typespec, ...) ``` 將裝飾函數注冊為為給定 Numba _typespecs_ 描述的參數實現可調用 _func_ 。與 [`type_callable()`](#type_callable "type_callable") 一樣, _func_ 既可以是實際的 Python 可調用字符串,也可以是表示 Numba 內部已知的操作的字符串(例如`'getitem'`)。 使用四個參數`(context, builder, sig, args)`調用修飾函數。 `sig`是調用 callable 的具體簽名。 `args`是調用 callable 的參數值的元組; `args`中的每個值對應于`sig.args`中的類型。該函數必須返回與`sig.return_type`類型兼容的值。 ```py @lower_getattr(typespec, name) ``` 將裝飾函數注冊為實現給定 _typespec_ 的屬性 _ 名稱 _。使用四個參數`(context, builder, typ, value)`調用修飾函數。 _typ_ 是正在查找屬性的具體類型。 _ 值 _ 是要查找屬性的值。 ```py @lower_getattr_generic(typespec) ``` 將裝飾函數注冊為給定 _typespec_ 上的屬性查找的后備。任何沒有相應 [`lower_getattr()`](#lower_getattr "lower_getattr") 聲明的屬性都將通過 [`lower_getattr_generic()`](#lower_getattr_generic "lower_getattr_generic") 。使用五個參數`(context, builder, typ, value, name)`調用修飾函數。 _typ_ 和 _ 值 _ 與 [`lower_getattr()`](#lower_getattr "lower_getattr") 相同。 _ 名稱 _ 是要查找的屬性的名稱。 ```py @lower_cast(fromspec, tospec) ``` 將裝飾函數注冊為從 _ 從 specpec_ 描述的類型轉換為 _tospec_ 描述的類型。裝飾函數使用五個參數`(context, builder, fromty, toty, value)`調用。 _fromty_ 和 _toty_ 分別是從和轉換的具體類型。 _ 值 _ 是要轉換的值。該函數必須返回與`toty`類型兼容的值。 ### 6.2.2.2。常數 ```py @lower_constant(typespec) ``` 將裝飾函數注冊為實現 Numba _typespec_ 的常量創建。使用四個參數`(context, builder, ty, pyval)`調用修飾函數。 _ty_ 是為其創建常量的具體類型。 _pyval_ 是轉換為 LLVM 常量的 Python 值。該函數必須返回與`ty`類型兼容的值。 ### 6.2.2.3。拳擊和拆箱 在這些函數中, _c_ 是一個具有多個屬性的便利對象: * 其`context`屬性是上述目標上下文 * 其`builder`屬性如上所述為 [`llvmlite.ir.IRBuilder`](http://llvmlite.pydata.org/en/latest/user-guide/ir/ir-builder.html#llvmlite.ir.IRBuilder "(in llvmlite v0.27.0)") * 它的`pyapi`屬性是一個對象,可以訪問 [Python 解釋器的 C API](https://docs.python.org/3/c-api/index.html) 的子集 與本機值相反,對象是`PyObject *`指針。這些指針可以通過`pyapi`對象中的方法生成或處理。 ```py @box(typespec) ``` 將裝飾函數注冊為與 _typespec_ 匹配的裝箱值。使用三個參數`(typ, val, c)`調用修飾函數。 _typ_ 是盒裝的具體類型。 _val_ 是裝箱的值。該函數應返回 Python 對象,或 NULL 以表示錯誤。 ```py @unbox(typespec) ``` 將裝飾函數注冊為與 _typespec_ 匹配的拆箱值。使用三個參數`(typ, obj, c)`調用修飾函數。 _typ_ 是未裝箱的具體類型。 _obj_ 是未裝箱的 Python 對象(C 語言中的`PyObject *`指針)。該函數應該返回一個`NativeValue`對象,給出取消裝箱結果值和一個可選的錯誤位。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看