Namespace Math::Matrix::Banded

Hi all,

I am working on a set of modules dealing with banded matrices (aka
band matrices or band diagonal matrices). These are a certain kind
of sparse matrices where all entries are known to be 0 except close
to the main diagonal. Obviously, this condition can be exploited for
efficient storage and algorithms.

I am planning to use the Math::Matrix::Banded namespace. However, I
require separate namespaces for rectangular (i.e. non-square) and
symmetric systems because they are stored differently and allow a
distinct set of algorithms.

I have considered
Math::Matrix::Banded
Math::Matrix::BandedRectangular
Math::Matrix::BandedSymmetric

What I don't like about this option is that the package name would
be Math-Matrix-Banded, but it would use namespaces outside the top
level namespace.

An obvious alternative would be
Math::Matrix::Banded
Math::Matrix::Banded::Rectangular
Math::Matrix::Banded::Symmetric

What I don't like here is that it suggests that the latter two
classes are subclasses of the first, which is not the case.

The third option I came up with is
Math::Matrix::Banded::Square
Math::Matrix::Banded::Rectangular
Math::Matrix::Banded::Symmetric

This is all within the Math::Matrix::Banded namespace and reflects
the sibling relationship between the three classes. What I can see
as a disadvantage - apart from long names - is that the package
would still be called Math-Matrix-Banded, but there is no class
occupying the top level namespace, which might be confusing for
users.

Do you have any thoughts on this matter?
Thank you and best wishes,
Lutz
0
lrg_ml
8/23/2020 9:40:47 AM
perl.module-authors 1604 articles. 0 followers. Follow

7 Replies
153 Views

Similar Articles

[PageSpeed] 0
Get it on Google Play
Get it on Apple App Store

On 2020-08-23 02:40, Lutz Gehlen wrote:
> Hi all,
> 
> I am working on a set of modules dealing with banded matrices (aka
> band matrices or band diagonal matrices). These are a certain kind
> of sparse matrices where all entries are known to be 0 except close
> to the main diagonal. Obviously, this condition can be exploited for
> efficient storage and algorithms.
> 
> I am planning to use the Math::Matrix::Banded namespace. However, I
> require separate namespaces for rectangular (i.e. non-square) and
> symmetric systems because they are stored differently and allow a
> distinct set of algorithms.
> 
> I have considered
> Math::Matrix::Banded
> Math::Matrix::BandedRectangular
> Math::Matrix::BandedSymmetric
> 
> What I don't like about this option is that the package name would
> be Math-Matrix-Banded, but it would use namespaces outside the top
> level namespace.
> 
> An obvious alternative would be
> Math::Matrix::Banded
> Math::Matrix::Banded::Rectangular
> Math::Matrix::Banded::Symmetric
> 
> What I don't like here is that it suggests that the latter two
> classes are subclasses of the first, which is not the case.
> 
> The third option I came up with is
> Math::Matrix::Banded::Square
> Math::Matrix::Banded::Rectangular
> Math::Matrix::Banded::Symmetric
> 
> This is all within the Math::Matrix::Banded namespace and reflects
> the sibling relationship between the three classes. What I can see
> as a disadvantage - apart from long names - is that the package
> would still be called Math-Matrix-Banded, but there is no class
> occupying the top level namespace, which might be confusing for
> users.
> 
> Do you have any thoughts on this matter?
> Thank you and best wishes,
> Lutz

First, I am not a mathematician.


Follow the application domain taxonomy names makes the most sense.


If your implementation is OO and maps 1:1 with the taxonomy, that would 
be ideal.  If not, I might have modules per the taxonomy where it makes 
sense, and put everything else into sub-directories organized by 
whatever makes sense for them (such as OO modules, utility functions, 
whatever).


Your third option could work for module names if Square, Rectangular, 
and Symmetric are at the same level of the taxonomy.  If they are the 
only three choices that will ever exist for banded matrices, then one 
distribution named Math::Matrix::Banded makes sense.


But if there are other types of banded matrices, if those terms are 
really at different levels, or if there are other taxonomy issues, 
perhaps you should release multiple distributions -- one per work 
product, named per the taxonomy.  The idea is that you do not want to 
block future modules or distributions.


