Skip to content

Commit

Permalink
Create giotto-tda v0.3.0 (#517)
Browse files Browse the repository at this point in the history
* Make path to giotto-tda logo absolute for display on PyPI (#415)

* Fix formatting in CONTRIBUTING.rst (#416)

* Fix typo in Mapper docs for n_sig_figs (#417)

* Adds FlagserPersistence (#339)

* Add pyflagser >= 0.4.0 to requirements, GH pages installation instructions, and README.rst

* Add FlagserPersistence

* Add tests for FlagserPersistence

* Add FlagserPersistence to doc index

* Add See Also entries in simplicial

* Linting in ripser_interface

* Update See also for Cubical

* Fix max_edge_length docs in other simplicial transformers

* Add tests to check max_edge and infinity_values

* Fix low infinity value bug and put dimension padding in _utils

* Add test for low infinity values

* Simplify code in homology/_utils.py

Signed-off-by: Guillaume Tauzin <guillaumetauzin.ut@gmail.com>
Co-authored-by: Umberto <umberto.lupo@gmail.com>
Co-authored-by: Wojciech Reise <reisewojtus@gmail.com>

* Introduce `nightly_release` variable in azure-pipelines.yml (#421)

* Link Giotto-tda logo to raw.githubusercontent.com

* Add FlagserPersistence to the documentation (#425)

* Refactor GraphGeodesicDistance (#422)

* Refactor GraphGeodesicDistance

- Change return type to list for compatibility with homology transformers
- Use scipy's shortest_path instead of sklearn's graph_shortest_path
- Make clearer rules on the role of zero entries, infinity entries, and non-stored values
- Add parameters directed, unweighted, and method
- Support masked arrays
- Rewrite docstring

* Fix See Also in KNeighborsGraph and TransitionGraph

* Prevent using FW algorithms when some edges are zero

- Work around scipy/scipy#12424
- Introduce user warnings when algorithm cannot be chosen automatically or set to FW
- Fix test ground truth
- Improves array conversion in GraphGeodesicDistance.transform

* Add GraphGeodesicDistance unit tests on sparse/masked array input and more dtypes

* Fix Azure CI for nightly releases (#429)

* Add *.pyo and *.pyd to .gitignore (#430)

Extend list of ignored extensions to other Python bytecode-type files

* Modify check_point_clouds to allow for sparse input (#424)

* Modify check_point_cloud to allow for sparse input

- Allow for sparse input in VietorisRipsPersistence and FlagserPersistence when metric is precomputed.
- Fix docstrings to reflect the changes.
- Fix some typos and wording issues.

* Make docstrings more consistent across simplicial transformers

* Fix reference for FlagserPersistence

* Remove warning for different point cloud embedding dimensions

* Eliminate tests for different embedding dimension warnings

* Convert list input to 3D ndarray when possible

* Update my email address

* Accept sparse inputs even in non-precomputed case for VietorisRips and SparseRips

* Cover sparse cases and more metrics in simplicial unit tests

Co-authored-by: Umberto <u.lupo@l2f.ch>

* Update collaborator email addresses (#435)

* Update @lewtun's and @ulupo's emails in CODE_AUTHORS.rst

* Update @lewtun's and @ulupo's emails in GOVERNANCE.rst

* Refactor _subdiagrams to take all homology dimensions into account (#439)

* Fix mmap settings used by joblib.Parallel (#428)

* Fix mmap settings used by joblib.Parallel in HeatKernel and PersistenceImage

* Add tests

* Slice X first inside parallel calls to _subdiagrams

* Minor simplifications in plot_diagram

* Add @NickSale to CODE_AUTHORS.rst

Co-authored-by: Umberto Lupo <umberto.lupo@gmail.com>

* Fix axis ranges in `plot_diagram` (#437)

* Remove **input_layout kwargs, refactor layouts in plot_diagram

- Fix #409
- Fix calculation of the maximum filtration parameter which incorrectly included the homology dimensions
- Simplify code

* Transpose the output of PairwiseDistance to match scikit-learn convention (#420)

* Transpose output shape in PairwiseDistance.transform

* Update tests

* Simplify _parallel_pairwise

Co-authored-by: Umberto Lupo <46537483+ulupo@users.noreply.github.com>

* Replace pip install with python -m pip install in docs and Readme (#440)

* Remove incorrect assumptions in Filtering (#436)

* Remove `_sort` and refactor `filter` in gtda/diagrams/_utils.py

Arrays are no longer sorted by lifetime before filtering.

* Fix test for Filtering

* Improve documentation, begin addressing #233

* Small improvement to `_subdiagrams`

* Return figures instead of showing them (#441)

* Refactor of plotting API

- Make all functions in gtda/plotting return figures (or tuples of figures for betti_surfaces) instead of showing them
- `plot` class methods also return figures instead of showing them
- `transform_plot` and `fit_transform_plot` still show figures and only return transformed data
- Add `plot_params` kwarg throughout to allow user customisability of output figures (subtlety: one of the key can be either "trace" when the output figure only has one trace, or "traces" when it has several)

* Suppress user warnings on graph geodesic distance algorithms in tests

* Resolve overflow warnings in mapper filter tests

* Resolve numpy DeprecationWarning in test_validation

* [DOCS] Clarify expected diagram properties to fix #233 (#443)

* Allow plot_heatmap to take boolean arguments (#444)

* Add pullback cover set labels and partial cluster labels to Mapper hovertext, improve docs (#445)

* Add pullback set ID to mapper hovertext

* Add partial cluster label to Mapper hovertext

* Improve docs for plot_static_mapper_graph and plot_interactive_mapper_graph

* Fix tests after changes

* Slight wording improvement

* Further wording clarification

* Make wording on edges even clearer

* Refactor igraph.Graph output of Nerve, modify `fit` behaviour of Nerve, add `store_edge_elements` kwarg to Nerve and make_mapper_pipeline, add Nerve and ParallelClustering to docs (#447)

* Refactor igraph.Graph output, add Nerve and ParallelClustering to docs, add store_edge_elements kwarg to Nerve and make_mapper_pipeline

- Store node metadata not as a graph-level dictionary, but as vertex attributes accessible by graph.vs[attr_name][node_id] or graph.vs[node_id][attr_name] for attr_name in ["pullback_set_label", "partial_cluster_label", "node_elements"]
- Remove "node_id" from node attributes as it always coincided with the igraph.Graph node number anyway.
- Automatically store sizes of intersections as edge weights, accessible by graph.es["weight"].
- Add "store_intersections" kwarg to Nerve and make_mapper_pipeline to allow storing indices of node intersections as edge attributes, accessible via graph.es["edge_elements"].
- Simplify logic of Nerve.fit_transform code
- Change the attributes stored by Nerve.fit. Now the entire graph is stored as graph_ instead.
- Improve documentation of make_mapper_pipeline
- Expose ParallelClustering and Nerve in __init__ and docs.
- Adapt tests, mapper quickstart notebook, and mapper plotting functions.

* Add two tests for the behaviour of store_edge_elements and min_intersection

* Remove check for shape of `layout` in _calculate_graph_data

`layout` can only be a string or a callable, not an ndarray

* Improve test coverage of mapper visualization modules

* Create tests for plot_betti_surfaces and plot_betti_curves

* Add plotly_params to remaining plot methods in diagrams/representations, missed out in #441 

* Fix some linting and docstrings

* Minor improvements

* Avoid shadowing range function in plot_diagram

* Fix minimum birth bug in `plot_diagram` (#449)

* Fix bug introduced in 4bc90b2

np.max should have been np.min in plot_diagram for minimum birth and death calculation

* Clean/simplify plot_diagram further to be more ready for extended persistence and better behave under plotly HTML autoscaling

* Make `store_edge_elements` work with MapperPipeline.get_mapper_params and MapperPipeline.set_params, missed out in 4bc90b2

* Remove displayed SegmentLocal from gif hyperlink in classifying_shapes example notebook (#448)

* Remove displayed SegmentLocal from classifying_shapes example notebook

* Fix doc typos

* Pybind11 quick fix (#451)

* Fix pybind11 broken master

pybind11 checkout version v2.5.0, some issues are observed on master

Signed-off-by: julian <julian.burellaperez@heig-vd.ch>

* Fix bug in use of homology_dimension_ix with samplings_, rename homology_dimension_ix (#452)

* Rename homology_dimension_ix to homology_dimension_idx, fix bug

* Add normalization of persistence entropy (#450)

* Add normalization of persistence entropy via `normalize` kwarg in gtda.diagrams.PersistenceEntropy

* Use entropy from scipy.stats in gtda.diagrams.PersistenceEntropy, gtda.time_series.PermutationEntropy and gtda.mapper.Entropy

* Rename _entropy hidden method in gtda.diagrams.PersistenceEntropy

* Add tests for normalize=True

* Add `fill_nan_value` kwarg to gtda.diagrams.PersistenceEntropy

- See #450 (comment)
- Adapt pipeline tests to use this kwarg

Co-authored-by: Umberto Lupo <umberto.lupo@gmail.com>

* Fix y-axis in HeatKernel plots, add default titles to plot methods (#453)

* Fix y-axis in HeatKernel.plot

* Add titles to figures generated via plot_heatmap in plot class methods

* PEP8 E133 improvements

* Refactor gtda/diagrams (#454)

* First attempt at fix of #438

* Fix y-axis in `PersistenceImage` plots, extending #453

* Represent multiplicity of persistence pairs in hovertext in `plot_diagram`

* Change reflect mode of `gaussian_filter` to "constant" from "reflect"

Affects `HeatKernel` and `PersistenceImage`

* Fix `PersistenceLandscape` plot method

- Only the figure corresponding to the first seen homology dimension was returned
- Output is now a figure with subplots, a main title, and one subtitle per plot (homology dimension)

* Improve tests for plot methods in gtda.diagrams.representations

Cover use of `plotly_params`

* Minor docstring linting

* Miscellaneous docstring improvements in gtda/diagrams

* Fix validation dictionary for `metric_params` in the case of `PersistenceImage`

* Change default value of `order` in Amplitude, from 2. to None (vector features)

* Change meaning of default None for `weight_function` in `PersistenceImage`

- ``None`` corresponding the identity means that there really is a non-trivial weighting in that case. Semantically, this does not seem correct ("None" should mean no weighting at all)

* Improve code style and clarity in plot methods in gtda.diagrams.representations

* Refactor gtda/diagrams/_metrics.py to fix several bugs

- Change computation of heat/persistence image distances and amplitudes to yield the continuum limit when `n_bins` tends to infinity.
- Make `sigma` in persistence-image-- and heat-kernel--based representations/distances/amplitudes measured in the same units as the filtration parameter (not in pixels), thus decoupling its effect from the effect of `n_bins`. Also change the default value in PairwiseDistance, Amplitude, HeatKernel and PersistenceImage from 1. to 0.1.
- Remove trivial points from diagrams before creating a sampled image in `heats` and `persistence_images`. This ensures in particular that the trivial points really give no contribution regardless of the weight function used for persistence images.
- Finish fixing #438 and similar issues with PairwiseDistance when the metric is persistence-image--based.
- Ensure `silhouettes` does not create NaNs when a subdiagram is trivial.
- Change default value of `power` in `silhouette_amplitudes`
 and `silhouette_distances` to 1., to agree with Amplitude and PairwiseDistance docs.
- Fix use of np.array_equal in `persistence_image_distances` and `heat_distances` -- so far the boolean check for equal inputs always failed due to the in-place modifications of `diagrams_1`.
- No longer store weights in `effective_metric_params_` attribute of PairwiseDistance and Amplitude when the metric is persistence-image--based.
- Remove _heat from gtda.diagrams._metrics.
- Remove identity from gtda.diagrams._utils and make default `weight_function` kwargs equal to np.ones_like everywhere to agree with default in `PersistenceImage`.
- Other style improvements (variable names, linting)

* Fix trace name when homology dimension is np.inf in `BettiCurve` and `Silhouette`

* Adapt `test_all_pts_the_same` to new behaviour of `heats_` in gtda.diagrams._metrics

* Improve test coverage of `Amplitude` and `PairwiseDistance`

- Make sure silhouettes and persistence images are covered throughout
- Cover `order` parameter throughout

* Add test of zero `weight_function` for `PersistenceImage`

* Make behaviour of `Scaler.fit` when the metric is persistence image the same as `Amplitude`

Accordingly add more combinations of metrics and metric_params in tests for Scaler

* Delete never-used `_matrix_wrapper` and `_arrays_wrapper` functions

* Remove `_pad` from gtda.diagrams._utils as it is never used

* Make `copy=True` in calls to check_diagrams in Scaler.transform and Scaler.inverse_transform

* Make `homology_dimensions_` attributes tuples instead of lists, with integers when possible

* Improve code style

* Hard-code zero array outputs by `heats` and `persistence_images` when step sizes are zero

* Add `homology_dimensions` kwarg to `_bin`

Achieves beautification of self._samplings and self.samplings_ (ints shown instead of floats) in several transformers (and saves some computation)

* Adapt choices of `min_values`, `max_values` and `sigma` in hypothesis-based tests

New meaning of sigma led to overflow issues in existing tests.

* Make all homology dimensions equal in `test_hk_big_sigma`

Also extend this test to `PersistenceImage`, and rename it accordingly

* Cover use of `plotly_params` kwarg in diagram preprocessing classes plot methods

* Extract some common logic from plot methods in gtda.diagrams.representations

* Silence expected warnings from image transformers in test_common

* Implement @wreise's suggestion to abstract away sorting and integer conversion of fit hom dims

* Add tests for `Amplitude` and `PairwiseDistance` to check that a zero weight function yields identically zero amplitudes/distances.

* Refactor `_subdiagrams` to throw informative errors on unfulfilled input properties

* Bump package dependencies to latest available in conda (#457)

* Bump dependencies to latest available in conda (or PyPI if conda unavailable)

* [CI] Bump pip version in .azure-ci/docker_scripts.sh

* Plot infinite deaths in plot_diagrams (#461)

* Plot infinite deaths in plot_diagrams

- Dynamically establish a certain value greater than the maximum observed death as the y-coordinate of infinity
- Plot points with infinite death as having this death value
- Plot a horizontal dashed line to show the position of infinity

* Add first draft of FlagserPersistence notebook

* Fix errors with use of homology_dimensions kwarg in FlagserPersistence

- Implementation was incorrect in cases where minimum in homology_dimensions is greater than 1
- Implementation would crash whenever `flagser_weighted` does not return a list of size self._max_homology_dimension + 1 - self._min_homology_dimension, as can happen with small graphs

* Fix #92

Document removal of one infinite bar in simplicial transformers

* Polish up classifying_shapes notebook

* Remove null cell from vietoris_rips_quickstart

* Upload clique complex filtration images

* Crop image

* Crop and colour images

* New versions of clique complex

* New notebook version

* Test a small version of a png

* Update notebook and pngs

* Remove plotly code

* Add SVGs for directed flag complex illustration

* Correct one SVG

* Add color fill

* Fix color fill

* Reorient one triangle

* Finish up notebook

* Remove some PNGs

* Delete legacy image

* More "correct" name for a PNG

* Reflect name change on notebook

* LaTeX formatting

* Add reference to ripser.py tutorials

* Fix handling of COO matrices by ripser mirroring scikit-tda/ripser.py#104 (#465)

* Update gudhi bindings to latest changes on August 2020 (#468)

* Pull latest changes on Gudhi-devel:giotto

* Add Eigen as a submodule

Eigen is now required for latest Gudhi version

* Add Eigen for gudhi modules that require it

* Update get_filtration and get_skeleton with the new Gudhi API

* Update ccache in CI

* Fix type issue for get_persistence in simplex_tree

* Fix persistence in periodic cubical complex

* Fix simplex tree

* Fix cubical complex

* Beautify setup.py

* Move towards fixing #307 in azure_pipelines.yml (still not addressing docker_scripts.sh)

Signed-off-by: julian <julian.burellaperez@heig-vd.ch>
Co-authored-by: Umberto Lupo <umberto.lupo@gmail.com>

* Change DISTNAME back form "giotto-tda" to 'giotto-tda' in setup.py (#470)

Avoids uploading nightly distributions accidentally to PyPI from CI as happened on 28.08.2020

* Change title as suggested by @lewtun, fix GitHub capitalization in all notebooks

* Unify postprocessing of diagrams between simplicial and cubical, remove one H0 inf bar in cubical

* Fix imports, reinstate reshape

* Fix slicing and tests

* Document removal of infinite bar in 0D

* Improve readability

* Place _replace_infinity_values and _pad_diagram in scope of _postprocess_diagrams

* Forfeit use of n_jobs in _postprocess_diagrams

Favour use of purely in-place operations by a logic replacing _pad_diagram

* Linting

* Remove unused joblib imports from homology/_utils.py

* Ignore SparseRipsPersistence in code cells as suggested by @lewtun

* LaTeXify indices as suggested by @lewtun

* Fix typos

* Fix typo

* Convert pycairo note from inline comments to markdown text

* Implement some of @lewtun's suggestions for classifying shapes notebook

* Migrate general persistence diagram discussion to vr notebook, create "General API" section

In partial fulfillment of @lewtun's review suggestions

* Fix VR notebook and add explanation of homology_dimensions parameter

* Make PyPI nightly uploads more robust to changes in quote types (#471)

* Make PyPI nightly uploads more robust to changes in quote types

Look for both single and double quotes when modifying DISTNAME in setup.py

* Reinstate double quotes in setup.py

* Change sed -i to sed -i.bak in macOS Azure jobs (#472)

* Adds WeakAlphaPersistence (#464)

* Add WeakAlphaPersistence (gtda.homology.simplicial)

* Change relative order of simplicial transformers

* Add tests of correctness of VietorisRipsPersistence and WeakAlphaPersistence (circle PH)

* Adapt to sklearn 0.23 API in test_common

Silences warnings

* Improve docstrings in gtda.homogy (type of X in fit and transform, and type of Xt in plot)

* Avoid dtype search and always make a float array

* Adapt WeakAlphaPersistence to changes

* Some style consistency

* Fix small bug with plot_diagrams

Trivial points were not excluded from computation of plot ranges

* Bump pyflagser version in requirements

* Improve docs for VietorisRipsPersistence by explaining how precomputed input is handled

* Improve writing following @lewtun's comments, fix hyperlinks in preparation for merge

* Add a regression test for FlagserPersistence

* Introduce a `reduced_homology` kwarg to toggle or not removal of infinite H0 bar

* Change default value of nan_fill_value in PersistenceEntropy to -1 (#474)

* Change default value of nan_fill_value in PersistenceEntropy to -1.

* Remove false URL in README (#476)

* Fix read-only error analogous to #427 in Amplitude and PairwiseDistance (#481)

* Improve naming of parallelism tests for PersistenceImage and HeatKernel

* Extend #428 to Amplitude and PairwiseDistance, add regression test, improve edge case handling in _metrics.py

* Cover n_jobs > 1 in test_features_representations.py

* Fix formatting issues in notebooks (#482)

* Add persistent homology of graphs notebook to docs

* Add Vietoris-Rips gif to examples/images and use it instead of Medium links notebooks

* Change single backticks for monospace to double backticks, recommended for Markdown

* Fix a parenthesis in classifying_shapes.ipynb

* Add bindings for collapser, refactor ripser_interface (#469)

* Add bindings for collapser

* Add collapse_edges kwarg to ripser to enable edge collapser

* Add tests for the collapser bindings

* Add tests for ripser with edge collapse

* Add regression test for #465

* Refactor ripser_interface to simplify code, improve lexsort logic, and improve detection of sparse matrix shape

* Disable computation of cocycles by default

Signed-off-by: julian <julian.burellaperez@heig-vd.ch>
Co-authored-by: Umberto Lupo <umberto.lupo@gmail.com>

* Enable edge collapse in VietorisRipsPersistence (#483)

* Enable edge collapse in VietorisRipsPersistence

Also cover coefficient different from 2 in tests of collapser

* Cover collapse_edges kwarg in simple VietorisRipsPersistence tests

* Rename TakensEmbedding to SingleTakensEmbedding, introduce new TakensEmbeding transformer on collections and a function for time-delay embedding parameter optimization, replace "width" parameter with "size" in Labeller and SlidingWindow, fix bug with Labeller.resampler when n_steps_future >= size - 1 (#460)

* Extract time delay embedding logic into a _time_delay_embedding function in the new file gtda.time_series._utils

* Rename TakensEmbedding to SingleTakensEmbedding

* Extract and expose code for finding optimal Takens embedding parameters, as a new takens_embedding_optimal_parameters function

* Simplify logic of resample method of SingleTakensEmbedding and SlidingWindow

* Improve tests for Stationarizer

* Fix bug in Labeller.resample when n_steps_future >= width, add test to cover this scenario

* Allow zero width (meaning 1 point) in SlidingWindow and Labeller

* Add simple test for invalid width in Labeller

* Faster implementation of _slice_windows in SlidingWindow and of SlidingWindow.transform

* Make SlidingWindow.slice_windows public, add test

* Rename "width" parameter of Labeller to "size", addressing #94

* Rename "width" parameter of SlidingWindow to "size", addressing #94 

* Create new TakensEmbedding function to deal with collections of univariate or multivariate time series

* Support list of time series input in gtda.time_series.embedding by means of a new check_collection function in gtda.utils.validation

* Fix typos in glossary.tex

* Remove plot method from SlidingWindow and place it in new TakensEmbedding

* Refactor Lorenz attractor notebook following API changes involving TakensEmbedding and SlidingWindow

* Use check_collection in CubicalPersistence

* TransformerResamplerMixin notebook, make Labeller.transform return 1D arrays (#475)

* Add notebook on TransformerResamplerMixins and time series forecasting with sliding windows + topology

* Change return shape or Labeller.transform to 1D

* Fix Labeller docstring following change in #475

* Modify `PlotterMixin.transform_plot` to give a dictionary to the call to `plot` (#484)

* Fix sample numbers in automatically-generated plot titles when using `transform_plot`

* Add test for Takens to use fit_transform_plot

* Remove papermill version from azure-pipelines

Co-authored-by: wreise <wojciech.reise@epfl.ch>

* removed check_collection from docs

* Fix references in takens and simplicial

* Change todo in weak alpha filtration reference to the section name, remove empty line from release

* Add `mode` kwarg to KNeighborsGraph, refactor input-output formats in gtda.graphs, turn outputs of KNeighborsGraph and TransitionGraph into asymmetric adjacency matrices (#478)

* Add mode kwarg to KNeighborsGraph, allow for list input in gtda.graphs, return lists instead of ragged arrays

* Turn output of TransitionGraph into a directed 0-1 adjacency matrix

* Docstring improvements in gtda.graphs

* Add check_collection again

* Reference ripser [1]

* Move the references before the full stops

* Replace missing glossry entries with TODOs, following Umberto's comment

* Docstring improvements following @gtauzin's review

* Tiny wording fix

* Improve docstring following @gtauzin's comment

* Add missing references

* Flag weak_alpha_complex as missing entry

* Reference in the documentation

* Add a target for testing notebooks in the docs

* Make html does not fail on missing versions

* Capitalize "Euclidean" in glossary.tex

* Remove spaces after references, check that publication names are in italic

* Add check_collection to gtda/utils/__init__.py (#491)

* Add check_collection to gtda/utils/__init__.py

* Improve paths in some tests

* Add option to contract Mapper vertices when pairs are in a subset relation, change layout in interactive mode (#456)

* Add contract_nodes kwarg to Nerve

- When True, igraph.Graph's contract_vertices is employed together with the limit flow by a mapping with fixed points to execute the contraction
- Add a test for this option

* Filter out nodes from same pullback set when checking intersections, to increase performance

* Ensure that setting min_intersection < 1 does not lead to fully connected graphs

* Remove unused variable name in ParallelClustering

* Make nerve parameters interactive in plot_interactive_mapper_graph, refactor get_widgets_per_params, change layouts

* Improve method_to_transform code and docstring

* Small improvements to transformer_from_callable_on_rows

* Linting throughout gtda.mapper

* Remove effective_metric_params_ from Eccentricity

* Remove unused import and sort the remaining ones

* Provide an explicit name for the substituition

* Copy images from examples to notebooks

* Remove the use of imgonverter, change the logo back to svg and add supported image types list

* Name for substitution did not work

* Wording improvements in persistent_homology_graphs.ipynb

* Typo fix in notebook

* Fix variable name error in GraphGeodesicDistance.transform

* Extend Padder and Inverter to greyscale images (#489)

* Extend Padder to greyscale images

* Extend Inverter to greyscale images

Signed-off-by: Guillaume Tauzin <guillaumetauzin.ut@gmail.com>

Co-authored-by: wreise <wojciech.reise@epfl.ch>

* Add notebook for topological time series classification to examples (#458)

* Add notebook for topological time series classification example

* Add Takens embedding GIF to images directory

* Add gravitational wave dataset

Co-authored-by: Umberto Lupo <umberto.lupo@gmail.com>

* Fix links to time series classification notebook by @lewtun

* Move datasets.py and gravitational-wave-signals.npy to new data subfolder, and rename them

* Fix errors in check_point_clouds docstrings

* Try easier paths in See also

Test for @wreise

* Create captions across all notebooks

* Small wording improvement in persistent_homology_graphs.ipynb

* Change the path (sub)package in the index

* Implement double backticks consistently

* Simplify some captions

* Slightly reduce size of plots by plot_point_cloud

* Fix some errors in make_mapper_pipeline docs

* Fix typo in Nerve docs

* Change citation style for consistency

* Remove new lines in array printouts in docs

* Make citation style more consistent throughout

* Reorder notebooks, modularize Makefile

* Reformat the references

* More link and backtick fixes in mapper_quickstart

* More RST fixes in notebooks

* Fix linting

* Fix an error in WeakAlphaPersistence Notes

* Fix URLs for GUDHI

* Fix TakensEmbedding docstrings

* Linting

* Try changing some SVG attributes for better display

* Further SVG improvements

* Update CODE_AUTHORS.rst (#497)

* More Mapper tests, small change to `max_fraction` in FirstSimpleGap and FirstHistogramGap (#412)

* Add first tests for plot_interactive_mapper_graph

* Change deprecated 'overflow_y' to 'overflow' property in_logging, and remove unnecessary warning catching

* Avoid name clashes with Python built-ins throughout mapper/tests

* Slightly change meaning of `max_fraction` in FirstSimpleGap and FirstHistogramGap

Make the default 1. instead of None, and give it a simpler interpretation: (the floor of) max_fraction * n_samples is the maximum number of clusters the algorithm can return

* Implement a looser criterion for the hk_pi_big_sigma test

Co-authored-by: Umberto Lupo <umberto.lupo@gmail.com>

* Fix some warnings seen in tests (#498)

- `continuous_updates` is deprecated from ToggleButton
- `np.stack` should not take generators
- should explicitly pass dtype=object for ragged arrays

* Add the giotto-tda icon in the browser tab (#500) (favicon)

* Add NumberOfPoints (#496)

* Add NumberOfPoints

* Make See alsos more consistent throughout diagrams.features

Sined-off-by: Guillaume Tauzin <guillaumetauzin.ut@gmail.com>
Co-authored-by: wreise <wojciech.reise@epfl.ch>
Co-authored-by: Umberto Lupo <umberto.lupo@gmail.com>

* Fix and improve validate_params (#502)

* Fix validate_params bug and improve behaviour when both numeric and list-like types are allowed

* Add a test

* Fix mistake in validate_params docs

* Pybind11 as a git submodule (#459)

* Add MODULE keyword in CMakeLists.txt to explicitly show expectation

* Update collapser to latest standard in the CMake file

* Add pybind11 as a submodule

* Remove downloading pybind11 from setup.py

Signed-off-by: julian <julian.burellaperez@heig-vd.ch>
Co-authored-by: Umberto Lupo <umberto.lupo@gmail.com>

* Fix metric_params documentation in KNeighborsGraph

* Improve ripser bindings performance (#501)

* Update ripser & collapser bindings to allow pass by reference with numpy

* Update making the distance matrix triangular more memory friendly

* Remove unnecessary dict inherited from ripser.py cython

Signed-off-by: julian <julian.burellaperez@heig-vd.ch>

* Add MNIST image classification example notebook (#477)

* Add MNIST image classification/full blown ML example notebook

Signed-off-by: Guillaume Tauzin <guillaumetauzin.ut@gmail.com>
Co-authored-by: Lewis Tunstall <lewis.c.tunstall@gmail.com>
Co-authored-by: Umberto Lupo <umberto.lupo@gmail.com>

* Add ComplexPolynomial (#479)

* Add ComplexPolynomial

Signed-off-by: Guillaume Tauzin <guillaume.tauzin@inait.ai>
Co-authored-by: Umberto Lupo <umberto.lupo@gmail.com>
Co-authored-by: wreise <wojciech.reise@epfl.ch>

* Fix precomputed behaviour in KNeighborsGraph (#506)

* Fix precomputed behaviour in KNeighborsGraph

- Avoid warnings when metric is passed as 'precomputed'
- Fix errors in docstrings and improve wording
- Improve tests

* Fix #499 by covering case of list input in CubicalPersistence.fit (#503)

* Improve memory use in ripser_interface (#507)

Implement suggestions in #501 (comment)
- Use scipy's squareform function for fast extraction of the upper diagonal part of dm

* Add DensityFiltration (#473)

Signed-off-by: Guillaume Tauzin <guillaumetauzin.ut@gmail.com>
Co-authored-by: Umberto Lupo <umberto.lupo@gmail.com>

* Add metaestimators subpackage with CollectionTransformer meta-estimator (#495)

* Add gtda/metaestimators with CollectionTransformer meta-estimator 

* Fix docstring for make_mapper_pipeline

* Cchange parallel_backend_prefer default to None in ParallelClustering and make_mapper_pipeline

* Cross-reference two time series notebooks with See also

* Improve time series classification notebook by making use of CollectionTransformer

* Temp fix for macOS CI failures by preventing automatic brew cleanup (#513)

Also make mapper tests more lenient to reduce number of flaky tests

Co-authored-by: ulupo <umberto.lupo@googlemail.com>

* Add a curves subpackage and a StandardFeatures transformer to extract features from them (#480)

* Add curves subpackage with StandardFeatures

* Reshape output of PersistenceLandscape so that it's a multi channel curve

* Add curves to main init and to rst docs

* Add Feature extraction subtitle in curves.rst

* Split simplicial homology into undirected and directed subsections

* Fix typo in validate_params

* Raise deadlines for some mapper tests

* Remove notebook tests even in macOS jobs

Signed-off-by: Guillaume Tauzin <guillaume.tauzin@inait.ai>
Co-authored-by: Umberto Lupo <umberto.lupo@gmail.com>

* Add curves.Derivative (#492)

* Add curves.Derivative

* Fix curves.StandardFeatures docs

Signed-off-by: Guillaume Tauzin <guillaume.tauzin@inait.ai>

Co-authored-by: Umberto Lupo <umberto.lupo@gmail.com>
Co-authored-by: wreise <wojciech.reise@epfl.ch>

* Raise test coverage and make ParallelClustering clusterer parameter required (#508)

* Improve test coverage of mapper visualization tools

* Make pandas part of test requirements in setup.py

* Add pandas installation in Linux Azure jobs

* Avoid notebooks checks even in macOS unless notebooks_checks is true

* Make clusterer a required parameter in ParallelClustering, add ParallelClustering tests

* Change kind of error for bad transformers in CollectionTransformer

* Improve check_diagrams and its tests

* Use validate_params in plot_point_cloud

* Cover plotting of diagrams with infinite deaths in simplicial tests

* Prepare for v0.3.0 release (#516)

* Bump version to 0.3.0

* Add release notes

* Minor corrections in notebooks

Co-authored-by: wreise <wojciech.reise@epfl.ch>

Co-authored-by: Guillaume Tauzin <guillaumetauzin.ut@gmail.com>
Co-authored-by: Wojciech Reise <reisewojtus@gmail.com>
Co-authored-by: Wojciech Reise <32167173+wreise@users.noreply.github.com>
Co-authored-by: Umberto <u.lupo@l2f.ch>
Co-authored-by: Nicholas Sale <nicholas.j.sale@gmail.com>
Co-authored-by: MonkeyBreaker <julian.burellaperez@heig-vd.ch>
Co-authored-by: REDS institute <reds-heig@users.noreply.github.com>
Co-authored-by: lewtun <lewis.c.tunstall@gmail.com>
Co-authored-by: wreise <wojciech.reise@epfl.ch>
Co-authored-by: ulupo <umberto.lupo@googlemail.com>
  • Loading branch information
11 people authored Oct 9, 2020
1 parent 9369caa commit c826b5b
Show file tree
Hide file tree
Showing 167 changed files with 12,904 additions and 3,885 deletions.
7 changes: 4 additions & 3 deletions .azure-ci/docker_scripts.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ echo "Start manylinux2010 docker build"
PYTHON_PATH=$(eval find "/opt/python/*${python_ver}*" -print)
export PATH="${PYTHON_PATH}/bin:${PATH}"
pip config set global.progress_bar off
pip install --upgrade pip==19.3.1 setuptools
pip install --upgrade pip setuptools

# Install CMake
pip install cmake
Expand All @@ -25,7 +25,7 @@ tar -zxvf /boost_1_69_0.tar.gz
mkdir boost
cd /boost_1_69_0
./bootstrap.sh --prefix=/boost
./b2 install -j3 || echo "Parts of boost failed to build. Continuing.."
./b2 install -j3 || echo "Parts of boost failed to build. Continuing..."
cd ..

ccache -s
Expand All @@ -36,6 +36,7 @@ export Boost_INCLUDE_DIR=/boost/include

# Install dev environment
cd /io
pip install wheel
pip install -e ".[dev]"

# Test dev install with pytest
Expand All @@ -46,10 +47,10 @@ pip uninstall -y giotto-tda
pip uninstall -y giotto-tda-nightly

# Build wheels
pip install wheel==0.34.1 auditwheel==3.1.0
python setup.py bdist_wheel

# Repair wheels with auditwheel
pip install auditwheel
auditwheel repair dist/*whl -w dist/
# remove wheels that are not manylinux2010
rm -rf dist/*-linux*.whl
5 changes: 2 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# Compiled python modules.
*.pyc
*.pyo
*.pyd

# Setuptools distribution folder.
/dist/
Expand All @@ -26,9 +28,6 @@ doc/gallery
doc/notebooks/*.ipynb
doc/notebooks/*.py

# Pybind11
gtda/externals/pybind11

# Output files
*.out

Expand Down
6 changes: 6 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,9 @@
[submodule "gtda/externals/hera"]
path = gtda/externals/hera
url = https://github.com/grey-narn/hera
[submodule "gtda/externals/eigen"]
path = gtda/externals/eigen
url = https://gitlab.com/libeigen/eigen
[submodule "gtda/externals/pybind11"]
path = gtda/externals/pybind11
url = https://github.com/pybind/pybind11
60 changes: 48 additions & 12 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,13 @@ find_package(OpenMP)
set(RIPSER_SRC_DIR "gtda/externals/ripser")
set(GUDHI_SRC_DIR "gtda/externals/gudhi-devel/src")
set(HERA_DIR "gtda/externals/hera")
set(EIGEN_DIR "gtda/externals/eigen")

#######################################################################
# Ripser #
#######################################################################

pybind11_add_module(gtda_ripser "${BINDINGS_DIR}/ripser_bindings.cpp")
pybind11_add_module(gtda_ripser MODULE "${BINDINGS_DIR}/ripser_bindings.cpp")
set_property(TARGET gtda_ripser PROPERTY CXX_STANDARD 14)

if(OpenMP_FOUND)
Expand All @@ -39,7 +40,7 @@ endif()
# Ripser - Coefficient enable #
#######################################################################

pybind11_add_module(gtda_ripser_coeff "${BINDINGS_DIR}/ripser_bindings.cpp")
pybind11_add_module(gtda_ripser_coeff MODULE "${BINDINGS_DIR}/ripser_bindings.cpp")
set_property(TARGET gtda_ripser_coeff PROPERTY CXX_STANDARD 14)

if(OpenMP_FOUND)
Expand All @@ -61,7 +62,7 @@ endif()
# Wasserstein #
#######################################################################

pybind11_add_module(gtda_wasserstein ${BINDINGS_DIR}/wasserstein_bindings.cpp)
pybind11_add_module(gtda_wasserstein MODULE ${BINDINGS_DIR}/wasserstein_bindings.cpp)
set_property(TARGET gtda_wasserstein PROPERTY CXX_STANDARD 14)

target_link_libraries(gtda_wasserstein LINK_PUBLIC ${Boost_LIBRARIES})
Expand All @@ -82,7 +83,7 @@ endif()
# Bottleneck #
#######################################################################

pybind11_add_module(gtda_bottleneck "${BINDINGS_DIR}/bottleneck_bindings.cpp")
pybind11_add_module(gtda_bottleneck MODULE "${BINDINGS_DIR}/bottleneck_bindings.cpp")
set_property(TARGET gtda_bottleneck PROPERTY CXX_STANDARD 14)

target_link_libraries(gtda_bottleneck LINK_PUBLIC ${Boost_LIBRARIES})
Expand All @@ -103,7 +104,7 @@ endif()
# Cubical Complex #
#######################################################################

pybind11_add_module(gtda_cubical_complex "${BINDINGS_DIR}/cubical_complex_bindings.cpp")
pybind11_add_module(gtda_cubical_complex MODULE "${BINDINGS_DIR}/cubical_complex_bindings.cpp")
set_property(TARGET gtda_cubical_complex PROPERTY CXX_STANDARD 14)

if(OpenMP_FOUND)
Expand All @@ -128,7 +129,7 @@ endif()
# Persistent Cohomology #
#######################################################################

pybind11_add_module(gtda_persistent_cohomology "${BINDINGS_DIR}/persistent_cohomology_bindings.cpp")
pybind11_add_module(gtda_persistent_cohomology MODULE "${BINDINGS_DIR}/persistent_cohomology_bindings.cpp")
set_property(TARGET gtda_persistent_cohomology PROPERTY CXX_STANDARD 14)

if(OpenMP_FOUND)
Expand All @@ -155,7 +156,7 @@ endif()
# Simplex Tree #
#######################################################################

pybind11_add_module(gtda_simplex_tree "${BINDINGS_DIR}/simplex_tree_bindings.cpp")
pybind11_add_module(gtda_simplex_tree MODULE "${BINDINGS_DIR}/simplex_tree_bindings.cpp")
set_property(TARGET gtda_simplex_tree PROPERTY CXX_STANDARD 14)

if(OpenMP_FOUND)
Expand All @@ -171,6 +172,8 @@ target_include_directories(gtda_simplex_tree PRIVATE "${GUDHI_SRC_DIR}/Cech_comp
target_include_directories(gtda_simplex_tree PRIVATE "${GUDHI_SRC_DIR}/Persistent_cohomology/include")
target_include_directories(gtda_simplex_tree PRIVATE "${GUDHI_SRC_DIR}/Subsampling/include")
target_include_directories(gtda_simplex_tree PRIVATE "${GUDHI_SRC_DIR}/python/include")
target_include_directories(gtda_simplex_tree PRIVATE "${GUDHI_SRC_DIR}/Collapse/include")
target_include_directories(gtda_simplex_tree PRIVATE "${EIGEN_DIR}")

if(MSVC)
target_compile_options(gtda_simplex_tree PUBLIC $<$<CONFIG:RELEASE>: /O2 /Wall /fp:strict>)
Expand All @@ -184,7 +187,7 @@ endif()
# Periodic Cubical Complex #
#######################################################################

pybind11_add_module(gtda_periodic_cubical_complex "${BINDINGS_DIR}/periodic_cubical_complex_bindings.cpp")
pybind11_add_module(gtda_periodic_cubical_complex MODULE "${BINDINGS_DIR}/periodic_cubical_complex_bindings.cpp")
set_property(TARGET gtda_periodic_cubical_complex PROPERTY CXX_STANDARD 14)

if(OpenMP_FOUND)
Expand All @@ -211,7 +214,7 @@ endif()
# Witness Complex #
#######################################################################

pybind11_add_module(gtda_witness_complex "${BINDINGS_DIR}/witness_complex_bindings.cpp")
pybind11_add_module(gtda_witness_complex MODULE "${BINDINGS_DIR}/witness_complex_bindings.cpp")
set_property(TARGET gtda_witness_complex PROPERTY CXX_STANDARD 14)

if(OpenMP_FOUND)
Expand All @@ -227,6 +230,8 @@ target_include_directories(gtda_witness_complex PRIVATE "${GUDHI_SRC_DIR}/Cech_c
target_include_directories(gtda_witness_complex PRIVATE "${GUDHI_SRC_DIR}/Persistent_cohomology/include")
target_include_directories(gtda_witness_complex PRIVATE "${GUDHI_SRC_DIR}/python/include")
target_include_directories(gtda_witness_complex PRIVATE "${GUDHI_SRC_DIR}/common/include")
target_include_directories(gtda_witness_complex PRIVATE "${GUDHI_SRC_DIR}/Collapse/include")
target_include_directories(gtda_witness_complex PRIVATE "${EIGEN_DIR}")

if(MSVC)
target_compile_options(gtda_witness_complex PUBLIC $<$<CONFIG:RELEASE>: /O2 /Wall /fp:strict>)
Expand All @@ -240,7 +245,7 @@ endif()
# Strong Witness Complex #
#######################################################################

pybind11_add_module(gtda_strong_witness_complex "${BINDINGS_DIR}/strong_witness_complex_bindings.cpp")
pybind11_add_module(gtda_strong_witness_complex MODULE "${BINDINGS_DIR}/strong_witness_complex_bindings.cpp")
set_property(TARGET gtda_strong_witness_complex PROPERTY CXX_STANDARD 14)

if(OpenMP_FOUND)
Expand All @@ -256,6 +261,8 @@ target_include_directories(gtda_strong_witness_complex PRIVATE "${GUDHI_SRC_DIR}
target_include_directories(gtda_strong_witness_complex PRIVATE "${GUDHI_SRC_DIR}/Persistent_cohomology/include")
target_include_directories(gtda_strong_witness_complex PRIVATE "${GUDHI_SRC_DIR}/python/include")
target_include_directories(gtda_strong_witness_complex PRIVATE "${GUDHI_SRC_DIR}/common/include")
target_include_directories(gtda_strong_witness_complex PRIVATE "${GUDHI_SRC_DIR}/Collapse/include")
target_include_directories(gtda_strong_witness_complex PRIVATE "${EIGEN_DIR}")

if(MSVC)
target_compile_options(gtda_strong_witness_complex PUBLIC $<$<CONFIG:RELEASE>: /O2 /Wall /fp:strict>)
Expand All @@ -269,7 +276,7 @@ endif()
# RipsComplex #
#######################################################################

pybind11_add_module(gtda_sparse_rips_complex "${BINDINGS_DIR}/rips_complex_bindings.cpp")
pybind11_add_module(gtda_sparse_rips_complex MODULE "${BINDINGS_DIR}/rips_complex_bindings.cpp")
set_property(TARGET gtda_sparse_rips_complex PROPERTY CXX_STANDARD 14)

if(OpenMP_FOUND)
Expand All @@ -286,6 +293,8 @@ target_include_directories(gtda_sparse_rips_complex PRIVATE "${GUDHI_SRC_DIR}/Pe
target_include_directories(gtda_sparse_rips_complex PRIVATE "${GUDHI_SRC_DIR}/Rips_complex/include")
target_include_directories(gtda_sparse_rips_complex PRIVATE "${GUDHI_SRC_DIR}/Subsampling/include")
target_include_directories(gtda_sparse_rips_complex PRIVATE "${GUDHI_SRC_DIR}/python/include")
target_include_directories(gtda_sparse_rips_complex PRIVATE "${GUDHI_SRC_DIR}/Collapse/include")
target_include_directories(gtda_sparse_rips_complex PRIVATE "${EIGEN_DIR}")

if(MSVC)
target_compile_options(gtda_sparse_rips_complex PUBLIC $<$<CONFIG:RELEASE>: /O2 /Wall /fp:strict>)
Expand All @@ -299,7 +308,7 @@ endif()
# Cech Complex #
#######################################################################

pybind11_add_module(gtda_cech_complex "${BINDINGS_DIR}/cech_complex_bindings.cpp")
pybind11_add_module(gtda_cech_complex MODULE "${BINDINGS_DIR}/cech_complex_bindings.cpp")
set_property(TARGET gtda_cech_complex PROPERTY CXX_STANDARD 14)

if(OpenMP_FOUND)
Expand All @@ -314,6 +323,8 @@ target_include_directories(gtda_cech_complex PRIVATE "${GUDHI_SRC_DIR}/Cech_comp
target_include_directories(gtda_cech_complex PRIVATE "${GUDHI_SRC_DIR}/Persistent_cohomology/include")
target_include_directories(gtda_cech_complex PRIVATE "${GUDHI_SRC_DIR}/python/include")
target_include_directories(gtda_cech_complex PRIVATE "${GUDHI_SRC_DIR}/common/include")
target_include_directories(gtda_cech_complex PRIVATE "${GUDHI_SRC_DIR}/Collapse/include")
target_include_directories(gtda_cech_complex PRIVATE "${EIGEN_DIR}")

if(MSVC)
target_compile_options(gtda_cech_complex PUBLIC $<$<CONFIG:RELEASE>: /O2 /Wall /fp:strict>)
Expand All @@ -323,3 +334,28 @@ else()
target_compile_options(gtda_cech_complex PUBLIC $<$<CONFIG:DEBUG>:-O2 -ggdb -D_GLIBCXX_DEBUG>)
endif()

#######################################################################
# Collapser #
#######################################################################

pybind11_add_module(gtda_collapser MODULE "${BINDINGS_DIR}/collapser_bindings.cpp")
set_property(TARGET gtda_collapser PROPERTY CXX_STANDARD 14)

if(OpenMP_FOUND)
target_link_libraries(gtda_collapser PRIVATE OpenMP::OpenMP_CXX)
endif()

target_link_libraries(gtda_collapser LINK_PUBLIC ${Boost_LIBRARIES})
target_compile_definitions(gtda_collapser PRIVATE BOOST_RESULT_OF_USE_DECLTYPE=1 BOOST_ALL_NO_LIB=1 BOOST_SYSTEM_NO_DEPRECATED=1)

target_include_directories(gtda_collapser PRIVATE "${GUDHI_SRC_DIR}/common/include")
target_include_directories(gtda_collapser PRIVATE "${GUDHI_SRC_DIR}/Collapse/include")
target_include_directories(gtda_collapser PRIVATE "${EIGEN_DIR}")

if(MSVC)
target_compile_options(gtda_collapser PUBLIC $<$<CONFIG:RELEASE>: /O2 /Wall /fp:strict>)
target_compile_options(gtda_collapser PUBLIC $<$<CONFIG:DEBUG>:/O1 /DEBUG:FULL /Zi /Zo>)
else()
target_compile_options(gtda_collapser PUBLIC $<$<CONFIG:RELEASE>: -Ofast -shared -pthread -fPIC -fwrapv -Wall -fno-strict-aliasing -frounding-math>)
target_compile_options(gtda_collapser PUBLIC $<$<CONFIG:DEBUG>:-O2 -ggdb -D_GLIBCXX_DEBUG>)
endif()
7 changes: 4 additions & 3 deletions CODE_AUTHORS.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ The following is the list of code authors of the ``giotto-tda`` python package.

Where component authors are known, add them here.

| Guillaume Tauzin, guillaume.tauzin@epfl.ch
| Umberto Lupo, u.lupo@l2f.ch
| Lewis Tunstall, l.tunstall@l2f.ch
| Guillaume Tauzin, gtauzin@protonmail.com
| Umberto Lupo, umberto.lupo@epfl.ch
| Lewis Tunstall, lewis.c.tunstall@gmail.com
| Matteo Caorsi, m.caorsi@l2f.ch
| Philippe Nguyen, p.nguyen@l2f.ch
| Julian Burella Pérez, julian.burellaperez@heig-vd.ch
Expand All @@ -13,3 +13,4 @@ Where component authors are known, add them here.
| Anibal Medina-Mardones, anibal.medinamardones@epfl.ch
| Wojciech Reise, reisewojciech@gmail.com
| Roman Yurchak, roman.yurchak@symerio.com
| Nick Sale, nicholas.j.sale@gmail.com
3 changes: 2 additions & 1 deletion CONTRIBUTING.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ Contributing guidelines

This document only redirects to more `detailed instructions <https://giotto-ai.github.io/gtda-docs/latest/contributing>`_,
which consist of:

- a pull request checklist,
- a Contributor License Agreement,
- contributing guidelines and standards, including coding style guides.
- contributing guidelines and standards, including coding style guides.
4 changes: 2 additions & 2 deletions GOVERNANCE.rst
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ Authors:
Giotto-tda Project Team:
------------------------

- Umberto Lupo u.lupo@l2f.ch (Maintainer)
- Lewis Tunstall l.tunstall@l2f.ch (Maintainer)
- Umberto Lupo umberto.lupo@epfl.ch (Maintainer)
- Lewis Tunstall lewis.c.tunstall@gmail.com (Maintainer)
- Matteo Caorsi m.caorsi@l2f.ch (Project Leader)

Former Project Team Members:
Expand Down
24 changes: 10 additions & 14 deletions README.rst
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.. image:: doc/images/tda_logo.svg
.. image:: https://raw.githubusercontent.com/giotto-ai/giotto-tda/master/doc/images/tda_logo.svg
:width: 850

|Version|_ |Azure-build|_ |Azure-cov|_ |Azure-test|_ |Twitter-follow|_ |Slack-join|_
Expand Down Expand Up @@ -49,11 +49,6 @@ Documentation

Please visit `https://giotto-ai.github.io/gtda-docs <https://giotto-ai.github.io/gtda-docs>`_ and navigate to the version you are interested in.

Use cases
=========

For a wide selection of use cases and application domains, you can visit `this page <https://giotto.ai/learn/course-content>`_.

Installation
============

Expand All @@ -63,12 +58,13 @@ Dependencies
The latest stable version of ``giotto-tda`` requires:

- Python (>= 3.6)
- NumPy (>= 1.17.0)
- SciPy (>= 0.17.0)
- joblib (>= 0.13)
- scikit-learn (>= 0.22.0)
- python-igraph (>= 0.7.1.post6)
- plotly (>= 4.4.1)
- NumPy (>= 1.19.1)
- SciPy (>= 1.5.0)
- joblib (>= 0.16.0)
- scikit-learn (>= 0.23.1)
- pyflagser (>= 0.4.1)
- python-igraph (>= 0.8.2)
- plotly (>= 4.8.2)
- ipywidgets (>= 7.5.1)

To run the examples, jupyter is required.
Expand All @@ -78,15 +74,15 @@ User installation

The simplest way to install ``giotto-tda`` is using ``pip`` ::

pip install -U giotto-tda
python -m pip install -U giotto-tda

If necessary, this will also automatically install all the above dependencies. Note: we recommend
upgrading ``pip`` to a recent version as the above may fail on very old versions.

Pre-release, experimental builds containing recently added features, and/or
bug fixes can be installed by running ::

pip install -U giotto-tda-nightly
python -m pip install -U giotto-tda-nightly

The main difference between ``giotto-tda-nightly`` and the developer installation (see the section
on contributing, below) is that the former is shipped with pre-compiled wheels (similarly to the stable
Expand Down
Loading

0 comments on commit c826b5b

Please sign in to comment.