@dra2020/district-analytics 12.1.1 → 14.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -44,6 +44,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
44
44
  Object.defineProperty(exports, "__esModule", ({ value: true }));
45
45
  exports.AnalyticsSession = void 0;
46
46
  const baseclient_1 = __webpack_require__(/*! @dra2020/baseclient */ "@dra2020/baseclient");
47
+ // import * as DT from '@dra2020/dra-types';
47
48
  const Score = __importStar(__webpack_require__(/*! @dra2020/dra-score */ "@dra2020/dra-score"));
48
49
  const preprocess_1 = __webpack_require__(/*! ./preprocess */ "./src/preprocess.ts");
49
50
  const analyze_1 = __webpack_require__(/*! ./analyze */ "./src/analyze.ts");
@@ -53,6 +54,7 @@ const results_2 = __webpack_require__(/*! ./results */ "./src/results.ts");
53
54
  const minority_1 = __webpack_require__(/*! ./minority */ "./src/minority.ts");
54
55
  const D = __importStar(__webpack_require__(/*! ./_data */ "./src/_data.ts"));
55
56
  const U = __importStar(__webpack_require__(/*! ./utils */ "./src/utils.ts"));
57
+ // import * as S from './settings';
56
58
  class AnalyticsSession {
57
59
  constructor(SessionRequest) {
58
60
  this.legislativeDistricts = false; // 2020
@@ -74,7 +76,7 @@ class AnalyticsSession {
74
76
  this.legislativeDistricts = SessionRequest['legislativeDistricts'];
75
77
  this.state = new D.State(this, SessionRequest['stateXX'], SessionRequest['nDistricts']);
76
78
  this.counties = new D.Counties(this, SessionRequest['counties']);
77
- this.graph = new D.Graph(this, SessionRequest['graph']);
79
+ this.graph = new D.GraphClass(this, SessionRequest['graph']);
78
80
  this.features = new D.Features(this, SessionRequest['data'], this.config['datasets']);
79
81
  this.plan = new D.Plan(this, SessionRequest['plan']);
80
82
  this.districts = new D.Districts(this, SessionRequest['districtShapes']);
@@ -102,12 +104,12 @@ class AnalyticsSession {
102
104
  // Guard against being handed a map w/o any precincts assigned
103
105
  if (U.isObjectEmpty(this.plan._planByGeoID))
104
106
  return false;
105
- preprocess_1.doPreprocessData(this, bLog);
106
- analyze_1.doAnalyzeDistricts(this, bLog);
107
- analyze_1.doAnalyzePlan(this, bLog);
108
- this._profile = score_1.profilePlan(this, bLog);
109
- this._scorecard = score_1.scorePlan(this, this._profile, bLog, overridesJSON);
110
- results_1.doAnalyzePostProcessing(this, bLog);
107
+ (0, preprocess_1.doPreprocessData)(this, bLog);
108
+ (0, analyze_1.doAnalyzeDistricts)(this, bLog);
109
+ (0, analyze_1.doAnalyzePlan)(this, bLog);
110
+ this._profile = (0, score_1.profilePlan)(this, bLog);
111
+ this._scorecard = (0, score_1.scorePlan)(this, this._profile, bLog, overridesJSON);
112
+ (0, results_1.doAnalyzePostProcessing)(this, bLog);
111
113
  }
112
114
  catch (e) {
113
115
  console.log("Exception caught by analyzePlan().");
@@ -119,11 +121,11 @@ class AnalyticsSession {
119
121
  // 11-03-2020 - Added for racially polarized voting analysis
120
122
  // NOTE - This assumes that analyzePlan() has been run!
121
123
  analyzeRacialPolarization(districtID, groups, bLog = false) {
122
- return minority_1.doAnalyzeRacialPolarization(this, districtID, groups, bLog);
124
+ return (0, minority_1.doAnalyzeRacialPolarization)(this, districtID, groups, bLog);
123
125
  }
124
126
  // NOTE - This assumes that analyzePlan() has been run!
125
127
  getDistrictStatistics(bLog = false) {
126
- return results_2.prepareDistrictStatistics(this, bLog);
128
+ return (0, results_2.prepareDistrictStatistics)(this, bLog);
127
129
  }
128
130
  getPlanProfile(bLog = false) {
129
131
  return this._profile;
@@ -144,7 +146,7 @@ class AnalyticsSession {
144
146
  }
145
147
  // NOTE - This assumes that analyzePlan() has been run!
146
148
  getRequirementsChecklist(bLog = false) {
147
- return results_2.prepareRequirementsChecklist(this, bLog);
149
+ return (0, results_2.prepareRequirementsChecklist)(this, bLog);
148
150
  }
149
151
  // NOTE - This assumes that analyzePlan() has been run!
150
152
  getDiscontiguousDistrictFeatures(bLog = false) {
@@ -231,8 +233,8 @@ var __importStar = (this && this.__importStar) || function (mod) {
231
233
  return result;
232
234
  };
233
235
  Object.defineProperty(exports, "__esModule", ({ value: true }));
234
- exports.Graph = exports.invertPlan = exports.Plan = exports.State = exports.Counties = exports.fieldForFeature = exports.geoIDForFeature = exports.Features = exports.inferSelectedMinority = exports.Districts = void 0;
235
- const G = __importStar(__webpack_require__(/*! @dra2020/dra-graph */ "@dra2020/dra-graph"));
236
+ exports.GraphClass = exports.invertPlan = exports.Plan = exports.State = exports.Counties = exports.fieldForFeature = exports.geoIDForFeature = exports.Features = exports.inferSelectedMinority = exports.Districts = void 0;
237
+ const dra_analytics_1 = __webpack_require__(/*! @dra2020/dra-analytics */ "@dra2020/dra-analytics");
236
238
  const U = __importStar(__webpack_require__(/*! ./utils */ "./src/utils.ts"));
237
239
  const S = __importStar(__webpack_require__(/*! ./settings */ "./src/settings.ts"));
238
240
  const compact_1 = __webpack_require__(/*! ./compact */ "./src/compact.ts");
@@ -470,7 +472,7 @@ class Districts {
470
472
  demPct = demVotes / totVotes;
471
473
  repPct = repVotes / totVotes;
472
474
  othPct = othVotes / totVotes;
473
- DemSeat = political_1.fptpWin(demPct);
475
+ DemSeat = (0, political_1.fptpWin)(demPct);
474
476
  }
475
477
  // Total minority VAP
476
478
  let minorityPop = totalVAP - whitePop;
@@ -503,8 +505,8 @@ class Districts {
503
505
  const features = geoIDs;
504
506
  const nakedGraph = graph._graph;
505
507
  const nakedPlan = plan._planByGeoID;
506
- bContiguous = G.isConnected(features, nakedGraph, bLog);
507
- bNotEmbedded = (!G.isEmbedded(i, features, nakedPlan, nakedGraph, bLog));
508
+ bContiguous = dra_analytics_1.Graph.isConnected(features, nakedGraph, bLog);
509
+ bNotEmbedded = (!dra_analytics_1.Graph.isEmbedded(i, features, nakedPlan, nakedGraph, bLog));
508
510
  }
509
511
  { // UPDATE THE DISTRICT STATISTICS
510
512
  // NOTE - These are set below for both non-empty & empty districts:
@@ -619,7 +621,7 @@ class Districts {
619
621
  // the underlying function and exposing it here to illustrate the parallelism
620
622
  // with recalcStatistics(). These are called in tandem by doAnalyzeDistricts().
621
623
  extractDistrictShapeProperties(bLog = false) {
622
- compact_1.extractDistrictProperties(this._session, bLog);
624
+ (0, compact_1.extractDistrictProperties)(this._session, bLog);
623
625
  }
624
626
  getCountyIndex(geoID) {
625
627
  let countyFIPS = U.parseGeoID(geoID)['county'];
@@ -903,6 +905,26 @@ function fieldForFeature(f, dk /* dt: T.Dataset */, fk) {
903
905
  }
904
906
  // result = (_getFeatures(f, dk, (fk === 'D' ? 'D12' : 'R12')) + _getFeatures(f, dk, (fk === 'D' ? 'D16' : 'R16'))) / 2;
905
907
  }
908
+ else if (dk === 'P20GPR') {
909
+ switch (fk) {
910
+ case 'D': {
911
+ result = (_getFeatures(f, 'E16GPR', 'D') + _getFeatures(f, 'E20GPR', 'D')) / 2;
912
+ break;
913
+ }
914
+ case 'R': {
915
+ result = (_getFeatures(f, 'E16GPR', 'R') + _getFeatures(f, 'E20GPR', 'R')) / 2;
916
+ break;
917
+ }
918
+ case 'Tot': {
919
+ result = (_getFeatures(f, 'E16GPR', 'D') + _getFeatures(f, 'E20GPR', 'D') + _getFeatures(f, 'E16GPR', 'R') + _getFeatures(f, 'E20GPR', 'R')) / 2;
920
+ break;
921
+ }
922
+ default: {
923
+ console.log("Field not recognized.");
924
+ break;
925
+ }
926
+ }
927
+ }
906
928
  else
907
929
  result = _getFeatures(f, dk, fk);
908
930
  return result;
@@ -1062,7 +1084,7 @@ function invertPlan(plan, s, bLog = false) {
1062
1084
  return invertedPlan;
1063
1085
  }
1064
1086
  exports.invertPlan = invertPlan;
1065
- class Graph {
1087
+ class GraphClass {
1066
1088
  constructor(s, graph) {
1067
1089
  this._session = s;
1068
1090
  this._graph = graph;
@@ -1083,7 +1105,7 @@ class Graph {
1083
1105
  // return U.getObjectKeys(this._graph[node]);
1084
1106
  }
1085
1107
  }
1086
- exports.Graph = Graph;
1108
+ exports.GraphClass = GraphClass;
1087
1109
 
1088
1110
 
1089
1111
  /***/ }),
@@ -1114,17 +1136,17 @@ exports.doAnalyzeDistricts = doAnalyzeDistricts;
1114
1136
  // NOTE - I could make this table-driven, but I'm thinking that the explicit
1115
1137
  // calls might make chunking for aync easier.
1116
1138
  function doAnalyzePlan(s, bLog = false) {
1117
- s.tests[0 /* Complete */] = valid_1.doIsComplete(s, bLog);
1118
- s.tests[1 /* Contiguous */] = valid_1.doIsContiguous(s, bLog);
1119
- s.tests[2 /* FreeOfHoles */] = valid_1.doIsFreeOfHoles(s, bLog);
1139
+ s.tests[0 /* Complete */] = (0, valid_1.doIsComplete)(s, bLog);
1140
+ s.tests[1 /* Contiguous */] = (0, valid_1.doIsContiguous)(s, bLog);
1141
+ s.tests[2 /* FreeOfHoles */] = (0, valid_1.doIsFreeOfHoles)(s, bLog);
1120
1142
  // NOTE - I can't check whether a population deviation is legal or not, until
1121
1143
  // the raw % is normalized. A zero (0) would mean "too much" / "not legal," for
1122
1144
  // the given type of district (CD vs. LD). The EqualPopulation test is derived
1123
1145
  // from PopulationDeviation, as part of scorecard or test log preparation.
1124
1146
  // Create an empty test entry here though ...
1125
1147
  s.tests[3 /* EqualPopulation */] = s.getTest(3 /* EqualPopulation */);
1126
- s.tests[5 /* UnexpectedCountySplits */] = cohesive_1.doFindCountiesSplitUnexpectedly(s, bLog);
1127
- s.tests[6 /* VTDSplits */] = cohesive_1.doFindSplitVTDs(s, bLog);
1148
+ s.tests[5 /* UnexpectedCountySplits */] = (0, cohesive_1.doFindCountiesSplitUnexpectedly)(s, bLog);
1149
+ s.tests[6 /* VTDSplits */] = (0, cohesive_1.doFindSplitVTDs)(s, bLog);
1128
1150
  // Enable a Test Log and Scorecard to be generated
1129
1151
  s.bPlanAnalyzed = true;
1130
1152
  s.bPostProcessingDone = false;
@@ -1136,7 +1158,7 @@ exports.doAnalyzePlan = doAnalyzePlan;
1136
1158
  // Equal Population to be secondary pass/fail validation.
1137
1159
  //
1138
1160
  function doDeriveSecondaryTests(s, bLog = false) {
1139
- s.tests[3 /* EqualPopulation */] = equal_1.doHasEqualPopulations(s, bLog);
1161
+ s.tests[3 /* EqualPopulation */] = (0, equal_1.doHasEqualPopulations)(s, bLog);
1140
1162
  }
1141
1163
  exports.doDeriveSecondaryTests = doDeriveSecondaryTests;
1142
1164
 
@@ -1390,7 +1412,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
1390
1412
  Object.defineProperty(exports, "__esModule", ({ value: true }));
1391
1413
  exports.scoreKIWYSICompactness = exports.extractDistrictProperties = void 0;
1392
1414
  const baseclient_1 = __webpack_require__(/*! @dra2020/baseclient */ "@dra2020/baseclient");
1393
- const Compactness = __importStar(__webpack_require__(/*! @dra2020/compactness */ "@dra2020/compactness"));
1415
+ const dra_analytics_1 = __webpack_require__(/*! @dra2020/dra-analytics */ "@dra2020/dra-analytics");
1394
1416
  const U = __importStar(__webpack_require__(/*! ./utils */ "./src/utils.ts"));
1395
1417
  // HELPER TO EXTRACT PROPERTIES OF DISTRICT SHAPES
1396
1418
  function extractDistrictProperties(s, bLog = false) {
@@ -1441,7 +1463,7 @@ function scoreKIWYSICompactness(s, bLog = false) {
1441
1463
  goodShapes.features.push(f);
1442
1464
  }
1443
1465
  }
1444
- const scores = Compactness.scoreShapes(goodShapes, 0 /* Revised */);
1466
+ const scores = dra_analytics_1.Compactness.scoreShapes(goodShapes, 0 /* Revised */);
1445
1467
  // Round & invert the scores here at the source vs. later on, higher up.
1446
1468
  // Raw KIWYSI scores will be 1–100 with smaller better, so map to 1–100 bigger better.
1447
1469
  return scores.map(n => 100 - Math.round(n) + 1);
@@ -1544,7 +1566,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
1544
1566
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
1545
1567
  };
1546
1568
  Object.defineProperty(exports, "__esModule", ({ value: true }));
1547
- exports.inferSelectedMinority = exports.fieldForFeature = exports.geoIDForFeature = void 0;
1569
+ exports.uncertaintyOfMembership = exports.effectiveSplits = exports.inferSelectedMinority = exports.fieldForFeature = exports.geoIDForFeature = void 0;
1548
1570
  __exportStar(__webpack_require__(/*! ./_api */ "./src/_api.ts"), exports);
1549
1571
  var _data_1 = __webpack_require__(/*! ./_data */ "./src/_data.ts");
1550
1572
  Object.defineProperty(exports, "geoIDForFeature", ({ enumerable: true, get: function () { return _data_1.geoIDForFeature; } }));
@@ -1553,6 +1575,10 @@ Object.defineProperty(exports, "inferSelectedMinority", ({ enumerable: true, get
1553
1575
  __exportStar(__webpack_require__(/*! ./results */ "./src/results.ts"), exports);
1554
1576
  __exportStar(__webpack_require__(/*! ./types */ "./src/types.ts"), exports);
1555
1577
  __exportStar(__webpack_require__(/*! ./utils */ "./src/utils.ts"), exports);
1578
+ // Re-export RPV types and COI splitting functions
1579
+ const dra_analytics_1 = __webpack_require__(/*! @dra2020/dra-analytics */ "@dra2020/dra-analytics");
1580
+ exports.effectiveSplits = dra_analytics_1.Splitting.effectiveSplits;
1581
+ exports.uncertaintyOfMembership = dra_analytics_1.Splitting.uncertaintyOfMembership;
1556
1582
 
1557
1583
 
1558
1584
  /***/ }),
@@ -1567,31 +1593,12 @@ __exportStar(__webpack_require__(/*! ./utils */ "./src/utils.ts"), exports);
1567
1593
  //
1568
1594
  // PROTECTS MINORITIES
1569
1595
  //
1570
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
1571
- if (k2 === undefined) k2 = k;
1572
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
1573
- }) : (function(o, m, k, k2) {
1574
- if (k2 === undefined) k2 = k;
1575
- o[k2] = m[k];
1576
- }));
1577
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
1578
- Object.defineProperty(o, "default", { enumerable: true, value: v });
1579
- }) : function(o, v) {
1580
- o["default"] = v;
1581
- });
1582
- var __importStar = (this && this.__importStar) || function (mod) {
1583
- if (mod && mod.__esModule) return mod;
1584
- var result = {};
1585
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
1586
- __setModuleDefault(result, mod);
1587
- return result;
1588
- };
1589
1596
  var __importDefault = (this && this.__importDefault) || function (mod) {
1590
1597
  return (mod && mod.__esModule) ? mod : { "default": mod };
1591
1598
  };
1592
1599
  Object.defineProperty(exports, "__esModule", ({ value: true }));
1593
1600
  exports.doAnalyzeRacialPolarization = exports.getVRASection5 = exports.getMajorityMinority = void 0;
1594
- const RPV = __importStar(__webpack_require__(/*! @dra2020/racial-voting */ "@dra2020/racial-voting"));
1601
+ const dra_analytics_1 = __webpack_require__(/*! @dra2020/dra-analytics */ "@dra2020/dra-analytics");
1595
1602
  const majority_minority_json_1 = __importDefault(__webpack_require__(/*! ../static/majority-minority.json */ "./static/majority-minority.json"));
1596
1603
  const vra5_preclearance_json_1 = __importDefault(__webpack_require__(/*! ../static/vra5-preclearance.json */ "./static/vra5-preclearance.json"));
1597
1604
  // TODO - Update/revise this, when the update comes out in September:
@@ -1626,7 +1633,7 @@ function doAnalyzeRacialPolarization(s, districtID, groups, bLog = false) {
1626
1633
  return undefined;
1627
1634
  if (points.comparison.length <= 10)
1628
1635
  return undefined;
1629
- return RPV.analyzeRacialVoting(points, districtID, groups);
1636
+ return dra_analytics_1.Minority.analyzeRacialVoting(points, districtID, groups);
1630
1637
  }
1631
1638
  exports.doAnalyzeRacialPolarization = doAnalyzeRacialPolarization;
1632
1639
  // 11-18-2020 - Moved RPV to racial-voting package.
@@ -2033,7 +2040,7 @@ function doAnalyzePostProcessing(s, bLog = false) {
2033
2040
  scorecard.splitting.details['countiesWithSplits'] = simpleSplits['details']['countiesWithSplits'];
2034
2041
  // NOTE - Add split precincts in dra-client directly
2035
2042
  // Derive secondary tests
2036
- analyze_1.doDeriveSecondaryTests(s, bLog);
2043
+ (0, analyze_1.doDeriveSecondaryTests)(s, bLog);
2037
2044
  // Toggle the semaphore, so postprocessing isn't for both the testlog & scorecard
2038
2045
  s.bPostProcessingDone = true;
2039
2046
  }
@@ -2389,7 +2396,7 @@ function isUninhabited(geoID, s) {
2389
2396
  const f = s.features.featureByIndex(featureID);
2390
2397
  // 03-27-21
2391
2398
  const dk = s.features._keys["CENSUS" /* CENSUS */];
2392
- const totalPop = _data_1.fieldForFeature(f, dk, "Tot" /* TotalPop */);
2399
+ const totalPop = (0, _data_1.fieldForFeature)(f, dk, "Tot" /* TotalPop */);
2393
2400
  // const totalPop = s.features.fieldForFeature(f, T.Dataset.CENSUS, T.FeatureField.TotalPop);
2394
2401
  let bUninhabited = (totalPop > 0) ? false : true;
2395
2402
  // HACK for Kentucky's atypical data, so the official map shows as complete
@@ -2763,26 +2770,6 @@ function doIsFreeOfHoles(s, bLog = false) {
2763
2770
  exports.doIsFreeOfHoles = doIsFreeOfHoles;
2764
2771
 
2765
2772
 
2766
- /***/ }),
2767
-
2768
- /***/ "./static/majority-minority.json":
2769
- /*!***************************************!*\
2770
- !*** ./static/majority-minority.json ***!
2771
- \***************************************/
2772
- /***/ ((module) => {
2773
-
2774
- module.exports = JSON.parse("{\"AL\":{\"Black\":[7],\"Hispanic\":[],\"Pacific\":[]},\"AK\":{\"Black\":[],\"Hispanic\":[],\"Pacific\":[]},\"AZ\":{\"Black\":[],\"Hispanic\":[2,4,7],\"Pacific\":[]},\"AR\":{\"Black\":[],\"Hispanic\":[],\"Pacific\":[]},\"CA\":{\"Black\":[13,37,43],\"Hispanic\":[17,18,20,21,28,31,32,34,35,38,39,43,45,47,51],\"Pacific\":[12,13,14,15,17,18,19,27,34,39,45,47,52]},\"CO\":{\"Black\":[],\"Hispanic\":[],\"Pacific\":[]},\"CT\":{\"Black\":[],\"Hispanic\":[],\"Pacific\":[]},\"DC\":{\"Black\":[],\"Hispanic\":[],\"Pacific\":[]},\"DE\":{\"Black\":[],\"Hispanic\":[],\"Pacific\":[]},\"FL\":{\"Black\":[5,20,24],\"Hispanic\":[18,21,25],\"Pacific\":[]},\"GA\":{\"Black\":[2,4,5,13],\"Hispanic\":[],\"Pacific\":[]},\"HI\":{\"Black\":[],\"Hispanic\":[],\"Pacific\":[2]},\"ID\":{\"Black\":[],\"Hispanic\":[1],\"Pacific\":[]},\"IL\":{\"Black\":[1,2,7],\"Hispanic\":[4],\"Pacific\":[]},\"IN\":{\"Black\":[7],\"Hispanic\":[],\"Pacific\":[]},\"IA\":{\"Black\":[],\"Hispanic\":[],\"Pacific\":[]},\"KS\":{\"Black\":[],\"Hispanic\":[],\"Pacific\":[]},\"KY\":{\"Black\":[],\"Hispanic\":[],\"Pacific\":[]},\"LA\":{\"Black\":[2],\"Hispanic\":[],\"Pacific\":[]},\"ME\":{\"Black\":[],\"Hispanic\":[],\"Pacific\":[]},\"MD\":{\"Black\":[4,7],\"Hispanic\":[],\"Pacific\":[]},\"MA\":{\"Black\":[],\"Hispanic\":[],\"Pacific\":[]},\"MI\":{\"Black\":[13,14],\"Hispanic\":[],\"Pacific\":[]},\"MN\":{\"Black\":[],\"Hispanic\":[],\"Pacific\":[]},\"MS\":{\"Black\":[2],\"Hispanic\":[],\"Pacific\":[]},\"MO\":{\"Black\":[1,5],\"Hispanic\":[],\"Pacific\":[]},\"MT\":{\"Black\":[],\"Hispanic\":[],\"Pacific\":[]},\"NE\":{\"Black\":[],\"Hispanic\":[],\"Pacific\":[]},\"NV\":{\"Black\":[],\"Hispanic\":[],\"Pacific\":[]},\"NH\":{\"Black\":[],\"Hispanic\":[],\"Pacific\":[]},\"NJ\":{\"Black\":[10,12],\"Hispanic\":[13],\"Pacific\":[6]},\"NM\":{\"Black\":[],\"Hispanic\":[2,13],\"Pacific\":[]},\"NY\":{\"Black\":[5,8,9,13],\"Hispanic\":[12,16],\"Pacific\":[6,7,10]},\"NC\":{\"Black\":[1,12],\"Hispanic\":[],\"Pacific\":[]},\"ND\":{\"Black\":[],\"Hispanic\":[],\"Pacific\":[]},\"OH\":{\"Black\":[3,11],\"Hispanic\":[],\"Pacific\":[]},\"OK\":{\"Black\":[],\"Hispanic\":[],\"Pacific\":[]},\"OR\":{\"Black\":[],\"Hispanic\":[],\"Pacific\":[]},\"PA\":{\"Black\":[2],\"Hispanic\":[],\"Pacific\":[]},\"PR\":{\"Black\":[],\"Hispanic\":[],\"Pacific\":[]},\"RI\":{\"Black\":[],\"Hispanic\":[],\"Pacific\":[]},\"SC\":{\"Black\":[6],\"Hispanic\":[],\"Pacific\":[]},\"SD\":{\"Black\":[],\"Hispanic\":[],\"Pacific\":[]},\"TN\":{\"Black\":[9],\"Hispanic\":[],\"Pacific\":[]},\"TX\":{\"Black\":[9,18,33],\"Hispanic\":[15,16,19,20,23,27,28,29,32],\"Pacific\":[]},\"UT\":{\"Black\":[],\"Hispanic\":[],\"Pacific\":[]},\"VT\":{\"Black\":[],\"Hispanic\":[],\"Pacific\":[]},\"VA\":{\"Black\":[3],\"Hispanic\":[],\"Pacific\":[]},\"WA\":{\"Black\":[],\"Hispanic\":[3],\"Pacific\":[9]},\"WV\":{\"Black\":[],\"Hispanic\":[],\"Pacific\":[]},\"WI\":{\"Black\":[4],\"Hispanic\":[],\"Pacific\":[]},\"WY\":{\"Black\":[],\"Hispanic\":[],\"Pacific\":[]}}");
2775
-
2776
- /***/ }),
2777
-
2778
- /***/ "./static/vra5-preclearance.json":
2779
- /*!***************************************!*\
2780
- !*** ./static/vra5-preclearance.json ***!
2781
- \***************************************/
2782
- /***/ ((module) => {
2783
-
2784
- module.exports = JSON.parse("{\"AL\":\"all\",\"AK\":\"all\",\"AZ\":\"all\",\"CA\":\"parts\",\"FL\":\"parts\",\"GA\":\"all\",\"LA\":\"all\",\"MI\":\"parts\",\"MS\":\"all\",\"NY\":\"parts\",\"NC\":\"parts\",\"SC\":\"all\",\"SD\":\"parts\",\"TX\":\"all\",\"VA\":\"all\"}");
2785
-
2786
2773
  /***/ }),
2787
2774
 
2788
2775
  /***/ "@dra2020/baseclient":
@@ -2791,57 +2778,57 @@ module.exports = JSON.parse("{\"AL\":\"all\",\"AK\":\"all\",\"AZ\":\"all\",\"CA\
2791
2778
  \**************************************/
2792
2779
  /***/ ((module) => {
2793
2780
 
2794
- module.exports = require("@dra2020/baseclient");;
2781
+ module.exports = require("@dra2020/baseclient");
2795
2782
 
2796
2783
  /***/ }),
2797
2784
 
2798
- /***/ "@dra2020/compactness":
2799
- /*!***************************************!*\
2800
- !*** external "@dra2020/compactness" ***!
2801
- \***************************************/
2785
+ /***/ "@dra2020/dra-analytics":
2786
+ /*!*****************************************!*\
2787
+ !*** external "@dra2020/dra-analytics" ***!
2788
+ \*****************************************/
2802
2789
  /***/ ((module) => {
2803
2790
 
2804
- module.exports = require("@dra2020/compactness");;
2791
+ module.exports = require("@dra2020/dra-analytics");
2805
2792
 
2806
2793
  /***/ }),
2807
2794
 
2808
- /***/ "@dra2020/dra-graph":
2795
+ /***/ "@dra2020/dra-score":
2809
2796
  /*!*************************************!*\
2810
- !*** external "@dra2020/dra-graph" ***!
2797
+ !*** external "@dra2020/dra-score" ***!
2811
2798
  \*************************************/
2812
2799
  /***/ ((module) => {
2813
2800
 
2814
- module.exports = require("@dra2020/dra-graph");;
2801
+ module.exports = require("@dra2020/dra-score");
2815
2802
 
2816
2803
  /***/ }),
2817
2804
 
2818
- /***/ "@dra2020/dra-score":
2805
+ /***/ "@dra2020/dra-types":
2819
2806
  /*!*************************************!*\
2820
- !*** external "@dra2020/dra-score" ***!
2807
+ !*** external "@dra2020/dra-types" ***!
2821
2808
  \*************************************/
2822
2809
  /***/ ((module) => {
2823
2810
 
2824
- module.exports = require("@dra2020/dra-score");;
2811
+ module.exports = require("@dra2020/dra-types");
2825
2812
 
2826
2813
  /***/ }),
2827
2814
 
2828
- /***/ "@dra2020/dra-types":
2829
- /*!*************************************!*\
2830
- !*** external "@dra2020/dra-types" ***!
2831
- \*************************************/
2815
+ /***/ "./static/majority-minority.json":
2816
+ /*!***************************************!*\
2817
+ !*** ./static/majority-minority.json ***!
2818
+ \***************************************/
2832
2819
  /***/ ((module) => {
2833
2820
 
2834
- module.exports = require("@dra2020/dra-types");;
2821
+ module.exports = JSON.parse('{"AL":{"Black":[7],"Hispanic":[],"Pacific":[]},"AK":{"Black":[],"Hispanic":[],"Pacific":[]},"AZ":{"Black":[],"Hispanic":[2,4,7],"Pacific":[]},"AR":{"Black":[],"Hispanic":[],"Pacific":[]},"CA":{"Black":[13,37,43],"Hispanic":[17,18,20,21,28,31,32,34,35,38,39,43,45,47,51],"Pacific":[12,13,14,15,17,18,19,27,34,39,45,47,52]},"CO":{"Black":[],"Hispanic":[],"Pacific":[]},"CT":{"Black":[],"Hispanic":[],"Pacific":[]},"DC":{"Black":[],"Hispanic":[],"Pacific":[]},"DE":{"Black":[],"Hispanic":[],"Pacific":[]},"FL":{"Black":[5,20,24],"Hispanic":[18,21,25],"Pacific":[]},"GA":{"Black":[2,4,5,13],"Hispanic":[],"Pacific":[]},"HI":{"Black":[],"Hispanic":[],"Pacific":[2]},"ID":{"Black":[],"Hispanic":[1],"Pacific":[]},"IL":{"Black":[1,2,7],"Hispanic":[4],"Pacific":[]},"IN":{"Black":[7],"Hispanic":[],"Pacific":[]},"IA":{"Black":[],"Hispanic":[],"Pacific":[]},"KS":{"Black":[],"Hispanic":[],"Pacific":[]},"KY":{"Black":[],"Hispanic":[],"Pacific":[]},"LA":{"Black":[2],"Hispanic":[],"Pacific":[]},"ME":{"Black":[],"Hispanic":[],"Pacific":[]},"MD":{"Black":[4,7],"Hispanic":[],"Pacific":[]},"MA":{"Black":[],"Hispanic":[],"Pacific":[]},"MI":{"Black":[13,14],"Hispanic":[],"Pacific":[]},"MN":{"Black":[],"Hispanic":[],"Pacific":[]},"MS":{"Black":[2],"Hispanic":[],"Pacific":[]},"MO":{"Black":[1,5],"Hispanic":[],"Pacific":[]},"MT":{"Black":[],"Hispanic":[],"Pacific":[]},"NE":{"Black":[],"Hispanic":[],"Pacific":[]},"NV":{"Black":[],"Hispanic":[],"Pacific":[]},"NH":{"Black":[],"Hispanic":[],"Pacific":[]},"NJ":{"Black":[10,12],"Hispanic":[13],"Pacific":[6]},"NM":{"Black":[],"Hispanic":[2,13],"Pacific":[]},"NY":{"Black":[5,8,9,13],"Hispanic":[12,16],"Pacific":[6,7,10]},"NC":{"Black":[1,12],"Hispanic":[],"Pacific":[]},"ND":{"Black":[],"Hispanic":[],"Pacific":[]},"OH":{"Black":[3,11],"Hispanic":[],"Pacific":[]},"OK":{"Black":[],"Hispanic":[],"Pacific":[]},"OR":{"Black":[],"Hispanic":[],"Pacific":[]},"PA":{"Black":[2],"Hispanic":[],"Pacific":[]},"PR":{"Black":[],"Hispanic":[],"Pacific":[]},"RI":{"Black":[],"Hispanic":[],"Pacific":[]},"SC":{"Black":[6],"Hispanic":[],"Pacific":[]},"SD":{"Black":[],"Hispanic":[],"Pacific":[]},"TN":{"Black":[9],"Hispanic":[],"Pacific":[]},"TX":{"Black":[9,18,33],"Hispanic":[15,16,19,20,23,27,28,29,32],"Pacific":[]},"UT":{"Black":[],"Hispanic":[],"Pacific":[]},"VT":{"Black":[],"Hispanic":[],"Pacific":[]},"VA":{"Black":[3],"Hispanic":[],"Pacific":[]},"WA":{"Black":[],"Hispanic":[3],"Pacific":[9]},"WV":{"Black":[],"Hispanic":[],"Pacific":[]},"WI":{"Black":[4],"Hispanic":[],"Pacific":[]},"WY":{"Black":[],"Hispanic":[],"Pacific":[]}}');
2835
2822
 
2836
2823
  /***/ }),
2837
2824
 
2838
- /***/ "@dra2020/racial-voting":
2839
- /*!*****************************************!*\
2840
- !*** external "@dra2020/racial-voting" ***!
2841
- \*****************************************/
2825
+ /***/ "./static/vra5-preclearance.json":
2826
+ /*!***************************************!*\
2827
+ !*** ./static/vra5-preclearance.json ***!
2828
+ \***************************************/
2842
2829
  /***/ ((module) => {
2843
2830
 
2844
- module.exports = require("@dra2020/racial-voting");;
2831
+ module.exports = JSON.parse('{"AL":"all","AK":"all","AZ":"all","CA":"parts","FL":"parts","GA":"all","LA":"all","MI":"parts","MS":"all","NY":"parts","NC":"parts","SC":"all","SD":"parts","TX":"all","VA":"all"}');
2845
2832
 
2846
2833
  /***/ })
2847
2834
 
@@ -2853,8 +2840,9 @@ module.exports = require("@dra2020/racial-voting");;
2853
2840
  /******/ // The require function
2854
2841
  /******/ function __webpack_require__(moduleId) {
2855
2842
  /******/ // Check if module is in cache
2856
- /******/ if(__webpack_module_cache__[moduleId]) {
2857
- /******/ return __webpack_module_cache__[moduleId].exports;
2843
+ /******/ var cachedModule = __webpack_module_cache__[moduleId];
2844
+ /******/ if (cachedModule !== undefined) {
2845
+ /******/ return cachedModule.exports;
2858
2846
  /******/ }
2859
2847
  /******/ // Create a new module (and put it into the cache)
2860
2848
  /******/ var module = __webpack_module_cache__[moduleId] = {
@@ -2871,10 +2859,13 @@ module.exports = require("@dra2020/racial-voting");;
2871
2859
  /******/ }
2872
2860
  /******/
2873
2861
  /************************************************************************/
2874
- /******/ // module exports must be returned from runtime so entry inlining is disabled
2862
+ /******/
2875
2863
  /******/ // startup
2876
2864
  /******/ // Load entry module and return exports
2877
- /******/ return __webpack_require__("./src/index.ts");
2865
+ /******/ // This entry module is referenced by other modules so it can't be inlined
2866
+ /******/ var __webpack_exports__ = __webpack_require__("./src/index.ts");
2867
+ /******/
2868
+ /******/ return __webpack_exports__;
2878
2869
  /******/ })()
2879
2870
  ;
2880
2871
  });