1# Licensed to the Apache Software Foundation (ASF) under one 2# or more contributor license agreements. See the NOTICE file 3# distributed with this work for additional information 4# regarding copyright ownership. The ASF licenses this file 5# to you under the Apache License, Version 2.0 (the 6# "License"); you may not use this file except in compliance 7# with the License. You may obtain a copy of the License at 8# 9# http://www.apache.org/licenses/LICENSE-2.0 10# 11# Unless required by applicable law or agreed to in writing, 12# software distributed under the License is distributed on an 13# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14# KIND, either express or implied. See the License for the 15# specific language governing permissions and limitations 16# under the License. 17"""Register utilities for external codegen.""" 18_PATTERN_TABLES = {} 19 20 21def register_pattern_table(compiler, table=None): 22 """Register a pattern table for an external compiler. 23 24 Pattern tables are used to create composite functions. 25 See the MergeComposite pass. 26 27 Parameters 28 ---------- 29 compiler : str 30 The name of compiler 31 32 table : function, optional 33 A function that returns the pattern table 34 35 Returns 36 ------- 37 fregister : function 38 Register function if value is not specified. 39 """ 40 41 def _register(t): 42 """internal register function""" 43 _PATTERN_TABLES[compiler] = t() 44 return t 45 46 return _register(table) if table is not None else _register 47 48 49def get_pattern_table(compiler): 50 """Get the pattern table associated with a compiler (if it's registered).""" 51 return _PATTERN_TABLES[compiler] if compiler in _PATTERN_TABLES else None 52