From 8f8201d42db31ea8006cc07f7cc7c78d636d950d Mon Sep 17 00:00:00 2001 From: lukstafi Date: Sat, 9 Nov 2024 13:27:27 +0000 Subject: [PATCH] deploy: 069322acabad1ba4611f8cf756f4866aacc7ce25 --- dev/arrayjit/Arrayjit/Assignments/index.html | 2 +- .../Backend_impl/module-type-Backend_impl_common/index.html | 2 +- .../Backend_impl/module-type-Lowered_backend/index.html | 2 +- .../module-type-Lowered_no_device_backend/index.html | 2 +- .../module-type-No_buffer_retrieval_or_syncing/index.html | 2 +- dev/arrayjit/Arrayjit/C_syntax/C_syntax/argument-1-B/index.html | 2 +- dev/arrayjit/Arrayjit/Cc_backend/index.html | 2 +- dev/arrayjit/Arrayjit/Cuda_backend/index.html | 2 +- dev/arrayjit/Arrayjit/Gcc_backend/index.html | 2 +- dev/arrayjit/Arrayjit/Tnode/index.html | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/dev/arrayjit/Arrayjit/Assignments/index.html b/dev/arrayjit/Arrayjit/Assignments/index.html index e2ac250e..425e2ebf 100644 --- a/dev/arrayjit/Arrayjit/Assignments/index.html +++ b/dev/arrayjit/Arrayjit/Assignments/index.html @@ -3,7 +3,7 @@ initialize_neutral:Base.bool -> projections:Indexing.projections -> Base.bool
val context_nodes : - unified_memory:bool -> + use_host_memory:bool -> t -> (Tn.t, Tn.comparator_witness) Base.Set.t

Returns materialized nodes in the sense of Tnode.is_in_context_force. NOTE: it ideally should be called after compilation.

val sequential : t Base.List.t -> t
val sequence : comp Base.List.t -> comp
val to_low_level : t -> Low_level.t
val flatten : t -> t Base__List.t
val is_noop : t -> bool
val get_ident_within_code : ?no_dots:bool -> t -> Tn.t -> Base.String.t
val fprint_hum : ?name:Base.string -> diff --git a/dev/arrayjit/Arrayjit/Backend_impl/module-type-Backend_impl_common/index.html b/dev/arrayjit/Arrayjit/Backend_impl/module-type-Backend_impl_common/index.html index 558b36b1..eb587eaf 100644 --- a/dev/arrayjit/Arrayjit/Backend_impl/module-type-Backend_impl_common/index.html +++ b/dev/arrayjit/Arrayjit/Backend_impl/module-type-Backend_impl_common/index.html @@ -1,2 +1,2 @@ -Backend_impl_common (arrayjit.Arrayjit.Backend_impl.Backend_impl_common)

Module type Backend_impl.Backend_impl_common

Parts shared by backend implementations excluding what's already in Backend_any_common, except for Buffer which is duplicated for technical reasons.

include Backend_intf.Buffer
type buffer_ptr
val sexp_of_buffer_ptr : buffer_ptr -> Sexplib0.Sexp.t
val c_ptr_to_string : (buffer_ptr -> Ops.prec -> Base.string) Base.option
include sig ... end
type nonrec buffer = buffer_ptr Backend_intf.buffer
val sexp_of_buffer : buffer -> Sexplib0.Sexp.t
type nonrec ctx_arrays = buffer_ptr Backend_intf.ctx_arrays
val sexp_of_ctx_arrays : ctx_arrays -> Sexplib0.Sexp.t
val unified_memory : Base.bool

If true, the node is required to be in the contexts linked with code that uses it.

Should return false for nodes that are virtual, local, or which the backend prefers to access directly from the host.

+Backend_impl_common (arrayjit.Arrayjit.Backend_impl.Backend_impl_common)

Module type Backend_impl.Backend_impl_common

Parts shared by backend implementations excluding what's already in Backend_any_common, except for Buffer which is duplicated for technical reasons.

include Backend_intf.Buffer
type buffer_ptr
val sexp_of_buffer_ptr : buffer_ptr -> Sexplib0.Sexp.t
val c_ptr_to_string : (buffer_ptr -> Ops.prec -> Base.string) Base.option
include sig ... end
type nonrec buffer = buffer_ptr Backend_intf.buffer
val sexp_of_buffer : buffer -> Sexplib0.Sexp.t
type nonrec ctx_arrays = buffer_ptr Backend_intf.ctx_arrays
val sexp_of_ctx_arrays : ctx_arrays -> Sexplib0.Sexp.t
val use_host_memory : Base.bool

