From 6247a12de11590e57c7b9a1b662b60498a8770ee Mon Sep 17 00:00:00 2001 From: Chris Nuernberger Date: Fri, 11 Oct 2024 15:12:07 -0600 Subject: [PATCH] Release 10.118 --- deps.edn | 2 +- docs/buffered-image.html | 2 +- docs/cheatsheet.html | 2 +- docs/datatype-to-dtype-next.html | 2 +- docs/dimensions-bytecode-gen.html | 2 +- docs/index.html | 4 +- docs/overview.html | 172 ++++++++++------------ docs/tech.v3.datatype.argops.html | 2 +- docs/tech.v3.datatype.bitmap.html | 2 +- docs/tech.v3.datatype.convolve.html | 2 +- docs/tech.v3.datatype.datetime.html | 2 +- docs/tech.v3.datatype.errors.html | 2 +- docs/tech.v3.datatype.ffi.clang.html | 2 +- docs/tech.v3.datatype.ffi.graalvm.html | 2 +- docs/tech.v3.datatype.ffi.html | 2 +- docs/tech.v3.datatype.ffi.size-t.html | 2 +- docs/tech.v3.datatype.functional.html | 2 +- docs/tech.v3.datatype.gradient.html | 2 +- docs/tech.v3.datatype.html | 2 +- docs/tech.v3.datatype.list.html | 2 +- docs/tech.v3.datatype.mmap-writer.html | 2 +- docs/tech.v3.datatype.mmap.html | 2 +- docs/tech.v3.datatype.native-buffer.html | 14 +- docs/tech.v3.datatype.nippy.html | 2 +- docs/tech.v3.datatype.packing.html | 2 +- docs/tech.v3.datatype.reductions.html | 2 +- docs/tech.v3.datatype.rolling.html | 2 +- docs/tech.v3.datatype.sampling.html | 2 +- docs/tech.v3.datatype.statistics.html | 2 +- docs/tech.v3.datatype.struct.html | 2 +- docs/tech.v3.datatype.wavelet.html | 2 +- docs/tech.v3.libs.buffered-image.html | 2 +- docs/tech.v3.parallel.for.html | 2 +- docs/tech.v3.parallel.queue-iter.html | 2 +- docs/tech.v3.tensor.color-gradients.html | 2 +- docs/tech.v3.tensor.dimensions.html | 2 +- docs/tech.v3.tensor.html | 2 +- src/tech/v3/datatype/ffi/mmodel_jdk21.clj | 3 +- src/tech/v3/tensor.clj | 4 +- 39 files changed, 121 insertions(+), 144 deletions(-) diff --git a/deps.edn b/deps.edn index 45ca2d27..1b7f6e77 100644 --- a/deps.edn +++ b/deps.edn @@ -21,7 +21,7 @@ :exec-fn codox.main/-main :exec-args {:group-id "cnuernber" :artifact-id "dtype-next" - :version "10.117" + :version "10.118" :name "DType Next" :description "High Performance Clojure Primitives" :metadata {:doc/format :markdown} diff --git a/docs/buffered-image.html b/docs/buffered-image.html index c58d897d..2bfb53b1 100644 --- a/docs/buffered-image.html +++ b/docs/buffered-image.html @@ -4,7 +4,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); - gtag('config', 'G-95TVFC1FEB');

dtype-next Buffered Image Support

+ gtag('config', 'G-95TVFC1FEB');

dtype-next Buffered Image Support

dtype-next contains support for loading/saving buffered images and creating tensors from buffered images.

Usage

diff --git a/docs/cheatsheet.html b/docs/cheatsheet.html index cb44cb6a..8152e777 100644 --- a/docs/cheatsheet.html +++ b/docs/cheatsheet.html @@ -4,7 +4,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); - gtag('config', 'G-95TVFC1FEB');

dtype-next Cheatsheet

+ gtag('config', 'G-95TVFC1FEB');

dtype-next Cheatsheet

The old cheatsheet has been moved to overview.

Most of these functions are accessible via the [tech.v3.datatype :as dtype] namespace. When another namespace is required, it is specified separately.

diff --git a/docs/datatype-to-dtype-next.html b/docs/datatype-to-dtype-next.html index b68c2c9c..64ff68e3 100644 --- a/docs/datatype-to-dtype-next.html +++ b/docs/datatype-to-dtype-next.html @@ -4,7 +4,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); - gtag('config', 'G-95TVFC1FEB');

