Meaningful titles for tabs and PDF downloads! Also supports tab search.

Overview

arxiv-utils

icon

If you are a researcher that reads a lot on ArXiv, you'll benefit a lot from this web extension.

  • Renames the title of PDF page to the paper's title.
  • Adds a button to navigate back to Abstract page.
  • Download PDF with paper's title as filename.
  • Works with Native Tab Search, and other plugins! (See the Solution Descriptions section for more details)
  • All required permissions are documented in detail.

Download Links

Supports Chrome, Firefox, Edge, Firefox on Android. (Android version is not tested)

Screenshots

The paper id in the title has been removed automatically! A direct download link is added to download PDF with paper's title as the filename! Finally... Meaningful paper title instead of paper id! (For Firefox, this is achieved through a custom PDF container.) Difficult to get back to abstract page... Click to get back to abstract page! TADA~ The abstract page is shown at the right of the PDF page! Both with meaningful title! The button is disabled if not in ArXiv's domain. Meaningful bookmark titles. Meaningful OneTab entries! (Chrome & Edge only) Opened too many tabs? Search in terms of the paper title! Works well with vertical tabs. Right-click the extension icon and select Options to set your preference. (Chrome & Edge) Go to add-ons page, click the extension select Options to set your preference. (Firefox)

Problem Description

ArXiv is a really nice website for researchers, but I think it has 3 main shortages:

  1. Unable to link to abstract page from PDF page if the PDF page is accessed directly.
  2. No meaningful title for the PDF page, the abstract page have a redundant paper id as the prefix of the title. Bookmarking the PDF page is useless for later bookmark searches.
  3. Downloading PDF requires a manual renaming afterwards.

This extension provides a solution to all of them!

Solution Descriptions

For ArXiv PDF / abstract tabs:

  • Renames the title to paper's title automatically in the background. (Originally is meaningless paper id, or start with paper id)
  • Add a browser button to open its corresponding abstract / PDF page. (Originally is hard to get back to abstract page from PDF page)
  • Add a direct download link on abstract page, click it to download the PDF with the title as filename. (Originally is paper id as filename)
  • Better title even for bookmarks and the OneTab plugin!
  • Firefox has strict restrictions on PDF.js. So it doesn't work well with OneTab, the PDF renaming is achieved by intercepting requests and show the PDF in a container. The bookmark works well though.
  • Works well with native tab search (credits: @The Rooler)

Chrome / Edge Documentation

Permissions

  • tabs: On button click, open a new tab and move it to the right of the old active tab.
  • activeTab: Read active tab's title and modify it using the tab's url.
  • storage: Save extension configurations.
  • *://export.arxiv.org/*: Query the title of the paper using the paper id retrieved in the tab's url.
  • *://arxiv.org/*: This plugin works on ArXiv's abstract and PDF page.