If true, the backend will read from and write to the host memory directly whenever possible.

use_host_memory can only be true on unified memory devices, like CPU and Apple Metal.

diff --git a/dev/arrayjit/Arrayjit/Backend_impl/module-type-Lowered_backend/index.html b/dev/arrayjit/Arrayjit/Backend_impl/module-type-Lowered_backend/index.html index 91ace6ee..eaf4501c 100644 --- a/dev/arrayjit/Arrayjit/Backend_impl/module-type-Lowered_backend/index.html +++ b/dev/arrayjit/Arrayjit/Backend_impl/module-type-Lowered_backend/index.html @@ -5,7 +5,7 @@ with type buffer_ptr := buffer_ptr and type dev := dev and type runner := runner - and type event := event
include Backend_impl_common with type buffer_ptr := buffer_ptr
include Backend_intf.Buffer with type buffer_ptr := buffer_ptr
include sig ... end
val unified_memory : Base.bool

If true, the node is required to be in the contexts linked with code that uses it.

Should return false for nodes that are virtual, local, or which the backend prefers to access directly from the host.

include Backend_intf.Backend_device_common + and type event := event
include Backend_impl_common with type buffer_ptr := buffer_ptr
include Backend_intf.Buffer with type buffer_ptr := buffer_ptr
include sig ... end
val use_host_memory : Base.bool

If true, the backend will read from and write to the host memory directly whenever possible.

use_host_memory can only be true on unified memory devices, like CPU and Apple Metal.

include Backend_intf.Backend_device_common with type buffer_ptr := buffer_ptr with type dev := dev with type runner := runner diff --git a/dev/arrayjit/Arrayjit/Backend_impl/module-type-Lowered_no_device_backend/index.html b/dev/arrayjit/Arrayjit/Backend_impl/module-type-Lowered_no_device_backend/index.html index a97e2302..92ca6803 100644 --- a/dev/arrayjit/Arrayjit/Backend_impl/module-type-Lowered_no_device_backend/index.html +++ b/dev/arrayjit/Arrayjit/Backend_impl/module-type-Lowered_no_device_backend/index.html @@ -1,5 +1,5 @@ -Lowered_no_device_backend (arrayjit.Arrayjit.Backend_impl.Lowered_no_device_backend)

Module type Backend_impl.Lowered_no_device_backend

Lowered-level stream agnostic backend interface: implementation-facing API for CPU backends.

include Backend_impl_common
include Backend_intf.Buffer
type buffer_ptr
include sig ... end
val unified_memory : Base.bool

If true, the node is required to be in the contexts linked with code that uses it.

Should return false for nodes that are virtual, local, or which the backend prefers to access directly from the host.

include Backend_intf.Backend_any_common with type buffer_ptr := buffer_ptr
include Backend_intf.Buffer with type buffer_ptr := buffer_ptr
include sig ... end
val initialize : Backend_intf.config -> Base.unit

Initializes a backend before first use. Typically does nothing if the backend is already initialized, but some backends can do some safe cleanups.

val is_initialized : Base.unit -> Base.bool

Returns false if there was no previous initialize call. If it returns false, one must call initialize before using the backend.

val name : Base.string
type procedure
val sexp_of_procedure : procedure -> Sexplib0.Sexp.t
val compile : +Lowered_no_device_backend (arrayjit.Arrayjit.Backend_impl.Lowered_no_device_backend)

Module type Backend_impl.Lowered_no_device_backend

Lowered-level stream agnostic backend interface: implementation-facing API for CPU backends.

include Backend_impl_common
include Backend_intf.Buffer
type buffer_ptr
include sig ... end
val use_host_memory : Base.bool

If true, the backend will read from and write to the host memory directly whenever possible.

use_host_memory can only be true on unified memory devices, like CPU and Apple Metal.

include Backend_intf.Backend_any_common with type buffer_ptr := buffer_ptr
include Backend_intf.Buffer with type buffer_ptr := buffer_ptr
include sig ... end
val initialize : Backend_intf.config -> Base.unit

Initializes a backend before first use. Typically does nothing if the backend is already initialized, but some backends can do some safe cleanups.

