Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixed STC Bug #329

Merged
merged 21 commits into from Jul 15, 2020
Merged

Fixed STC Bug #329

merged 21 commits into from Jul 15, 2020

Conversation

ABostrom
Copy link
Contributor

@ABostrom ABostrom commented Jul 2, 2020

Reference Issues/PRs

Fixes #321

What does this implement/fix? Explain your changes.

Checks if pd.series passed and converts to numpy for internal use.

Any other comments?

Added some additional tests for STC although may be unneccessary

Added fix to STC to check if pd.Series and convert
@ABostrom ABostrom changed the title added two shapelet tests to demonstrate pd/np fix. Fixed STC Bug Jul 2, 2020
@mloning
Copy link
Contributor

mloning commented Jul 2, 2020

Since you're on it, if you have time, it'd be great to make shapelet comply with our interface more generally see #257 :)

@ABostrom
Copy link
Contributor Author

ABostrom commented Jul 2, 2020

Okay. I'll figure out whatever that error is. I suspect my tests are playing up. I'll have a look at #257 but I'll probably do it tomorrow :)

@ABostrom
Copy link
Contributor Author

ABostrom commented Jul 6, 2020

@mloning I will get round to this, suddenly got loads of work to juggle at the moment. Hopefully try to get a PR done for end of the week

@ABostrom
Copy link
Contributor Author

ABostrom commented Jul 9, 2020

Okay @mloning noticed another bug with random seeding which im also fixing to make sure STC is correct. Taking longer than expected.

@ABostrom
Copy link
Contributor Author

ABostrom commented Jul 9, 2020

@mloning I also noticed in base.py for the Base Classifier the predict method doesn't called check_is_fitted(). See my newest commit

@mloning
Copy link
Contributor

mloning commented Jul 9, 2020

@ABostrom if you're feeling brave you can remove all Shapelet related estimators from this list here, this will run all standard unit tests on them.

You may have to change the test hyper-params to make it faster (e.g. contract time to 10 secs or so) in the same file in this dictionary.

@ABostrom
Copy link
Contributor Author

ABostrom commented Jul 9, 2020

oooh. scary, will see what happens.

Fixed various issues with the checks. Idemptoency being a particular sticking point.
@ABostrom
Copy link
Contributor Author

So I think i've resolved the testing issues across all the shapelet family of algorithms. Learned alot about pytest so thanks for that @mloning :)

Copy link
Contributor

@mloning mloning left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

few quick comments

X, y = check_X_y(X, y, enforce_univariate=True)
self.n_classes = np.unique(y).shape[0]
self.classes_ = class_distribution(np.asarray(y).reshape(-1, 1))[0][0]
_X, _y = check_X_y(X, y, enforce_univariate=True)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do you create the underscore objects? Should work without the underscores, no?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

created the underscores as that was a suggestion you left me before about not overwriting input args
I'm happy to remove that.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

actually there was also a weird error, i think with the fact X was getting shuffled so i was getting an idemptoency failure because the shapes were mismatched.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah sorry I meant not overwriting hyper-parameters set in the constructor, input args can be overwritten

_y = _y.to_numpy()

