From e7c3391ce0fa1c2b0dc076250ffe3ba0b72920d6 Mon Sep 17 00:00:00 2001 From: Tue Herlau <tuhe@dtu.dk> Date: Sat, 4 Sep 2021 23:57:33 +0200 Subject: [PATCH] Port of s_tag and readme.md work --- README.md | 64 +- docs/README.jinja.md | 119 ++ docs/build_docs.py | 67 ++ .../load_references.cpython-38.pyc | Bin 0 -> 1112 bytes example/citations.py | 9 + example/exercise1.py | 23 + example/latex/br.pdf | Bin 0 -> 18385 bytes example/latex/index.aux | 38 + example/latex/index.bbl | 19 + example/latex/index.blg | 48 + example/latex/index.log | 1000 +++++++++++++++++ example/latex/index.out | 1 + example/latex/index.pdf | Bin 0 -> 71031 bytes example/latex/index.synctex.gz | Bin 0 -> 4732 bytes example/latex/index.tex | 59 + example/latex/library.bib | 289 +++++ example/load_references.py | 32 + example/output/citations.py | 18 + example/output/load_references_a.py | 6 + example/output/load_references_b.py | 9 + requirements.txt | 2 + setup.py | 21 +- src/snipper/__init__.py | 2 +- .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 167 bytes .../__pycache__/citations.cpython-38.pyc | Bin 0 -> 5040 bytes .../__pycache__/fix_cite.cpython-38.pyc | Bin 0 -> 2467 bytes src/snipper/__pycache__/fix_s.cpython-38.pyc | Bin 0 -> 3629 bytes .../__pycache__/snipper.cpython-38.pyc | Bin 12807 -> 0 bytes .../__pycache__/snipper.cpython-39.pyc | Bin 12500 -> 0 bytes .../__pycache__/snipper_main.cpython-38.pyc | Bin 0 -> 10073 bytes src/snipper/citations.py | 242 ++++ src/snipper/fix_cite.py | 73 ++ src/snipper/fix_s.py | 151 +++ src/snipper/snip_dir.py | 22 +- src/snipper/{snipper.py => snipper_main.py} | 101 +- 35 files changed, 2281 insertions(+), 134 deletions(-) create mode 100644 docs/README.jinja.md create mode 100644 docs/build_docs.py create mode 100644 example/__pycache__/load_references.cpython-38.pyc create mode 100644 example/citations.py create mode 100644 example/exercise1.py create mode 100644 example/latex/br.pdf create mode 100644 example/latex/index.aux create mode 100644 example/latex/index.bbl create mode 100644 example/latex/index.blg create mode 100644 example/latex/index.log create mode 100644 example/latex/index.out create mode 100644 example/latex/index.pdf create mode 100644 example/latex/index.synctex.gz create mode 100644 example/latex/index.tex create mode 100644 example/latex/library.bib create mode 100644 example/load_references.py create mode 100644 example/output/citations.py create mode 100644 example/output/load_references_a.py create mode 100644 example/output/load_references_b.py create mode 100644 requirements.txt create mode 100644 src/snipper/__pycache__/__init__.cpython-38.pyc create mode 100644 src/snipper/__pycache__/citations.cpython-38.pyc create mode 100644 src/snipper/__pycache__/fix_cite.cpython-38.pyc create mode 100644 src/snipper/__pycache__/fix_s.cpython-38.pyc delete mode 100644 src/snipper/__pycache__/snipper.cpython-38.pyc delete mode 100644 src/snipper/__pycache__/snipper.cpython-39.pyc create mode 100644 src/snipper/__pycache__/snipper_main.cpython-38.pyc create mode 100644 src/snipper/citations.py create mode 100644 src/snipper/fix_cite.py create mode 100644 src/snipper/fix_s.py rename src/snipper/{snipper.py => snipper_main.py} (80%) diff --git a/README.md b/README.md index 9e27524..e8e0a45 100644 --- a/README.md +++ b/README.md @@ -94,7 +94,65 @@ Hello World" ``` All these files can be directly imported into `LaTeX` using e.g. `minted`: You never need to mix `LaTeX` code and python again! + +## References: +Bibliography references can be loaded from `references.bib`-files and in-document references from the `.aux` file. +For this example, we will insert references shown in the `examples/latex/index.tex`-document. To do so, we can use these tags: +```python +def myfun(): #!s + """ + To solve this exercise, look at \ref{eq1} in \ref{sec1}. + You can also look at \cite{bertsekasII} and \cite{herlau} + More specifically, look at \cite[Equation 117]{bertsekasII} and \cite[\ref{fig1}]{herlau} + + We can also write a special tag to reduce repetition: \nref{fig1} and \nref{sec1}. + """ + return 42 #!s + +``` +We can manually compile this example by first loading the aux-files and the bibliographies as follows: +```python +# load_references.py + from snipper.citations import get_bibtex, get_aux + bibfile = "latex/library.bib" + auxfile = 'latex/index.aux' + bibtex = get_bibtex(bibfile) + aux = get_aux(auxfile) +``` +Next, we load the python file containing the reference code and fix all references based on the aux and bibliography data. +```python +# load_references.py + file = "citations.py" + with open(file, 'r') as f: + lines = f.read().splitlines() + lines = fix_aux(lines, aux=aux) + lines = fix_aux_special(lines, aux=aux, command='\\nref', bibref='herlau') + lines = fix_bibtex(lines, bibtex=bibtex) + with open('output/citations.py', 'w') as f: + f.write("\n".join(lines)) +``` +The middle command is a convenience feature: It allows us to specify a special citation command `\nref{..}` which always compiles to `\cite[\ref{...}]{herlau}`. This is useful if e.g. `herlau` is the bibtex key for your lecture notes. The result is as follows: +```python +""" +{{copyright}} + +References: + [Ber07] Dimitri P. Bertsekas. Dynamic Programming and Optimal Control, Vol. II. Athena Scientific, 3rd edition, 2007. ISBN 1886529302. + + [Her21] Tue Herlau. Sequential decision making. (See 02465_Notes.pdf), 2021. + +""" +def myfun(): #!s + """ + To solve this exercise, look at eq. (1) in Section 1. + You can also look at (Ber07) and (Her21) + More specifically, look at (Ber07, Equation 117) and (Her21, Figure 1) + + We can also write a special tag to reduce repetition: (Her21, Figure 1) and (Her21, Section 1). + """ + return 42 #!s +``` +Note this example uses the low-level api. Normally you would just pass the bibtex and aux-file to the main censor-file command. + ## Additional features: -- Include references using `\cite` and `\ref`: This works by parsing your `LaTeX` `.aux` files and automatically keep your -references in code synchronized with your written material. See the 02465 students repository for examples: None of the references to the exercise material or lecture notes are hard-coded! -- You can name tags using `#!s=bar` to get a `foo_bar.py` snippet. This is useful when you need to cut multiple sessions. This also works for the other tags. +- You can name tags using `#!s=bar` to get a `foo_bar.py` snippet. This is useful when you need to cut multiple sessions. This also works for the other tags. \ No newline at end of file diff --git a/docs/README.jinja.md b/docs/README.jinja.md new file mode 100644 index 0000000..add4775 --- /dev/null +++ b/docs/README.jinja.md @@ -0,0 +1,119 @@ +# Snipper +A lightweight framework for removing code from student solutions. +## Installation +```console +pip install codesnipper +``` +## What it does +This project address the following three challenges for administering a python-based course + + - You need to maintain a (working) version for debugging as well as a version handed out to students (with code missing) + - You ideally want to make references in source code to course material *"(see equation 2.1 in exercise 5)"* but these tend to go out of date + - You want to include code snippets and code output in lectures notes/exercises/beamer slides + - You want to automatically create student solutions + +This framework address these problems and allow you to maintain a **single**, working project repository. + +The project is currently used in **02465** at DTU. An example of student code can be found at: + - https://gitlab.gbar.dtu.dk/02465material/02465students/blob/master/irlc/ex02/dp.py + +A set of lectures notes where all code examples/output are automatically generated from the working repository can be found a +- https://lab.compute.dtu.dk/tuhe/books (see **Sequential decision making**) + +## How it works +The basic functionality is quite simple. You start with your working script in your private repository and add special tags to the script. +In this case I have added the tags `#!b` (cut a block) and `#!f` (cut function scope). +```python +def myfun(): #!f The error I am going to raise + """ The function docstring will not be removed""" + print("This is a function") + return 42 + +def a_long_function(): + a = 234 + print("a line") + print("a line") #!b + print("a line") + print("a line") #!b Insert three missing print statements. + print("a line") + return a + +if __name__ == "__main__": + myfun() +``` +This will produce the following file: +```python +def myfun(): + """ The function docstring will not be removed""" + # TODO: 2 lines missing. + raise NotImplementedError("The error I am going to raise") + +def a_long_function(): + a = 234 + print("a line") + # TODO: 3 lines missing. + raise NotImplementedError("Insert three missing print statements.") + print("a line") + return a + +if __name__ == "__main__": + myfun() +``` +You can also use the framework to capture code snippets, outputs and interactive python output. +To do this, save the following in `foo.py` +```python +def myfun(): #!s This snippet will be saved to foo.py in the output directory. + print("Hello") #!s + +print("Do not capture me") +for i in range(4): #!o + print("Output", i) +print("Goodbuy world") #!o +print("don't capture me") + +# Interactive pythong example +print("Hello World") #!i #!i # this is a single-line cutout. +```` +These block-tags will create a file `foo.py` (in the output directory) containing +```python +def myfun(): + print("Hello") +``` +A file `foo.txt` containing the captured output +```txt +Output 0 +Output 1 +Output 2 +Output 3 +Goodbuy world +``` +and a typeset version of an interactive python session in `foo.pyi` (use `pycon` in minted; this gitlab server appears not to support `pycon`) +```pycon +>>> print("hello world") +Hello World" +``` +All these files can be directly imported into `LaTeX` using e.g. `minted`: You never need to mix `LaTeX` code and python again! + + +## References: +Bibliography references can be loaded from `references.bib`-files and in-document references from the `.aux` file. +For this example, we will insert references shown in the `examples/latex/index.tex`-document. To do so, we can use these tags: +```python +{{ citations_orig_py }} +``` +We can manually compile this example by first loading the aux-files and the bibliographies as follows: +```python +{{ load_references_a_py }} +``` +Next, we load the python file containing the reference code and fix all references based on the aux and bibliography data. +```python +{{ load_references_b_py }} +``` +The middle command is a convenience feature: It allows us to specify a special citation command `\nref{..}` which always compiles to `\cite[\ref{...}]{herlau}`. This is useful if e.g. `herlau` is the bibtex key for your lecture notes. The result is as follows: +```python +{{ citations_py }} +``` +Note this example uses the low-level api. Normally you would just pass the bibtex and aux-file to the main censor-file command. + +## Additional features: +- You can name tags using `#!s=bar` to get a `foo_bar.py` snippet. This is useful when you need to cut multiple sessions. This also works for the other tags. diff --git a/docs/build_docs.py b/docs/build_docs.py new file mode 100644 index 0000000..02f7791 --- /dev/null +++ b/docs/build_docs.py @@ -0,0 +1,67 @@ +import slider.convert +from slider.beamer_nup import beamer_nup +import jinja2 +from slider import convert +import os +import shutil +from slider.slider_cli import slider_cli +# from example.load_references import reference_example +# reference_example() + +def my_nup(path): + dir = os.path.dirname(path) + base = os.path.basename(dir) + + out = beamer_nup(path, output="./" + base + "_nup.pdf", nup=2) + out_png = convert.pdf2png(out, scale_to=600) + print(out_png) + +if __name__ == "__main__": + from snipper.fix_s import save_s + from snipper.snipper_main import censor_file + + + # + # EX_BASE = "../examples" + # np = EX_BASE + "/new_project" + + # if os.path.isdir(np): + # shutil.rmtree(np) + # os.makedirs(np) + # slider_cli(latexfile=f"{np}/index.tex", force=True) + # np_basic1 = EX_BASE + "/basic1" + # if os.path.isdir(np_basic1): + # shutil.rmtree(np_basic1) + # shutil.copytree(np, np_basic1) + # shutil.copyfile("myoverlay.svg", np_basic1 +"/osvgs/myoverlay.svg") + # slider_cli(latexfile=f"{np_basic1}/index.tex") + # + # + # my_nup(np + "/index.pdf") + # my_nup(f"{np_basic1}/index.pdf") + # + # # convert.pdf2png(np + "/index.pdf", "./index0.png") + # output = np +"/index_2up.pdf" + # + # data = {} + # data['resources'] = 'https://gitlab.compute.dtu.dk/tuhe/slider/-/raw/main' + # with open(np + "/index.tex", 'r') as f: + # data['basic0_tex'] = f.read() + + data = {} + # Build the docs. + import glob + with open("../example/citations.py", 'r') as f: + data['citations_orig_py'] = f.read() + for file in glob.glob("../example/output/*.*"): + with open(file, 'r') as f: + data[os.path.basename(file).replace(".", "_")] = f.read() + + with open("README.jinja.md", 'r') as f: + s = jinja2.Environment(loader=jinja2.FileSystemLoader([".", "../example"])).from_string(f.read()).render(data) + with open("../README.md",'w') as f: + f.write(s) + + + + pass \ No newline at end of file diff --git a/example/__pycache__/load_references.cpython-38.pyc b/example/__pycache__/load_references.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8a3151612384c0983e6ff0b8e92b6f5675e27a62 GIT binary patch literal 1112 zcmWIL<>g{vU|<k=ZJa2>!octt#6iYP3=9ko3=9m#N(>APDGVu$ISf$@DNHHMEeuhN zsZ1#>*-S-psf^7Gj0`D^!3>(LFG0Hfl0hU4^D;0na56A3ID^a)VPs%PVN7AlVaR2y zWyoc!Wn^SXVXkFLVX0-VVW?qhW~^nYVXR?pW~^l`VJ=~*VOhYskfE6|g&~Etl}VDJ znURs9gt>+lM5i#Ou;sAjve&ZZa@4Zta@KNyT#>?_!<EZj%gM-)!cogr!c)VQ!r9E! zFI3B2!@YoaA;SW`g$%Vk;S8n>feb+m5ezkKH9R$}DO|lwwLCTKU^aIOPYQ1@OD#_g zM-5L6O9~%Iu7oFrKSiLKsb36i5`T)|0)ZNyg^UXs85t0!mGG1Zg6&hO<*wmG*q9<z zB9tY(K%_))A!CYgFEg^96oz01O%cB$Mg|53O{QC1>8U00NtsC{sTH@_LF~lRiYmdJ z#FEqs{hZ9CqQs&~y`;>fDt?GiW?o8ag<fK5#Y<L@e&$>3X_*!AiKP{{_@RvW;)2xV z%*32qTp$66$(oF}*oqU&QsaxOc#<<q5=%1k^NRHfDsM3sX)@ko23g4(lUJ0Q7R8p4 zT9lJms>xggN-DS5lk;<P6Z2A{*pf1nic-@+20@Ih63#CzDJU(`M>Vhf79&>`hn_w} z668M!D?TN&D2g*JGbc5^Ah9GvQ#4AjI4`rHAhk#jZa@(e0|P@5GXn#|E!Kjf%)F9Y zEIFCQCAV0zQ!9(31Yqhx-b&6aNi70}KoJ{A4?9Q?FS3H-A`XxkOMXFW-Yu4*)Wnoq zT*U=BnI$=yd8x&>Sj&qtOHyyKWaVe(-QtLk2RkhO7E^xlEf$dbZgC_f7N_PV=B8@$ zBAgY)o|KscQX0jcSXu#M6!Czp2L%<HYoOMH)ZAiByTuB&b|piR0s{lXFDqxOn9$<X zqT-m6(u~v?m;B_?+|<01;uxq8Vp1y-a|?1(V{-BnQ{szK(^894^O94+F(wG-#zR%H zfO47|DE~1DFtRYRFmf<*Fi9|SFo`hoFtIT5Fp4qqFbXj8F!C@;G4n7MfigG9&$)@2 wdGYa@%tcZlKfpvmevXd^yAz2}1O+CCO>TZlX-=vgDCri10-l4JLz;sT09ySj+W-In literal 0 HcmV?d00001 diff --git a/example/citations.py b/example/citations.py new file mode 100644 index 0000000..1bb8ac2 --- /dev/null +++ b/example/citations.py @@ -0,0 +1,9 @@ +def myfun(): #!s + """ + To solve this exercise, look at \ref{eq1} in \ref{sec1}. + You can also look at \cite{bertsekasII} and \cite{herlau} + More specifically, look at \cite[Equation 117]{bertsekasII} and \cite[\ref{fig1}]{herlau} + + We can also write a special tag to reduce repetition: \nref{fig1} and \nref{sec1}. + """ + return 42 #!s diff --git a/example/exercise1.py b/example/exercise1.py new file mode 100644 index 0000000..e39a5df --- /dev/null +++ b/example/exercise1.py @@ -0,0 +1,23 @@ +def mysum(a,b): #!f Implement the sum-function here #!s=b + """ + Return the sum of a and b + """ + return a+b #!s=b +#!s=a +def print_information(s): + print("s is", s) #!b + print("s printed twice", s, s) #!b Print s once and twice. + print("s printed three times", s, s, s) +#!s=a +# Let's both capture output and also typeset it is an interactive python session. +print("Hello world") #!i +for j in range(3): #!o + print(f"{j=}") #!o +print("Goodbuuy world") #!i +# Cut a single line and put it in the 'b' snippet. +3 * 45 #!s=b #!s=b + +if __name__ == "__main__": + mysum(2,2) + print_information("Cat") + diff --git a/example/latex/br.pdf b/example/latex/br.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d512f261a3f5c936a6745207be0b7f6d9b12aba7 GIT binary patch literal 18385 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 QLkj}~3ocbvSARDy082nLBLDyZ literal 0 HcmV?d00001 diff --git a/example/latex/index.aux b/example/latex/index.aux new file mode 100644 index 0000000..78d1269 --- /dev/null +++ b/example/latex/index.aux @@ -0,0 +1,38 @@ +\relax +\providecommand\hyper@newdestlabel[2]{} +\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument} +\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined +\global\let\oldcontentsline\contentsline +\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}} +\global\let\oldnewlabel\newlabel +\gdef\newlabel#1#2{\newlabelxx{#1}#2} +\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}} +\AtEndDocument{\ifx\hyper@anchor\@undefined +\let\contentsline\oldcontentsline +\let\newlabel\oldnewlabel +\fi} +\fi} +\global\let\hyper@last\relax +\gdef\HyperFirstAtBeginDocument#1{#1} +\providecommand\HyField@AuxAddToFields[1]{} +\providecommand\HyField@AuxAddToCoFields[2]{} +\providecommand\babel@aux[2]{} +\@nameuse{bbl@beforestart} +\citation{bertsekasII} +\citation{rosolia2018data} +\citation{herlau} +\bibstyle{alpha} +\bibdata{library} +\bibcite{bertsekasII}{Ber07} +\bibcite{herlau}{Her21} +\bibcite{rosolia2018data}{RZB18} +\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces A figure}}{1}{figure.1}\protected@file@percent } +\newlabel{fig1}{{1}{1}{A figure}{figure.1}{}} +\newlabel{fig1@cref}{{[figure][1][]1}{[1][1][]1}} +\babel@aux{english}{} +\@writefile{toc}{\contentsline {section}{\numberline {1}First section}{1}{section.1}\protected@file@percent } +\newlabel{sec1}{{1}{1}{First section}{section.1}{}} +\newlabel{sec1@cref}{{[section][1][]1}{[1][1][]1}} +\newlabel{eq1}{{1}{1}{First section}{equation.1.1}{}} +\newlabel{eq1@cref}{{[equation][1][]1}{[1][1][]1}} +\gdef \@abspage@last{1} diff --git a/example/latex/index.bbl b/example/latex/index.bbl new file mode 100644 index 0000000..d70f86d --- /dev/null +++ b/example/latex/index.bbl @@ -0,0 +1,19 @@ +\begin{thebibliography}{RZB18} + +\bibitem[Ber07]{bertsekasII} +Dimitri~P. Bertsekas. +\newblock {\em Dynamic Programming and Optimal Control, Vol. II}. +\newblock Athena Scientific, 3rd edition, 2007. + +\bibitem[Her21]{herlau} +Tue Herlau. +\newblock Sequential decision making. +\newblock (See \textbf{02465\_Notes.pdf}), 2021. + +\bibitem[RZB18]{rosolia2018data} +Ugo Rosolia, Xiaojing Zhang, and Francesco Borrelli. +\newblock Data-driven predictive control for autonomous systems. +\newblock {\em Annual Review of Control, Robotics, and Autonomous Systems}, + 1:259--286, 2018. + +\end{thebibliography} diff --git a/example/latex/index.blg b/example/latex/index.blg new file mode 100644 index 0000000..21b5201 --- /dev/null +++ b/example/latex/index.blg @@ -0,0 +1,48 @@ +This is BibTeX, Version 0.99d +Capacity: max_strings=200000, hash_size=200000, hash_prime=170003 +The top-level auxiliary file: index.aux +Reallocating 'name_of_file' (item size: 1) to 6 items. +The style file: alpha.bst +Reallocating 'name_of_file' (item size: 1) to 8 items. +Database file #1: library.bib +You've used 3 entries, + 2543 wiz_defined-function locations, + 577 strings with 4836 characters, +and the built_in function-call counts, 984 in all, are: += -- 97 +> -- 41 +< -- 2 ++ -- 13 +- -- 13 +* -- 64 +:= -- 178 +add.period$ -- 9 +call.type$ -- 3 +change.case$ -- 17 +chr.to.int$ -- 3 +cite$ -- 3 +duplicate$ -- 40 +empty$ -- 69 +format.name$ -- 18 +if$ -- 191 +int.to.chr$ -- 1 +int.to.str$ -- 0 +missing$ -- 3 +newline$ -- 18 +num.names$ -- 9 +pop$ -- 14 +preamble$ -- 1 +purify$ -- 20 +quote$ -- 0 +skip$ -- 32 +stack$ -- 0 +substring$ -- 46 +swap$ -- 2 +text.length$ -- 2 +text.prefix$ -- 2 +top$ -- 0 +type$ -- 20 +warning$ -- 0 +while$ -- 9 +width$ -- 4 +write$ -- 40 diff --git a/example/latex/index.log b/example/latex/index.log new file mode 100644 index 0000000..a35abea --- /dev/null +++ b/example/latex/index.log @@ -0,0 +1,1000 @@ +This is pdfTeX, Version 3.141592653-2.6-1.40.23 (MiKTeX 21.8) (preloaded format=pdflatex 2021.9.3) 4 SEP 2021 21:25 +entering extended mode +**./index.tex +(index.tex +LaTeX2e <2021-06-01> patch level 1 +L3 programming layer <2021-08-27> +(C:\Program Files\MiKTeX\tex/latex/base\article.cls +Document Class: article 2021/02/12 v1.4n Standard LaTeX document class +(C:\Program Files\MiKTeX\tex/latex/base\size12.clo +File: size12.clo 2021/02/12 v1.4n Standard LaTeX file (size option) +) +\c@part=\count182 +\c@section=\count183 +\c@subsection=\count184 +\c@subsubsection=\count185 +\c@paragraph=\count186 +\c@subparagraph=\count187 +\c@figure=\count188 +\c@table=\count189 +\abovecaptionskip=\skip47 +\belowcaptionskip=\skip48 +\bibindent=\dimen138 +) +(C:\Program Files\MiKTeX\tex/latex/xcolor\xcolor.sty +Package: xcolor 2016/05/11 v2.12 LaTeX color extensions (UK) + +(C:\Program Files\MiKTeX\tex/latex/graphics-cfg\color.cfg +File: color.cfg 2016/01/02 v1.6 sample color configuration +) +Package xcolor Info: Driver file: pdftex.def on input line 225. + +(C:\Program Files\MiKTeX\tex/latex/graphics-def\pdftex.def +File: pdftex.def 2020/10/05 v1.2a Graphics/color driver for pdftex +) +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/colortbl\colortbl.sty +Package: colortbl 2020/01/04 v1.0e Color table columns (DPC) + +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/tools\array.sty +Package: array 2021/04/20 v2.5e Tabular extension package (FMi) +\col@sep=\dimen139 +\ar@mcellbox=\box50 +\extrarowheight=\dimen140 +\NC@list=\toks16 +\extratabsurround=\skip49 +\backup@length=\skip50 +\ar@cellbox=\box51 +) +\everycr=\toks17 +\minrowclearance=\skip51 +) +\rownum=\count190 +Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1348. +Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1352. +Package xcolor Info: Model `RGB' extended on input line 1364. +Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1366. +Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1367. +Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1368. +Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1369. +Package xcolor Info: Model `Gray' substituted by `gray' on input line 1370. +Package xcolor Info: Model `wave' substituted by `hsb' on input line 1371. +) +(C:\Program Files\MiKTeX\tex/latex/url\url.sty +\Urlmuskip=\muskip16 +Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. +) +(C:\Program Files\MiKTeX\tex/latex/graphics\graphics.sty +Package: graphics 2021/03/04 v1.4d Standard LaTeX Graphics (DPC,SPQR) + +(C:\Program Files\MiKTeX\tex/latex/graphics\trig.sty +Package: trig 2016/01/03 v1.10 sin cos tan (DPC) +) +(C:\Program Files\MiKTeX\tex/latex/graphics-cfg\graphics.cfg +File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration +) +Package graphics Info: Driver file: pdftex.def on input line 107. +) +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/tools\multicol.sty +Package: multicol 2019/12/09 v1.8y multicolumn formatting (FMi) +\c@tracingmulticols=\count191 +\mult@box=\box52 +\multicol@leftmargin=\dimen141 +\c@unbalance=\count192 +\c@collectmore=\count193 +\doublecol@number=\count194 +\multicoltolerance=\count195 +\multicolpretolerance=\count196 +\full@width=\dimen142 +\page@free=\dimen143 +\premulticols=\dimen144 +\postmulticols=\dimen145 +\multicolsep=\skip52 +\multicolbaselineskip=\skip53 +\partial@page=\box53 +\last@line=\box54 +\maxbalancingoverflow=\dimen146 +\mult@rightbox=\box55 +\mult@grightbox=\box56 +\mult@gfirstbox=\box57 +\mult@firstbox=\box58 +\@tempa=\box59 +\@tempa=\box60 +\@tempa=\box61 +\@tempa=\box62 +\@tempa=\box63 +\@tempa=\box64 +\@tempa=\box65 +\@tempa=\box66 +\@tempa=\box67 +\@tempa=\box68 +\@tempa=\box69 +\@tempa=\box70 +\@tempa=\box71 +\@tempa=\box72 +\@tempa=\box73 +\@tempa=\box74 +\@tempa=\box75 +\@tempa=\box76 +\@tempa=\box77 +\@tempa=\box78 +\@tempa=\box79 +\@tempa=\box80 +\@tempa=\box81 +\@tempa=\box82 +\@tempa=\box83 +\@tempa=\box84 +\@tempa=\box85 +\@tempa=\box86 +\@tempa=\box87 +\@tempa=\box88 +\@tempa=\box89 +\@tempa=\box90 +\@tempa=\box91 +\@tempa=\box92 +\@tempa=\box93 +\@tempa=\box94 +\@tempa=\box95 +\c@minrows=\count197 +\c@columnbadness=\count198 +\c@finalcolumnbadness=\count199 +\last@try=\dimen147 +\multicolovershoot=\dimen148 +\multicolundershoot=\dimen149 +\mult@nat@firstbox=\box96 +\colbreak@box=\box97 +\mc@col@check@num=\count266 +) +(C:\Program Files\MiKTeX\tex/generic/dvips\rotate.sty +\@rotdimen=\dimen150 +\@rotbox=\box98 +) +(C:\Program Files\MiKTeX\tex/latex/graphics\rotating.sty +Package: rotating 2016/08/11 v2.16d rotated objects in LaTeX + +(C:\Program Files\MiKTeX\tex/latex/graphics\graphicx.sty +Package: graphicx 2020/12/05 v1.2c Enhanced LaTeX Graphics (DPC,SPQR) + +(C:\Program Files\MiKTeX\tex/latex/graphics\keyval.sty +Package: keyval 2014/10/28 v1.15 key=value parser (DPC) +\KV@toks@=\toks18 +) +\Gin@req@height=\dimen151 +\Gin@req@width=\dimen152 +) +(C:\Program Files\MiKTeX\tex/latex/base\ifthen.sty +Package: ifthen 2020/11/24 v1.1c Standard LaTeX ifthen package (DPC) +) +\c@r@tfl@t=\count267 +\rotFPtop=\skip54 +\rotFPbot=\skip55 +\rot@float@box=\box99 +\rot@mess@toks=\toks19 +) +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/booktabs\booktabs.sty +Package: booktabs 2020/01/12 v1.61803398 Publication quality tables +\heavyrulewidth=\dimen153 +\lightrulewidth=\dimen154 +\cmidrulewidth=\dimen155 +\belowrulesep=\dimen156 +\belowbottomsep=\dimen157 +\aboverulesep=\dimen158 +\abovetopsep=\dimen159 +\cmidrulesep=\dimen160 +\cmidrulekern=\dimen161 +\defaultaddspace=\dimen162 +\@cmidla=\count268 +\@cmidlb=\count269 +\@aboverulesep=\dimen163 +\@belowrulesep=\dimen164 +\@thisruleclass=\count270 +\@lastruleclass=\count271 +\@thisrulewidth=\dimen165 +) +(C:\Program Files\MiKTeX\tex/latex/hyperref\hyperref.sty +Package: hyperref 2021-06-07 v7.00m Hypertext links for LaTeX + +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/generic/ltxcmds\ltxcmds.sty +Package: ltxcmds 2020-05-10 v1.25 LaTeX kernel commands for general use (HO) +) +(C:\Program Files\MiKTeX\tex/generic/iftex\iftex.sty +Package: iftex 2020/03/06 v1.0d TeX engine tests +) +(C:\Program Files\MiKTeX\tex/generic/pdftexcmds\pdftexcmds.sty +Package: pdftexcmds 2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO +) + +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/generic/infwarerr\infwarerr.sty +Package: infwarerr 2019/12/03 v1.5 Providing info/warning/error messages (HO) +) +Package pdftexcmds Info: \pdf@primitive is available. +Package pdftexcmds Info: \pdf@ifprimitive is available. +Package pdftexcmds Info: \pdfdraftmode found. +) +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/generic/kvsetkeys\kvsetkeys.sty +Package: kvsetkeys 2019/12/15 v1.18 Key value parser (HO) +) +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/generic/kvdefinekeys\kvdefinekeys.sty +Package: kvdefinekeys 2019-12-19 v1.6 Define keys (HO) +) (C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/generic/pdfescape\pdfescape.sty +Package: pdfescape 2019/12/09 v1.15 Implements pdfTeX's escape features (HO) +) +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/hycolor\hycolor.sty +Package: hycolor 2020-01-27 v1.10 Color options for hyperref/bookmark (HO) +) +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/letltxmacro\letltxmacro.sty +Package: letltxmacro 2019/12/03 v1.6 Let assignment for LaTeX macros (HO) +) +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/auxhook\auxhook.sty +Package: auxhook 2019-12-17 v1.6 Hooks for auxiliary files (HO) +) +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/kvoptions\kvoptions.sty +Package: kvoptions 2020-10-07 v3.14 Key value format for package options (HO) +) +\@linkdim=\dimen166 +\Hy@linkcounter=\count272 +\Hy@pagecounter=\count273 + +(C:\Program Files\MiKTeX\tex/latex/hyperref\pd1enc.def +File: pd1enc.def 2021-06-07 v7.00m Hyperref: PDFDocEncoding definition (HO) +Now handling font encoding PD1 ... +... no UTF-8 mapping file for font encoding PD1 +) +(C:\Program Files\MiKTeX\tex/latex/hyperref\hyperref-langpatches.def +File: hyperref-langpatches.def 2021-06-07 v7.00m Hyperref: patches for babel la +nguages +) +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/generic/intcalc\intcalc.sty +Package: intcalc 2019/12/15 v1.3 Expandable calculations with integers (HO) +) +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/generic/etexcmds\etexcmds.sty +Package: etexcmds 2019/12/15 v1.7 Avoid name clashes with e-TeX commands (HO) +) +\Hy@SavedSpaceFactor=\count274 + +(C:\Program Files\MiKTeX\tex/latex/hyperref\puenc.def +File: puenc.def 2021-06-07 v7.00m Hyperref: PDF Unicode definition (HO) +Now handling font encoding PU ... +... no UTF-8 mapping file for font encoding PU +) +Package hyperref Info: Hyper figures OFF on input line 4192. +Package hyperref Info: Link nesting OFF on input line 4197. +Package hyperref Info: Hyper index ON on input line 4200. +Package hyperref Info: Plain pages OFF on input line 4207. +Package hyperref Info: Backreferencing OFF on input line 4212. +Package hyperref Info: Implicit mode ON; LaTeX internals redefined. +Package hyperref Info: Bookmarks ON on input line 4445. +\c@Hy@tempcnt=\count275 +LaTeX Info: Redefining \url on input line 4804. +\XeTeXLinkMargin=\dimen167 + +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/generic/bitset\bitset.sty +Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO) + +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/generic/bigintcalc\bigintcalc.sty +Package: bigintcalc 2019/12/15 v1.5 Expandable calculations on big integers (HO +) +)) +\Fld@menulength=\count276 +\Field@Width=\dimen168 +\Fld@charsize=\dimen169 +Package hyperref Info: Hyper figures OFF on input line 6076. +Package hyperref Info: Link nesting OFF on input line 6081. +Package hyperref Info: Hyper index ON on input line 6084. +Package hyperref Info: backreferencing OFF on input line 6091. +Package hyperref Info: Link coloring OFF on input line 6096. +Package hyperref Info: Link coloring with OCG OFF on input line 6101. +Package hyperref Info: PDF/A mode OFF on input line 6106. +LaTeX Info: Redefining \ref on input line 6146. +LaTeX Info: Redefining \pageref on input line 6150. + +(C:\Program Files\MiKTeX\tex/latex/base\atbegshi-ltx.sty +Package: atbegshi-ltx 2021/01/10 v1.0c Emulation of the original atbegshi +package with kernel methods +) +\Hy@abspage=\count277 +\c@Item=\count278 +\c@Hfootnote=\count279 +) +Package hyperref Info: Driver (autodetected): hpdftex. + +(C:\Program Files\MiKTeX\tex/latex/hyperref\hpdftex.def +File: hpdftex.def 2021-06-07 v7.00m Hyperref driver for pdfTeX + +(C:\Program Files\MiKTeX\tex/latex/base\atveryend-ltx.sty +Package: atveryend-ltx 2020/08/19 v1.0a Emulation of the original atvery packag +e +with kernel methods +) +\Fld@listcount=\count280 +\c@bookmark@seq@number=\count281 + +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/rerunfilecheck\rerunfilecheck.s +ty +Package: rerunfilecheck 2019/12/05 v1.9 Rerun checks for auxiliary files (HO) + +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/generic/uniquecounter\uniquecounter.s +ty +Package: uniquecounter 2019/12/15 v1.4 Provide unlimited unique counter (HO) +) +Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2 +86. +) +\Hy@SectionHShift=\skip56 +) (C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/psnfss\pifont.sty +Package: pifont 2020/03/25 PSNFSS-v9.3 Pi font support (SPQR) +LaTeX Font Info: Trying to load font information for U+pzd on input line 63. + + +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/psnfss\upzd.fd +File: upzd.fd 2001/06/04 font definitions for U/pzd. +) +LaTeX Font Info: Trying to load font information for U+psy on input line 64. + + +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/psnfss\upsy.fd +File: upsy.fd 2001/06/04 font definitions for U/psy. +)) +(C:\Program Files\MiKTeX\tex/latex/base\latexsym.sty +Package: latexsym 1998/08/17 v2.2e Standard LaTeX package (lasy symbols) +\symlasy=\mathgroup4 +LaTeX Font Info: Overwriting symbol font `lasy' in version `bold' +(Font) U/lasy/m/n --> U/lasy/b/n on input line 52. +) +(C:\Program Files\MiKTeX\tex/generic/babel\babel.sty +Package: babel 2021/07/22 3.63 The Babel package + +(C:\Program Files\MiKTeX\tex/generic/babel\babel.def +File: babel.def 2021/07/22 3.63 Babel common definitions +\babel@savecnt=\count282 +\U@D=\dimen170 +\l@unhyphenated=\language79 + +(C:\Program Files\MiKTeX\tex/generic/babel\txtbabel.def) +\bbl@readstream=\read2 +) +\bbl@dirlevel=\count283 + +************************************* +* Local config file bblopts.cfg used +* +(C:\Program Files\MiKTeX\tex/latex/arabi\bblopts.cfg +File: bblopts.cfg 2005/09/08 v0.1 add Arabic and Farsi to "declared" options of + babel +) +(C:\Program Files\MiKTeX\tex/latex/babel-english\english.ldf +Language: english 2017/06/06 v3.3r English support from the babel system +Package babel Info: Hyphen rules for 'canadian' set to \l@english +(babel) (\language0). Reported on input line 102. +Package babel Info: Hyphen rules for 'australian' set to \l@ukenglish +(babel) (\language73). Reported on input line 105. +Package babel Info: Hyphen rules for 'newzealand' set to \l@ukenglish +(babel) (\language73). Reported on input line 108. +)) +(C:\Program Files\MiKTeX\tex/latex/epstopdf-pkg\epstopdf.sty +Package: epstopdf 2020-01-24 v2.11 Conversion with epstopdf on the fly (HO) + +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/grfext\grfext.sty +Package: grfext 2019/12/03 v1.3 Manage graphics extensions (HO) +) +(C:\Program Files\MiKTeX\tex/latex/epstopdf-pkg\epstopdf-base.sty +Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf +Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 +85. +Package grfext Info: Graphics extension search list: +(grfext) [.pdf,.png,.jpg,.mps,.jpeg,.jbig2,.jb2,.PDF,.PNG,.JPG,.JPE +G,.JBIG2,.JB2,.eps] +(grfext) \AppendGraphicsExtensions on input line 504. + +(C:\Program Files\MiKTeX\tex/latex/00miktex\epstopdf-sys.cfg +File: epstopdf-sys.cfg 2021/03/18 v2.0 Configuration of epstopdf for MiKTeX +))) +(C:\Program Files\MiKTeX\tex/latex/etoolbox\etoolbox.sty +Package: etoolbox 2020/10/05 v2.5k e-TeX tools for LaTeX (JAW) +\etb@tempcnta=\count284 +) +(C:\Program Files\MiKTeX\tex/latex/amsmath\amsmath.sty +Package: amsmath 2021/04/20 v2.17j AMS math features +\@mathmargin=\skip57 + +For additional information on amsmath, use the `?' option. +(C:\Program Files\MiKTeX\tex/latex/amsmath\amstext.sty +Package: amstext 2000/06/29 v2.01 AMS text + +(C:\Program Files\MiKTeX\tex/latex/amsmath\amsgen.sty +File: amsgen.sty 1999/11/30 v2.0 generic functions +\@emptytoks=\toks20 +\ex@=\dimen171 +)) +(C:\Program Files\MiKTeX\tex/latex/amsmath\amsbsy.sty +Package: amsbsy 1999/11/29 v1.2d Bold Symbols +\pmbraise@=\dimen172 +) +(C:\Program Files\MiKTeX\tex/latex/amsmath\amsopn.sty +Package: amsopn 2016/03/08 v2.02 operator names +) +\inf@bad=\count285 +LaTeX Info: Redefining \frac on input line 234. +\uproot@=\count286 +\leftroot@=\count287 +LaTeX Info: Redefining \overline on input line 399. +\classnum@=\count288 +\DOTSCASE@=\count289 +LaTeX Info: Redefining \ldots on input line 496. +LaTeX Info: Redefining \dots on input line 499. +LaTeX Info: Redefining \cdots on input line 620. +\Mathstrutbox@=\box100 +\strutbox@=\box101 +\big@size=\dimen173 +LaTeX Font Info: Redeclaring font encoding OML on input line 743. +LaTeX Font Info: Redeclaring font encoding OMS on input line 744. +\macc@depth=\count290 +\c@MaxMatrixCols=\count291 +\dotsspace@=\muskip17 +\c@parentequation=\count292 +\dspbrk@lvl=\count293 +\tag@help=\toks21 +\row@=\count294 +\column@=\count295 +\maxfields@=\count296 +\andhelp@=\toks22 +\eqnshift@=\dimen174 +\alignsep@=\dimen175 +\tagshift@=\dimen176 +\tagwidth@=\dimen177 +\totwidth@=\dimen178 +\lineht@=\dimen179 +\@envbody=\toks23 +\multlinegap=\skip58 +\multlinetaggap=\skip59 +\mathdisplay@stack=\toks24 +LaTeX Info: Redefining \[ on input line 2923. +LaTeX Info: Redefining \] on input line 2924. +) +(C:\Program Files\MiKTeX\tex/latex/amsfonts\amssymb.sty +Package: amssymb 2013/01/14 v3.01 AMS font symbols + +(C:\Program Files\MiKTeX\tex/latex/amsfonts\amsfonts.sty +Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support +\symAMSa=\mathgroup5 +\symAMSb=\mathgroup6 +LaTeX Font Info: Redeclaring math symbol \hbar on input line 98. +LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' +(Font) U/euf/m/n --> U/euf/b/n on input line 106. +)) +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/multirow\multirow.sty +Package: multirow 2021/03/15 v2.8 Span multiple rows of a table +\multirow@colwidth=\skip60 +\multirow@cntb=\count297 +\multirow@dima=\skip61 +\bigstrutjot=\dimen180 +) +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/fancyhdr\fancyhdr.sty +Package: fancyhdr 2021/01/28 v4.0.1 Extensive control of page headers and foote +rs +\f@nch@headwidth=\skip62 +\f@nch@O@elh=\skip63 +\f@nch@O@erh=\skip64 +\f@nch@O@olh=\skip65 +\f@nch@O@orh=\skip66 +\f@nch@O@elf=\skip67 +\f@nch@O@erf=\skip68 +\f@nch@O@olf=\skip69 +\f@nch@O@orf=\skip70 +) +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/cleveref\cleveref.sty +Package: cleveref 2018/03/27 v0.21.4 Intelligent cross-referencing +Package cleveref Info: `hyperref' support loaded on input line 2370. +LaTeX Info: Redefining \cref on input line 2370. +LaTeX Info: Redefining \Cref on input line 2370. +LaTeX Info: Redefining \crefrange on input line 2370. +LaTeX Info: Redefining \Crefrange on input line 2370. +LaTeX Info: Redefining \cpageref on input line 2370. +LaTeX Info: Redefining \Cpageref on input line 2370. +LaTeX Info: Redefining \cpagerefrange on input line 2370. +LaTeX Info: Redefining \Cpagerefrange on input line 2370. +LaTeX Info: Redefining \labelcref on input line 2370. +LaTeX Info: Redefining \labelcpageref on input line 2370. +) +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/todonotes\todonotes.sty +Package: todonotes 2021/06/04 v1.1.5 Todonotes source and documentation. +Package: todonotes 2021/06/04 + +(C:\Program Files\MiKTeX\tex/latex/xkeyval\xkeyval.sty +Package: xkeyval 2020/11/20 v2.8 package option processing (HA) + +(C:\Program Files\MiKTeX\tex/generic/xkeyval\xkeyval.tex +(C:\Program Files\MiKTeX\tex/generic/xkeyval\xkvutils.tex +\XKV@toks=\toks25 +\XKV@tempa@toks=\toks26 +) +\XKV@depth=\count298 +File: xkeyval.tex 2014/12/03 v2.7a key=value parser (HA) +)) +(C:\Program Files\MiKTeX\tex/latex/pgf/frontendlayer\tikz.sty +(C:\Program Files\MiKTeX\tex/latex/pgf/basiclayer\pgf.sty +(C:\Program Files\MiKTeX\tex/latex/pgf/utilities\pgfrcs.sty +(C:\Program Files\MiKTeX\tex/generic/pgf/utilities\pgfutil-common.tex +\pgfutil@everybye=\toks27 +\pgfutil@tempdima=\dimen181 +\pgfutil@tempdimb=\dimen182 + +(C:\Program Files\MiKTeX\tex/generic/pgf/utilities\pgfutil-common-lists.tex)) +(C:\Program Files\MiKTeX\tex/generic/pgf/utilities\pgfutil-latex.def +\pgfutil@abb=\box102 +) +(C:\Program Files\MiKTeX\tex/generic/pgf/utilities\pgfrcs.code.tex +(C:\Program Files\MiKTeX\tex/generic/pgf\pgf.revision.tex) +Package: pgfrcs 2021/05/15 v3.1.9a (3.1.9a) +)) +Package: pgf 2021/05/15 v3.1.9a (3.1.9a) + +(C:\Program Files\MiKTeX\tex/latex/pgf/basiclayer\pgfcore.sty +(C:\Program Files\MiKTeX\tex/latex/pgf/systemlayer\pgfsys.sty +(C:\Program Files\MiKTeX\tex/generic/pgf/systemlayer\pgfsys.code.tex +Package: pgfsys 2021/05/15 v3.1.9a (3.1.9a) + +(C:\Program Files\MiKTeX\tex/generic/pgf/utilities\pgfkeys.code.tex +\pgfkeys@pathtoks=\toks28 +\pgfkeys@temptoks=\toks29 + +(C:\Program Files\MiKTeX\tex/generic/pgf/utilities\pgfkeysfiltered.code.tex +\pgfkeys@tmptoks=\toks30 +)) +\pgf@x=\dimen183 +\pgf@y=\dimen184 +\pgf@xa=\dimen185 +\pgf@ya=\dimen186 +\pgf@xb=\dimen187 +\pgf@yb=\dimen188 +\pgf@xc=\dimen189 +\pgf@yc=\dimen190 +\pgf@xd=\dimen191 +\pgf@yd=\dimen192 +\w@pgf@writea=\write3 +\r@pgf@reada=\read3 +\c@pgf@counta=\count299 +\c@pgf@countb=\count300 +\c@pgf@countc=\count301 +\c@pgf@countd=\count302 +\t@pgf@toka=\toks31 +\t@pgf@tokb=\toks32 +\t@pgf@tokc=\toks33 +\pgf@sys@id@count=\count303 + +(C:\Program Files\MiKTeX\tex/generic/pgf/systemlayer\pgf.cfg +File: pgf.cfg 2021/05/15 v3.1.9a (3.1.9a) +) +Driver file for pgf: pgfsys-pdftex.def + +(C:\Program Files\MiKTeX\tex/generic/pgf/systemlayer\pgfsys-pdftex.def +File: pgfsys-pdftex.def 2021/05/15 v3.1.9a (3.1.9a) + +(C:\Program Files\MiKTeX\tex/generic/pgf/systemlayer\pgfsys-common-pdf.def +File: pgfsys-common-pdf.def 2021/05/15 v3.1.9a (3.1.9a) +))) +(C:\Program Files\MiKTeX\tex/generic/pgf/systemlayer\pgfsyssoftpath.code.tex +File: pgfsyssoftpath.code.tex 2021/05/15 v3.1.9a (3.1.9a) +\pgfsyssoftpath@smallbuffer@items=\count304 +\pgfsyssoftpath@bigbuffer@items=\count305 +) +(C:\Program Files\MiKTeX\tex/generic/pgf/systemlayer\pgfsysprotocol.code.tex +File: pgfsysprotocol.code.tex 2021/05/15 v3.1.9a (3.1.9a) +)) +(C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcore.code.tex +Package: pgfcore 2021/05/15 v3.1.9a (3.1.9a) + +(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmath.code.tex +(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmathcalc.code.tex +(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmathutil.code.tex) +(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmathparser.code.tex +\pgfmath@dimen=\dimen193 +\pgfmath@count=\count306 +\pgfmath@box=\box103 +\pgfmath@toks=\toks34 +\pgfmath@stack@operand=\toks35 +\pgfmath@stack@operation=\toks36 +) +(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmathfunctions.code.tex +(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmathfunctions.basic.code.tex) +(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmathfunctions.trigonometric.co +de.tex) +(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmathfunctions.random.code.tex) + +(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmathfunctions.comparison.code. +tex) +(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmathfunctions.base.code.tex) +(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmathfunctions.round.code.tex) +(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmathfunctions.misc.code.tex) +(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmathfunctions.integerarithmeti +cs.code.tex))) +(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmathfloat.code.tex +\c@pgfmathroundto@lastzeros=\count307 +)) +(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfint.code.tex) +(C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcorepoints.code.tex +File: pgfcorepoints.code.tex 2021/05/15 v3.1.9a (3.1.9a) +\pgf@picminx=\dimen194 +\pgf@picmaxx=\dimen195 +\pgf@picminy=\dimen196 +\pgf@picmaxy=\dimen197 +\pgf@pathminx=\dimen198 +\pgf@pathmaxx=\dimen199 +\pgf@pathminy=\dimen256 +\pgf@pathmaxy=\dimen257 +\pgf@xx=\dimen258 +\pgf@xy=\dimen259 +\pgf@yx=\dimen260 +\pgf@yy=\dimen261 +\pgf@zx=\dimen262 +\pgf@zy=\dimen263 +) +(C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcorepathconstruct.code.t +ex +File: pgfcorepathconstruct.code.tex 2021/05/15 v3.1.9a (3.1.9a) +\pgf@path@lastx=\dimen264 +\pgf@path@lasty=\dimen265 +) +(C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcorepathusage.code.tex +File: pgfcorepathusage.code.tex 2021/05/15 v3.1.9a (3.1.9a) +\pgf@shorten@end@additional=\dimen266 +\pgf@shorten@start@additional=\dimen267 +) +(C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcorescopes.code.tex +File: pgfcorescopes.code.tex 2021/05/15 v3.1.9a (3.1.9a) +\pgfpic=\box104 +\pgf@hbox=\box105 +\pgf@layerbox@main=\box106 +\pgf@picture@serial@count=\count308 +) +(C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcoregraphicstate.code.te +x +File: pgfcoregraphicstate.code.tex 2021/05/15 v3.1.9a (3.1.9a) +\pgflinewidth=\dimen268 +) +(C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcoretransformations.code +.tex +File: pgfcoretransformations.code.tex 2021/05/15 v3.1.9a (3.1.9a) +\pgf@pt@x=\dimen269 +\pgf@pt@y=\dimen270 +\pgf@pt@temp=\dimen271 +) (C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcorequick.code.tex +File: pgfcorequick.code.tex 2021/05/15 v3.1.9a (3.1.9a) +) (C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcoreobjects.code.tex +File: pgfcoreobjects.code.tex 2021/05/15 v3.1.9a (3.1.9a) +) +(C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcorepathprocessing.code. +tex +File: pgfcorepathprocessing.code.tex 2021/05/15 v3.1.9a (3.1.9a) +) (C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcorearrows.code.tex +File: pgfcorearrows.code.tex 2021/05/15 v3.1.9a (3.1.9a) +\pgfarrowsep=\dimen272 +) (C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcoreshade.code.tex +File: pgfcoreshade.code.tex 2021/05/15 v3.1.9a (3.1.9a) +\pgf@max=\dimen273 +\pgf@sys@shading@range@num=\count309 +\pgf@shadingcount=\count310 +) +(C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcoreimage.code.tex +File: pgfcoreimage.code.tex 2021/05/15 v3.1.9a (3.1.9a) + +(C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcoreexternal.code.tex +File: pgfcoreexternal.code.tex 2021/05/15 v3.1.9a (3.1.9a) +\pgfexternal@startupbox=\box107 +)) +(C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcorelayers.code.tex +File: pgfcorelayers.code.tex 2021/05/15 v3.1.9a (3.1.9a) +) +(C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcoretransparency.code.te +x +File: pgfcoretransparency.code.tex 2021/05/15 v3.1.9a (3.1.9a) +) (C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcorepatterns.code.tex +File: pgfcorepatterns.code.tex 2021/05/15 v3.1.9a (3.1.9a) +) (C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcorerdf.code.tex +File: pgfcorerdf.code.tex 2021/05/15 v3.1.9a (3.1.9a) +))) +(C:\Program Files\MiKTeX\tex/generic/pgf/modules\pgfmoduleshapes.code.tex +File: pgfmoduleshapes.code.tex 2021/05/15 v3.1.9a (3.1.9a) +\pgfnodeparttextbox=\box108 +) +(C:\Program Files\MiKTeX\tex/generic/pgf/modules\pgfmoduleplot.code.tex +File: pgfmoduleplot.code.tex 2021/05/15 v3.1.9a (3.1.9a) +) +(C:\Program Files\MiKTeX\tex/latex/pgf/compatibility\pgfcomp-version-0-65.sty +Package: pgfcomp-version-0-65 2021/05/15 v3.1.9a (3.1.9a) +\pgf@nodesepstart=\dimen274 +\pgf@nodesepend=\dimen275 +) +(C:\Program Files\MiKTeX\tex/latex/pgf/compatibility\pgfcomp-version-1-18.sty +Package: pgfcomp-version-1-18 2021/05/15 v3.1.9a (3.1.9a) +)) (C:\Program Files\MiKTeX\tex/latex/pgf/utilities\pgffor.sty +(C:\Program Files\MiKTeX\tex/latex/pgf/utilities\pgfkeys.sty +(C:\Program Files\MiKTeX\tex/generic/pgf/utilities\pgfkeys.code.tex)) +(C:\Program Files\MiKTeX\tex/latex/pgf/math\pgfmath.sty +(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmath.code.tex)) +(C:\Program Files\MiKTeX\tex/generic/pgf/utilities\pgffor.code.tex +Package: pgffor 2021/05/15 v3.1.9a (3.1.9a) + +(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmath.code.tex) +\pgffor@iter=\dimen276 +\pgffor@skip=\dimen277 +\pgffor@stack=\toks37 +\pgffor@toks=\toks38 +)) +(C:\Program Files\MiKTeX\tex/generic/pgf/frontendlayer/tikz\tikz.code.tex +Package: tikz 2021/05/15 v3.1.9a (3.1.9a) + +(C:\Program Files\MiKTeX\tex/generic/pgf/libraries\pgflibraryplothandlers.code. +tex +File: pgflibraryplothandlers.code.tex 2021/05/15 v3.1.9a (3.1.9a) +\pgf@plot@mark@count=\count311 +\pgfplotmarksize=\dimen278 +) +\tikz@lastx=\dimen279 +\tikz@lasty=\dimen280 +\tikz@lastxsaved=\dimen281 +\tikz@lastysaved=\dimen282 +\tikz@lastmovetox=\dimen283 +\tikz@lastmovetoy=\dimen284 +\tikzleveldistance=\dimen285 +\tikzsiblingdistance=\dimen286 +\tikz@figbox=\box109 +\tikz@figbox@bg=\box110 +\tikz@tempbox=\box111 +\tikz@tempbox@bg=\box112 +\tikztreelevel=\count312 +\tikznumberofchildren=\count313 +\tikznumberofcurrentchild=\count314 +\tikz@fig@count=\count315 + (C:\Program Files\MiKTeX\tex/generic/pgf/modules\pgfmodulematrix.code.tex +File: pgfmodulematrix.code.tex 2021/05/15 v3.1.9a (3.1.9a) +\pgfmatrixcurrentrow=\count316 +\pgfmatrixcurrentcolumn=\count317 +\pgf@matrix@numberofcolumns=\count318 +) +\tikz@expandcount=\count319 + +(C:\Program Files\MiKTeX\tex/generic/pgf/frontendlayer/tikz/libraries\tikzlibra +rytopaths.code.tex +File: tikzlibrarytopaths.code.tex 2021/05/15 v3.1.9a (3.1.9a) +))) +(C:\Program Files\MiKTeX\tex/generic/pgf/frontendlayer/tikz/libraries\tikzlibra +rypositioning.code.tex +File: tikzlibrarypositioning.code.tex 2021/05/15 v3.1.9a (3.1.9a) +) +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/tools\calc.sty +Package: calc 2017/05/25 v4.3 Infix arithmetic (KKT,FJ) +\calc@Acount=\count320 +\calc@Bcount=\count321 +\calc@Adimen=\dimen287 +\calc@Bdimen=\dimen288 +\calc@Askip=\skip71 +\calc@Bskip=\skip72 +LaTeX Info: Redefining \setlength on input line 80. +LaTeX Info: Redefining \addtolength on input line 81. +\calc@Ccount=\count322 +\calc@Cskip=\skip73 +) +\c@@todonotes@numberoftodonotes=\count323 +) +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/minted\minted.sty +Package: minted 2017/07/19 v2.5 Yet another Pygments shim for LaTeX + +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/fvextra\fvextra.sty +Package: fvextra 2019/02/04 v1.4 fvextra - extensions and patches for fancyvrb + +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/fancyvrb\fancyvrb.sty +Package: fancyvrb 2021/08/12 v3.8 verbatim text (tvz,hv) +\FV@CodeLineNo=\count324 +\FV@InFile=\read4 +\FV@TabBox=\box113 +\c@FancyVerbLine=\count325 +\FV@StepNumber=\count326 +\FV@OutFile=\write4 +) +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/upquote\upquote.sty +Package: upquote 2012/04/19 v1.3 upright-quote and grave-accent glyphs in verba +tim +) +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/lineno\lineno.sty +Package: lineno 2005/11/02 line numbers on paragraphs v4.41 +\linenopenalty=\count327 +\output=\toks39 +\linenoprevgraf=\count328 +\linenumbersep=\dimen289 +\linenumberwidth=\dimen290 +\c@linenumber=\count329 +\c@pagewiselinenumber=\count330 +\c@LN@truepage=\count331 +\c@internallinenumber=\count332 +\c@internallinenumbers=\count333 +\quotelinenumbersep=\dimen291 +\bframerule=\dimen292 +\bframesep=\dimen293 +\bframebox=\box114 +LaTeX Info: Redefining \\ on input line 3056. +) +\c@FV@TrueTabGroupLevel=\count334 +\c@FV@TrueTabCounter=\count335 +\FV@TabBox@Group=\box115 +\FV@TmpLength=\skip74 +\c@FV@HighlightLinesStart=\count336 +\c@FV@HighlightLinesStop=\count337 +\FV@LoopCount=\count338 +\FV@NCharsBox=\box116 +\FV@BreakIndent=\dimen294 +\FV@BreakIndentNChars=\count339 +\FV@BreakSymbolSepLeft=\dimen295 +\FV@BreakSymbolSepLeftNChars=\count340 +\FV@BreakSymbolSepRight=\dimen296 +\FV@BreakSymbolSepRightNChars=\count341 +\FV@BreakSymbolIndentLeft=\dimen297 +\FV@BreakSymbolIndentLeftNChars=\count342 +\FV@BreakSymbolIndentRight=\dimen298 +\FV@BreakSymbolIndentRightNChars=\count343 +\c@FancyVerbLineBreakLast=\count344 +\FV@LineBox=\box117 +\FV@LineIndentBox=\box118 +\FV@LineWidth=\dimen299 +) +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/tools\shellesc.sty +Package: shellesc 2019/11/08 v1.0c unified shell escape interface for LaTeX +Package shellesc Info: Unrestricted shell escape enabled on input line 75. +) +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/ifplatform\ifplatform.sty +Package: ifplatform 2017/10/13 v0.4a Testing for the operating system + +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/generic/catchfile\catchfile.sty +Package: catchfile 2019/12/09 v1.8 Catch the contents of a file (HO) +) +(C:\Program Files\MiKTeX\tex/generic/iftex\ifluatex.sty +Package: ifluatex 2019/10/25 v1.5 ifluatex legacy package. Use iftex instead. +)) +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/xstring\xstring.sty +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/generic/xstring\xstring.tex +\integerpart=\count345 +\decimalpart=\count346 +) +Package: xstring 2021/07/21 v1.84 String manipulations (CT) +) +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/framed\framed.sty +Package: framed 2011/10/22 v 0.96: framed or shaded text with page breaks +\OuterFrameSep=\skip75 +\fb@frw=\dimen300 +\fb@frh=\dimen301 +\FrameRule=\dimen302 +\FrameSep=\dimen303 +) +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/float\float.sty +Package: float 2001/11/08 v1.3d Float enhancements (AL) +\c@float@type=\count347 +\float@exts=\toks40 +\float@box=\box119 +\@float@everytoks=\toks41 +\@floatcapt=\box120 +) +\minted@appexistsfile=\read5 +\minted@bgbox=\box121 +\minted@code=\write5 +\c@minted@FancyVerbLineTemp=\count348 +\c@minted@pygmentizecounter=\count349 +\@float@every@listing=\toks42 +\c@listing=\count350 +) +runsystem(if not exist _minted-index mkdir _minted-index)...executed. + +runsystem(for ^%i in (pygmentize.exe pygmentize.bat pygmentize.cmd) do set > in +dex.aex <nul: /p x=^%~$PATH:i>> index.aex)...executed. + +runsystem(del index.aex)...executed. + + +(C:\Program Files\MiKTeX\tex/latex/l3backend\l3backend-pdftex.def +File: l3backend-pdftex.def 2021-08-04 L3 backend support: PDF output (pdfTeX) +\l__color_backend_stack_int=\count351 +\l__pdf_internal_box=\box122 +) (index.aux) +\openout1 = `index.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 45. +LaTeX Font Info: ... okay on input line 45. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 45. +LaTeX Font Info: ... okay on input line 45. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 45. +LaTeX Font Info: ... okay on input line 45. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 45. +LaTeX Font Info: ... okay on input line 45. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 45. +LaTeX Font Info: ... okay on input line 45. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 45. +LaTeX Font Info: ... okay on input line 45. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 45. +LaTeX Font Info: ... okay on input line 45. +LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 45. +LaTeX Font Info: ... okay on input line 45. +LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 45. +LaTeX Font Info: ... okay on input line 45. + +(C:\Program Files\MiKTeX\tex/context/base/mkii\supp-pdf.mkii +[Loading MPS to PDF converter (version 2006.09.02).] +\scratchcounter=\count352 +\scratchdimen=\dimen304 +\scratchbox=\box123 +\nofMPsegments=\count353 +\nofMParguments=\count354 +\everyMPshowfont=\toks43 +\MPscratchCnt=\count355 +\MPscratchDim=\dimen305 +\MPnumerator=\count356 +\makeMPintoPDFobject=\count357 +\everyMPtoPDFconversion=\toks44 +) +Package hyperref Info: Link coloring OFF on input line 45. + (C:\Program Files\MiKTeX\tex/latex/hyperref\nameref.sty +Package: nameref 2021-04-02 v2.47 Cross-referencing by name of section + +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/refcount\refcount.sty +Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO) +) +(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/generic/gettitlestring\gettitlestring +.sty +Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO) +) +\c@section@level=\count358 +) +LaTeX Info: Redefining \ref on input line 45. +LaTeX Info: Redefining \pageref on input line 45. +LaTeX Info: Redefining \nameref on input line 45. + (index.out) (index.out) +\@outlinefile=\write6 +\openout6 = `index.out'. + +LaTeX Font Info: Trying to load font information for U+lasy on input line 48 +. + (C:\Program Files\MiKTeX\tex/latex/base\ulasy.fd +File: ulasy.fd 1998/08/17 v2.2e LaTeX symbol font definitions +) +LaTeX Font Info: Trying to load font information for U+msa on input line 48. + + (C:\Program Files\MiKTeX\tex/latex/amsfonts\umsa.fd +File: umsa.fd 2013/01/14 v3.01 AMS symbols A +) +LaTeX Font Info: Trying to load font information for U+msb on input line 48. + + +(C:\Program Files\MiKTeX\tex/latex/amsfonts\umsb.fd +File: umsb.fd 2013/01/14 v3.01 AMS symbols B +) +<br.pdf, id=15, 279.0425pt x 200.75pt> +File: br.pdf Graphic file (type pdf) +<use br.pdf> +Package pdftex.def Info: br.pdf used on input line 53. +(pdftex.def) Requested size: 312.00119pt x 224.4678pt. + (index.bbl) [1{C:/Users/tuhe/AppData/Local/MiKTeX/pdftex/config/pdftex.map}pdf +TeX warning (ext4): destination with the same identifier (name{figure.1}) has b +een already used, duplicate ignored +<argument> ...shipout:D \box_use:N \l_shipout_box + \__shipout_drop_firstpage_... +l.60 \end{document} + + + <./br.pdf>] (index.aux) +Package rerunfilecheck Info: File `index.out' has not changed. +(rerunfilecheck) Checksum: D96912DD8E67535EC65D76A02327F866;111. + ) +Here is how much of TeX's memory you used: + 26046 strings out of 478927 + 486761 string characters out of 2862359 + 824814 words of memory out of 3000000 + 43413 multiletter control sequences out of 15000+600000 + 410343 words of font info for 54 fonts, out of 8000000 for 9000 + 1141 hyphenation exceptions out of 8191 + 99i,7n,97p,437b,372s stack positions out of 5000i,500n,10000p,200000b,80000s +<C:/Program Files/MiKTeX/fonts/type1/public/amsfonts/cm/cmbx12.pfb><C:/Progra +m Files/MiKTeX/fonts/type1/public/amsfonts/cm/cmr12.pfb><C:/Program Files/MiKTe +X/fonts/type1/public/amsfonts/cm/cmti12.pfb> +Output written on index.pdf (1 page, 71031 bytes). +PDF statistics: + 86 PDF objects out of 1000 (max. 8388607) + 9 named destinations out of 1000 (max. 500000) + 26 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/example/latex/index.out b/example/latex/index.out new file mode 100644 index 0000000..ce0fc38 --- /dev/null +++ b/example/latex/index.out @@ -0,0 +1 @@ +\BOOKMARK [1][-]{section.1}{\376\377\000F\000i\000r\000s\000t\000\040\000s\000e\000c\000t\000i\000o\000n}{}% 1 diff --git a/example/latex/index.pdf b/example/latex/index.pdf new file mode 100644 index 0000000000000000000000000000000000000000..00ab4412307a86e459bf1528751a46cda41d313f GIT binary patch literal 71031 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 C-Zdfs literal 0 HcmV?d00001 diff --git a/example/latex/index.synctex.gz b/example/latex/index.synctex.gz new file mode 100644 index 0000000000000000000000000000000000000000..7b8a1d1e7388c8f21f2f042b94ca1b1b5db253f7 GIT binary patch literal 4732 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 F007MCQ8@qr literal 0 HcmV?d00001 diff --git a/example/latex/index.tex b/example/latex/index.tex new file mode 100644 index 0000000..4a08b20 --- /dev/null +++ b/example/latex/index.tex @@ -0,0 +1,59 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% DO NOT EDIT THIS FILE. IT WILL BE AUTOMATICALLY OVERWRITTEN +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +% TeX-command-extra-options: "-shell-escape" + + +\documentclass[12pt,twoside]{article} +\usepackage[table]{xcolor} % important to avoid options clash. +%\input{book_preamble} +%\input{02465shared_preamble} +%\input{structure.tex} +\usepackage{url} +\usepackage{graphics} +%\usepackage{fancybox} +\usepackage{multicol} +\usepackage{rotate} +%\usepackage{epsf} +\usepackage{rotating} +%\usepackage{color} +\usepackage{booktabs} +\usepackage{hyperref} +\usepackage{pifont} +\usepackage{latexsym} +\usepackage[english]{babel} +\usepackage{epstopdf} +\usepackage{etoolbox} +%\usepackage{epsfig} +\usepackage{amsmath} +\usepackage{amssymb} +\usepackage{multirow,epstopdf} +%\usepackage{cite} +\usepackage{fancyhdr} +\usepackage{booktabs} +%\usepackage[most]{tcolorbox} +\definecolor{LightGray}{HTML}{EEEEEE} +\usepackage{cleveref} +\usepackage{todonotes} +%\pagestyle{fancy} +\usepackage{minted} +\usepackage{cleveref} + + +\begin{document} +\section{First section}\label{sec1}. +Math is hard \cite{bertsekasII,rosolia2018data,herlau} as can also be seen from \cref{eq1} and from \cref{fig1}. +\begin{equation} +2+2 = 4 \label{eq1} +\end{equation} +\begin{figure}\centering + \includegraphics[width=.8\linewidth]{br}\caption{A figure}\label{fig1} +\end{figure} + + +\bibliographystyle{alpha} +\bibliography{library} + +\end{document} \ No newline at end of file diff --git a/example/latex/library.bib b/example/latex/library.bib new file mode 100644 index 0000000..f7471d2 --- /dev/null +++ b/example/latex/library.bib @@ -0,0 +1,289 @@ +@unpublished{herlau, + author = {Tue Herlau}, + title = {Sequential Decision Making}, + year = {2021}, + note = {(See \textbf{02465\_Notes.pdf})} +} +@misc{brown2020combining, + title={Combining Deep Reinforcement Learning and Search for Imperfect-Information Games}, + author={Noam Brown and Anton Bakhtin and Adam Lerer and Qucheng Gong}, + year={2020}, + eprint={2007.13544}, + archivePrefix={arXiv}, + primaryClass={cs.GT} +} +@unpublished{aa203, + author = {James Harrison}, + title = {Optimal and Learning-based Control Combined Course Notes}, + year = {2020}, + note = {(See \textbf{AA203combined.pdf})}, + url = {https://github.com/StanfordASL/AA203-Notes/} +} +@book{bertsekasII, + author = {Bertsekas, Dimitri P.}, + title = {Dynamic Programming and Optimal Control, Vol. II}, + year = {2007}, + isbn = {1886529302}, + publisher = {Athena Scientific}, + edition = {3rd}, + abstract = {A major revision of the second volume of a textbook on the far-ranging algorithmic methododogy of Dynamic Programming, which can be used for optimal control, Markovian decision problems, planning and sequential decision making under uncertainty, and discrete/combinatorial optimization. The second volume is oriented towards mathematical analysis and computation, and treats infinite horizon problems extensively. New features of the 3rd edition are: 1) A major enlargement in size and scope: the length has increased by more than 50%, and most of the old material has been restructured and/or revised. 2) Extensive coverage (more than 100 pages) of recent research on simulation-based approximate dynamic programming (neuro-dynamic programming), which allow the practical application of dynamic programming to large and complex problems. 3) An in-depth development of the average cost problem (more than 100 pages), including a full analysis of multichain problems, and an extensive analysis of infinite-spaces problems. 4) An introduction to infinite state space stochastic shortest path problems. 5) Expansion of the theory and use of contraction mappings in infinite state space problems and in neuro-dynamic programming. 6) A substantive appendix on the mathematical measure-theoretic issues that must be addressed for a rigorous theory of stochastic dynamic programming. Much supplementary material can be found in the book's web page: http://www.athenasc.com/dpbook.html} +} +@article{rosolia2018data, + title={Data-driven predictive control for autonomous systems}, + author={Rosolia, Ugo and Zhang, Xiaojing and Borrelli, Francesco}, + journal={Annual Review of Control, Robotics, and Autonomous Systems}, + volume={1}, + pages={259--286}, + year={2018}, + publisher={Annual Reviews} +} +@article{rosolia2017learning2, + title={Learning model predictive control for iterative tasks: A computationally efficient approach for linear system}, + author={Rosolia, Ugo and Borrelli, Francesco}, + journal={IFAC-PapersOnLine}, + volume={50}, + number={1}, + pages={3142--3147}, + year={2017}, + publisher={Elsevier} +} + +@article{rosolia2017learning, + title={Learning model predictive control for iterative tasks. a data-driven control framework}, + author={Rosolia, Ugo and Borrelli, Francesco}, + journal={IEEE Transactions on Automatic Control}, + volume={63}, + number={7}, + pages={1883--1896}, + year={2017}, + publisher={IEEE} +} + + +@book{caldentey, + author = {René Caldentey}, + publisher = {Stern School of Business, New York University}, + title = {Dynamic Programming with Applications}, + year = {2011}, + note= {(see \textbf{caldentey.pdf})}, + url = {http://people.stern.nyu.edu/rcaldent/courses/DP-ClassNotes-HEC.pdf} +} + +@book{herlau02450, + author = {Herlau, Tue and Mørup, Morten and Schmidt, Mikkel N.}, + publisher = {02450 Lecture notes}, + title = {Introduction to Machine Learning and Data Mining}, + year = {2020}, + note= {(See \textbf{02450Book.pdf})}, +} +@inproceedings{rosolia, + title={Autonomous racing using learning model predictive control}, + author={Rosolia, Ugo and Carvalho, Ashwin and Borrelli, Francesco}, + booktitle={2017 American Control Conference (ACC)}, + pages={5115--5120}, + year={2017}, + organization={IEEE}, + note= {(See \textbf{rosolia2017.pdf})}, +} +@book{sutton, + added-at = {2019-07-13T10:11:53.000+0200}, + author = {Sutton, Richard S. and Barto, Andrew G.}, + edition = {Second}, + keywords = {}, + publisher = {The MIT Press}, + timestamp = {2019-07-13T10:11:53.000+0200}, + title = {Reinforcement Learning: An Introduction}, + url = {http://incompleteideas.net/book/the-book-2nd.html}, + year = {2018 }, + note= {(See \textbf{sutton2018.pdf})}, +} + +@unpublished{cemgil, + author = {Ali Taylan Cemgil}, + title = {A Tutorial Introduction to Monte Carlo methods, Markov Chain Monte Carlo and Particle Filtering}, + year = {2012}, + note = {(See \textbf{cemgil2012.pdf})}, + url = {https://www.cmpe.boun.edu.tr/~cemgil/Courses/cmpe548/cmpe58n-lecture-notes.pdf}, +} + +@article{kelly, + title={An introduction to trajectory optimization: How to do your own direct collocation}, + author={Kelly, Matthew}, + journal={SIAM Review}, + volume={59}, + number={4}, + pages={849--904}, + year={2017}, + publisher={SIAM}, + url = {https://epubs.siam.org/doi/pdf/10.1137/16M1062569}, + note = {(See \textbf{kelly2017.pdf})}, +} + + +@article{bertsekas, + title={Reinforcement learning and optimal control}, + author={Bertsekas, Dimitri P}, + journal={Athena Scientific}, + year={2019}, + url={http://web.mit.edu/dimitrib/www/RL_1-SHORT-INTERNET-POSTED.pdf}, + note= {(See \textbf{bertsekas2019.pdf})}, +} + +@inproceedings{tassa, + title={Synthesis and stabilization of complex behaviors through online trajectory optimization}, + author={Tassa, Yuval and Erez, Tom and Todorov, Emanuel}, + booktitle={2012 IEEE/RSJ International Conference on Intelligent Robots and Systems}, + pages={4906--4913}, + year={2012}, + organization={IEEE}, + url={https://ieeexplore.ieee.org/abstract/document/6386025}, + note= {(See \textbf{tassa2012.pdf})}, +} + + +@book{betts2010practical, + title={Practical methods for optimal control and estimation using nonlinear programming}, + author={Betts, John T}, + volume={19}, + year={2010}, + publisher={Siam} +} + +@book{bertsekas1995dynamic, + title={Dynamic programming and optimal control}, + author={Bertsekas, Dimitri P and Bertsekas, Dimitri P and Bertsekas, Dimitri P and Bertsekas, Dimitri P}, + volume={1}, + number={2}, + year={1995}, + publisher={Athena scientific Belmont, MA} +} + +@article{bellman1957markovian, + title={A Markovian decision process}, + author={Bellman, Richard}, + journal={Journal of mathematics and mechanics}, + pages={679--684}, + year={1957}, + publisher={JSTOR} +} + +@inproceedings{bertsekas2010distributed, + title={Distributed asynchronous policy iteration in dynamic programming}, + author={Bertsekas, Dimitri P and Yu, Huizhen}, + booktitle={2010 48th Annual Allerton Conference on Communication, Control, and Computing (Allerton)}, + pages={1368--1375}, + year={2010}, + organization={IEEE} +} +@inproceedings{Gal2016, + title={Improving {PILCO} with {B}ayesian neural network dynamics models}, + author={Gal, Yarin and McAllister, Rowan and Rasmussen, Carl Edward}, + booktitle={Data-Efficient Machine Learning workshop, International Conference on Machine Learning}, + year={2016}, + note= {(See \textbf{gal2016.pdf})}, +} + +@book{bertsekasvolI, + title={Dynamic Programming and Optimal Control}, + author={Bertsekas, D.P.}, + number={v. 1}, + isbn={9781886529267}, + lccn={lc00091281}, + series={Athena Scientific optimization and computation series}, + year={2005}, + publisher={Athena Scientific} +} + +@book{russell2002artificial, + title={Artificial Intelligence: a modern approach}, + author={Russell, Stuart J. and Norvig, Peter}, + edition={3}, + year={2009}, + publisher={Pearson} +} + + + +% Deep learning related +@inproceedings{hessel2018rainbow, + title={Rainbow: Combining improvements in deep reinforcement learning}, + author={Hessel, Matteo and Modayil, Joseph and Van Hasselt, Hado and Schaul, Tom and Ostrovski, Georg and Dabney, Will and Horgan, Dan and Piot, Bilal and Azar, Mohammad and Silver, David}, + booktitle={Thirty-Second AAAI Conference on Artificial Intelligence}, + year={2018} +} +@article{wang2015dueling, + title={Dueling network architectures for deep reinforcement learning}, + author={Wang, Ziyu and Schaul, Tom and Hessel, Matteo and Van Hasselt, Hado and Lanctot, Marc and De Freitas, Nando}, + journal={arXiv preprint arXiv:1511.06581}, + year={2015} +} + + + +% MC intro chapter: + + +@article{metropolisrrtt53, + added-at = {2011-05-09T23:10:52.000+0200}, + author = {Metropolis, A. W. and Rosenbluth, A. W. and Rosenbluth, M. N. and Teller, A. H. and Teller, E.}, + biburl = {https://www.bibsonomy.org/bibtex/24b3752b2936a9c524e2f0ca70e63d537/josephausterwei}, + interhash = {09015548d3568943e67d50619297521e}, + intrahash = {4b3752b2936a9c524e2f0ca70e63d537}, + journal = {Journal of Chemical Physics}, + keywords = {imported}, + pages = {1087-1092}, + timestamp = {2011-05-10T10:42:42.000+0200}, + title = {Equations of state calculations by fast computing machines}, + volume = 21, + year = 1953 +} +@book{brooksmcbook, + added-at = {2019-11-27T16:57:20.000+0100}, + author = {Brooks, Steve and Gelman, Andrew and Jones, Galin L. and Meng, Xiao-Li}, + biburl = {https://www.bibsonomy.org/bibtex/221d785dfbbec4874e3aa0b1e4df45639/kirk86}, + description = {Handbook of Markov Chain Monte Carlo}, + interhash = {0b127e40d41a970274484b65a7e0744f}, + intrahash = {21d785dfbbec4874e3aa0b1e4df45639}, + keywords = {book mcmc}, + timestamp = {2019-11-27T16:59:18.000+0100}, + title = {Handbook of Markov Chain Monte Carlo + }, + publisher={Chapman \& Hall}, + url = {http://www.mcmchandbook.net/HandbookTableofContents.html}, + year = 2011 +} + +@book{GVK516124188, + added-at = {2009-08-21T12:21:08.000+0200}, + address = {Singapore [u.a.]}, + author = {Rosenthal, {Jeffrey S.}}, + biburl = {https://www.bibsonomy.org/bibtex/21ebbf183aa3295652ca2ac4e29dea8a8/fbw_hannover}, + edition = {Reprinted}, + interhash = {6b3625b54aac7aa32af07e7d91994cd3}, + intrahash = {1ebbf183aa3295652ca2ac4e29dea8a8}, + isbn = {9810243030}, + keywords = {Wahrscheinlichkeitsrechnung Wahrscheinlichkeitstheorie}, + pagetotal = {XIV, 177}, + ppn_gvk = {516124188}, + publisher = {World Scientific}, + timestamp = {2009-08-21T12:21:56.000+0200}, + title = {A first look at rigorous probability theory}, + url = {http://gso.gbv.de/DB=2.1/CMD?ACT=SRCHA&SRT=YOP&IKT=1016&TRM=ppn+516124188&sourceid=fbw_bibsonomy}, + year = 2005 +} + +@article{MET49, + added-at = {2009-03-03T17:19:04.000+0100}, + author = {Metropolis, N. and Ulam, S.}, + biburl = {https://www.bibsonomy.org/bibtex/23a9872b3a3572e446d5cedf42f2dc7d3/bronckobuster}, + interhash = {f23e8d1798ee5feb71cd41eea30d830d}, + intrahash = {3a9872b3a3572e446d5cedf42f2dc7d3}, + journal = {J.~Am.~Stat.~Assoc.}, + keywords = {imported}, + nota = {mm:}, + pages = 335, + timestamp = {2009-03-03T17:19:30.000+0100}, + title = {The Monte Carlo method}, + volume = 44, + year = 1949 +} diff --git a/example/load_references.py b/example/load_references.py new file mode 100644 index 0000000..9718dde --- /dev/null +++ b/example/load_references.py @@ -0,0 +1,32 @@ +import os + + +def reference_example(): + # Load references and insert them. + from snipper.citations import get_bibtex, get_aux #!s=a + bibfile = "latex/library.bib" + auxfile = 'latex/index.aux' + bibtex = get_bibtex(bibfile) + aux = get_aux(auxfile) #!s + + print(list(bibtex.keys())[:5]) + print(aux) + + from snipper.fix_cite import fix_aux, fix_aux_special, fix_bibtex + from snipper.fix_s import save_s + + file = "citations.py" #!s=b + with open(file, 'r') as f: + lines = f.read().splitlines() + lines = fix_aux(lines, aux=aux) + lines = fix_aux_special(lines, aux=aux, command='\\nref', bibref='herlau') + lines = fix_bibtex(lines, bibtex=bibtex) + with open('output/citations.py', 'w') as f: + f.write("\n".join(lines)) #!s=b + # save_s(lines, output_dir="./output", file_path=file) + + with open(__file__, 'r') as f: + save_s(f.read().splitlines(), output_dir="./output", file_path=os.path.basename(__file__) ) + +if __name__ == "__main__": + reference_example() \ No newline at end of file diff --git a/example/output/citations.py b/example/output/citations.py new file mode 100644 index 0000000..a081fab --- /dev/null +++ b/example/output/citations.py @@ -0,0 +1,18 @@ +""" +{{copyright}} + +References: + [Ber07] Dimitri P. Bertsekas. Dynamic Programming and Optimal Control, Vol. II. Athena Scientific, 3rd edition, 2007. ISBN 1886529302. + + [Her21] Tue Herlau. Sequential decision making. (See 02465_Notes.pdf), 2021. + +""" +def myfun(): #!s + """ + To solve this exercise, look at eq. (1) in Section 1. + You can also look at (Ber07) and (Her21) + More specifically, look at (Ber07, Equation 117) and (Her21, Figure 1) + + We can also write a special tag to reduce repetition: (Her21, Figure 1) and (Her21, Section 1). + """ + return 42 #!s \ No newline at end of file diff --git a/example/output/load_references_a.py b/example/output/load_references_a.py new file mode 100644 index 0000000..304c800 --- /dev/null +++ b/example/output/load_references_a.py @@ -0,0 +1,6 @@ +# load_references.py + from snipper.citations import get_bibtex, get_aux + bibfile = "latex/library.bib" + auxfile = 'latex/index.aux' + bibtex = get_bibtex(bibfile) + aux = get_aux(auxfile) \ No newline at end of file diff --git a/example/output/load_references_b.py b/example/output/load_references_b.py new file mode 100644 index 0000000..97642b5 --- /dev/null +++ b/example/output/load_references_b.py @@ -0,0 +1,9 @@ +# load_references.py + file = "citations.py" + with open(file, 'r') as f: + lines = f.read().splitlines() + lines = fix_aux(lines, aux=aux) + lines = fix_aux_special(lines, aux=aux, command='\\nref', bibref='herlau') + lines = fix_bibtex(lines, bibtex=bibtex) + with open('output/citations.py', 'w') as f: + f.write("\n".join(lines)) \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..40f9707 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +wexpect +pexpect diff --git a/setup.py b/setup.py index 72a886d..9dc3229 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,10 @@ # Use this guide: +# Use: pipreqs.exe slider --no-pin --force for requirements.txt # https://packaging.python.org/tutorials/packaging-projects/ -# from unitgrade2.version import __version__ +# py -m build && twine upload dist/* + import setuptools +import pkg_resources # with open("src/unitgrade2/version.py", "r", encoding="utf-8") as fh: # __version__ = fh.read().split(" = ")[1].strip()[1:-1] # long_description = fh.read() @@ -30,19 +33,5 @@ setuptools.setup( package_dir={"": "src"}, packages=setuptools.find_packages(where="src"), python_requires=">=3.8", - install_requires=['jinja2',], + install_requires=pkg_resources.parse_requirements('requirements.txt'), ) - -# setup( -# name='unitgrade', -# version=__version__, -# packages=['unitgrade2'], -# url=, -# license='MIT', -# author='Tue Herlau', -# author_email='tuhe@dtu.dk', -# description=""" -# A student homework/exam evaluation framework build on pythons unittest framework. This package contains all files required to run unitgrade tests as a student. To develop tests, please use unitgrade_private. -# """, -# include_package_data=False, -# ) diff --git a/src/snipper/__init__.py b/src/snipper/__init__.py index b437600..f102a9c 100644 --- a/src/snipper/__init__.py +++ b/src/snipper/__init__.py @@ -1 +1 @@ -__version__ == "0.0.1" +__version__ = "0.0.1" diff --git a/src/snipper/__pycache__/__init__.cpython-38.pyc b/src/snipper/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f52a70bcdae56e64584b49d2330bcdd216e21e6d GIT binary patch literal 167 zcmWIL<>g{vU|_iV*)UO@fq~&Mh=Yt785kHG7#J9eIT#oiQW&BbQW%37G?}Vc4fG83 z4E;12Z*j-Rm!%dJXXfX{$FF24Vq#!`5WmcwtztrpQ;UjYN=h?QV_fo+OLJ56N{VBO r^D+wxQj21Wi<05&`1s7c%#!$cy@JYH95%W6DWy57b|A|?gIoguWe+PF literal 0 HcmV?d00001 diff --git a/src/snipper/__pycache__/citations.cpython-38.pyc b/src/snipper/__pycache__/citations.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9a647f415713b55177e96ceff6c8c791938806ce GIT binary patch literal 5040 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 Q2=lOTsB?I5@pHHX0KU?#RsaA1 literal 0 HcmV?d00001 diff --git a/src/snipper/__pycache__/fix_cite.cpython-38.pyc b/src/snipper/__pycache__/fix_cite.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..25fca9463f8b858cdaef0c4b55b0579b45ebbe74 GIT binary patch literal 2467 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 Xq}qYX>tawD0jeIjSh*y*Sh-jMsni`t literal 0 HcmV?d00001 diff --git a/src/snipper/__pycache__/fix_s.cpython-38.pyc b/src/snipper/__pycache__/fix_s.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a4e3cf8604fe8f78dcdcc41bf88f448690de8363 GIT binary patch literal 3629 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 XgNuWSLz#t_gP8{$q<oBAEG&!w7ETK> literal 0 HcmV?d00001 diff --git a/src/snipper/__pycache__/snipper.cpython-38.pyc b/src/snipper/__pycache__/snipper.cpython-38.pyc deleted file mode 100644 index 71b07e1eb0fc48f94614ddd3c0c39e38faeb6047..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12807 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 TE><o{E(I<QE-nT}F#HPuEi}=U diff --git a/src/snipper/__pycache__/snipper.cpython-39.pyc b/src/snipper/__pycache__/snipper.cpython-39.pyc deleted file mode 100644 index 6d64dde9973aef39e4ed1df9bd73fc265199803d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12500 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 A7ytkO diff --git a/src/snipper/__pycache__/snipper_main.cpython-38.pyc b/src/snipper/__pycache__/snipper_main.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6a50df2c7fb13fcde076d5ddf2d54c8687e166e5 GIT binary patch literal 10073 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 Bo__!U literal 0 HcmV?d00001 diff --git a/src/snipper/citations.py b/src/snipper/citations.py new file mode 100644 index 0000000..798900f --- /dev/null +++ b/src/snipper/citations.py @@ -0,0 +1,242 @@ +import os +import io +from coursebox.core.info_paths import get_paths +from pybtex import plugin +from pybtex.database.input import bibtex + +### Newstyle loading. + +def get_aux(auxfile): + # paths = get_paths() + # auxfile = os.path.join(paths['02450public'], auxfile) + if not os.path.exists(auxfile): + print(auxfile) + from warnings import warn + warn("Could not find file") + return {} + + with open(auxfile, 'r') as f: + items = f.readlines() + entries = {} + for e in items: + e = e.strip() + if e.startswith("\\newlabel") and "@cref" in e: + # print(e) + i0 = e.find("{") + i1 = e.find("@cref}") + key = e[i0+1:i1] + + j0 = e.find("{{[", i0)+3 + j1 = e.find("}", j0) + + val = e[j0:j1] + + label = val[:val.find("]")] + number = val[val.rfind("]")+1:] + + if label == "equation": + nlabel = f"eq. ({number})" + else: + nlabel = label.capitalize() + " " + number + + # coderef = "\\cite[%s]{%s}"%(nlabel, bibtex) if bibtex is not None else None + + entries[key] = {'nicelabel': nlabel, 'rawlabel': label, 'number': number} + return entries + + +def get_bibtex(bibfile): + """ + all references. + """ + if not os.path.exists(bibfile): + return None + + pybtex_style = plugin.find_plugin('pybtex.style.formatting', 'alpha')() + pybtex_html_backend = plugin.find_plugin('pybtex.backends', 'html')() + pybtex_plain_backend = plugin.find_plugin('pybtex.backends', 'plaintext')() + pybtex_parser = bibtex.Parser() + + with open(bibfile, 'r', encoding='utf8') as f: + data = pybtex_parser.parse_stream(f) + + data_formatted = pybtex_style.format_entries(data.entries.values()) + refs = {} + + # if 'auxfile' in gi: + # all_references = parse_aux(gi['auxfile'], bibtex=gi['bibtex']) + # else: + # all_references = {} + + for entry in data_formatted: + output = io.StringIO() + output_plain = io.StringIO() + pybtex_plain_backend.output = output_plain.write + pybtex_html_backend.output = output.write + pybtex_html_backend.write_entry(entry.key, entry.label, entry.text.render(pybtex_html_backend)) + + pybtex_plain_backend.write_entry(entry.key, entry.label, entry.text.render(pybtex_plain_backend)) + + html = output.getvalue() + plain = output_plain.getvalue() + + entry.text.parts[-2].__str__() + url = "" + for i,p in enumerate(entry.text.parts): + if "\\url" in p.__str__(): + url = entry.text.parts[i+1] + break + url = url.__str__() + i1 = html.find("\\textbf") + i2 = html.find("</span>", i1) + dht = html[i1:i2] + dht = dht[dht.find(">")+1:] + html = html[:i1] + " <b>"+dht+"</b> " + html[i2+7:] + + plain = plain.replace("\\textbf ", "") + iu = plain.find("URL") + if iu > 0: + plain = plain[:iu] + + refs[entry.key] = {'html': html, + 'plain': plain, + 'label': entry.label, + 'filename': url, + } + + # newref = {} + # ls = lambda x: x if isinstance(x, list) else [x] + # if 'tex_command' in gi: + # for cmd, aux, display in zip( ls(gi['tex_command']), ls(gi['tex_aux'] ), ls( gi['tex_display'] ) ): + # ax = parse_aux(aux, bibtex=gi['bibtex']) + # for k in ax: + # ax[k]['pyref'] = display%(ax[k]['nicelabel'],) + # newref[cmd] = ax + + return refs#, newref + + + +def find_tex_cite(s, start=0, key="\\cite"): + txt = None + i = s.find(key, start) + if i < 0: + return (i,None), None, None + j = s.find("}", i) + cite = s[i:j + 1] + + if cite.find("[") > 0: + txt = cite[cite.find("[") + 1:cite.find("]")] + + reference = cite[cite.find("{") + 1:cite.find("}")] + return (i, j), reference, txt + +### Oldstyle loading +def get_references(bibfile, gi): + """ + all references. + """ + if not os.path.exists(bibfile): + return None + + pybtex_style = plugin.find_plugin('pybtex.style.formatting', 'alpha')() + pybtex_html_backend = plugin.find_plugin('pybtex.backends', 'html')() + pybtex_plain_backend = plugin.find_plugin('pybtex.backends', 'plaintext')() + pybtex_parser = bibtex.Parser() + + with open(bibfile, 'r', encoding='utf8') as f: + data = pybtex_parser.parse_stream(f) + + data_formatted = pybtex_style.format_entries(data.entries.values()) + refs = {} + + if 'auxfile' in gi: + all_references = parse_aux(gi['auxfile'], bibtex=gi['bibtex']) + else: + all_references = {} + + for entry in data_formatted: + output = io.StringIO() + output_plain = io.StringIO() + pybtex_plain_backend.output = output_plain.write + pybtex_html_backend.output = output.write + pybtex_html_backend.write_entry(entry.key, entry.label, entry.text.render(pybtex_html_backend)) + + pybtex_plain_backend.write_entry(entry.key, entry.label, entry.text.render(pybtex_plain_backend)) + + html = output.getvalue() + plain = output_plain.getvalue() + + entry.text.parts[-2].__str__() + url = "" + for i,p in enumerate(entry.text.parts): + if "\\url" in p.__str__(): + url = entry.text.parts[i+1] + break + url = url.__str__() + i1 = html.find("\\textbf") + i2 = html.find("</span>", i1) + dht = html[i1:i2] + dht = dht[dht.find(">")+1:] + html = html[:i1] + " <b>"+dht+"</b> " + html[i2+7:] + + plain = plain.replace("\\textbf ", "") + iu = plain.find("URL") + if iu > 0: + plain = plain[:iu] + + refs[entry.key] = {'html': html, + 'plain': plain, + 'label': entry.label, + 'filename': url, + 'references': all_references} + + newref = {} + ls = lambda x: x if isinstance(x, list) else [x] + if 'tex_command' in gi: + for cmd, aux, display in zip( ls(gi['tex_command']), ls(gi['tex_aux'] ), ls( gi['tex_display'] ) ): + ax = parse_aux(aux, bibtex=gi['bibtex']) + for k in ax: + ax[k]['pyref'] = display%(ax[k]['nicelabel'],) + newref[cmd] = ax + + return refs, newref + + +def parse_aux(auxfile, bibtex=None): + paths = get_paths() + auxfile = os.path.join(paths['02450public'], auxfile) + if not os.path.exists(auxfile): + print(auxfile) + from warnings import warn + warn("Could not find file") + return {} + + with open(auxfile, 'r') as f: + items = f.readlines() + entries = {} + for e in items: + e = e.strip() + if e.startswith("\\newlabel") and "@cref" in e: + # print(e) + i0 = e.find("{") + i1 = e.find("@cref}") + key = e[i0+1:i1] + + j0 = e.find("{{[", i0)+3 + j1 = e.find("}", j0) + + val = e[j0:j1] + + label = val[:val.find("]")] + number = val[val.rfind("]")+1:] + + if label == "equation": + nlabel = f"eq. ({number})" + else: + nlabel = label.capitalize() + " " + number + + coderef = "\\cite[%s]{%s}"%(nlabel, bibtex) if bibtex is not None else None + entries[key] = {'pyref': coderef, 'nicelabel': nlabel, 'rawlabel': label, 'number': number} + return entries + diff --git a/src/snipper/fix_cite.py b/src/snipper/fix_cite.py new file mode 100644 index 0000000..9c6aadc --- /dev/null +++ b/src/snipper/fix_cite.py @@ -0,0 +1,73 @@ +from snipper.citations import find_tex_cite +from snipper.snipper_main import COMMENT + +def fix_references(lines, info, strict=True): + for cmd in info['new_references']: + lines = fix_single_reference(lines, cmd, info['new_references'][cmd], strict=strict) + return lines + +def fix_single_reference(lines, cmd, aux, strict=True): + references = aux + s = "\n".join(lines) + i = 0 + while True: + (i, j), reference, txt = find_tex_cite(s, start=i, key=cmd) + if i < 0: + break + if reference not in references: + er = "cref label not found for label: " + reference + if strict: + raise IndexError(er) + else: + print(er) + continue + r = references[reference] + rtxt = r['nicelabel'] + s = s[:i] + rtxt + s[j + 1:] + i = i + len(rtxt) + print(cmd, rtxt) + + lines = s.splitlines(keepends=False) + return lines + + +def fix_aux_special(lines, aux, command='\\nref', bibref='herlau'): + daux = {name: {'nicelabel': f'\\cite[' + v["nicelabel"] + ']{' + bibref + "}"} for name, v in aux.items()} + l2 = fix_single_reference(lines, aux=daux, cmd=command, strict=True) + return l2 + +def fix_aux(lines, aux, strict=True): + l2 = fix_single_reference(lines, aux=aux, cmd="\\ref", strict=True) + print("\n".join(l2)) + return l2 + +def fix_bibtex(lines, bibtex): + # lines = fix_references(lines, info, strict=strict) + s = "\n".join(lines) + i = 0 + all_refs = [] + while True: + (i, j), reference, txt = find_tex_cite(s, start=i, key="\\cite") + if i < 0: + break + if reference not in bibtex: + raise IndexError("no such reference: " + reference) + ref = bibtex[reference] + label = ref['label'] + rtxt = f"({label}" + (", "+txt if txt is not None else "") + ")" + r = ref['plain'] + if r not in all_refs: + all_refs.append(r) + s = s[:i] + rtxt + s[j+1:] + i = i + len(rtxt) + + cpr = "{{copyright}}" + if not s.startswith(COMMENT): + s = f"{COMMENT}\n{cpr}\n{COMMENT}\n" + s + if len(all_refs) > 0: + i = s.find(COMMENT, s.find(COMMENT)+1) + all_refs = [" " + r for r in all_refs] + s = s[:i] + "\nReferences:\n" + "\n".join(all_refs) + "\n" + s[i:] + + # s = s.replace(cpr, info['code_copyright']) + return s.splitlines() \ No newline at end of file diff --git a/src/snipper/fix_s.py b/src/snipper/fix_s.py new file mode 100644 index 0000000..0eed3c8 --- /dev/null +++ b/src/snipper/fix_s.py @@ -0,0 +1,151 @@ +import functools +from collections import defaultdict +from snipper.snipper_main import full_strip, block_process + +def f2(lines, tag, i=0, j=0): + for k in range(i, len(lines)): + index = lines[k].find(tag, j if k == i else 0) + if index >= 0: + return k, index + return None, None + +def block_iterate(lines, tag): + contents = {'joined': lines} + while True: + contents = block_split(contents['joined'], tag) + if contents is None: + break + + yield contents + +def block_split(lines, tag): + stag = tag[:2] # Start of any next tag. + + def join(contents): + return contents['first'] + [contents['block'][0] + contents['post1']] + contents['block'][1:-1] \ + + [contents['block'][-1] + contents['post2']] + contents['last'] + contents = {} + i, j = f2(lines, tag) + + def get_tag_args(line): + k = line.find(" ") + tag_args = (line[:k + 1] if k >= 0 else line)[len(tag):] + if len(tag_args) == 0: + return {'': ''} # No name. + tag_args = dict([t.split("=") for t in tag_args.split(";")]) + return tag_args + + if i is None: + return None + else: + start_tag_args = get_tag_args(lines[i][j:]) + START_TAG = f"{tag}={start_tag_args['']}" if '' in start_tag_args else tag + END_TAG = START_TAG + i2, j2 = f2(lines, END_TAG, i=i, j=j+1) + if i2 == None: + END_TAG = tag + i2, j2 = f2(lines, END_TAG, i=i, j=j+1) + + if i == i2: + # Splitting a single line. To reduce confusion, this will be treated slightly differently: + l2 = lines[:i] + [lines[i][:j2], lines[i][j2:]] + lines[i2+1:] + c2 = block_split(l2, tag=tag) + c2['block'].pop() + c2['joined'] = join(c2) + return c2 + else: + contents['first'] = lines[:i] + contents['last'] = lines[i2+1:] + + def argpost(line, j): + nx_tag = line.find(stag, j+1) + arg1 = line[j+len(tag):nx_tag] + if nx_tag >= 0: + post = line[nx_tag:] + else: + post = '' + return arg1, post + + contents['arg1'], contents['post1'] = argpost(lines[i], j) + contents['arg2'], contents['post2'] = argpost(lines[i2], j2) + blk = [lines[i][:j]] + lines[i+1:i2] + [lines[i2][:j2]] + contents['block'] = blk + contents['joined'] = join(contents) + contents['start_tag_args'] = start_tag_args + contents['name'] = start_tag_args[''] + return contents + + +def get_s(lines): + """ Return snips from 'lines' """ + blocks = defaultdict(list) + for c in block_iterate(lines, "#!s"): + blocks[c['name']].append(c) + output = {} + for name, co in blocks.items(): + output[name] = [l for c in co for l in c['block']] + return output + +import os + +def save_s(lines, output_dir, file_path): # save file snips to disk + content = get_s(lines) + if not os.path.isdir(output_dir): + os.mkdir(output_dir) + for name, ll in content.items(): + if file_path is not None: + ll = [f"# {file_path}"] + ll + out = "\n".join(ll) + with open(output_dir + "/" + os.path.basename(file_path)[:-3] + ("_" + name if len(name) > 0 else name) + ".py", 'w') as f: + f.write(out) + + # out = "\n".join([f"# {include_path_base}"] + ["\n".join(v[1]) for v in c if v[0] == outf]) + # with open(outf, 'w') as f: + # f.write(out) + + # def block_fun(lines, start_extra, end_extra, art, output, **kwargs): + # outf = output + ("_" + art if art is not None and len(art) > 0 else "") + ".py" + # lines = full_strip(lines) + # return lines, [outf, lines] + # try: + # a,b,c,_ = block_process(lines, tag="#!s", block_fun=functools.partial(block_fun, output=output)) + # if len(c)>0: + # kvs= { v[0] for v in c} + # for outf in kvs: + # out = "\n".join([f"# {include_path_base}"] + ["\n".join(v[1]) for v in c if v[0] == outf] ) + # with open(outf, 'w') as f: + # f.write(out) + # + # except Exception as e: + # print("lines are") + # print("\n".join(lines)) + # print("Bad thing in #!s command in file", file) + # raise e + # return lines + +s1 = """ +L1 +L2 #!s=a +L3 #!s=b +L4 +L5 +L6 +L7 #!s=a +L8 +L9 #!s=b +went +""" + +if __name__ == "__main__": + # for c in block_iterate(s1.splitlines(), tag="#!s"): + # print(c['block']) + output = get_s(s1.splitlines()) + for k, v in output.items(): + print("name:", k) + print("\n".join(v)) + print("="*10) + # contents = block_split(s1.splitlines(), tag="#!s") + # contents = block_split(contents['joined'], tag="#!s") + # lines2 = contents['first'] + + a = 234 + pass \ No newline at end of file diff --git a/src/snipper/snip_dir.py b/src/snipper/snip_dir.py index ca98568..0a68a9d 100644 --- a/src/snipper/snip_dir.py +++ b/src/snipper/snip_dir.py @@ -1,10 +1,8 @@ import os, shutil -# from thtools.coursebox.core.info_paths import get_paths -# from thtools.coursebox.core.info import class_information -from snipper.snipper import censor_file -# from thtools.coursebox.material.homepage_lectures_exercises import fix_shared +from snipper.snipper_main import censor_file from pathlib import Path import time +import fnmatch def snip_dir(source_dir, dest_dir, exclude=None, clean_destination_dir=True): @@ -24,9 +22,7 @@ def snip_dir(source_dir, dest_dir, exclude=None, clean_destination_dir=True): out = dest_dir hw = {'base': source_dir, 'exclusion': exclude} - # def fix_hw(info, hw, out, run_files=False, cut_files=False, students_irlc_tools=None, **kwargs): - # CE = info['CE'] - # paths = get_paths() + print(f"[snipper] Synchronizing directories: {hw['base']} -> {out}") if os.path.exists(out): shutil.rmtree(out) @@ -38,7 +34,6 @@ def snip_dir(source_dir, dest_dir, exclude=None, clean_destination_dir=True): ls = list(Path(out).glob('**/*.*')) acceptable = [] - import fnmatch for l in ls: split = os.path.normpath(os.path.relpath(l, out)) m = [fnmatch.fnmatch(split, ex) for ex in exclude] @@ -85,15 +80,4 @@ def snip_dir(source_dir, dest_dir, exclude=None, clean_destination_dir=True): if os.path.isdir(rm_file + "\\"): shutil.rmtree(rm_file) - # for f in hw['exclusion']: - # rm_file = os.path.join(out, f) - # if any([df_ in rm_file for df_ in hw['inclusion']]): - # continue - # - # rm_file = os.path.abspath(rm_file) - # if os.path.isfile(rm_file): - # os.remove(rm_file) - # else: - # if os.path.isdir(rm_file + "\\"): - # shutil.rmtree(rm_file) return n diff --git a/src/snipper/snipper.py b/src/snipper/snipper_main.py similarity index 80% rename from src/snipper/snipper.py rename to src/snipper/snipper_main.py index 386a360..1886033 100644 --- a/src/snipper/snipper.py +++ b/src/snipper/snipper_main.py @@ -1,9 +1,8 @@ -from thtools.coursebox.core.info import find_tex_cite import os import functools -from thtools import execute_command import textwrap import re +# from snipper.fix_s import save_s COMMENT = '"""' def indent(l): @@ -98,7 +97,6 @@ def block_process(lines, tag, block_fun): def rem_nonprintable_ctrl_chars(txt): """Remove non_printable ascii control characters """ - #Removes the ascii escape chars try: txt = re.sub(r'[^\x20-\x7E|\x09-\x0A]','', txt) # remove non-ascii characters @@ -118,8 +116,8 @@ def run_i(lines, file, output): lines = textwrap.dedent(s).strip().splitlines() if extra['python'] is None: - import thtools - if thtools.is_win(): + import os + if os.name == 'nt': import wexpect as we else: import pexpect as we @@ -204,29 +202,6 @@ def run_i(lines, file, output): raise e return lines -def save_s(lines, file, output, include_path_base=None): # save file snips to disk - def block_fun(lines, start_extra, end_extra, art, output, **kwargs): - outf = output + ("_" + art if art is not None and len(art) > 0 else "") + ".py" - lines = full_strip(lines) - return lines, [outf, lines] - try: - a,b,c,_ = block_process(lines, tag="#!s", block_fun=functools.partial(block_fun, output=output)) - - if len(c)>0: - kvs= { v[0] for v in c} - for outf in kvs: - - out = "\n".join([f"# {include_path_base}"] + ["\n".join(v[1]) for v in c if v[0] == outf] ) - - with open(outf, 'w') as f: - f.write(out) - - except Exception as e: - print("lines are") - print("\n".join(lines)) - print("Bad thing in #!s command in file", file) - raise e - return lines def run_o(lines, file, output): def block_fun(lines, start_extra, end_extra, art, output, **kwargs): @@ -317,76 +292,12 @@ def fix_b2(lines, keep=False): else: l2 = ([id+start_extra] if len(start_extra) > 0 else []) + [id + f"# TODO: {cc} lines missing.", id+f'raise NotImplementedError("{ee}")'] - - # if "\n".join(l2).find("l=l")>0: - # a = 2342342 stats['n'] += cc return l2, cc lines2, _, _, cutout = block_process(lines, tag="#!b", block_fun=functools.partial(block_fun, stats=stats)) return lines2, stats['n'], cutout -def fix_references(lines, info, strict=True): - for cmd in info['new_references']: - lines = fix_single_reference(lines, cmd, info['new_references'][cmd], strict=strict) - return lines - -def fix_single_reference(lines, cmd, aux, strict=True): - references = aux - s = "\n".join(lines) - i = 0 - while True: - (i, j), reference, txt = find_tex_cite(s, start=i, key=cmd) - if i < 0: - break - if reference not in references: - er = "cref label not found for label: " + reference - if strict: - raise IndexError(er) - else: - print(er) - continue - r = references[reference] - rtxt = r['pyref'] - s = s[:i] + rtxt + s[j + 1:] - i = i + len(rtxt) - print(cmd, rtxt) - - lines = s.splitlines(keepends=False) - return lines - - -def fix_cite(lines, info, strict=True): - lines = fix_references(lines, info, strict=strict) - - s = "\n".join(lines) - i = 0 - all_refs = [] - while True: - (i, j), reference, txt = find_tex_cite(s, start=i, key="\\cite") - if i < 0: - break - if reference not in info['references']: - raise IndexError("no such reference: " + reference) - ref = info['references'][reference] - label = ref['label'] - rtxt = f"({label}" + (", "+txt if txt is not None else "") + ")" - r = ref['plain'] - if r not in all_refs: - all_refs.append(r) - s = s[:i] + rtxt + s[j+1:] - i = i + len(rtxt) - - cpr = "{{copyright}}" - if not s.startswith(COMMENT): - s = f"{COMMENT}\n{cpr}\n{COMMENT}\n" + s - if len(all_refs) > 0: - i = s.find(COMMENT, s.find(COMMENT)+1) - all_refs = [" " + r for r in all_refs] - s = s[:i] + "\nReferences:\n" + "\n".join(all_refs) + "\n" + s[i:] - - s = s.replace(cpr, info['code_copyright']) - return s def full_strip(lines, tags=None): if tags is None: @@ -397,13 +308,12 @@ def full_strip(lines, tags=None): def censor_code(lines, keep=True): - # lines = code.split("\n") dbug = True lines = fix_f(lines, dbug) lines, nB, cut = fix_b2(lines, keep=True) return lines - # print("safs") + def censor_file(file, info, paths, run_files=True, run_out_dirs=None, cut_files=True, solution_list=None, @@ -479,4 +389,5 @@ def censor_file(file, info, paths, run_files=True, run_out_dirs=None, cut_files= with open(file, 'w', encoding='utf-8') as f: f.write(s2) return nB -# lines: 294, 399, 420, 270 \ No newline at end of file +# lines: 294, 399, 420, 270 + -- GitLab