val is_initialized : Base.unit -> Base.bool

Returns false if there was no previous initialize call. If it returns false, one must call initialize before using the backend.

val name : Base.string
type procedure
val sexp_of_procedure : procedure -> Sexplib0.Sexp.t
val compile : name:Base.string -> opt_ctx_arrays:{ctx_arrays}23 Base.option -> Indexing.unit_bindings -> diff --git a/dev/arrayjit/Arrayjit/Backend_impl/module-type-No_buffer_retrieval_or_syncing/index.html b/dev/arrayjit/Arrayjit/Backend_impl/module-type-No_buffer_retrieval_or_syncing/index.html index 0f5a60a1..2f5fd0b6 100644 --- a/dev/arrayjit/Arrayjit/Backend_impl/module-type-No_buffer_retrieval_or_syncing/index.html +++ b/dev/arrayjit/Arrayjit/Backend_impl/module-type-No_buffer_retrieval_or_syncing/index.html @@ -1,5 +1,5 @@ -No_buffer_retrieval_or_syncing (arrayjit.Arrayjit.Backend_impl.No_buffer_retrieval_or_syncing)

Module type Backend_impl.No_buffer_retrieval_or_syncing

include Backend_impl_common
include Backend_intf.Buffer
type buffer_ptr
include sig ... end
val unified_memory : Base.bool

If true, the node is required to be in the contexts linked with code that uses it.

Should return false for nodes that are virtual, local, or which the backend prefers to access directly from the host.

include Backend_intf.Backend_device_common with type buffer_ptr := buffer_ptr
include Backend_intf.Device with type buffer_ptr := buffer_ptr
include Backend_intf.Device_types with type buffer_ptr := buffer_ptr
include Backend_intf.Device_config with type buffer_ptr := buffer_ptr
include Backend_intf.Buffer with type buffer_ptr := buffer_ptr
include sig ... end
type dev

Interface to a device driver.

val sexp_of_dev : dev -> Sexplib0.Sexp.t
type runner

Interface to a stream driver.

val sexp_of_runner : runner -> Sexplib0.Sexp.t
type event

An event tracks if a stream finished computing past a particular point in its schedue. These values are used internally for scheduling across streams of the backend, and can be used for explicit scheduling.

val sexp_of_event : event -> Sexplib0.Sexp.t
val name : Base.string
type nonrec device = (buffer_ptr, dev, event) Backend_intf.device
val sexp_of_device : device -> Sexplib0.Sexp.t
type nonrec stream = (buffer_ptr, dev, runner, event) Backend_intf.stream
val sexp_of_stream : stream -> Sexplib0.Sexp.t
type nonrec context = (buffer_ptr, stream) Backend_intf.context
val sexp_of_context : context -> Sexplib0.Sexp.t
include Backend_intf.Alloc_buffer +No_buffer_retrieval_or_syncing (arrayjit.Arrayjit.Backend_impl.No_buffer_retrieval_or_syncing)

Module type Backend_impl.No_buffer_retrieval_or_syncing

include Backend_impl_common
include Backend_intf.Buffer
type buffer_ptr
include sig ... end
val use_host_memory : Base.bool

If true, the backend will read from and write to the host memory directly whenever possible.

use_host_memory can only be true on unified memory devices, like CPU and Apple Metal.

include Backend_intf.Backend_device_common with type buffer_ptr := buffer_ptr
include Backend_intf.Device with type buffer_ptr := buffer_ptr
include Backend_intf.Device_types with type buffer_ptr := buffer_ptr
include Backend_intf.Device_config with type buffer_ptr := buffer_ptr
include Backend_intf.Buffer with type buffer_ptr := buffer_ptr
include sig ... end
type dev

Interface to a device driver.

val sexp_of_dev : dev -> Sexplib0.Sexp.t
type runner

Interface to a stream driver.

val sexp_of_runner : runner -> Sexplib0.Sexp.t
type event

An event tracks if a stream finished computing past a particular point in its schedue. These values are used internally for scheduling across streams of the backend, and can be used for explicit scheduling.

