MCPcopy Index your code
hub / github.com/numpy/numpy / expand_sub

Function expand_sub

numpy/f2py/_src_pyf.py:129–189  ·  view source on GitHub ↗
(substr, names)

Source from the content-addressed store, hash-verified

127
128template_name_re = re.compile(r'\A\s*(\w[\w\d]*)\s*\Z')
129def expand_sub(substr, names):
130 substr = substr.replace(r'\>', '@rightarrow@')
131 substr = substr.replace(r'\<', '@leftarrow@')
132 lnames = find_repl_patterns(substr)
133 substr = named_re.sub(r"<\1>", substr) # get rid of definition templates
134
135 def listrepl(mobj):
136 thelist = conv(mobj.group(1).replace(r'\,', '@comma@'))
137 if template_name_re.match(thelist):
138 return f"<{thelist}>"
139 name = None
140 for key in lnames.keys(): # see if list is already in dictionary
141 if lnames[key] == thelist:
142 name = key
143 if name is None: # this list is not in the dictionary yet
144 name = unique_key(lnames)
145 lnames[name] = thelist
146 return f"<{name}>"
147
148 # convert all lists to named templates
149 # new names are constructed as needed
150 substr = list_re.sub(listrepl, substr)
151
152 numsubs = None
153 base_rule = None
154 rules = {}
155 for r in template_re.findall(substr):
156 if r not in rules:
157 thelist = lnames.get(r, names.get(r, None))
158 if thelist is None:
159 raise ValueError(f'No replicates found for <{r}>')
160 if r not in names and not thelist.startswith('_'):
161 names[r] = thelist
162 rule = [i.replace('@comma@', ',') for i in thelist.split(',')]
163 num = len(rule)
164
165 if numsubs is None:
166 numsubs = num
167 rules[r] = rule
168 base_rule = r
169 elif num == numsubs:
170 rules[r] = rule
171 else:
172 rules_base_rule = ','.join(rules[base_rule])
173 print("Mismatch in number of replacements "
174 f"(base <{base_rule}={rules_base_rule}>) "
175 f"for <{r}={thelist}>. Ignoring.")
176 if not rules:
177 return substr
178
179 def namerepl(mobj):
180 name = mobj.group(1)
181 return rules.get(name, (k + 1) * [name])[k]
182
183 newstr = ''
184 for k in range(numsubs):
185 newstr += template_re.sub(namerepl, substr) + '\n\n'
186

Callers 1

process_strFunction · 0.85

Calls 6

find_repl_patternsFunction · 0.85
replaceMethod · 0.80
startswithMethod · 0.80
splitMethod · 0.80
joinMethod · 0.80
getMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…