@dra2020/dra-analytics 3.2.1 → 3.3.4

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/cli/partisan.ts CHANGED
@@ -123,48 +123,48 @@ function trim(fullFraction: number, digits: number | undefined = undefined): num
123
123
  // Generate partisan details (Table 1)
124
124
  export function printPartisanDetailsHeader(): void
125
125
  {
126
- console.log('XX, <V>, S(<V>), Rd, R, r, MIR, Cd, Cdf, BS_50, BV_50, Decl, GS, 𝛾, β, LO, EG, PR, MM, TO, MM\', B%, UE, LS, LPR, LPR\', LUE');
126
+ console.log('XX, <V>, S(<V>), R, r, MIR, Decl, LO, MM, BS_50, BV_50, β, GS, PR, EG, 𝛾, B%, LPR\', LUE');
127
+ // console.log('XX, <V>, S(<V>), Rd, R, r, MIR, Cd, Cdf, BS_50, BV_50, Decl, GS, 𝛾, β, LO, EG, PR, MM, TO, MM\', B%, UE, LS, LPR, LPR\', LUE');
127
128
  // console.log('XX, <V>, S(<V>), B%, BS_50, BV_50, Decl, GS, EG, Beta, PR, MM, TO, MM\', LO, Rd, R, r, MIR, Cd, Cdf, LS, LPR, LPR\'');
128
129
  }
129
130
 
130
131
  export function printPartisanDetailsRow(xx: string, name: string, N: number, Vf: number, s: T.PartisanScorecard): void