val sexp_of_event : event -> Sexplib0.Sexp.t
val name : Base.string
type nonrec device = (buffer_ptr, dev, event) Backend_intf.device
val sexp_of_device : device -> Sexplib0.Sexp.t
type nonrec stream = (buffer_ptr, dev, runner, event) Backend_intf.stream
val sexp_of_stream : stream -> Sexplib0.Sexp.t
type nonrec context = (buffer_ptr, stream) Backend_intf.context
val sexp_of_context : context -> Sexplib0.Sexp.t
include Backend_intf.Alloc_buffer with type buffer_ptr := buffer_ptr and type stream := stream
include Backend_intf.Buffer with type buffer_ptr := buffer_ptr
include sig ... end
val alloc_buffer : ?old_buffer:{buffer}581 -> diff --git a/dev/arrayjit/Arrayjit/C_syntax/C_syntax/argument-1-B/index.html b/dev/arrayjit/Arrayjit/C_syntax/C_syntax/argument-1-B/index.html index 1d4a3dee..74a792fb 100644 --- a/dev/arrayjit/Arrayjit/C_syntax/C_syntax/argument-1-B/index.html +++ b/dev/arrayjit/Arrayjit/C_syntax/C_syntax/argument-1-B/index.html @@ -1,7 +1,7 @@ B (arrayjit.Arrayjit.C_syntax.C_syntax.B)

Parameter C_syntax.B

type buffer_ptr
val procs : (Low_level.optimized * buffer_ptr Backend_intf.ctx_arrays Base.option) - Base.array

The low-level prcedure to compile, and the arrays of the context it will be linked to if not shared and already known.

val hardcoded_context_ptr : (buffer_ptr -> Ops.prec -> Base.string) Base.option
val unified_memory : Base.bool
val host_ptrs_for_readonly : Base.bool
val logs_to_stdout : Base.bool
val main_kernel_prefix : Base.string
val kernel_prep_line : Base.string
val include_lines : Base.string Base.list
val typ_of_prec : Ops.prec -> Base.string
val binop_syntax : + Base.array

The low-level prcedure to compile, and the arrays of the context it will be linked to if not shared and already known.

val hardcoded_context_ptr : (buffer_ptr -> Ops.prec -> Base.string) Base.option
val use_host_memory : Base.bool
val logs_to_stdout : Base.bool
val main_kernel_prefix : Base.string
val kernel_prep_line : Base.string
val include_lines : Base.string Base.list
val typ_of_prec : Ops.prec -> Base.string
val binop_syntax : Ops.prec -> Ops.binop -> Base.string * Base.string * Base.string
val unop_syntax : Ops.prec -> Ops.unop -> Base.string * Base.string
val convert_precision : diff --git a/dev/arrayjit/Arrayjit/Cc_backend/index.html b/dev/arrayjit/Arrayjit/Cc_backend/index.html index 47e4a717..285ab36a 100644 --- a/dev/arrayjit/Arrayjit/Cc_backend/index.html +++ b/dev/arrayjit/Arrayjit/Cc_backend/index.html @@ -1,5 +1,5 @@ -Cc_backend (arrayjit.Arrayjit.Cc_backend)

Module Arrayjit.Cc_backend

include Backend_impl.Lowered_no_device_backend
include Backend_impl.Backend_impl_common
include Backend_intf.Buffer
type buffer_ptr
include sig ... end
val unified_memory : Base.bool

If true, the node is required to be in the contexts linked with code that uses it.

Should return false for nodes that are virtual, local, or which the backend prefers to access directly from the host.

include Backend_intf.Backend_any_common with type buffer_ptr := buffer_ptr
include Backend_intf.Buffer with type buffer_ptr := buffer_ptr
include sig ... end
val initialize : Backend_intf.config -> Base.unit

Initializes a backend before first use. Typically does nothing if the backend is already initialized, but some backends can do some safe cleanups.

val is_initialized : Base.unit -> Base.bool

Returns false if there was no previous initialize call. If it returns false, one must call initialize before using the backend.

val name : Base.string
type procedure
val sexp_of_procedure : procedure -> Sexplib0.Sexp.t
val compile : +Cc_backend (arrayjit.Arrayjit.Cc_backend)

Module Arrayjit.Cc_backend

include Backend_impl.Lowered_no_device_backend
include Backend_impl.Backend_impl_common
include Backend_intf.Buffer
type buffer_ptr
include sig ... end
val use_host_memory : Base.bool

If true, the backend will read from and write to the host memory directly whenever possible.

use_host_memory can only be true on unified memory devices, like CPU and Apple Metal.