David
0
dpchrist
8/23/2020 1:37:47 PM
--Apple-Mail=_E84ACD4C-D939-4CA2-A907-7D20619A6923
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=utf-8

Hi Lutz,

One thing to be aware of, is that if you=E2=80=99re releasing a =
distribution Math-Matrix-Banded, then your distribution needs to include =
a module Math::Matrix::Banded[*].

I like the model where you also have ::Square, ::Rectangular, and =
::Symmetric =E2=80=94 a class for each internal representation.

Not knowing anything about your planned design, could you have =
Math::Matrix::Banded be the public facing interface, with the =
appropriate "back-end" loaded by it? This could either be explicit, with =
the caller telling you what type to use, or more DWIMish, by looking at =
the matrix and deciding which of the three back-ends to use, factory =
method stylee:

    use Math::Matrix::Banded;
    my $matrix =3D =
Math::Matrix::Banded->load_from_file('foobar.matrix');
    print ref($matrix), "\n";

    # Math::Matrix::Banded::Symmetric

Or you could have Math::Matrix::Banded mainly a documentation module, =
which tells you about the interface, and tells you to select which =
back-end to use, based on your case.

Neil

[*] More accurately, you need to have an indexing permission on the =
package name that corresponds to the distribution name. So you could =
include a dummy Math::Matrix::Banded module in the first release so that =
PAUSE gives you first-come on the namespace, and then drop the module in =
the next release (PAUSE doesn=E2=80=99t take the indexing permission off =
you when you drop a module from a distribution). But I don=E2=80=99t =
really recommend this.


--Apple-Mail=_E84ACD4C-D939-4CA2-A907-7D20619A6923
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
	charset=utf-8

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html; =
charset=3Dutf-8"></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; line-break: after-white-space;" class=3D"">Hi =
Lutz,<div class=3D""><br class=3D""></div><div class=3D"">One thing to =
be aware of, is that if you=E2=80=99re releasing a distribution =
Math-Matrix-Banded, then your distribution needs to include a module =
Math::Matrix::Banded[*].</div><div class=3D""><br class=3D""></div><div =
class=3D"">I like the model where you also have ::Square, ::Rectangular, =
and ::Symmetric =E2=80=94 a class for each internal =
representation.</div><div class=3D""><br class=3D""></div><div =
class=3D"">Not knowing anything about your planned design, could you =
have Math::Matrix::Banded be the public facing interface, with the =
appropriate "back-end" loaded by it? This could either be explicit, with =
the caller telling you what type to use, or more DWIMish, by looking at =
the matrix and deciding which of the three back-ends to use, factory =
method stylee:</div><div class=3D""><br class=3D""></div><div =
class=3D""><font face=3D"Courier New" class=3D""><b class=3D"">&nbsp; =
&nbsp; use Math::Matrix::Banded;</b></font></div><div class=3D""><font =
face=3D"Courier New" class=3D""><b class=3D"">&nbsp; &nbsp; my $matrix =3D=
 =
Math::Matrix::Banded-&gt;load_from_file('foobar.matrix');</b></font></div>=
<div class=3D""><font face=3D"Courier New" class=3D""><b class=3D"">&nbsp;=
 &nbsp; print ref($matrix), "\n";</b></font></div><div class=3D""><font =
face=3D"Courier New" class=3D""><b class=3D""><br =
class=3D""></b></font></div><div class=3D""><font face=3D"Courier New" =
class=3D""><b class=3D"">&nbsp; &nbsp; # =
Math::Matrix::Banded::Symmetric</b></font></div><div class=3D""><br =
class=3D""></div><div class=3D"">Or you could have Math::Matrix::Banded =
mainly a documentation module, which tells you about the interface, and =
tells you to select which back-end to use, based on your case.</div><div =
class=3D""><br class=3D""></div><div =
class=3D""><div>Neil</div></div><div><br class=3D""></div><div>[*] More =
accurately, you need to have an indexing permission on the package name =
that corresponds to the distribution name. So you could include a dummy =
Math::Matrix::Banded module in the first release so that PAUSE gives you =
first-come on the namespace, and then drop the module in the next =
release (PAUSE doesn=E2=80=99t take the indexing permission off you when =
you drop a module from a distribution). But I don=E2=80=99t really =
recommend this.</div><div><br class=3D""></div></body></html>=

