Best Python code snippet using prospector_python
search_util.py
Source:search_util.py  
1import logging2from galaxy import eggs3eggs.require('SQLAlchemy')4from sqlalchemy import and_, false, true5log = logging.getLogger( __name__ )6def in_tool_dict( tool_dict, exact_matches_checked, tool_id=None, tool_name=None, tool_version=None ):7    found = False8    if tool_id and not tool_name and not tool_version:9        tool_dict_tool_id = tool_dict[ 'id' ].lower()10        found = ( tool_id == tool_dict_tool_id ) or \11                ( not exact_matches_checked and tool_dict_tool_id.find( tool_id ) >= 0 )12    elif tool_name and not tool_id and not tool_version:13        tool_dict_tool_name = tool_dict[ 'name' ].lower()14        found = ( tool_name == tool_dict_tool_name ) or \15                ( not exact_matches_checked and tool_dict_tool_name.find( tool_name ) >= 0 )16    elif tool_version and not tool_id and not tool_name:17        tool_dict_tool_version = tool_dict[ 'version' ].lower()18        found = ( tool_version == tool_dict_tool_version ) or \19                ( not exact_matches_checked and tool_dict_tool_version.find( tool_version ) >= 0 )20    elif tool_id and tool_name and not tool_version:21        tool_dict_tool_id = tool_dict[ 'id' ].lower()22        tool_dict_tool_name = tool_dict[ 'name' ].lower()23        found = ( tool_id == tool_dict_tool_id and tool_name == tool_dict_tool_name ) or \24                ( not exact_matches_checked and tool_dict_tool_id.find( tool_id ) >= 0 and tool_dict_tool_name.find( tool_name ) >= 0 )25    elif tool_id and tool_version and not tool_name:26        tool_dict_tool_id = tool_dict[ 'id' ].lower()27        tool_dict_tool_version = tool_dict[ 'version' ].lower()28        found = ( tool_id == tool_dict_tool_id and tool_version == tool_dict_tool_version ) or \29                ( not exact_matches_checked and tool_dict_tool_id.find( tool_id ) >= 0 and tool_dict_tool_version.find( tool_version ) >= 0 )30    elif tool_version and tool_name and not tool_id:31        tool_dict_tool_version = tool_dict[ 'version' ].lower()32        tool_dict_tool_name = tool_dict[ 'name' ].lower()33        found = ( tool_version == tool_dict_tool_version and tool_name == tool_dict_tool_name ) or \34                ( not exact_matches_checked and tool_dict_tool_version.find( tool_version ) >= 0 and tool_dict_tool_name.find( tool_name ) >= 0 )35    elif tool_version and tool_name and tool_id:36        tool_dict_tool_version = tool_dict[ 'version' ].lower()37        tool_dict_tool_name = tool_dict[ 'name' ].lower()38        tool_dict_tool_id = tool_dict[ 'id' ].lower()39        found = ( tool_version == tool_dict_tool_version and40                  tool_name == tool_dict_tool_name and41                  tool_id == tool_dict_tool_id ) or \42                ( not exact_matches_checked and43                  tool_dict_tool_version.find( tool_version ) >= 0 and44                  tool_dict_tool_name.find( tool_name ) >= 0 and45                  tool_dict_tool_id.find( tool_id ) >= 0 )46    return found47def in_workflow_dict( workflow_dict, exact_matches_checked, workflow_name ):48    workflow_dict_workflow_name = workflow_dict[ 'name' ].lower()49    return ( workflow_name == workflow_dict_workflow_name ) or \50           ( not exact_matches_checked and workflow_dict_workflow_name.find( workflow_name ) >= 0 )51def make_same_length( list1, list2 ):52    # If either list is 1 item, we'll append to it until its length is the same as the other.53    if len( list1 ) == 1:54        for i in range( 1, len( list2 ) ):55            list1.append( list1[ 0 ] )56    elif len( list2 ) == 1:57        for i in range( 1, len( list1 ) ):58            list2.append( list2[ 0 ] )59    return list1, list260def search_ids_names( tool_dict, exact_matches_checked, match_tuples, repository_metadata, tool_ids, tool_names ):61    for i, tool_id in enumerate( tool_ids ):62        tool_name = tool_names[ i ]63        if in_tool_dict( tool_dict, exact_matches_checked, tool_id=tool_id, tool_name=tool_name ):64            match_tuples.append( ( repository_metadata.repository_id, repository_metadata.changeset_revision ) )65    return match_tuples66def search_ids_versions( tool_dict, exact_matches_checked, match_tuples, repository_metadata, tool_ids, tool_versions ):67    for i, tool_id in enumerate( tool_ids ):68        tool_version = tool_versions[ i ]69        if in_tool_dict( tool_dict, exact_matches_checked, tool_id=tool_id, tool_version=tool_version ):70            match_tuples.append( ( repository_metadata.repository_id, repository_metadata.changeset_revision ) )71    return match_tuples72def search_names_versions( tool_dict, exact_matches_checked, match_tuples, repository_metadata, tool_names, tool_versions ):73    for i, tool_name in enumerate( tool_names ):74        tool_version = tool_versions[ i ]75        if in_tool_dict( tool_dict, exact_matches_checked, tool_name=tool_name, tool_version=tool_version ):76            match_tuples.append( ( repository_metadata.repository_id, repository_metadata.changeset_revision ) )77    return match_tuples78def search_repository_metadata( app, exact_matches_checked, tool_ids='', tool_names='', tool_versions='',79                                workflow_names='', all_workflows=False ):80    sa_session = app.model.context.current81    match_tuples = []82    ok = True83    if tool_ids or tool_names or tool_versions:84        for repository_metadata in sa_session.query( app.model.RepositoryMetadata ) \85                                             .filter( app.model.RepositoryMetadata.table.c.includes_tools == true() ) \86                                             .join( app.model.Repository ) \87                                             .filter( and_( app.model.Repository.table.c.deleted == false(),88                                                            app.model.Repository.table.c.deprecated == false() ) ):89            metadata = repository_metadata.metadata90            if metadata:91                tools = metadata.get( 'tools', [] )92                for tool_dict in tools:93                    if tool_ids and not tool_names and not tool_versions:94                        for tool_id in tool_ids:95                            if in_tool_dict( tool_dict, exact_matches_checked, tool_id=tool_id ):96                                match_tuples.append( ( repository_metadata.repository_id, repository_metadata.changeset_revision ) )97                    elif tool_names and not tool_ids and not tool_versions:98                        for tool_name in tool_names:99                            if in_tool_dict( tool_dict, exact_matches_checked, tool_name=tool_name ):100                                match_tuples.append( ( repository_metadata.repository_id, repository_metadata.changeset_revision ) )101                    elif tool_versions and not tool_ids and not tool_names:102                        for tool_version in tool_versions:103                            if in_tool_dict( tool_dict, exact_matches_checked, tool_version=tool_version ):104                                match_tuples.append( ( repository_metadata.repository_id, repository_metadata.changeset_revision ) )105                    elif tool_ids and tool_names and not tool_versions:106                        if len( tool_ids ) == len( tool_names ):107                            match_tuples = search_ids_names( tool_dict, exact_matches_checked, match_tuples, repository_metadata, tool_ids, tool_names )108                        elif len( tool_ids ) == 1 or len( tool_names ) == 1:109                            tool_ids, tool_names = make_same_length( tool_ids, tool_names )110                            match_tuples = search_ids_names( tool_dict, exact_matches_checked, match_tuples, repository_metadata, tool_ids, tool_names )111                        else:112                            ok = False113                    elif tool_ids and tool_versions and not tool_names:114                        if len( tool_ids ) == len( tool_versions ):115                            match_tuples = search_ids_versions( tool_dict, exact_matches_checked, match_tuples, repository_metadata, tool_ids, tool_versions )116                        elif len( tool_ids ) == 1 or len( tool_versions ) == 1:117                            tool_ids, tool_versions = make_same_length( tool_ids, tool_versions )118                            match_tuples = search_ids_versions( tool_dict, exact_matches_checked, match_tuples, repository_metadata, tool_ids, tool_versions )119                        else:120                            ok = False121                    elif tool_versions and tool_names and not tool_ids:122                        if len( tool_versions ) == len( tool_names ):123                            match_tuples = search_names_versions( tool_dict, exact_matches_checked, match_tuples, repository_metadata, tool_names, tool_versions )124                        elif len( tool_versions ) == 1 or len( tool_names ) == 1:125                            tool_versions, tool_names = make_same_length( tool_versions, tool_names )126                            match_tuples = search_names_versions( tool_dict, exact_matches_checked, match_tuples, repository_metadata, tool_names, tool_versions )127                        else:128                            ok = False129                    elif tool_versions and tool_names and tool_ids:130                        if len( tool_versions ) == len( tool_names ) and len( tool_names ) == len( tool_ids ):131                            for i, tool_version in enumerate( tool_versions ):132                                tool_name = tool_names[ i ]133                                tool_id = tool_ids[ i ]134                                if in_tool_dict( tool_dict, exact_matches_checked, tool_id=tool_id, tool_name=tool_name, tool_version=tool_version ):135                                    match_tuples.append( ( repository_metadata.repository_id, repository_metadata.changeset_revision ) )136                        else:137                            ok = False138    elif workflow_names or all_workflows:139        for repository_metadata in sa_session.query( app.model.RepositoryMetadata ) \140                                             .filter( app.model.RepositoryMetadata.table.c.includes_workflows == true() ) \141                                             .join( app.model.Repository ) \142                                             .filter( and_( app.model.Repository.table.c.deleted == false(),143                                                            app.model.Repository.table.c.deprecated == false() ) ):144            metadata = repository_metadata.metadata145            if metadata:146                # metadata[ 'workflows' ] is a list of tuples where each contained tuple is147                # [ <relative path to the .ga file in the repository>, <exported workflow dict> ]148                if workflow_names:149                    workflow_tups = metadata.get( 'workflows', [] )150                    workflows = [ workflow_tup[1] for workflow_tup in workflow_tups ]151                    for workflow_dict in workflows:152                        for workflow_name in workflow_names:153                            if in_workflow_dict( workflow_dict, exact_matches_checked, workflow_name ):154                                match_tuples.append( ( repository_metadata.repository_id, repository_metadata.changeset_revision ) )155                elif all_workflows:156                    match_tuples.append( ( repository_metadata.repository_id, repository_metadata.changeset_revision ) )...mpi.py
Source:mpi.py  
1# Copyright 2013-2019 The Meson development team2# Licensed under the Apache License, Version 2.0 (the "License");3# you may not use this file except in compliance with the License.4# You may obtain a copy of the License at5#     http://www.apache.org/licenses/LICENSE-2.06# Unless required by applicable law or agreed to in writing, software7# distributed under the License is distributed on an "AS IS" BASIS,8# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.9# See the License for the specific language governing permissions and10# limitations under the License.11import functools12import typing as T13import os14import re15from .base import (DependencyMethods, PkgConfigDependency, factory_methods,16                   ConfigToolDependency, detect_compiler, ExternalDependency)17from ..environment import detect_cpu_family18if T.TYPE_CHECKING:19    from .base import DependencyType20    from ..compilers import Compiler21    from ..environment import Environment, MachineChoice22@factory_methods({DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL, DependencyMethods.SYSTEM})23def mpi_factory(env: 'Environment', for_machine: 'MachineChoice',24                kwargs: T.Dict[str, T.Any], methods: T.List[DependencyMethods]) -> T.List['DependencyType']:25    language = kwargs.get('language', 'c')26    if language not in {'c', 'cpp', 'fortran'}:27        # OpenMPI doesn't work without any other languages28        return []29    candidates = []30    compiler = detect_compiler('mpi', env, for_machine, language)31    compiler_is_intel = compiler.get_id() in {'intel', 'intel-cl'}32    # Only OpenMPI has pkg-config, and it doesn't work with the intel compilers33    if DependencyMethods.PKGCONFIG in methods and not compiler_is_intel:34        pkg_name = None35        if language == 'c':36            pkg_name = 'ompi-c'37        elif language == 'cpp':38            pkg_name = 'ompi-cxx'39        elif language == 'fortran':40            pkg_name = 'ompi-fort'41        candidates.append(functools.partial(42            PkgConfigDependency, pkg_name, env, kwargs, language=language))43    if DependencyMethods.CONFIG_TOOL in methods:44        nwargs = kwargs.copy()45        if compiler_is_intel:46            if env.machines[for_machine].is_windows():47                nwargs['version_arg'] = '-v'48                nwargs['returncode_value'] = 349            if language == 'c':50                tool_names = [os.environ.get('I_MPI_CC'), 'mpiicc']51            elif language == 'cpp':52                tool_names = [os.environ.get('I_MPI_CXX'), 'mpiicpc']53            elif language == 'fortran':54                tool_names = [os.environ.get('I_MPI_F90'), 'mpiifort']55            cls = IntelMPIConfigToolDependency  # type: T.Type[ConfigToolDependency]56        else: # OpenMPI, which doesn't work with intel57            #58            # We try the environment variables for the tools first, but then59            # fall back to the hardcoded names60            if language == 'c':61                tool_names = [os.environ.get('MPICC'), 'mpicc']62            elif language == 'cpp':63                tool_names = [os.environ.get('MPICXX'), 'mpic++', 'mpicxx', 'mpiCC']64            elif language == 'fortran':65                tool_names = [os.environ.get(e) for e in ['MPIFC', 'MPIF90', 'MPIF77']]66                tool_names.extend(['mpifort', 'mpif90', 'mpif77'])67            cls = OpenMPIConfigToolDependency68        tool_names = [t for t in tool_names if t]  # remove empty environment variables69        assert tool_names70        nwargs['tools'] = tool_names71        candidates.append(functools.partial(72            cls, tool_names[0], env, nwargs, language=language))73    if DependencyMethods.SYSTEM in methods:74        candidates.append(functools.partial(75            MSMPIDependency, 'msmpi', env, kwargs, language=language))76    return candidates77class _MPIConfigToolDependency(ConfigToolDependency):78    def _filter_compile_args(self, args: T.Sequence[str]) -> T.List[str]:79        """80        MPI wrappers return a bunch of garbage args.81        Drop -O2 and everything that is not needed.82        """83        result = []84        multi_args = ('-I', )85        if self.language == 'fortran':86            fc = self.env.coredata.compilers[self.for_machine]['fortran']87            multi_args += fc.get_module_incdir_args()88        include_next = False89        for f in args:90            if f.startswith(('-D', '-f') + multi_args) or f == '-pthread' \91                    or (f.startswith('-W') and f != '-Wall' and not f.startswith('-Werror')):92                result.append(f)93                if f in multi_args:94                    # Path is a separate argument.95                    include_next = True96            elif include_next:97                include_next = False98                result.append(f)99        return result100    def _filter_link_args(self, args: T.Sequence[str]) -> T.List[str]:101        """102        MPI wrappers return a bunch of garbage args.103        Drop -O2 and everything that is not needed.104        """105        result = []106        include_next = False107        for f in args:108            if self._is_link_arg(f):109                result.append(f)110                if f in ('-L', '-Xlinker'):111                    include_next = True112            elif include_next:113                include_next = False114                result.append(f)115        return result116    def _is_link_arg(self, f: str) -> bool:117        if self.clib_compiler.id == 'intel-cl':118            return f == '/link' or f.startswith('/LIBPATH') or f.endswith('.lib')   # always .lib whether static or dynamic119        else:120            return (f.startswith(('-L', '-l', '-Xlinker')) or121                    f == '-pthread' or122                    (f.startswith('-W') and f != '-Wall' and not f.startswith('-Werror')))123class IntelMPIConfigToolDependency(_MPIConfigToolDependency):124    """Wrapper around Intel's mpiicc and friends."""125    version_arg = '-v'  # --version is not the same as -v126    def __init__(self, name: str, env: 'Environment', kwargs: T.Dict[str, T.Any],127                 language: T.Optional[str] = None):128        super().__init__(name, env, kwargs, language=language)129        if not self.is_found:130            return131        args = self.get_config_value(['-show'], 'link and compile args')132        self.compile_args = self._filter_compile_args(args)133        self.link_args = self._filter_link_args(args)134    def _sanitize_version(self, out: str) -> str:135        v = re.search(r'(\d{4}) Update (\d)', out)136        if v:137            return '{}.{}'.format(v.group(1), v.group(2))138        return out139class OpenMPIConfigToolDependency(_MPIConfigToolDependency):140    """Wrapper around OpenMPI mpicc and friends."""141    version_arg = '--showme:version'142    def __init__(self, name: str, env: 'Environment', kwargs: T.Dict[str, T.Any],143                 language: T.Optional[str] = None):144        super().__init__(name, env, kwargs, language=language)145        if not self.is_found:146            return147        c_args = self.get_config_value(['--showme:compile'], 'compile_args')148        self.compile_args = self._filter_compile_args(c_args)149        l_args = self.get_config_value(['--showme:link'], 'link_args')150        self.link_args = self._filter_link_args(l_args)151    def _sanitize_version(self, out: str) -> str:152        v = re.search(r'\d+.\d+.\d+', out)153        if v:154            return v.group(0)155        return out156class MSMPIDependency(ExternalDependency):157    """The Microsoft MPI."""158    def __init__(self, name: str, env: 'Environment', kwargs: T.Dict[str, T.Any],159                 language: T.Optional[str] = None):160        super().__init__(name, env, kwargs, language=language)161        # MSMPI only supports the C API162        if language not in {'c', 'fortran', None}:163            self.is_found = False164            return165        # MSMPI is only for windows, obviously166        if not self.env.machines[self.for_machine].is_windows():167            return168        incdir = os.environ.get('MSMPI_INC')169        arch = detect_cpu_family(self.env.coredata.compilers.host)170        libdir = None171        if arch == 'x86':172            libdir = os.environ.get('MSMPI_LIB32')173            post = 'x86'174        elif arch == 'x86_64':175            libdir = os.environ.get('MSMPI_LIB64')176            post = 'x64'177        if libdir is None or incdir is None:178            self.is_found = False179            return180        self.is_found = True181        self.link_args = ['-l' + os.path.join(libdir, 'msmpi')]182        self.compile_args = ['-I' + incdir, '-I' + os.path.join(incdir, post)]183        if self.language == 'fortran':...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
