# bottleneck.src package

## Submodules

## bottleneck.src.bn_config module

Based on numpy’s approach to exposing compiler features via a config header. Unfortunately that file is not exposed, so re-implement the portions we need.

bottleneck.src.bn_config.check_gcc_function_attribute(cmd, attribute, name)

  Return True if the given function attribute is supported.

bottleneck.src.bn_config.check_inline(cmd)

  Return the inline identifier (may be empty).

bottleneck.src.bn_config.create_config_h(config)

bottleneck.src.bn_config.is_clang(cmd)

bottleneck.src.bn_config.is_gcc(cmd)

## bottleneck.src.bn_template module

bottleneck.src.bn_template.dtype_info(lines: List[str]) → List[str]

bottleneck.src.bn_template.dtype_templating(lines: List[str]) → List[str]

bottleneck.src.bn_template.expand_dtypes(func_str: str, dtypes: List[str]) → List[str]

bottleneck.src.bn_template.expand_functions_dtype(lines: List[str]) → List[str]

bottleneck.src.bn_template.expand_functions_repeat(lines: List[str]) → List[str]

bottleneck.src.bn_template.expand_repeat(func_str: str, repeat_dict: Dict[str, str]) → List[str]

bottleneck.src.bn_template.first_occurence(pattern: Pattern[str], lines: List[str]) → int

bottleneck.src.bn_template.make_c_files(dirpath: str | None = None, modules: List[str] | None = None) → None

bottleneck.src.bn_template.next_block(lines: List[str], index: int, begin_pattern: Pattern[str], end_pattern: Pattern[str]) → Tuple[int | None, int | None]

bottleneck.src.bn_template.quote_string(lines: List[str]) → List[str]

bottleneck.src.bn_template.repeat_info(lines: List[str]) → Dict[str, str]

bottleneck.src.bn_template.repeat_templating(lines: List[str]) → List[str]

bottleneck.src.bn_template.string_templating(lines: List[str]) → List[str]

bottleneck.src.bn_template.template(src_str: str) → str