Methods

  • background (background.js)

    Mainly describes the methods for button click. (Open new tab)

    Compacted methods:

    // This background script is for adding the back to abstract button.
    var app = {};
    // All logs should start with this.
    app.name = "[arXiv-utils]";
    // Return the type parsed from the url. (Returns "PDF" or "Abstract")
    app.getType = function (url);
    // Return the id parsed from the url.
    app.getId = function (url, type);
    // Open the abstract / PDF page using the current URL.
    app.openAbstractTab = function (activeTabIdx, url, type);
    // Check if the URL is abstract or PDF page, returns true if the URL is either.
    app.checkURL = function (url);
    // Called when the url of a tab changes.
    app.updateBrowserActionState = function (tabId, changeInfo, tab);
    // Run this when the button clicked.
    app.run = function (tab) {
      if (!app.checkURL(tab.url)) {
        console.log(app.name, "Error: Not arXiv page.");
        return;
      }
      var type = app.getType(tab.url);
      app.openAbstractTab(tab.index, tab.url, type);
    }
    // Listen for any changes to the URL of any tab.
    chrome.tabs.onUpdated.addListener(app.updateBrowserActionState);
    // Extension button click to modify title.
    chrome.browserAction.onClicked.addListener(app.run);
  • content_scripts (content.js)

    Mainly describes what will be run when page loaded. (Modify tab title)

    Runs at document_end (The DOM has finished loading, but resources such as scripts and images may still be loading.) for urls: *://arxiv.org/*.pdf, *://arxiv.org/abs/*.

    Compacted methods:

    var app = {};
    // All logs should start with this.
    app.name = "[arXiv-utils]";
    // These 4 below are For checking if tab title has been updated.
    app.id = undefined;
    app.type = undefined;
    app.title = undefined;
    app.newTitle = undefined;
    // These 2 below are for inserting download link.
    app.firstAuthor = undefined;
    app.publishedYear = undefined;
    // Return the type parsed from the url. (Returns "PDF" or "Abstract")
    app.getType = function (url);
    // Return the id parsed from the url.
    app.getId = function (url, type);
    // Get the title asynchronously, call the callbacks with the id, the type, and the queried title as argument when request done (`callback(id, type, title, newTitle)`).
    // Updates `app`'s 4 variables: `title`, `type`, `id`, `newTitle` before callback.
    app.getTitleAsync = function (id, type, callback, callback2);
    // Insert the title into the active tab.
    // After the insertion, the title might be overwritten after the PDF has been loaded.
    app.insertTitle = function (id, type, title, newTitle) {
    // Add a direct download link if is abstract page.
    app.addDownloadLink = function (id, type, title, newTitle);
    // Run this after the page has finish loading.
    app.run = function () {
      var url = location.href;
      var type = app.getType(url);
      var id = app.getId(url, type);
      if (id === null) {
        console.log(app.name, "Error: Not in ArXiv pdf or abstract page, aborted.");
        return;
      }
      app.getTitleAsync(id, type, app.insertTitle, app.addDownloadLink);
    }
    // Change the title again if it has been overwritten (PDF page only).
    app.onMessage = function (tab, sender, sendResponse);
    // Listen for background script's message, since the title might be changed when PDF is loaded.
    chrome.runtime.onMessage.addListener(app.onMessage);
  • browser_action

    • When clicked on Abstract page: Open PDF page in new tab.
    • When clicked on PDF page: Open Abstract page in new tab.
    • Disabled outside ArXiv's domain.

Firefox Documentation

Permissions

  • tabs: On button click, open a new tab and move it to the right of the old active tab.
  • activeTab: Read active tab's title and modify it using the tab's url.
  • webRequest: Intercept ArXiv PDF request.
  • webRequestBlocking: Redirect the ArXiv PDF page to custom PDF container page.
  • bookmarks: When create a new bookmark of the PDF container page, bookmark the actual ArXiv PDF url instead.
  • storage: Save extension configurations.
  • *://export.arxiv.org/*: Query the title of the paper using the paper id retrieved in the tab's url.
  • *://arxiv.org/*: This plugin works on ArXiv's abstract and PDF page.
  • "content_security_policy": "script-src 'self'; object-src 'self' https://arxiv.org https://export.arxiv.org;": For embedding PDF in container.
  • "web_accessible_resources": [ "pdfviewer.html" ]: To redirect from HTTPS to extension custom page requires them to be visible.

Methods

  • background (background.js)

    Mainly describes the methods for button click. (Open new tab)

    Compacted methods:

    var app = {};
    // All logs should start with this.
    app.name = "[arXiv-utils]";
    // For our PDF container.
    app.pdfviewer = "pdfviewer.html";
    app.pdfviewerTarget = "pdfviewer.html?target=";
    // The match pattern for the URLs to redirect
    // Note: https://arxiv.org/pdf/<id> is the direct link, then the url is renamed to https://arxiv.org/pdf/<id>.pdf
    //       we capture only the last url (the one that ends with '.pdf').
    // Adding some extra parameter such as https://arxiv.org/pdf/<id>.pdf?download can bypass this capture.
    app.redirectPatterns = ["*://arxiv.org/*.pdf", "*://export.arxiv.org/*.pdf",
                            "*://arxiv.org/pdf/*", "*://export.arxiv.org/pdf/*"];
    // Return the type parsed from the url. (Returns "PDF" or "Abstract")
    app.getType = function (url);
    // Return the id parsed from the url.
    app.getId = function (url, type);
    // Open the abstract / PDF page using the current URL.
    app.openAbstractTab = function (activeTabIdx, url, type);
    // Check if the URL is abstract or PDF page, returns true if the URL is either.
    app.checkURL = function (url);
    // Called when the url of a tab changes.
    app.updateBrowserActionState = function (tabId, changeInfo, tab);
    // Redirect to custom PDF page.
    app.redirect = function (requestDetails);
    // If the custom PDF page is bookmarked, bookmark the original PDF link instead.
    app.modifyBookmark = function (id, bookmarkInfo);
    // Run this when the button clicked.
    app.run = function (tab) {
      if (!app.checkURL(tab.url)) {
        console.log(app.name, "Error: Not arXiv page.");
        return;
      }
      var type = app.getType(tab.url);
      app.openAbstractTab(tab.index, tab.url, type);
    }
    // Listen for any changes to the URL of any tab.
    chrome.tabs.onUpdated.addListener(app.updateBrowserActionState);
    // Extension button click to modify title.
    chrome.browserAction.onClicked.addListener(app.run);
    // Redirect the PDF page to custom PDF container page.
    chrome.webRequest.onBeforeRequest.addListener(
      app.redirect,
      { urls: app.redirectPatterns },
      ["blocking"]
    );
    // Capture bookmarking custom PDF page.
    chrome.bookmarks.onCreated.addListener(app.modifyBookmark);
  • content_scripts (content.js)

    Mainly describes what will be run when page loaded. (Modify tab title)

    Runs at document_end (The DOM has finished loading, but resources such as scripts and images may still be loading.) for urls: *://arxiv.org/abs/*.

    Compacted methods:

    var app = {};
    // All logs should start with this.
    app.name = "[arXiv-utils]";
    // These 2 below are for inserting download link.
    app.firstAuthor = undefined;
    app.publishedYear = undefined;
    // Return the id parsed from the url.
    app.getId = function (url);
    // Get the title asynchronously, call the callbacks with the id, the type, and the queried title as argument when request done (`callback(id, type, title, newTitle)`).
    app.getTitleAsync = function (id, type, callback, callback2);
    // Insert the title into the active tab.
    app.insertTitle = function (id, title, newTitle);
    // Add a direct download link if is abstract page.
    app.addDownloadLink = function (id, title, newTitle);
    // Run this after the page has finish loading.
    app.run = function () {
      var url = location.href;
      var id = app.getId(url);
      if (id === null) {
        console.log(app.name, "Error: Not in ArXiv pdf or abstract page, aborted.");
        return;
      }
      app.getTitleAsync(id, "Abstract", app.insertTitle, app.addDownloadLink);
    }
  • browser_action

    • When clicked on Abstract page: Open PDF page in new tab.
    • When clicked on PDF page: Open Abstract page in new tab.
    • Disabled outside ArXiv's domain.
  • PDF container (pdfviewer.html, pdfviewer.js) Embed the target pdf (retrieved from url parameter) in the page.

    var app = {};
    app.name = "[arXiv-utils]";
    // Return the id parsed from the url.
    app.getId = function (url);
    // Get the title asynchronously, call the callback with title as argument when request done.
    app.getTitleAsync = function (id, type, callback);
    // Insert the title into the active tab.
    app.insertTitle = function (title);
    // Extract the pdf url from 'pdfviewer.html?target=<pdfURL>'.
    app.extractURL = function ();
    // Inject embedded PDF.
    app.injectPDF = function (url);
    // Run this once.
    app.run = function () {
      var pdfURL = app.extractURL();
      var id = app.getId(pdfURL);
      app.getTitleAsync(id, "PDF", app.insertTitle);
      app.injectPDF(pdfURL);
    }

Test Flow (Manually)

Let's use this paper: Exploration via Flow-Based Intrinsic Rewards for example.

For Chrome, the Inspector can be opened to see the logs. Make sure there are no errors after performing the actions below:

For Firefox, the Inspector and Add-on Debugger can be opened to see the logs. Other installed add-ons may pollute the logs.

  • The extension button should be disabled outside ArXiv's domain.

  • Open abstract page, the title should be changed to Exploration via Flow-Based Intrinsic Rewards | Abstract instead of [1905.10071] Exploration via Flow-Based Intrinsic Rewards.

  • Click the extension button, the new PDF page should be opened at the right of the abstract page.

  • The opened PDF page should have title Exploration via Flow-Based Intrinsic Rewards | PDF instead of 1905.10071.pdf.

  • Firefox Only The PDF tab should have a long URL, which mean that the PDF are in the extension container.

  • Click the extension button, the new abstract page should be opened at the right of the PDF page.

  • Try to bookmark the abstract tab, the title should be the new title.

  • Try to bookmark the PDF tab, the title should be the new title.

  • Firefox Only Check the PDF bookmark's URL, it should be the original ArXiv PDF link.

  • Chrome Only If OneTab is installed, click its extension button, the list should show the updated titles of both abstract and PDF page.

  • Test PDF urls:

  • Test PDF download (Download PDF (arxiv-utils)) in abstract. In firefox, only mouse left-click works, middle-click open up the original PDF page in a new tab.

    • Change filename format options, reload page, and download to verify the filename is changed.
    • Reset filename format option to default, reload page, and download to verify the filename format is default.

Related Extensions

  • arXiv-title-fixer that works well on Google Chrome. This requires a button click to change the pdf title, but will be considered less intrusive than running in the background.
  • arxiv-url This claims to add a back button, but I can't get it working.
  • redirectify Automatically redirect PDF links to HTML index page for many academic paper sites.

Privacy Policy

We do not gather your personal data. If in doubt, please refer to the source code.

Comments
  • Tranform HTTP urls to HTTPS to honour the CSP

    Tranform HTTP urls to HTTPS to honour the CSP

    Hello,

    Using HTTP urls results in an empty page, because the content cannot be loaded due to CSP violation.

    Why are you using HTTP urls ?

    When using http://www.arxiv-sanity.com/ , the PDF link is in HTTP.

    Then arXiv-sanity should upgrade to put HTTPS links

    That's what I thought. However, they are getting the URL straight from the arXiv API response, e.g. this ling gives an XML where we can see they refer to the link in HTTP :(

    Also, the HTTP link doesn't result on malfunction on their end.

    opened by cipri-tom 7
  • Feature request: pdf links to abs

    Feature request: pdf links to abs

    Thanks a lot for the great plugin!

    Would it be possible to have a direct way to get from an arxiv.org/pdf/... hyperlink to to the abs page?

    Right now (on firefox) I have to

    1. left click the link,
    2. select 'cancel' in the download dialog,
    3. click the arxiv-utils browser button to get to the abs page, (4. select the added 'Direct Download' link.)

    The following solutions would be improvements; the first one or being able to choose one in the extension's preferences would be best in my opinion:

    1. standard arxiv pdf links directly lead to the abs page on left click,
    2. right click on standard arxiv pdf links offers option to go to abs page, (3. standard arxiv pdf links lead to download with the paper's title as filename (like the arxiv-utils 'Direct Download' link on the abs page.)
    opened by j-cb 6
  • Naming Convention

    Naming Convention

    Is it possible to add a naming convention option? "Article Title Author 1 Year" is the default one, however an option of Pascal case naming convention i.e., "ArticleTitleAuthor1Year" would be very good. Thanks in advance.

    enhancement 
    opened by htsenyasa 2
  • Arxiv pages not loading on FireFox 86.0

    Arxiv pages not loading on FireFox 86.0

    Hi,

    I really love this add-on, but unfortunately arxiv pages are no longer loading for me on FireFox 86.0. When I downgrade to 85.0.2 everything works correctly again.

    I know very little about Javascript or how browsers work, but when I press F12, I get the following:

    Works fine: 0.85.0.2

    [arXiv-utils] Retrieving title through ArXiv API request... pdfviewer.js:19:11
    [arXiv-utils] Injecting PDF: https://arxiv.org/pdf/2011.01277.pdf pdfviewer.js:52:11
    PDF c0fd665b66572ff7d2f6a12502d83637 [1.5 pdfTeX-1.40.21 / LaTeX with hyperref] (PDF.js: 2.7.345)
    

    Does not load (white page): 0.86

    [arXiv-utils] Retrieving title through ArXiv API request... pdfviewer.js:19:11
    [arXiv-utils] Injecting PDF: https://arxiv.org/pdf/2008.02941.pdf pdfviewer.js:52:11
    Content Security Policy: The page’s settings blocked the loading of a resource at https://arxiv.org/pdf/2008.02941.pdf (“object-src”).
    Cookie “arxiv_bibex” will be soon treated as cross-site cookie against “https://export.arxiv.org/api/query?id_list=2008.02941” because the scheme does not match.
    

    The third line is in red and says error, whereas the 4th line is a warning.

    Any idea on what might be wrong? I'm on Ubuntu 16.04.

    opened by therooler 2
  • The title of PDF page is the pdf's title (as opposed to paper title)

    The title of PDF page is the pdf's title (as opposed to paper title)

    For example, page title for pdf of https://arxiv.org/abs/1906.07413 is "Sharelatex Example" instead of "Learning Imbalanced Datasets with Label-Distribution-Aware Margin Loss"

    opened by alicanb 1
  • Automated build and publish

    Automated build and publish

    https://github.com/mozilla/web-ext

    Chrome: https://developer.chrome.com/docs/extensions/mv3/tut_debugging/ https://developer.chrome.com/docs/webstore/using_webstore_api/ https://github.com/fregante/chrome-webstore-upload

    Firefox: https://blog.mozilla.org/addons/2022/03/17/new-api-for-submitting-and-updating-add-ons/

    Edge: https://learn.microsoft.com/en-us/microsoft-edge/extensions-chromium/publish/api/using-addons-api

    opened by j3soon 0
  • Make Firefox extension support PDF navigation via included PDF viewer

    Make Firefox extension support PDF navigation via included PDF viewer

    Hi,

    As discussed in #4 , we cannot navigate in the PDF. This is due to the embedded PDF not allowing history: https://github.com/mozilla/pdf.js/blob/c791e01bfc280fb6abc476dece21c6a88d2340df/web/app.js#L525-L527

    They do this on purpose: https://github.com/mozilla/pdf.js/issues/8121

    So the only solution is to have our own PDF viewer, and hope that some day Firefox will enable either content_scripts on PDF, or a WebExtension PDF that serves as API, which we could extend.

    In this PR I add the original pdf.js repo, and link it to the extension code. Here's how it looks:

    https://user-images.githubusercontent.com/2991890/209977019-fc7c5043-ee2b-4f38-bfa2-55a6e81d9154.mp4

    (this video does not play on firefox 😕 the irony... )

    Maintainance

    We will need to keep an eye out for new releases of PDF.js and merge them into the repo. I believe this shouldn't be too difficult: pull the newer tag from mozilla, and merge it into arxiv-utils-customisation branch ; then run gulp generic. We can do it by hand the first couple of times, and if it works well, we can add a GitHub action to do it automatically.

    Next steps

    A part I'm not very happy about is the linking from the dist all the way up to the root project. Maybe we can separate them better?

    Finally, one part that I am totally missing is how to build the extension. I think we need to zip certain files, right ? If you have a doc about this, I can add the building scripts (zipping, etc).

    What do you think ?

    opened by cipri-tom 2
  • Allow customizable download subfolder

    Allow customizable download subfolder

    See the links below:

    • https://developer.chrome.com/docs/extensions/reference/downloads/
    • https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/downloads/download

    For arbitrary folders, it may be possible to use mklink or ln command.

    (Feature Request from Twitter: https://twitter.com/aerinykim/status/1465179136624713735)

    opened by j3soon 0
  • Support the old URL scheme

    Support the old URL scheme

    Hi, Thanks for this helpful plugin.

    It looks that arxiv-utils currently does not support the old URL (or identifier) scheme described here when opening abs given a pdf URL, and I think it would be a nice addition to this extension.

    opened by jaekyeom 3
Releases(v1.6.0)
Owner
Johnson
Johnson
PyTorch implementation of residual gated graph ConvNets, ICLR’18

Residual Gated Graph ConvNets April 24, 2018 Xavier Bresson http://www.ntu.edu.sg/home/xbresson https://github.com/xbresson https://twitter.com/xbress

Xavier Bresson 112 Aug 10, 2022
[ICLR2021] Unlearnable Examples: Making Personal Data Unexploitable

Unlearnable Examples Code for ICLR2021 Spotlight Paper "Unlearnable Examples: Making Personal Data Unexploitable " by Hanxun Huang, Xingjun Ma, Sarah

Hanxun Huang 98 Dec 07, 2022
This is the implementation of our work Deep Extreme Cut (DEXTR), for object segmentation from extreme points.

This is the implementation of our work Deep Extreme Cut (DEXTR), for object segmentation from extreme points.

Sergi Caelles 828 Jan 05, 2023
Implementation for Shape from Polarization for Complex Scenes in the Wild

sfp-wild Implementation for Shape from Polarization for Complex Scenes in the Wild project website | paper Code and dataset will be released soon. Int

Chenyang LEI 41 Dec 23, 2022
The final project for "Applying AI to Wearable Device Data" course from "AI for Healthcare" - Udacity.

Motion Compensated Pulse Rate Estimation Overview This project has 2 main parts. Develop a Pulse Rate Algorithm on the given training data. Then Test

Omar Laham 2 Oct 25, 2022
We present a regularized self-labeling approach to improve the generalization and robustness properties of fine-tuning.

Overview This repository provides the implementation for the paper "Improved Regularization and Robustness for Fine-tuning in Neural Networks", which

NEU-StatsML-Research 21 Sep 08, 2022
MCMC samplers for Bayesian estimation in Python, including Metropolis-Hastings, NUTS, and Slice

Sampyl May 29, 2018: version 0.3 Sampyl is a package for sampling from probability distributions using MCMC methods. Similar to PyMC3 using theano to

Mat Leonard 304 Dec 25, 2022
A Real-Time-Strategy game for Deep Learning research

Description DeepRTS is a high-performance Real-TIme strategy game for Reinforcement Learning research. It is written in C++ for performance, but provi

Centre for Artificial Intelligence Research (CAIR) 156 Dec 19, 2022
Unofficial PyTorch Implementation of "Augmenting Convolutional networks with attention-based aggregation"

Pytorch Implementation of Augmenting Convolutional networks with attention-based aggregation This is the unofficial PyTorch Implementation of "Augment

DK 20 Sep 09, 2022
EXplainable Artificial Intelligence (XAI)

EXplainable Artificial Intelligence (XAI) This repository includes the codes for different projects on eXplainable Artificial Intelligence (XAI) by th

4 Nov 28, 2022
[ArXiv 2021] Data-Efficient Instance Generation from Instance Discrimination

InsGen - Data-Efficient Instance Generation from Instance Discrimination Data-Efficient Instance Generation from Instance Discrimination Ceyuan Yang,

GenForce: May Generative Force Be with You 93 Dec 25, 2022
CVPR2021 Content-Aware GAN Compression

Content-Aware GAN Compression [ArXiv] Paper accepted to CVPR2021. @inproceedings{liu2021content, title = {Content-Aware GAN Compression}, auth

52 Nov 06, 2022
A library of extension and helper modules for Python's data analysis and machine learning libraries.

Mlxtend (machine learning extensions) is a Python library of useful tools for the day-to-day data science tasks. Sebastian Raschka 2014-2020 Links Doc

Sebastian Raschka 4.2k Jan 02, 2023
Large scale and asynchronous Hyperparameter Optimization at your fingertip.

Syne Tune This package provides state-of-the-art distributed hyperparameter optimizers (HPO) where trials can be evaluated with several backend option

Amazon Web Services - Labs 236 Jan 01, 2023
Autoformer: Decomposition Transformers with Auto-Correlation for Long-Term Series Forecasting

Autoformer (NeurIPS 2021) Autoformer: Decomposition Transformers with Auto-Correlation for Long-Term Series Forecasting Time series forecasting is a c

THUML @ Tsinghua University 847 Jan 08, 2023
Learning Dense Representations of Phrases at Scale (Lee et al., 2020)

DensePhrases DensePhrases provides answers to your natural language questions from the entire Wikipedia in real-time. While it efficiently searches th

Princeton Natural Language Processing 540 Dec 30, 2022
Edge Restoration Quality Assessment

ERQA - Edge Restoration Quality Assessment ERQA - a full-reference quality metric designed to analyze how good image and video restoration methods (SR

MSU Video Group 27 Dec 17, 2022
Official PyTorch implementation of our AAAI22 paper: TransMEF: A Transformer-Based Multi-Exposure Image Fusion Framework via Self-Supervised Multi-Task Learning. Code will be available soon.

Official-PyTorch-Implementation-of-TransMEF Official PyTorch implementation of our AAAI22 paper: TransMEF: A Transformer-Based Multi-Exposure Image Fu

117 Dec 27, 2022
Python binding for Khiva library.

Khiva-Python Build Documentation Build Linux and Mac OS Build Windows Code Coverage README This is the Khiva Python binding, it allows the usage of Kh

Shapelets 46 Oct 16, 2022