--Apple-Mail=_E84ACD4C-D939-4CA2-A907-7D20619A6923--
0
neil
8/24/2020 9:06:10 AM
Hi David,

thank you for your advice.

On Sunday, 23.08.2020 06:37:47 David Christensen wrote:
> On 2020-08-23 02:40, Lutz Gehlen wrote:
[...]
> > I am working on a set of modules dealing with banded matrices
> > (aka band matrices or band diagonal matrices). These are a
> > certain kind of sparse matrices where all entries are known to
> > be 0 except close to the main diagonal. Obviously, this
> > condition can be exploited for efficient storage and
> > algorithms.
> >
[...]
> >
> > The third option I came up with is
> > Math::Matrix::Banded::Square
> > Math::Matrix::Banded::Rectangular
> > Math::Matrix::Banded::Symmetric
> >
> > This is all within the Math::Matrix::Banded namespace and
> > reflects the sibling relationship between the three classes.
> > What I can see as a disadvantage - apart from long names - is
> > that the package would still be called Math-Matrix-Banded, but
> > there is no class occupying the top level namespace, which
> > might be confusing for users.
[...]

>
> First, I am not a mathematician.
>
>
> Follow the application domain taxonomy names makes the most sense.

Hm, that depends on what you consider as the application domain.
=46rom an analytical (in a mathematical sense in contrast to
numerical) point of view, there is a clear hierarchy. There are
general (rectangular) matrices; square matrices are a subset of
them, and symmetric matrices are again a subset of square matrices.
You might argue that I should use the following namespaces:
Math::Matrix::Banded
Math::Matrix::Banded::Square
Math::Matrix::Banded::Square::Symmetric
I suppose that this is what you mean by following the application
domain taxonomy or am I wrong?

However, from a numerical point of view, the three types are treated
rather separately. Specifically, for banded matrices, the three types
are stored in different ways and in many cases, you would not apply
an algorithm for general square matrices to a symmetric one even if
you could, because there are more efficient/stable/etc algorithms at
your disposal. Hence, you might rather consider them at the same
taxonomic level. This is what I have in mind.

One might think of looking at other libraries that implement this
kind of software, but they are typically written in C or Fortran and
rather tend to very short and cryptic function names like sgbtrf
instead of hierarchical namespaces.

> If your implementation is OO and maps 1:1 with the taxonomy, that
> would be ideal.  If not, I might have modules per the taxonomy
> where it makes sense, and put everything else into
> sub-directories organized by whatever makes sense for them (such
> as OO modules, utility functions, whatever).

Not sure I understand the second part of your advice. However, my
implementation is OO and arguably maps with the taxonomy as
discussed above, so it might not be relevant.

> Your third option could work for module names if Square,
> Rectangular, and Symmetric are at the same level of the taxonomy.
>  If they are the only three choices that will ever exist for
> banded matrices, then one distribution named Math::Matrix::Banded
> makes sense.
>
>
> But if there are other types of banded matrices, if those terms
> are really at different levels, or if there are other taxonomy
> issues, perhaps you should release multiple distributions -- one
> per work product, named per the taxonomy.  The idea is that you
> do not want to block future modules or distributions.

Hm, they are the only three choices I foresee, but people might have
other ideas. Hence, you have a point.

Thinking about this point, I'm also getting second thoughts on using
the Math::Matrix namespace to start with. There is a Math::Matrix
distribution, does this imply that the entire Math::Matrix namespace
should be considered "reserved"? Maybe I should use
Math::BandedMatrix::Square etc.
or
Math::MatrixBanded::Square etc.
instead. This is what other people seem to have done with
Math::MatrixReal, Math::MatrixBool, Math::MatrixSparse,
Math::SparseMatrix and others. On the other hand, there is e.g.
Math::Matrix::MaybeGSL, which has nothing to do with Math::Matrix.

Cheers,
Lutz
0
lrg_ml
8/24/2020 1:46:52 PM
On 2020-08-24 06:46, Lutz Gehlen wrote:
> Hi David,
> 
> thank you for your advice.

YW.  :-)


