├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── config.yml │ ├── feature_request.md │ └── question.md ├── PULL_REQUEST_TEMPLATE.md └── workflows │ ├── cv-arxiv-daily.yml │ └── update_paper_links.yml ├── .gitignore ├── CODE_OF_CONDUCT.md ├── LICENSE ├── README.md ├── assets ├── 4-ga-2-1.png ├── 4-ga-3-1.png ├── 4-ga-5-1.png ├── 4-ga-7.png ├── 4-ga-8.png ├── 4-ga-9.png └── 5-pages-1.png ├── config.yaml ├── daily_arxiv.py ├── docs ├── README.md ├── _config.yml ├── cv-arxiv-daily-web.json ├── cv-arxiv-daily-wechat.json ├── cv-arxiv-daily.json ├── index.md └── wechat.md └── requirements.txt /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: 🐛 Bug report 3 | about: If something isn't working 🔧 4 | title: "" 5 | labels: bug 6 | assignees: 7 | --- 8 | 9 | ## 🐛 Bug Report 10 | 11 | 12 | 13 | ## 🔬 How To Reproduce 14 | 15 | Steps to reproduce the behavior: 16 | 17 | 1. ... 18 | 19 | ### Environment 20 | 21 | - OS: [e.g. Linux / Windows / macOS] 22 | - Python version, get it with: 23 | 24 | ```bash 25 | python --version 26 | ``` 27 | 28 | ## 📎 Additional context 29 | 30 | 31 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | # Configuration: https://help.github.com/en/github/building-a-strong-community/configuring-issue-templates-for-your-repository 2 | 3 | blank_issues_enabled: false 4 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: 🚀 Feature request 3 | about: Suggest an idea for this project 🏖 4 | title: "" 5 | labels: enhancement 6 | assignees: 7 | --- 8 | 9 | ## 🚀 Feature Request 10 | 11 | 12 | 13 | ## 📎 Additional context 14 | 15 | 16 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/question.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: ❓ Question 3 | about: Ask a question about this project 🎓 4 | title: "" 5 | labels: question 6 | assignees: 7 | --- 8 | 9 | ## Checklist 10 | 11 | 12 | 13 | - [ ] I've searched the project's [`issues`] 14 | 15 | ## ❓ Question 16 | 17 | 18 | 19 | How can I [...]? 20 | 21 | Is it possible to [...]? 22 | 23 | ## 📎 Additional context 24 | 25 | 26 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ## Description 2 | 3 | 4 | 5 | ## Related Issue 6 | 7 | 8 | -------------------------------------------------------------------------------- /.github/workflows/cv-arxiv-daily.yml: -------------------------------------------------------------------------------- 1 | # This is a basic workflow to help you get started with Actions 2 | 3 | name: Run Arxiv Papers Daily 4 | 5 | # Controls when the workflow will run 6 | on: 7 | # Allows you to run this workflow manually from the Actions tab 8 | workflow_dispatch: 9 | schedule: 10 | - cron: "10 1/12 * * *" #'*/60 * * * *' 11 | # Triggers the workflow on push or pull request events but only for the main branch 12 | # push: 13 | # branches: 14 | # - main 15 | 16 | env: 17 | 18 | GITHUB_USER_NAME: Ther-nullptr 19 | GITHUB_USER_EMAIL: 1329438302@qq.com 20 | 21 | 22 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 23 | jobs: 24 | # This workflow contains a single job called "build" 25 | build: 26 | name: update 27 | # The type of runner that the job will run on 28 | runs-on: ubuntu-latest 29 | 30 | # Steps represent a sequence of tasks that will be executed as part of the job 31 | steps: 32 | - name: Checkout 33 | uses: actions/checkout@v3 34 | 35 | - name: Set up Python Env 36 | uses: actions/setup-python@v4 37 | with: 38 | python-version: '3.10' 39 | architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified 40 | - name: Install dependencies 41 | run: | 42 | python -m pip install --upgrade pip 43 | pip install arxiv 44 | pip install requests 45 | pip install pyyaml 46 | 47 | - name: Run daily arxiv 48 | run: | 49 | python daily_arxiv.py 50 | 51 | - name: Push new cv-arxiv-daily.md 52 | uses: github-actions-x/commit@v2.9 53 | with: 54 | github-token: ${{ secrets.GITHUB_TOKEN }} 55 | commit-message: "Github Action Automatic Update CV Arxiv Papers" 56 | files: README.md docs/cv-arxiv-daily.json docs/cv-arxiv-daily-web.json docs/index.md docs/cv-arxiv-daily-wechat.json docs/wechat.md 57 | rebase: 'true' 58 | name: ${{ env.GITHUB_USER_NAME }} 59 | email: ${{ env.GITHUB_USER_EMAIL }} 60 | -------------------------------------------------------------------------------- /.github/workflows/update_paper_links.yml: -------------------------------------------------------------------------------- 1 | # This is a basic workflow to help you get started with Actions 2 | 3 | name: Run Update Paper Links Weekly 4 | 5 | # Controls when the workflow will run 6 | on: 7 | # Allows you to run this workflow manually from the Actions tab 8 | workflow_dispatch: 9 | schedule: 10 | - cron: "0 8 * * 1" #Run At 08:00 on Monday 11 | # Triggers the workflow on push or pull request events but only for the main branch 12 | # push: 13 | # branches: 14 | # - main 15 | 16 | env: 17 | 18 | GITHUB_USER_NAME: Ther-nullptr 19 | GITHUB_USER_EMAIL: 1329438302@qq.com 20 | 21 | 22 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 23 | jobs: 24 | # This workflow contains a single job called "build" 25 | build: 26 | name: update 27 | # The type of runner that the job will run on 28 | runs-on: ubuntu-latest 29 | 30 | # Steps represent a sequence of tasks that will be executed as part of the job 31 | steps: 32 | - name: Checkout 33 | uses: actions/checkout@v3 34 | 35 | - name: Set up Python Env 36 | uses: actions/setup-python@v4 37 | with: 38 | python-version: '3.10' 39 | architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified 40 | - name: Install dependencies 41 | run: | 42 | python -m pip install --upgrade pip 43 | pip install arxiv 44 | pip install requests 45 | pip install pyyaml 46 | 47 | - name: Run daily arxiv 48 | run: | 49 | python daily_arxiv.py --update_paper_links 50 | 51 | - name: Push new cv-arxiv-daily.md 52 | uses: github-actions-x/commit@v2.9 53 | with: 54 | github-token: ${{ secrets.GITHUB_TOKEN }} 55 | commit-message: "Github Action Automatic Update CV Arxiv Papers" 56 | files: README.md docs/cv-arxiv-daily.json docs/cv-arxiv-daily-web.json docs/index.md docs/cv-arxiv-daily-wechat.json docs/wechat.md 57 | rebase: 'true' 58 | name: ${{ env.GITHUB_USER_NAME }} 59 | email: ${{ env.GITHUB_USER_EMAIL }} 60 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | CMakeLists.txt.user 2 | CMakeLists_modified.txt 3 | 4 | 5 | build/ 6 | 7 | lib/ 8 | bin/ 9 | 10 | cmake_modules/ 11 | cmake-build-debug/ 12 | .idea/ 13 | .vscode/ 14 | *.pyc 15 | 16 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | We as members, contributors, and leaders pledge to make participation in our 6 | community a harassment-free experience for everyone, regardless of age, body 7 | size, visible or invisible disability, ethnicity, sex characteristics, gender 8 | identity and expression, level of experience, education, socio-economic status, 9 | nationality, personal appearance, race, religion, or sexual identity 10 | and orientation. 11 | 12 | We pledge to act and interact in ways that contribute to an open, welcoming, 13 | diverse, inclusive, and healthy community. 14 | 15 | ## Our Standards 16 | 17 | Examples of behavior that contributes to a positive environment for our 18 | community include: 19 | 20 | * Demonstrating empathy and kindness toward other people 21 | * Being respectful of differing opinions, viewpoints, and experiences 22 | * Giving and gracefully accepting constructive feedback 23 | * Accepting responsibility and apologizing to those affected by our mistakes, 24 | and learning from the experience 25 | * Focusing on what is best not just for us as individuals, but for the 26 | overall community 27 | 28 | Examples of unacceptable behavior include: 29 | 30 | * The use of sexualized language or imagery, and sexual attention or 31 | advances of any kind 32 | * Trolling, insulting or derogatory comments, and personal or political attacks 33 | * Public or private harassment 34 | * Publishing others' private information, such as a physical or email 35 | address, without their explicit permission 36 | * Other conduct which could reasonably be considered inappropriate in a 37 | professional setting 38 | 39 | ## Enforcement Responsibilities 40 | 41 | Community leaders are responsible for clarifying and enforcing our standards of 42 | acceptable behavior and will take appropriate and fair corrective action in 43 | response to any behavior that they deem inappropriate, threatening, offensive, 44 | or harmful. 45 | 46 | Community leaders have the right and responsibility to remove, edit, or reject 47 | comments, commits, code, wiki edits, issues, and other contributions that are 48 | not aligned to this Code of Conduct, and will communicate reasons for moderation 49 | decisions when appropriate. 50 | 51 | ## Scope 52 | 53 | This Code of Conduct applies within all community spaces, and also applies when 54 | an individual is officially representing the community in public spaces. 55 | Examples of representing our community include using an official e-mail address, 56 | posting via an official social media account, or acting as an appointed 57 | representative at an online or offline event. 58 | 59 | ## Enforcement 60 | 61 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 62 | reported to the community leaders responsible for enforcement at 63 | alpharealcat@gmail.com. 64 | All complaints will be reviewed and investigated promptly and fairly. 65 | 66 | All community leaders are obligated to respect the privacy and security of the 67 | reporter of any incident. 68 | 69 | ## Enforcement Guidelines 70 | 71 | Community leaders will follow these Community Impact Guidelines in determining 72 | the consequences for any action they deem in violation of this Code of Conduct: 73 | 74 | ### 1. Correction 75 | 76 | **Community Impact**: Use of inappropriate language or other behavior deemed 77 | unprofessional or unwelcome in the community. 78 | 79 | **Consequence**: A private, written warning from community leaders, providing 80 | clarity around the nature of the violation and an explanation of why the 81 | behavior was inappropriate. A public apology may be requested. 82 | 83 | ### 2. Warning 84 | 85 | **Community Impact**: A violation through a single incident or series 86 | of actions. 87 | 88 | **Consequence**: A warning with consequences for continued behavior. No 89 | interaction with the people involved, including unsolicited interaction with 90 | those enforcing the Code of Conduct, for a specified period of time. This 91 | includes avoiding interactions in community spaces as well as external channels 92 | like social media. Violating these terms may lead to a temporary or 93 | permanent ban. 94 | 95 | ### 3. Temporary Ban 96 | 97 | **Community Impact**: A serious violation of community standards, including 98 | sustained inappropriate behavior. 99 | 100 | **Consequence**: A temporary ban from any sort of interaction or public 101 | communication with the community for a specified period of time. No public or 102 | private interaction with the people involved, including unsolicited interaction 103 | with those enforcing the Code of Conduct, is allowed during this period. 104 | Violating these terms may lead to a permanent ban. 105 | 106 | ### 4. Permanent Ban 107 | 108 | **Community Impact**: Demonstrating a pattern of violation of community 109 | standards, including sustained inappropriate behavior, harassment of an 110 | individual, or aggression toward or disparagement of classes of individuals. 111 | 112 | **Consequence**: A permanent ban from any sort of public interaction within 113 | the community. 114 | 115 | ## Attribution 116 | 117 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], 118 | version 2.0, available at 119 | https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. 120 | 121 | Community Impact Guidelines were inspired by [Mozilla's code of conduct 122 | enforcement ladder](https://github.com/mozilla/diversity). 123 | 124 | [homepage]: https://www.contributor-covenant.org 125 | 126 | For answers to common questions about this code of conduct, see the FAQ at 127 | https://www.contributor-covenant.org/faq. Translations are available at 128 | https://www.contributor-covenant.org/translations. 129 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /assets/4-ga-2-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ther-nullptr/circult-eda-mlsys-tinyml-arxiv-daily/d97519d408d640e7ca1ffba88249237c384c01d0/assets/4-ga-2-1.png -------------------------------------------------------------------------------- /assets/4-ga-3-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ther-nullptr/circult-eda-mlsys-tinyml-arxiv-daily/d97519d408d640e7ca1ffba88249237c384c01d0/assets/4-ga-3-1.png -------------------------------------------------------------------------------- /assets/4-ga-5-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ther-nullptr/circult-eda-mlsys-tinyml-arxiv-daily/d97519d408d640e7ca1ffba88249237c384c01d0/assets/4-ga-5-1.png -------------------------------------------------------------------------------- /assets/4-ga-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ther-nullptr/circult-eda-mlsys-tinyml-arxiv-daily/d97519d408d640e7ca1ffba88249237c384c01d0/assets/4-ga-7.png -------------------------------------------------------------------------------- /assets/4-ga-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ther-nullptr/circult-eda-mlsys-tinyml-arxiv-daily/d97519d408d640e7ca1ffba88249237c384c01d0/assets/4-ga-8.png -------------------------------------------------------------------------------- /assets/4-ga-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ther-nullptr/circult-eda-mlsys-tinyml-arxiv-daily/d97519d408d640e7ca1ffba88249237c384c01d0/assets/4-ga-9.png -------------------------------------------------------------------------------- /assets/5-pages-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ther-nullptr/circult-eda-mlsys-tinyml-arxiv-daily/d97519d408d640e7ca1ffba88249237c384c01d0/assets/5-pages-1.png -------------------------------------------------------------------------------- /config.yaml: -------------------------------------------------------------------------------- 1 | # TODO: add papers by configuration file 2 | base_url: "https://arxiv.paperswithcode.com/api/v0/papers/" 3 | user_name: "Ther-nullptr" 4 | repo_name: "circult-eda-mlsys-tinyml-arxiv-daily" 5 | show_authors: True 6 | show_links: True 7 | show_badge: True 8 | max_results: 10 9 | 10 | publish_readme: True 11 | publish_gitpage: True 12 | publish_wechat: False 13 | update_paper_links: True 14 | 15 | # file paths 16 | json_readme_path: './docs/cv-arxiv-daily.json' 17 | json_gitpage_path: './docs/cv-arxiv-daily-web.json' 18 | json_wechat_path: './docs/cv-arxiv-daily-wechat.json' 19 | 20 | md_readme_path: 'README.md' 21 | md_gitpage_path: './docs/index.md' 22 | md_wechat_path: './docs/wechat.md' 23 | 24 | # keywords to search 25 | keywords: 26 | "Quantization": 27 | filters: ["Post Training Quantization", "Quantization Aware Training"] 28 | "Pruning": 29 | filters: ["Structured Pruning", "Unstructured Pruning"] 30 | "Hardware-Software Co-Design": 31 | filters: ["Hardware Software Codesign", "Hardware Accelerator", "AI Compiler"] 32 | "TinyML": 33 | filters: ["TinyML", "Edge AI", "Embedded AI"] 34 | "Domain Specific Accelerator": 35 | filters: ["Domain Specific Accelerator", "DNN Accelerator", "AI Chip"] 36 | "Low-Rank Adaptation": 37 | filters: ["LoRA", "Low Rank Adaptation"] 38 | "Model Compression": 39 | filters: ["Model Compression", "Knowledge Distillation", "Model Pruning"] 40 | -------------------------------------------------------------------------------- /daily_arxiv.py: -------------------------------------------------------------------------------- 1 | import os 2 | import re 3 | import json 4 | import arxiv 5 | import yaml 6 | import logging 7 | import argparse 8 | import datetime 9 | import requests 10 | 11 | logging.basicConfig(format='[%(asctime)s %(levelname)s] %(message)s', 12 | datefmt='%m/%d/%Y %H:%M:%S', 13 | level=logging.INFO) 14 | 15 | base_url = "https://arxiv.paperswithcode.com/api/v0/papers/" 16 | github_url = "https://api.github.com/search/repositories" 17 | arxiv_url = "http://arxiv.org/" 18 | 19 | def load_config(config_file:str) -> dict: 20 | ''' 21 | config_file: input config file path 22 | return: a dict of configuration 23 | ''' 24 | # make filters pretty 25 | def pretty_filters(**config) -> dict: 26 | keywords = dict() 27 | EXCAPE = '\"' 28 | QUOTA = '' # NO-USE 29 | OR = ' OR ' # TODO 30 | def parse_filters(filters:list): 31 | ret = '' 32 | for idx in range(0,len(filters)): 33 | filter = filters[idx] 34 | if len(filter.split()) > 1: 35 | ret += (EXCAPE + filter + EXCAPE) 36 | else: 37 | ret += (QUOTA + filter + QUOTA) 38 | if idx != len(filters) - 1: 39 | ret += OR 40 | return ret 41 | for k,v in config['keywords'].items(): 42 | keywords[k] = parse_filters(v['filters']) 43 | return keywords 44 | with open(config_file,'r') as f: 45 | config = yaml.load(f,Loader=yaml.FullLoader) 46 | config['kv'] = pretty_filters(**config) 47 | logging.info(f'config = {config}') 48 | return config 49 | 50 | def get_authors(authors, first_author = False): 51 | output = str() 52 | if first_author == False: 53 | output = ", ".join(str(author) for author in authors) 54 | else: 55 | output = authors[0] 56 | return output 57 | def sort_papers(papers): 58 | output = dict() 59 | keys = list(papers.keys()) 60 | keys.sort(reverse=True) 61 | for key in keys: 62 | output[key] = papers[key] 63 | return output 64 | import requests 65 | 66 | def get_code_link(qword:str) -> str: 67 | """ 68 | This short function was auto-generated by ChatGPT. 69 | I only renamed some params and added some comments. 70 | @param qword: query string, eg. arxiv ids and paper titles 71 | @return paper_code in github: string, if not found, return None 72 | """ 73 | # query = f"arxiv:{arxiv_id}" 74 | query = f"{qword}" 75 | params = { 76 | "q": query, 77 | "sort": "stars", 78 | "order": "desc" 79 | } 80 | r = requests.get(github_url, params=params) 81 | results = r.json() 82 | code_link = None 83 | if results["total_count"] > 0: 84 | code_link = results["items"][0]["html_url"] 85 | return code_link 86 | 87 | def get_daily_papers(topic,query="slam", max_results=2): 88 | """ 89 | @param topic: str 90 | @param query: str 91 | @return paper_with_code: dict 92 | """ 93 | # output 94 | content = dict() 95 | content_to_web = dict() 96 | search_engine = arxiv.Search( 97 | query = query, 98 | max_results = max_results, 99 | sort_by = arxiv.SortCriterion.SubmittedDate 100 | ) 101 | 102 | for result in search_engine.results(): 103 | 104 | paper_id = result.get_short_id() 105 | paper_title = result.title 106 | paper_url = result.entry_id 107 | code_url = base_url + paper_id #TODO 108 | paper_abstract = result.summary.replace("\n"," ") 109 | paper_authors = get_authors(result.authors) 110 | paper_first_author = get_authors(result.authors,first_author = True) 111 | primary_category = result.primary_category 112 | publish_time = result.published.date() 113 | update_time = result.updated.date() 114 | comments = result.comment 115 | 116 | logging.info(f"Time = {update_time} title = {paper_title} author = {paper_first_author}") 117 | 118 | # eg: 2108.09112v1 -> 2108.09112 119 | ver_pos = paper_id.find('v') 120 | if ver_pos == -1: 121 | paper_key = paper_id 122 | else: 123 | paper_key = paper_id[0:ver_pos] 124 | paper_url = arxiv_url + 'abs/' + paper_key 125 | 126 | try: 127 | # source code link 128 | r = requests.get(code_url).json() 129 | repo_url = None 130 | if "official" in r and r["official"]: 131 | repo_url = r["official"]["url"] 132 | # TODO: not found, two more chances 133 | # else: 134 | # repo_url = get_code_link(paper_title) 135 | # if repo_url is None: 136 | # repo_url = get_code_link(paper_key) 137 | if repo_url is not None: 138 | content[paper_key] = "|**{}**|**{}**|{} et.al.|[{}]({})|**[link]({})**|\n".format( 139 | update_time,paper_title,paper_first_author,paper_key,paper_url,repo_url) 140 | content_to_web[paper_key] = "- {}, **{}**, {} et.al., Paper: [{}]({}), Code: **[{}]({})**".format( 141 | update_time,paper_title,paper_first_author,paper_url,paper_url,repo_url,repo_url) 142 | 143 | else: 144 | content[paper_key] = "|**{}**|**{}**|{} et.al.|[{}]({})|null|\n".format( 145 | update_time,paper_title,paper_first_author,paper_key,paper_url) 146 | content_to_web[paper_key] = "- {}, **{}**, {} et.al., Paper: [{}]({})".format( 147 | update_time,paper_title,paper_first_author,paper_url,paper_url) 148 | 149 | # TODO: select useful comments 150 | comments = None 151 | if comments != None: 152 | content_to_web[paper_key] += f", {comments}\n" 153 | else: 154 | content_to_web[paper_key] += f"\n" 155 | 156 | except Exception as e: 157 | logging.error(f"exception: {e} with id: {paper_key}") 158 | 159 | data = {topic:content} 160 | data_web = {topic:content_to_web} 161 | return data,data_web 162 | 163 | def update_paper_links(filename): 164 | ''' 165 | weekly update paper links in json file 166 | ''' 167 | def parse_arxiv_string(s): 168 | parts = s.split("|") 169 | date = parts[1].strip() 170 | title = parts[2].strip() 171 | authors = parts[3].strip() 172 | arxiv_id = parts[4].strip() 173 | code = parts[5].strip() 174 | arxiv_id = re.sub(r'v\d+', '', arxiv_id) 175 | return date,title,authors,arxiv_id,code 176 | 177 | with open(filename,"r") as f: 178 | content = f.read() 179 | if not content: 180 | m = {} 181 | else: 182 | m = json.loads(content) 183 | 184 | json_data = m.copy() 185 | 186 | for keywords,v in json_data.items(): 187 | logging.info(f'keywords = {keywords}') 188 | for paper_id,contents in v.items(): 189 | contents = str(contents) 190 | 191 | update_time, paper_title, paper_first_author, paper_url, code_url = parse_arxiv_string(contents) 192 | 193 | contents = "|{}|{}|{}|{}|{}|\n".format(update_time,paper_title,paper_first_author,paper_url,code_url) 194 | json_data[keywords][paper_id] = str(contents) 195 | logging.info(f'paper_id = {paper_id}, contents = {contents}') 196 | 197 | valid_link = False if '|null|' in contents else True 198 | if valid_link: 199 | continue 200 | try: 201 | code_url = base_url + paper_id #TODO 202 | r = requests.get(code_url).json() 203 | repo_url = None 204 | if "official" in r and r["official"]: 205 | repo_url = r["official"]["url"] 206 | if repo_url is not None: 207 | new_cont = contents.replace('|null|',f'|**[link]({repo_url})**|') 208 | logging.info(f'ID = {paper_id}, contents = {new_cont}') 209 | json_data[keywords][paper_id] = str(new_cont) 210 | 211 | except Exception as e: 212 | logging.error(f"exception: {e} with id: {paper_id}") 213 | # dump to json file 214 | with open(filename,"w") as f: 215 | json.dump(json_data,f) 216 | 217 | def update_json_file(filename,data_dict): 218 | ''' 219 | daily update json file using data_dict 220 | ''' 221 | logging.info(f'file_name: {filename}') 222 | with open(filename,"r") as f: 223 | content = f.read() 224 | if not content: 225 | m = {} 226 | else: 227 | m = json.loads(content) 228 | 229 | json_data = m.copy() 230 | 231 | # update papers in each keywords 232 | for data in data_dict: 233 | for keyword in data.keys(): 234 | papers = data[keyword] 235 | 236 | if keyword in json_data.keys(): 237 | json_data[keyword].update(papers) 238 | else: 239 | json_data[keyword] = papers 240 | 241 | with open(filename,"w") as f: 242 | json.dump(json_data,f) 243 | 244 | def json_to_md(filename,md_filename, 245 | task = '', 246 | to_web = False, 247 | use_title = True, 248 | use_tc = True, 249 | show_badge = True, 250 | use_b2t = True): 251 | """ 252 | @param filename: str 253 | @param md_filename: str 254 | @return None 255 | """ 256 | def pretty_math(s:str) -> str: 257 | ret = '' 258 | match = re.search(r"\$.*\$", s) 259 | if match == None: 260 | return s 261 | math_start,math_end = match.span() 262 | space_trail = space_leading = '' 263 | if s[:math_start][-1] != ' ' and '*' != s[:math_start][-1]: space_trail = ' ' 264 | if s[math_end:][0] != ' ' and '*' != s[math_end:][0]: space_leading = ' ' 265 | ret += s[:math_start] 266 | ret += f'{space_trail}${match.group()[1:-1].strip()}${space_leading}' 267 | ret += s[math_end:] 268 | return ret 269 | 270 | DateNow = datetime.date.today() 271 | DateNow = str(DateNow) 272 | DateNow = DateNow.replace('-','.') 273 | 274 | with open(filename,"r") as f: 275 | content = f.read() 276 | if not content: 277 | data = {} 278 | else: 279 | data = json.loads(content) 280 | 281 | # clean README.md if daily already exist else create it 282 | with open(md_filename,"w+") as f: 283 | pass 284 | 285 | # write data into README.md 286 | with open(md_filename,"a+") as f: 287 | 288 | if (use_title == True) and (to_web == True): 289 | f.write("---\n" + "layout: default\n" + "---\n\n") 290 | 291 | if show_badge == True: 292 | f.write(f"[![Contributors][contributors-shield]][contributors-url]\n") 293 | f.write(f"[![Forks][forks-shield]][forks-url]\n") 294 | f.write(f"[![Stargazers][stars-shield]][stars-url]\n") 295 | f.write(f"[![Issues][issues-shield]][issues-url]\n\n") 296 | 297 | if use_title == True: 298 | #f.write(("
2 |