ASPL User Guide v 1.00
© 2025 Bassem W. Jamaleddine


J

   Metadata and the Element Grouping Class: metagrouping


In ASPL, the grouping of data is coherently realized with autogenerated modular processors that have the following features: (1) they are loadable classes managed by the interpreter containment engine, (2) they are specific in defining the kind of attributes, and (3) they have subroutines to emit each attribute. Specifying the kind of attributes is essential, since comparing strings is different than comparing numbers, and emiting a string is different than emiting a number. In addition, the value of an attribute can be non static and dynamically changeable (should it be bound to a processing subroutine or tied to a streamable device). You do not need to be involved in managing ASPL containment engine, as the creation and deletion of grouping classes is transparently done through the use of one simple command: metagrouping, and ASPL dynamic containment engine will pick up the rest of the work to load any grouping class you created.

ASPL power stems in its unique way to work on group algebraic data objects, a novelty in this premier calculator that operates on variables that represent structured GADg objects. GADg stands for Group Algebraic Data groups, and it is the base structured object that forms an ASPL group.

The GADg consists of subgroups and elements both of which have attributes that are described in their own element-grouping-class. That is the attributes of elements and subgroups of the GADg objects are described in the element-grouping-class (a set of classes and modules that are loaded by ASPL element-grouping-class-container: egC-Container). In general, GADg is created by a GG-function that must be in concordance with the element-grouping-class; hence each named GG-function is bound to one and only one named element-grouping-class: we use the adjective namedGClass to describe the name of a specific element-grouping-class; for instance, if you start ASPL by loading the namedspace TRIVIAL, the namedGClass ZEROGROUP is automatically loaded by the egC-Container.

Groups are different, for example a group of flowers and a group of cars are totally two different type of groups. Therefore, in ASPL, the making of the groups starts with the ELMD descriptor, a file describing the attributes of groups, subgroups, and their elements. This file descriptor has a unique name (the name of the grouping class, prefixed with the extension .ELMD), and one can issue the tilde axpansion ~elmd at the ASPL prompt to print its location.

Each element-grouping-class is identified by a unique name: for example if ACMEGROUP is such a name, then we say the namedGClass ACMEGROUP is the element-grouping-class that describes the attributes associated with the elements and subgroups. To work with datasets as described in the namedGClass ACMEGROUP, one needs to create a workspace whose metadata conforms to the namedGClass ACMEGROUP; let's call such namedspace ACMESPACE. Each namedspace is identified by a unique name, in addition its metadata must be bound to one of the already defined namedGClasses.

To create the namedGClass EMPTYGROUP, you will use the command metagrouping

metagrouping -creategrouping EMPTYGROUP

The following command deletes the namedGClass EMPTYGROUP

metagrouping -deletegrouping EMPTYGROUP

and this command creates it again

metagrouping -creategrouping EMPTYGROUP



The program metagrouping is supplied with ASPL. The following shows the program and its options:
  metagrouping [-help] 
       [-list] 
       [-llist] 
       [-listnamed] 
       [-egcping NAMEDGROUP] 
       [-checkgrouping NAMEDGROUP] 
       [-creategrouping NAMEDGROUP [-attributes list-of-attribute]] 
       [-creategrouping NAMEDGROUP [-displayphrase STRING] [-attributes list-of-attribute]]
       [-deletegrouping NAMEDGROUP] 
       [-unlinkgrouping NAMEDGROUP] 
       [-genenodes]
       [-listnamedphrases] 

Where:

  -help                         Display this summary
  -list                         List the namedGClasses in the grouping class container by
                                  pinging each class and echoing whoami from the container
  -llist                        List the namedGClasses in the grouping class container 
  -listnamed                    List the namedGClasses in the grouping class container 
  -checkgrouping NAMEDGROUP     Check the NAMEDGROUP 
  -creategrouping NAMEDGROUP    Create a new grouping class for the NAMEDGROUP in
                                  ASPL grouping container. To add attributes to
                                  the class to be created use -attributes option.
  -deletegrouping NAMEDGROUP    Delete the grouping class from ASPL grouping 
                                  container
  -unlinkgrouping NAMEDGROUP    Same as -deletegrouping but interactive with Y/N prompt
  -exportgrouping NAMEDGROUP    Export a grouping class to a targetdir (INTERNAL USE ONLY)
  -targetdir DIR                Specify a target directory when using -exportgrouping
  -sunsetgrouping NAMEDGROUP    Sunset the grouping class (INTERNAL USE ONLY)
  -unsunsetgrouping NAMEDGROUP  Unsunset the grouping class (INTERNAL USE ONLY)
  -genenodes                    Generate Enodes (INTERNAL USE ONLY)
  -listnamedphrases             List the namedGClasses and their displayphrases