> On Sunday, 23.08.2020 06:37:47 David Christensen wrote:
>> On 2020-08-23 02:40, Lutz Gehlen wrote:
> [...]
>>> I am working on a set of modules dealing with banded matrices
>>> (aka band matrices or band diagonal matrices). These are a
>>> certain kind of sparse matrices where all entries are known to
>>> be 0 except close to the main diagonal. Obviously, this
>>> condition can be exploited for efficient storage and
>>> algorithms.

>> Follow[ing] the application domain taxonomy names makes the most sense [to me].
> 
> Hm, that depends on what you consider as the application domain.
>  From an analytical (in a mathematical sense in contrast to
> numerical) point of view, there is a clear hierarchy. There are
> general (rectangular) matrices; square matrices are a subset of
> them, and symmetric matrices are again a subset of square matrices.
> You might argue that I should use the following namespaces:
> Math::Matrix::Banded
> Math::Matrix::Banded::Square
> Math::Matrix::Banded::Square::Symmetric
> I suppose that this is what you mean by following the application
> domain taxonomy or am I wrong?
> 
> However, from a numerical point of view, the three types are treated
> rather separately. Specifically, for banded matrices, the three types
> are stored in different ways and in many cases, you would not apply
> an algorithm for general square matrices to a symmetric one even if
> you could, because there are more efficient/stable/etc algorithms at
> your disposal. Hence, you might rather consider them at the same
> taxonomic level. This is what I have in mind.
> 
> One might think of looking at other libraries that implement this
> kind of software, but they are typically written in C or Fortran and
> rather tend to very short and cryptic function names like sgbtrf
> instead of hierarchical namespaces.

I would favor an analytical mathematics taxonomy over a numerical 
methods taxonomy or a computer science taxonomy.  This should make it 
easier for users who work in the field to grok the distribution.


I would add these information architecture considerations;

-   If the term "rectangular matrix" is the general case for all 
matrices, I would drop "rectangular" and just use "matrix".

-   If banded is a special case for rectangular matrices, square 
matrices, and symmetric matrices, I would apply "banded" as a suffix:


Thus:

     Math::Matrix::Banded

     Math::Matrix::Square::Banded

     Math::Matrix::Square::Symmetric::Banded


That said, each author could also document their implementation; to 
allow direct usage and/or optimization by interested users.


>> If your implementation is OO and maps 1:1 with the taxonomy, that
>> would be ideal.  If not, I might have modules per the taxonomy
>> where it makes sense, and put everything else into
>> sub-directories organized by whatever makes sense for them (such
>> as OO modules, utility functions, whatever).
> 
> Not sure I understand the second part of your advice. However, my
> implementation is OO and arguably maps with the taxonomy as
> discussed above, so it might not be relevant.

If your OO design does not map 1:1 with the chosen taxonomy, I was 
suggesting a distribution tree similar to the following:

  Math-Matrix-Banded
  |-- lib
  |   |-- Math
  |   |   |-- Matrix
  |   |   |   |-- Banded
  |   |   |   |   |-- OO
  |   |   |   |   |   |-- <OO implementation tree>
  |   |   |   |   |-- Util.pm
  |   |   |   |   |-- <other stuff as required>
  |   |   |   |   Banded.pm
  |   |   |   |   Square
  |   |   |   |   |-- Banded.pm
  |   |   |   |   |-- Symmetric
  |   |   |   |   |   |-- Banded.pm
  |-- t
  |   |-- <test scripts>
  |-- MANIFEST
  |-- Makefile.PL
  |-- README


The lib/Math/Matrix/Banded/OO directory would hold your implementation:

- The OO sub-directory would contain your OO implementation.

- The file Util.pm would contain whatever non-OO stuff you need.

- Other files and directories as needed.


The files:

- lib/Math/Matrix/Banded.pm

- lib/Math/Matrix/Square/Banded.pm

- lib/Math/Matrix/Square/Symmetric/Banded.pm

would provide documentation per the analytical mathematics taxonomy and 
provide a translation layer from this taxonomy into your OO 
implementation.  Yourself, myself, and any other author(s) would want to 
collaborate on the translation layer.


