-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcontributing.html
596 lines (579 loc) · 42 KB
/
contributing.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Contributing to mvlearn — mvlearn alpha documentation</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/sg_gallery.css" type="text/css" />
<link rel="stylesheet" href="_static/sg_gallery-binder.css" type="text/css" />
<link rel="stylesheet" href="_static/sg_gallery-dataframe.css" type="text/css" />
<link rel="stylesheet" href="_static/sg_gallery-rendered-html.css" type="text/css" />
<link rel="shortcut icon" href="_static/mvlearn-logo-32x32.ico"/>
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/js/copybutton.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Changelog" href="changelog.html" />
<link rel="prev" title="Utility Functions" href="references/utils.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html">
<img src="_static/mvlearn-logo-transparent-white.png" class="logo" alt="Logo"/>
</a>
<div class="version">
0.5.0
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Using mvlearn</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="index.html">Overview of mvlearn</a></li>
<li class="toctree-l1"><a class="reference internal" href="install.html">Install</a><ul>
<li class="toctree-l2"><a class="reference internal" href="install.html#pip-installation-instructions">pip installation instructions</a></li>
<li class="toctree-l2"><a class="reference internal" href="install.html#conda-installation-instructions">conda installation instructions</a><ul>
<li class="toctree-l3"><a class="reference internal" href="install.html#including-optional-dependencies-for-full-functionality">Including optional dependencies for full functionality</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="install.html#python-package-dependencies">Python package dependencies</a></li>
<li class="toctree-l2"><a class="reference internal" href="install.html#hardware-requirements">Hardware requirements</a></li>
<li class="toctree-l2"><a class="reference internal" href="install.html#os-requirements">OS Requirements</a></li>
<li class="toctree-l2"><a class="reference internal" href="install.html#testing">Testing</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="auto_examples/index.html">Examples Gallery</a><ul>
<li class="toctree-l2"><a class="reference internal" href="auto_examples/index.html#examples-on-cluster">Examples on cluster</a><ul>
<li class="toctree-l3"><a class="reference internal" href="auto_examples/cluster/plot_mv_coregularized_spectral_tutorial.html">Multiview Coregularized Spectral Clustering Comparison</a></li>
<li class="toctree-l3"><a class="reference internal" href="auto_examples/cluster/plot_mv_spherical_kmeans_tutorial.html">Multiview Spherical KMeans Tutorial</a></li>
<li class="toctree-l3"><a class="reference internal" href="auto_examples/cluster/plot_mv_kmeans_tutorial.html">Multiview KMeans Tutorial</a></li>
<li class="toctree-l3"><a class="reference internal" href="auto_examples/cluster/plot_mv_vs_singleview_spectral.html">Multiview vs. Singleview Spectral Clustering of UCI Multiview Digits</a></li>
<li class="toctree-l3"><a class="reference internal" href="auto_examples/cluster/plot_mv_kmeans_validation_simulated.html">Multiview vs. Singleview KMeans</a></li>
<li class="toctree-l3"><a class="reference internal" href="auto_examples/cluster/plot_mv_spectral_tutorial.html">Multiview Spectral Clustering Tutorial</a></li>
<li class="toctree-l3"><a class="reference internal" href="auto_examples/cluster/plot_mv_spectral_validation_simulated.html">Multiview vs. Singleview Spectral Clustering</a></li>
<li class="toctree-l3"><a class="reference internal" href="auto_examples/cluster/plot_mv_spectral_validation_complex.html">Conditional Independence of Views on Multiview Spectral Clustering</a></li>
<li class="toctree-l3"><a class="reference internal" href="auto_examples/cluster/plot_mv_kmeans_validation_complex.html">Conditional Independence of Views on Multiview KMeans Clustering</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="auto_examples/index.html#examples-on-compose">Examples on compose</a><ul>
<li class="toctree-l3"><a class="reference internal" href="auto_examples/compose/plot_multiview_construction.html">Constructing multiple views to classify singleview data</a></li>
<li class="toctree-l3"><a class="reference internal" href="auto_examples/compose/plot_pipeline_sklearn_integration.html">Integrating mvlearn with scikit-learn</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="auto_examples/index.html#examples-on-datasets">Examples on datasets</a><ul>
<li class="toctree-l3"><a class="reference internal" href="auto_examples/datasets/plot_load_ucimultifeature.html">Loading and Viewing the UCI Multiple Features Dataset</a></li>
<li class="toctree-l3"><a class="reference internal" href="auto_examples/datasets/plot_gaussianmixtures.html">Generating Multiview Data from Gaussian Mixtures</a></li>
<li class="toctree-l3"><a class="reference internal" href="auto_examples/datasets/plot_nutrimouse.html">An mvlearn case study: the Nutrimouse dataset</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="auto_examples/index.html#examples-on-decomposition">Examples on decomposition</a><ul>
<li class="toctree-l3"><a class="reference internal" href="auto_examples/decomposition/plot_group_ica_tutorial.html">ICA: a tutorial</a></li>
<li class="toctree-l3"><a class="reference internal" href="auto_examples/decomposition/plot_mv_ica_tutorial.html">Multiview Independent Component Analysis (ICA) Comparison</a></li>
<li class="toctree-l3"><a class="reference internal" href="auto_examples/decomposition/plot_ajive_tutorial.html">Angle-based Joint and Individual Variation Explained (AJIVE)</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="auto_examples/index.html#examples-on-embed">Examples on embed</a><ul>
<li class="toctree-l3"><a class="reference internal" href="auto_examples/embed/plot_gcca_tutorial.html">Generalized Canonical Correlation Analysis (GCCA) Tutorial</a></li>
<li class="toctree-l3"><a class="reference internal" href="auto_examples/embed/plot_mcca_tutorial.html">CCA Tutorial</a></li>
<li class="toctree-l3"><a class="reference internal" href="auto_examples/embed/plot_dcca_tutorial.html">Deep CCA (DCCA) Tutorial</a></li>
<li class="toctree-l3"><a class="reference internal" href="auto_examples/embed/plot_kmcca_pgso_tutorial.html">Partial Gram-Schmidt Orthogonalization (PGSO) for KMCCA</a></li>
<li class="toctree-l3"><a class="reference internal" href="auto_examples/embed/plot_mvmds_tutorial.html">Multidimensional Scaling (MVMDS) Tutorial</a></li>
<li class="toctree-l3"><a class="reference internal" href="auto_examples/embed/plot_cca_comparison.html">Comparing CCA Variants</a></li>
<li class="toctree-l3"><a class="reference internal" href="auto_examples/embed/plot_kmcca_tutorial.html">Kernel MCCA (KMCCA) Tutorial</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="auto_examples/index.html#examples-on-plotting">Examples on plotting</a><ul>
<li class="toctree-l3"><a class="reference internal" href="auto_examples/plotting/plot_quick_visualize_tutorial.html">Quickly Visualizing Multiview Data</a></li>
<li class="toctree-l3"><a class="reference internal" href="auto_examples/plotting/plot_crossviews_plot.html">Plotting Multiview Data with a Cross-view Plot</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="auto_examples/index.html#examples-on-semi-supervised">Examples on semi_supervised</a><ul>
<li class="toctree-l3"><a class="reference internal" href="auto_examples/semi_supervised/plot_cotraining_regression.html">2-View Semi-Supervised Regression</a></li>
<li class="toctree-l3"><a class="reference internal" href="auto_examples/semi_supervised/plot_cotraining_classification.html">2-View Semi-Supervised Classification</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="references/index.html">Reference</a><ul>
<li class="toctree-l2"><a class="reference internal" href="references/embed.html">Embedding</a><ul>
<li class="toctree-l3"><a class="reference internal" href="references/embed.html#canonical-correlation-analysis-cca">Canonical Correlation Analysis (CCA)</a></li>
<li class="toctree-l3"><a class="reference internal" href="references/embed.html#multiview-canonical-correlation-analysis-mcca">Multiview Canonical Correlation Analysis (MCCA)</a></li>
<li class="toctree-l3"><a class="reference internal" href="references/embed.html#kernel-mcca">Kernel MCCA</a></li>
<li class="toctree-l3"><a class="reference internal" href="references/embed.html#generalized-canonical-correlation-analysis-gcca">Generalized Canonical Correlation Analysis (GCCA)</a></li>
<li class="toctree-l3"><a class="reference internal" href="references/embed.html#deep-canonical-correlation-analysis-dcca">Deep Canonical Correlation Analysis (DCCA)</a></li>
<li class="toctree-l3"><a class="reference internal" href="references/embed.html#multiview-multidimensional-scaling">Multiview Multidimensional Scaling</a></li>
<li class="toctree-l3"><a class="reference internal" href="references/embed.html#split-autoencoder">Split Autoencoder</a></li>
<li class="toctree-l3"><a class="reference internal" href="references/embed.html#dcca-utilities">DCCA Utilities</a></li>
<li class="toctree-l3"><a class="reference internal" href="references/embed.html#dimension-selection">Dimension Selection</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="references/decomposition.html">Decomposition</a><ul>
<li class="toctree-l3"><a class="reference internal" href="references/decomposition.html#multiview-ica">Multiview ICA</a></li>
<li class="toctree-l3"><a class="reference internal" href="references/decomposition.html#group-ica">Group ICA</a></li>
<li class="toctree-l3"><a class="reference internal" href="references/decomposition.html#group-pca">Group PCA</a></li>
<li class="toctree-l3"><a class="reference internal" href="references/decomposition.html#angle-based-joint-and-individual-variation-explained-ajive">Angle-Based Joint and Individual Variation Explained (AJIVE)</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="references/cluster.html">Clustering</a><ul>
<li class="toctree-l3"><a class="reference internal" href="references/cluster.html#multiview-spectral-clustering">Multiview Spectral Clustering</a></li>
<li class="toctree-l3"><a class="reference internal" href="references/cluster.html#co-regularized-multiview-spectral-clustering">Co-Regularized Multiview Spectral Clustering</a></li>
<li class="toctree-l3"><a class="reference internal" href="references/cluster.html#multiview-k-means">Multiview K Means</a></li>
<li class="toctree-l3"><a class="reference internal" href="references/cluster.html#multiview-spherical-k-means">Multiview Spherical K Means</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="references/semi_supervised.html">Semi-Supervised</a><ul>
<li class="toctree-l3"><a class="reference internal" href="references/semi_supervised.html#cotraining-classifier">Cotraining Classifier</a></li>
<li class="toctree-l3"><a class="reference internal" href="references/semi_supervised.html#cotraining-regressor">Cotraining Regressor</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="references/model_selection.html">Model Selection</a><ul>
<li class="toctree-l3"><a class="reference internal" href="references/model_selection.html#cross-validation">Cross Validation</a></li>
<li class="toctree-l3"><a class="reference internal" href="references/model_selection.html#train-test-split">Train-Test Split</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="references/compose.html">Compose</a><ul>
<li class="toctree-l3"><a class="reference internal" href="references/compose.html#averagemerger">AverageMerger</a></li>
<li class="toctree-l3"><a class="reference internal" href="references/compose.html#concatmerger">ConcatMerger</a></li>
<li class="toctree-l3"><a class="reference internal" href="references/compose.html#randomgaussianprojection">RandomGaussianProjection</a></li>
<li class="toctree-l3"><a class="reference internal" href="references/compose.html#randomsubspacemethod">RandomSubspaceMethod</a></li>
<li class="toctree-l3"><a class="reference internal" href="references/compose.html#simplesplitter">SimpleSplitter</a></li>
<li class="toctree-l3"><a class="reference internal" href="references/compose.html#viewclassifier">ViewClassifier</a></li>
<li class="toctree-l3"><a class="reference internal" href="references/compose.html#viewtransformer">ViewTransformer</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="references/datasets.html">Multiview Datasets</a><ul>
<li class="toctree-l3"><a class="reference internal" href="references/datasets.html#uci-multiple-feature-dataset">UCI multiple feature dataset</a></li>
<li class="toctree-l3"><a class="reference internal" href="references/datasets.html#nutrimouse-dataset">Nutrimouse dataset</a></li>
<li class="toctree-l3"><a class="reference internal" href="references/datasets.html#data-simulator">Data Simulator</a></li>
<li class="toctree-l3"><a class="reference internal" href="references/datasets.html#factor-model">Factor Model</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="references/plotting.html">Plotting</a><ul>
<li class="toctree-l3"><a class="reference internal" href="references/plotting.html#quick-visualize">Quick Visualize</a></li>
<li class="toctree-l3"><a class="reference internal" href="references/plotting.html#crossviews-plot">Crossviews Plot</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="references/utils.html">Utility Functions</a><ul>
<li class="toctree-l3"><a class="reference internal" href="references/utils.html#io">IO</a></li>
</ul>
</li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Developer Information</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">Contributing to mvlearn</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#submitting-a-bug-report-or-a-feature-request">Submitting a bug report or a feature request</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#how-to-make-a-good-bug-report">How to make a good bug report</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#contributing-code">Contributing Code</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#pull-request-checklist">Pull Request Checklist</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#guidelines">Guidelines</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#coding-guidelines">Coding Guidelines</a></li>
<li class="toctree-l3"><a class="reference internal" href="#docstring-guidelines">Docstring Guidelines</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#api-of-mvlearn-objects">API of mvlearn Objects</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#estimators">Estimators</a></li>
<li class="toctree-l3"><a class="reference internal" href="#additional-functionality">Additional Functionality</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="changelog.html">Changelog</a><ul>
<li class="toctree-l2"><a class="reference internal" href="changelog.html#version-0-5-0">Version 0.5.0</a></li>
<li class="toctree-l2"><a class="reference internal" href="changelog.html#version-0-4-1">Version 0.4.1</a></li>
<li class="toctree-l2"><a class="reference internal" href="changelog.html#version-0-4-0">Version 0.4.0</a><ul>
<li class="toctree-l3"><a class="reference internal" href="changelog.html#id5">mvlearn.compose</a></li>
<li class="toctree-l3"><a class="reference internal" href="changelog.html#id13">mvlearn.construct</a></li>
<li class="toctree-l3"><a class="reference internal" href="changelog.html#id15">mvlearn.decomposition</a></li>
<li class="toctree-l3"><a class="reference internal" href="changelog.html#id17">mvlearn.embed</a></li>
<li class="toctree-l3"><a class="reference internal" href="changelog.html#id21">mvlearn.model_selection</a></li>
<li class="toctree-l3"><a class="reference internal" href="changelog.html#id24">mvlearn.utils</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="changelog.html#version-0-3-0">Version 0.3.0</a></li>
<li class="toctree-l2"><a class="reference internal" href="changelog.html#patch-0-2-1">Patch 0.2.1</a></li>
<li class="toctree-l2"><a class="reference internal" href="changelog.html#version-0-2-0">Version 0.2.0</a></li>
<li class="toctree-l2"><a class="reference internal" href="changelog.html#version-0-1-0">Version 0.1.0</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="license.html">License</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Useful Links</span></p>
<ul>
<li class="toctree-l1"><a class="reference external" href="https://github.com/mvlearn/mvlearn">mvlearn @ GitHub</a></li>
<li class="toctree-l1"><a class="reference external" href="https://pypi.org/project/mvlearn/">mvlearn @ PyPI</a></li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/mvlearn/mvlearn/issues">Issue Tracker</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">mvlearn</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home"></a> »</li>
<li>Contributing to mvlearn</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/mvlearn/mvlearn/blob/main/docs/contributing.rst" class="fa fa-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="contributing-to-mvlearn">
<h1>Contributing to mvlearn<a class="headerlink" href="#contributing-to-mvlearn" title="Permalink to this headline">¶</a></h1>
<p>(adopted from scikit-learn)</p>
<section id="submitting-a-bug-report-or-a-feature-request">
<h2>Submitting a bug report or a feature request<a class="headerlink" href="#submitting-a-bug-report-or-a-feature-request" title="Permalink to this headline">¶</a></h2>
<p>We use GitHub issues to track all bugs and feature requests; feel free
to open an issue if you have found a bug or wish to see a feature
implemented.</p>
<p>In case you experience issues using this package, do not hesitate to
submit a ticket to the
<a class="reference external" href="https://github.com/mvlearn/mvlearn/issues">Bug Tracker</a>. You
are also welcome to post feature requests or pull requests.</p>
<p>It is recommended to check that your issue complies with the following
rules before submitting:</p>
<ul class="simple">
<li><p>Verify that your issue is not being currently addressed by other
<a class="reference external" href="https://github.com/mvlearn/mvlearn/issues?q=">issues</a> or
<a class="reference external" href="https://github.com/mvlearn/mvlearn/pulls?q=">pull requests</a>.</p></li>
<li><p>If you are submitting a bug report, we strongly encourage you to
follow the guidelines in <a class="reference internal" href="#filing-bugs"><span class="std std-ref">How to make a good bug report</span></a>.</p></li>
<li><p>Always make sure your code follows the general <a class="reference internal" href="#guidelines"><span class="std std-ref">Guidelines</span></a>
and adheres to the <a class="reference internal" href="#api-of-mvlearn-objects"><span class="std std-ref">API of mvlearn Objects</span></a>.</p></li>
</ul>
<section id="how-to-make-a-good-bug-report">
<span id="filing-bugs"></span><h3>How to make a good bug report<a class="headerlink" href="#how-to-make-a-good-bug-report" title="Permalink to this headline">¶</a></h3>
<p>When you submit an issue to
<a class="reference external" href="https://github.com/mvlearn/mvlearn/issues">Github</a>, please
do your best to follow these guidelines! This will make it a lot easier
to provide you with good feedback:</p>
<ul>
<li><p>The ideal bug report contains a <strong>short reproducible code snippet</strong>,
this way anyone can try to reproduce the bug easily (see
<a class="reference external" href="https://stackoverflow.com/help/mcve">this</a> for more details).
If your snippet is longer than around 50 lines, please link to a
<a class="reference external" href="https://gist.github.com">gist</a> or a github repo.</p></li>
<li><p>If not feasible to include a reproducible snippet, please be specific
about what <strong>estimators and/or functions are involved and the shape
of the data</strong>.</p></li>
<li><p>If an exception is raised, please <strong>provide the full traceback</strong>.</p></li>
<li><p>Please include your <strong>operating system type and version number</strong>, as
well as your <strong>Python and mvlearn versions</strong>. This information can
be found by running the following code snippet in Python.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">platform</span><span class="p">;</span> <span class="nb">print</span><span class="p">(</span><span class="n">platform</span><span class="o">.</span><span class="n">platform</span><span class="p">());</span>
<span class="kn">import</span> <span class="nn">sys</span><span class="p">;</span> <span class="nb">print</span><span class="p">(</span><span class="s2">"Python"</span><span class="p">,</span> <span class="n">sys</span><span class="o">.</span><span class="n">version</span><span class="p">);</span>
<span class="kn">import</span> <span class="nn">mvlearn</span><span class="p">;</span> <span class="nb">print</span><span class="p">(</span><span class="s2">"mvlearn"</span><span class="p">,</span> <span class="n">mvlearn</span><span class="o">.</span><span class="n">version</span><span class="p">)</span>
</pre></div>
</div>
</li>
<li><p>Please ensure all <strong>code snippets and error messages are formatted in
appropriate code blocks</strong>. See
<a class="reference external" href="https://help.github.com/articles/creating-and-highlighting-code-blocks">Creating and highlighting code blocks</a>
for more details.</p></li>
</ul>
</section>
</section>
<section id="contributing-code">
<h2>Contributing Code<a class="headerlink" href="#contributing-code" title="Permalink to this headline">¶</a></h2>
<p>The preferred workflow for contributing to mvlearn is to fork the main
repository on GitHub, clone, and develop on a branch. Steps:</p>
<ol class="arabic">
<li><p>Fork the
<a class="reference external" href="https://github.com/mvlearn/mvlearn">project repository</a>
by clicking on the ‘Fork’ button near the top right of the page. This
creates a copy of the code under your GitHub user account. For more
details on how to fork a repository see
<a class="reference external" href="https://help.github.com/articles/fork-a-repo/">this guide</a>.</p></li>
<li><p>Clone your fork of the mvlearn repo from your GitHub account to
your local disk:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ git clone [email protected]:YourLogin/mvlearn.git
$ <span class="nb">cd</span> mvlearn
</pre></div>
</div>
</li>
<li><p>Create a <code class="docutils literal notranslate"><span class="pre">feature</span></code> branch to hold your development changes:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ git checkout -b my-feature
</pre></div>
</div>
<p>Always use a <code class="docutils literal notranslate"><span class="pre">feature</span></code> branch. It’s good practice to never work on
the <code class="docutils literal notranslate"><span class="pre">main</span></code> branch!</p>
</li>
<li><p>Develop the feature on your feature branch. Add changed files using
<code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">add</span></code> and then <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">commit</span></code> files:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ git add modified_files
$ git commit
</pre></div>
</div>
<p>to record your changes in Git, then push the changes to your GitHub
account with:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ git push -u origin my-feature
</pre></div>
</div>
</li>
</ol>
<section id="pull-request-checklist">
<h3>Pull Request Checklist<a class="headerlink" href="#pull-request-checklist" title="Permalink to this headline">¶</a></h3>
<p>We recommended that your contribution complies with the following rules
before you submit a pull request:</p>
<ul>
<li><p>Follow the <a class="reference external" href="#guidelines">coding-guidelines</a>.</p></li>
<li><p>Give your pull request a helpful title that summarises what your
contribution does. In some cases <code class="docutils literal notranslate"><span class="pre">Fix</span> <span class="pre"><ISSUE</span> <span class="pre">TITLE></span></code> is enough.
<code class="docutils literal notranslate"><span class="pre">Fix</span> <span class="pre">#<ISSUE</span> <span class="pre">NUMBER></span></code> is not enough.</p></li>
<li><p>All public methods should have informative docstrings with sample
usage presented as doctests when appropriate.</p></li>
<li><p>At least one paragraph of narrative documentation with links to
references in the literature (with PDF links when possible) and the
example.</p></li>
<li><p>All functions and classes must have unit tests. These should include,
at the very least, type checking and ensuring correct
computation/outputs.</p></li>
<li><p>Ensure all tests are passing locally using <code class="docutils literal notranslate"><span class="pre">pytest</span></code>. Install the
necessary packages by:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ pip install pytest pytest-cov
</pre></div>
</div>
<p>then run</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ pytest
</pre></div>
</div>
<p>or you can run pytest on a single test file by</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ pytest path/to/test.py
</pre></div>
</div>
</li>
<li><p>Run an autoformatter to conform to PEP 8 style guidelines. We use
<code class="docutils literal notranslate"><span class="pre">black</span></code> and would like for you to format all files using <code class="docutils literal notranslate"><span class="pre">black</span></code>.
You can run the following lines to format your files.</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ pip install black
$ black path/to/module.py
</pre></div>
</div>
</li>
</ul>
</section>
</section>
<section id="guidelines">
<span id="id1"></span><h2>Guidelines<a class="headerlink" href="#guidelines" title="Permalink to this headline">¶</a></h2>
<section id="coding-guidelines">
<h3>Coding Guidelines<a class="headerlink" href="#coding-guidelines" title="Permalink to this headline">¶</a></h3>
<p>Uniformly formatted code makes it easier to share code ownership.
mvlearn package closely follows the official Python guidelines
detailed in <a class="reference external" href="https://www.python.org/dev/peps/pep-0008/">PEP8</a>
that detail how code should be formatted and indented. Please read it
and follow it.</p>
</section>
<section id="docstring-guidelines">
<h3>Docstring Guidelines<a class="headerlink" href="#docstring-guidelines" title="Permalink to this headline">¶</a></h3>
<p>Properly formatted docstrings is required for documentation generation
by Sphinx. The pygraphstats package closely follows the numpydoc
guidelines. Please read and follow the
<a class="reference external" href="https://numpydoc.readthedocs.io/en/latest/format.html#overview">numpydoc</a>
guidelines. Refer to the
<a class="reference external" href="https://numpydoc.readthedocs.io/en/latest/example.html#example">example.py</a>
provided by numpydoc.</p>
</section>
</section>
<section id="api-of-mvlearn-objects">
<span id="id2"></span><h2>API of mvlearn Objects<a class="headerlink" href="#api-of-mvlearn-objects" title="Permalink to this headline">¶</a></h2>
<section id="estimators">
<h3>Estimators<a class="headerlink" href="#estimators" title="Permalink to this headline">¶</a></h3>
<p>The main mvlearn object is the estimator and its documentation draws
mainly from the formatting of sklearn’s estimator object. An estimator
is an object that fits a set of training data and generates some new
view of the data. Each module in mvlearn contains a main base class
(found in <code class="docutils literal notranslate"><span class="pre">module_name.base</span></code>) which all estimators in that module
should implement. Each of these base classes implements
sklearn.base.BaseEstimator. If you are contributing a new estimator,
be sure that it properly implements the base class
of the module it is contained within.</p>
<p>When contributing, borrow from sklearn requirements as
much as possible and utilize their checks to automatically check the
suitability of inputted data, or use the checks available in
<code class="docutils literal notranslate"><span class="pre">mvlearn.utils</span></code> such as <code class="docutils literal notranslate"><span class="pre">check_Xs</span></code>.</p>
<section id="instantiation">
<h4>Instantiation<a class="headerlink" href="#instantiation" title="Permalink to this headline">¶</a></h4>
<p>An estimator object’s <code class="docutils literal notranslate"><span class="pre">__init__</span></code> method may accept constants that
determine the behavior of the object’s methods. These constants should
not be the data nor should they be data-dependent as those are left to
the <code class="docutils literal notranslate"><span class="pre">fit</span></code> method. All instantiation arguments are keyworded and have
default values. Thus, the object keeps these values across different
method calls. Every keyword argument accepted by <code class="docutils literal notranslate"><span class="pre">__init__</span></code> should
correspond to an instance attribute and there should be no input
validation logic on instantiation, as that is left to <code class="docutils literal notranslate"><span class="pre">fit</span></code>. A correct
implementation of <code class="docutils literal notranslate"><span class="pre">__init__</span></code> looks like</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">param1</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">param2</span><span class="o">=</span><span class="mi">2</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">param1</span> <span class="o">=</span> <span class="n">param1</span>
<span class="bp">self</span><span class="o">.</span><span class="n">param2</span> <span class="o">=</span> <span class="n">param2</span>
</pre></div>
</div>
</section>
<section id="fitting">
<h4>Fitting<a class="headerlink" href="#fitting" title="Permalink to this headline">¶</a></h4>
<p>All estimators should implement the <code class="docutils literal notranslate"><span class="pre">fit(Xs,</span> <span class="pre">y=None)</span></code> method to
make some estimation, which is called with:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">estimator</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">Xs</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
</pre></div>
</div>
<p>or</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">estimator</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">Xs</span><span class="p">)</span>
</pre></div>
</div>
<p>The former case corresponds to the supervised case and the latter to the
unsupervised case. In unsupervised cases, y takes on a default value of
<code class="docutils literal notranslate"><span class="pre">None</span></code> and is ignored. Xs corresponds to a list of data matrices and y
to a list of sample labels. The samples across views in Xs and y are
matched. Note that data matrices in Xs must have the same number of
samples (rows) but the number of features (columns) may differ.</p>
<table class="docutils align-default">
<colgroup>
<col style="width: 24%" />
<col style="width: 76%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p><strong>Parameters</strong></p></th>
<th class="head"><p><strong>Format</strong></p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>Xs</p></td>
<td><dl class="simple">
<dt>list of array-likes:</dt><dd><ul class="simple">
<li><p>Xs shape: (n_views,)</p></li>
<li><p>Xs[i] shape: (n_samples, n_features_i)</p></li>
</ul>
</dd>
</dl>
</td>
</tr>
<tr class="row-odd"><td><p>y</p></td>
<td><p>array, shape (n_samples,)</p></td>
</tr>
<tr class="row-even"><td><p>kwargs</p></td>
<td><p>optional data-dependent parameters.</p></td>
</tr>
</tbody>
</table>
<p>The <code class="docutils literal notranslate"><span class="pre">fit</span></code> method should return the object (<code class="docutils literal notranslate"><span class="pre">self</span></code>) so that simple
one line processes can be written.</p>
<p>All attributes calculated in the <code class="docutils literal notranslate"><span class="pre">fit</span></code> method should be saved with a
trailing underscore to distinguish them from the constants passes to
<code class="docutils literal notranslate"><span class="pre">__init__</span></code>. They are overwritten every time <code class="docutils literal notranslate"><span class="pre">fit</span></code> is called.</p>
</section>
</section>
<section id="additional-functionality">
<h3>Additional Functionality<a class="headerlink" href="#additional-functionality" title="Permalink to this headline">¶</a></h3>
<section id="transformers">
<h4>Transformers<a class="headerlink" href="#transformers" title="Permalink to this headline">¶</a></h4>
<p>A <code class="docutils literal notranslate"><span class="pre">transformer</span></code> object modifies the data it is given and by default outputs
multiview data, a transformation of each input view. The object also has a
<code class="docutils literal notranslate"><span class="pre">multiview_output</span></code> parameter in the constructor that may be set to <code class="docutils literal notranslate"><span class="pre">False</span></code>
so as to return a single view, joint transformation instead. An estimator may
also be a transformer that learns the transformation parameters. The transformer
object implements the <code class="docutils literal notranslate"><span class="pre">transform</span></code> method, i.e.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">Xs_transformed</span> <span class="o">=</span> <span class="n">transformer</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">Xs</span><span class="p">)</span>
</pre></div>
</div>
<p>which follows a call to <code class="docutils literal notranslate"><span class="pre">fit</span></code>. One may alternatively perform both in the
single call</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">Xs_transformed</span> <span class="o">=</span> <span class="n">transformer</span><span class="o">.</span><span class="n">fit_transform</span><span class="p">(</span><span class="n">Xs</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
</pre></div>
</div>
<p>It may be more efficient in some cases to compute the latter example
rather than call <code class="docutils literal notranslate"><span class="pre">fit</span></code> and <code class="docutils literal notranslate"><span class="pre">transform</span></code> separately.</p>
</section>
<section id="predictors">
<h4>Predictors<a class="headerlink" href="#predictors" title="Permalink to this headline">¶</a></h4>
<p>Similarly, a <code class="docutils literal notranslate"><span class="pre">predictor</span></code> object makes predictions based on the
data it is given and outputs a single array of sample-specific predictions
based on all views. An estimator may also be a predictor that learns
the prediction parameters. The predictor object implements
the <code class="docutils literal notranslate"><span class="pre">predict</span></code> method, i.e.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">y_predicted</span> <span class="o">=</span> <span class="n">predictor</span><span class="o">.</span><span class="n">predict</span><span class="p">(</span><span class="n">Xs</span><span class="p">)</span>
</pre></div>
</div>
<p>which follows a call to <code class="docutils literal notranslate"><span class="pre">fit</span></code>. One may alternatively perform both in the
single call</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">y_predicted</span> <span class="o">=</span> <span class="n">predictor</span><span class="o">.</span><span class="n">fit_predict</span><span class="p">(</span><span class="n">Xs</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
</pre></div>
</div>
<p>It may be more efficient in some cases to compute the latter example
rather than call <code class="docutils literal notranslate"><span class="pre">fit</span></code> and <code class="docutils literal notranslate"><span class="pre">predict</span></code> separately.</p>
</section>
<section id="mergers">
<h4>Mergers<a class="headerlink" href="#mergers" title="Permalink to this headline">¶</a></h4>
<p>In some cases, it is helpful to extract a single view representation of
multiple views, as when one is integrating mvlearn estimators with an
sklearn pipeline. A <code class="docutils literal notranslate"><span class="pre">merger</span></code> object implements a <code class="docutils literal notranslate"><span class="pre">transform</span></code> method
which takes in multiview data and returns a single view representation, i.e.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">X_merged</span> <span class="o">=</span> <span class="n">merger</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">Xs</span><span class="p">)</span>
</pre></div>
</div>
<p>which follows a call to <code class="docutils literal notranslate"><span class="pre">fit</span></code> and as above, one can perform both functions
in the single, potentially more efficient call</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">X_merged</span> <span class="o">=</span> <span class="n">merger</span><span class="o">.</span><span class="n">fit_transform</span><span class="p">(</span><span class="n">Xs</span><span class="p">)</span>
</pre></div>
</div>
</section>
</section>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="references/utils.html" class="btn btn-neutral float-left" title="Utility Functions" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="changelog.html" class="btn btn-neutral float-right" title="Changelog" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>© Copyright 2019-2020.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
<p style="text-align: center; margin: .5rem;">
<a href="https://www.netlify.com">
<img src="https://www.netlify.com/img/global/badges/netlify-color-accent.svg" />
</a>
</p>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>