Skip to content

Commit 6065c1a

Browse files
committed
Make more compact float literals
1 parent dc3144a commit 6065c1a

2 files changed

Lines changed: 52 additions & 4 deletions

File tree

corpus_test/generate_report.py

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22
import os
33
import sys
44
from dataclasses import dataclass, field
5-
from typing import Iterable, Callable
5+
from typing import Iterable
66

77
from result import Result, ResultReader
88

9+
ENHANCED_REPORT = False
10+
911
@dataclass
1012
class ResultSet:
1113
python_version: str
@@ -194,6 +196,40 @@ def format_size_change_detail() -> str:
194196
f'| {format_difference(summary.exception(), base_summary.exception())} '
195197
)
196198

199+
if ENHANCED_REPORT:
200+
yield '''
201+
## Larger than original
202+
203+
| Corpus Entry | Original Size | Minified Size |
204+
|--------------|--------------:|--------------:|'''
205+
206+
for python_version in ['3.11']:
207+
summary = result_summary(results_dir, python_version, minifier_sha)
208+
larger_than_original = sorted(summary.larger_than_original(), key=lambda result: result.original_size)
209+
210+
for entry in larger_than_original:
211+
yield f'| {entry.corpus_entry} | {entry.original_size} | {entry.minified_size} ({entry.minified_size - entry.original_size:+}) |'
212+
213+
yield '''
214+
## Top 10 Larger than base
215+
216+
| Corpus Entry | Original Size | Minified Size |
217+
|--------------|--------------:|--------------:|'''
218+
219+
there_are_some_larger_than_base = False
220+
221+
for python_version in ['3.11']:
222+
summary = result_summary(results_dir, python_version, minifier_sha)
223+
base_summary = result_summary(results_dir, python_version, base_sha)
224+
larger_than_original = sorted(summary.compare_size_increase(base_summary), key=lambda result: result.original_size)[:10]
225+
226+
for entry in larger_than_original:
227+
there_are_some_larger_than_base = True
228+
yield f'| {entry.corpus_entry} | {entry.original_size} | {entry.minified_size} ({entry.minified_size - base_summary.entries[entry.corpus_entry].minified_size:+}) |'
229+
230+
if not there_are_some_larger_than_base:
231+
yield '| N/A | N/A | N/A |'
232+
197233
def main():
198234
parser = argparse.ArgumentParser(description='Generate a test report for a given python-minifier ref')
199235
parser.add_argument('results_dir', type=str, help='Path to results directory', default='results')

src/python_minifier/expression_printer.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import ast
2+
import re
23
import sys
34

45
from python_minifier.util import is_ast_node
@@ -98,7 +99,7 @@ def visit_Unknown(self, node):
9899
# region Literals
99100

100101
def visit_Constant(self, node):
101-
if node.value in [None, True, False]:
102+
if node.value is None or node.value is True or node.value is False:
102103
return self.visit_NameConstant(node)
103104
elif isinstance(node.value, (int, float, complex)):
104105
return self.visit_Num(node)
@@ -133,8 +134,19 @@ def visit_Num(self, node):
133134
if len(h) < len(v):
134135
v = h
135136

136-
if v.startswith('0.'):
137-
v = v[1:]
137+
# Python doesn't print very compact float literals,
138+
# so we'll try to make them a bit more compact
139+
if isinstance(node.n, float):
140+
v = v.replace('e+', 'e')
141+
142+
add_e = re.match(r'^(\d+?)(0+).0$', v)
143+
if add_e:
144+
v = add_e.group(1) + 'e' + str(len(add_e.group(2)))
145+
146+
if v.startswith('0.'):
147+
v = v[1:]
148+
elif v.endswith('.0'):
149+
v = v[:-1]
138150

139151
self.code += v
140152

0 commit comments

Comments
 (0)