But, I now see a problem -- the Math::Matrix::Square namespace is not 
properly contained within the Math-Matrix-Banded distribution. 
Therefore, Math-Matrix-Square-Banded must be its own distribution. 
Similarly, Math-Matrix-Square-Symmetric-Banded must be its own 
distribution.  If there is common stuff that can be shared, put it into 
the first and make the latter two dependent upon the first.


The hardest part is planning for the unknown.  What name do I use when I 
create my FBP implementation?  These names:

     Math::Matrix::Banded::OO

     Math::Matrix::Square::Banded::OO

     Math::Matrix::Square::Symmetric::Banded::OO

would leave *::FBP for me, *::Structured for the other guy, and 
*::Quantum for the future.


You can chase your tail forever when it comes to these kinds of questions...


>> But if there are other types of banded matrices, if those terms
>> are really at different levels, or if there are other taxonomy
>> issues, perhaps you should release multiple distributions -- one
>> per work product, named per the taxonomy.  The idea is that you
>> do not want to block future modules or distributions.
> 
> Hm, they are the only three choices I foresee, but people might have
> other ideas. Hence, you have a point.
> 
> Thinking about this point, I'm also getting second thoughts on using
> the Math::Matrix namespace to start with. There is a Math::Matrix
> distribution, does this imply that the entire Math::Matrix namespace
> should be considered "reserved"? 

I would consider CPAN user names to be "reserved".  I would not worry 
about picking a name Math-Matrix-*, so long as it does not collide with 
any *.pm or *.pod file in any distribution.


David


p.s.  I should mention the Polar Bear book [1].


[1] 
https://www.oreilly.com/library/view/information-architecture-4th/9781491913529/
0
dpchrist
8/25/2020 12:17:30 AM
Hi David

On Monday, 24.08.2020 17:17:30 David Christensen wrote:
> On 2020-08-24 06:46, Lutz Gehlen wrote:
[...]
> > On Sunday, 23.08.2020 06:37:47 David Christensen wrote:
> >> On 2020-08-23 02:40, Lutz Gehlen wrote:
> > [...]
> >
> >>> I am working on a set of modules dealing with banded matrices
> >>> (aka band matrices or band diagonal matrices). These are a
> >>> certain kind of sparse matrices where all entries are known to
> >>> be 0 except close to the main diagonal. Obviously, this
> >>> condition can be exploited for efficient storage and
> >>> algorithms.
> >>
> >> Follow[ing] the application domain taxonomy names makes the
> >> most sense [to me].>
> > Hm, that depends on what you consider as the application domain.
> >
> >  From an analytical (in a mathematical sense in contrast to
> >
> > numerical) point of view, there is a clear hierarchy. There are
> > general (rectangular) matrices; square matrices are a subset of
> > them, and symmetric matrices are again a subset of square
> > matrices. You might argue that I should use the following
> > namespaces: Math::Matrix::Banded
> > Math::Matrix::Banded::Square
> > Math::Matrix::Banded::Square::Symmetric
> > I suppose that this is what you mean by following the
> > application
> > domain taxonomy or am I wrong?
> >
> > However, from a numerical point of view, the three types are
> > treated rather separately. Specifically, for banded matrices,
> > the three types are stored in different ways and in many cases,
> > you would not apply an algorithm for general square matrices to
> > a symmetric one even if you could, because there are more
> > efficient/stable/etc algorithms at your disposal. Hence, you
> > might rather consider them at the same taxonomic level. This is
> > what I have in mind.
> >
> > One might think of looking at other libraries that implement
> > this
> > kind of software, but they are typically written in C or Fortran
> > and rather tend to very short and cryptic function names like
> > sgbtrf instead of hierarchical namespaces.
>
> I would favor an analytical mathematics taxonomy over a numerical
> methods taxonomy or a computer science taxonomy.  This should make
> it easier for users who work in the field to grok the
> distribution.

I see your point, but I am not sure I agree. Users looking for these
modules are interested in the computer science and even
implementation part because they have a large problem that makes
this necessary. From an analytical perspective the size of the
matrix does not matter and if the user does not need to care then
he/she will rather pick a general purpose matrix distribution. It
does not make a lot of sense to take advantage of the banded
structure of a 10x10 matrix. However, if it is a 10000x10000 matrix
and I know its banded then I am acutely aware of and interested in
this property and what it implies from a numerical perspective.