Why dtype-next?

+ gtag('config', 'G-95TVFC1FEB');

Why dtype-next?

tech.datatype

tech.datatype as a numerics stack fulfills our technical needs at TechAscent in regards to scientific computing, data science, and machine learning. It enables a completely diff --git a/docs/dimensions-bytecode-gen.html b/docs/dimensions-bytecode-gen.html index 41e550c9..276df563 100644 --- a/docs/dimensions-bytecode-gen.html +++ b/docs/dimensions-bytecode-gen.html @@ -4,7 +4,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); - gtag('config', 'G-95TVFC1FEB');

dtype-next Tensor Dimensions and Bytecode Generation

+ gtag('config', 'G-95TVFC1FEB');

dtype-next Tensor Dimensions and Bytecode Generation

dtype-next uses a dimensions operator in order to transform nd space to a linear address space. We no longer compile in bytecode address operator generation by default as it takes a bit longer to load and most users won't see any benefit as diff --git a/docs/index.html b/docs/index.html index 3e3ce411..8d2434ea 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,10 +1,10 @@ -DType Next 10.117

DType Next 10.117

High Performance Clojure Primitives.

Topics

Namespaces

tech.v3.datatype

Base namespace for container creation and elementwise access of data

+ gtag('config', 'G-95TVFC1FEB');

DType Next 10.118

High Performance Clojure Primitives.

Topics

Namespaces

tech.v3.datatype.argops

Efficient functions for operating in index space. Take-off of the argsort, argmin, etc. type functions from Matlab. These functions generally only work on readers and all return some version of an index or list of indexes.

diff --git a/docs/overview.html b/docs/overview.html index d8fbd561..bf41b7fa 100644 --- a/docs/overview.html +++ b/docs/overview.html @@ -4,28 +4,24 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); - gtag('config', 'G-95TVFC1FEB');

dtype-next Overview

+ gtag('config', 'G-95TVFC1FEB');

dtype-next Overview

Setup

