pyeasyphd 0.4.11__py3-none-any.whl → 0.4.13__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pyeasyphd might be problematic. Click here for more details.

@@ -2,7 +2,7 @@ import copy
2
2
  import os
3
3
  import re
4
4
  import shutil
5
- from typing import Any, Dict, List, Tuple
5
+ from typing import Any
6
6
 
7
7
  from pyadvtools import (
8
8
  IterateCombineExtendDict,
@@ -39,8 +39,8 @@ class SearchResultsCore(BasicInput):
39
39
  path_separate (str): Path to separate directory.
40
40
  j_conf_abbr (str): Abbreviation of journal or conference.
41
41
  is_standard_bib_file_name (bool): Whether the bib file name follows standard format.
42
- keywords_type_list (List[str]): List of keyword types to search.
43
- keywords_dict (dict): Dictionary of keywords for searching.
42
+ keywords_type_list (list[str]): list of keyword types to search.
43
+ keywords_dict (dict): dictionary of keywords for searching.
44
44
  delete_redundant_files (bool): Whether to delete redundant files after processing.
45
45
  generate_basic_md (bool): Whether to generate basic markdown files.
46
46
  generate_beauty_md (bool): Whether to generate beautiful markdown files.
@@ -52,7 +52,7 @@ class SearchResultsCore(BasicInput):
52
52
  """
53
53
 
54
54
  def __init__(
55
- self, path_storage: str, path_output: str, path_separate: str, j_conf_abbr: str, options: Dict[str, Any]
55
+ self, path_storage: str, path_output: str, path_separate: str, j_conf_abbr: str, options: dict[str, Any]
56
56
  ) -> None:
57
57
  """Initialize SearchResultsCore with paths and configuration.
58
58
 
@@ -61,7 +61,7 @@ class SearchResultsCore(BasicInput):
61
61
  path_output (str): Path to output directory for generated files.
62
62
  path_separate (str): Path to separate directory for individual results.
63
63
  j_conf_abbr (str): Abbreviation of journal or conference.
64
- options (Dict[str, Any]): Configuration options.
64
+ options (dict[str, Any]): Configuration options.
65
65
  """
66
66
  super().__init__(options)
67
67
  self.path_storage: str = standard_path(path_storage)
@@ -106,36 +106,41 @@ class SearchResultsCore(BasicInput):
106
106
  # for bib
107
107
  self._python_bib = PythonRunBib(options)
108
108
 
109
- def optimize(self, search_year_list: List[str] = []) -> Dict[str, Dict[str, Dict[str, Dict[str, int]]]]:
109
+ def optimize(self, search_year_list: list[str] = []) -> dict[str, dict[str, dict[str, dict[str, int]]]]:
110
110
  """Optimize search results for given years.
111
111
 
112
112
  Args:
113
- search_year_list (List[str], optional): List of years to search. Defaults to [].
113
+ search_year_list (list[str], optional): list of years to search. Defaults to [].
114
114
 
115
115
  Returns:
116
- Dict[str, Dict[str, Dict[str, Dict[str, int]]]]: Nested dictionary containing search results.
116
+ dict[str, dict[str, dict[str, dict[str, int]]]]: Nested dictionary containing search results.
117
117
  """
118
- search_year_list = list(set([str(i) for i in search_year_list]))
118
+ search_year_list = list({str(i) for i in search_year_list})
119
119
 
120
120
  data_list = self._obtain_full_files_data(self.path_storage, "bib", search_year_list)
121
121
 
122
122
  entry_type_keyword_type_keyword_field_number_dict = self.optimize_core(data_list, search_year_list)
123
123
  return entry_type_keyword_type_keyword_field_number_dict
124
124
 
125
- def _obtain_full_files_data(self, path_storage: str, extension: str, search_year_list: List[str] = []) -> List[str]:
125
+ def _obtain_full_files_data(
126
+ self, path_storage: str, extension: str, search_year_list: list[str] | None = None
127
+ ) -> list[str]:
126
128
  """Obtain data from all files with specified extension in storage path.
127
129
 
128
130
  Args:
129
131
  path_storage (str): Path to storage directory.
130
132
  extension (str): File extension to search for.
131
- search_year_list (List[str], optional): List of years to filter by. Defaults to [].
133
+ search_year_list (list[str], optional): list of years to filter by. Defaults to [].
132
134
 
133
135
  Returns:
134
- List[str]: Combined content from all matching files.
136
+ list[str]: Combined content from all matching files.
135
137
  """
138
+ if search_year_list is None:
139
+ search_year_list = []
140
+
136
141
  regex = None
137
142
  if self.is_standard_bib_file_name and search_year_list:
138
- regex = re.compile(f'({"|".join(search_year_list)})')
143
+ regex = re.compile(f"({'|'.join(search_year_list)})")
139
144
 
140
145
  file_list = []
141
146
  for root, _, files in os.walk(path_storage, topdown=True):
@@ -148,24 +153,23 @@ class SearchResultsCore(BasicInput):
148
153
 
149
154
  return combine_content_in_list([read_list(f, "r") for f in sort_int_str(file_list)], None)
150
155
 
151
- def optimize_core(self, data_list: List[str], search_year_list) -> Dict[str, Dict[str, Dict[str, Dict[str, int]]]]:
156
+ def optimize_core(self, data_list: list[str], search_year_list) -> dict[str, dict[str, dict[str, dict[str, int]]]]:
152
157
  """Core optimization logic for processing bibliography data.
153
158
 
154
159
  Args:
155
- data_list (List[str]): List of bibliography data strings.
156
- search_year_list: List of years to search.
160
+ data_list (list[str]): list of bibliography data strings.
161
+ search_year_list: list of years to search.
157
162
 
158
163
  Returns:
159
- Dict[str, Dict[str, Dict[str, Dict[str, int]]]]: Nested dictionary containing search results.
164
+ dict[str, dict[str, dict[str, dict[str, int]]]]: Nested dictionary containing search results.
160
165
  """
161
166
  print("\n" + "*" * 9 + f" Search in {self.j_conf_abbr} " + "*" * 9)
162
167
 
163
168
  entry_type_year_volume_number_month_entry_dict = self._python_bib.parse_to_nested_entries_dict(data_list)
164
169
 
165
170
  # generate standard bib and output
166
- entry_type_keyword_type_keyword_field_number_dict: Dict[str, Dict[str, Dict[str, Dict[str, int]]]] = {}
171
+ entry_type_keyword_type_keyword_field_number_dict: dict[str, dict[str, dict[str, dict[str, int]]]] = {}
167
172
  for entry_type in entry_type_year_volume_number_month_entry_dict:
168
-
169
173
  # obtain search years
170
174
  year_list = list(entry_type_year_volume_number_month_entry_dict[entry_type].keys())
171
175
  if search_year_list:
@@ -222,7 +226,7 @@ class SearchResultsCore(BasicInput):
222
226
  p_combine (str): Path to combine directory.
223
227
 
224
228
  Returns:
225
- dict: Dictionary containing keyword field numbers.
229
+ dict: dictionary containing keyword field numbers.
226
230
  """
227
231
  no_search_library = library
228
232
 
@@ -251,7 +255,7 @@ class SearchResultsCore(BasicInput):
251
255
  p_combine (str): Path to combine directory.
252
256
 
253
257
  Returns:
254
- dict: Dictionary containing keyword field numbers.
258
+ dict: dictionary containing keyword field numbers.
255
259
  """
256
260
  no_search_library = library
257
261
 
@@ -262,18 +266,18 @@ class SearchResultsCore(BasicInput):
262
266
 
263
267
  def core_optimize(
264
268
  self,
265
- search_field_list: List[str],
269
+ search_field_list: list[str],
266
270
  keywords_type,
267
271
  library: Library,
268
272
  output_prefix: str,
269
273
  p_origin: str,
270
274
  p_separate: str,
271
275
  p_combine: str,
272
- ) -> Tuple[Dict[str, Dict[str, int]], Library]:
276
+ ) -> tuple[dict[str, dict[str, int]], Library]:
273
277
  """Core optimization method for processing search results.
274
278
 
275
279
  Args:
276
- search_field_list (List[str]): List of fields to search.
280
+ search_field_list (list[str]): list of fields to search.
277
281
  keywords_type: Type of keywords to search.
278
282
  library (Library): Bibliography library to search.
279
283
  output_prefix (str): Prefix for output files.
@@ -282,15 +286,14 @@ class SearchResultsCore(BasicInput):
282
286
  p_combine (str): Path to combine directory.
283
287
 
284
288
  Returns:
285
- Tuple[Dict[str, Dict[str, int]], Library]: Tuple containing keyword field numbers and remaining library.
289
+ tuple[dict[str, dict[str, int]], Library]: Tuple containing keyword field numbers and remaining library.
286
290
  """
287
- error_pandoc_md_md: List[str] = []
288
- save_field_data_dict: Dict[str, List[List[str]]] = {}
289
- keyword_field_number_dict: Dict[str, Dict[str, int]] = {}
291
+ error_pandoc_md_md: list[str] = []
292
+ save_field_data_dict: dict[str, list[list[str]]] = {}
293
+ keyword_field_number_dict: dict[str, dict[str, int]] = {}
290
294
 
291
295
  no_search_library = library
292
296
  for keywords_list in self.keywords_dict[keywords_type]:
293
-
294
297
  print(f"{output_prefix}-{keywords_type}-search-{keywords_list}")
295
298
  keywords_list_list, combine_keyword = switch_keywords_list(keywords_list)
296
299
 
@@ -2,7 +2,7 @@ import copy
2
2
  import os
3
3
  import re
4
4
  from pathlib import Path
5
- from typing import Any, Dict, List
5
+ from typing import Any
6
6
 
7
7
  from pyadvtools import generate_nested_dict, read_list, standard_path, write_list
8
8
  from pybibtexer.tools.experiments_base import generate_standard_publisher_abbr_options_dict
@@ -14,7 +14,7 @@ from .search_core import SearchResultsCore
14
14
  from .utils import extract_information, temp_html_style
15
15
 
16
16
 
17
- class Searchkeywords(object):
17
+ class Searchkeywords:
18
18
  """Search keywords in bibliography data.
19
19
 
20
20
  Args:
@@ -26,16 +26,16 @@ class Searchkeywords(object):
26
26
  path_storage (str): Path to storage directory.
27
27
  path_output (str): Path to output directory.
28
28
  options (dict): Configuration options.
29
- search_year_list (List[str]): List of years to search. Defaults to [].
29
+ search_year_list (list[str]): list of years to search. Defaults to [].
30
30
  """
31
31
 
32
- def __init__(self, path_storage: str, path_output: str, options: Dict[str, Any]) -> None:
32
+ def __init__(self, path_storage: str, path_output: str, options: dict[str, Any]) -> None:
33
33
  """Initialize Searchkeywords with storage and output paths.
34
34
 
35
35
  Args:
36
36
  path_storage (str): Path to storage directory.
37
37
  path_output (str): Path to output directory.
38
- options (Dict[str, Any]): Configuration options.
38
+ options (dict[str, Any]): Configuration options.
39
39
  """
40
40
  self.path_storage = standard_path(path_storage)
41
41
  self.path_output = standard_path(path_output)
@@ -97,7 +97,7 @@ class Searchkeywords(object):
97
97
 
98
98
  def _extract_files(
99
99
  self, publisher_abbr_dict: dict, ext: str = "html"
100
- ) -> Dict[str, Dict[str, Dict[str, Dict[str, List[str]]]]]:
100
+ ) -> dict[str, dict[str, dict[str, dict[str, list[str]]]]]:
101
101
  data_dict = {}
102
102
  for publisher in publisher_abbr_dict:
103
103
  for abbr in publisher_abbr_dict[publisher]:
@@ -1,6 +1,5 @@
1
1
  import copy
2
2
  import os
3
- from typing import Dict, List, Tuple
4
3
 
5
4
  from pyadvtools import combine_content_in_list, read_list, write_list
6
5
  from pybibtexer.bib.bibtexparser import Library
@@ -42,7 +41,7 @@ class WriteInitialResult(BasicInput):
42
41
  library_for_abbr: Library,
43
42
  library_for_zotero: Library,
44
43
  library_for_save: Library,
45
- ) -> Tuple[List[List[str]], List[str]]:
44
+ ) -> tuple[list[list[str]], list[str]]:
46
45
  """Main method to write initial results.
47
46
 
48
47
  Args:
@@ -56,7 +55,7 @@ class WriteInitialResult(BasicInput):
56
55
  library_for_save (Library): Save bibliography library.
57
56
 
58
57
  Returns:
59
- Tuple[List[List[str]], List[str]]: Tuple containing data and error messages.
58
+ tuple[list[list[str]], list[str]]: Tuple containing data and error messages.
60
59
  """
61
60
  error_pandoc_md_md = []
62
61
 
@@ -93,9 +92,9 @@ class WriteInitialResult(BasicInput):
93
92
 
94
93
  # mian part
95
94
  # generate some md output data
96
- data_basic_md: List[str] = []
97
- data_beauty_md: List[str] = []
98
- data_complex_md: List[str] = []
95
+ data_basic_md: list[str] = []
96
+ data_beauty_md: list[str] = []
97
+ data_complex_md: list[str] = []
99
98
  if data_list_pandoc_md:
100
99
  data_basic_md, data_beauty_md, data_complex_md = self.generate_basic_beauty_complex_md(
101
100
  header, cite_keys, data_list_pandoc_md, library_for_zotero
@@ -105,28 +104,28 @@ class WriteInitialResult(BasicInput):
105
104
 
106
105
  # write basic beauty complex md files
107
106
  basic_beauty_complex = ["-basic", "-beauty", "-complex"]
108
- for d, name in zip([data_basic_md, data_beauty_md, data_complex_md], basic_beauty_complex):
109
- write_list(d, "{}{}.md".format(file_prefix, name), "w", path_write)
107
+ for d, name in zip([data_basic_md, data_beauty_md, data_complex_md], basic_beauty_complex, strict=True):
108
+ write_list(d, f"{file_prefix}{name}.md", "w", path_write)
110
109
 
111
110
  # save all (tex, md, bib) files
112
- x = [f"{i}.{j}" for i, j in zip(mid_list, post_list)]
111
+ x = [f"{i}.{j}" for i, j in zip(mid_list, post_list, strict=True)]
113
112
  x.extend([f"{i}.md" for i in basic_beauty_complex])
114
113
  data_temp = [[os.path.join(path_write, file_prefix + i)] for i in x]
115
114
  return data_temp, error_pandoc_md_md
116
115
 
117
116
  def generate_basic_beauty_complex_md(
118
- self, header: str, cite_key_list: List[str], data_list_pandoc_md: List[str], library_for_zotero: Library
119
- ) -> Tuple[List[str], List[str], List[str]]:
117
+ self, header: str, cite_key_list: list[str], data_list_pandoc_md: list[str], library_for_zotero: Library
118
+ ) -> tuple[list[str], list[str], list[str]]:
120
119
  """Generate basic, beauty, and complex markdown content.
121
120
 
122
121
  Args:
123
122
  header (str): Header string for the content.
124
- cite_key_list (List[str]): List of citation keys.
125
- data_list_pandoc_md (List[str]): List of pandoc markdown data.
123
+ cite_key_list (list[str]): list of citation keys.
124
+ data_list_pandoc_md (list[str]): list of pandoc markdown data.
126
125
  library_for_zotero (Library): Zotero bibliography library.
127
126
 
128
127
  Returns:
129
- Tuple[List[str], List[str], List[str]]: Tuple containing basic, beauty, and complex markdown content.
128
+ tuple[list[str], list[str], list[str]]: Tuple containing basic, beauty, and complex markdown content.
130
129
  """
131
130
  data_basic_md, data_beauty_md, data_complex_md = [], [], []
132
131
 
@@ -152,14 +151,14 @@ class WriteInitialResult(BasicInput):
152
151
  return data_basic_md, data_beauty_md, data_complex_md
153
152
 
154
153
  @staticmethod
155
- def _convert_to_special_list(data_list: List[str]) -> List[str]:
154
+ def _convert_to_special_list(data_list: list[str]) -> list[str]:
156
155
  """Convert data list to special formatted list.
157
156
 
158
157
  Args:
159
- data_list (List[str]): List of data strings.
158
+ data_list (list[str]): list of data strings.
160
159
 
161
160
  Returns:
162
- List[str]: Formatted list with proper indentation.
161
+ list[str]: Formatted list with proper indentation.
163
162
  """
164
163
  if len(data_list) > 0:
165
164
  data_list[0] = "- " + data_list[0]
@@ -169,18 +168,18 @@ class WriteInitialResult(BasicInput):
169
168
  return data_list
170
169
 
171
170
  def generate_content_tex_md(
172
- self, cite_key_list: List[str], output_prefix: str, field: str, combine_keywords: str
173
- ) -> Tuple[List[str], List[str], str]:
171
+ self, cite_key_list: list[str], output_prefix: str, field: str, combine_keywords: str
172
+ ) -> tuple[list[str], list[str], str]:
174
173
  """Generate LaTeX and markdown content.
175
174
 
176
175
  Args:
177
- cite_key_list (List[str]): List of citation keys.
176
+ cite_key_list (list[str]): list of citation keys.
178
177
  output_prefix (str): Prefix for output files.
179
178
  field (str): Field being searched.
180
179
  combine_keywords (str): Combined keywords string.
181
180
 
182
181
  Returns:
183
- Tuple[List[str], List[str], str]: Tuple containing LaTeX content, markdown content, and header.
182
+ tuple[list[str], list[str], str]: Tuple containing LaTeX content, markdown content, and header.
184
183
  """
185
184
  c_k_f_t = combine_keywords_for_title(combine_keywords)
186
185
 
@@ -198,7 +197,7 @@ class WriteInitialResult(BasicInput):
198
197
  return data_list_tex, data_list_md, md_header
199
198
 
200
199
 
201
- class WriteSeparateResult(object):
200
+ class WriteSeparateResult:
202
201
  """Write separate result for different keyword types."""
203
202
 
204
203
  def __init__(self) -> None:
@@ -207,12 +206,12 @@ class WriteSeparateResult(object):
207
206
  self._level_title_tex = "section"
208
207
 
209
208
  def main(
210
- self, data_temp: List[List[str]], field: str, keywords_type: str, combine_keywords: str, path_separate: str
209
+ self, data_temp: list[list[str]], field: str, keywords_type: str, combine_keywords: str, path_separate: str
211
210
  ) -> None:
212
211
  """Main method to write separate results.
213
212
 
214
213
  Args:
215
- data_temp (List[List[str]]): List of data lists for different file types.
214
+ data_temp (list[list[str]]): list of data lists for different file types.
216
215
  field (str): Field being processed.
217
216
  keywords_type (str): Type of keywords.
218
217
  combine_keywords (str): Combined keywords string.
@@ -243,7 +242,7 @@ class WriteSeparateResult(object):
243
242
  return None
244
243
 
245
244
 
246
- class WriteAbbrCombinedResults(object):
245
+ class WriteAbbrCombinedResults:
247
246
  """Write combined results for abbreviations (such as `TEVC`, `PNAS`).
248
247
 
249
248
  Args:
@@ -277,18 +276,18 @@ class WriteAbbrCombinedResults(object):
277
276
  self._pandoc_md_to = PandocMdTo(options)
278
277
 
279
278
  def main(
280
- self, search_field_list, keywords_type: str, field_data_dict: Dict[str, List[List[str]]], path_combine: str
281
- ) -> Tuple[List[str], List[str]]:
279
+ self, search_field_list, keywords_type: str, field_data_dict: dict[str, list[list[str]]], path_combine: str
280
+ ) -> tuple[list[str], list[str]]:
282
281
  """Main method to write combined results for abbreviations.
283
282
 
284
283
  Args:
285
- search_field_list: List of search fields.
284
+ search_field_list: list of search fields.
286
285
  keywords_type (str): Type of keywords.
287
- field_data_dict (Dict[str, List[List[str]]]): Dictionary containing field data.
286
+ field_data_dict (dict[str, list[list[str]]]): dictionary containing field data.
288
287
  path_combine (str): Path to combine directory.
289
288
 
290
289
  Returns:
291
- Tuple[List[str], List[str]]: Tuple containing error messages for PDF and HTML conversion.
290
+ tuple[list[str], list[str]]: Tuple containing error messages for PDF and HTML conversion.
292
291
  """
293
292
  path_subsection = os.path.join(path_combine, "tex-subsection")
294
293
  path_md = os.path.join(path_combine, "md")
@@ -1,23 +1,22 @@
1
1
  import os
2
2
  import re
3
- from typing import Dict, List, Tuple, Union
4
3
 
5
4
  from pyadvtools import IterateSortDict, is_list_contain_list_contain_str, is_list_contain_str, write_list
6
5
 
7
6
 
8
- def switch_keywords_list(xx: Union[List[str], List[List[str]]]) -> Tuple[List[List[str]], str]:
7
+ def switch_keywords_list(xx: list[str] | list[list[str]]) -> tuple[list[list[str]], str]:
9
8
  """Switch keyword list format and generate combined keywords string.
10
9
 
11
10
  Args:
12
- xx (Union[List[str], List[List[str]]]): Input keyword list or nested keyword list.
11
+ xx (list[str] | list[list[str]]): Input keyword list or nested keyword list.
13
12
  Examples: ["evolutionary", "algorithm"] or [["evolution"], ["evolutionary"]]
14
13
 
15
14
  Returns:
16
- Tuple[List[List[str]], str]: Tuple containing:
15
+ tuple[list[list[str]], str]: Tuple containing:
17
16
  - List of keyword lists with regex word boundaries
18
17
  - Combined keywords string for file naming
19
18
  """
20
- yyy: List[List[str]] = [[]]
19
+ yyy: list[list[str]] = [[]]
21
20
 
22
21
  if is_list_contain_str(xx):
23
22
  yyy = [[rf"\b{x}\b" for x in xx]]
@@ -119,14 +118,14 @@ def keywords_type_for_title(keywords_type: str) -> str:
119
118
  return keywords_type.strip()
120
119
 
121
120
 
122
- def extract_information(old_dict: Dict[str, Dict[str, Dict[str, Dict[str, Dict[str, int]]]]], path_output: str) -> None:
121
+ def extract_information(old_dict: dict[str, dict[str, dict[str, dict[str, dict[str, int]]]]], path_output: str) -> None:
123
122
  """Extract and organize search information into markdown tables.
124
123
 
125
124
  Args:
126
- old_dict (Dict[str, Dict[str, Dict[str, Dict[str, Dict[str, int]]]]]): Nested dictionary containing search results.
125
+ old_dict (dict[str, dict[str, dict[str, dict[str, dict[str, int]]]]]): Nested dictionary containing search results.
127
126
  path_output (str): Output directory path for generated markdown files.
128
127
  """
129
- new_dict: Dict[str, Dict[str, Dict[str, Dict[str, Dict[str, int]]]]] = {}
128
+ new_dict: dict[str, dict[str, dict[str, dict[str, dict[str, int]]]]] = {}
130
129
 
131
130
  for abbr in old_dict:
132
131
  for entry_type in old_dict[abbr]:
@@ -149,10 +148,10 @@ def extract_information(old_dict: Dict[str, Dict[str, Dict[str, Dict[str, Dict[s
149
148
  data_list = []
150
149
  for keyword_type in new_dict[entry_type][field]:
151
150
  for keyword in new_dict[entry_type][field][keyword_type]:
152
- abbr_list = sorted(list(new_dict[entry_type][field][keyword_type][keyword].keys()))
151
+ abbr_list = sorted(new_dict[entry_type][field][keyword_type][keyword].keys())
153
152
  num_list = [new_dict[entry_type][field][keyword_type][keyword][abbr] for abbr in abbr_list]
154
153
 
155
- a = f'|Keywords Types|Keywords|{"|".join([abbr for abbr in abbr_list])}|\n'
154
+ a = f'|Keywords Types|Keywords|{"|".join(list(abbr_list))}|\n'
156
155
  if a not in data_list:
157
156
  data_list.append(a)
158
157
 
pyeasyphd/utils/utils.py CHANGED
@@ -65,8 +65,7 @@ def operate_on_generate_html(html_name: str) -> None:
65
65
 
66
66
 
67
67
  def is_last_week_of_month():
68
- """
69
- Check if today's date falls in the last week of the current month.
68
+ """Check if today's date falls in the last week of the current month.
70
69
 
71
70
  Returns:
72
71
  bool: True if today is in the last week of the month, False otherwise.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyeasyphd
3
- Version: 0.4.11
3
+ Version: 0.4.13
4
4
  Summary: pyeasyphd
5
5
  License: GPL-3.0-or-later
6
6
  License-File: LICENSE
@@ -16,8 +16,8 @@ Classifier: Programming Language :: Python :: 3.12
16
16
  Classifier: Programming Language :: Python :: 3.13
17
17
  Classifier: Programming Language :: Python :: 3.14
18
18
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
19
- Requires-Dist: pyadvtools (>=0.2.14,<0.3.0)
20
- Requires-Dist: pybibtexer (>=0.2.28,<0.3.0)
19
+ Requires-Dist: pyadvtools (>=0.3.8,<0.4.0)
20
+ Requires-Dist: pybibtexer (>=0.3.3,<0.4.0)
21
21
  Project-URL: Documentation, https://github.com/Easy-PhD/pyeasyphd
22
22
  Project-URL: Homepage, https://github.com/Easy-PhD/pyeasyphd
23
23
  Project-URL: Repository, https://github.com/Easy-PhD/pyeasyphd
@@ -0,0 +1,53 @@
1
+ pyeasyphd/.python-version,sha256=Auc1s9_hwygz61ULf_j_oX9fK8P6HnuuYaj1o4g845g,5
2
+ pyeasyphd/Main.sublime-menu,sha256=TTGNg9MzL5_uz4SXvs2pTdQQNxk9dSJmbUkPjujfQls,1554
3
+ pyeasyphd/__init__.py,sha256=tEypJy-Kmj6Oxpjh767NjkH5Ct0JF1Nhiw3D6-7I4E8,260
4
+ pyeasyphd/data/templates/csl/apa-no-ampersand.csl,sha256=ndFDG38PUNyGYpvfGqx_KzoSIs0DXA4w0GHG3MgFV7E,86859
5
+ pyeasyphd/data/templates/csl/apa.csl,sha256=S5OAu8zlZqzubySyR5c2FYDEzkTyuC9aRaJJlsygM8M,84591
6
+ pyeasyphd/data/templates/csl/ieee.csl,sha256=SzU0l89ymSCtmpugSoz2S6uM3_GHvibFZwZewn7WVEA,17413
7
+ pyeasyphd/data/templates/tex/Article.tex,sha256=M-vMXiHc2ncOTahtuY40s3flr2Ojo_-C8DDvLExMKbA,1264
8
+ pyeasyphd/data/templates/tex/Article_Header.tex,sha256=41Wv1BcQMmvh5peKTPh3uK_tm7mOSBnrFqkO0JzlXKU,949
9
+ pyeasyphd/data/templates/tex/Article_Tail.tex,sha256=1m7z4T6h8B8ylw3_4Q8_EOgzhyRRVSHgHrGZ6b5ut4k,35
10
+ pyeasyphd/data/templates/tex/Beamer_Header.tex,sha256=AWzgGmosZBX-YRynsbCChu6iF97FKDp3iU1OvBWeoC4,3692
11
+ pyeasyphd/data/templates/tex/Beamer_Tail.tex,sha256=88F75V0B8mP9naOEzM1S8PuEtYPdpZJAwxFQVVPP5K0,211
12
+ pyeasyphd/data/templates/tex/Style.tex,sha256=CK_Uxf3MEKRhxWC0OnipkHrgQIO_I5CHPBQ_T5wXvog,9726
13
+ pyeasyphd/data/templates/tex/TEVC_Header.tex,sha256=WPFIJLQNRsEcr5jxSw8rpc2gXJrMLie273yfwgEXAOU,1579
14
+ pyeasyphd/data/templates/tex/TEVC_Tail.tex,sha256=FBoefRJsnJrH1-eRZfF68qu_lHjwYZhj-iFWBWfV4tw,86
15
+ pyeasyphd/data/templates/tex/eisvogel.tex,sha256=9bDMPfUFjaHQZPCnYLwjsw5DfBtD04uzwfxvQa9nWuE,30748
16
+ pyeasyphd/data/templates/tex/math.tex,sha256=y_8AJzjmCCX6xmZQ_yCcABqMLqufOeh54pafTvNyUIM,11030
17
+ pyeasyphd/data/templates/tex/math_commands.tex,sha256=6ZQOletBnFRA6q6fU8TDVN4c9hDEdbmZuKnJgkgzq48,41513
18
+ pyeasyphd/data/templates/tex/nextaimathmacros.sty,sha256=iF0jyABkoPUY_XA-lPkvZSlblFuWLX9ie82gRqY0Fks,41644
19
+ pyeasyphd/main/__init__.py,sha256=Pv-7359vftMgw3Wi_GuDy99K0TcY6hVwLkFFip774x8,224
20
+ pyeasyphd/main/basic_input.py,sha256=N-33KUs8GQM517Qq6Ey-CAMwgTv9k1IP69BN3rpJnKA,4478
21
+ pyeasyphd/main/pandoc_md_to.py,sha256=W_TFDj2_wieVAXa5xZRO4Of7wlI6yknW14bRLCZ21GA,17138
22
+ pyeasyphd/main/python_run_md.py,sha256=ICKlUZHelV2WUOq7T_Accoe7hWdFSaHtahmo3ixBGe8,14346
23
+ pyeasyphd/main/python_run_tex.py,sha256=etmqfswrCF3J4r-GfEKgf6gf4L-u3SwoRzZZ0RMT8RE,7587
24
+ pyeasyphd/pyeasyphd.py,sha256=jIpt0JzF_iE8hVnujla3LfI3SeyqGgHNiGI6S_cb8Iw,3470
25
+ pyeasyphd/pyeasyphd.sublime-settings,sha256=kJLaSZQ5kGL5eg-LYeDsT6S-ecEGl3FvEAp2HVmhfdA,3216
26
+ pyeasyphd/pyeasyphd.sublime-syntax,sha256=pXylbA-tye-K5dCTjEJLFVRqtY1T7AgWZ4laxo-dnaE,73
27
+ pyeasyphd/scripts/__init__.py,sha256=QDmJugM90NFSzb69A6PSuCf76pHIcptRIaKNtSwXb-s,1235
28
+ pyeasyphd/scripts/_base.py,sha256=WdmIrJFwWw1yK6pg1sg1W74d3LwskdKUTD9ekEGBfyU,2315
29
+ pyeasyphd/scripts/run_article_md.py,sha256=jL7m3TfceVRL1QFs356WZOcxlOBdYEZr5W01c0Q2Y0w,4288
30
+ pyeasyphd/scripts/run_article_tex.py,sha256=uE84oQAGmmMXTJAD6yAlr6_5dhiiKlhDKv_ljZYsVY8,3696
31
+ pyeasyphd/scripts/run_beamer_tex.py,sha256=jw5EwpzazDMW9t9nN5Za0L0KQFv1ZL0VLGFjqAAqu0I,3233
32
+ pyeasyphd/scripts/run_compare.py,sha256=wop1uRmPqOXnMtRtMuTdy8dHhtZ0wpzthOcURw4URe8,3196
33
+ pyeasyphd/scripts/run_format.py,sha256=FjJS0-Ax3kEb-SLui-wUBjxI4G9cQzOJbxLNiYEqNQc,2936
34
+ pyeasyphd/scripts/run_generate.py,sha256=i8J3X3zn2QMuKUshu3FGpaq4kPw_P7TVXU46Wy_mZ8s,8549
35
+ pyeasyphd/scripts/run_replace.py,sha256=nvNnnxoutaWU3n-bdXlLx-VUZL3AH1yRnpfxTks1wbE,1314
36
+ pyeasyphd/scripts/run_search.py,sha256=P0TvcJuaVKbyPmAahk_SngxHKlndtTAHoX8hCMRC3m8,10510
37
+ pyeasyphd/tools/__init__.py,sha256=u1MZu_JjVac3HhEmcSTwroS83UVu0W5Vspy3Wu_-GH8,496
38
+ pyeasyphd/tools/generate/generate_from_bibs.py,sha256=AwY9gDcxOzPkPd0PzVVSv05rVuVDJdfXx13bdaP4R8E,7645
39
+ pyeasyphd/tools/generate/generate_html.py,sha256=DP4Ti6xC0FJnKR6TpUpMysrRa0e7-jEdszHamN5JDMU,5393
40
+ pyeasyphd/tools/generate/generate_library.py,sha256=u6s7VgcEo-qlDWHHRYIJ8EuoUIqulva76JV2SinTMtc,7825
41
+ pyeasyphd/tools/generate/generate_links.py,sha256=8xswaKtBsTHVNrj55lK7hLVupe9cV4cQ_3wlPajJTlE,16015
42
+ pyeasyphd/tools/py_run_bib_md_tex.py,sha256=sPoMN1jljq2mp6BkZlocwkUd8n2xJmPtvzcTCHfeIW0,17400
43
+ pyeasyphd/tools/search/data.py,sha256=iL7mZO49SRMHUkPtrK_3xzhFJAbHURIpXr0nGF76DH0,10300
44
+ pyeasyphd/tools/search/search_base.py,sha256=wwqtKN5gkvypO1ZQFVtRlZDy1aqtYuMaXgpbeKBAbf4,5909
45
+ pyeasyphd/tools/search/search_core.py,sha256=cR-2ix68PA2DstxpSEjFzb-KLivYo3pYVpnxldsezfo,17421
46
+ pyeasyphd/tools/search/search_keywords.py,sha256=pPEYhLaaQCYcyGlf8ULA_VNWBA_-WtfRy1WR4Q0y3mQ,10828
47
+ pyeasyphd/tools/search/search_writers.py,sha256=LfI_oxpuX8C5uZP9uosGJ4utO11UJQG230x1YwUJWPU,15665
48
+ pyeasyphd/tools/search/utils.py,sha256=hpYHXTm4XAL2f7e0BSuYDyvA86sVkELetvmPzllapF0,7487
49
+ pyeasyphd/utils/utils.py,sha256=8NfdQC0V3UGYeSweb7gjimQkQqM5dWeuUHOiRjVXaxk,3123
50
+ pyeasyphd-0.4.13.dist-info/METADATA,sha256=O479Ls68lCMuDQJNKovKQ1M--UEoU1F3R71Y2oKIKt0,1468
51
+ pyeasyphd-0.4.13.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
52
+ pyeasyphd-0.4.13.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
53
+ pyeasyphd-0.4.13.dist-info/RECORD,,
@@ -1,53 +0,0 @@
1
- pyeasyphd/.python-version,sha256=Auc1s9_hwygz61ULf_j_oX9fK8P6HnuuYaj1o4g845g,5
2
- pyeasyphd/Main.sublime-menu,sha256=TTGNg9MzL5_uz4SXvs2pTdQQNxk9dSJmbUkPjujfQls,1554
3
- pyeasyphd/__init__.py,sha256=tEypJy-Kmj6Oxpjh767NjkH5Ct0JF1Nhiw3D6-7I4E8,260
4
- pyeasyphd/data/templates/csl/apa-no-ampersand.csl,sha256=ndFDG38PUNyGYpvfGqx_KzoSIs0DXA4w0GHG3MgFV7E,86859
5
- pyeasyphd/data/templates/csl/apa.csl,sha256=S5OAu8zlZqzubySyR5c2FYDEzkTyuC9aRaJJlsygM8M,84591
6
- pyeasyphd/data/templates/csl/ieee.csl,sha256=SzU0l89ymSCtmpugSoz2S6uM3_GHvibFZwZewn7WVEA,17413
7
- pyeasyphd/data/templates/tex/Article.tex,sha256=M-vMXiHc2ncOTahtuY40s3flr2Ojo_-C8DDvLExMKbA,1264
8
- pyeasyphd/data/templates/tex/Article_Header.tex,sha256=41Wv1BcQMmvh5peKTPh3uK_tm7mOSBnrFqkO0JzlXKU,949
9
- pyeasyphd/data/templates/tex/Article_Tail.tex,sha256=1m7z4T6h8B8ylw3_4Q8_EOgzhyRRVSHgHrGZ6b5ut4k,35
10
- pyeasyphd/data/templates/tex/Beamer_Header.tex,sha256=AWzgGmosZBX-YRynsbCChu6iF97FKDp3iU1OvBWeoC4,3692
11
- pyeasyphd/data/templates/tex/Beamer_Tail.tex,sha256=88F75V0B8mP9naOEzM1S8PuEtYPdpZJAwxFQVVPP5K0,211
12
- pyeasyphd/data/templates/tex/Style.tex,sha256=CK_Uxf3MEKRhxWC0OnipkHrgQIO_I5CHPBQ_T5wXvog,9726
13
- pyeasyphd/data/templates/tex/TEVC_Header.tex,sha256=WPFIJLQNRsEcr5jxSw8rpc2gXJrMLie273yfwgEXAOU,1579
14
- pyeasyphd/data/templates/tex/TEVC_Tail.tex,sha256=FBoefRJsnJrH1-eRZfF68qu_lHjwYZhj-iFWBWfV4tw,86
15
- pyeasyphd/data/templates/tex/eisvogel.tex,sha256=9bDMPfUFjaHQZPCnYLwjsw5DfBtD04uzwfxvQa9nWuE,30748
16
- pyeasyphd/data/templates/tex/math.tex,sha256=y_8AJzjmCCX6xmZQ_yCcABqMLqufOeh54pafTvNyUIM,11030
17
- pyeasyphd/data/templates/tex/math_commands.tex,sha256=6ZQOletBnFRA6q6fU8TDVN4c9hDEdbmZuKnJgkgzq48,41513
18
- pyeasyphd/data/templates/tex/nextaimathmacros.sty,sha256=iF0jyABkoPUY_XA-lPkvZSlblFuWLX9ie82gRqY0Fks,41644
19
- pyeasyphd/main/__init__.py,sha256=Pv-7359vftMgw3Wi_GuDy99K0TcY6hVwLkFFip774x8,224
20
- pyeasyphd/main/basic_input.py,sha256=roZSTc8hUavItv0jQsjkmRRf8FHR6FStMrvZcjaSLbk,4484
21
- pyeasyphd/main/pandoc_md_to.py,sha256=RnrHFEp7gnBw7zoMTY8ffaYSDEV75Lstr6OBQwsCmJQ,17208
22
- pyeasyphd/main/python_run_md.py,sha256=3I6kc3920tRaTvLmNd3TIfIrfO8U_j9RYPO9YlnY8hs,14398
23
- pyeasyphd/main/python_run_tex.py,sha256=9Syu8qRjPXN3gEabfRUWxwTFBm_izIcB4yFhsz3QNs0,7672
24
- pyeasyphd/pyeasyphd.py,sha256=OAwbwq2rSXLSk2AoTAF8hmlOMRSRfvDn1Uqk-zkuqH8,3470
25
- pyeasyphd/pyeasyphd.sublime-settings,sha256=kJLaSZQ5kGL5eg-LYeDsT6S-ecEGl3FvEAp2HVmhfdA,3216
26
- pyeasyphd/pyeasyphd.sublime-syntax,sha256=pXylbA-tye-K5dCTjEJLFVRqtY1T7AgWZ4laxo-dnaE,73
27
- pyeasyphd/scripts/__init__.py,sha256=QDmJugM90NFSzb69A6PSuCf76pHIcptRIaKNtSwXb-s,1235
28
- pyeasyphd/scripts/_base.py,sha256=Vm-CehgDng38jACb9KBzKkbyJuc_e5UjG06nIMi_l0o,2337
29
- pyeasyphd/scripts/run_article_md.py,sha256=qZuF4Vq_xzP0z-Cjs6OYnNVg3_rZTaM132WheXzxQtk,4336
30
- pyeasyphd/scripts/run_article_tex.py,sha256=vD9Wa8-XyxHZ48rtllcMCzmkQ0j-p8NpgCkMCZv6RWs,3820
31
- pyeasyphd/scripts/run_beamer_tex.py,sha256=YId0mofXbJJwsqawzG0_g-umd0Ik_N6JERxmndNnAoA,3357
32
- pyeasyphd/scripts/run_compare.py,sha256=-VLS0ms049Kd8zbiIdjTpLmkDZuoSZBwG5OfR6PPyno,3206
33
- pyeasyphd/scripts/run_format.py,sha256=V5RUwa6eZx5kzV6dtE35jM_9S-RckhDTR7xCL-_GpXM,2946
34
- pyeasyphd/scripts/run_generate.py,sha256=i8J3X3zn2QMuKUshu3FGpaq4kPw_P7TVXU46Wy_mZ8s,8549
35
- pyeasyphd/scripts/run_replace.py,sha256=0D5cIsWf8cSysBRc5Nhv95WyHTuGW32W1LgrojkVYmI,1351
36
- pyeasyphd/scripts/run_search.py,sha256=HQWaKYMgmWhTsgrJIQxWv4ceu5UyEy8gekWDJV_GdHA,10565
37
- pyeasyphd/tools/__init__.py,sha256=u1MZu_JjVac3HhEmcSTwroS83UVu0W5Vspy3Wu_-GH8,496
38
- pyeasyphd/tools/generate/generate_from_bibs.py,sha256=oQlNqYUAhOT1Bnpqeh_Y2yE2knIurpYRMfz4MnxTSZs,7602
39
- pyeasyphd/tools/generate/generate_html.py,sha256=JzUEqgTVCaFzd4hXTYUEf0cVSO1QRe0nVUS72W6oyyU,5349
40
- pyeasyphd/tools/generate/generate_library.py,sha256=AihCJVFMRJExlpWDQVqvBczOwmbmXqGzGU4cL-5s0F4,7930
41
- pyeasyphd/tools/generate/generate_links.py,sha256=_fz6IaW52c5tGPHf2JT9DSJXziCIdM3XhuKuZUPKHgg,15891
42
- pyeasyphd/tools/py_run_bib_md_tex.py,sha256=zEWy7yglVU9hscrHnWmkPy2qvDOjU3KS97VK645W_Yw,17358
43
- pyeasyphd/tools/search/data.py,sha256=ykFEd8Tc04dupiG9Y8viOcEe5g56LCaMH-0KwbV4vt4,10306
44
- pyeasyphd/tools/search/search_base.py,sha256=JR80m72UBJu__CWV1KP7ixPhK1uDyApPhDaExrlzfKM,5950
45
- pyeasyphd/tools/search/search_core.py,sha256=Ks_dK69dRfOelaoK_B3fLvmLA9qONgZNb9OxI5HG_V0,17352
46
- pyeasyphd/tools/search/search_keywords.py,sha256=tUEKsCqiaUHEyRa23wzDLri3puAWrNKhnpZKaeYgdeY,10848
47
- pyeasyphd/tools/search/search_writers.py,sha256=Dz6D8m17R7x8NT7_PCjwmzlq29AfUz-N6sjyCguDTo4,15702
48
- pyeasyphd/tools/search/utils.py,sha256=bo7xtIZu31dQvjol1lwyWq1t6ldbw28oondwK8VbAqk,7562
49
- pyeasyphd/utils/utils.py,sha256=kWxzzgNwz77K9Q7j-RKTaoPpxqiVLVtaBMMhLuEenwE,3128
50
- pyeasyphd-0.4.11.dist-info/METADATA,sha256=8_RFxreuSwFb1rs4bf59kReHOKSS49t8ijercVCI1so,1470
51
- pyeasyphd-0.4.11.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
52
- pyeasyphd-0.4.11.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
53
- pyeasyphd-0.4.11.dist-info/RECORD,,