> I would add these information architecture considerations;
>
> -   If the term "rectangular matrix" is the general case for all
> matrices, I would drop "rectangular" and just use "matrix".

Yes, if I go the hierarchical way then this makes a lot of sense.

> -   If banded is a special case for rectangular matrices, square
> matrices, and symmetric matrices, I would apply "banded" as a
> suffix:
>
>
> Thus:
>
>      Math::Matrix::Banded
>
>      Math::Matrix::Square::Banded
>
>      Math::Matrix::Square::Symmetric::Banded

This goes both ways. Yes, banded is a special case let's say of a
square matrix, but square is also a special case of a banded matrix.
The choice depends on which property you consider more fundamental
or want to highlight more. I consider the bandedness as more
fundamental for the reasons discussed above. I expect a potential
user of my modules to look specifically for a distribution supporting
banded matrices. That does not mean that the shape is not important,
but the user will not type "square" into the search field, but
"banded".

Additionally, I like the idea by Neil Bowers to have a central
Math::Matrix::Banded module whose constructor dispatches to the
specific classes. I think it makes sense for them to sit in a shared
namespace.


> That said, each author could also document their implementation;
> to allow direct usage and/or optimization by interested users.
>
>
> >> If your implementation is OO and maps 1:1 with the taxonomy,
> >> that
> >> would be ideal.  If not, I might have modules per the taxonomy
> >> where it makes sense, and put everything else into
> >> sub-directories organized by whatever makes sense for them
> >> (such
> >> as OO modules, utility functions, whatever).
> >
> > Not sure I understand the second part of your advice. However,
> > my
> > implementation is OO and arguably maps with the taxonomy as
> > discussed above, so it might not be relevant.
>
> If your OO design does not map 1:1 with the chosen taxonomy, I was
> suggesting a distribution tree similar to the following:
>
>   Math-Matrix-Banded
>
>   |-- lib
>   |
>   |   |-- Math
>   |   |
>   |   |   |-- Matrix
>   |   |   |
>   |   |   |   |-- Banded
>   |   |   |   |
>   |   |   |   |   |-- OO
>   |   |   |   |   |
>   |   |   |   |   |   |-- <OO implementation tree>
>   |   |   |   |   |
>   |   |   |   |   |-- Util.pm
>   |   |   |   |   |-- <other stuff as required>
>   |   |   |   |
>   |   |   |   |   Banded.pm
>   |   |   |   |   Square
>   |   |   |   |
>   |   |   |   |   |-- Banded.pm
>   |   |   |   |   |-- Symmetric
>   |   |   |   |   |
>   |   |   |   |   |   |-- Banded.pm
>   |
>   |-- t
>   |
>   |   |-- <test scripts>
>   |
>   |-- MANIFEST
>   |-- Makefile.PL
>   |-- README
>
> The lib/Math/Matrix/Banded/OO directory would hold your
> implementation:
>
> - The OO sub-directory would contain your OO implementation.
>
> - The file Util.pm would contain whatever non-OO stuff you need.
>
> - Other files and directories as needed.
>
>
> The files:
>
> - lib/Math/Matrix/Banded.pm
>
> - lib/Math/Matrix/Square/Banded.pm
>
> - lib/Math/Matrix/Square/Symmetric/Banded.pm
>
> would provide documentation per the analytical mathematics
> taxonomy and provide a translation layer from this taxonomy into
> your OO implementation.  Yourself, myself, and any other
> author(s) would want to collaborate on the translation layer.

Thank you for your elaborate explanation!

> But, I now see a problem -- the Math::Matrix::Square namespace is
> not properly contained within the Math-Matrix-Banded
> distribution. Therefore, Math-Matrix-Square-Banded must be its
> own distribution. Similarly, Math-Matrix-Square-Symmetric-Banded
> must be its own distribution.  If there is common stuff that can
> be shared, put it into the first and make the latter two
> dependent upon the first.

Yes, in that case, separate distributions would be required. At the
current stage of my implementation there is no shared code because
the underlying data structures are specific to each case. There are
dependencies, though, e.g. an object of one class producing an
object of another. If I release the modules as separate
distributions I will need to add inter-dependencies (avoiding
circular ones!). Let's see.