When creating a grouping class with additional attributes, each attribute
specified must be a word. The following attributes are always created and
cannot be specified: dosi entropy ppdd ffl chksum hmflgrp
Each attribute specified must be followed by a comma and its type. The
type is a single letter of the following: i f s t T c
where 'i' stands for integer, 'f' stands for float, 's' stands for string,
't' stands for 'tie', 'T' stands for autotie, and 'c' stands for code.
When 'c' is specified, then you need to follow it by a comma and the
symbol representing the code (which is also called TXT).
For attributes of type TXT, it is possible to specify an interval, as
shown in the example of BAYLEVELGROUP below.


Example:

    To create the element grouping class named FLOWERS, we say the namedGClass FLOWERS
      metagrouping -creategrouping FLOWERS -attributes "petals,i"  "season,s"
    Optionally we can add a displayphrase that is used as a description or a display-name
      metagrouping -creategrouping FLOWERS -displayphrase "GROUP FLOWERS BY THEIR PETALS" \
          -attributes "petals,i" "season,s" \ 

    To delete the element grouping class named FLOWERS
      metagrouping -deletegrouping FLOWERS

    To check the grouping class FLOWERS
      metagrouping -checkgrouping FLOWERS

    To validate by pinging the egC-Container for the element grouping class FLOWERS
      metagrouping -egcping FLOWERS
    
    To list and validate all namedGClasses loaded by the egC-Container
      metagrouping -list
    
    To partially recreate, just the GRNAME/Enode.pm (INTERNAL USE ONLY)
      metagrouping -genenodes

    To create the element grouping class BAYLEVELGROUP:
# metagrouping -creategrouping BAYLEVELGROUP    \
  -displayphrase "GROUP FOR SENSING WATER LEVEL BETWEEN TWO BAYS"  \
  -attributes "point1,t" "point2,t" "point3,t"  \
  "mean123,c,__mean123 point1 point2 point3"    \
  "point4,t" "point5,t" "point6,t"              \
  "mean456,c,__mean456 point4 point5 point6"

    Specify an interval to return a discrete string when the attribute value fall
    within that interval:

# metagrouping -creategrouping BAYLEVELGROUP  \
  -attributes "point1,t" "point2,t" "point3,t"  \
  "mean123,c,__mean123 point1 point2 point3  /[0.0,4.99] 1-5feet/[5.0,6.5] 5-6feet/>6.5 above7feet/" \
  "point4,t" "point5,t" "point6,t" \
  "mean456,c,__mean456 point4 point5 point6 /[0.0,4.99] 1-5feet/[5.0,6.5] 5-6feet/>6.5 above7feet/"

    ASPL Element-Grouping-Class can be manipulated using the command: metagrouping
    Check your ASPL book on howto issue the same command from within the ASPL interpreter.

   The metagrouping program is distributed with ASPL
   Copyright © 2021-2025 Bassem W. Jamaleddine
   Copyright © 2025 Total Computing & Network Design, Inc.



An element grouping class is a loadable module (that describes the GADg attributes) and it is managed by ASPL egC-Container.

ASPL egC-Container manages all the element grouping classes.
You do not need to access the egC-Container directly as you will be using
the command metagrouping to create namedGClasses within the egC-Container



Once an element grouping class is created, you can validate its creation either by issuing the command metagrouping -egcping NAMEDGROUP or by pinging the containment (of the namedspace using it) at ASPL prompt by issuing the command egCwhoami.

Let's create the namedGClass EMPTYGROUP:

metagrouping -creategrouping EMPTYGROUP

Now the namedGClass EMPTYGROUP should exist and can be loaded by the egC-Container. The following command lists all namedGClasses in the egC-Container, then filter the ones containing the word EMPTYGROUP

metagrouping -listnamed | grep EMPTYGROUP

The following command lists all namedGClasses in the egC-Container and filter the ones not containing the word GROUP

metagrouping -listnamed | grep -v GROUP

A namedGClass can be any word and does not need to be ending in the word GROUP. The following command creates the workspace namedspace JUNK whose element grouping class is EMPTYGROUP, then ping the namedGClass EMPTYGROUP from within ASPL:

asplcmd "createworkspace JUNK EMPTYGROUP; egCwhoami"
    JUNK is created in memory and will not be saved

