|
1 | 1 | # bib2md.py
|
2 |
| -"""Generate the markdown literature page from bibtex.""" |
| 2 | +"""Generate the markdown Literature page from bibtex. |
| 3 | +
|
| 4 | +Instructions for updating the Literature page: |
| 5 | +
|
| 6 | +1. Add BibTeX entries to `docs/literature.bib`. |
| 7 | + - Keep the entries sorted by year, then by author last name. |
| 8 | + - Authors should be listed with first-then-last names and separated with |
| 9 | + "and": `authors = {{First1 Last1 and First2 Last2}},`. |
| 10 | + Enclose multi-word names in braces, for example, |
| 11 | + `authors = {{Vincent {{van Gogh}} and Balthasar {{van der Pol}}}},` |
| 12 | + - Include a "doi" field if applicable. |
| 13 | + - Add a "category" field to indicate which section the reference should be |
| 14 | + listed under on this page. |
| 15 | +
|
| 16 | +2. Add the Google Scholar IDs of each author who has one to the `scholarIDS` |
| 17 | + dictionary in `docs/bib2md.py`. This is the unique part of a Google Scholar |
| 18 | + profile page url: |
| 19 | + `https://scholar.google.com/citations?user=<GoogleScholarID>&hl=en` |
| 20 | +
|
| 21 | +Note that `docs/literature.bib` is generated automatically from this file and |
| 22 | +is not tracked by git. |
| 23 | +""" |
3 | 24 |
|
4 | 25 | import re
|
5 | 26 | import collections
|
|
13 | 34 | # Categories to group the references by.
|
14 | 35 | # These are the options for the `categories` field in literature.bib entries.
|
15 | 36 | categories = {
|
16 |
| - "origin": "Original Paper", |
17 |
| - "survey": "Surveys", |
18 |
| - "method": "Methodology", |
19 |
| - "structure": "Structure Preservation", |
20 |
| - "theory": "Theory", |
21 |
| - "software": "Software / Implementation", |
22 |
| - "application": "Applications", |
23 |
| - "thesis": "Dissertations and Theses", |
24 |
| - "other": "Other", |
| 37 | + "origin": "## Original Paper", |
| 38 | + "survey": "## Surveys", |
| 39 | + "nonlinear": "## Methodology\n### Lifting and Nonlinearity", |
| 40 | + "reprojection": "### Re-projection", |
| 41 | + "structure": "### Structure Preservation", |
| 42 | + "parametric": "### Parametric Problems", |
| 43 | + "statistical": "### Statistical Methods", |
| 44 | + "domaindecomp": "### Domain Decomposition", |
| 45 | + "manifolds": "### Nonlinear Manifolds", |
| 46 | + "scalable": "### Scalability", |
| 47 | + "application": "## Applications", |
| 48 | + "thesis": "## Dissertations and Theses", |
25 | 49 | }
|
26 | 50 |
|
27 |
| -# These categories will be subsubsections, not subsections. |
28 |
| -subsubsections = { |
29 |
| - "structure", |
| 51 | +# Extra text to place under the heading before continuing. |
| 52 | +details = { |
| 53 | + "nonlinear": """Operator Inference learns reduced-order models with |
| 54 | +polynomial structure. The methods developed in the following papers focus on |
| 55 | +dealing with non-polynomial nonlinearities through variable transformations |
| 56 | +(lifting) and/or coupling Operator Inference methods with other approximation |
| 57 | +strategies.""", |
| 58 | + "reprojection": """In some cases, if the training data are chosen |
| 59 | +judiciously, Operator Inference can recover traditional reduced-order models |
| 60 | +defined by intrusive projection. The following papers develop and apply this |
| 61 | +idea.""", |
| 62 | + "structure": """The methods developed in these works augment Operator |
| 63 | +Inference so that the resulting reduced-order models automatically inherit |
| 64 | +certain properties from the full-order system, such as block structure, |
| 65 | +symmetries, energy conservation, gradient structure, and more.""", |
| 66 | + "parametric": """Many systems depend on independent parameters that |
| 67 | +describe material properties or other physical characteristics of the |
| 68 | +phenomenon being modeled. The following papers develop Operator Inference |
| 69 | +approaches that are specifically designed for parametric problems.""", |
| 70 | + "statistical": """These papers focus on problems with noisy or missing |
| 71 | +data, stochastic systems, and methods for constructing probabilistic |
| 72 | +reduced-order models with Operator Inference.""", |
| 73 | + "domaindecomp": """The methods in the following papers focus on scalability |
| 74 | +and accuracy improvements by decomposition spatial or latent space domains and |
| 75 | +learning a coupled system of reduced-order models.""", |
| 76 | + "manifolds": """Traditional model reduction methods approximate the |
| 77 | +high-dimensional system state with a low-dimensional linear (or affine) |
| 78 | +representation. The methods in these papers explore using nonlinear |
| 79 | +low-dimensional representations in the context of Operator Inference.""", |
| 80 | + "scalable": """These works focus on the computational challenge of applying |
| 81 | +Operator Inference to large-scale problems.""", |
30 | 82 | }
|
31 | 83 |
|
32 | 84 | # Author citation IDs (https://scholar.google.com/citation?user=<this ID>)
|
|
106 | 158 | HEADER = r"""# Literature
|
107 | 159 |
|
108 | 160 | This page lists scholarly publications that develop, extend, or apply
|
109 |
| -Operator Inference. |
| 161 | +Operator Inference, categorized into topics and sorted by publication year, |
| 162 | +then by the last name of the first author. Although some could be placed in |
| 163 | +multiple categories, each publication is only listed once. |
110 | 164 |
|
111 |
| -:::{admonition} Add Your Work |
| 165 | +:::{admonition} Share Your Work! |
112 | 166 | :class: hint
|
113 | 167 |
|
114 | 168 | Don't see your publication?
|
115 | 169 | [**Click here**](https://forms.gle/BgZK4b4DfuaPsGFd7)
|
116 |
| -to submit a request to add entries to this page, |
117 |
| -or see the [instructions for adding entries with git](lit:add-your-work). |
| 170 | +to submit a request to add entries to this page. |
118 | 171 | :::
|
119 | 172 | """
|
120 | 173 |
|
|
136 | 189 | {}
|
137 | 190 | ```
|
138 | 191 | :::
|
139 |
| -
|
140 |
| -(lit:add-your-work)= |
141 |
| -## Add Your Work |
142 |
| -
|
143 |
| -[**Click here**](https://forms.gle/BgZK4b4DfuaPsGFd7) |
144 |
| -to submit a request to add entries to this page. |
145 |
| -You can also submit entries yourself through a pull request: |
146 |
| -
|
147 |
| -1. Fork and clone the repository (see |
148 |
| - [How to Contribute](../contributing/how_to_contribute.md)). |
149 |
| -2. On a new branch, add BibTeX entries to `docs/literature.bib`. |
150 |
| - - Please keep the entries sorted by year, then by author last name. |
151 |
| - - Authors should be listed with first-then-last names and separated with |
152 |
| - "and": |
153 |
| -
|
154 |
| - `authors = {{First1 Last1 and First2 Last2}},` |
155 |
| -
|
156 |
| - Enclose multi-word names in braces, for example, |
157 |
| -
|
158 |
| - `authors = {{Vincent {{van Gogh}} and Balthasar {{van der Pol}}}},` |
159 |
| - - Include a "doi" field if applicable. |
160 |
| - - Add a "category" field to indicate which section the reference should be |
161 |
| - listed under on this page. Options include `survey`, `method`, |
162 |
| - `structure`, `theory`, `software`, `application`, `thesis`, and `other`. |
163 |
| -3. Add the Google Scholar IDs of each author who has one to the `scholarIDS` |
164 |
| - dictionary in `docs/bib2md.py`. This is the unique part of a Google Scholar |
165 |
| - profile page url: |
166 |
| -
|
167 |
| - `https://scholar.google.com/citations?user=<GoogleScholarID>&hl=en` |
168 |
| -
|
169 |
| -4. Build the documentation with `make docs`, then open |
170 |
| - `docs/_build/html/source/opinf/literature.html` |
171 |
| - in a browser to verify the additions. |
172 |
| -5. Commit the changes, push to your fork, and make a pull request on GitHub. |
173 |
| -
|
174 |
| -Note that this page is generated automatically from `docs/literature.bib` and |
175 |
| -`docs/bib2md.py` and is not tracked by git. |
176 | 192 | """
|
177 | 193 |
|
178 | 194 |
|
@@ -328,8 +344,10 @@ def main(bibfile, mdfile):
|
328 | 344 | for cat in categories:
|
329 | 345 | if cat not in sectiontxt:
|
330 | 346 | continue
|
331 |
| - prefix = "\n###" if cat in subsubsections else "\n##" |
332 |
| - outfile.write(f"{prefix} {categories[cat]}\n") |
| 347 | + text = f"\n{categories[cat]}\n\n" |
| 348 | + if cat in details: |
| 349 | + text = f"{text}{details[cat]}\n\n" |
| 350 | + outfile.write(text) |
333 | 351 | outfile.write("\n <p></p>\n".join(sectiontxt[cat]) + "\n")
|
334 | 352 |
|
335 | 353 | footer = FOOTER.format(
|
|
0 commit comments