Double Sum Top Cords


1. Number of Double Sum Top Cord

Even rarer (and more specialized) than Locke’s famous Top Cord Sum Cords, are Ascher’s Top Cord Double Sum Cords. As evidenced in AS066, these top cords’ values are TWICE the sum of all cords in an adjacent group.

Another fieldmark that tends to co-occurs with double sum top cords is the group sum bands match, where a group’s cords from first cord to the nth cord, sum to the same value as the (n+1)th cord to the last cord. For example:

\(\sum\limits_{j=1}^4 P_{ij} = \sum\limits_{j=5}^8 P_{ij}\)

2. Search Criteria:

Like sum top cords, it’s pretty clear what we are searching for double sum cords. The only wrinkle is that they khipu-kamayoq who made the khipu frequently was off by one in one digit - getting 468 instead of 469 or 569 instead of 469. That case has to be checked.

3. Significance Criteria:

This is such a rare (and unambigous) fieldmark that any occurrence is deemed significant.

4. Summary Results:

Measure Result
Number of Khipus That Match 10 (2%)
Number of Significant Khipus 10 (2%)
Five most Significant Khipu AS066, UR087, UR241, UR004, AS044
Image Quilt Click here
Database View Click here

5. Summary Charts:

Code
# Initialize plotly
import plotly
plotly.offline.init_notebook_mode(connected = False);

# Read in the Fieldmark and its associated dataframe and match dictionary
from fieldmark_double_sum_top_cords import FieldmarkDoubleSumTopCords
aFieldmark = FieldmarkDoubleSumTopCords()
fieldmark_dataframe = aFieldmark.dataframes[0].dataframe
raw_match_dict = aFieldmark.raw_match_dict()
Code
# Plot Matching khipu
import plotly.express as px
import pandas as pd

matching_khipus = aFieldmark.matching_khipus() 
matching_values = [raw_match_dict[aKhipuName] for aKhipuName in matching_khipus]
matching_df =  pd.DataFrame(list(zip(matching_khipus, matching_values)), columns =['KhipuName', 'Value'])
fig = px.bar(matching_df, x='KhipuName', y='Value', labels={"KhipuName": "Khipu Name", "Value": "Number of Top Cord Double Sum Cords", }, 
            title=f"Matching Khipu ({len(matching_khipus)}) for Number of Top Cord Double Sum Cords",  width=944, height=450).update_layout(showlegend=True).show()
Code
# Plot Significant khipu
significant_khipus = aFieldmark.significant_khipus()
significant_values = [raw_match_dict[aKhipuName] for aKhipuName in significant_khipus]
significant_df =  pd.DataFrame(list(zip(significant_khipus, significant_values)), columns =['KhipuName', 'Value'])
fig = px.bar(significant_df, x='KhipuName', y='Value', labels={"KhipuName": "Khipu Name", "Value": "Number of Top Cord Double Sum Cords", },
             title=f"Significant Khipu ({len(significant_khipus)}) for Number of Top Cord Double Sum Cords", width=944, height=450).update_layout(showlegend=True).show()

6. Exploratory Data Analysis

This pattern occurs in a well-understood khipu - UR087, one of the six Santa Valley River Khipus partially deciphered by Manuel Medrano in 2018. Those khipu are explored a little more in the Color Bands Fieldmark Review.

Code
# Load khipus
import qollqa_chuspa as qc
from fieldmark_group_sum_bands import FieldmarkGroupSumBands

khipu_dict, all_khipus = qc.fetch_khipus()

# Load fieldmark dataframes
group_sum_bands_fieldmark = FieldmarkGroupSumBands()
group_sum_khipu_df = group_sum_bands_fieldmark.dataframes[0].dataframe
#dtale.show(group_sum_khipu_df)

double_sum_top_cords_fieldmark = aFieldmark
double_sum_top_cords_df = aFieldmark.dataframes[0].dataframe
#dtale.show(double_sum_top_cords_df)

def num_double_sum_top_cords(kfg_name):
    khipu_df = double_sum_top_cords_df[double_sum_top_cords_df.kfg_name == kfg_name]
    num_cords = list(khipu_df.num_double_sum_top_cords.values)[0] if len(khipu_df) > 0 else 0
    return num_cords

def num_group_sum_bands(khipu_name):
    khipu_df = group_sum_khipu_df[group_sum_khipu_df.kfg_name == khipu_name]
    num_cords = list(khipu_df.num_group_sum_bands.values)[0] if len(khipu_df) > 0 else 0
    return num_cords

