rwe 0.0.2__py3-none-any.whl → 0.0.4__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.
rwe/clients/aou.py CHANGED
@@ -34,13 +34,13 @@ def generate_aou_variant_info_demographics_report(doc: Document, chrm: str, gene
34
34
  fig1_path = uth._save_fig_to_tmp(fig1, basename="variant_information", dpi=300)
35
35
  doc.add_paragraph() # spacing
36
36
  doc.add_picture(fig1_path, width=Inches(6.5))
37
- uth._add_caption(doc, "Figure 1. Variant information summary (carrier counts by consequence; most/least frequent variants).")
37
+ uth._add_figure_caption(doc, "Variant information summary (carrier counts by consequence; most/least frequent variants).")
38
38
  # 2) Demographics figure
39
39
  fig2, _axes2 = demographics_plot(person_df)
40
40
  fig2_path = uth._save_fig_to_tmp(fig2, basename="demographics", dpi=300)
41
41
  doc.add_paragraph() # spacing
42
- doc.add_picture(fig2_path, width=Inches(6.5))
43
- uth._add_caption(doc, "Figure 2. Demographics of cases vs controls (age, ancestry, sex at birth, ethnicity).")
42
+ doc.add_picture(fig2_path, width=Inches(4))
43
+ uth._add_figure_caption(doc, "Demographics of cases vs controls (age, ancestry, sex at birth, ethnicity).")
44
44
  return doc
45
45
 
46
46
 
@@ -75,38 +75,39 @@ def get_aou_manhattan(df, gene):
75
75
  def generate_aou_clinical_report(doc, chrm, gene, zygosity):
76
76
  from rwe.parsers.aou.config import BUCKET
77
77
  phewas_file = f"{BUCKET}/data/phewas/results/chr{chrm}/{gene}_phewas.csv"
78
+ doc.add_heading("Phenome-wide Association Study (PheWAS) in All of Us cohort", level=2)
78
79
  if uth._gcs_size(phewas_file, BUCKET) > 0:
79
80
  df = clean_aou_phewas(phewas_file)
80
81
  fig, plot_df = get_aou_manhattan(df, gene)
81
82
  fig_path = uth._save_fig_to_tmp(fig, basename="aou_phewas", dpi=300)
82
83
  doc.add_paragraph() # spacing
83
84
  doc.add_picture(fig_path, width=Inches(6.5))
84
- uth._add_caption(doc, f"Figure X. {gene} PheWAS results from All of Us.")
85
+ uth._add_figure_caption(doc, f"{gene} PheWAS results from All of Us.")
85
86
  doc.add_paragraph() # spacing
86
87
 
87
- # Table 1: Top 10 significant hits (sorted by p-value)
88
+ # Table: Top 10 significant hits (sorted by p-value)
88
89
  top_significant = plot_df.nsmallest(10, 'p_value')
89
90
  columns = ['phecode_string', 'phecode_category', 'odds_ratio', 'p_value']
90
91
  # Rename columns for display
91
92
  display_df = top_significant[columns].copy()
92
93
  display_df.columns = ['Phecode', 'Category', 'OR', 'P-value']
93
- uth._add_table_to_doc(doc, display_df, f"Table X. Top 10 significant associations for {gene}",
94
+ uth._add_table_to_doc(doc, display_df, uth._add_table_title(doc, f"Top 10 significant associations for {gene} in AoU"),
94
95
  ['Phecode', 'Category', 'OR', 'P-value'], list(map(Inches, [2.75, 1.75, 0.75, 0.75]))
95
96
  )
96
97
 
97
- # Table 2: Top 10 negative beta hits (odds_ratio < 0, sorted by p-value)
98
+ # Table: Top 10 negative beta hits (odds_ratio < 0, sorted by p-value)
98
99
  negative_beta = plot_df[plot_df['odds_ratio'] < 1].nsmallest(10, 'p_value')
99
100
  if len(negative_beta) > 0:
100
101
  display_df_neg = negative_beta[columns].copy()
101
102
  display_df_neg.columns = ['Phecode', 'Category', 'OR', 'P-value']
102
- uth._add_table_to_doc(doc, display_df_neg, f"Table X. Top 10 protective associations for {gene}",
103
+ uth._add_table_to_doc(doc, display_df_neg, uth._add_table_title(doc, f"Top 10 protective associations for {gene} in AoU"),
103
104
  ['Phecode', 'Category', 'OR', 'P-value'], list(map(Inches, [2.75, 1.75, 0.75, 0.75]))
104
105
  )
105
106
 
106
- doc.add_paragraph() # spacing
107
+ doc.add_page_break() # spacing
107
108
  else:
108
109
  doc.add_paragraph(f"No AoU PheWAS results found for {gene}.")
109
- doc.add_paragraph() # spacing
110
+ doc.add_page_break() # spacing
110
111
  return doc
111
112
 
112
113
 
@@ -160,14 +161,22 @@ def generate_aou_labs_measurements_report(doc: Document, chrm: str, gene: str, z
160
161
  numerical_measurements_df["cases"] = numerical_measurements_df.person_id.isin(variant_df[f"{zygosity}_samples"])
161
162
  measurements = numerical_measurements_df["measurement"].unique().tolist()
162
163
  res_df = run_parallel(numerical_measurements_df, measurements=measurements, n_jobs=None, chunksize=20)
163
- # TODO: add most significant measurements table to doc
164
+ top_ten_lab = res_df.nsmallest(10, "p_mwu").loc[:, ["measurement", "p_mwu", "u_stat", "n_cases", "n_ctrls"]]
165
+ top_ten_lab.columns = ["Measurement", "P-value", "U statistic", "N cases", "N controls"]
166
+ uth._add_table_to_doc(
167
+ doc, top_ten_lab, uth._add_table_title(
168
+ doc, f"Top 10 lab measurements for {gene} pLoF carriers in AoU"),
169
+ top_ten_lab.columns.tolist(), list(map(Inches, [3, 0.75, 0.75, 0.75, 0.75]))
170
+ )
171
+ doc.add_page_break() # spacing
164
172
  for k,v in MEASUREMENT_GROUPS.items():
165
- f, a = plot_measurements(numerical_measurements_df, v, multiplier=5, col="median_value", res_df=res_df)
173
+ f, a = plot_measurements(numerical_measurements_df, v, col="median_value", res_df=res_df)
166
174
  fig_path = uth._save_fig_to_tmp(f, basename=f"aou_measurements_{k}", dpi=300)
167
175
  doc.add_paragraph() # spacing
176
+ doc.add_heading(f"{k.capitalize} profile of {gene} pLoF carriers in All of Us cohort", level=2)
168
177
  doc.add_picture(fig_path, width=Inches(6.5))
169
- uth._add_caption(doc, f"Figure X. {gene} pLoF carrier {k} results from All of Us.")
170
- doc.add_paragraph() # spacing
178
+ uth._add_figure_caption(doc, f"{gene} pLoF carrier {k} results from All of Us.")
179
+ doc.add_page_break() # spacing
171
180
  return doc
172
181
 
173
182
  ############### Surveys ###############
@@ -187,7 +196,7 @@ def generate_aou_survey_report(doc: Document, chrm: str, gene: str, zygosity: st
187
196
  fig_path = uth._save_fig_to_tmp(fig, basename="aou_surveys", dpi=300)
188
197
  doc.add_paragraph() # spacing
189
198
  doc.add_picture(fig_path, width=Inches(6.5))
190
- uth._add_caption(doc, f"Figure X. {gene} pLoF carrier survey results from All of Us.")
199
+ uth._add_figure_caption(doc, f"{gene} pLoF carrier survey results from All of Us.")
191
200
  doc.add_paragraph() # spacing
192
201
  return doc
193
202
 
rwe/clients/azn.py CHANGED
@@ -10,41 +10,34 @@ import rwe.utils.helpers as uth
10
10
  from docx.shared import Inches
11
11
 
12
12
  def extract_only_csv_rename(zip_path: str, gene: str) -> str:
13
- """
14
- Unzips `zip_path` into its parent directory, keeps only the csv,
15
- renames it to {gene}_azphewas.csv, removes everything else including the zip.
16
- Returns final csv path.
17
- """
18
13
  zip_path = Path(zip_path)
19
14
  gene_dir = zip_path.parent
20
15
  target_csv = gene_dir / f"{gene}_azphewas.csv"
21
16
 
22
- # Extract zip into gene_dir
17
+ # Extract into a dedicated folder
18
+ extract_dir = gene_dir / f"__extract_{zip_path.stem}"
19
+ if extract_dir.exists():
20
+ shutil.rmtree(extract_dir)
21
+ extract_dir.mkdir(parents=True, exist_ok=True)
22
+
23
23
  with zipfile.ZipFile(zip_path, "r") as z:
24
- z.extractall(gene_dir)
24
+ z.extractall(extract_dir)
25
25
 
26
- # Find CSV(s) extracted
27
- csvs = list(gene_dir.rglob("*.csv"))
26
+ csvs = list(extract_dir.rglob("*.csv"))
28
27
  if not csvs:
29
28
  raise FileNotFoundError(f"No CSV found after extracting {zip_path}")
30
29
 
31
- # If multiple CSVs, pick the largest (usually the main table export)
32
30
  csvs.sort(key=lambda p: p.stat().st_size, reverse=True)
33
31
  chosen = csvs[0]
34
32
 
35
- # Move/rename chosen CSV to target name at gene_dir root
36
33
  if target_csv.exists():
37
34
  target_csv.unlink()
38
35
  chosen.replace(target_csv)
39
36
 
40
- # Cleanup: remove everything except the renamed CSV
41
- for p in gene_dir.iterdir():
42
- if p == target_csv:
43
- continue
44
- if p.is_dir():
45
- shutil.rmtree(p)
46
- else:
47
- p.unlink()
37
+ # Cleanup only what we created
38
+ shutil.rmtree(extract_dir)
39
+ if zip_path.exists():
40
+ zip_path.unlink()
48
41
 
49
42
  return str(target_csv)
50
43
 
@@ -143,36 +136,37 @@ def generate_azn_clinical_report(doc, gene, phewas_dir, phewas_filename=""):
143
136
  with sync_playwright() as playwright:
144
137
  run(playwright, gene=gene, save_path=phewas_dir)
145
138
 
146
- if os.path.exists(phewas_file):
139
+ doc.add_heading("Phenome-wide Association Study (PheWAS) in UK Biobank cohort collected from AstraZeneca", level=2)
140
+ if os.path.exists(phewas_file):
147
141
  fig, plot_df = get_azn_manhattan(gene, phewas_file)
148
142
  fig_path = uth._save_fig_to_tmp(fig, basename="azn_phewas", dpi=300)
149
143
  doc.add_paragraph() # spacing
150
144
  doc.add_picture(fig_path, width=Inches(6.5))
151
- uth._add_caption(doc, f"Figure X. {gene} PheWAS results from AstraZeneca.")
145
+ uth._add_figure_caption(doc, f"{gene} PheWAS results from AstraZeneca.")
152
146
  doc.add_paragraph() # spacing
153
147
 
154
- # Table 1: Top 10 significant hits (sorted by p-value)
148
+ # Table: Top 10 significant hits (sorted by p-value)
155
149
  top_significant = plot_df.nsmallest(10, 'P value')
156
150
  columns = ['Phenotype', 'Phenotypic category', 'Odds ratio', 'P value']
157
151
  # Rename columns for display
158
152
  display_df = top_significant[columns].copy()
159
153
  display_df.columns = ['Phenotype', 'Category', 'OR', 'P-value']
160
- uth._add_table_to_doc(doc, display_df, f"Table X. Top 10 significant associations for {gene}",
154
+ uth._add_table_to_doc(doc, display_df, uth._add_table_title(doc, f"Top 10 significant associations for {gene} in AstraZeneca"),
161
155
  ['Phenotype', 'Category', 'OR', 'P-value'], list(map(Inches, [2.75, 1.75, 0.75, 0.75]))
162
156
  )
163
- # Table 2: Top 10 negative beta hits (odds_ratio < 0, sorted by p-value)
157
+ # Table: Top 10 negative beta hits (odds_ratio < 0, sorted by p-value)
164
158
  negative_beta = plot_df[plot_df['Odds ratio'] < 1].nsmallest(10, 'P value')
165
159
  if len(negative_beta) > 0:
166
160
  display_df_neg = negative_beta[columns].copy()
167
161
  display_df_neg.columns = ['Phenotype', 'Category', 'OR', 'P-value']
168
- uth._add_table_to_doc(doc, display_df_neg, f"Table X. Top 10 protective associations for {gene}",
162
+ uth._add_table_to_doc(doc, display_df_neg, uth._add_table_title(doc, f"Top 10 protective associations for {gene} in AstraZeneca"),
169
163
  ['Phenotype', 'Category', 'OR', 'P-value'], list(map(Inches, [2.75, 1.75, 0.75, 0.75]))
170
164
  )
171
- doc.add_paragraph() # spacing
165
+ doc.add_page_break() # spacing
172
166
 
173
167
  else:
174
168
  doc.add_paragraph(f"No AstraZeneca PheWAS results found for {gene}.")
175
- doc.add_paragraph() # spacing
169
+ doc.add_page_break() # spacing
176
170
  return doc
177
171
 
178
172
 
rwe/clients/genebass.py CHANGED
@@ -93,38 +93,38 @@ def generate_genebass_clinical_report(doc, gene, phewas_dir, phewas_filename="")
93
93
  approved_symbol, ensembl_id, entrez_id = get_gene_info(gene, hgnc_path)
94
94
  with sync_playwright() as playwright:
95
95
  run(playwright, approved_symbol, ensembl_id, save_path=phewas_dir)
96
-
96
+ doc.add_heading("Phenome-wide Association Study (PheWAS) in UK Biobank cohort collected from GeneBass", level=2)
97
97
  if os.path.exists(phewas_file):
98
98
  fig, plot_df = get_genebass_manhattan(gene, phewas_file)
99
99
  fig_path = uth._save_fig_to_tmp(fig, basename="genebass_phewas", dpi=300)
100
100
  doc.add_paragraph() # spacing
101
101
  doc.add_picture(fig_path, width=Inches(6))
102
- uth._add_caption(doc, f"Figure X. {gene} PheWAS results from GeneBass.")
102
+ uth._add_figure_caption(doc, f"{gene} PheWAS results from GeneBass.")
103
103
  doc.add_paragraph() # spacing
104
104
 
105
- # Table 1: Top 10 significant hits (sorted by p-value)
105
+ # Table: Top 10 significant hits (sorted by p-value)
106
106
  top_significant = plot_df.nsmallest(10, 'P-Value (Burden)')
107
107
  columns = ['Description', 'Category', 'Beta', 'P-Value (Burden)']
108
108
  # Rename columns for display
109
109
  display_df = top_significant[columns].copy()
110
110
  display_df.columns = ['Description', 'Category', 'Beta', 'P-value']
111
- uth._add_table_to_doc(doc, display_df, f"Table X. Top 10 significant associations for {gene}",
111
+ uth._add_table_to_doc(doc, display_df, uth._add_table_title(doc, f"Top 10 significant associations for {gene} in GeneBass"),
112
112
  ['Description', 'Category', 'Beta', 'P-value'], list(map(Inches, [2.75, 2.0, 0.5, 0.75]))
113
113
  )
114
114
 
115
- # Table 2: Top 10 negative beta hits (beta < 0, sorted by p-value)
115
+ # Table: Top 10 negative beta hits (beta < 0, sorted by p-value)
116
116
  negative_beta = plot_df[plot_df['Beta'] < 0].nsmallest(10, 'P-Value (Burden)')
117
117
  if len(negative_beta) > 0:
118
118
  display_df_neg = negative_beta[columns].copy()
119
119
  display_df_neg.columns = ['Description', 'Category', 'Beta', 'P-value']
120
- uth._add_table_to_doc(doc, display_df_neg, f"Table X. Top 10 protective associations for {gene}",
120
+ uth._add_table_to_doc(doc, display_df_neg, uth._add_table_title(doc, f"Top 10 protective associations for {gene} in GeneBass"),
121
121
  ['Description', 'Category', 'Beta', 'P-value'], list(map(Inches, [2.75, 2.0, 0.5, 0.75]))
122
122
  )
123
123
 
124
- doc.add_paragraph() # spacing
124
+ doc.add_page_break() # spacing
125
125
  else:
126
126
  doc.add_paragraph(f"No GeneBass PheWAS results found for {gene}.")
127
- doc.add_paragraph() # spacing
127
+ doc.add_page_break() # spacing
128
128
  return doc
129
129
 
130
130
  if __name__ == "__main__":
rwe/generate_report.py CHANGED
@@ -33,7 +33,9 @@ def generate_rwe_report(
33
33
  logo_path : optional str (path to Arrowhead logo PNG/JPG)
34
34
  report_date : optional str (e.g. "January 26th, 2026")
35
35
  """
36
- proj_dir = os.path.dirname(out_docx_path) or "."
36
+ if not out_docx_path:
37
+ out_docx_path = f"./rwe_reports/{gene}_RWE_report.docx"
38
+ proj_dir = os.path.dirname(out_docx_path)
37
39
  os.makedirs(proj_dir, exist_ok=True)
38
40
 
39
41
  # --- Title and Contents --- #
@@ -56,8 +58,6 @@ def generate_rwe_report(
56
58
 
57
59
 
58
60
  # Save
59
- if not out_docx_path:
60
- out_docx_path = f"{gene}_RWE_report.docx"
61
61
  doc.save(out_docx_path)
62
62
  return out_docx_path
63
63
 
rwe/parsers/aou/config.py CHANGED
@@ -61,7 +61,7 @@ PLAUSIBLE = {
61
61
 
62
62
  # --- Liver / protein balance (AoU typical units: albumin g/L, protein g/L, enzymes U/L, bilirubin mg/dL OR umol/L; range is loose) ---
63
63
  "Albumin [Mass/volume] in Serum or Plasma": (15, 60), # g/L
64
- "Protein [Mass/volume] in Serum or Plasma": (40, 100), # g/L
64
+ "Protein [Mass/volume] in Serum or Plasma": (3, 12), # g/dL
65
65
  "Alanine aminotransferase [Enzymatic activity/volume] in Serum or Plasma": (0, 1000), # U/L
66
66
  "Aspartate aminotransferase [Enzymatic activity/volume] in Serum or Plasma": (0, 1000), # U/L
67
67
  "Alkaline phosphatase [Enzymatic activity/volume] in Serum or Plasma": (10, 2000), # U/L
rwe/utils/helpers.py CHANGED
@@ -10,6 +10,28 @@ from google.cloud import storage
10
10
 
11
11
  # ---------- DOCX helpers ----------
12
12
 
13
+ def _init_report_counters(doc: Document) -> Document:
14
+ """Initialize figure and table counters on the document object."""
15
+ doc._report_counters = {"figure": 0, "table": 0}
16
+ return doc
17
+
18
+
19
+ def _get_next_figure_num(doc: Document) -> int:
20
+ """Get the next figure number and increment the counter."""
21
+ if not hasattr(doc, '_report_counters'):
22
+ doc._report_counters = {"figure": 0, "table": 0}
23
+ doc._report_counters["figure"] += 1
24
+ return doc._report_counters["figure"]
25
+
26
+
27
+ def _get_next_table_num(doc: Document) -> int:
28
+ """Get the next table number and increment the counter."""
29
+ if not hasattr(doc, '_report_counters'):
30
+ doc._report_counters = {"figure": 0, "table": 0}
31
+ doc._report_counters["table"] += 1
32
+ return doc._report_counters["table"]
33
+
34
+
13
35
  def _set_default_styles(doc: Document):
14
36
  # Normal
15
37
  style = doc.styles["Normal"]
@@ -57,12 +79,39 @@ def _add_toc_field(paragraph):
57
79
 
58
80
 
59
81
  def _add_caption(doc: Document, text: str):
82
+ """Add a caption paragraph (for backward compatibility)."""
60
83
  p = doc.add_paragraph(text)
61
84
  p.style = doc.styles["Normal"]
62
85
  p.runs[0].italic = True
63
86
  p.alignment = WD_ALIGN_PARAGRAPH.CENTER
64
87
  return p
65
88
 
89
+
90
+ def _add_figure_caption(doc: Document, description: str):
91
+ """Add an auto-numbered figure caption.
92
+
93
+ Args:
94
+ doc: Document object with _report_counters attached
95
+ description: Caption text without the "Figure X." prefix
96
+ """
97
+ fig_num = _get_next_figure_num(doc)
98
+ text = f"Figure {fig_num}. {description}"
99
+ return _add_caption(doc, text)
100
+
101
+
102
+ def _add_table_title(doc: Document, description: str):
103
+ """Get an auto-numbered table title string.
104
+
105
+ Args:
106
+ doc: Document object with _report_counters attached
107
+ description: Title text without the "Table X." prefix
108
+
109
+ Returns:
110
+ str: The full table title with number prefix
111
+ """
112
+ table_num = _get_next_table_num(doc)
113
+ return f"Table {table_num}. {description}"
114
+
66
115
  def _save_fig_to_tmp(fig, basename="figure", dpi=300):
67
116
  tmpdir = tempfile.mkdtemp(prefix="rwe_report_")
68
117
  path = os.path.join(tmpdir, f"{basename}.png")
rwe/utils/report.py CHANGED
@@ -41,6 +41,7 @@ def generate_title_and_contents(gene: str, logo_path: str | None = None, report_
41
41
 
42
42
  doc = Document()
43
43
  uth._set_default_styles(doc)
44
+ uth._init_report_counters(doc)
44
45
 
45
46
  # --- Title page ---
46
47
  if logo_path and os.path.exists(logo_path):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rwe
3
- Version: 0.0.2
3
+ Version: 0.0.4
4
4
  Summary: Real World Evidence utilities and reporting
5
5
  Author: Deepro Banerjee
6
6
  License: MIT License
@@ -1,15 +1,15 @@
1
1
  rwe/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- rwe/generate_report.py,sha256=-NbQJ4H-NYdDzziWMoi5PUWyhZ7p8iVC8UXYUP1v_xY,1833
2
+ rwe/generate_report.py,sha256=AlM-_RzLAPYoM8U120qdQH1E9TmqzJkkBZpHXlAH7Yw,1840
3
3
  rwe/assets/Arrowhead_Pharmaceuticals_logo.png,sha256=C2mAn6GG4gArds4sBnqM5LcxhuZgujXjwGiZxIuxbLo,51053
4
4
  rwe/clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- rwe/clients/aou.py,sha256=vhjoUZAVZUl5K_mSJLYg3x8OvNi4gAMdwWEYXlycR9k,9401
6
- rwe/clients/azn.py,sha256=6zwEv0IAgBA-FcI2glGerA9M6pzdKQx7M5M4HZI8HQs,7541
7
- rwe/clients/genebass.py,sha256=OkF0_J4lmiujWlffsBlAM3uKxKOCzi7_3f_ehju_tPE,6103
5
+ rwe/clients/aou.py,sha256=YHp1QbUXBAHR6OrngggOj6-NVsnJ7x5-K1Da7UnZbVY,10047
6
+ rwe/clients/azn.py,sha256=eQ3WKepK5xNk9JVaXNACTJNsbW2DXWHqermVV51YcOM,7441
7
+ rwe/clients/genebass.py,sha256=HzaKCkNBubf0-qCx1g_DcR4baSqsM0OfSmKoupV7RPs,6274
8
8
  rwe/clients/hgnc.py,sha256=ZabNiMgzwu4rCVCptbgUb38qHsL9cHlsQX7s6mZA8Nk,2015
9
9
  rwe/parsers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  rwe/parsers/aou/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  rwe/parsers/aou/collect.py,sha256=3j9S0vg3s5u-lJYhP9gdJA_SJVUTUld-i8M1mS-qg-0,13610
12
- rwe/parsers/aou/config.py,sha256=_BdQohVgSeLNIkoLBQ4XIgo2ucep6NDU8k0vGKgONj8,27018
12
+ rwe/parsers/aou/config.py,sha256=7O8NhrxOAeDJnKYsiQBgufNkxo_O6nRPSrhJ49pteLk,27017
13
13
  rwe/parsers/aou/process.py,sha256=q-H12OQdwBZMqWxuDo389m6WCJb9Qsp5ZIwVc2MHqu4,3683
14
14
  rwe/plots/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
15
  rwe/plots/clinical.py,sha256=dBgdrFog-4gWJyJphoObSuoPtS7Q4wOprWyXMcDD6Dw,7738
@@ -18,10 +18,10 @@ rwe/plots/measurements.py,sha256=Z7GG4SMXD3ExGGJF6LvmZ_XwvMwGB_6FFk7nxz_8fr8,328
18
18
  rwe/plots/surveys.py,sha256=2SiNBnjLQL2V4jfeMTIj2y2v7y7Wh4kLji2dnEJ0cdo,6672
19
19
  rwe/plots/variant_info.py,sha256=KLUnefwmSxcmOn7mkNBcxvJdpNN4i4F9SZ0SZGlNrvk,5362
20
20
  rwe/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
- rwe/utils/helpers.py,sha256=t3fmx2OsFx3fvg2uZggagm5LS-PE7J3Yr7Ew3VJUsnA,4336
22
- rwe/utils/report.py,sha256=Vyfle1aOoCkqtVeBHAzCdb6hgR0sQZn_qQ4szUw_A3w,4658
23
- rwe-0.0.2.dist-info/licenses/LICENSE,sha256=0PfJPAoyFVWY4L80aEcQyjy4PojxzfqcOenSuXdhgBg,1072
24
- rwe-0.0.2.dist-info/METADATA,sha256=1lz1eESuIy78YTClKI8Kug_f7AKq57QWDxfYSKjGfcs,23601
25
- rwe-0.0.2.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
26
- rwe-0.0.2.dist-info/top_level.txt,sha256=zwX0M3dfnEfklZqvvBPQXiJykChpiqt219EolC3WFRc,4
27
- rwe-0.0.2.dist-info/RECORD,,
21
+ rwe/utils/helpers.py,sha256=4yeNeaK_29t9uZL4sZr9kHtUf5rJ5P6cAuWY4BT-hvk,5957
22
+ rwe/utils/report.py,sha256=dAWWeB1eaO1CD7fn1RbBt4R4dBdl9LyuQe6uPj4TAKI,4693
23
+ rwe-0.0.4.dist-info/licenses/LICENSE,sha256=0PfJPAoyFVWY4L80aEcQyjy4PojxzfqcOenSuXdhgBg,1072
24
+ rwe-0.0.4.dist-info/METADATA,sha256=va0uTJb7uNfqmUGfK1qLOclKYbAW-0aAC3SY3zCeK9o,23601
25
+ rwe-0.0.4.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
26
+ rwe-0.0.4.dist-info/top_level.txt,sha256=zwX0M3dfnEfklZqvvBPQXiJykChpiqt219EolC3WFRc,4
27
+ rwe-0.0.4.dist-info/RECORD,,
File without changes