The following command creates the workspace namedspace JUNK whose element grouping class is EMPTYGROUP, save the namedspace JUNK, then exit ASPL:

asplcmd "createworkspace JUNK EMPTYGROUP; save"
    JUNK is created in memory then saved

The above command is equivalent to the following two commands

aspl -wsname JUNK -groupingclass EMPTYGROUP

aspl> bye
    the bye is same as save followed by quit



aspl JUNK
    start ASPL by loading the namedspace JUNK

aspl> egCwhoami
    ping the namedGClass in the egC-Container, namespace JUNK is bound to the namedGClass EMPTYGROUP



It is possible to ping the namedGClass EMPTYGROUP:

metagrouping -egcping EMPTYGROUP

If you delete the namedGClass EMPTYGROUP, then the namedspace JUNK will be dangling (since it cannot find its element grouping class).

metagrouping -deletegrouping EMPTYGROUP

asplmgrp -list `asplcmd ~wsp`| grep EMPTYGROUP
    show that JUNK is dangling

Try to start ASPL by loading the dangled namedspace JUNK

aspl JUNK
    this will fail with the message: THE ELEMENTS-GROUPING-CLASS "EMPTYGROUP" DOES NOT EXIST

Let's delete the namedspace JUNK

asplcmd "wrm JUNK"





full view

Image File

 -FG- Fig. J.1   [egCwhoami Pinging EMPTYGROUP in egC-Container][egCwhoami Pinging EMPTYGROUP in egC-Container]
ASPL © 2025 by Bassem W. Jamaleddine


If you deleted the namedGClass EMPTYGROUP, and removed the namedspace JUNK, then issued the command:

asplcmd "createworkspace JUNK EMPTYGROUP; egCwhoami"

then you will be pinging the default namedGClass ZEROGROUP since EMPTYGROUP does not exist and ASPL will fall back to the default ZEROGROUP (assuming the namedspace JUNK does not exist).

Let's reiterate the creation of the namedGClass EMPTYGROUP and see the operations in the display:

metagrouping -creategrouping EMPTYGROUP

metagrouping -creategrouping EMPTYGROUP

metagrouping -deletegrouping EMPTYGROUP

metagrouping -creategrouping EMPTYGROUP

metagrouping -list | grep EMPTYGROUP

asplcmd "createworkspace JUNK EMPTYGROUP; egCwhoami"

addstubGG EMPTYGROUP ggempty.pm

asplcmd "ll ~gg | grep ggempty"

asplcmd "ggls ggempty()"



The following display shows the operations as captured on a UNIX terminal:
viewme

 -TC- Display. J.1   [Creating the namedGClass EMPTYGROUP]
Creating the namedGClass EMPTYGROUP


Start ASPL to test with the namedspace JUNK whose element grouping class is EMPTYGROUP

aspl -wsname JUNK -groupingclass EMPTYGROUP

aspl>  a = ggempty()

aspl>  b = ggempty()

aspl>  em = {}
    create the variable em as an empty set

aspl>  v

aspl>  equal a b

aspl>  equal a em

aspl>  equal a b em

aspl>  gU a b em

aspl>  ans

aspl>  # a b em

aspl>  quit




Here we show some of the element grouping class that we used in this User Guide.
# metagrouping -creategrouping TIE_OSCILLATORS_AREA_VARY_TIME_GROUP -attributes \
   "fosc1,t" "fosc2,t"   "n1,t" "n2,t" "fx,i"  \
   "sumarea1,c,__sumarea1"  "sumarea2,c,__sumarea2" "sumarea,i"  \
   "mtime1,t" "mtime2,t"  "sumarea1tm,c,__sumarea1tm" "sumarea2tm,c,__sumarea2tm"  "sumareatm,i"


# metagrouping -creategrouping TIE_OSCILLATORS_AREA_VARY_TIME_ATIME_GROUP -attributes  \
   "fosc1,t" "fosc2,t"   "n1,t" "n2,t" "fx,i"  \
   "sumarea1,c,__sumarea1"  "sumarea2,c,__sumarea2" "sumarea,i" \
   "mtime1,t" "mtime2,t"   "atime1,t" "atime2,t"  \
   "sumarea1tm,c,__sumarea1tm" "sumarea2tm,c,__sumarea2tm"  "sumareatm,i"  \
   "sumarea1tma,c,__sumarea1tma" "sumarea2tma,c,__sumarea2tma"  "sumareatma,i"