131
132
  {
132
- console.log('%s, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f',
133
+ // console.log('%s, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f',
134
+ console.log('%s, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f',
133
135
  xx,
134
136
 
135
137
  trim(Vf),
136
138
  trim(s.bias.estSf),
137
139
 
138
- trim(s.responsiveness.rD),
139
- (s.responsiveness.bigR) ? trim(s.responsiveness.bigR) : s.responsiveness.bigR, // Not shown in Table 1
140
- (s.responsiveness.littleR) ? trim(s.responsiveness.littleR) : s.responsiveness.littleR, // Not shown in Table 1
141
- (s.responsiveness.mIR) ? trim(s.responsiveness.mIR) : s.responsiveness.mIR, // Not shown in Table 1 <<< Zeta
140
+ // trim(s.responsiveness.rD),
141
+ (s.responsiveness.bigR) ? trim(s.responsiveness.bigR) : s.responsiveness.bigR,
142
+ (s.responsiveness.littleR) ? trim(s.responsiveness.littleR) : s.responsiveness.littleR,
143
+ (s.responsiveness.mIR) ? trim(s.responsiveness.mIR) : s.responsiveness.mIR,
142
144
 
143
- trim(s.responsiveness.cD), // Not shown in Table 1
144
- trim(s.responsiveness.cDf), // Not shown in Table 1
145
+ // trim(s.responsiveness.cD),
146
+ // trim(s.responsiveness.cDf),
147
+
148
+ (s.bias.decl) ? trim(s.bias.decl) : s.bias.decl,
149
+ (s.bias.lO) ? trim(s.bias.lO) : s.bias.lO,
150
+ trim(s.bias.mMs),
151
+ // trim(s.bias.tOf),
152
+ // trim(s.bias.mMd),
145
153
 
146
154
  trim(s.bias.bS50),
147
155
  (s.bias.bV50) ? trim(s.bias.bV50) : s.bias.bV50,
148
- (s.bias.decl) ? trim(s.bias.decl) : s.bias.decl,
156
+ (s.bias.bSV) ? trim(s.bias.bSV) : s.bias.bSV, // Beta
149
157
  trim(s.bias.gSym),
150
- (s.bias.gamma) ? trim(s.bias.gamma) : s.bias.gamma,
151
158
 
152
- (s.bias.bSV) ? trim(s.bias.bSV) : s.bias.bSV, // Beta
153
- (s.bias.lO) ? trim(s.bias.lO) : s.bias.lO,
154
159
  trim(s.bias.prop), // PR
155
160
  trim(s.bias.eG),
156
-
157
- trim(s.bias.mMs), // Not shown in Table 1
158
- trim(s.bias.tOf), // Not shown in Table 1
159
- trim(s.bias.mMd), // Not shown in Table 1
161
+ (s.bias.gamma) ? trim(s.bias.gamma) : s.bias.gamma,
160
162
 
161
163
  trim(s.bias.deviation), // Simple deviation from best # of seats
162
- trim(s.impact.unearnedS),
163
-
164
- // EXPERIMENTAL
165
- (s.experimental.lSym) ? trim(s.experimental.lSym) : s.experimental.lSym,
166
- (s.experimental.lProp) ? trim(s.experimental.lProp) : s.experimental.lProp,
164
+ // (s.experimental.lProp) ? trim(s.experimental.lProp) : s.experimental.lProp,
167
165
  (s.experimental.lPropAlt) ? trim(s.experimental.lPropAlt) : s.experimental.lPropAlt,
166
+ // trim(s.impact.unearnedS),
168
167
  (s.experimental.lUE) ? trim(s.experimental.lUE) : s.experimental.lUE
168
+ // (s.experimental.lSym) ? trim(s.experimental.lSym) : s.experimental.lSym,
169
169
  );
170
170
  }
@@ -177,7 +177,7 @@ Object.defineProperty(exports, "avgSVError", ({ enumerable: true, get: function
177
177
 
178
178
  // Restrict package exports
179
179
  Object.defineProperty(exports, "__esModule", ({ value: true }));
180
- exports.popdevThreshold = exports.isAntimajoritarian = exports.ratePartisanBias = exports.rateDistrictSplitting = exports.rateCountySplitting = exports.rateSplitting = exports.ratePolsby = exports.rateReock = exports.rateCompactness = exports.rateMinorityRepresentation = exports.rateCompetitiveness = exports.rateProportionality = exports.ratePopulationDeviation = void 0;
180
+ exports.popdevThreshold = exports.isAntimajoritarian = exports.normalizePartisanBias = exports.ratePartisanBias = exports.rateDistrictSplitting = exports.rateCountySplitting = exports.rateSplitting = exports.ratePolsby = exports.rateReock = exports.rateCompactness = exports.rateMinorityRepresentation = exports.rateCompetitiveness = exports.rateProportionality = exports.ratePopulationDeviation = void 0;
181
181
  var all_1 = __webpack_require__(/*! ../rate/all */ "./lib/rate/all.ts");
182
182
  // For DRA-specific ratings
183
183
  Object.defineProperty(exports, "ratePopulationDeviation", ({ enumerable: true, get: function () { return all_1.ratePopulationDeviation; } }));
@@ -194,6 +194,7 @@ Object.defineProperty(exports, "rateDistrictSplitting", ({ enumerable: true, get
194
194
  // rateSplittingLegacy, adjustSplittingRating, rateCountySplittingLegacy, rateDistrictSplittingLegacy,
195
195
  // For use in DRA client UI
196
196
  Object.defineProperty(exports, "ratePartisanBias", ({ enumerable: true, get: function () { return all_1.ratePartisanBias; } }));
197
+ Object.defineProperty(exports, "normalizePartisanBias", ({ enumerable: true, get: function () { return all_1.normalizePartisanBias; } }));
197
198
  Object.defineProperty(exports, "isAntimajoritarian", ({ enumerable: true, get: function () { return all_1.isAntimajoritarian; } }));
198
199
  Object.defineProperty(exports, "popdevThreshold", ({ enumerable: true, get: function () { return all_1.popdevThreshold; } }));
199
200
 
@@ -1737,7 +1738,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
1737
1738
  return result;
1738
1739
  };
1739
1740
  Object.defineProperty(exports, "__esModule", ({ value: true }));
1740
- exports.rangeUnearnedSeats = exports.estLocalUnearnedSeats = exports.rangeDisproportionalityAlt = exports.estLocalDisproportionalityAlt = exports.rangeDisproportionality = exports.estLocalDisproportionality = exports.rangeAsymmetry = exports.estLocalAsymmetry = exports.calcGamma = exports.calcMinimalInverseResponsiveness = exports.calcBigR = exports.calcDisproportionality = exports.calcGlobalSymmetry = exports.calcLopsidedOutcomes = exports.calcDeclination = exports.radiansToDegrees = exports.isASweep = exports.keyRVpoints = exports.calcMeanMedianDifference = exports.calcEfficiencyGap = exports.invertSVPoints = exports.inferGeometricSeatsBiasPoints = exports.estGeometricSeatsBias = exports.estVotesBias = exports.estSeatBias = exports.estPartisanBias = exports.calcTurnoutBias = exports.estUnearnedSeats = exports.calcDisproportionalityFromBest = exports.estSeatShare = exports.bestSeatShare = exports.bestSeats = void 0;
1741
+ exports.rangeUnearnedSeats = exports.estLocalUnearnedSeats = exports.rangeDisproportionalityAlt = exports.estLocalDisproportionalityAlt = exports.rangeDisproportionality = exports.estLocalDisproportionality = exports.rangeAsymmetry = exports.estLocalAsymmetry = exports.calcGamma = exports.calcMinimalInverseResponsiveness = exports.calcBigR = exports.calcDisproportionality = exports.calcGlobalSymmetry = exports.calcLopsidedOutcomes = exports.calcDeclination = exports.radiansToDegrees = exports.isASweep = exports.keyRVpoints = exports.calcMeanMedianDifference = exports.calcEfficiencyGapPrime = exports.calcEfficiencyGap = exports.invertSVPoints = exports.inferGeometricSeatsBiasPoints = exports.estGeometricSeatsBias = exports.estVotesBias = exports.estSeatBias = exports.estPartisanBias = exports.calcTurnoutBias = exports.estUnearnedSeats = exports.calcDisproportionalityFromBest = exports.estSeatShare = exports.bestSeatShare = exports.bestSeats = void 0;
1741
1742
  const U = __importStar(__webpack_require__(/*! ../utils/all */ "./lib/utils/all.ts"));
1742
1743
  const C = __importStar(__webpack_require__(/*! ../rate/dra-config */ "./lib/rate/dra-config.ts"));
1743
1744
  const method_1 = __webpack_require__(/*! ./method */ "./lib/partisan/method.ts");
@@ -1925,6 +1926,18 @@ function calcEfficiencyGap(Vf, Sf, shareType = 0 /* Democratic */) {
1925
1926
  return efficiencyGap;
1926
1927
  }
1927
1928
  exports.calcEfficiencyGap = calcEfficiencyGap;
1929
+ // For illustration purposes only
1930
+ // Assumes Democratic vote shares
1931
+ // Alternate specification with winner's bonus (R) heuristic built in:
1932
+ // - By convention, '+' = R bias; '-' = D bias
1933
+ // - If 1 <= R <= 2, EG is undefined (no/acceptable bias).
1934
+ function calcEfficiencyGapPrime(Vf, Sf, R) {
1935
+ let EG = undefined;
1936
+ if (R && ((R > 2) || (R < 1)))
1937
+ EG = (2.0 * (Vf - 0.5)) - (Sf - 0.5);
1938
+ return EG;
1939
+ }
1940
+ exports.calcEfficiencyGapPrime = calcEfficiencyGapPrime;
1928
1941
  // MEAN–MEDIAN DIFFERENCE
1929
1942
  //
1930
1943
  // From PlanScore.org: "The mean-median difference is a party’s median vote share
@@ -2044,7 +2057,7 @@ exports.calcLopsidedOutcomes = calcLopsidedOutcomes;
2044
2057
  //
2045
2058
  // * gSym is the area of asymmetry between the two curves.
2046
2059
  // * The choice of what base to normalize it by is somewhat arbitrary.
2047
- // * We actually only infer the S–V curver over the range [0.25–0.75] <<< 101 points (not 100!)
2060
+ // * We actually only infer the S–V curve over the range [0.25–0.75] <<< 101 points (not 100!)
2048
2061
  // * But dividing by 100 normalizes the area of asymmetry to the area of the SxV unit square.
2049
2062
  function calcGlobalSymmetry(dSVpoints, rSVpoints, S50V) {
2050
2063
  let gSym = 0.0;
@@ -2866,7 +2879,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
2866
2879
  return result;
2867
2880
  };
2868
2881
  Object.defineProperty(exports, "__esModule", ({ value: true }));
2869
- exports.adjustSplittingRating = exports.rateSplittingLegacy = exports.rateDistrictSplittingLegacy = exports.countySplitWorst = exports.countySplitBest = exports.rateCountySplittingLegacy = exports.rateSplitting = exports.rateDistrictSplitting = exports.rateCountySplitting = exports.bestTarget = exports.worstMultiplier = exports.minSplitting = exports.maxSplitting = exports.rateCompactness = exports.ratePolsby = exports.rateReock = exports.rateMinorityRepresentation = exports.rateCompetitiveness = exports.ratePartisanBias = exports.isAntimajoritarian = exports.adjustDeviation = exports.extraBonus = exports.rateProportionality = exports.ratePopulationDeviation = void 0;
2882
+ exports.adjustSplittingRating = exports.rateSplittingLegacy = exports.rateDistrictSplittingLegacy = exports.countySplitWorst = exports.countySplitBest = exports.rateCountySplittingLegacy = exports.rateSplitting = exports.rateDistrictSplitting = exports.rateCountySplitting = exports.bestTarget = exports.worstMultiplier = exports.minSplitting = exports.maxSplitting = exports.rateCompactness = exports.ratePolsby = exports.rateReock = exports.rateMinorityRepresentation = exports.rateCompetitiveness = exports.normalizePartisanBias = exports.ratePartisanBias = exports.isAntimajoritarian = exports.adjustDeviation = exports.extraBonus = exports.rateProportionality = exports.ratePopulationDeviation = void 0;
2870
2883
  const C = __importStar(__webpack_require__(/*! ./dra-config */ "./lib/rate/dra-config.ts"));
2871
2884
  const normalize_1 = __webpack_require__(/*! ../rate/normalize */ "./lib/rate/normalize.ts");
2872
2885
  const method_1 = __webpack_require__(/*! ../partisan/method */ "./lib/partisan/method.ts");
@@ -2982,6 +2995,7 @@ function normalizePartisanBias(biasPct, pctAt50) {
2982
2995
  const rating = 100 * Math.exp(-Math.abs(biasPct / b));
2983
2996
  return Math.round(rating);
2984
2997
  }
2998
+ exports.normalizePartisanBias = normalizePartisanBias;
2985
2999
  // RATE COMPETITIVENESS
2986
3000
  // Normalize overall competitiveness - Raw values are in the range [0.0–1.0].
2987
3001
  // But the practical max is more like 3/4's, so unitize that range to [0.0–1.0].