| 1123 | |
| 1124 | |
| 1125 | class Var(ArrayReduction): |
| 1126 | # Uses the parallel version of Welford's online algorithm (Chan 79') |
| 1127 | # (http://i.stanford.edu/pub/cstr/reports/cs/tr/79/773/CS-TR-79-773.pdf) |
| 1128 | _parameters = ["frame", "skipna", "ddof", "numeric_only", "split_every"] |
| 1129 | _defaults = {"skipna": True, "ddof": 1, "numeric_only": False, "split_every": False} |
| 1130 | |
| 1131 | @functools.cached_property |
| 1132 | def _meta(self): |
| 1133 | return make_meta( |
| 1134 | meta_nonempty(self.frame._meta).var( |
| 1135 | skipna=self.skipna, numeric_only=self.numeric_only |
| 1136 | ) |
| 1137 | ) |
| 1138 | |
| 1139 | @property |
| 1140 | def chunk_kwargs(self): |
| 1141 | return dict(skipna=self.skipna) |
| 1142 | |
| 1143 | @property |
| 1144 | def combine_kwargs(self): |
| 1145 | return {"skipna": self.skipna} |
| 1146 | |
| 1147 | @property |
| 1148 | def aggregate_kwargs(self): |
| 1149 | cols = self.frame.columns if self.frame.ndim == 1 else self.frame._meta.columns |
| 1150 | return dict( |
| 1151 | ddof=self.ddof, |
| 1152 | skipna=self.skipna, |
| 1153 | meta=self._meta, |
| 1154 | index=cols, |
| 1155 | ) |
| 1156 | |
| 1157 | @classmethod |
| 1158 | def reduction_chunk(cls, x, skipna): |
| 1159 | values = x.values.astype("f8") |
| 1160 | if skipna: |
| 1161 | return moment_chunk( |
| 1162 | values, sum=chunk.nansum, numel=nannumel, keepdims=True, axis=(0,) |
| 1163 | ) |
| 1164 | else: |
| 1165 | return moment_chunk(values, keepdims=True, axis=(0,)) |
| 1166 | |
| 1167 | @classmethod |
| 1168 | def reduction_combine(cls, parts, skipna): |
| 1169 | if skipna: |
| 1170 | return moment_combine(parts, sum=np.nansum, axis=(0,)) |
| 1171 | else: |
| 1172 | return moment_combine(parts, axis=(0,)) |
| 1173 | |
| 1174 | @classmethod |
| 1175 | def reduction_aggregate(cls, vals, ddof, skipna): |
| 1176 | if skipna: |
| 1177 | result = moment_agg(vals, sum=np.nansum, ddof=ddof, axis=(0,)) |
| 1178 | else: |
| 1179 | result = moment_agg(vals, ddof=ddof, axis=(0,)) |
| 1180 | return result |
| 1181 | |
| 1182 | |