> The hardest part is planning for the unknown.  What name do I use
> when I create my FBP implementation?  These names:

[...]

> You can chase your tail forever when it comes to these kinds of
> questions...

I can certainly see that :-).

> >> But if there are other types of banded matrices, if those terms
> >> are really at different levels, or if there are other taxonomy
> >> issues, perhaps you should release multiple distributions --
> >> one
> >> per work product, named per the taxonomy.  The idea is that you
> >> do not want to block future modules or distributions.
> >
> > Hm, they are the only three choices I foresee, but people might
> > have other ideas. Hence, you have a point.
> >
> > Thinking about this point, I'm also getting second thoughts on
> > using the Math::Matrix namespace to start with. There is a
> > Math::Matrix distribution, does this imply that the entire
> > Math::Matrix namespace should be considered "reserved"?
>
> I would consider CPAN user names to be "reserved".  I would not
> worry about picking a name Math-Matrix-*, so long as it does not
> collide with any *.pm or *.pod file in any distribution.

Ok, thanks for your advice.

> p.s.  I should mention the Polar Bear book [1].
>
>
> [1]
> https://www.oreilly.com/library/view/information-architecture-4th/
> 9781491913529/

Thank you for the pointer. I find it hard to grasp from the
descriptions on O'Reilly and Amazon what the book actually covers,
which does not mean I shouldn't read it (possibly the opposite).

Best wishes,
Lutz
0
lrg_ml
8/25/2020 9:02:49 AM
Hi Neil,

On Monday, 24.08.2020 10:06:10 Neil Bowers wrote:
[...]
> One thing to be aware of, is that if you=E2=80=99re releasing a
> distribution Math-Matrix-Banded, then your distribution needs to
> include a module Math::Matrix::Banded[*].

Thank you, I wasn't aware of that.

> I like the model where you also have ::Square, ::Rectangular, and
> ::Symmetric =E2=80=94 a class for each internal representation.
>=20
> Not knowing anything about your planned design, could you have
> Math::Matrix::Banded be the public facing interface, with the
> appropriate "back-end" loaded by it? This could either be
> explicit, with the caller telling you what type to use, or more
> DWIMish, by looking at the matrix and deciding which of the three
> back-ends to use, factory method stylee:
>=20
>     use Math::Matrix::Banded;
>     my $matrix =3D
> Math::Matrix::Banded->load_from_file('foobar.matrix'); print
> ref($matrix), "\n";
>=20
>     # Math::Matrix::Banded::Symmetric
[...]

I like this idea a lot. The size of the matrix is immutable and set=20
at construction time, so whether it's square or not can be detected=20
automatically. Symmetry will have to be set explicitly since the=20
elements of the matrix are mutable.

Thanks,
Lutz
0
lrg_ml
8/25/2020 9:03:15 AM
On 2020-08-25 02:02, Lutz Gehlen wrote:
> Hi David
> 
> On Monday, 24.08.2020 17:17:30 David Christensen wrote:

>> p.s.  I should mention the Polar Bear book [1].
>>
>>
>> [1]
>> https://www.oreilly.com/library/view/information-architecture-4th/
>> 9781491913529/
> 
> Thank you for the pointer. I find it hard to grasp from the
> descriptions on O'Reilly and Amazon what the book actually covers,
> which does not mean I shouldn't read it (possibly the opposite).

https://en.wikipedia.org/wiki/Information_architecture

"Information architecture (IA) is the structural design of shared 
information environments; the art and science of organizing and labeling 
websites, intranets, online communities and software to support 
usability and find-ability; and an emerging community of practice 
focused on bringing principles of design, architecture and information 
science to the digital landscape. Typically, it involves a model or 
concept of information that is used and applied to activities which 
require explicit details of complex information systems. These 
activities include library systems and database development."


IA is one of those fields whose applications are all around us, but is 
only noticed when done poorly.  The above book makes you aware of the 
concepts and techniques of IA, and helps you articulate its application 
(and misapplication).  While the book uses web sites for concrete 
examples, IA is widely applicable (including CPAN).


David
0
dpchrist
8/25/2020 8:30:26 PM
Reply: