Re: [Cbor] typed arrays for complex numbers

Josef 'Jeff' Sipek <jeffpc@josefsipek.net> Thu, 18 July 2019 13:51 UTC

Return-Path: <jeffpc@josefsipek.net>
X-Original-To: cbor@ietfa.amsl.com
Delivered-To: cbor@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 1DF8112027C for <cbor@ietfa.amsl.com>; Thu, 18 Jul 2019 06:51:34 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.897
X-Spam-Level:
X-Spam-Status: No, score=-1.897 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_NONE=0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id V8c09AgFjllE for <cbor@ietfa.amsl.com>; Thu, 18 Jul 2019 06:51:31 -0700 (PDT)
Received: from smtp.jeffnet.31bits.net (josefsipek.net [71.174.113.7]) by ietfa.amsl.com (Postfix) with ESMTP id 6279212028C for <cbor@ietf.org>; Thu, 18 Jul 2019 06:51:31 -0700 (PDT)
Received: from meili (unknown [172.27.0.163]) by smtp.jeffnet.31bits.net (Postfix) with ESMTPSA id 728221AE49; Thu, 18 Jul 2019 13:51:30 +0000 (UTC)
Date: Thu, 18 Jul 2019 09:51:18 -0400
From: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
To: Gregory Allen <gallen@arlut.utexas.edu>
Cc: Carsten Bormann <cabo@tzi.org>, cbor@ietf.org
Message-ID: <20190718135118.GA1561@meili>
References: <15400EA6-DA5F-499E-B9A5-B98E0A6887CB@arlut.utexas.edu> <49F73FF9-1952-421E-9C0D-A9B2821FCEC7@tzi.org> <20190712141659.GA1505@meili> <328EA863-7747-4723-983E-5B1EF248A2A1@arlut.utexas.edu>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="82I3+IH0IqGh5yIs"
Content-Disposition: inline
In-Reply-To: <328EA863-7747-4723-983E-5B1EF248A2A1@arlut.utexas.edu>
User-Agent: Mutt/1.11.4 (2019-03-13)
Archived-At: <https://mailarchive.ietf.org/arch/msg/cbor/Njog-EOBlaUBo5UCOOhe211iop4>
Subject: Re: [Cbor] typed arrays for complex numbers
X-BeenThere: cbor@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: "Concise Binary Object Representation \(CBOR\)" <cbor.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/cbor>, <mailto:cbor-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/cbor/>
List-Post: <mailto:cbor@ietf.org>
List-Help: <mailto:cbor-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/cbor>, <mailto:cbor-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 18 Jul 2019 13:51:34 -0000

On Mon, Jul 15, 2019 at 09:55:21 -0500, Gregory Allen wrote:
> Perhaps “complex” deserves a special tag because it’s so common,

My instinct is telling me that you are correct.

If someone ever comes up with a more generic way to store vectors in
arbitrary n-dimensional spaces, they can always say that complex numbers
should use this other tag.

> but it’s easy to see how a tag for each type of compound data doesn’t
> scale well.
> 
> Following Jeff’s line of reasoning could lead to something like structured
> data types in NumPy
> [https://docs.scipy.org/doc/numpy/user/basics.rec.html]. HDF5 supports
> similar constructs.
> 
> The idea is that one describes the type, and then an array can contain
> elements of the user-defined type. This can be used to describe blobs
> containing homogeneous arrays of arbitrary structures.
> 
> For example (from NumPy):
> 
>     cymk_type = [(‘c’, np.uint8), (‘y’, np.uint8), (‘m’, np.uint8), (‘k’, np.uint8)] # list of (name, type) pairs
>     x = np.zeros([640, 480], dtype=cymk_type)
> 
> I didn’t propose this before because it’s obviously much greater in scope
> than adding a “complex” tag. It’s not even clear to me what approach I
> would want to take to add this to CBOR.

Interesting.  I'd definitely want to leave this to someone who knows more
about this / actually cares about this :)  (That may be you, for all I
know!)

Jeff.

> 
> Thanks,
> -Greg
> 
> > On Jul 12, 2019, at 9:17 AM, Josef 'Jeff' Sipek <jeffpc@josefsipek.net>; wrote:
> > 
> > On Fri, Jul 12, 2019 at 02:23:23 +0200, Carsten Bormann wrote:
> >> On Jul 12, 2019, at 01:24, Gregory Allen <gallen@arlut.utexas.edu>; wrote:
> >>> 
> >>> I could imaging a “complex” tag, that’s a modifier for a dataType, so that one could do:
> >>> 
> >>>   multi-dim([dim, complex(ta-float32le(bstr)) ])
> >>> 
> >>> However, that doesn’t scale well to having several different compound types such as those mentioned above.
> >> 
> >> Well, it requires a new tag for each of these compound types, but if these are indeed different types, then tags are cheap (as long as they don’t have to come out of the 1+1 space :-).
> >> 
> >> So if this helps, we could indeed define tags (for complex, quaternion,
> >> octonions, sedenions, RGB, RGBA) that extract groups of 2, 4, 8, 16, 3, 4
> >> elements out of an array (tagged or classical CBOR).
> >> (Well, RGB is a bit weird, because there are so many color spaces.  Maybe
> >> just have tags for three- and four-dimensional color spaces.)
> > 
> > I'm far from a color expert, but as far as I know even for RGB color spaces
> > the values aren't always stored in one order.  At the very least there are
> > RGBA and ARGB.
> > 
> > Currently my best idea amounts to:
> > 
> > 	color(["RGB", [R1, G1, B1, R2, ...])
> > 	color(["RGBA", [R1, G1, B1, A1, R2, ...])
> > 	color(["CMYK", [C1, M1, Y1, K1, C2, ...])
> > 
> > I don't know if using a text string to identify the color component names
> > and order is an anti-pattern in CBOR but it is similar to the currency
> > related tags discussed some months ago.
> > 
> > This could even be extended to support planar formats (where the values for
> > each component are clumped together to allow better compression) and chroma
> > subsampling (where there aren't the same number of samples for each
> > component).  With either:
> > 
> > 	color(["RGB", [R1, R2, ...], [G1, G2, ...], [B1, B2, ...])
> > 	color(["YUV420", [Y1, Y2, ...], [U1, U2, ...], [V1, V2, ...])
> > 
> > or:
> > 
> > 	color(["RGB", [R1, R2, ..., G1, G2, ..., B1, B2, ...])
> > 	color(["YUV420", [Y1, Y2, ..., U1, U2, ..., V1, V2, ...])
> > 
> > I suppose the second would need to identify the number or ratio of values
> > for each component to support chroma subsampling, so the first would
> > probably be better.
> > 
> > Going down the rabbit hole of storing color data, there are also CCDs which
> > red/blue pixels.
> > 
> > 
> > Anyway, beware I know just enough about this to be dangerous :)  I'd
> > probably stay away from defining tags for colors until an actual expert
> > comes along.
> > 
> > Jeff.
> > 
> >> Alternatively, supplying the group size separately maybe can do all of these at omce, but then cannot distinguish quaternions from RGBA or CMYK.
> >> 
> >> Grüße, Carsten
> >> 
> >> _______________________________________________
> >> CBOR mailing list
> >> CBOR@ietf.org
> >> https://www.ietf.org/mailman/listinfo/cbor
> > 
> > -- 
> > My public PGP key can be found at https://www.josefsipek.net/pgp/
> 



-- 
You measure democracy by the freedom it gives its dissidents, not the
freedom it gives its assimilated conformists.
		- Abbie Hoffman