Ops(3pm)

πŸ“¦
version 1.24.1 Β· 5 versions
, in debian trixie, ubuntu resolute

πŸ’– Ops(3pm) β€” PDL::CCS::Ops πŸ’–

okay bestie, listen up β€” this is the manual page for PDL::CCS::Ops, part of the User Contributed Perl Documentation collection. It's giving low-level binary operations for compressed-storage sparse PDLs, and it is so much nerdier than it sounds. 🧚


✨ NAME ✨

PDL::CCS::Ops β€” low-level binary operations for compressed storage sparse PDLs πŸ¦‹


🌸 SYNOPSIS 🌸

use PDL;
use PDL::CCS::Utils;

##---------------------------------------------------------------------
## ... stuff happens

yeah bestie that's the whole synopsis, the vibes are immaculate and the details are in the functions below πŸ’…


πŸ”₯ FUNCTIONS πŸ”₯

πŸ‘‘ ccs_binop_align_block_mia

Signature:

Signature: (
  indx ixa(Ndims,NnzA); indx ixb(Ndims,NnzB); indx    istate(State);
  indx [o]nzai(NnzC);   indx [o]nzbi(NnzC);   indx [o]ostate(State);
  )

okay so what does it DO β€” it partially aligns a pair of lexicographically sorted index-vector lists $ixa() and $ixb(). Like, imagine you're doing block-wise incremental computation of binary operations over sparse index-encoded PDLs, and you're assuming that missing indices correspond to annihilators. That's the vibe. That's the whole assignment. ✨

On return, the vectors $nzai and $nzbi hold indices into NnzA and NnzB respectively, and they're constructed such that:

($ixa(,$nzai->slice("0:$nzci_max")) == $ixb(,$nzbi->slice("0:$nzci_max"))

At most NnzC alignments are performed, and alignment ceases as soon as any of the PDLs $ixa(), $ixb(), $nzai(), or $nzbi() has been exhausted. Like, it's done, it's clocked out, no cap. πŸ’€

The parameters $istate() and $ostate() hold the state of the algorithm, for incremental block-wise computation at the perl level. Each state PDL is a 7-element PDL containing these values:

  • 0, nnzai β€” minimum offset in NnzA of current $ixa() value
  • 1, nnzai_nxt β€” minimum offset in NnzA of next $ixa() value
  • 2, nnzbi β€” minimum offset in NnzB of current $ixb() value
  • 3, nnzbi_nxt β€” minimum offset in NnzB of next $ixb() value
  • 4, nnzci β€” minimum offset in NnzC of current ($ixa(),$ixb()) value pair
  • 5, nnzci_nxt β€” minimum offset in NnzC of next ($ixa(),$ixb()) value pair
  • 6, cmpval β€” 3-way comparison value for current ($ixa(),$ixb()) value pair

For computation of the first block, $istate() can be safely set to zeroes(long,7). 🫢

Repetitions may occur in input index PDLs $ixa() and $ixb(). If an index-match occurs on such a "run", all pairs of matching values are added to the output PDLs. Periodt. πŸ’…

All alignments have been performed if:

$ostate(0)==$NnzA && $ostate(1)==$NnzB
⚠️ WARNING: this alignment method ignores index-vectors which are not present in both $ixa() and $ixb(), which is a Good Thing if you are feeding the aligned values into an operation for which missing values are annihilators: $missinga * $bval == ($missinga * $missingb) for each $bval \in $b, and $aval * $missingb == ($missinga * $missingb) for each $aval \in $a This ought to be the case for all operations if missing values are "BAD" (see PDL::Bad), but might cause unexpected results if e.g. missing values are zero and the operation in question is addition. 😭 bestie, read this part twice.

ccs_binop_align_block_mia does not process bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays. πŸ‘‘


🌈 ACKNOWLEDGEMENTS 🌈

  • Perl by Larry Wall. πŸͺ
  • PDL by Karl Glazebrook, Tuomas J. Lukka, Christian Soeller, and others. ⭐

πŸ’€ KNOWN BUGS πŸ’€

No support for (pseudo)-threading. that's it, that's the bug, we said what we said πŸ™ˆ


πŸŽ€ AUTHOR πŸŽ€

Bryan Jurish <moocow@cpan.org> πŸ¦‹

All other parts Copyright (C) 2007-2024, Bryan Jurish. All rights reserved.

This package is free software, and entirely without warranty. You may redistribute it and/or modify it under the same terms as Perl itself. slay, open source rights preserved, no cap πŸ’–


🌸 SEE ALSO 🌸


okay that's the whole page bestie, you ate it 🫢✨ This was rendered by perl v5.40.0, dated 2025-01-04, and the page is Ops(3pm). Go forth and align those sparse indices, icon. πŸ’…πŸŒˆ

πŸ“¦ where this page comes from