stopslop 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- stopslop-0.1.0/.gitignore +24 -0
- stopslop-0.1.0/LICENSE +21 -0
- stopslop-0.1.0/PKG-INFO +177 -0
- stopslop-0.1.0/README.md +130 -0
- stopslop-0.1.0/analytics-requirements.txt +11 -0
- stopslop-0.1.0/pyproject.toml +101 -0
- stopslop-0.1.0/src/stopslop/__init__.py +14 -0
- stopslop-0.1.0/src/stopslop/__main__.py +2 -0
- stopslop-0.1.0/src/stopslop/aggregate.py +252 -0
- stopslop-0.1.0/src/stopslop/baselines.py +42 -0
- stopslop-0.1.0/src/stopslop/checker.py +331 -0
- stopslop-0.1.0/src/stopslop/cli.py +331 -0
- stopslop-0.1.0/src/stopslop/corpus.py +138 -0
- stopslop-0.1.0/src/stopslop/crawler.py +132 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/acl/2010/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/acl/2011/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/acl/2012/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/acl/2013/stats.json +146 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/acl/2014/stats.json +287 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/acl/2015/stats.json +945 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/acl/2016/stats.json +900 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/acl/2017/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/acl/2018/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/acl/2019/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/acl/2020/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/acl/2021/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/acl/2022/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/acl/2023/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/acl/2024/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/acl/2025/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/acl/2026/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/emnlp/2010/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/emnlp/2011/stats.json +99 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/emnlp/2012/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/emnlp/2013/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/emnlp/2014/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/emnlp/2015/stats.json +336 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/emnlp/2016/stats.json +759 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/emnlp/2017/stats.json +759 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/emnlp/2020/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/emnlp/2021/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/emnlp/2022/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/emnlp/2023/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/emnlp/2024/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/emnlp/2025/stats.json +947 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/emnlp/2026/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/iclr/2010/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/iclr/2011/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/iclr/2012/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/iclr/2013/stats.json +522 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/iclr/2014/stats.json +287 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/iclr/2015/stats.json +287 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/iclr/2016/stats.json +477 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/iclr/2017/stats.json +947 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/iclr/2018/stats.json +947 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/iclr/2019/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/iclr/2020/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/iclr/2021/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/iclr/2022/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/iclr/2023/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/iclr/2024/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/iclr/2025/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/iclr/2026/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/icml/2010/stats.json +146 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/icml/2011/stats.json +287 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/icml/2012/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/icml/2013/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/icml/2014/stats.json +945 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/icml/2015/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/icml/2016/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/icml/2017/stats.json +947 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/icml/2018/stats.json +947 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/icml/2019/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/icml/2020/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/icml/2021/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/icml/2022/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/icml/2023/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/icml/2024/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/icml/2025/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/icml/2026/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/jmlr/2010/stats.json +240 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/jmlr/2011/stats.json +287 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/jmlr/2012/stats.json +663 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/jmlr/2013/stats.json +477 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/jmlr/2014/stats.json +616 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/jmlr/2015/stats.json +898 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/jmlr/2016/stats.json +808 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/jmlr/2017/stats.json +522 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/jmlr/2018/stats.json +663 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/jmlr/2019/stats.json +757 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/jmlr/2020/stats.json +804 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/jmlr/2021/stats.json +804 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/jmlr/2022/stats.json +663 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/jmlr/2023/stats.json +804 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/jmlr/2024/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/jmlr/2025/stats.json +663 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/jmlr/2026/stats.json +522 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/neurips/2010/stats.json +287 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/neurips/2011/stats.json +240 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/neurips/2012/stats.json +569 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/neurips/2013/stats.json +616 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/neurips/2014/stats.json +759 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/neurips/2015/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/neurips/2016/stats.json +947 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/neurips/2017/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/neurips/2018/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/neurips/2019/stats.json +947 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/neurips/2020/stats.json +947 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/neurips/2021/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/neurips/2022/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/neurips/2023/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/neurips/2024/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/neurips/2025/stats.json +945 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/neurips/2026/stats.json +287 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/tmlr/2022/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/tmlr/2023/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/tmlr/2024/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/tmlr/2025/stats.json +804 -0
- stopslop-0.1.0/src/stopslop/data/pdfminer/tmlr/2026/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/acl/2010/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/acl/2011/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/acl/2012/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/acl/2013/stats.json +146 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/acl/2014/stats.json +287 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/acl/2015/stats.json +945 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/acl/2016/stats.json +945 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/acl/2017/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/acl/2018/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/acl/2019/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/acl/2020/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/acl/2021/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/acl/2022/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/acl/2023/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/acl/2024/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/acl/2025/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/acl/2026/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/emnlp/2010/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/emnlp/2011/stats.json +99 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/emnlp/2012/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/emnlp/2013/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/emnlp/2014/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/emnlp/2015/stats.json +381 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/emnlp/2016/stats.json +804 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/emnlp/2017/stats.json +804 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/emnlp/2020/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/emnlp/2021/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/emnlp/2022/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/emnlp/2023/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/emnlp/2024/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/emnlp/2025/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/emnlp/2026/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/iclr/2010/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/iclr/2011/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/iclr/2012/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/iclr/2013/stats.json +522 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/iclr/2014/stats.json +287 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/iclr/2015/stats.json +287 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/iclr/2016/stats.json +522 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/iclr/2017/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/iclr/2018/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/iclr/2019/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/iclr/2020/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/iclr/2021/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/iclr/2022/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/iclr/2023/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/iclr/2024/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/iclr/2025/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/iclr/2026/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/icml/2010/stats.json +146 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/icml/2011/stats.json +287 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/icml/2012/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/icml/2013/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/icml/2014/stats.json +945 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/icml/2015/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/icml/2016/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/icml/2017/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/icml/2018/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/icml/2019/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/icml/2020/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/icml/2021/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/icml/2022/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/icml/2023/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/icml/2024/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/icml/2025/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/icml/2026/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/jmlr/2010/stats.json +240 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/jmlr/2011/stats.json +287 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/jmlr/2012/stats.json +663 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/jmlr/2013/stats.json +522 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/jmlr/2014/stats.json +616 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/jmlr/2015/stats.json +898 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/jmlr/2016/stats.json +945 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/jmlr/2017/stats.json +522 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/jmlr/2018/stats.json +663 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/jmlr/2019/stats.json +757 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/jmlr/2020/stats.json +804 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/jmlr/2021/stats.json +804 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/jmlr/2022/stats.json +663 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/jmlr/2023/stats.json +759 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/jmlr/2024/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/jmlr/2025/stats.json +663 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/jmlr/2026/stats.json +522 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/neurips/2010/stats.json +287 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/neurips/2011/stats.json +240 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/neurips/2012/stats.json +569 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/neurips/2013/stats.json +616 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/neurips/2014/stats.json +804 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/neurips/2015/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/neurips/2016/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/neurips/2017/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/neurips/2018/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/neurips/2019/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/neurips/2020/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/neurips/2021/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/neurips/2022/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/neurips/2023/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/neurips/2024/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/neurips/2025/stats.json +945 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/neurips/2026/stats.json +287 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/tmlr/2022/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/tmlr/2023/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/tmlr/2024/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/tmlr/2025/stats.json +804 -0
- stopslop-0.1.0/src/stopslop/data/pymupdf/tmlr/2026/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/acl/2010/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/acl/2011/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/acl/2012/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/acl/2013/stats.json +146 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/acl/2014/stats.json +287 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/acl/2015/stats.json +945 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/acl/2016/stats.json +945 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/acl/2017/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/acl/2018/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/acl/2019/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/acl/2020/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/acl/2021/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/acl/2022/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/acl/2023/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/acl/2024/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/acl/2025/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/acl/2026/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/emnlp/2010/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/emnlp/2011/stats.json +99 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/emnlp/2012/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/emnlp/2013/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/emnlp/2014/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/emnlp/2015/stats.json +381 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/emnlp/2016/stats.json +804 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/emnlp/2017/stats.json +804 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/emnlp/2020/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/emnlp/2021/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/emnlp/2022/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/emnlp/2023/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/emnlp/2024/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/emnlp/2025/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/emnlp/2026/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/iclr/2010/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/iclr/2011/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/iclr/2012/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/iclr/2013/stats.json +522 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/iclr/2014/stats.json +287 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/iclr/2015/stats.json +287 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/iclr/2016/stats.json +522 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/iclr/2017/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/iclr/2018/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/iclr/2019/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/iclr/2020/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/iclr/2021/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/iclr/2022/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/iclr/2023/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/iclr/2024/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/iclr/2025/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/iclr/2026/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/icml/2010/stats.json +146 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/icml/2011/stats.json +287 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/icml/2012/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/icml/2013/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/icml/2014/stats.json +945 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/icml/2015/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/icml/2016/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/icml/2017/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/icml/2018/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/icml/2019/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/icml/2020/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/icml/2021/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/icml/2022/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/icml/2023/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/icml/2024/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/icml/2025/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/icml/2026/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/jmlr/2010/stats.json +240 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/jmlr/2011/stats.json +287 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/jmlr/2012/stats.json +663 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/jmlr/2013/stats.json +522 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/jmlr/2014/stats.json +616 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/jmlr/2015/stats.json +898 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/jmlr/2016/stats.json +945 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/jmlr/2017/stats.json +522 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/jmlr/2018/stats.json +663 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/jmlr/2019/stats.json +757 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/jmlr/2020/stats.json +804 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/jmlr/2021/stats.json +804 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/jmlr/2022/stats.json +663 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/jmlr/2023/stats.json +804 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/jmlr/2024/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/jmlr/2025/stats.json +663 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/jmlr/2026/stats.json +522 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/neurips/2010/stats.json +287 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/neurips/2011/stats.json +240 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/neurips/2012/stats.json +569 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/neurips/2013/stats.json +616 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/neurips/2014/stats.json +804 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/neurips/2015/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/neurips/2016/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/neurips/2017/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/neurips/2018/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/neurips/2019/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/neurips/2020/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/neurips/2021/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/neurips/2022/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/neurips/2023/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/neurips/2024/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/neurips/2025/stats.json +945 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/neurips/2026/stats.json +287 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/tmlr/2022/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/tmlr/2023/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/tmlr/2024/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/tmlr/2025/stats.json +804 -0
- stopslop-0.1.0/src/stopslop/data/pypdf/tmlr/2026/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/acl/2010/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/acl/2011/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/acl/2012/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/acl/2013/stats.json +146 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/acl/2014/stats.json +287 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/acl/2015/stats.json +945 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/acl/2016/stats.json +945 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/acl/2017/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/acl/2018/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/acl/2019/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/acl/2020/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/acl/2021/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/acl/2022/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/acl/2023/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/acl/2024/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/acl/2025/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/acl/2026/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/emnlp/2010/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/emnlp/2011/stats.json +99 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/emnlp/2012/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/emnlp/2013/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/emnlp/2014/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/emnlp/2015/stats.json +381 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/emnlp/2016/stats.json +804 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/emnlp/2017/stats.json +804 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/emnlp/2020/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/emnlp/2021/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/emnlp/2022/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/emnlp/2023/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/emnlp/2024/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/emnlp/2025/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/emnlp/2026/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/iclr/2010/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/iclr/2011/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/iclr/2012/stats.json +51 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/iclr/2013/stats.json +522 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/iclr/2014/stats.json +287 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/iclr/2015/stats.json +287 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/iclr/2016/stats.json +522 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/iclr/2017/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/iclr/2018/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/iclr/2019/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/iclr/2020/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/iclr/2021/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/iclr/2022/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/iclr/2023/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/iclr/2024/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/iclr/2025/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/iclr/2026/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/icml/2010/stats.json +146 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/icml/2011/stats.json +287 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/icml/2012/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/icml/2013/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/icml/2014/stats.json +945 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/icml/2015/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/icml/2016/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/icml/2017/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/icml/2018/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/icml/2019/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/icml/2020/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/icml/2021/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/icml/2022/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/icml/2023/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/icml/2024/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/icml/2025/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/icml/2026/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/jmlr/2010/stats.json +240 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/jmlr/2011/stats.json +287 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/jmlr/2012/stats.json +663 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/jmlr/2013/stats.json +522 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/jmlr/2014/stats.json +616 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/jmlr/2015/stats.json +898 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/jmlr/2016/stats.json +945 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/jmlr/2017/stats.json +522 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/jmlr/2018/stats.json +663 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/jmlr/2019/stats.json +757 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/jmlr/2020/stats.json +804 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/jmlr/2021/stats.json +804 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/jmlr/2022/stats.json +663 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/jmlr/2023/stats.json +804 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/jmlr/2024/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/jmlr/2025/stats.json +663 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/jmlr/2026/stats.json +522 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/neurips/2010/stats.json +287 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/neurips/2011/stats.json +240 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/neurips/2012/stats.json +569 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/neurips/2013/stats.json +616 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/neurips/2014/stats.json +804 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/neurips/2015/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/neurips/2016/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/neurips/2017/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/neurips/2018/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/neurips/2019/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/neurips/2020/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/neurips/2021/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/neurips/2022/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/neurips/2023/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/neurips/2024/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/neurips/2025/stats.json +945 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/neurips/2026/stats.json +287 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/tmlr/2022/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/tmlr/2023/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/tmlr/2024/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/tmlr/2025/stats.json +804 -0
- stopslop-0.1.0/src/stopslop/data/pypdfium2/tmlr/2026/stats.json +992 -0
- stopslop-0.1.0/src/stopslop/extract.py +238 -0
- stopslop-0.1.0/src/stopslop/extractors/__init__.py +73 -0
- stopslop-0.1.0/src/stopslop/extractors/pdfminer.py +36 -0
- stopslop-0.1.0/src/stopslop/extractors/pymupdf.py +34 -0
- stopslop-0.1.0/src/stopslop/extractors/pypdf.py +33 -0
- stopslop-0.1.0/src/stopslop/extractors/pypdfium2.py +36 -0
- stopslop-0.1.0/src/stopslop/metrics.py +342 -0
- stopslop-0.1.0/src/stopslop/sources/__init__.py +24 -0
- stopslop-0.1.0/src/stopslop/sources/arxiv.py +84 -0
- stopslop-0.1.0/src/stopslop/sources/openreview.py +26 -0
- stopslop-0.1.0/src/stopslop/trends.py +584 -0
- stopslop-0.1.0/src/stopslop/venues.py +59 -0
- stopslop-0.1.0/tests/test_cli.py +22 -0
- stopslop-0.1.0/tests/test_metrics.py +101 -0
- stopslop-0.1.0/tests/test_packaging.py +218 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Crawled PDFs are large (325 MB for four venue-years) and re-fetchable: the
|
|
2
|
+
# crawler is idempotent, so `stopslop crawl <venue> <year>` rebuilds them from the
|
|
3
|
+
# ids recorded in stats.json. The measurements are what matter and they ARE
|
|
4
|
+
# committed -- stats.json is the artifact a report can be audited against.
|
|
5
|
+
corpus/**/*.pdf
|
|
6
|
+
# Measurements are generated artifacts and live in the package, under
|
|
7
|
+
# src/stopslop/data/<extractor>/. corpus/ is now purely a PDF cache.
|
|
8
|
+
corpus/
|
|
9
|
+
__pycache__/
|
|
10
|
+
|
|
11
|
+
# Build artifacts
|
|
12
|
+
*.egg-info/
|
|
13
|
+
dist/
|
|
14
|
+
build/
|
|
15
|
+
.venv*/
|
|
16
|
+
.pytest_cache/
|
|
17
|
+
|
|
18
|
+
# Belt and braces against the one accident that would hurt: a crawl pointed at
|
|
19
|
+
# the packaged tree. Only stats.json is ever meant to live there, and
|
|
20
|
+
# tests/test_packaging.py fails if a PDF does. This stops it reaching a commit.
|
|
21
|
+
src/stopslop/data/**/*.pdf
|
|
22
|
+
|
|
23
|
+
# Per-extractor remeasure logs
|
|
24
|
+
remeasure_*.log
|
stopslop-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Dmitrii Khizbullin
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
stopslop-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: stopslop
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Measure a paper's prose against how a venue actually wrote, before and after LLMs existed
|
|
5
|
+
Project-URL: Homepage, https://github.com/dmitrii-khizbullin/stopslop
|
|
6
|
+
Project-URL: Source, https://github.com/dmitrii-khizbullin/stopslop
|
|
7
|
+
Author: Dmitrii Khizbullin
|
|
8
|
+
License: MIT License
|
|
9
|
+
|
|
10
|
+
Copyright (c) 2026 Dmitrii Khizbullin
|
|
11
|
+
|
|
12
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
13
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
14
|
+
in the Software without restriction, including without limitation the rights
|
|
15
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
16
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
17
|
+
furnished to do so, subject to the following conditions:
|
|
18
|
+
|
|
19
|
+
The above copyright notice and this permission notice shall be included in all
|
|
20
|
+
copies or substantial portions of the Software.
|
|
21
|
+
|
|
22
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
23
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
24
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
25
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
26
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
27
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
28
|
+
SOFTWARE.
|
|
29
|
+
License-File: LICENSE
|
|
30
|
+
Keywords: academic-writing,corpus,llm,prose,stylometry
|
|
31
|
+
Classifier: Development Status :: 3 - Alpha
|
|
32
|
+
Classifier: Intended Audience :: Science/Research
|
|
33
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
34
|
+
Classifier: Programming Language :: Python :: 3
|
|
35
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
36
|
+
Classifier: Topic :: Scientific/Engineering
|
|
37
|
+
Classifier: Topic :: Text Processing :: Linguistic
|
|
38
|
+
Requires-Python: >=3.9
|
|
39
|
+
Requires-Dist: pypdf>=5
|
|
40
|
+
Provides-Extra: pdfminer
|
|
41
|
+
Requires-Dist: pdfminer-six>=20240706; extra == 'pdfminer'
|
|
42
|
+
Provides-Extra: pymupdf
|
|
43
|
+
Requires-Dist: pymupdf>=1.24.3; extra == 'pymupdf'
|
|
44
|
+
Provides-Extra: pypdfium2
|
|
45
|
+
Requires-Dist: pypdfium2>=4; extra == 'pypdfium2'
|
|
46
|
+
Description-Content-Type: text/markdown
|
|
47
|
+
|
|
48
|
+
# stopslop
|
|
49
|
+
|
|
50
|
+
Measure a paper's prose against how a venue actually writes — before and after
|
|
51
|
+
LLMs existed.
|
|
52
|
+
|
|
53
|
+
Two baselines, always both: **fossil** (published up to 2022, so it cannot have
|
|
54
|
+
been machine-assisted) and **current** (the last full year plus this one). The
|
|
55
|
+
fossil window is the target; the current window is context, never an excuse.
|
|
56
|
+
See [UNSLOP.md](UNSLOP.md).
|
|
57
|
+
|
|
58
|
+
## Install
|
|
59
|
+
|
|
60
|
+
The wheel carries the baselines for all seven venues — 105 venue-years of
|
|
61
|
+
measurements — so there is nothing to crawl and nothing to configure.
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
pip install stopslop # pypdf, BSD-3-Clause, no copyleft
|
|
65
|
+
pip install "stopslop[pymupdf]" # adds PyMuPDF (AGPL-3.0, opt-in)
|
|
66
|
+
pip install -e . # editable, for hacking on it
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Then, from any directory, in any project:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
stopslop check paper.pdf --venue tmlr --out report.md
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
No system tools required. Everything else is stdlib `re` and `statistics`.
|
|
76
|
+
|
|
77
|
+
## Extractors
|
|
78
|
+
|
|
79
|
+
**The extractor is part of the measurement.** Across 24 papers the four
|
|
80
|
+
supported extractors agree to within ~1% on prose metrics — first person
|
|
81
|
+
18.1–18.3, -ly adverbs 13.2–13.4, passives 10.3–10.5 — and disagree sharply on
|
|
82
|
+
layout-sensitive ones: `numerals` runs **43.4** under pymupdf against **61.4**
|
|
83
|
+
under pypdf. So measurements are stored per extractor and never mixed, and
|
|
84
|
+
`stopslop check` refuses rather than compare across them.
|
|
85
|
+
|
|
86
|
+
| extra | licence | speed | notes |
|
|
87
|
+
|---|---|---|---|
|
|
88
|
+
| *(default)* `pypdf` | BSD-3-Clause | 0.82 s/paper | pure Python, installs anywhere |
|
|
89
|
+
| `[pymupdf]` | **AGPL-3.0** or commercial | 0.12 s/paper | best quality; opt-in, never a default |
|
|
90
|
+
| `[pypdfium2]` | BSD-3 / Apache-2.0 | **0.10 s/paper** | fastest; platform binary wheels |
|
|
91
|
+
| `[pdfminer]` | MIT | 2.13 s/paper | slowest |
|
|
92
|
+
|
|
93
|
+
Baselines for **all** of them ship in the base wheel, so an extra only decides
|
|
94
|
+
what you can *measure* with, never what you can *read*. Pick one with
|
|
95
|
+
`--extractor` or `$UNSLOP_EXTRACTOR`.
|
|
96
|
+
|
|
97
|
+
`pip install stopslop` carries no copyleft: PyMuPDF is AGPL and is opt-in, so
|
|
98
|
+
taking on that licence is always your deliberate choice.
|
|
99
|
+
|
|
100
|
+
## Use
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
stopslop check paper.pdf --venue tmlr --out reports/paper.md # score one paper
|
|
104
|
+
stopslop trend tmlr --out reports/tmlr_trend.md # one venue's drift
|
|
105
|
+
stopslop crosstrend --out reports/total_trend_points.md # venues kept apart
|
|
106
|
+
stopslop pooltrend --out reports/total_trend.md # venues pooled
|
|
107
|
+
stopslop stats tmlr 2022 # one crawled year
|
|
108
|
+
stopslop crawl tmlr 2022 2025 2026 --limit 20 # fetch and measure
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
`crawl` is the only command that touches the network, and it needs no key or
|
|
112
|
+
account. Everything else is offline.
|
|
113
|
+
|
|
114
|
+
### Where the baselines come from
|
|
115
|
+
|
|
116
|
+
Resolved at call time, most specific first:
|
|
117
|
+
|
|
118
|
+
1. `--root DIR` on any command
|
|
119
|
+
2. `$UNSLOP_MEASUREMENTS`
|
|
120
|
+
3. `./data` in the working directory, if it exists
|
|
121
|
+
4. the measurements bundled in the package
|
|
122
|
+
|
|
123
|
+
So a project that measures its own papers into `./data` uses them
|
|
124
|
+
automatically, and everyone else gets the shipped ones. PDFs are cached
|
|
125
|
+
separately, under `--pdf-root` / `$UNSLOP_PDFS` / `./corpus`.
|
|
126
|
+
|
|
127
|
+
## Plots
|
|
128
|
+
|
|
129
|
+
`--plot` needs matplotlib, which is **not a dependency and not an extra**.
|
|
130
|
+
Plotting is an analytics concern and the measurement path has no use for it, so
|
|
131
|
+
it goes in a separate environment:
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
python3 -m venv .venv-analytics
|
|
135
|
+
.venv-analytics/bin/pip install -e . -r analytics-requirements.txt
|
|
136
|
+
.venv-analytics/bin/stopslop trend tmlr --plot --out reports/tmlr_trend.md
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Every other command works without it.
|
|
140
|
+
|
|
141
|
+
## Development
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
pip install -e ".[pymupdf,pypdfium2,pdfminer]" --group dev
|
|
145
|
+
pytest
|
|
146
|
+
stopslop remeasure --extractor pypdf --root src/stopslop/data # offline, no network
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Measurements are generated artifacts and are written **straight into the
|
|
150
|
+
package**, so there is no snapshot to keep in sync. `corpus/` is a pure PDF
|
|
151
|
+
cache: large, re-fetchable, and entirely gitignored. `remeasure` re-reads those
|
|
152
|
+
PDFs under a chosen extractor without touching the network — `crawl` would
|
|
153
|
+
re-query arXiv for a paper list we already have.
|
|
154
|
+
|
|
155
|
+
## Layout
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
src/stopslop/
|
|
159
|
+
extractors/ pypdf | pymupdf | pypdfium2 | pdfminer
|
|
160
|
+
data/<extractor>/<venue>/<year>/stats.json
|
|
161
|
+
the measurements, shipped in the wheel
|
|
162
|
+
corpus/<venue>/<year>/*.pdf
|
|
163
|
+
PDF cache: 3.7 GB, gitignored, re-fetchable
|
|
164
|
+
reports/ generated trend reports and checked papers
|
|
165
|
+
tests/
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## Status
|
|
169
|
+
|
|
170
|
+
Pre-release. Published to PyPI as **`stopslop`**: the obvious names, `unslop`
|
|
171
|
+
and `deslop`, are both taken by humanizers, which do the opposite of what this
|
|
172
|
+
tool is for --- it measures and locates, it never edits your paper. Every
|
|
173
|
+
candidate that was checked is in "The rename" in [UNSLOP.md](UNSLOP.md), and the
|
|
174
|
+
remaining release blockers are in the Decision section of
|
|
175
|
+
[COMPETITION.md](COMPETITION.md).
|
|
176
|
+
|
|
177
|
+
MIT licensed.
|
stopslop-0.1.0/README.md
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# stopslop
|
|
2
|
+
|
|
3
|
+
Measure a paper's prose against how a venue actually writes — before and after
|
|
4
|
+
LLMs existed.
|
|
5
|
+
|
|
6
|
+
Two baselines, always both: **fossil** (published up to 2022, so it cannot have
|
|
7
|
+
been machine-assisted) and **current** (the last full year plus this one). The
|
|
8
|
+
fossil window is the target; the current window is context, never an excuse.
|
|
9
|
+
See [UNSLOP.md](UNSLOP.md).
|
|
10
|
+
|
|
11
|
+
## Install
|
|
12
|
+
|
|
13
|
+
The wheel carries the baselines for all seven venues — 105 venue-years of
|
|
14
|
+
measurements — so there is nothing to crawl and nothing to configure.
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
pip install stopslop # pypdf, BSD-3-Clause, no copyleft
|
|
18
|
+
pip install "stopslop[pymupdf]" # adds PyMuPDF (AGPL-3.0, opt-in)
|
|
19
|
+
pip install -e . # editable, for hacking on it
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Then, from any directory, in any project:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
stopslop check paper.pdf --venue tmlr --out report.md
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
No system tools required. Everything else is stdlib `re` and `statistics`.
|
|
29
|
+
|
|
30
|
+
## Extractors
|
|
31
|
+
|
|
32
|
+
**The extractor is part of the measurement.** Across 24 papers the four
|
|
33
|
+
supported extractors agree to within ~1% on prose metrics — first person
|
|
34
|
+
18.1–18.3, -ly adverbs 13.2–13.4, passives 10.3–10.5 — and disagree sharply on
|
|
35
|
+
layout-sensitive ones: `numerals` runs **43.4** under pymupdf against **61.4**
|
|
36
|
+
under pypdf. So measurements are stored per extractor and never mixed, and
|
|
37
|
+
`stopslop check` refuses rather than compare across them.
|
|
38
|
+
|
|
39
|
+
| extra | licence | speed | notes |
|
|
40
|
+
|---|---|---|---|
|
|
41
|
+
| *(default)* `pypdf` | BSD-3-Clause | 0.82 s/paper | pure Python, installs anywhere |
|
|
42
|
+
| `[pymupdf]` | **AGPL-3.0** or commercial | 0.12 s/paper | best quality; opt-in, never a default |
|
|
43
|
+
| `[pypdfium2]` | BSD-3 / Apache-2.0 | **0.10 s/paper** | fastest; platform binary wheels |
|
|
44
|
+
| `[pdfminer]` | MIT | 2.13 s/paper | slowest |
|
|
45
|
+
|
|
46
|
+
Baselines for **all** of them ship in the base wheel, so an extra only decides
|
|
47
|
+
what you can *measure* with, never what you can *read*. Pick one with
|
|
48
|
+
`--extractor` or `$UNSLOP_EXTRACTOR`.
|
|
49
|
+
|
|
50
|
+
`pip install stopslop` carries no copyleft: PyMuPDF is AGPL and is opt-in, so
|
|
51
|
+
taking on that licence is always your deliberate choice.
|
|
52
|
+
|
|
53
|
+
## Use
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
stopslop check paper.pdf --venue tmlr --out reports/paper.md # score one paper
|
|
57
|
+
stopslop trend tmlr --out reports/tmlr_trend.md # one venue's drift
|
|
58
|
+
stopslop crosstrend --out reports/total_trend_points.md # venues kept apart
|
|
59
|
+
stopslop pooltrend --out reports/total_trend.md # venues pooled
|
|
60
|
+
stopslop stats tmlr 2022 # one crawled year
|
|
61
|
+
stopslop crawl tmlr 2022 2025 2026 --limit 20 # fetch and measure
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
`crawl` is the only command that touches the network, and it needs no key or
|
|
65
|
+
account. Everything else is offline.
|
|
66
|
+
|
|
67
|
+
### Where the baselines come from
|
|
68
|
+
|
|
69
|
+
Resolved at call time, most specific first:
|
|
70
|
+
|
|
71
|
+
1. `--root DIR` on any command
|
|
72
|
+
2. `$UNSLOP_MEASUREMENTS`
|
|
73
|
+
3. `./data` in the working directory, if it exists
|
|
74
|
+
4. the measurements bundled in the package
|
|
75
|
+
|
|
76
|
+
So a project that measures its own papers into `./data` uses them
|
|
77
|
+
automatically, and everyone else gets the shipped ones. PDFs are cached
|
|
78
|
+
separately, under `--pdf-root` / `$UNSLOP_PDFS` / `./corpus`.
|
|
79
|
+
|
|
80
|
+
## Plots
|
|
81
|
+
|
|
82
|
+
`--plot` needs matplotlib, which is **not a dependency and not an extra**.
|
|
83
|
+
Plotting is an analytics concern and the measurement path has no use for it, so
|
|
84
|
+
it goes in a separate environment:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
python3 -m venv .venv-analytics
|
|
88
|
+
.venv-analytics/bin/pip install -e . -r analytics-requirements.txt
|
|
89
|
+
.venv-analytics/bin/stopslop trend tmlr --plot --out reports/tmlr_trend.md
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Every other command works without it.
|
|
93
|
+
|
|
94
|
+
## Development
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
pip install -e ".[pymupdf,pypdfium2,pdfminer]" --group dev
|
|
98
|
+
pytest
|
|
99
|
+
stopslop remeasure --extractor pypdf --root src/stopslop/data # offline, no network
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Measurements are generated artifacts and are written **straight into the
|
|
103
|
+
package**, so there is no snapshot to keep in sync. `corpus/` is a pure PDF
|
|
104
|
+
cache: large, re-fetchable, and entirely gitignored. `remeasure` re-reads those
|
|
105
|
+
PDFs under a chosen extractor without touching the network — `crawl` would
|
|
106
|
+
re-query arXiv for a paper list we already have.
|
|
107
|
+
|
|
108
|
+
## Layout
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
src/stopslop/
|
|
112
|
+
extractors/ pypdf | pymupdf | pypdfium2 | pdfminer
|
|
113
|
+
data/<extractor>/<venue>/<year>/stats.json
|
|
114
|
+
the measurements, shipped in the wheel
|
|
115
|
+
corpus/<venue>/<year>/*.pdf
|
|
116
|
+
PDF cache: 3.7 GB, gitignored, re-fetchable
|
|
117
|
+
reports/ generated trend reports and checked papers
|
|
118
|
+
tests/
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Status
|
|
122
|
+
|
|
123
|
+
Pre-release. Published to PyPI as **`stopslop`**: the obvious names, `unslop`
|
|
124
|
+
and `deslop`, are both taken by humanizers, which do the opposite of what this
|
|
125
|
+
tool is for --- it measures and locates, it never edits your paper. Every
|
|
126
|
+
candidate that was checked is in "The rename" in [UNSLOP.md](UNSLOP.md), and the
|
|
127
|
+
remaining release blockers are in the Decision section of
|
|
128
|
+
[COMPETITION.md](COMPETITION.md).
|
|
129
|
+
|
|
130
|
+
MIT licensed.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Analytics only. NOT a dependency of the package, and deliberately not an
|
|
2
|
+
# optional extra either -- see note 1 in pyproject.toml.
|
|
3
|
+
#
|
|
4
|
+
# Install into a SEPARATE environment, so that the measurement path stays
|
|
5
|
+
# stdlib-only and nobody installing the checker pays for a plotting stack:
|
|
6
|
+
#
|
|
7
|
+
# python3 -m venv .venv-analytics
|
|
8
|
+
# .venv-analytics/bin/pip install -e . -r analytics-requirements.txt
|
|
9
|
+
#
|
|
10
|
+
# Only `--plot` needs this. Every other command works without it.
|
|
11
|
+
matplotlib>=3.5
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Build configuration.
|
|
2
|
+
#
|
|
3
|
+
# Two properties are load-bearing and easy to lose, so they are asserted here
|
|
4
|
+
# rather than left to convention:
|
|
5
|
+
#
|
|
6
|
+
# 1. THE DEFAULT INSTALL IS PERMISSIVELY LICENSED. `pip install stopslop` pulls
|
|
7
|
+
# pypdf (BSD-3-Clause, pure Python), so the wheel carries no copyleft and
|
|
8
|
+
# needs no platform binary. PyMuPDF is the best extractor and is AGPL-3.0,
|
|
9
|
+
# so it is an OPT-IN EXTRA and never a default: `pip install
|
|
10
|
+
# "stopslop[pymupdf]"` makes that licence the user's deliberate choice.
|
|
11
|
+
#
|
|
12
|
+
# matplotlib is neither a dependency nor an extra -- plotting belongs in a
|
|
13
|
+
# separate environment (see analytics-requirements.txt), because an extra
|
|
14
|
+
# is still a dependency that `pip install stopslop[...]` will happily pull.
|
|
15
|
+
#
|
|
16
|
+
# 2. NO PDFs IN THE WHEEL. `corpus/` at the repository root holds 3.7 GB of
|
|
17
|
+
# them. Only the baked JSON baselines under src/stopslop/data ship, and the
|
|
18
|
+
# exclude below is the belt to force-include's braces.
|
|
19
|
+
|
|
20
|
+
[build-system]
|
|
21
|
+
requires = ["hatchling>=1.18"]
|
|
22
|
+
build-backend = "hatchling.build"
|
|
23
|
+
|
|
24
|
+
[project]
|
|
25
|
+
name = "stopslop" # Chosen 2026-09-08, after `unslop` and
|
|
26
|
+
# `deslop` were both found taken on PyPI by
|
|
27
|
+
# humanizers, which do the opposite of
|
|
28
|
+
# design rule 7. See "The rename" in
|
|
29
|
+
# UNSLOP.md for every candidate checked.
|
|
30
|
+
dynamic = ["version"]
|
|
31
|
+
description = "Measure a paper's prose against how a venue actually wrote, before and after LLMs existed"
|
|
32
|
+
readme = "README.md"
|
|
33
|
+
requires-python = ">=3.9"
|
|
34
|
+
license = { file = "LICENSE" }
|
|
35
|
+
authors = [{ name = "Dmitrii Khizbullin" }]
|
|
36
|
+
keywords = ["stylometry", "academic-writing", "corpus", "llm", "prose"]
|
|
37
|
+
classifiers = [
|
|
38
|
+
"Development Status :: 3 - Alpha",
|
|
39
|
+
"Intended Audience :: Science/Research",
|
|
40
|
+
"License :: OSI Approved :: MIT License",
|
|
41
|
+
"Programming Language :: Python :: 3",
|
|
42
|
+
"Programming Language :: Python :: 3 :: Only",
|
|
43
|
+
"Topic :: Scientific/Engineering",
|
|
44
|
+
"Topic :: Text Processing :: Linguistic",
|
|
45
|
+
]
|
|
46
|
+
dependencies = [
|
|
47
|
+
# BSD-3-Clause and pure Python: installs on any platform, no binary wheel,
|
|
48
|
+
# no copyleft. Slower than the alternatives and that is an accepted trade.
|
|
49
|
+
"pypdf>=5",
|
|
50
|
+
]
|
|
51
|
+
|
|
52
|
+
[project.optional-dependencies]
|
|
53
|
+
# Each extra adds one extractor. Measurements for all of them ship in the base
|
|
54
|
+
# wheel regardless, so an extra only decides what you can MEASURE with, never
|
|
55
|
+
# what you can READ. Extra names normalise to lowercase (PEP 685), so
|
|
56
|
+
# `stopslop[PyMuPDF]` and `stopslop[pymupdf]` are the same request.
|
|
57
|
+
pymupdf = ["pymupdf>=1.24.3"] # AGPL-3.0 or commercial; opt-in only
|
|
58
|
+
pypdfium2 = ["pypdfium2>=4"] # BSD-3-Clause / Apache-2.0, fastest
|
|
59
|
+
pdfminer = ["pdfminer.six>=20240706"] # MIT, slowest
|
|
60
|
+
|
|
61
|
+
[project.scripts]
|
|
62
|
+
stopslop = "stopslop.cli:main"
|
|
63
|
+
|
|
64
|
+
[project.urls]
|
|
65
|
+
# The PUBLIC repository, which does not exist yet: this repo is the development
|
|
66
|
+
# one and is not what gets released (see "The rename" in UNSLOP.md). These links
|
|
67
|
+
# 404 until it is created, and a version's metadata can never be re-uploaded, so
|
|
68
|
+
# they point forward deliberately rather than at the dev repo.
|
|
69
|
+
Homepage = "https://github.com/dmitrii-khizbullin/stopslop"
|
|
70
|
+
Source = "https://github.com/dmitrii-khizbullin/stopslop"
|
|
71
|
+
|
|
72
|
+
[dependency-groups]
|
|
73
|
+
dev = ["pytest>=7", "build>=1.0", "twine>=5"]
|
|
74
|
+
|
|
75
|
+
[tool.hatch.version]
|
|
76
|
+
path = "src/stopslop/__init__.py"
|
|
77
|
+
|
|
78
|
+
[tool.hatch.build.targets.wheel]
|
|
79
|
+
packages = ["src/stopslop"]
|
|
80
|
+
|
|
81
|
+
# No force-include needed: src/stopslop/data is inside the package directory, so
|
|
82
|
+
# hatchling ships it with the package. Forcing it as well adds every file twice
|
|
83
|
+
# and the build fails on the duplicate path.
|
|
84
|
+
|
|
85
|
+
[tool.hatch.build]
|
|
86
|
+
exclude = ["*.pdf", "**/__pycache__"]
|
|
87
|
+
|
|
88
|
+
[tool.hatch.build.targets.sdist]
|
|
89
|
+
# The sdist carries the code, the baked baselines, the tests and the README.
|
|
90
|
+
#
|
|
91
|
+
# IT DOES NOT CARRY THE PROSE. `*.md` used to be included, which swept in
|
|
92
|
+
# UNSLOP.md, COMPETITION.md and reports/ -- the strategy journal, the competitor
|
|
93
|
+
# analysis and an audit of an unpublished submission. This repository is the
|
|
94
|
+
# development repository; the public one is a separate, cleaned repository under
|
|
95
|
+
# the released name. A PyPI upload is permanent and mirrored, so the split has
|
|
96
|
+
# to be enforced here rather than remembered at upload time.
|
|
97
|
+
include = ["src/stopslop", "tests", "README.md", "LICENSE", "analytics-requirements.txt"]
|
|
98
|
+
exclude = ["*.pdf", "*.png", "**/__pycache__"]
|
|
99
|
+
|
|
100
|
+
[tool.pytest.ini_options]
|
|
101
|
+
testpaths = ["tests"]
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"""stopslop -- measure a paper's prose against how a venue actually writes.
|
|
2
|
+
|
|
3
|
+
Two baselines, always both: `fossil` (papers published up to and including 2022,
|
|
4
|
+
which cannot have been machine-assisted) and `current` (the last full year plus
|
|
5
|
+
the year in progress). A metric that has drifted across the whole field is not
|
|
6
|
+
evidence about one paper, and only the second baseline can show that.
|
|
7
|
+
"""
|
|
8
|
+
__version__ = "0.1.0"
|
|
9
|
+
|
|
10
|
+
FOSSIL_MAX_YEAR = 2022 # ChatGPT: 2022-11-30
|
|
11
|
+
|
|
12
|
+
#: Sent on every outbound request. Defined once: it was hardcoded as
|
|
13
|
+
#: "stopslop/0.1" in two files and was already wrong.
|
|
14
|
+
USER_AGENT = f"stopslop/{__version__}"
|