interesting_double_sums = sorted(set(list(double_sum_top_cords_df[double_sum_top_cords_df.num_double_sum_top_cords>0].kfg_name.values)))
print(f"({len(interesting_double_sums)}) Interesting double sum khipus are {sorted(list(interesting_double_sums))}")

double_sum_count_vec = [num_double_sum_top_cords(khipu_name) for khipu_name in interesting_double_sums]
group_sum_count_vec = [num_group_sum_bands(khipu_name) for khipu_name in interesting_double_sums]
comparison_df = pd.DataFrame(zip(interesting_double_sums, double_sum_count_vec, group_sum_count_vec), columns=['kfg_name', 'num_double_sum_top_cords', 'num_group_sum_bands'])
comparison_df.sort_values(by=['num_group_sum_bands'], inplace=True, ascending=False)
comparison_df
(13) Interesting double sum khipus are ['AS006', 'AS007', 'AS013', 'AS044', 'AS061/MA036', 'AS066', 'AS199', 'QU003', 'QU009', 'QU014', 'QU016', 'UR087', 'UR1096']
kfg_name num_double_sum_top_cords num_group_sum_bands
5 AS066 14 4
2 AS013 1 1
0 AS006 2 0
1 AS007 4 0
3 AS044 2 0
4 AS061/MA036 1 0
6 AS199 1 0
7 QU003 1 0
8 QU009 1 0
9 QU014 1 0
10 QU016 2 0
11 UR087 6 0
12 UR1096 4 0

Khipus with double sum topcords, have single sum topcords on the same khipu.

Code
from utils_khipu import lexigraphic_order

from fieldmark_sum_top_cords import FieldmarkSumTopCords
sum_top_cord_Fieldmark = FieldmarkSumTopCords()
sum_cord_khipus = sum_top_cord_Fieldmark.matching_khipus()
print(len(sum_cord_khipus), sum_cord_khipus)

from fieldmark_double_sum_top_cords import FieldmarkDoubleSumTopCords
double_sum_top_cord_Fieldmark = FieldmarkDoubleSumTopCords()
double_sum_top_cord_khipus = double_sum_top_cord_Fieldmark.matching_khipus()
print(len(double_sum_top_cord_khipus), double_sum_top_cord_khipus)

if all([(aKhipu in sum_cord_khipus) for aKhipu in double_sum_top_cord_khipus]):
    print("All double sum top cord khipus are also sum top cord khipus")
else:
    print()
    both_double_and_single_sum_khipus = lexigraphic_order(list(set(sum_cord_khipus).intersection(set(double_sum_top_cord_khipus))))
    print(f"Khipus with BOTH double and single sum top cords: {both_double_and_single_sum_khipus}")
    only_sum_khipus = lexigraphic_order(list(set(sum_cord_khipus).difference(set(double_sum_top_cord_khipus))))
    print(f"Khipus with ONLY sum top cords: {only_sum_khipus}")
    only_double_sum_khipus = lexigraphic_order(list(set(double_sum_top_cord_khipus).difference(set(sum_cord_khipus))))
    print(f"Khipus with ONLY double sum top cords: {only_double_sum_khipus}")
22 ['AS066', 'AS044', 'AS199', 'UR1096', 'AS007', 'UR087', 'AS006', 'MM022', 'AS072', 'QU009', 'QU014', 'QU019', 'AS001', 'QU015', 'QU016', 'AS002', 'AS003', 'AS004', 'AS010', 'AS013', 'HP047', 'QU012']
13 ['AS066', 'UR087', 'AS007', 'UR1096', 'AS006', 'AS044', 'QU016', 'AS013', 'AS061/MA036', 'AS199', 'QU003', 'QU009', 'QU014']

Khipus with BOTH double and single sum top cords: ['AS006', 'AS007', 'AS013', 'AS044', 'AS066', 'AS199', 'QU009', 'QU014', 'QU016', 'UR087', 'UR1096']
Khipus with ONLY sum top cords: ['AS001', 'AS002', 'AS003', 'AS004', 'AS010', 'AS072', 'HP047', 'MM022', 'QU012', 'QU015', 'QU019']
Khipus with ONLY double sum top cords: ['AS061/MA036', 'QU003']

7. Conclusion

Only 10 (1.6%) of the khipu in the Khipu Fieldguide exhibit this fieldmark, and only 2 share the fieldmark with group sum bands. Although this is a valid identifiable fieldmark, it’s statistical occurrence makes it difficult to make much of use of it as a fieldmark.