def filter_tags(row, filt, operator): tags = row["tags"] tags[:] = [d for d in tags if isinstance(d, str)] if operator == "All": if all(elem in tags for elem in filt): return True s1 = set(tags) s2 = set(filt) if operator == "Any": if bool(s1 & s2): return True if operator == "None": if len(s1.intersection(s2)) == 0: return True return False def filter_pipeline_data(data, modality, pipeline, library,framework, tags, operator): data = data[data['pipeline'].notna()] if modality != "All": data = data[data["modality"] == modality.lower()] if pipeline != "all": data = data[data["pipeline"] == pipeline] if library != "all" and library != "not transformers": data = data[data["library"] == library] if library == "not transformers": data = data[data["library"] != "transformers"] if framework != "all": print(framework) data = data[data[framework] == 1] if tags != []: data = data[data.apply(filter_tags, axis=1, filt=tags, operator=operator)] tags = data["tags"].explode() tags = tags[tags.notna()].value_counts().rename_axis("tag").to_frame('counts').reset_index() s = tags["tag"] s = s[s.apply(type) == str] return data, s.unique()