include Backend_intf.Backend_any_common with type buffer_ptr := buffer_ptr
include Backend_intf.Buffer with type buffer_ptr := buffer_ptr
include sig ... end
val initialize : Backend_intf.config -> Base.unit

Initializes a backend before first use. Typically does nothing if the backend is already initialized, but some backends can do some safe cleanups.

val is_initialized : Base.unit -> Base.bool

Returns false if there was no previous initialize call. If it returns false, one must call initialize before using the backend.

val name : Base.string
type procedure
val sexp_of_procedure : procedure -> Sexplib0.Sexp.t
val compile : name:Base.string -> opt_ctx_arrays:{ctx_arrays}23 Base.option -> Indexing.unit_bindings -> diff --git a/dev/arrayjit/Arrayjit/Cuda_backend/index.html b/dev/arrayjit/Arrayjit/Cuda_backend/index.html index 3fce9384..17ca59a8 100644 --- a/dev/arrayjit/Arrayjit/Cuda_backend/index.html +++ b/dev/arrayjit/Arrayjit/Cuda_backend/index.html @@ -5,7 +5,7 @@ with type buffer_ptr := buffer_ptr and type dev := dev and type runner := runner - and type event := event
include Backend_impl.Backend_impl_common with type buffer_ptr := buffer_ptr
include Backend_intf.Buffer with type buffer_ptr := buffer_ptr
include sig ... end
val unified_memory : Base.bool

If true, the node is required to be in the contexts linked with code that uses it.

Should return false for nodes that are virtual, local, or which the backend prefers to access directly from the host.

include Backend_intf.Backend_device_common + and type event := event
include Backend_impl.Backend_impl_common with type buffer_ptr := buffer_ptr
include Backend_intf.Buffer with type buffer_ptr := buffer_ptr
include sig ... end
val use_host_memory : Base.bool

If true, the backend will read from and write to the host memory directly whenever possible.

use_host_memory can only be true on unified memory devices, like CPU and Apple Metal.

include Backend_intf.Backend_device_common with type buffer_ptr := buffer_ptr with type dev := dev with type runner := runner diff --git a/dev/arrayjit/Arrayjit/Gcc_backend/index.html b/dev/arrayjit/Arrayjit/Gcc_backend/index.html index 33ecf78c..95606ee1 100644 --- a/dev/arrayjit/Arrayjit/Gcc_backend/index.html +++ b/dev/arrayjit/Arrayjit/Gcc_backend/index.html @@ -1,5 +1,5 @@ -Gcc_backend (arrayjit.Arrayjit.Gcc_backend)

Module Arrayjit.Gcc_backend

include Backend_impl.Lowered_no_device_backend
include Backend_impl.Backend_impl_common
include Backend_intf.Buffer
type buffer_ptr
include sig ... end
val unified_memory : Base.bool

If true, the node is required to be in the contexts linked with code that uses it.

Should return false for nodes that are virtual, local, or which the backend prefers to access directly from the host.

include Backend_intf.Backend_any_common with type buffer_ptr := buffer_ptr
include Backend_intf.Buffer with type buffer_ptr := buffer_ptr
include sig ... end
val initialize : Backend_intf.config -> Base.unit

Initializes a backend before first use. Typically does nothing if the backend is already initialized, but some backends can do some safe cleanups.

val is_initialized : Base.unit -> Base.bool

Returns false if there was no previous initialize call. If it returns false, one must call initialize before using the backend.

val name : Base.string
type procedure
val sexp_of_procedure : procedure -> Sexplib0.Sexp.t
val compile : +Gcc_backend (arrayjit.Arrayjit.Gcc_backend)

Module Arrayjit.Gcc_backend

include Backend_impl.Lowered_no_device_backend
include Backend_impl.Backend_impl_common
include Backend_intf.Buffer
type buffer_ptr
include sig ... end
val use_host_memory : Base.bool

If true, the backend will read from and write to the host memory directly whenever possible.

use_host_memory can only be true on unified memory devices, like CPU and Apple Metal.

include Backend_intf.Backend_any_common with type buffer_ptr := buffer_ptr
include Backend_intf.Buffer with type buffer_ptr := buffer_ptr
include sig ... end
val initialize : Backend_intf.config -> Base.unit

Initializes a backend before first use. Typically does nothing if the backend is already initialized, but some backends can do some safe cleanups.

val is_initialized : Base.unit -> Base.bool

