@dra2020/district-analytics 5.0.3 → 5.1.0

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.
package/dist/cli.js CHANGED
@@ -89315,23 +89315,33 @@ const C = __importStar(__webpack_require__(/*! ./config */ "./src/config.ts"));
89315
89315
  const normalize_1 = __webpack_require__(/*! ./normalize */ "./src/normalize.ts");
89316
89316
  function scoreCountySplitting(rawValue, nCounties, nDistricts) {
89317
89317
  const _normalizer = new normalize_1.Normalizer(rawValue);
89318
- const best = C.countySplittingRange()[C.BEG];
89319
- const worst = countySplitThreshold(nCounties, nDistricts);
89320
- _normalizer.clip(best, worst);
89321
- _normalizer.unitize(best, worst);
89318
+ const singleBest = C.countySplittingRange()[C.BEG];
89319
+ const singleWorst = C.countySplittingRange()[C.END];
89320
+ // The practical ideal score depends on the # of counties & districts
89321
+ const avgBest = countySplitBest(nCounties, nDistricts);
89322
+ const avgWorst = countySplitWorst(avgBest);
89323
+ _normalizer.clip(avgBest, avgWorst);
89324
+ _normalizer.unitize(avgBest, avgWorst);
89322
89325
  _normalizer.invert();
89323
89326
  _normalizer.rescale();
89324
89327
  return _normalizer.normalizedNum;
89325
89328
  }
89326
89329
  exports.scoreCountySplitting = scoreCountySplitting;
89327
- function countySplitThreshold(nCounties, nDistricts) {
89328
- const m = C.allowableSplitsMultiplier();
89329
- const worst = C.countySplittingRange()[1];
89330
- const nAllowableSplits = Math.min(m * (nDistricts - 1), nCounties);
89331
- const threshold = ((nAllowableSplits * worst) + ((nCounties - nAllowableSplits) * 1.0)) / nCounties;
89330
+ function countySplitBest(nCounties, nDistricts) {
89331
+ const practicalBest = C.countySplittingRange()[C.BEG];
89332
+ const nAllowableSplits = Math.min(nDistricts - 1, nCounties);
89333
+ const threshold = ((nAllowableSplits * practicalBest) + ((nCounties - nAllowableSplits) * 1.0)) / nCounties;
89332
89334
  return threshold;
89333
89335
  }
89334
- exports.countySplitThreshold = countySplitThreshold;
89336
+ exports.countySplitBest = countySplitBest;
89337
+ function countySplitWorst(avgBest) {
89338
+ const singleBest = C.countySplittingRange()[C.BEG];
89339
+ const singleWorst = C.countySplittingRange()[C.END];
89340
+ // The practical ideal score depends on the # of counties & districts
89341
+ const avgWorst = avgBest * (singleWorst / singleBest);
89342
+ return avgWorst;
89343
+ }
89344
+ exports.countySplitWorst = countySplitWorst;
89335
89345
  function scoreDistrictSplitting(rawValue) {
89336
89346
  const _normalizer = new normalize_1.Normalizer(rawValue);
89337
89347
  const best = C.districtSplittingRange()[C.BEG];
@@ -89793,7 +89803,7 @@ exports.scorePolsbyPopper = scorePolsbyPopper;
89793
89803
  /*! exports provided: partisan, minority, traditionalPrinciples, default */
89794
89804
  /***/ (function(module) {
89795
89805
 
89796
- module.exports = JSON.parse("{\"partisan\":{\"bias\":{\"range\":[0,0.2],\"weight\":[50,80]},\"impact\":{\"weight\":[50,0],\"threshold\":4},\"competitiveness\":{\"overall\":{\"range\":[0,0.67],\"weight\":100},\"marginal\":{\"range\":[0,0.85],\"weight\":0},\"range\":[0.45,0.55],\"distribution\":[0.25,0.75],\"weight\":[0,20]},\"bonus\":2,\"weight\":[100,80]},\"minority\":{\"range\":[0.37,0.5],\"distribution\":[0.25,0.75],\"shift\":0.15,\"bonus\":20},\"traditionalPrinciples\":{\"compactness\":{\"reock\":{\"range\":[0.25,0.5],\"weight\":50},\"polsby\":{\"range\":[0.1,0.5],\"weight\":50},\"weight\":[0,50]},\"splitting\":{\"county\":{\"range\":[1,1.71],\"allowableSplitsMultiplier\":1.5,\"weight\":50},\"district\":{\"range\":[1,1.5],\"weight\":50},\"weight\":[0,50]},\"popdev\":{\"range\":[[0.0075,0.002],[0.1,-1]],\"weight\":[0,0]},\"weight\":[0,20]}}");
89806
+ module.exports = JSON.parse("{\"partisan\":{\"bias\":{\"range\":[0,0.2],\"weight\":[50,80]},\"impact\":{\"weight\":[50,0],\"threshold\":4},\"competitiveness\":{\"overall\":{\"range\":[0,0.67],\"weight\":100},\"marginal\":{\"range\":[0,0.85],\"weight\":0},\"range\":[0.45,0.55],\"distribution\":[0.25,0.75],\"weight\":[0,20]},\"bonus\":2,\"weight\":[100,80]},\"minority\":{\"range\":[0.37,0.5],\"distribution\":[0.25,0.75],\"shift\":0.15,\"bonus\":20},\"traditionalPrinciples\":{\"compactness\":{\"reock\":{\"range\":[0.25,0.5],\"weight\":50},\"polsby\":{\"range\":[0.1,0.5],\"weight\":50},\"weight\":[0,50]},\"splitting\":{\"county\":{\"range\":[1.26,1.68],\"weight\":50},\"district\":{\"range\":[1.26,1.68],\"weight\":50},\"weight\":[0,50]},\"popdev\":{\"range\":[[0.0075,0.002],[0.1,-1]],\"weight\":[0,0]},\"weight\":[0,20]}}");
89797
89807
 
89798
89808
  /***/ }),
89799
89809
 
@@ -89948,11 +89958,6 @@ function countySplittingRange(overridesJSON) {
89948
89958
  return range;
89949
89959
  }
89950
89960
  exports.countySplittingRange = countySplittingRange;
89951
- function allowableSplitsMultiplier(overridesJSON) {
89952
- const m = config_json_1.default.traditionalPrinciples.splitting.county.allowableSplitsMultiplier;
89953
- return m;
89954
- }
89955
- exports.allowableSplitsMultiplier = allowableSplitsMultiplier;
89956
89961
  function districtSplittingWeight(overridesJSON) {
89957
89962
  const dsW = config_json_1.default.traditionalPrinciples.splitting.district.weight;
89958
89963
  return dsW;
@@ -90165,12 +90170,10 @@ function evalMinorityOpportunity(p, bLog = false) {
90165
90170
  averageDVf: averageDVf,
90166
90171
  bucketsByDemographic: bucketsByDemo
90167
90172
  },
90168
- // nOpportunity1: l1,
90169
- // nOpportunity2: l2,
90170
90173
  nProportional: pD,
90171
90174
  opportunityDistricts: oD,
90172
90175
  score: score,
90173
- details: {} // TODO - Add notes
90176
+ details: {}
90174
90177
  };
90175
90178
  return mS;
90176
90179
  }
@@ -90500,7 +90503,7 @@ function scorePartisan(Vf, VfArray, options) {
90500
90503
  competitiveness: competitiveScoring,
90501
90504
  score: acrossStatesPartisanScore,
90502
90505
  score2: withinStatesPartisanScore,
90503
- details: {} // TODO - Add notes
90506
+ details: {}
90504
90507
  };
90505
90508
  return s;
90506
90509
  }
