biplotpy 0.4.0__py3-none-any.whl

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.
@@ -0,0 +1,242 @@
1
+ Metadata-Version: 2.4
2
+ Name: biplotpy
3
+ Version: 0.4.0
4
+ Summary: Biplots for Python, ported from R and validated against it: classical and HJ, canonical/CVA and HE plots, logistic (incl. constrained), STATIS, CA/MCA/CCA/RDA, PCoA/MDS with bootstrap, FA, PLS (incl. binary), GGE/AMMI and more, with their graphics
5
+ Author-email: Carlos Freire-Cadme <cfreirec@unemi.edu.ec>
6
+ License: GPL-3.0-or-later
7
+ Project-URL: Homepage, https://github.com/cfreirec/biplotpy
8
+ Project-URL: Source, https://github.com/cfreirec/biplotpy
9
+ Project-URL: Issues, https://github.com/cfreirec/biplotpy/issues
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
12
+ Classifier: Topic :: Scientific/Engineering :: Mathematics
13
+ Requires-Python: >=3.9
14
+ Description-Content-Type: text/markdown
15
+ License-File: LICENSE
16
+ Requires-Dist: numpy>=1.22
17
+ Requires-Dist: scipy>=1.8
18
+ Requires-Dist: pandas>=1.4
19
+ Requires-Dist: matplotlib>=3.5
20
+ Provides-Extra: test
21
+ Requires-Dist: pytest; extra == "test"
22
+ Dynamic: license-file
23
+
24
+ # biplotpy
25
+
26
+ Biplots for Python, with their graphics, ported from R and validated
27
+ numerically against the R packages they come from: **MultBiplotR**
28
+ (Vicente-Villardón, Vicente-González & Frutos-Bernal), GGEBiplots,
29
+ agricolae, smacof, vegan, ade4, FactoMineR, ca, pls, psych, GPArotation,
30
+ DistatisR, biplotbootGUI, MANOVA.RM and heplots.
31
+
32
+ | Method | Function |
33
+ |---|---|
34
+ | Classical biplots: GH / CMP (α=0), JK / RMP (α=1), SQRT (α=0.5) | `gh_biplot`, `jk_biplot`, `sqrt_biplot`, `pca_biplot(alpha=)` |
35
+ | HJ-Biplot (Galindo, 1986) | `hj_biplot` |
36
+ | Quality of representation, contributions (relative and to the factor) | `.summary()`, `.qualities()` |
37
+ | Canonical / MANOVA biplot with confidence circles (t, Bonferroni, Hotelling, χ²), MANOVA (Wilks, Pillai, Hotelling-Lawley, Roy), ANOVAs, LDA classification | `canonical_biplot`, `canonical_variate_analysis` |
38
+ | Bootstrap of the PCA biplot | `pca_bootstrap` |
39
+ | Supplementary individuals and continuous variables | `project_rows`, `add_continuous_variables` |
40
+ | Calibrated (predictive) axes | `biplot_scales`, `calibrated_axis`, `plot(calibrated=True)` |
41
+ | 12 initial transformations | `initial_transform` |
42
+ | Logistic biplots: binary, ordinal (cumulative logits), nominal | `binary_logistic_biplot`, `ordinal_logistic_biplot`, `nominal_logistic_biplot` |
43
+ | STATIS-ACT, Dual STATIS, Canonical STATIS-ACT | `statis`, `dual_statis`, `canonical_statis` |
44
+ | Dynamic biplot (Egido & Galindo) | `dynamic_biplot` |
45
+ | Metric (ratio) unfolding by SMACOF | `unfolding` |
46
+ | GGE biplot and AMMI | `gge_model`, `ammi` |
47
+ | DISTATIS (DistatisR) | `distatis` |
48
+ | Clustering and disjoint PCA (CDPCA, biplotbootGUI) | `cdpca` |
49
+ | Correspondence analysis (MultBiplotR CA, ca, FactoMineR) and multiple CA (FactoMineR MCA) | `ca`, `mca` |
50
+ | Canonical correspondence analysis (MultBiplotR CCA, vegan cca) and redundancy analysis (vegan rda, scalings 1-3) | `cca`, `rda` |
51
+ | Principal coordinates (MultBiplotR, ade4 dudi.pco), 17 binary coefficients, continuous and Gower distances | `pcoa`, `binary_distances`, `continuous_distances`, `gower_distances` |
52
+ | Metric and non-metric MDS (smacof::mds: ratio, interval, ordinal with primary/secondary/tertiary ties) | `mds` |
53
+ | External binary logistic biplot and ridge logistic regression (MultBiplotR) | `external_logistic_biplot`, `ridge_logistic` |
54
+ | Canonical analysis of distances (MultBiplotR) | `canonical_distance_analysis` |
55
+ | Factor-analysis biplot with GPA rotations (varimax, quartimax, equamax, parsimax, entropy, quartimin, oblimin) | `fa_biplot`, `rotate` |
56
+ | NIPALS biplot with missing values (ade4 nipals), sparse and truncated NIPALS | `nipals`, `nipals_biplot` |
57
+ | PLS regression biplot (pls::plsr) | `pls_regression`, `pls_biplot` |
58
+ | Co-inertia analysis (ade4) | `coinertia` |
59
+ | Polychoric correlations (psych) and polychoric ordinal biplot (MultBiplotR PolyBiplot) | `polychoric`, `polychoric_biplot` |
60
+ | Mardia's test; heteroscedastic MANOVA with WTS/MATS and parametric or wild bootstrap (MANOVA.RM); HE plots (heplots) | `mardia`, `manova_wts`, `he_matrices`, `he_ellipses`, `he_plot` |
61
+ | Multi-factor MANOVA (type II and III SSP, car::Anova) and HE plots with one ellipse per term | `manova_terms`, `he_plot_terms` |
62
+ | Constrained (restricted) logistic biplots, binary and ordinal (MultBiplotR) | `constrained_logistic_biplot`, `constrained_ordinal_logistic_biplot` |
63
+ | External ordinal logistic biplot and ridge cumulative-logit regression (MultBiplotR AddOrdVars2Biplot, OrdinalLogisticFit) | `external_ordinal_logistic_biplot`, `ridge_ordinal_logistic` |
64
+ | PLS regression with a binary response (PLSR1Bin) and PLS for binary data (BinaryPLSR) | `plsr1_bin`, `binary_plsr`, `plot_plsbin` |
65
+ | Log-frequency biplot and weighted ALS biplot (CrissCross) | `log_frequency_biplot`, `criss_cross` |
66
+ | Bootstrap of principal coordinates (BootstrapDistance) and of SMACOF MDS | `bootstrap_pcoa`, `bootstrap_mds`, `plot_bootstrap_ordination` |
67
+ | R-compatible random numbers and R's `optim(method = "CG")` | `RRNG`, `optim_cg` |
68
+
69
+ ```python
70
+ import biplotpy as bp
71
+ iris = bp.load_iris()
72
+ hj = bp.hj_biplot(iris.iloc[:, :4], dim=3)
73
+ hj.summary()["col_qualities"]
74
+ hj.plot(groups=iris["Species"])
75
+ cb = bp.canonical_biplot(iris.iloc[:, :4], iris["Species"])
76
+ cb.manova; cb.plot(radius="bonferroni")
77
+ ```
78
+
79
+ ## Validation
80
+
81
+ `tests/test_vs_multbiplotr.py` (fixtures generated by `tests/fixtures/make_fixtures.R`)
82
+ checks, up to the sign of each axis: coordinates, eigenvalues, inertia, scale
83
+ factor, structure correlations and contributions of 12 classical biplots
84
+ (α = 0, 0.5, 1, HJ; five transformations); 11 initial transformations; the
85
+ canonical biplot (group, variable, individual markers, weights, eigenvalues,
86
+ Wilks F, ANOVAs, four radii, contributions, qualities); supplementary
87
+ variables; calibrated scales (port of R's `pretty()`); MANOVA tables against
88
+ R's `summary.manova`; LDA accuracy against `MASS::lda`.
89
+
90
+ Phase 2 (`tests/test_phase2.py`, fixtures from `fixtures/make_phase2.R`):
91
+
92
+ | Method | Reference | Max. abs. difference |
93
+ |---|---|---|
94
+ | `statis` | MultBiplotR::StatisBiplot; RV also vs ade4::statis | < 1e-13 |
95
+ | `canonical_statis` | MultBiplotR::CanonicalStatisBiplot | < 1e-14 |
96
+ | `dual_statis` | core lines of MultBiplotR::DualStatisBiplot (the function itself is unfinished) | < 1e-13 |
97
+ | `unfolding` (ratio) | smacof::unfolding 2.1-7 (same iterations, stress-1, configurations) | < 1e-13 |
98
+ | `gge_model` | GGEBiplots::GGEModel, 4 SVP x 3 centerings | < 1e-13 |
99
+ | `ammi` | agricolae::AMMI (ANOVA, Gollob table, scores) | < 1e-10 |
100
+ | `ordinal_logistic_fit` | MASS::polr | < 3e-7 |
101
+ | `nominal_logistic_fit` | nnet::multinom | < 2e-6 |
102
+ | `binary_logistic_biplot` | R optim (BFGS) on the same penalized objective | same optimum (eta < 1e-3) |
103
+ | `dynamic_biplot` | algebraic identities (reference occasion reproduces the biplot; mean of trajectories = reference) | < 1e-10 |
104
+
105
+ Phase 3 (`tests/test_phase3.py`, fixtures from `fixtures/make_phase3.R`):
106
+
107
+ | Method | Reference | Max. abs. difference |
108
+ |---|---|---|
109
+ | `mardia` | psych::mardia | < 1e-12 |
110
+ | `manova_wts` | MANOVA.RM 0.6.0 (statistics sourced from the package) | WTS, MATS, chi-square p < 1e-12; bootstrap p within Monte Carlo error |
111
+ | `he_matrices`, `roy_crit` | car::Anova (SSP), heplots Roy.crit | < 1e-12 |
112
+ | `distatis` | DistatisR 1.1.2 (MFA, SUMPCA, NUCLEAR norms) | < 1e-14 (NUCLEAR ~1e-8, see note) |
113
+ | `cdpca` | biplotbootGUI::CDpca from the same start | identical partitions, F < 1e-12 |
114
+
115
+ Note on DISTATIS with the nuclear norm: DistatisR sums the square roots of the
116
+ eigenvalues larger than 2 eps; a numerically zero eigenvalue of a
117
+ double-centred matrix can pass that threshold in one library and not in the
118
+ other, which moves the results in the 8th decimal.
119
+
120
+ Simulated recovery: STATIS recovers a common configuration and down-weights a
121
+ pure-noise table; unfolding recovers an exact configuration (stress < 1e-3);
122
+ logistic biplots recover the true probabilities, with correlation increasing
123
+ with n and p (0.81 at 100 x 10, 0.97 at 400 x 80 for the binary model).
124
+
125
+ Caveat: the deviance "tests" of the logistic biplots use df = dim as in
126
+ MultBiplotR, but the row scores are estimated from the same data, so the
127
+ p-values are optimistic; use them as descriptive fit indices. Joint ML with a
128
+ very small penalization overfits (near separation); use penalization >= 0.5
129
+ for small tables.
130
+
131
+ Phase 4 (`tests/test_phase4.py`, fixtures from `fixtures/make_phase4.R`):
132
+
133
+ | Method | Reference | Max. abs. difference |
134
+ |---|---|---|
135
+ | `ca` | MultBiplotR::CA (alpha 0, 0.5, 1), ca::ca | < 1e-14 |
136
+ | `mca` | FactoMineR::MCA (eigenvalues, individuals, categories, eta2) | < 1e-13 |
137
+ | `cca` | MultBiplotR::CCA (all scores), vegan::cca (eigenvalues, total inertia) | < 1e-13 |
138
+ | `rda` | vegan::rda + scores (scalings 1, 2, 3; scaled and unscaled) | < 1e-12 |
139
+ | `pcoa`, `binary_distances` | MultBiplotR::PrincipalCoordinates, ade4::dudi.pco, BinaryDistances (8 coefficients) | < 1e-14 |
140
+ | `mds` | smacof::mds (ratio, interval, ordinal primary and secondary): same iterations | < 1e-10 |
141
+ | `external_logistic_biplot` | MultBiplotR::ExternalBinaryLogisticBiplot | < 1e-10 |
142
+ | `canonical_distance_analysis` | MultBiplotR::CanonicalDistanceAnalysis | < 1e-12 |
143
+ | `rotate` | GPArotation (GPForth, GPFoblq) | < 1e-8 |
144
+ | `fa_biplot` | MultBiplotR::FA.Biplot loadings; psych::factor.scores (Bartlett, Thurstone) | < 1e-10 |
145
+ | `nipals` | ade4::nipals with missing values | < 1e-10 |
146
+ | `pls_regression` | pls::plsr (oscorespls) | < 1e-6 (iterative) |
147
+ | `coinertia` | ade4::coinertia | < 1e-10 |
148
+ | `polychoric` | psych::polychoric | < 1.2e-4 (psych's optimizer tolerance) |
149
+
150
+ Phase 5, version 0.4.0 (`tests/test_phase5.py`, fixtures from `fixtures/make_phase5.R`):
151
+
152
+ | Method | Reference | Max. abs. difference |
153
+ |---|---|---|
154
+ | `constrained_logistic_biplot` | MultBiplotR::ConstrainedLogisticBiplot (coefficients, coordinates, deviances, pseudo R2, loadings, sensitivity, specificity, supplementary variables) | < 1e-13 |
155
+ | `constrained_ordinal_logistic_biplot` | MultBiplotR::ConstrainedOrdinalLogisticBiplot | < 1e-12 |
156
+ | `external_ordinal_logistic_biplot` | MultBiplotR::AddOrdVars2Biplot (see note 1) | < 1e-12 |
157
+ | `plsr1_bin` | MultBiplotR::PLSR1Bin, algorithm 1 (see note 2) | < 1e-14 |
158
+ | `binary_plsr` | MultBiplotR::BinaryPLSR, same seed: same random starts and same CG optimizer | intercepts < 1e-15; scores and loadings < 1e-4 (note 3) |
159
+ | `optim_cg` | R's optim(method = "CG") | same path (Rosenbrock: same counts, parameters < 1e-12) |
160
+ | `log_frequency_biplot` | MultBiplotR::LogFrequencyBiplot (CrissCross) with the same random start | < 1e-13 |
161
+ | `bootstrap_pcoa` | MultBiplotR::BootstrapDistance, same seed, sampling and permutation | < 1e-12 |
162
+ | `bootstrap_mds` | the same residual bootstrap in R on smacof::mds (note 4) | < 1e-13 |
163
+ | `manova_terms` | car::Anova on a two-factor unbalanced MANOVA, types II and III | < 1e-12 |
164
+
165
+ Notes. (1) `AddOrdVars2Biplot` converts the factors to integers and
166
+ `RidgeOrdinalLogistic` then stops ("The dependent variable must be
167
+ ordinal"); the reference is computed with that conversion disabled. (2) In
168
+ R >= 4.2 `PLSR1Bin` stops inside `RidgeBinaryLogistic` (`class(y) ==
169
+ "formula"` on a matrix); the reference uses `class(y)[1]`. Its algorithm 2
170
+ refers to undefined objects and is not ported. (3) BinaryPLSR alternates
171
+ conjugate-gradient fits from random starts; biplotpy draws the same starts
172
+ (R's generator) and runs R's CG algorithm, but the path amplifies
173
+ differences in the last digits of the arithmetic (BLAS summation order), so
174
+ results agree to about 1e-4. (4) `BootstrapSmacof` stops (it reads `Sol$Dhat`,
175
+ which `SMACOF` does not return); `bootstrap_mds` resamples the residuals
176
+ between disparities and configuration distances, truncates negative
177
+ dissimilarities at 0, refits from the original configuration and aligns by
178
+ orthogonal Procrustes; the R reference runs the same scheme on smacof::mds.
179
+ `MultBiplotR::SimpleProcrustes`, used by `BootstrapDistance`, applies the
180
+ transpose of the optimal rotation (it fixes reflections but turns small
181
+ rotations the wrong way); `bootstrap_pcoa` uses the optimal rotation by
182
+ default and `procrustes="MultBiplotR"` reproduces R. In the constrained
183
+ binary logistic biplot the deviance tests use `dim` degrees of freedom (R
184
+ uses 1) and the percentages of correct classification threshold the
185
+ probability at 0.5 (R thresholds the linear predictor).
186
+
187
+ ## Graphics
188
+
189
+ Every method has a plot (`examples/gallery.py` renders all 49 figures into
190
+ `examples/gallery/`): classical biplots with arrows or calibrated axes,
191
+ group concentration ellipses, convex hulls, alpha-bags and densities
192
+ (ggbiplot, factoextra, biplotEZ), quality colouring, correlation circle,
193
+ scree and contribution plots, 3-D biplot (bpca), bootstrap regions;
194
+ canonical/CVA biplot with confidence circles, classification regions and
195
+ calibrated axes (biplotEZ); HE plots (heplots); binary/ordinal logistic
196
+ biplots and nominal prediction regions; STATIS interstructure, compromise
197
+ and trajectories; dynamic biplot; unfolding; DISTATIS; CDPCA; the ten GGE
198
+ views of GGEBiplots (which-won-where, mean vs stability,
199
+ discriminativeness vs representativeness, rankings...); AMMI1/AMMI2;
200
+ CA/MCA maps, CCA and RDA triplots; PCoA/MDS with supplementary variables;
201
+ external logistic biplot; canonical analysis of distances; co-inertia;
202
+ FA, NIPALS and PLS biplots; polychoric biplot; constrained and external
203
+ ordinal logistic biplots; PLSR1Bin and BinaryPLSR biplots; log-frequency
204
+ biplot; bootstrap clouds of PCoA and MDS; HE plots of several factors. Their geometry is checked by
205
+ tests (calibrated axes read the CVA group means exactly; ellipses and
206
+ alpha-bags have their nominal coverage) and every figure is rendered in the
207
+ test suite.
208
+
209
+ ## Differences from MultBiplotR (corrections)
210
+
211
+ See `biplotpy.FIXES`: within-groups standardization divides by the standard
212
+ deviation (MultBiplotR divides by the variance); the initial logit is applied
213
+ (MultBiplotR leaves the data untransformed); supplementary rows are projected
214
+ after transforming them (MultBiplotR projects them untransformed); STATIS
215
+ honours the requested transformation; Dual STATIS is complete; the binary
216
+ logistic objective and gradient are consistent; NIPALS, Coinertia, PLSR,
217
+ FA scores, PolyBiplot, BinaryDistances and weighted PCoA are corrected (16
218
+ entries in total).
219
+
220
+ ## Not ported
221
+
222
+ Already available in Python, so not duplicated: CA, MCA, MFA, FAMD
223
+ (`prince`); CCA, RDA, PCoA, PERMDISP/betadisper (`scikit-bio`); PPML with
224
+ high-dimensional fixed effects (`pyfixest`); Ledoit-Wolf shrinkage and LDA
225
+ (`scikit-learn`); nearest PSD matrix (`statsmodels.stats.correlation_tools.cov_nearest`);
226
+ orthogonal Procrustes and generalized eigenproblems (`scipy`).
227
+
228
+ Not included, and why:
229
+
230
+ | Method (R) | Reason |
231
+ |---|---|
232
+ | Graphical interfaces (BiplotGUI, dynBiplotGUI, multibiplotGUI, biplotbootGUI's GUI) | Interactive Tcl/Tk applications, not statistical methods; every method behind them is in biplotpy with a matplotlib plot. |
233
+ | Functional PCA biplot (`BiplotFPCA`) | Needs a functional-data layer (basis expansions and smoothing of curves) that biplotpy does not have; it would be a separate library. |
234
+ | TetraDualStatis (Dual STATIS on tetrachoric correlations of binary tables) | Its help page has no example ("Not yet") and it depends on psych's tetrachoric estimates; there is no documented use to validate against. |
235
+ | Tucker and Parafac (ThreeWay) | Three-way decompositions with their own estimation and identification problems; available in Python in `tensorly`, so not duplicated. |
236
+ | STATICO | Depends on ade4's `ktab`/`statico` machinery (partial triadic analysis of co-inertia tables); porting ade4's k-table classes is outside the scope of a biplot library. |
237
+ | Estimation with mirt (`BinaryLogBiplotMirt`, ordinal factor analysis) | Item-response estimation by marginal ML with numerical integration (mirt); Python has no validated equivalent. biplotpy fits logistic biplots by penalized joint ML, which is MultBiplotR's default. |
238
+ | EM estimation of logistic biplots (`BinaryLogBiplotEM`, `OrdLogBipEM`) | Marginal ML with Gauss-Hermite quadrature, the same model as mirt; not ported for the same reason. |
239
+ | `PLSR1Bin` algorithm 2 | It refers to objects that are never defined (`c0`, `c`) and cannot run in R. |
240
+
241
+ A tutorial in Spanish with an example of each family of methods is in
242
+ `examples/tutorial_es.ipynb`.
@@ -0,0 +1,32 @@
1
+ biplotpy/__init__.py,sha256=m65NMBh3CrbkzzC7QcZpN3bK6WdxL-VMeHCirx4LL8g,5251
2
+ biplotpy/bootdist.py,sha256=gwqLzyHTTWJ4bX4p5TgKLyYVMyvFsTiLvqM_m46AGO0,7569
3
+ biplotpy/canonical.py,sha256=gwQ_aKiZ--XWSciAmLN_Ym45P5xAfj5D_WrJFic1uxo,9003
4
+ biplotpy/cdpca.py,sha256=nXIMo8hNXr-3b24-Kq81ugJ9gYOS6mNLg2mjbmjUzao,4451
5
+ biplotpy/classical.py,sha256=_qOiE3C_LykcXNps--4ZCmBeyEC0PUAXkyrhPgNy3Z0,7325
6
+ biplotpy/correspondence.py,sha256=VZ71xQPIzy_VBwnjX0EZSlEqSv8VbMK38SHc2H0Nkss,11201
7
+ biplotpy/distances.py,sha256=mCg-O_UO5p6UYcLxlMlA66DKU94cizaWedrJlIpHCyU,19030
8
+ biplotpy/distatis.py,sha256=7fc6xWxpQdASHiwjwyzaW4BRAheavbVPi5Irm_LGHSs,2805
9
+ biplotpy/dynamic.py,sha256=QY8eQfwVyc6Ai-tAtea2bRKYGLtnVFpvsrNe2rl50Bg,2928
10
+ biplotpy/extras.py,sha256=d33uWPZ_SURRKCeJWdpHmOvrtbZMhXNQXoXbc9lgeW0,7451
11
+ biplotpy/factor.py,sha256=kcXM3FTQ6Gk3qr29DBZJt5bFsRBp3bAlCKoGyPKOJhc,25125
12
+ biplotpy/gxe.py,sha256=zXAOIJcHyQ49SGPMG2vLeykYsK_tkGYwa-VvKGdd5D4,6154
13
+ biplotpy/logfreq.py,sha256=IIdByRf9V4_yaNDbqegkLgJ0Lv4yLV7vTR_Xs6xyITo,5339
14
+ biplotpy/logistic.py,sha256=nNH8-oZl6_YBeN2XEBHI49t52FLdKeZWy_onZwwd020,16033
15
+ biplotpy/multitest.py,sha256=zIH6k3_7WcWfLAn3cEkk3QuKcmlId32-9h0viXB3tus,12913
16
+ biplotpy/plot.py,sha256=5y9OS_2jIF_Tha0dnZtjIMEY7LOw3pV2x7D-YfvaKZQ,44219
17
+ biplotpy/plsbin.py,sha256=vH5puBhq0UlQD_lqohFQNvGaZ494hWc_6Qpb8xQZdx0,9395
18
+ biplotpy/restricted.py,sha256=JJw5q-oYYwT9pERBmW7hQjKzcBjMr0lGnop8wnZ83cs,15929
19
+ biplotpy/roptim.py,sha256=w6L65BKU1bRKjySXSBiitZBVtvPDZ3oqBRafGgiWgVQ,4252
20
+ biplotpy/rrng.py,sha256=V9JfD0N9kToO84pAdHVscwzQQNhutE5Afq3qPCZq5Ws,5547
21
+ biplotpy/statis.py,sha256=CiEPo6gDjngr7XyYQrS0K5yB5_V675ao5seWadzqYdI,8202
22
+ biplotpy/transforms.py,sha256=UJsD1GFbAe69j69MXG4felRfkkWLkI2rrrDYexGCrBw,8222
23
+ biplotpy/unfolding.py,sha256=hKk2AvHRTXeqDVSrFY82Gs_tMQrxUEfCgUzzwF1jtgo,2972
24
+ biplotpy/utils.py,sha256=WU-YbSn-8is3JjoVbBo_EizAbeZTk9yzzAC_EhWeE-o,2360
25
+ biplotpy/datasets/__init__.py,sha256=I6c86Ryn-LOl1zmvh6RM_0S1qPrivuZe0WiIsvpiF84,468
26
+ biplotpy/datasets/iris.csv,sha256=1EDa3tGGNMHaLwXmsaMDhfKsps04RVsx0mPhZXJgESo,4026
27
+ biplotpy/datasets/mtcars.csv,sha256=aNokC_i-cYRsIwTrSHhCPfV3oofBfaSqVBvCl3by6tk,1787
28
+ biplotpy-0.4.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
29
+ biplotpy-0.4.0.dist-info/METADATA,sha256=M7EXoTsNqMTvymTAz5xts17Bn3SFag3JRp4-X6IL8fQ,16431
30
+ biplotpy-0.4.0.dist-info/WHEEL,sha256=mOdXR9C3wMVov7cSY8PY-XCzo3SmmWCHvGQr5csJoao,91
31
+ biplotpy-0.4.0.dist-info/top_level.txt,sha256=7afim2ZHUQTAObOWoyYTlr6v-ovbXPuu5t-ROV34-Oo,9
32
+ biplotpy-0.4.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (84.2.1)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+