Returns false if there was no previous initialize call. If it returns false, one must call initialize before using the backend.

val name : Base.string
type procedure
val sexp_of_procedure : procedure -> Sexplib0.Sexp.t
val compile : name:Base.string -> opt_ctx_arrays:{ctx_arrays}23 Base.option -> Indexing.unit_bindings -> diff --git a/dev/arrayjit/Arrayjit/Tnode/index.html b/dev/arrayjit/Arrayjit/Tnode/index.html index f7338a81..ba69e1c6 100644 --- a/dev/arrayjit/Arrayjit/Tnode/index.html +++ b/dev/arrayjit/Arrayjit/Tnode/index.html @@ -4,7 +4,7 @@ id:Base__Int.t -> label:Base.String.t Base.List.t -> unit -> - Base.String.t
val debug_name : t -> Base.String.t
val debug_memory_mode : (memory_mode * Base.Int.t) option -> Base.String.t
val log_debug_info : from_log_level:int -> t -> unit
val default_to_most_local : t -> Base.int -> unit

The one exception to "most local" is that the sharing property is kept at Unset.

val is_virtual_force : t -> Base.int -> bool
val is_hosted_force : ?specifically:memory_type -> t -> Base.int -> Base.bool
val is_materialized_force : t -> Base.int -> bool
val is_in_context_force : unified_memory:bool -> t -> Base.int -> bool
val known_not_materialized : t -> bool
val known_constant : t -> bool
val known_volatile : t -> bool
val known_non_virtual : t -> bool
val known_not_param : t -> bool
val known_shared_cross_stream : t -> bool
val known_non_cross_stream : t -> bool
val mode_is_unspecified : t -> bool
val update_memory_mode : t -> memory_mode -> Base.int -> unit
val update_memory_sharing : t -> sharing -> Base.int -> unit

update_memory_sharing tn sharing provenance preserves the memory mode of tn while updating the cross-stream sharing property, except that Hosted Nonconstant is further specialized to Hosted (Changed_on_devices sharing).

val update_prec : ?only_if:(Ops.prec -> bool) -> t -> Ops.prec -> unit
include sig ... end
type comparator_witness
val comparator : (t, comparator_witness) Base__Comparator.comparator
val equal : t -> t -> Base.bool
val hash : t -> Base__Ppx_hash_lib.Std.Hash.hash_value
val hash_fold_t : + Base.String.t
val debug_name : t -> Base.String.t
val debug_memory_mode : (memory_mode * Base.Int.t) option -> Base.String.t
val log_debug_info : from_log_level:int -> t -> unit
val default_to_most_local : t -> Base.int -> unit

The one exception to "most local" is that the sharing property is kept at Unset.

val is_virtual_force : t -> Base.int -> bool
val is_hosted_force : ?specifically:memory_type -> t -> Base.int -> Base.bool
val is_materialized_force : t -> Base.int -> bool
val is_in_context_force : use_host_memory:bool -> t -> Base.int -> bool
val known_not_materialized : t -> bool
val known_constant : t -> bool
val known_volatile : t -> bool
val known_non_virtual : t -> bool
val known_not_param : t -> bool
val known_shared_cross_stream : t -> bool
val known_non_cross_stream : t -> bool
val mode_is_unspecified : t -> bool
val update_memory_mode : t -> memory_mode -> Base.int -> unit
val update_memory_sharing : t -> sharing -> Base.int -> unit

update_memory_sharing tn sharing provenance preserves the memory mode of tn while updating the cross-stream sharing property, except that Hosted Nonconstant is further specialized to Hosted (Changed_on_devices sharing).

val update_prec : ?only_if:(Ops.prec -> bool) -> t -> Ops.prec -> unit
include sig ... end
type comparator_witness
val comparator : (t, comparator_witness) Base__Comparator.comparator
val equal : t -> t -> Base.bool
val hash : t -> Base__Ppx_hash_lib.Std.Hash.hash_value
val hash_fold_t : Base__.Ppx_hash_lib.Std.Hash.state -> t -> Base__.Ppx_hash_lib.Std.Hash.state
val hash_t : t -> Base__Ppx_hash_lib.Std.Hash.hash_value
val get_exn : t -> Nd.t
val has : t -> bool
val dims_to_string : ?with_axis_numbers:bool -> t -> Base.String.t
val no_grad_ident_label : t -> bool * Base.String.t option
val styled_ident :