@@ -91290,7 +91293,7 @@ function scorePlan(p, overridesJSON) {
91290
91293
  compactness: cS,
91291
91294
  splitting: sS,
91292
91295
  populationDeviation: pdS,
91293
- details: {} // TODO - Add notes
91296
+ details: {}
91294
91297
  };
91295
91298
  // PARTISAN ("fair") subcategories - bias, impact, & competitiveness (plus lots of supporting measures)
91296
91299
  const options = {
@@ -91311,7 +91314,7 @@ function scorePlan(p, overridesJSON) {
91311
91314
  minority: mS,
91312
91315
  traditionalPrinciples: tpS,
91313
91316
  score: score,
91314
- details: {} // TODO - Add notes
91317
+ details: {}
91315
91318
  };
91316
91319
  return scorecard;
91317
91320
  }
@@ -91366,12 +91369,7 @@ function printScorecardRow(xx, name, N, Vf, s) {
91366
91369
  s.partisan.bias.score, s.partisan.impact.unearnedS, // 9
91367
91370
  s.partisan.impact.score, s.partisan.competitiveness.cSimple, // 11
91368
91371
  s.partisan.competitiveness.cD, s.partisan.competitiveness.mD, s.partisan.competitiveness.score, s.partisan.score2, // 15
91369
- s.traditionalPrinciples.compactness.reock.raw, s.traditionalPrinciples.compactness.reock.normalized, s.traditionalPrinciples.compactness.polsby.raw, s.traditionalPrinciples.compactness.polsby.normalized, s.traditionalPrinciples.compactness.score, s.traditionalPrinciples.splitting.county.raw, s.traditionalPrinciples.splitting.county.normalized, s.traditionalPrinciples.splitting.district.raw, s.traditionalPrinciples.splitting.district.normalized, s.traditionalPrinciples.splitting.score, s.traditionalPrinciples.populationDeviation.raw, s.traditionalPrinciples.populationDeviation.normalized, s.traditionalPrinciples.score,
91370
- // s.minority.nOpportunity1,
91371
- // s.minority.nOpportunity2,
91372
- s.minority.opportunityDistricts,
91373
- // s.minority.nProportional,
91374
- s.minority.score, s.score);
91372
+ s.traditionalPrinciples.compactness.reock.raw, s.traditionalPrinciples.compactness.reock.normalized, s.traditionalPrinciples.compactness.polsby.raw, s.traditionalPrinciples.compactness.polsby.normalized, s.traditionalPrinciples.compactness.score, s.traditionalPrinciples.splitting.county.raw, s.traditionalPrinciples.splitting.county.normalized, s.traditionalPrinciples.splitting.district.raw, s.traditionalPrinciples.splitting.district.normalized, s.traditionalPrinciples.splitting.score, s.traditionalPrinciples.populationDeviation.raw, s.traditionalPrinciples.populationDeviation.normalized, s.traditionalPrinciples.score, s.minority.opportunityDistricts, s.minority.score, s.score);
91375
91373
  }
91376
91374
  exports.printScorecardRow = printScorecardRow;
91377
91375