# generate pipeline in fit so that random state can be propogated properly.
self.classifier = Pipeline([
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd call it self.classifier_, by sklearn convention, attributes changed in fit have a trailing underscore

@@ -48,15 +48,15 @@

# TODO fix estimators to pass all tests
EXCLUDED = [
'ContractedShapeletTransform',
# 'ContractedShapeletTransform',
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please remove all of the commented lines including the # 'MrSEQLClassifier' line to clean this up a bit

…onds, rather than 6seconds.

This gives slightly less variability in contracting.
Also added a 25% of the runtime of the max shapelet runtime to give some leeway on multiple runtime incase of CPU discrepancies
@ABostrom
Copy link
Contributor Author

@mloning @jasonlines So I think the current build errors, show case the current differences between my tsml implementation and the sktime one. Between the same run of the same datasets you cannot guarantee that you will evaluate the same amount of shapelets in the same time frame. Especially on different architectures etc. Which results in idemptoency failures and inconsistent outputs on the same seeds / datasets.

Might need to re-include them in the exclusion list, and review this particular check for future contract approaches.

@mloning
Copy link
Contributor

mloning commented Jul 10, 2020

@ABostrom does this only apply to the contracted version? Or also the ShapeletTransformClassifier?

@ABostrom
Copy link
Contributor Author

@mloning shapelet transform classifier uses the contracted shapelets in a pipeline with radnom forest

@mloning
Copy link
Contributor

mloning commented Jul 11, 2020

Let's wait if @jasonlines has any idea how to fix this, otherwise we could try to write some code to skip/ignore the idempotency test for shapelets

@ABostrom
Copy link
Contributor Author

@mloning I agree, I will have a little look at making some changes to _config.py and test_all_estimators to have an exclusion list for certain estimators.

@mloning
Copy link
Contributor

mloning commented Jul 13, 2020

@ABostrom decorators may work and may be the cleanest solution, something along the following lines:

@skip_if(estimator=[ShapeletTransform])
def check_idempotency():
    ....

Pytest may even have decorators for that already

@ABostrom
Copy link
Contributor Author

my preference and ofc feel free to overrule on this is that all config for tests should stay in config. Seems like with decorators, whilst addmittedly a clean solution could make it difficult where to track down or reconfigure tests in the future.

EXCLUDED_FROM_TESTS = { "ShapeletTransformClassifier": [check_fit_idempotent], "ContractedShapeletTransform": [check_fit_idempotent], }

@mloning
Copy link
Contributor

mloning commented Jul 13, 2020

Sounds good to me!

@ABostrom
Copy link
Contributor Author

@mloning I'm not sure how this works. If i change the config / pytests would that run my version of the tests or the old versions through travis etc?

@mloning
Copy link
Contributor

mloning commented Jul 13, 2020

It'll run whatever is on the PR I think, of course you can run them locally first to see if everything is working, so feel free to change things and push to the same branch. You also need to sync with the latest changes on dev.

@ABostrom
Copy link
Contributor Author

Yeah they have all been passing locally. Might be I'm being stupid. will debug it.

@ABostrom
Copy link
Contributor Author

changed the config params for ST to make sure it can actually finish in a time manner suitable for the build/CI server

@ABostrom
Copy link
Contributor Author

@mloning if you can check it over Markus. I think it's looking pretty good. Turned into a bit more than some "simple" shapelet fix. As always these things do :)

Copy link
Contributor

@mloning mloning left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @ABostrom thanks for all the work! Looks good, left a few minor comments! Happy to merge afterwards :)


# if y is a pd.series then convert to array.
if isinstance(_y, pd.Series):
_y = _y.to_numpy()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why not also simply have y instead of _y?

# from sktime.datasets import load_italy_power_demand


# def test_stc_with_pd():
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please remove the file if no longer needed - if we want to support y as a np.array we should probably add this to our collection of estimator checks and run it on all

@@ -118,38 +118,42 @@ def fit(self, X, y=None):
self : FullShapeletTransform
This estimator
"""
X = check_X(X, enforce_univariate=True)
_X, _y = check_X_y(X, y, enforce_univariate=True)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same here, having X and y should be fine no (without the underscores)?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

just makes it consistent with most other code in sklearn and sktime

@@ -53,7 +53,7 @@
]


def check_estimator(Estimator):
def check_estimator(Estimator, Check_Exclusions=None):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

for args please use lower case, so check_exclusions or simply exclude

check(Estimator)

# check if associated test is not included in the exclusion list
if not Check_Exclusions.__contains__(check.__name__):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not this? :)

Suggested change
if not Check_Exclusions.__contains__(check.__name__):
if check.__name__ not in Check_Exclusions:

from sktime.transformers.single_series.adapt import \
SingleSeriesTransformAdaptor
from sktime.transformers.single_series.detrend import Detrender
from sktime.transformers.series_as_features.interpolate import TSInterpolator

# TODO fix estimators to pass all tests
EXCLUDED = [
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe rename to EXCLUDED_ESTIMATORS

]

EXCLUDED_FROM_TESTS = {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

and this one to EXCLUDED_TESTS

@ABostrom
Copy link
Contributor Author

Will do these now. Was just sorting a PR for sktime-dl. but now thats done, I'll tidy this up.

@mloning
Copy link
Contributor

mloning commented Jul 15, 2020

@ABostrom looks all good to me now! Thanks for the clean up of shapelets! :) Ready to merge when you are.

@ABostrom
Copy link
Contributor Author

good to go Markus. Think it looks pretty comprehensive.

@mloning mloning merged commit 07597fd into sktime:dev Jul 15, 2020
@ABostrom ABostrom deleted the shapelet_bug branch July 15, 2020 11:06
mloning added a commit that referenced this pull request Aug 24, 2020
* fixed link to sktime-dl

* new community contributions management

* fixed link

* minor changes

* deleted previous estimator overview file|

* further comments in PR template

* typo

* Update PULL_REQUEST_TEMPLATE.md

* Update README.rst

* fixes #221

* updated openml compile error msg

* introduced our own NotFittedError, update check_is_fitted, minor updates

* compiled existing estimators in ESTIMATOR_OVERVIEW ... finally

* udpated setup

* updated README

* updated link to paper

* Update README.rst

* Adds ROCKET (transform only) to sktime. (#204)

* Adds ROCKET (transform only) to transformers.

* Update proposed ROCKET implementation and add unit test.

Updates: absolute imports, remove fit_transform(...), update 
constructor, fit(...) and transform(...), update internal 
implementation, add random seed argument to constructor, move 
_to_numpy(...) / dataframe_to_numpy(...) to utils/data_container.py, add 
basic test in transformers/tests/test_Rocket.py.

* Added some `np.testing.assert...` checks.

* Add numba to `requirements.txt`.

* Add numba to dependencies.

* Increase pandas min version to 0.24 for `.to_numpy()` for `dataframe_to_numpy(...)` in `utils/data_container.py'.

* Terminology change: `num_examples` to `n_instances', `num_channels` to `n_columns`, `input_length` to `n_timepoints`.

* Update validation import; add default value for num_kernels parameter; add example notebook.

* Update estimator overview.

* Updates as requested.

Co-authored-by: Markus Löning <markus.loning.17@ucl.ac.uk>

* Add Mr-SEQL time series classifier (#211)

* add mrseql classifier

* fix windows installation, remove files,add input checking

* small fix

* fix method to check multiclass

* add oneversusall class

* add mrseql unit test

* Fix unit test

* edit ESTIMATOR

* format code, add docstring, edit notebook example

* minor clean

* Implementing tsfresh transformer  (#231)

* finished input checks

* tsfresh feature extraction (univariate and multivariate

* refactored summarise and included convert_data in utils

* added tests for transformer, performed validation checks

* changed example

* added feature selector and example notebook

* Added validation checks, removed dependencies

* clean up

* Delete forecasting.ipynb

* restored forecasting notebook

* added tsfresh as soft dependency for tests

* added tsfresh as soft dependency for tests

* added tsfresh as soft dependency for tests

* removed efficient settings

* added docstrings, fixed typo

* improved setting of defaults, minor udpates

* updated docstrings

* added code comments

* Update ESTIMATOR_OVERVIEW.md

Co-authored-by: Ayushmaan <ayushmaanseth@gmail.com>

* enforcing unique index

* Fixed the conflicted values in TimeSeriesForestClassifier. (#233)

* Update documentation of TimeSeriesForestClassifier.

Co-authored-by: Markus Löning <markus.loning.17@ucl.ac.uk>

* Update build/CI (#241)

* updated setup.py 

* updated binder

* added support for python=3.8

* added support for manylinux wheels

* added CI on azure DevOps

* added automated release script

* added automatic PyPI upload from CI services

* added flake8 linting

* simplified requirements file

* Updated forecast API (#218)

* forecasting grid-search CV

* temporal cross-validation

* Theta forecaster 

* Naive forecasters

* SES forecasters

* sMAPE and MASE loss

* reduction meta-forecasters

* detrender

* TransformedTargetForecaster,

* AutoARIMA

* deseasonaliser

* fitted param extractor

* PolynomialTrendForecaster 

* ensemble and stacking forecaster

* sklearn transformer adaptor to single series setting

* boxcox transformer with bounds on lambda

Co-authored-by: big-o <big-o@users.noreply.github.com>

* added __init__ file for mrseql test (#249)

* fixed pmdarima in-sample test error

* Package refactoring  (#246)

* folder reorganisation
* unit testing for basic API for all estimators
* consistent input checks
* refactored high-level into benchmarking
* renamed n_trees to n_estimators
* refactored transformer module
* enforce PEP8 linting with flake8
* fixed warnings
* updated sklearn version

Co-authored-by: Patrick Rockenschaub <patrick.rockenschaub.15@ucl.ac.uk>
Co-authored-by: Matthew Middlehurst <pfm15hbu@uea.ac.uk>
Co-authored-by: Thach Le Nguyen <lenguyenthach141@gmail.com>
Co-authored-by: angus924 <55837131+angus924@users.noreply.github.com>

* Improve documentation (#238)

* added all-contributors specs
* added new issue template for doc improvements
* updated estimator overview and contributing guidelines
* updated website
* updated changelog
* added about page
* added mission statement
* added new logo

* added BaseTimeSeriesForest (#268)

* refactored TimeSeriesForestRegressor and TimeSeriesForestClassifier
Co-authored-by: mloning <markus.loning.17@ucl.ac.uk>

* Added release drafter app (#269)

* added release drafter workflow

* fixed release-drafter

* fixed release-drafter

* Update release-drafter.yml

* removed release-drafter app

* make tsfresh relevant feature extractor tests morerobust

* Add feature importance graph to modular TSF (#250)

* add feature importance graph to TSF
Co-authored-by: Markus Löning <markus.loning@gmail.com>

* added contributors

* Add license info to files (#274)

* fix speed issue for MrSEQL (#275)

* update license info

* Update example notebooks (#273)

* Release drafter (#270)

* added release drafter workflow

* Added resizing transformer and tutorial for use and problem it solves (#243)

* added Mo-Saif for finding bug

* added Amaia as contributor

* Minor fixes to documentation (#279)

* bumped version to 0.4.0

* fixed azure badge link

* fixed azure badge link

* fixed doc deployment

* excluded mrseql cython-compiled cpp file

* fixed travis cmd

* minor changes

* minor changes

* added new logo

* minor change

* simple typo correction (#305)

Co-authored-by: Hamzah Iqbal <hamzaiqb@amazon.com>

* updated install docs

* Added function to convert 3d numpy array to nested pandas dataframe (#304)

* Added function to convert 3d numpy array to nested pandas dataframe (issue: #298)

* Added unit tests for from_3d_numpy_to_nested() and nested_to_3d_numpy() functions and fixed linting errors

Co-authored-by: Markus Löning <markus.loning.17@ucl.ac.uk>

* Add doctoring for AutoARIMA (#307)

* Added docstring to AutoARIMA class in Arima.py

Co-authored-by: dicecko <dicecko@gmail.com>
Co-authored-by: Markus Löning <markus.loning.17@ucl.ac.uk>

* Fix: Update macOS advanced install instructions (#306) (#308)

* Update CONTRIBUTING.rst

* chore: updated installation instructions for MacOSX

Co-authored-by: Markus Löning <markus.loning.17@ucl.ac.uk>

* make knn compatible with sci-kit learn below 0.23 (#310)

Co-authored-by: Markus Löning <markus.loning.17@ucl.ac.uk>

* Add example notebooks for resizing transformer (#280)

* Added resizing transformer and tutorial that describes error that is caused by inequal sized time series + use of transformer

Co-authored-by: Markus Löning <markus.loning.17@ucl.ac.uk>

* add github workflow to assign tasks to people commenting 'take' (#312)

Co-authored-by: Hamzah Iqbal <hamzaiqb@amazon.com>

* Implementation of the Temporal Dictionary Ensemble (TDE) classifier (#292)

* Truncate Transformer (#315)

* Added ACSF dataset. (#314)

* Padding transformer (#318)

Co-authored-by: Markus Löning <markus.loning.17@ucl.ac.uk>

* minor fixes: typos, broken links, updated all contributors

* Example notebook for the feature_importances_ method (#319)

* Create an example notebook of the feature_importances_ method

* incorporate changes to the univariate example notebook

* Shapedtw feature branch (#287)

Co-authored-by: Vincent Nicholson (CMP) <vrq16kku@c0004.hpc.private>
Co-authored-by: Vincent Nicholson (CMP) <vrq16kku@login02.hpc.private>
Co-authored-by: Markus Löning <markus.loning.17@ucl.ac.uk>

* dictionary notebook speed up (#331)

* minor fix to notebook

* added contributors

* Fixed STC Bug (#329)

* added two shapelet tests to demonstrate pd/np fix.

Added fix to STC to check if pd.Series and convert

* fixed seeding issue in STC.
Added tests for verifying correctness of STC and underlying rotf/contracted transform.

* input arg checking to conform with new style

* tidy up

* added self.check_is_fitted() to base.py for baseclassifier
linting error fix

* removed shapelets from the exclusions list.
Fixed various issues with the checks. Idemptoency being a particular sticking point.

* fixed idemptoency issue for STC. Needed to construct pipeline in fit to avoid seeding issue.

* linting error

* tidy up

* changed the runtime to be slightly longer when testing. so it's 10seconds, rather than 6seconds.
This gives slightly less variability in contracting.
Also added a 25% of the runtime of the max shapelet runtime to give some leeway on multiple runtime incase of CPU discrepancies

* updated timing to be more concise

* additional changes to allow config to exclude certain estimators from certain tests.

* checking against wrong types in the dict

* _stc tests taking too long to complete

* changed shapelet transform params to ensure it finishes in a timely manner

* clean ups and consistency

* missed one.

* missed a refactor

Co-authored-by: Tony Bagnall <ajb@uea.ac.uk>

* Add missing docstrings to methods (#357)

* Fix instruction for checking out the dev branch from git. Old command did not work for me but the revised command does work.

* (#349) Add docstring to DirectRegressionForecaster, RecursiveRegressionForecaster, DirectTimeSeriesRegressionForecaster, RecursiveTimeSeriesRegressionForecaster

* (#349) Add docstring to PolynomialTrendForecaster

* (#349) Add docstring to ForecastingGridSearchCV

* (#349) Add docstring to FittedParamExtractor

* (#349) Add docstring to Detrender

* (#349) Correct docstring length (max 79 chars)

* #357 Clarify FittedParamExtractor description

Co-authored-by: Markus Löning <markus.loning@gmail.com>

* Add docstrings to describe input variables

* Correct docstring length (<79 chars

Co-authored-by: Markus Löning <markus.loning@gmail.com>

* Updated forecasting tutorial (#359)

- Added code to demonstrate how to tune scikitl-earn regressors in sktime
- And how to use the "scoring" argument of ForecastingGridSearchCV.

* Add seasonal strategies to NaiveForecaster (#335)

* Refactored seasonal last and implemented seasonal mean with help of sp param

* Refactored seasonal last in example ipython

* Added unit test for seasonal mean strategy and refactored unit test for seasonal last

* Styled to pep8 conventions

* Corrected unit test for seasonal mean in test_naive.py and added self.sp_ param for seasonal mean

* Modified last_window when fh<sp

* Styled to pep8

* Default value for sp made 1

* Implemented seasonal mean without pandas

* Refactored unit test for seasonal mean

* Modified documentation

* Refactored unit test for seasonal mean

* Refactored if condition of unit test for seasonal mean

* Verified for pep8

* clean up as discussed

* Modified doc string

* Removed local files

Co-authored-by: Markus Löning <markus.loning.17@ucl.ac.uk>

* Add drift strategy to NaiveForecaster (#337)

* Refactored seasonal last and implemented seasonal mean with help of sp param

* Refactored seasonal last in example ipython

* Added unit test for seasonal mean strategy and refactored unit test for seasonal last

* Styled to pep8 conventions

* Corrected unit test for seasonal mean in test_naive.py and added self.sp_ param for seasonal mean

* Modified last_window when fh<sp

* Styled to pep8

* Implemented drift strategy in naiveforecaster when data doesnot contain Nan

* Added unit test for drift strategy

* Default value for sp made 1

* Implemented seasonal mean without pandas

* Refactored unit test for seasonal mean

* Modified documentation

* Refactored unit test for seasonal mean

* Refactored if condition of unit test for seasonal mean

* Verified for pep8

* Added drift strategy

* Added  unit test for drift strategy

* Implemented drift strategy

* Refactored drift strategy

* Drift strategy implemented only when multiple values in window

* Refactored params for arange method

* Modified slope formula and added unit tests

* Update sktime/forecasting/naive.py

* Update sktime/forecasting/naive.py

* Update 3 sktime/forecasting/naive.py

* Update 4 sktime/forecasting/naive.py

* Update 5 sktime/forecasting/naive.py

* Update documentation

* Added a unit test for testing window length

* updated a unit test for testing window length

Co-authored-by: Piyush <gade@outlook.in>
Co-authored-by: Markus Löning <markus.loning.17@ucl.ac.uk>

Co-authored-by: fkiraly <f.kiraly@ucl.ac.uk>
Co-authored-by: angus924 <55837131+angus924@users.noreply.github.com>
Co-authored-by: Thach Le Nguyen <lenguyenthach141@gmail.com>
Co-authored-by: Ayushmaan <ayushmaanseth@gmail.com>
Co-authored-by: Ninnart Fuengfusin <ninnart.fuengfusin@yahoo.com>
Co-authored-by: big-o <big-o@users.noreply.github.com>
Co-authored-by: Patrick Rockenschaub <patrick.rockenschaub.15@ucl.ac.uk>
Co-authored-by: Matthew Middlehurst <pfm15hbu@uea.ac.uk>
Co-authored-by: HYang1996 <44179303+HYang1996@users.noreply.github.com>
Co-authored-by: Dmitriy Valetov <dmitvalet@gmail.com>
Co-authored-by: hiqbal2 <10302415+hiqbal2@users.noreply.github.com>
Co-authored-by: Hamzah Iqbal <hamzaiqb@amazon.com>
Co-authored-by: vedazeren <63582874+vedazeren@users.noreply.github.com>
Co-authored-by: btrtts <66252156+btrtts@users.noreply.github.com>
Co-authored-by: dicecko <dicecko@gmail.com>
Co-authored-by: sophijka <47450591+sophijka@users.noreply.github.com>
Co-authored-by: Cheuk Ting Ho <cheukting.ho@gmail.com>
Co-authored-by: Aaron Bostrom <a.bostrom@uea.ac.uk>
Co-authored-by: BANDASAITEJAREDDY <31387911+BandaSaiTejaReddy@users.noreply.github.com>
Co-authored-by: Multivin12 <36476633+Multivin12@users.noreply.github.com>
Co-authored-by: Vincent Nicholson (CMP) <vrq16kku@c0004.hpc.private>
Co-authored-by: Vincent Nicholson (CMP) <vrq16kku@login02.hpc.private>
Co-authored-by: Aaron Bostrom <aaron.bostrom1@gmail.com>
Co-authored-by: Tony Bagnall <ajb@uea.ac.uk>
Co-authored-by: Alexandra Amidon <alexandra.amidon@hotmail.com>
Co-authored-by: Huayi Wei <hw1103@nyu.edu>
Co-authored-by: Piyush1729 <64950012+Piyush1729@users.noreply.github.com>
Co-authored-by: sri1419 <65078278+sri1419@users.noreply.github.com>
Co-authored-by: Piyush <gade@outlook.in>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants