diff --git a/index.html b/index.html index e6d8a42..fb7e47b 100644 --- a/index.html +++ b/index.html @@ -2407,13 +2407,13 @@ nframes = <Wave_read>.getnframes() If sample width is one, then the integer should be encoded unsigned.
  • For all other sizes, the integer should be encoded signed with little-endian byte order.
  • -

    Sample Values

    ┏━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━┯━━━━━━━━━━━━━┓
    +

    Sample Values

    ┏━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━┯━━━━━━━━━━━━━┓
     ┃ sampwidth │     min     │ zero │     max     ┃
     ┠───────────┼─────────────┼──────┼─────────────┨
    -┃     1     │           0 │  128 │         255 ┃
    -┃     2     │      -32768 │    0 │       32767 ┃
    -┃     3     │    -8388608 │    0 │     8388607 ┃
    -┃     4     │ -2147483648 │    0 │  2147483647 ┃
    +┃     10128255 ┃
    +┃     2-32768032767 ┃
    +┃     3-838860808388607 ┃
    +┃     4-214748364802147483647 ┃
     ┗━━━━━━━━━━━┷━━━━━━━━━━━━━┷━━━━━━┷━━━━━━━━━━━━━┛
     
    @@ -2662,19 +2662,19 @@ x 1 y 2 dtype: int64
    -
    ┏━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━┓
    -┃             │    'sum'    │   ['sum']   │ {'s': 'sum'}  ┃
    +
    ┏━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━┓
    +┃             │    'sum'    │   ['sum']   │ {'s': 'sum'}  ┃
     ┠─────────────┼─────────────┼─────────────┼───────────────┨
    -┃ sr.apply(…) │      3      │    sum 3    │      s  3     ┃
    +┃ sr.apply(…) │      3      │    sum 3    │      s  3     ┃
     ┃ sr.agg(…)   │             │             │               ┃
     ┗━━━━━━━━━━━━━┷━━━━━━━━━━━━━┷━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━┛
     
    -
    ┏━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━┓
    -┃             │    'rank'   │   ['rank']  │ {'r': 'rank'} ┃
    +
    ┏━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━┓
    +┃             │    'rank'   │   ['rank']  │ {'r': 'rank'} ┃
     ┠─────────────┼─────────────┼─────────────┼───────────────┨
     ┃ sr.apply(…) │             │      rank   │               ┃
    -┃ sr.agg(…)   │    x  1     │   x     1   │    r  x  1    ┃
    -┃ sr.trans(…) │    y  2     │   y     2   │       y  2    ┃
    +┃ sr.agg(…)   │    x  1     │   x     1   │    r  x  1    ┃
    +┃ sr.trans(…) │    y  2     │   y     2   │       y  2    ┃
     ┗━━━━━━━━━━━━━┷━━━━━━━━━━━━━┷━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━┛
     

    DataFrame

    Table with labeled rows and columns.

    >>> DataFrame([[1, 2], [3, 4]], index=['a', 'b'], columns=['x', 'y'])
    @@ -2714,34 +2714,34 @@ b  4  5
     c  6  7
     
    -
    ┏━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━┯━━━━━━━━━━━━┯━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━━┓
    -┃        how/join        │    'outer'    │   'inner'  │   'left'   │       description        ┃
    +
    ┏━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━┯━━━━━━━━━━━━┯━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━━┓
    +┃        how/join        │    'outer''inner''left'   │       description        ┃
     ┠────────────────────────┼───────────────┼────────────┼────────────┼──────────────────────────┨
    -┃ l.merge(r, on='y',     │    x   y   z  │ x   y   z  │ x   y   z  │ Joins/merges on column.  ┃
    -┃            how=…)      │ 0  1   2   .  │ 3   4   5  │ 1   2   .  │ Also accepts left_on and ┃
    -┃                        │ 1  3   4   5  │            │ 3   4   5  │ right_on parameters.     ┃
    -┃                        │ 2  .   6   7  │            │            │ Uses 'inner' by default. ┃
    +┃ l.merge(r, on='y',     │    x   y   z  │ x   y   z  │ x   y   z  │ Joins/merges on column.  ┃
    +┃            how=…)      │ 0  1   2   .  │ 3   4   51   2   .  │ Also accepts left_on and ┃
    +┃                        │ 1  3   4   5  │            │ 3   4   5  │ right_on parameters.     ┃
    +┃                        │ 2  .   6   7  │            │            │ Uses 'inner' by default. ┃
     ┠────────────────────────┼───────────────┼────────────┼────────────┼──────────────────────────┨
    -┃ l.join(r, lsuffix='l', │    x yl yr  z │            │ x yl yr  z │ Joins/merges on row_keys.┃
    -┃           rsuffix='r', │ a  1  2  .  . │ x yl yr  z │ 1  2  .  . │ Uses 'left' by default.  ┃
    -┃           how=…)       │ b  3  4  4  5 │ 3  4  4  5 │ 3  4  4  5 │                          ┃
    -┃                        │ c  .  .  6  7 │            │            │                          ┃
    +┃ l.join(r, lsuffix='l', │    x yl yr  z │            │ x yl yr  z │ Joins/merges on row_keys.┃
    +┃           rsuffix='r', │ a  1  2  .  . │ x yl yr  z │ 1  2  .  . │ Uses 'left' by default.  ┃
    +┃           how=…)       │ b  3  4  4  53  4  4  53  4  4  5 │                          ┃
    +┃                        │ c  .  .  6  7 │            │            │                          ┃
     ┠────────────────────────┼───────────────┼────────────┼────────────┼──────────────────────────┨
     ┃ pd.concat([l, r],      │    x   y   z  │     y      │            │ Adds rows at the bottom. ┃
    -┃           axis=0,      │ a  1   2   .  │     2      │            │ Uses 'outer' by default. ┃
    -┃           join=…)      │ b  3   4   .  │     4      │            │ By default works the     ┃
    -┃                        │ b  .   4   5  │     4      │            │ same as `l.append(r)`.   ┃
    -┃                        │ c  .   6   7  │     6      │            │                          ┃
    +┃           axis=0,      │ a  1   2   .  │     2      │            │ Uses 'outer' by default. ┃
    +┃           join=…)      │ b  3   4   .  │     4      │            │ By default works the     ┃
    +┃                        │ b  .   4   54      │            │ same as `l.append(r)`.   ┃
    +┃                        │ c  .   6   76      │            │                          ┃
     ┠────────────────────────┼───────────────┼────────────┼────────────┼──────────────────────────┨
     ┃ pd.concat([l, r],      │    x  y  y  z │            │            │ Adds columns at the      ┃
    -┃           axis=1,      │ a  1  2  .  . │ x  y  y  z │            │ right end.               ┃
    -┃           join=…)      │ b  3  4  4  5 │ 3  4  4  5 │            │ Uses 'outer' by default. ┃
    -┃                        │ c  .  .  6  7 │            │            │                          ┃
    +┃           axis=1,      │ a  1  2  .  . │ x  y  y  z │            │ right end.               ┃
    +┃           join=…)      │ b  3  4  4  53  4  4  5 │            │ Uses 'outer' by default. ┃
    +┃                        │ c  .  .  6  7 │            │            │                          ┃
     ┠────────────────────────┼───────────────┼────────────┼────────────┼──────────────────────────┨
    -┃ l.combine_first(r)     │    x   y   z  │            │            │ Adds missing rows and    ┃
    -┃                        │ a  1   2   .  │            │            │ columns.                 ┃
    -┃                        │ b  3   4   5  │            │            │                          ┃
    -┃                        │ c  .   6   7  │            │            │                          ┃
    +┃ l.combine_first(r)     │    x   y   z  │            │            │ Adds missing rows and    ┃
    +┃                        │ a  1   2   .  │            │            │ columns.                 ┃
    +┃                        │ b  3   4   5  │            │            │                          ┃
    +┃                        │ c  .   6   7  │            │            │                          ┃
     ┗━━━━━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━┷━━━━━━━━━━━━┷━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━━┛
     

    Aggregate, Transform, Map:

    <Sr> = <DF>.sum/max/mean/idxmax/all()         # Or: <DF>.apply/agg/transform(<agg_func>)
    @@ -2757,21 +2757,21 @@ c  6  7
     a  1  2
     b  3  4
     
    -
    ┏━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━┓
    -┃             │    'sum'    │   ['sum']   │ {'x': 'sum'}  ┃
    +
    ┏━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━┓
    +┃             │    'sum'    │   ['sum']   │ {'x': 'sum'}  ┃
     ┠─────────────┼─────────────┼─────────────┼───────────────┨
     ┃ df.apply(…) │             │       x y   │               ┃
    -┃ df.agg(…)   │    x  4     │   sum 4 6   │     x  4      ┃
    -┃             │    y  6     │             │               ┃
    +┃ df.agg(…)   │    x  4     │   sum 4 6   │     x  4      ┃
    +┃             │    y  6     │             │               ┃
     ┗━━━━━━━━━━━━━┷━━━━━━━━━━━━━┷━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━┛
     
    -
    ┏━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━┓
    -┃             │    'rank'   │   ['rank']  │ {'x': 'rank'} ┃
    +
    ┏━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━┓
    +┃             │    'rank'   │   ['rank']  │ {'x': 'rank'} ┃
     ┠─────────────┼─────────────┼─────────────┼───────────────┨
     ┃ df.apply(…) │      x  y   │      x    y │        x      ┃
    -┃ df.agg(…)   │   a  1  1   │   rank rank │     a  1      ┃
    -┃ df.trans(…) │   b  2  2   │ a    1    1 │     b  2      ┃
    -┃             │             │ b    2    2 │               ┃
    +┃ df.agg(…)   │   a  1  1   │   rank rank │     a  1      ┃
    +┃ df.trans(…) │   b  2  2   │ a    1    1 │     b  2      ┃
    +┃             │             │ b    2    2 │               ┃
     ┗━━━━━━━━━━━━━┷━━━━━━━━━━━━━┷━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━┛
     

    Encode, Decode:

    <DF> = pd.read_json/html('<str/path/url>')
    @@ -2810,19 +2810,19 @@ c  7  8
     6: b  4  5  6
        c  7  8  6
     
    -
    ┏━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━┓
    -┃             │    'sum'    │    'rank'   │   ['rank']  │ {'x': 'rank'} ┃
    +
    ┏━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━┓
    +┃             │    'sum''rank'   │   ['rank']  │ {'x': 'rank'} ┃
     ┠─────────────┼─────────────┼─────────────┼─────────────┼───────────────┨
     ┃ gb.agg(…)   │      x   y  │      x  y   │      x    y │        x      ┃
    -┃             │  z          │   a  1  1   │   rank rank │     a  1      ┃
    -┃             │  3   1   2  │   b  1  1   │ a    1    1 │     b  1      ┃
    -┃             │  6  11  13  │   c  2  2   │ b    1    1 │     c  2      ┃
    -┃             │             │             │ c    2    2 │               ┃
    +┃             │  z          │   a  1  1   │   rank rank │     a  1      ┃
    +┃             │  3   1   2  │   b  1  1   │ a    1    1 │     b  1      ┃
    +┃             │  6  11  13  │   c  2  2   │ b    1    1 │     c  2      ┃
    +┃             │             │             │ c    2    2 │               ┃
     ┠─────────────┼─────────────┼─────────────┼─────────────┼───────────────┨
     ┃ gb.trans(…) │      x   y  │      x  y   │             │               ┃
    -┃             │  a   1   2  │   a  1  1   │             │               ┃
    -┃             │  b  11  13  │   b  1  1   │             │               ┃
    -┃             │  c  11  13  │   c  1  1   │             │               ┃
    +┃             │  a   1   2  │   a  1  1   │             │               ┃
    +┃             │  b  11  13  │   b  1  1   │             │               ┃
    +┃             │  c  11  13  │   c  1  1   │             │               ┃
     ┗━━━━━━━━━━━━━┷━━━━━━━━━━━━━┷━━━━━━━━━━━━━┷━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━┛
     

    Rolling

    Object for rolling window calculations.

    <R_Sr/R_DF/R_GB> = <Sr/DF/GB>.rolling(window_size)  # Also: `min_periods=None, center=False`.
    diff --git a/parse.js b/parse.js
    index 1ae5bfd..e0a0550 100755
    --- a/parse.js
    +++ b/parse.js
    @@ -67,45 +67,11 @@ const DATETIME =
       '\'<DT> = resolve_imaginary(<DT>)\'';
     
     const DIAGRAM_1_A =
    -  '+-------------+-------------+\n' +
    -  '|   Classes   | Metaclasses |\n' +
    -  '+-------------+-------------|\n' +
    -  '|   MyClass --> MyMetaClass |\n';
    -
    -const DIAGRAM_1_B =
    -  '┏━━━━━━━━━━━━━┯━━━━━━━━━━━━━┓\n' +
    -  '┃   Classes   │ Metaclasses ┃\n' +
    -  '┠─────────────┼─────────────┨\n' +
    -  '┃   MyClass ──→ MyMetaClass ┃\n' +
    -  '┃             │     ↓       ┃\n' +
    -  '┃    object ─────→ type ←╮  ┃\n' +
    -  '┃             │     ↑ ╰──╯  ┃\n' +
    -  '┃     str ──────────╯       ┃\n' +
    -  '┗━━━━━━━━━━━━━┷━━━━━━━━━━━━━┛\n';
    -
    -const DIAGRAM_2_A =
    -  '+-------------+-------------+\n' +
    -  '|   Classes   | Metaclasses |\n' +
    -  '+-------------+-------------|\n' +
    -  '|   MyClass   | MyMetaClass |\n';
    -
    -const DIAGRAM_2_B =
    -  '┏━━━━━━━━━━━━━┯━━━━━━━━━━━━━┓\n' +
    -  '┃   Classes   │ Metaclasses ┃\n' +
    -  '┠─────────────┼─────────────┨\n' +
    -  '┃   MyClass   │ MyMetaClass ┃\n' +
    -  '┃      ↓      │     ↓       ┃\n' +
    -  '┃    object ←───── type     ┃\n' +
    -  '┃      ↑      │             ┃\n' +
    -  '┃     str     │             ┃\n' +
    -  '┗━━━━━━━━━━━━━┷━━━━━━━━━━━━━┛\n';
    -
    -const DIAGRAM_3_A =
       '+------------------+------------+------------+------------+\n' +
       '|                  |  Sequence  | Collection |  Iterable  |\n' +
       '+------------------+------------+------------+------------+\n';
     
    -const DIAGRAM_3_B =
    +const DIAGRAM_1_B =
       '┏━━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━┯━━━━━━━━━━━━┯━━━━━━━━━━━━┓\n' +
       '┃                  │  Sequence  │ Collection │  Iterable  ┃\n' +
       '┠──────────────────┼────────────┼────────────┼────────────┨\n' +
    @@ -114,12 +80,12 @@ const DIAGRAM_3_B =
       '┃ iter             │            │            │     ✓      ┃\n' +
       '┗━━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━┷━━━━━━━━━━━━┷━━━━━━━━━━━━┛\n';
     
    -const DIAGRAM_4_A =
    +const DIAGRAM_2_A =
       '+--------------------+----------+----------+----------+----------+----------+\n' +
       '|                    | Integral | Rational |   Real   | Complex  |  Number  |\n' +
       '+--------------------+----------+----------+----------+----------+----------+\n';
     
    -const DIAGRAM_4_B =
    +const DIAGRAM_2_B =
       '┏━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━━━┯━━━━━━━━━━┯━━━━━━━━━━┯━━━━━━━━━━┯━━━━━━━━━━┓\n' +
       '┃                    │ Integral │ Rational │   Real   │ Complex  │  Number  ┃\n' +
       '┠────────────────────┼──────────┼──────────┼──────────┼──────────┼──────────┨\n' +
    @@ -130,12 +96,26 @@ const DIAGRAM_4_B =
       '┃ decimal.Decimal    │          │          │          │          │    ✓     ┃\n' +
       '┗━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━━━┷━━━━━━━━━━┷━━━━━━━━━━┷━━━━━━━━━━┷━━━━━━━━━━┛\n';
     
    -const DIAGRAM_5_A =
    +const DIAGRAM_3_A =
    +  '+---------------+----------+----------+----------+----------+----------+\n';
    +
    +const DIAGRAM_3_B =
    +  '┏━━━━━━━━━━━━━━━┯━━━━━━━━━━┯━━━━━━━━━━┯━━━━━━━━━━┯━━━━━━━━━━┯━━━━━━━━━━┓\n' +
    +  '┃               │ [ !#$%…] │ [a-zA-Z] │  [¼½¾]   │  [²³¹]   │  [0-9]   ┃\n' +
    +  '┠───────────────┼──────────┼──────────┼──────────┼──────────┼──────────┨\n' +
    +  '┃ isprintable() │    ✓     │    ✓     │    ✓     │    ✓     │    ✓     ┃\n' +
    +  '┃ isalnum()     │          │    ✓     │    ✓     │    ✓     │    ✓     ┃\n' +
    +  '┃ isnumeric()   │          │          │    ✓     │    ✓     │    ✓     ┃\n' +
    +  '┃ isdigit()     │          │          │          │    ✓     │    ✓     ┃\n' +
    +  '┃ isdecimal()   │          │          │          │          │    ✓     ┃\n' +
    +  '┗━━━━━━━━━━━━━━━┷━━━━━━━━━━┷━━━━━━━━━━┷━━━━━━━━━━┷━━━━━━━━━━┷━━━━━━━━━━┛\n';
    +
    +const DIAGRAM_4_A =
       "+---------------+-----------------+-----------------+-----------------+-----------------+\n" +
       "|               |    {}    |   {:f}   |   {:e}   |   {:%}   |\n" +
       "+---------------+-----------------+-----------------+-----------------+-----------------+\n";
     
    -const DIAGRAM_5_B =
    +const DIAGRAM_4_B =
       "┏━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━┓\n" +
       "┃               │    {<float>}    │   {<float>:f}   │   {<float>:e}   │   {<float>:%}   ┃\n" +
       "┠───────────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┨\n" +
    @@ -149,12 +129,12 @@ const DIAGRAM_5_B =
       "┃ 567.89        │  '567.89'       │   '567.890000'  │  '5.678900e+02' │ '56789.000000%' ┃\n" +
       "┗━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━┛\n";
     
    -const DIAGRAM_6_A =
    +const DIAGRAM_5_A =
       "+---------------+-----------------+-----------------+-----------------+-----------------+\n" +
       "|               |   {:.2}  |  {:.2f}  |  {:.2e}  |  {:.2%}  |\n" +
       "+---------------+-----------------+-----------------+-----------------+-----------------+\n";
     
    -const DIAGRAM_6_B =
    +const DIAGRAM_5_B =
       "┏━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━┓\n" +
       "┃               │   {<float>:.2}  │  {<float>:.2f}  │  {<float>:.2e}  │  {<float>:.2%}  ┃\n" +
       "┠───────────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┨\n" +
    @@ -168,12 +148,12 @@ const DIAGRAM_6_B =
       "┃ 567.89        │    '5.7e+02'    │     '567.89'    │    '5.68e+02'   │   '56789.00%'   ┃\n" +
       "┗━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━┛\n";
     
    -const DIAGRAM_7_A =
    +const DIAGRAM_6_A =
       '+------------+------------+------------+------------+--------------+\n' +
       '|            |  Iterable  | Collection |  Sequence  | abc.Sequence |\n' +
       '+------------+------------+------------+------------+--------------+\n';
     
    -const DIAGRAM_7_B =
    +const DIAGRAM_6_B =
       '┏━━━━━━━━━━━━┯━━━━━━━━━━━━┯━━━━━━━━━━━━┯━━━━━━━━━━━━┯━━━━━━━━━━━━━━┓\n' +
       '┃            │  Iterable  │ Collection │  Sequence  │ abc.Sequence ┃\n' +
       '┠────────────┼────────────┼────────────┼────────────┼──────────────┨\n' +
    @@ -186,11 +166,11 @@ const DIAGRAM_7_B =
       '┃ count()    │            │            │            │      ✓       ┃\n' +
       '┗━━━━━━━━━━━━┷━━━━━━━━━━━━┷━━━━━━━━━━━━┷━━━━━━━━━━━━┷━━━━━━━━━━━━━━┛\n';
     
    -const DIAGRAM_8_A =
    +const DIAGRAM_7_A =
       'BaseException\n' +
       ' +-- SystemExit';
     
    -const DIAGRAM_8_B =
    +const DIAGRAM_7_B =
       "BaseException\n" +
       " ├── SystemExit                   # Raised by the sys.exit() function.\n" +
       " ├── KeyboardInterrupt            # Raised when the user hits the interrupt key (ctrl-c).\n" +
    @@ -212,6 +192,21 @@ const DIAGRAM_8_B =
       "      └── ValueError              # When an argument is of right type but inappropriate value.\n" +
       "           └── UnicodeError       # Raised when encoding/decoding strings to/from bytes fails.\n";
     
    +const DIAGRAM_8_A =
    +  '+-----------+------------+------------+------------+\n' +
    +  '|           |    list    |    dict    |    set     |\n' +
    +  '+-----------+------------+------------+------------+\n';
    +
    +const DIAGRAM_8_B =
    +  '┏━━━━━━━━━━━┯━━━━━━━━━━━━┯━━━━━━━━━━━━┯━━━━━━━━━━━━┓\n' +
    +  '┃           │    list    │    dict    │    set     ┃\n' +
    +  '┠───────────┼────────────┼────────────┼────────────┨\n' +
    +  '┃ getitem() │ IndexError │  KeyError  │            ┃\n' +
    +  '┃ pop()     │ IndexError │  KeyError  │  KeyError  ┃\n' +
    +  '┃ remove()  │ ValueError │            │  KeyError  ┃\n' +
    +  '┃ index()   │ ValueError │            │            ┃\n' +
    +  '┗━━━━━━━━━━━┷━━━━━━━━━━━━┷━━━━━━━━━━━━┷━━━━━━━━━━━━┛\n';
    +
     const DIAGRAM_9_A =
       '+------------------+--------------+--------------+--------------+\n' +
       '|                  |     excel    |   excel-tab  |     unix     |\n' +
    @@ -231,26 +226,45 @@ const DIAGRAM_9_B =
       "┗━━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━┛\n";
     
     const DIAGRAM_10_A =
    -  '+-----------+------------+------------+------------+\n' +
    -  '|           |    list    |    dict    |    set     |\n' +
    -  '+-----------+------------+------------+------------+\n';
    +  '+-------------+-------------+\n' +
    +  '|   Classes   | Metaclasses |\n' +
    +  '+-------------+-------------|\n' +
    +  '|   MyClass --> MyMetaClass |\n';
     
     const DIAGRAM_10_B =
    -  '┏━━━━━━━━━━━┯━━━━━━━━━━━━┯━━━━━━━━━━━━┯━━━━━━━━━━━━┓\n' +
    -  '┃           │    list    │    dict    │    set     ┃\n' +
    -  '┠───────────┼────────────┼────────────┼────────────┨\n' +
    -  '┃ getitem() │ IndexError │  KeyError  │            ┃\n' +
    -  '┃ pop()     │ IndexError │  KeyError  │  KeyError  ┃\n' +
    -  '┃ remove()  │ ValueError │            │  KeyError  ┃\n' +
    -  '┃ index()   │ ValueError │            │            ┃\n' +
    -  '┗━━━━━━━━━━━┷━━━━━━━━━━━━┷━━━━━━━━━━━━┷━━━━━━━━━━━━┛\n';
    +  '┏━━━━━━━━━━━━━┯━━━━━━━━━━━━━┓\n' +
    +  '┃   Classes   │ Metaclasses ┃\n' +
    +  '┠─────────────┼─────────────┨\n' +
    +  '┃   MyClass ──→ MyMetaClass ┃\n' +
    +  '┃             │     ↓       ┃\n' +
    +  '┃    object ─────→ type ←╮  ┃\n' +
    +  '┃             │     ↑ ╰──╯  ┃\n' +
    +  '┃     str ──────────╯       ┃\n' +
    +  '┗━━━━━━━━━━━━━┷━━━━━━━━━━━━━┛\n';
     
     const DIAGRAM_11_A =
    +  '+-------------+-------------+\n' +
    +  '|   Classes   | Metaclasses |\n' +
    +  '+-------------+-------------|\n' +
    +  '|   MyClass   | MyMetaClass |\n';
    +
    +const DIAGRAM_11_B =
    +  '┏━━━━━━━━━━━━━┯━━━━━━━━━━━━━┓\n' +
    +  '┃   Classes   │ Metaclasses ┃\n' +
    +  '┠─────────────┼─────────────┨\n' +
    +  '┃   MyClass   │ MyMetaClass ┃\n' +
    +  '┃      ↓      │     ↓       ┃\n' +
    +  '┃    object ←───── type     ┃\n' +
    +  '┃      ↑      │             ┃\n' +
    +  '┃     str     │             ┃\n' +
    +  '┗━━━━━━━━━━━━━┷━━━━━━━━━━━━━┛\n';
    +
    +const DIAGRAM_12_A =
       '+-----------+-------------+------+-------------+\n' +
       '| sampwidth |     min     | zero |     max     |\n' +
       '+-----------+-------------+------+-------------+\n';
     
    -const DIAGRAM_11_B =
    +const DIAGRAM_12_B =
       '┏━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━┯━━━━━━━━━━━━━┓\n' +
       '┃ sampwidth │     min     │ zero │     max     ┃\n' +
       '┠───────────┼─────────────┼──────┼─────────────┨\n' +
    @@ -260,20 +274,6 @@ const DIAGRAM_11_B =
       '┃     4     │ -2147483648 │    0 │  2147483647 ┃\n' +
       '┗━━━━━━━━━━━┷━━━━━━━━━━━━━┷━━━━━━┷━━━━━━━━━━━━━┛\n';
     
    -const DIAGRAM_12_A =
    -  '+---------------+----------+----------+----------+----------+----------+\n';
    -
    -const DIAGRAM_12_B =
    -  '┏━━━━━━━━━━━━━━━┯━━━━━━━━━━┯━━━━━━━━━━┯━━━━━━━━━━┯━━━━━━━━━━┯━━━━━━━━━━┓\n' +
    -  '┃               │ [ !#$%…] │ [a-zA-Z] │  [¼½¾]   │  [²³¹]   │  [0-9]   ┃\n' +
    -  '┠───────────────┼──────────┼──────────┼──────────┼──────────┼──────────┨\n' +
    -  '┃ isprintable() │    ✓     │    ✓     │    ✓     │    ✓     │    ✓     ┃\n' +
    -  '┃ isalnum()     │          │    ✓     │    ✓     │    ✓     │    ✓     ┃\n' +
    -  '┃ isnumeric()   │          │          │    ✓     │    ✓     │    ✓     ┃\n' +
    -  '┃ isdigit()     │          │          │          │    ✓     │    ✓     ┃\n' +
    -  '┃ isdecimal()   │          │          │          │          │    ✓     ┃\n' +
    -  '┗━━━━━━━━━━━━━━━┷━━━━━━━━━━┷━━━━━━━━━━┷━━━━━━━━━━┷━━━━━━━━━━┷━━━━━━━━━━┛\n';
    -
     const DIAGRAM_13_A =
       '| sr.apply(…) |      3      |    sum 3    |      s  3     |';
     
    @@ -297,10 +297,44 @@ const DIAGRAM_14_B =
       "┃ sr.trans(…) │    y  2     │   y     2   │       y  2    ┃\n" +
       "┗━━━━━━━━━━━━━┷━━━━━━━━━━━━━┷━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━┛\n";
     
    -const DIAGRAM_15_A =
    -  '| df.apply(…) |             |       x y   |               |';
    +const DIAGRAM_15_A = 
    +  '+------------------------+---------------+------------+------------+--------------------------+';
     
     const DIAGRAM_15_B =
    +  "┏━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━┯━━━━━━━━━━━━┯━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n" +
    +  "┃        how/join        │    'outer'    │   'inner'  │   'left'   │       description        ┃\n" +
    +  "┠────────────────────────┼───────────────┼────────────┼────────────┼──────────────────────────┨\n" +
    +  "┃ l.merge(r, on='y',     │    x   y   z  │ x   y   z  │ x   y   z  │ Joins/merges on column.  ┃\n" +
    +  "┃            how=…)      │ 0  1   2   .  │ 3   4   5  │ 1   2   .  │ Also accepts left_on and ┃\n" +
    +  "┃                        │ 1  3   4   5  │            │ 3   4   5  │ right_on parameters.     ┃\n" +
    +  "┃                        │ 2  .   6   7  │            │            │ Uses 'inner' by default. ┃\n" +
    +  "┠────────────────────────┼───────────────┼────────────┼────────────┼──────────────────────────┨\n" +
    +  "┃ l.join(r, lsuffix='l', │    x yl yr  z │            │ x yl yr  z │ Joins/merges on row_keys.┃\n" +
    +  "┃           rsuffix='r', │ a  1  2  .  . │ x yl yr  z │ 1  2  .  . │ Uses 'left' by default.  ┃\n" +
    +  "┃           how=…)       │ b  3  4  4  5 │ 3  4  4  5 │ 3  4  4  5 │                          ┃\n" +
    +  "┃                        │ c  .  .  6  7 │            │            │                          ┃\n" +
    +  "┠────────────────────────┼───────────────┼────────────┼────────────┼──────────────────────────┨\n" +
    +  "┃ pd.concat([l, r],      │    x   y   z  │     y      │            │ Adds rows at the bottom. ┃\n" +
    +  "┃           axis=0,      │ a  1   2   .  │     2      │            │ Uses 'outer' by default. ┃\n" +
    +  "┃           join=…)      │ b  3   4   .  │     4      │            │ By default works the     ┃\n" +
    +  "┃                        │ b  .   4   5  │     4      │            │ same as `l.append(r)`.   ┃\n" +
    +  "┃                        │ c  .   6   7  │     6      │            │                          ┃\n" +
    +  "┠────────────────────────┼───────────────┼────────────┼────────────┼──────────────────────────┨\n" +
    +  "┃ pd.concat([l, r],      │    x  y  y  z │            │            │ Adds columns at the      ┃\n" +
    +  "┃           axis=1,      │ a  1  2  .  . │ x  y  y  z │            │ right end.               ┃\n" +
    +  "┃           join=…)      │ b  3  4  4  5 │ 3  4  4  5 │            │ Uses 'outer' by default. ┃\n" +
    +  "┃                        │ c  .  .  6  7 │            │            │                          ┃\n" +
    +  "┠────────────────────────┼───────────────┼────────────┼────────────┼──────────────────────────┨\n" +
    +  "┃ l.combine_first(r)     │    x   y   z  │            │            │ Adds missing rows and    ┃\n" +
    +  "┃                        │ a  1   2   .  │            │            │ columns.                 ┃\n" +
    +  "┃                        │ b  3   4   5  │            │            │                          ┃\n" +
    +  "┃                        │ c  .   6   7  │            │            │                          ┃\n" +
    +  "┗━━━━━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━┷━━━━━━━━━━━━┷━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n";
    +
    +const DIAGRAM_16_A =
    +  '| df.apply(…) |             |       x y   |               |';
    +
    +const DIAGRAM_16_B =
       "┏━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━┓\n" +
       "┃             │    'sum'    │   ['sum']   │ {'x': 'sum'}  ┃\n" +
       "┠─────────────┼─────────────┼─────────────┼───────────────┨\n" +
    @@ -309,10 +343,10 @@ const DIAGRAM_15_B =
       "┃             │    y  6     │             │               ┃\n" +
       "┗━━━━━━━━━━━━━┷━━━━━━━━━━━━━┷━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━┛\n";
     
    -const DIAGRAM_16_A =
    +const DIAGRAM_17_A =
       '| df.apply(…) |      x  y   |      x    y |        x      |';
     
    -const DIAGRAM_16_B =
    +const DIAGRAM_17_B =
       "┏━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━┓\n" +
       "┃             │    'rank'   │   ['rank']  │ {'x': 'rank'} ┃\n" +
       "┠─────────────┼─────────────┼─────────────┼───────────────┨\n" +
    @@ -322,10 +356,10 @@ const DIAGRAM_16_B =
       "┃             │             │ b    2    2 │               ┃\n" +
       "┗━━━━━━━━━━━━━┷━━━━━━━━━━━━━┷━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━┛\n";
     
    -const DIAGRAM_17_A = 
    +const DIAGRAM_18_A = 
       '| gb.agg(…)   |      x   y  |      x  y   |      x    y |        x      |';
     
    -const DIAGRAM_17_B =
    +const DIAGRAM_18_B =
       "┏━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━┓\n" +
       "┃             │    'sum'    │    'rank'   │   ['rank']  │ {'x': 'rank'} ┃\n" +
       "┠─────────────┼─────────────┼─────────────┼─────────────┼───────────────┨\n" +
    @@ -341,40 +375,6 @@ const DIAGRAM_17_B =
       "┃             │  c  11  13  │   c  1  1   │             │               ┃\n" +
       "┗━━━━━━━━━━━━━┷━━━━━━━━━━━━━┷━━━━━━━━━━━━━┷━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━┛\n";
     
    -const DIAGRAM_18_A = 
    -  '+------------------------+---------------+------------+------------+--------------------------+';
    -
    -const DIAGRAM_18_B =
    -  "┏━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━┯━━━━━━━━━━━━┯━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n" +
    -  "┃        how/join        │    'outer'    │   'inner'  │   'left'   │       description        ┃\n" +
    -  "┠────────────────────────┼───────────────┼────────────┼────────────┼──────────────────────────┨\n" +
    -  "┃ l.merge(r, on='y',     │    x   y   z  │ x   y   z  │ x   y   z  │ Joins/merges on column.  ┃\n" +
    -  "┃            how=…)      │ 0  1   2   .  │ 3   4   5  │ 1   2   .  │ Also accepts left_on and ┃\n" +
    -  "┃                        │ 1  3   4   5  │            │ 3   4   5  │ right_on parameters.     ┃\n" +
    -  "┃                        │ 2  .   6   7  │            │            │ Uses 'inner' by default. ┃\n" +
    -  "┠────────────────────────┼───────────────┼────────────┼────────────┼──────────────────────────┨\n" +
    -  "┃ l.join(r, lsuffix='l', │    x yl yr  z │            │ x yl yr  z │ Joins/merges on row_keys.┃\n" +
    -  "┃           rsuffix='r', │ a  1  2  .  . │ x yl yr  z │ 1  2  .  . │ Uses 'left' by default.  ┃\n" +
    -  "┃           how=…)       │ b  3  4  4  5 │ 3  4  4  5 │ 3  4  4  5 │                          ┃\n" +
    -  "┃                        │ c  .  .  6  7 │            │            │                          ┃\n" +
    -  "┠────────────────────────┼───────────────┼────────────┼────────────┼──────────────────────────┨\n" +
    -  "┃ pd.concat([l, r],      │    x   y   z  │     y      │            │ Adds rows at the bottom. ┃\n" +
    -  "┃           axis=0,      │ a  1   2   .  │     2      │            │ Uses 'outer' by default. ┃\n" +
    -  "┃           join=…)      │ b  3   4   .  │     4      │            │ By default works the     ┃\n" +
    -  "┃                        │ b  .   4   5  │     4      │            │ same as `l.append(r)`.   ┃\n" +
    -  "┃                        │ c  .   6   7  │     6      │            │                          ┃\n" +
    -  "┠────────────────────────┼───────────────┼────────────┼────────────┼──────────────────────────┨\n" +
    -  "┃ pd.concat([l, r],      │    x  y  y  z │            │            │ Adds columns at the      ┃\n" +
    -  "┃           axis=1,      │ a  1  2  .  . │ x  y  y  z │            │ right end.               ┃\n" +
    -  "┃           join=…)      │ b  3  4  4  5 │ 3  4  4  5 │            │ Uses 'outer' by default. ┃\n" +
    -  "┃                        │ c  .  .  6  7 │            │            │                          ┃\n" +
    -  "┠────────────────────────┼───────────────┼────────────┼────────────┼──────────────────────────┨\n" +
    -  "┃ l.combine_first(r)     │    x   y   z  │            │            │ Adds missing rows and    ┃\n" +
    -  "┃                        │ a  1   2   .  │            │            │ columns.                 ┃\n" +
    -  "┃                        │ b  3   4   5  │            │            │                          ┃\n" +
    -  "┃                        │ c  .   6   7  │            │            │                          ┃\n" +
    -  "┗━━━━━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━┷━━━━━━━━━━━━┷━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n";
    -
     
     function main() {
       const html = getMd();
    @@ -406,9 +406,9 @@ function modifyPage() {
       addToc();
       insertLinks();
       unindentBanner();
    +  updateDiagrams();
       highlightCode();
       removePlotImages();
    -  updateDiagrams();
     }
     
     function removeOrigToc() {
    @@ -439,6 +439,27 @@ function unindentBanner() {
       downloadPraragrapth.addClass('banner');
     }
     
    +function updateDiagrams() {
    +  $(`code:contains(${DIAGRAM_1_A})`).html(DIAGRAM_1_B);
    +  $(`code:contains(${DIAGRAM_2_A})`).html(DIAGRAM_2_B);
    +  $(`code:contains(${DIAGRAM_3_A})`).html(DIAGRAM_3_B);
    +  $(`code:contains(${DIAGRAM_4_A})`).html(DIAGRAM_4_B);
    +  $(`code:contains(${DIAGRAM_5_A})`).html(DIAGRAM_5_B);
    +  $(`code:contains(${DIAGRAM_6_A})`).html(DIAGRAM_6_B);
    +  $(`code:contains(${DIAGRAM_7_A})`).html(DIAGRAM_7_B);
    +  $(`code:contains(${DIAGRAM_8_A})`).html(DIAGRAM_8_B);
    +  $(`code:contains(${DIAGRAM_9_A})`).html(DIAGRAM_9_B);
    +  $(`code:contains(${DIAGRAM_10_A})`).html(DIAGRAM_10_B);
    +  $(`code:contains(${DIAGRAM_11_A})`).html(DIAGRAM_11_B);
    +  $(`code:contains(${DIAGRAM_12_A})`).html(DIAGRAM_12_B).removeClass("text").removeClass("language-text").addClass("python");
    +  $(`code:contains(${DIAGRAM_13_A})`).html(DIAGRAM_13_B).removeClass("text").removeClass("language-text").addClass("python");
    +  $(`code:contains(${DIAGRAM_14_A})`).html(DIAGRAM_14_B).removeClass("text").removeClass("language-text").addClass("python");
    +  $(`code:contains(${DIAGRAM_15_A})`).html(DIAGRAM_15_B).removeClass("text").removeClass("language-text").addClass("python");
    +  $(`code:contains(${DIAGRAM_16_A})`).html(DIAGRAM_16_B).removeClass("text").removeClass("language-text").addClass("python");
    +  $(`code:contains(${DIAGRAM_17_A})`).html(DIAGRAM_17_B).removeClass("text").removeClass("language-text").addClass("python");
    +  $(`code:contains(${DIAGRAM_18_A})`).html(DIAGRAM_18_B).removeClass("text").removeClass("language-text").addClass("python");
    +}
    +
     function highlightCode() {
       setApaches(['', '', '
    ', '', '', '']); $('code').not('.python').not('.text').not('.bash').not('.apache').addClass('python'); @@ -518,27 +539,6 @@ function removePlotImages() { $('img[alt="Covid Cases"]').remove(); } -function updateDiagrams() { - $(`code:contains(${DIAGRAM_1_A})`).html(DIAGRAM_1_B); - $(`code:contains(${DIAGRAM_2_A})`).html(DIAGRAM_2_B); - $(`code:contains(${DIAGRAM_3_A})`).html(DIAGRAM_3_B); - $(`code:contains(${DIAGRAM_4_A})`).html(DIAGRAM_4_B); - $(`code:contains(${DIAGRAM_5_A})`).html(DIAGRAM_5_B); - $(`code:contains(${DIAGRAM_6_A})`).html(DIAGRAM_6_B); - $(`code:contains(${DIAGRAM_7_A})`).html(DIAGRAM_7_B); - $(`code:contains(${DIAGRAM_8_A})`).html(DIAGRAM_8_B); - $(`code:contains(${DIAGRAM_9_A})`).html(DIAGRAM_9_B); - $(`code:contains(${DIAGRAM_10_A})`).html(DIAGRAM_10_B); - $(`code:contains(${DIAGRAM_11_A})`).html(DIAGRAM_11_B); - $(`code:contains(${DIAGRAM_12_A})`).html(DIAGRAM_12_B); - $(`code:contains(${DIAGRAM_13_A})`).html(DIAGRAM_13_B); - $(`code:contains(${DIAGRAM_14_A})`).html(DIAGRAM_14_B); - $(`code:contains(${DIAGRAM_15_A})`).html(DIAGRAM_15_B); - $(`code:contains(${DIAGRAM_16_A})`).html(DIAGRAM_16_B); - $(`code:contains(${DIAGRAM_17_A})`).html(DIAGRAM_17_B); - $(`code:contains(${DIAGRAM_18_A})`).html(DIAGRAM_18_B); -} - function readFile(filename) { try { return fs.readFileSync(filename, 'utf8');