(require '[tech.v3.datatype :as dtype])
 

Containers

-

There are two different types of containers in tech.v3.datatype; jvm-heap containers -and native-heap containers. Object datatypes are only supported in jvm-heap containers -and native-heap containers have mmap support and offer zero-copy pathways to toolkits like -Python's numpy and Clojure's neanderthal.

-
user> (require '[tech.v3.datatype :as dtype])
-nil
-user> (dtype/make-container :jvm-heap :float32 5)
-#array-buffer<float32>[5]
-[0.000, 0.000, 0.000, 0.000, 0.000, ]
+

There are two different types of containers in tech.v3.datatype:

+
    +
  • jvm-heap containers that support Java Objects
  • +
  • native-heap containers that support mmap and offer zero-copy pathways to toolkits like Python's numpy and Clojure's neanderthal.
  • +
+
user> (dtype/make-container :jvm-heap :float32 5)
+[0.0 0.0 0.0 0.0 0.0]
 user> (dtype/make-container :jvm-heap :float32 (range 5))
 #array-buffer<float32>[5]
-[0.000, 1.000, 2.000, 3.000, 4.000, ]
+[0.000, 1.000, 2.000, 3.000, 4.000]
 user> (dtype/make-container :native-heap :float32 (range 5))
-#native-buffer@0x00007F665489BAE0<float32>[5]
-[0.000, 1.000, 2.000, 3.000, 4.000, ]
-
-
+#native-buffer@0x00007EE51C041850<float32>[5]
+[0.000, 1.000, 2.000, 3.000, 4.000]
 user> ;;These containers support Indexed and read-only access via IFn
 user> (def data (dtype/make-container :jvm-heap :float32 (range 5)))
 #'user/data
@@ -35,59 +31,49 @@ 

Containers

2.0

Copy

-

Heavily optimized copying for bulk transfers. Use this also for completing -lazy operations.

+

dtype-next has heavily optimized copying for bulk transfers. Copying is also useful for completing lazy operations and calcifying underlying dynamic inputs.

;; You will not see major efficiency gains until both sides the copy
-;; operation is backed by
+;; operation is backed by an array
 user> (dtype/copy! (range 10) (float-array 10))
 [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]
 user> (type *1)
 [F
 
-
 ;; Fastest (by factor of 100 discounting array creation)
 user> (dtype/copy! (float-array (range 10)) (float-array 10))
 [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]
 
-
 ;; Also extremely fast! native->jvm-array transfer is an optimized
 ;; operation supported by graal native pathways via the sun.misc.Unsafe pathway
 user> (dtype/copy! (dtype/make-container :native-buffer :float32  (range 10)) (float-array 10))
 [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]
 
-
-;; Copy also supports marshalling data between containers using C casting rules - floating values
-;; are floored if ceiled depending on which size of zero they are on.
+;; Copy also supports marshaling data between containers using C casting rules - float values
+;; are floored or ceiled depending on their sign.
 
 user> (dtype/copy! (dtype/make-container :native-heap :float32  [0 1 254])
                    (dtype/make-container :jvm-heap :uint8 3))
-#array-buffer<uint8>[3]
-[0, 1, 254, ]
-
-user>
+[0 1 254]
 

Buffers, Readers, Writers

-

Efficent primitive-datatype-aware access is provided via the buffer interface. A reader is a buffer -that can be read from and a writer is a buffer that can be written to -- note the buffer interface has 'canRead' and 'canWrite' methods.

-

Buffers have many transformations such as adding a scalar or element-wise adding the elements of another buffer. A few of these operations -are exposed via the tech.v3.datatype.functional interface and those -are discussed in depth below.

-

Most things are convertible to a reader of a specific type. So things like persistent vectors, java arrays, numpy arrays, etc. are convertible -to readers. Some things are convertible to concrete buffers such as jvm heap containers (arrays) and native heap containers. Any reader -can be reshaped into a tensor.

+

Efficient primitive-datatype-aware access is provided via the buffer interface. A reader is a buffer that can be read from and a writer is a buffer that can be written to -- note the buffer interface has 'canRead' and 'canWrite' methods.

+

Buffers have many transformations such as adding a scalar or element-wise adding +the elements of another buffer. A few of these operations are exposed via the +tech.v3.datatype.functional +interface and those are discussed in depth below.

+

Most things are convertible to a reader of a specific type. So things like persistent vectors, java arrays, numpy arrays, and others are convertible to readers. Some things are convertible to concrete buffers such as jvm heap containers (arrays) and native heap containers. Any reader can be reshaped into a tensor.

Math

-

A small sample of what is available. Basic elementwise operations along -with some statistics and a fixed rolling windowing facility.

-

Container Coersion Rules

-

Rules are applied in order.

+

Here is a small sample of what is available: Basic elementwise operations along with some statistics and a fixed rolling windowing facility.

+

Container Coercion Rules

+

Rules are applied in order:

  1. If the arguments contain an iterable, an iterable is returned.
  2. -
  3. If the arguments contain a reader, a reader is returned. If the input reader had a shape with more -than one dimension, a tensor is returned.
  4. +
  5. If the arguments contain a reader, a reader is returned. If the input reader had a shape with more than one dimension, a tensor is returned.
  6. Else a scalar is returned.
-

1,2,and many argument versions of these rules part of the public tech.v3.datatype api so they are -reused for other generalized functions. These functions are:

+

1,2,and many argument versions of these rules are part of the public tech.v3.datatype api so they are +reused for other generalized functions.

+

These functions are:

  • vectorized-dispatch-1 - single argument dispatch pathway.
  • vectorized-dispatch-2 - double argument dispatch pathway.
  • @@ -98,97 +84,87 @@

    Other Details

  • All arguments are casted to the widest datatype present.
  • Readers implement List and RandomAccess so they look like persistent vectors in the repl.
-
user> (require '[tech.v2.datatype.functional :as dtype-fn])
+
user> (require '[tech.v3.datatype.functional :as dfn])
 nil
-user> (def test-data (dtype-fn/+ (range 10 0 -1) 5))
+user> (def test-data (dfn/+ (range 10 0 -1) 5))
 #'user/test-data
 user> test-data
-(15 14 13 12 11 10 9 8 7 6)
-
+[15 14 13 12 11 10 9 8 7 6]
 
 user> ;;Working in index space is often ideal when dealing with datasets described this way.
-user> ;;To help with that we have a few tools.
+user> ;;To help with that we have a few tools (so-called arg versions of functions).
 user> (require '[tech.v3.datatype.argops :as argops])
 nil
-user> (argops/argsort > test-data )
-[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
-user> (argops/argsort < test-data )
-[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
+user> (argops/argsort > test-data)
+[0 1 2 3 4 5 6 7 8 9]
+user> (argops/argsort < test-data)
+[9 8 7 6 5 4 3 2 1 0]
 
-
-
-user> ;;once you have a set of indexes, you can reindex your original reader
-user> (dtype/indexed-buffer indexes test-data)
+user> ;;once you have a set of indexes, you can re-index your original reader
+user> (dtype/indexed-buffer [9 8 7 6 5 4 3 2 1 0] test-data)
 [6 7 8 9 10 11 12 13 14 15]
 
-
 user> ;;dfn has several functions for descriptive statistics
 user> (dfn/variance test-data)
 9.166666666666666
 user> (dfn/descriptive-statistics test-data)
-{:min 6.0,
- :mean 10.5,
- :standard-deviation 3.0276503540974917,
+{:n-elems 10,
+ :min 6.0,
  :max 15.0,
- :n-values 10}
+ :mean 10.5,
+ :standard-deviation 3.0276503540974917}
 

Dates & Times

-

All of the constructors for the types are in tech.v3.datatype.datetime. All your -favorite java.time types are there.

+

There are constructors in tech.v3.datatype.datetime. All your favorite java.time types are there.

user> (require '[tech.v3.datatype.datetime :as dtype-dt])
+nil
 user> (dtype-dt/zoned-date-time)
-#object[java.time.ZonedDateTime 0x190aea6a "2020-09-24T16:00:27.211-06:00[America/Denver]"]
+#object[java.time.ZonedDateTime 0x32a53313 "2024-10-10T09:01:08.315430-06:00[America/Denver]"]
 user> (dtype-dt/local-date)
-#object[java.time.LocalDate 0x39080aab "2020-09-24")
+#object[java.time.LocalDate 0x1daac8e9 "2024-10-10"]
 user> (dtype-dt/plus-temporal-amount (dtype-dt/local-date) 2 :days)
-#object[java.time.LocalDate 0x680586f8 "2020-09-26"]
-
-
+#object[java.time.LocalDate 0x6815dfae "2024-10-12"]
 
 user> (dtype-dt/plus-temporal-amount (dtype-dt/local-date) (range 10) :days)
-[#object[java.time.LocalDate 0x56bd7a17 "2020-09-24"] #object[java.time.LocalDate 0x47edcb55 "2020-09-25"] #object[java.time.LocalDate 0x3ab1a911 "2020-09-26"] #object[java.time.LocalDate 0x5a75b76 "2020-09-27"] #object[java.time.LocalDate 0x38f7e417 "2020-09-28"] #object[java.time.LocalDate 0x1169273f "2020-09-29"] #object[java.time.LocalDate 0x26a7ed22 "2020-09-30"] #object[java.time.LocalDate 0x19646e6b "2020-10-01"] #object[java.time.LocalDate 0x1eb4e60c "2020-10-02"] #object[java.time.LocalDate 0x463c6a3a "2020-10-03"]]
+[#object[java.time.LocalDate 0x29060684 "2024-10-10"] #object[java.time.LocalDate 0x24b8c057 "2024-10-11"] #object[java.time.LocalDate 0x1a681520 "2024-10-12"] #object[java.time.LocalDate 0x41569eb6 "2024-10-13"] #object[java.time.LocalDate 0x58fd923e "2024-10-14"] #object[java.time.LocalDate 0x3aa55b0e "2024-10-15"] #object[java.time.LocalDate 0x603e986f "2024-10-16"] #object[java.time.LocalDate 0x15e809f0 "2024-10-17"] #object[java.time.LocalDate 0x21301511 "2024-10-18"] #object[java.time.LocalDate 0x31dd4712 "2024-10-19"]]
 user> (def offset-local-dates (dtype-dt/plus-temporal-amount (dtype-dt/local-date) (range 10) :days))
 #'user/offset-local-dates
 user> (dtype-dt/long-temporal-field :days offset-local-dates)
-[24 25 26 27 28 29 30 1 2 3]
+[10 11 12 13 14 15 16 17 18 19]
 user> (dtype-dt/long-temporal-field :day-of-week offset-local-dates)
 [4 5 6 7 1 2 3 4 5 6]
 user> (dtype-dt/long-temporal-field :day-of-year offset-local-dates)
-[268 269 270 271 272 273 274 275 276 277]
-
+[284 285 286 287 288 289 290 291 292 293]
 
 ;;there is also a generalized conversion mechanism to milliseconds-since-epoch and back.  This conversion
 ;;can be timezone aware when one is passed in and it uses UTC when no timezone is passed.
 
 user> (dtype-dt/datetime->milliseconds offset-local-dates)
-[1600905600000 1600992000000 1601078400000 1601164800000 1601251200000 1601337600000 1601424000000 1601510400000 1601596800000 1601683200000]
+[1.7285184E12 1.7286048E12 1.7286912E12 1.7287776E12 1.728864E12 1.7289504E12 1.7290368E12 1.7291232E12 1.7292096E12 1.729296E12]
 user> (dtype-dt/system-zone-id)
-#object[java.time.ZoneRegion 0x10bdee8e "America/Denver"]
+#object[java.time.ZoneRegion 0x4a87be63 "America/Denver"]
 user> (dtype-dt/datetime->milliseconds (dtype-dt/system-zone-id) offset-local-dates)
-[1600927200000 1601013600000 1601100000000 1601186400000 1601272800000 1601359200000 1601445600000 1601532000000 1601618400000 1601704800000]
+[1.72854E12 1.7286264E12 1.7287128E12 1.7287992E12 1.7288856E12 1.728972E12 1.7290584E12 1.7291448E12 1.7292312E12 1.7293176E12]
 

ND Buffers

-

Generic N-dimensional support is provied both based on raw containers and based on functions from N indexes to a value. -These objects implement the NDBuffer interface and the support is provided -primarily via the 'tensor' namespace. The basic ways of dealing with tensor are:

+

Generic N-dimensional support is provided both based on raw containers and based on functions from N indexes to a value. These objects implement the NDBuffer interface and the support is provided primarily via the 'tensor' namespace. The basic ways of dealing with tensor are:

    -
  • ->tensor - Make a new tensor by copying data into a container. This can take sequences, persistent vectors, etc. and -will copy the data into a contiguous buffer and return a new implementation of NDBuffer based on that data.
  • -
  • ensure-tensor- Attempt in-place transformation of data falling back to ->tensor when not available.
  • -
  • compute-tensor - Create a new tensor via a function that takes rank long indexes and returns a value.
  • -
  • reshape - reshape a buffer or reader into a different dimension and rank via linear reinterpretation of the data. Use -this to convert a normal bit of data such as a java array or a persistent vector into a tensor without copying the data.
  • -
  • transpose - Permute data via reordering dimensions.
  • -
  • select - Select a subrect of data. Select can also take indexes in order to do ad-hoc reordering of the data.
  • -
  • broadcast - Create a larger tensor via duplication along one or more dimensions.
  • +
  • ->tensor - Make a new tensor by copying data into a container. This can take sequences, persistent vectors, and others, and will copy the data into a contiguous buffer and return a new implementation of NDBuffer based on that data
  • +
  • ensure-tensor- Attempt in-place transformation of data falling back to ->tensor when not available
  • +
  • compute-tensor - Create a new tensor via a function that takes rank long indexes and returns a value (dynamic tensors)
  • +
  • reshape - reshape a buffer or reader into a different dimension and rank via linear reinterpretation of the data. Use +this to convert a normal block of data such as a java array or a persistent vector into a tensor without copying the data.
  • +
  • transpose - Permute data via reordering dimensions
  • +
  • select - Select a subrect of data. Select can also take indexes in order to do ad-hoc reordering of the data
  • +
  • broadcast - Create a larger tensor via duplication along one or more dimensions
-

These tech.v3.datatype functions are also useful for tensors:

+

These tech.v3.datatype functions are also useful for tensors:

    -
  • elemwise-cast - change datatype of tensor.
  • -
  • clone - Create a new tensor of same shape and data. This can be used to realize lazy operations.
  • -
  • ->buffer,->reader - Get the data in 1D row-major vector.
  • +
  • elemwise-cast - change datatype of tensor
  • +
  • clone - Create a new tensor of same shape and data. As mentioned above about copying, this can be used to realize lazy operations
  • +
  • ->buffer,->reader - Get the data in 1D row-major vector
-
user>  (require '[tech.v3.tensor :as dtt])
+
user> (require '[tech.v3.tensor :as dtt])
 nil
 user> (dtt/->tensor (partition 3 (range 9)))
 #tech.v3.tensor<object>[3 3]
@@ -196,7 +172,7 @@ 

ND Buffers

[3 4 5] [6 7 8]]
-

Tensor implement various java/clojure interfaces they interact naturally with the language.

+

Tensors implement various java/clojure interfaces, so they interact naturally with the language.

user> (def tens (dtt/->tensor (partition 3 (range 9))))
 #'user/tens
 user> (tens 0)
@@ -208,10 +184,6 @@ 

ND Buffers

user> (nth tens 2) #tech.v3.tensor<object>[3] [6 7 8] -[#tech.v3.tensor<object>[3] -[0 3 6] #tech.v3.tensor<object>[3] -[1 4 7] #tech.v3.tensor<object>[3] -[2 5 8]] user> (dtt/transpose tens [1 0]) #tech.v3.tensor<object>[3 3] [[0 3 6] @@ -245,6 +217,12 @@

ND Buffers

[[25 26 27] [26 4 7] [27 5 8]] +user> ;; These operations are mutating... +user> tens +#tech.v3.tensor<object>[3 3] +[[25 26 27] + [26 4 5] + [27 7 8]]

If you got this far be sure to checkout the cheatsheet.

\ No newline at end of file diff --git a/docs/tech.v3.datatype.argops.html b/docs/tech.v3.datatype.argops.html index 0a87cc54..697839dd 100644 --- a/docs/tech.v3.datatype.argops.html +++ b/docs/tech.v3.datatype.argops.html @@ -4,7 +4,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); - gtag('config', 'G-95TVFC1FEB');

tech.v3.datatype.argops

Efficient functions for operating in index space. Take-off of the argsort, argmin, etc. + gtag('config', 'G-95TVFC1FEB');

tech.v3.datatype.argops

Efficient functions for operating in index space. Take-off of the argsort, argmin, etc. type functions from Matlab. These functions generally only work on readers and all return some version of an index or list of indexes.

->binary-operator

(->binary-operator op)

Convert a thing to a binary operator. Thing can be a keyword or diff --git a/docs/tech.v3.datatype.bitmap.html b/docs/tech.v3.datatype.bitmap.html index 319803e8..65478838 100644 --- a/docs/tech.v3.datatype.bitmap.html +++ b/docs/tech.v3.datatype.bitmap.html @@ -4,7 +4,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); - gtag('config', 'G-95TVFC1FEB');

tech.v3.datatype.bitmap

Functions for working with RoaringBitmaps. These are integrated deeply into + gtag('config', 'G-95TVFC1FEB');

tech.v3.datatype.bitmap

Functions for working with RoaringBitmaps. These are integrated deeply into several tech.v3.datatype algorithms and have many potential applications in high performance computing applications as they are both extremely fast and storage-space efficient.

diff --git a/docs/tech.v3.datatype.convolve.html b/docs/tech.v3.datatype.convolve.html index c69386d1..0c9f17b9 100644 --- a/docs/tech.v3.datatype.convolve.html +++ b/docs/tech.v3.datatype.convolve.html @@ -4,7 +4,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); - gtag('config', 'G-95TVFC1FEB');

tech.v3.datatype.convolve

Namespace for implementing various basic convolutions. Currently only 1d + gtag('config', 'G-95TVFC1FEB');

tech.v3.datatype.convolve

Namespace for implementing various basic convolutions. Currently only 1d convolutions are supported.

convolve1d

(convolve1d data win options)(convolve1d data win)

Convolve a window across a signal. The only difference from correlate is the window is reversed and then correlate is called. See options for correlate, this diff --git a/docs/tech.v3.datatype.datetime.html b/docs/tech.v3.datatype.datetime.html index 153c1652..d9f510db 100644 --- a/docs/tech.v3.datatype.datetime.html +++ b/docs/tech.v3.datatype.datetime.html @@ -4,7 +4,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); - gtag('config', 'G-95TVFC1FEB');

tech.v3.datatype.datetime

Thorough bindings to java.time.datetime. Includes packed datatypes and + gtag('config', 'G-95TVFC1FEB');

tech.v3.datatype.datetime

Thorough bindings to java.time.datetime. Includes packed datatypes and lifting various datetime datatypes into the datatype system.

A general outline is: