From e38c9730438d2a131bd03641cf9a34b7d20ca739 Mon Sep 17 00:00:00 2001 From: seanzhangkx8 <106214464+seanzhangkx8@users.noreply.github.com> Date: Tue, 11 Apr 2023 23:16:16 -0400 Subject: [PATCH 01/20] fix use of mutability in Coordination transformer. --- convokit/coordination/coordination.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/convokit/coordination/coordination.py b/convokit/coordination/coordination.py index 1fb712b1..31411fb5 100644 --- a/convokit/coordination/coordination.py +++ b/convokit/coordination/coordination.py @@ -111,7 +111,11 @@ def transform(self, corpus: Corpus) -> Corpus: for (speaker, target), score in pair_scores.items(): if self.coordination_attribute_name not in speaker.meta: speaker.meta[self.coordination_attribute_name] = {} - speaker.meta[self.coordination_attribute_name][target.id] = score + # Avoid mutability of dict in metadata fields + temp_dict = {} + for (k, v) in speaker.meta[self.coordination_attribute_name]: + temp_dict[k] = v + speaker.meta[self.coordination_attribute_name] = temp_dict assert isinstance(speaker, Speaker) From 331c37952b80357d8f34764a7ab84292b854c71c Mon Sep 17 00:00:00 2001 From: seanzhangkx8 <106214464+seanzhangkx8@users.noreply.github.com> Date: Tue, 11 Apr 2023 23:17:08 -0400 Subject: [PATCH 02/20] run black formatter --- convokit/bag_of_words/bow_transformer.py | 1 - convokit/coordination/coordination.py | 2 +- convokit/expected_context_framework/col_normed_tfidf.py | 1 - .../expected_context_framework/dual_context_wrapper.py | 1 - .../expected_context_framework/expected_context_model.py | 3 --- .../expected_context_model_pipeline.py | 2 -- convokit/forecaster/CRAFT/CRAFTUtil.py | 1 + convokit/forecaster/CRAFTModel.py | 3 --- convokit/forecaster/cumulativeBoW.py | 1 - convokit/forecaster/forecaster.py | 1 - convokit/model/corpus.py | 4 +--- convokit/model/corpusComponent.py | 4 +++- convokit/paired_prediction/pairedPrediction.py | 1 - convokit/paired_prediction/pairedVectorPrediction.py | 1 - convokit/phrasing_motifs/censorNouns.py | 1 - convokit/phrasing_motifs/phrasingMotifs.py | 4 ---- convokit/phrasing_motifs/questionSentences.py | 2 -- convokit/politenessStrategies/politenessStrategies.py | 3 --- convokit/politeness_collections/marker_utils.py | 1 - .../politeness_api/features/vectorizer.py | 1 - .../politeness_cscw_zh/strategy_extractor.py | 2 +- .../politeness_local/strategy_extractor.py | 7 ------- convokit/prompt_types/promptTypes.py | 2 -- convokit/speakerConvoDiversity/speakerConvoDiversity.py | 1 - convokit/speakerConvoDiversity/speakerConvoDiversity2.py | 1 - convokit/text_processing/textCleaner.py | 1 - convokit/text_processing/textParser.py | 7 ------- convokit/text_processing/textProcessor.py | 2 -- convokit/text_processing/textToArcs.py | 1 - convokit/util.py | 5 ----- 30 files changed, 7 insertions(+), 60 deletions(-) diff --git a/convokit/bag_of_words/bow_transformer.py b/convokit/bag_of_words/bow_transformer.py index c902633f..9e9cb438 100644 --- a/convokit/bag_of_words/bow_transformer.py +++ b/convokit/bag_of_words/bow_transformer.py @@ -36,7 +36,6 @@ def __init__( text_func: Callable[[CorpusComponent], str] = None, vectorizer=None, ): - if vectorizer is None: print("Initializing default unigram CountVectorizer...", end="") self.vectorizer = CV( diff --git a/convokit/coordination/coordination.py b/convokit/coordination/coordination.py index 31411fb5..17417af6 100644 --- a/convokit/coordination/coordination.py +++ b/convokit/coordination/coordination.py @@ -113,7 +113,7 @@ def transform(self, corpus: Corpus) -> Corpus: speaker.meta[self.coordination_attribute_name] = {} # Avoid mutability of dict in metadata fields temp_dict = {} - for (k, v) in speaker.meta[self.coordination_attribute_name]: + for k, v in speaker.meta[self.coordination_attribute_name]: temp_dict[k] = v speaker.meta[self.coordination_attribute_name] = temp_dict diff --git a/convokit/expected_context_framework/col_normed_tfidf.py b/convokit/expected_context_framework/col_normed_tfidf.py index c1b6d791..0b6bd3c6 100644 --- a/convokit/expected_context_framework/col_normed_tfidf.py +++ b/convokit/expected_context_framework/col_normed_tfidf.py @@ -22,7 +22,6 @@ class ColNormedTfidfTransformer(Transformer): """ def __init__(self, input_field, output_field="col_normed_tfidf", model=None, **kwargs): - if model is not None: self.tfidf_obj = model.tfidf_obj else: diff --git a/convokit/expected_context_framework/dual_context_wrapper.py b/convokit/expected_context_framework/dual_context_wrapper.py index 0465c915..47a17b4d 100644 --- a/convokit/expected_context_framework/dual_context_wrapper.py +++ b/convokit/expected_context_framework/dual_context_wrapper.py @@ -43,7 +43,6 @@ def __init__( random_state=None, cluster_random_state=None, ): - self.context_fields = context_fields self.output_prefixes = output_prefixes self.vect_field = vect_field diff --git a/convokit/expected_context_framework/expected_context_model.py b/convokit/expected_context_framework/expected_context_model.py index d402f355..817dff6a 100644 --- a/convokit/expected_context_framework/expected_context_model.py +++ b/convokit/expected_context_framework/expected_context_model.py @@ -491,7 +491,6 @@ def __init__( random_state=None, cluster_random_state=None, ): - self.n_svd_dims = n_svd_dims self.snip_first_dim = snip_first_dim self.random_state = random_state @@ -773,7 +772,6 @@ class ClusterWrapper: """ def __init__(self, n_clusters, cluster_names=None, random_state=None): - self.n_clusters = n_clusters self.random_state = random_state @@ -784,7 +782,6 @@ def __init__(self, n_clusters, cluster_names=None, random_state=None): self.km_df = None def fit(self, vects, ids=None): - self.km_model.fit(vects) self.km_df = self.transform(vects, ids) diff --git a/convokit/expected_context_framework/expected_context_model_pipeline.py b/convokit/expected_context_framework/expected_context_model_pipeline.py index dad10fb3..7907e5fc 100644 --- a/convokit/expected_context_framework/expected_context_model_pipeline.py +++ b/convokit/expected_context_framework/expected_context_model_pipeline.py @@ -66,7 +66,6 @@ def __init__( random_state=None, cluster_random_state=None, ): - self.context_field = context_field self.output_prefix = output_prefix @@ -320,7 +319,6 @@ def __init__( random_state=None, cluster_random_state=None, ): - self.vect_field = "col_normed_tfidf" self.share_tfidf_models = share_tfidf_models diff --git a/convokit/forecaster/CRAFT/CRAFTUtil.py b/convokit/forecaster/CRAFT/CRAFTUtil.py index 4be6f296..28dd2d6c 100644 --- a/convokit/forecaster/CRAFT/CRAFTUtil.py +++ b/convokit/forecaster/CRAFT/CRAFTUtil.py @@ -106,6 +106,7 @@ def loadPrecomputedVoc(corpus_name, word2index_url, index2word_url): # Helper functions for preprocessing and tokenizing text + # Turn a Unicode string to plain ASCII, thanks to # https://stackoverflow.com/a/518232/2809427 def unicodeToAscii(s): diff --git a/convokit/forecaster/CRAFTModel.py b/convokit/forecaster/CRAFTModel.py index 13d0bb26..99214454 100644 --- a/convokit/forecaster/CRAFTModel.py +++ b/convokit/forecaster/CRAFTModel.py @@ -73,7 +73,6 @@ def __init__( forecast_prob_attribute_name: str = "pred_score", forecast_prob_feat_name=None, ): - super().__init__( forecast_attribute_name=forecast_attribute_name, forecast_feat_name=forecast_feat_name, @@ -240,7 +239,6 @@ def _train_NN( batch_size, clip, ): # misc arguments - # Zero gradients encoder_optimizer.zero_grad() context_encoder_optimizer.zero_grad() @@ -347,7 +345,6 @@ def _train_iters( n_iteration, validate_every, ): - # create a batch iterator for training data batch_iterator = batchIterator(self.voc, train_pairs, self.options["batch_size"]) diff --git a/convokit/forecaster/cumulativeBoW.py b/convokit/forecaster/cumulativeBoW.py index 133ebdc5..50fe0373 100644 --- a/convokit/forecaster/cumulativeBoW.py +++ b/convokit/forecaster/cumulativeBoW.py @@ -26,7 +26,6 @@ def __init__( forecast_attribute_name: str = "prediction", forecast_prob_attribute_name: str = "score", ): - super().__init__( forecast_attribute_name=forecast_attribute_name, forecast_prob_attribute_name=forecast_prob_attribute_name, diff --git a/convokit/forecaster/forecaster.py b/convokit/forecaster/forecaster.py index cb438655..7d649d49 100644 --- a/convokit/forecaster/forecaster.py +++ b/convokit/forecaster/forecaster.py @@ -33,7 +33,6 @@ def __init__( forecast_attribute_name: str = "forecast", forecast_prob_attribute_name: str = "forecast_prob", ): - assert convo_structure in ["branched", "linear"] self.convo_structure = convo_structure diff --git a/convokit/model/corpus.py b/convokit/model/corpus.py index ac61d0cc..dc59e87d 100644 --- a/convokit/model/corpus.py +++ b/convokit/model/corpus.py @@ -59,7 +59,6 @@ def __init__( storage_type: Optional[str] = None, storage: Optional[StorageManager] = None, ): - self.config = ConvoKitConfig() self.corpus_dirpath = get_corpus_dirpath(filename) @@ -1256,7 +1255,6 @@ def delete_vector_matrix(self, name): del self._vector_matrices[name] def dump_vectors(self, name, dir_name=None): - if (self.corpus_dirpath is None) and (dir_name is None): raise ValueError("Must specify a directory to read from.") if dir_name is None: @@ -1531,7 +1529,7 @@ def from_pandas( """ columns = ["speaker", "id", "timestamp", "conversation_id", "reply_to", "text"] - for (df_type, df) in [ + for df_type, df in [ ("utterances", utterances_df), ("conversations", conversations_df), ("speakers", speakers_df), diff --git a/convokit/model/corpusComponent.py b/convokit/model/corpusComponent.py index 98f3f1d1..83064ab3 100644 --- a/convokit/model/corpusComponent.py +++ b/convokit/model/corpusComponent.py @@ -226,5 +226,7 @@ def __repr__(self): try: return self.obj_type.capitalize() + "(" + str(copy) + ")" - except AttributeError: # for backwards compatibility when corpus objects are saved as binary data, e.g. wikiconv + except ( + AttributeError + ): # for backwards compatibility when corpus objects are saved as binary data, e.g. wikiconv return "(" + str(copy) + ")" diff --git a/convokit/paired_prediction/pairedPrediction.py b/convokit/paired_prediction/pairedPrediction.py index 1f24ac4f..42075bb2 100644 --- a/convokit/paired_prediction/pairedPrediction.py +++ b/convokit/paired_prediction/pairedPrediction.py @@ -37,7 +37,6 @@ def __init__( label_attribute_name: str = "pair_obj_label", pair_orientation_attribute_name: str = "pair_orientation", ): - assert obj_type in ["speaker", "utterance", "conversation"] self.obj_type = obj_type self.clf = ( diff --git a/convokit/paired_prediction/pairedVectorPrediction.py b/convokit/paired_prediction/pairedVectorPrediction.py index 19c9a4d8..8379b389 100644 --- a/convokit/paired_prediction/pairedVectorPrediction.py +++ b/convokit/paired_prediction/pairedVectorPrediction.py @@ -34,7 +34,6 @@ def __init__( label_attribute_name: str = "pair_obj_label", pair_orientation_attribute_name: str = "pair_orientation", ): - assert obj_type in ["speaker", "utterance", "conversation"] self.obj_type = obj_type self.vector_name = vector_name diff --git a/convokit/phrasing_motifs/censorNouns.py b/convokit/phrasing_motifs/censorNouns.py index 218f2b43..629d8c10 100644 --- a/convokit/phrasing_motifs/censorNouns.py +++ b/convokit/phrasing_motifs/censorNouns.py @@ -33,7 +33,6 @@ def _is_noun_ish(tok): def _get_w_det(tok, sent): - if tok["tag"].startswith("W"): return tok["tok"] if len(tok["dn"]) == 0: diff --git a/convokit/phrasing_motifs/phrasingMotifs.py b/convokit/phrasing_motifs/phrasingMotifs.py index ab2348c5..80734f42 100644 --- a/convokit/phrasing_motifs/phrasingMotifs.py +++ b/convokit/phrasing_motifs/phrasingMotifs.py @@ -104,7 +104,6 @@ def _get_sent_arcset_dict(self, corpus): for utterance in corpus.iter_utterances(): if self.fit_filter(utterance): for idx, sent in enumerate(utterance.retrieve_meta(self.input_field)): - sent_dict["%s__%d" % (utterance.id, idx)] = sent.split() return sent_dict @@ -229,7 +228,6 @@ def _get_mini_powerset(itemset, k): def _count_frequent_itemsets( set_dict, min_support, max_naive_itemset_size=5, max_itemset_size=100, verbosity=0 ): - if verbosity > 0: print("counting frequent itemsets for %d sets" % len(set_dict)) itemset_counts = defaultdict(lambda: defaultdict(int)) @@ -319,7 +317,6 @@ def _count_frequent_itemsets( def _make_itemset_tree(itemset_counts, verbosity=0): - if verbosity > 0: print("making itemset tree for %d itemsets" % len(itemset_counts)) @@ -419,7 +416,6 @@ def extract_phrasing_motifs( max_itemset_size=10, verbosity=0, ): - """ standalone function to extract phrasings -- i.e., frequently-occurring collections of dependency-parse arcs (or other token-like objects). diff --git a/convokit/phrasing_motifs/questionSentences.py b/convokit/phrasing_motifs/questionSentences.py index a7f1e082..ddad7458 100644 --- a/convokit/phrasing_motifs/questionSentences.py +++ b/convokit/phrasing_motifs/questionSentences.py @@ -22,7 +22,6 @@ def __init__( input_filter=None, verbosity=0, ): - aux_input = {"input_field": input_field, "filter_field": filter_field, "use_caps": use_caps} TextProcessor.__init__( @@ -36,7 +35,6 @@ def __init__( ) def _get_question_sentences(self, text_entry, aux_input): - text = text_entry[aux_input["input_field"]] parse = text_entry[aux_input["filter_field"]] sents = [] diff --git a/convokit/politenessStrategies/politenessStrategies.py b/convokit/politenessStrategies/politenessStrategies.py index 8aa625fe..56c40116 100755 --- a/convokit/politenessStrategies/politenessStrategies.py +++ b/convokit/politenessStrategies/politenessStrategies.py @@ -43,7 +43,6 @@ def __init__( strategy_collection: str = "politeness_api", verbose: int = 0, ): - self.parse_attribute_name = parse_attribute_name self.strategy_attribute_name = strategy_attribute_name self.marker_attribute_name = marker_attribute_name @@ -76,7 +75,6 @@ def transform( total_utts = len(list(corpus.iter_utterances())) for idx, utt in enumerate(corpus.iter_utterances()): - if self.verbose > 0 and idx > 0 and idx % self.verbose == 0: print("%03d/%03d utterances processed" % (idx, total_utts)) @@ -116,7 +114,6 @@ def transform_utterance( utt = Utterance(text=utt, speaker=Speaker(id="speaker")) if self.parse_attribute_name not in utt.meta: - if spacy_nlp is None: raise ValueError("spacy object required") diff --git a/convokit/politeness_collections/marker_utils.py b/convokit/politeness_collections/marker_utils.py index 56041428..59f9ec0d 100644 --- a/convokit/politeness_collections/marker_utils.py +++ b/convokit/politeness_collections/marker_utils.py @@ -77,7 +77,6 @@ def extract_starter_markers( def extract_regex_strategies(pattern: Pattern, tokens: List[str], sent_idx: int, offset: int = 0): - """ Extract markers for a given strategy based on regex patterns """ diff --git a/convokit/politeness_collections/politeness_api/features/vectorizer.py b/convokit/politeness_collections/politeness_api/features/vectorizer.py index 5097a165..0d7626cf 100644 --- a/convokit/politeness_collections/politeness_api/features/vectorizer.py +++ b/convokit/politeness_collections/politeness_api/features/vectorizer.py @@ -165,7 +165,6 @@ def alphas(s): if __name__ == "__main__": - """ Extract features from test documents """ diff --git a/convokit/politeness_collections/politeness_cscw_zh/strategy_extractor.py b/convokit/politeness_collections/politeness_cscw_zh/strategy_extractor.py index 5d7007ae..4f144c00 100644 --- a/convokit/politeness_collections/politeness_cscw_zh/strategy_extractor.py +++ b/convokit/politeness_collections/politeness_cscw_zh/strategy_extractor.py @@ -32,6 +32,7 @@ CAN_YOU_PATTERN = re.compile(r"[你您]\s?[是可想觉要].+?[吗呢呀?]") COULD_YOU_PATTERN = re.compile(r"[你您]\s?(?P[可想觉要])\s?不\s?(?P=A)") + # strategy functions (regex) def please(sent_parsed: List[Dict], sent_idx: int) -> Dict[str, List]: tokens = [x["tok"] for x in sent_parsed] @@ -94,7 +95,6 @@ def could_you(sent_parsed: List[Dict], sent_idx: int) -> Dict[str, List]: def get_chinese_politeness_strategy_features( parses: List[List], ) -> Tuple[Dict[str, int], Dict[str, List[Tuple]]]: - """ Extract strategies given a parsed utterance """ diff --git a/convokit/politeness_collections/politeness_local/strategy_extractor.py b/convokit/politeness_collections/politeness_local/strategy_extractor.py index 57c1902a..5a0f330c 100644 --- a/convokit/politeness_collections/politeness_local/strategy_extractor.py +++ b/convokit/politeness_collections/politeness_local/strategy_extractor.py @@ -36,17 +36,13 @@ def extract_dep_parse_markers( parents: Optional[Set] = None, relation: Optional[str] = None, ): - matched = [] for i, tok in enumerate(sent_parsed): - # tok matches if tok["tok"].lower() == child: - # check relation (if applicable) if not relation or tok["dep"] == relation: - # check parent (if applicable) if not parents: matched.append((tok["tok"], sent_idx, i)) @@ -64,7 +60,6 @@ def extract_dep_parse_markers( def actually(sent_parsed: List[Dict], sent_idx: int) -> Dict[str, List]: - # two types of matches cond1 = extract_dep_parse_markers( sent_parsed, sent_idx, "the", parents={"point", "reality", "truth"}, relation="det" @@ -91,7 +86,6 @@ def apology(sent_parsed: List[Dict], sent_idx: int) -> Dict[str, List]: def gratitude(sent_parsed: List[Dict], sent_idx: int) -> Dict[str, List]: - return extract_dep_parse_markers( sent_parsed, sent_idx, "i", parents={"appreciate"} ) + extract_dep_parse_markers(sent_parsed, sent_idx, "we", parents={"appreciate"}) @@ -136,7 +130,6 @@ def swearing(sent_parsed: List[Dict], sent_idx: int) -> Dict[str, List]: def get_local_politeness_strategy_features( parses: List[List], ) -> Tuple[Dict[str, int], Dict[str, List[Tuple]]]: - """ Extract strategies given a parsed utterance """ diff --git a/convokit/prompt_types/promptTypes.py b/convokit/prompt_types/promptTypes.py index 05c433de..7666561d 100644 --- a/convokit/prompt_types/promptTypes.py +++ b/convokit/prompt_types/promptTypes.py @@ -90,7 +90,6 @@ def __init__( random_state=None, verbosity=0, ): - self.prompt_embedding_model = {} self.type_models = {} self.train_results = {} @@ -582,7 +581,6 @@ def _get_pair_input( except: continue if prompt_selector(prompt_utt) and reference_selector(reference_utt): - prompt_input = prompt_utt.retrieve_meta(prompt_field) reference_input = reference_utt.retrieve_meta(reference_field) diff --git a/convokit/speakerConvoDiversity/speakerConvoDiversity.py b/convokit/speakerConvoDiversity/speakerConvoDiversity.py index 54c279ee..fc47f1be 100644 --- a/convokit/speakerConvoDiversity/speakerConvoDiversity.py +++ b/convokit/speakerConvoDiversity/speakerConvoDiversity.py @@ -114,7 +114,6 @@ def __init__( recompute_tokens=False, verbosity=0, ): - self.output_field = output_field self.cmp_select_fn = cmp_select_fn self.ref_select_fn = ref_select_fn diff --git a/convokit/speakerConvoDiversity/speakerConvoDiversity2.py b/convokit/speakerConvoDiversity/speakerConvoDiversity2.py index 34a8054a..cc1b077c 100644 --- a/convokit/speakerConvoDiversity/speakerConvoDiversity2.py +++ b/convokit/speakerConvoDiversity/speakerConvoDiversity2.py @@ -85,7 +85,6 @@ def __init__( recompute_tokens=False, verbosity=0, ): - self.output_field = output_field self.surprise_attr_name = f"surprise_{output_field}" self.cmp_select_fn = cmp_select_fn diff --git a/convokit/text_processing/textCleaner.py b/convokit/text_processing/textCleaner.py index 996dda54..d07f10ce 100644 --- a/convokit/text_processing/textCleaner.py +++ b/convokit/text_processing/textCleaner.py @@ -59,7 +59,6 @@ def __init__( replace_text: bool = True, save_original: bool = True, ): - if replace_text: if save_original: output_field = "original" diff --git a/convokit/text_processing/textParser.py b/convokit/text_processing/textParser.py index 10cb35aa..796fd0f7 100644 --- a/convokit/text_processing/textParser.py +++ b/convokit/text_processing/textParser.py @@ -55,7 +55,6 @@ def __init__( sent_tokenizer=None, verbosity=0, ): - self.mode = mode aux_input = {"mode": mode} @@ -72,7 +71,6 @@ def __init__( ) except OSError: - print( "Convokit requires a SpaCy model to be installed. Run `python -m spacy download MODEL_NAME` and retry." ) @@ -81,12 +79,9 @@ def __init__( aux_input["spacy_nlp"] = spacy_nlp if mode in ("tag", "tokenize"): - if sent_tokenizer is None: - # Use NLTK only when an English model is loaded if aux_input["spacy_nlp"].lang == "en": - try: aux_input["sent_tokenizer"] = nltk.data.load( "tokenizers/punkt/english.pickle" @@ -167,9 +162,7 @@ def process_text(text, mode="parse", sent_tokenizer=None, spacy_nlp=None): # if sent_tokenizer is not provided # use spacy's rule-based sentencizer (only for these two modes) if mode in ("tag", "tokenize"): - if sent_tokenizer is None: - warnings.warn( "Sentence tokenizer is not provided. Spacy's rule-based sentencizer will be used." ) diff --git a/convokit/text_processing/textProcessor.py b/convokit/text_processing/textProcessor.py index eab219e0..5f85e40e 100644 --- a/convokit/text_processing/textProcessor.py +++ b/convokit/text_processing/textProcessor.py @@ -25,7 +25,6 @@ def __init__( input_filter=None, verbosity=0, ): - self.proc_fn = proc_fn self.aux_input = aux_input if aux_input is not None else {} # self.input_filter = input_filter if input_filter is not None else lambda utt, aux: True @@ -56,7 +55,6 @@ def transform(self, corpus: Corpus) -> Corpus: total_utts = len(list(corpus.iter_utterances())) for idx, utterance in enumerate(corpus.iter_utterances()): - if self._print_output(idx): print("%03d/%03d utterances processed" % (idx, total_utts)) if not self.input_filter(utterance, self.aux_input): diff --git a/convokit/text_processing/textToArcs.py b/convokit/text_processing/textToArcs.py index b931b766..dccb6477 100644 --- a/convokit/text_processing/textToArcs.py +++ b/convokit/text_processing/textToArcs.py @@ -66,7 +66,6 @@ def _get_arcs_per_message_wrapper(self, text_entry, aux_input={}): def _get_arcs_at_root( root, sent, use_start=True, root_only=False, follow_deps=("conj",), filter_fn=_use_text ): - arcs = set() if not filter_fn(root, sent): return arcs diff --git a/convokit/util.py b/convokit/util.py index 6be3f65d..f7452c5d 100644 --- a/convokit/util.py +++ b/convokit/util.py @@ -154,7 +154,6 @@ def download( needs_download = True if needs_download: - print("Downloading {} to {}".format(name, dataset_path)) # name not in downloaded or \ # (use_newest_version and name in cur_version and @@ -171,7 +170,6 @@ def download( url = DatasetURLs[name] _download_helper(dataset_path, url, verbose, name, downloadeds_path) else: - print("Dataset already exists at {}".format(dataset_path)) dataset_path = os.path.join(downloaded_paths[name], name) @@ -238,7 +236,6 @@ def download_local(name: str, data_dir: str): def _download_helper( dataset_path: str, url: str, verbose: bool, name: str, downloadeds_path: str ) -> None: - if ( url.lower().endswith(".corpus") or url.lower().endswith(".corpus.zip") @@ -292,7 +289,6 @@ def corpus_version(filename: str) -> int: # retrieve grouping and completes the download link for subreddit def get_subreddit_info(subreddit_name: str) -> str: - # base directory of subreddit corpuses subreddit_base = "http://zissou.infosci.cornell.edu/convokit/datasets/subreddit-corpus/" data_dir = subreddit_base + "corpus-zipped/" @@ -335,7 +331,6 @@ def _get_wikiconv_year_info(year: str) -> str: def _get_supreme_info(year: str) -> str: - supreme_base = "http://zissou.infosci.cornell.edu/convokit/datasets/supreme-corpus/" return supreme_base + "supreme-" + year + ".zip" From 6781ed17c54b20b6430f700dc6a21b7c27365c3a Mon Sep 17 00:00:00 2001 From: seanzhangkx8 <106214464+seanzhangkx8@users.noreply.github.com> Date: Wed, 19 Apr 2023 23:25:35 -0400 Subject: [PATCH 03/20] fixed coordination with efficient implementation --- convokit/coordination/coordination.py | 17 +++-- examples/coordination/examples.ipynb | 93 ++++++++++++++++++++------- 2 files changed, 80 insertions(+), 30 deletions(-) diff --git a/convokit/coordination/coordination.py b/convokit/coordination/coordination.py index 17417af6..a5d79091 100644 --- a/convokit/coordination/coordination.py +++ b/convokit/coordination/coordination.py @@ -1,5 +1,6 @@ from collections import defaultdict from typing import Callable, Tuple, List, Dict, Optional, Collection, Union +import copy import pkg_resources @@ -108,15 +109,21 @@ def transform(self, corpus: Corpus) -> Corpus: utterance_thresh_func=self.utterance_thresh_func, ) + # avoiding mutability for the sake of DB corpus + todo = {} + for (speaker, target), score in pair_scores.items(): if self.coordination_attribute_name not in speaker.meta: speaker.meta[self.coordination_attribute_name] = {} - # Avoid mutability of dict in metadata fields - temp_dict = {} - for k, v in speaker.meta[self.coordination_attribute_name]: - temp_dict[k] = v + key = (speaker, target.id) + todo.update({key: score}) + + for key, score in todo.items(): + speaker = key[0] + target = key[1] + temp_dict = copy.deepcopy(speaker.meta[self.coordination_attribute_name]) + temp_dict[target] = score speaker.meta[self.coordination_attribute_name] = temp_dict - assert isinstance(speaker, Speaker) return corpus diff --git a/examples/coordination/examples.ipynb b/examples/coordination/examples.ipynb index 89dac3bd..a93ee950 100644 --- a/examples/coordination/examples.ipynb +++ b/examples/coordination/examples.ipynb @@ -21,7 +21,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 3, "metadata": { "collapsed": true }, @@ -38,16 +38,25 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 4, "metadata": { "collapsed": true }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloading wiki-corpus to /Users/seanzhangkx/.convokit/saved-corpora/wiki-corpus\n", + "Downloading wiki-corpus from http://zissou.infosci.cornell.edu/convokit/datasets/wiki-corpus/wiki-corpus.zip (238.4MB)... Done\n" + ] + } + ], "source": [ "# OPTION 1: DOWNLOAD CORPUS\n", "# UNCOMMENT THESE LINES TO DOWNLOAD CORPUS\n", "# DATA_DIR = ''\n", - "# ROOT_DIR = convokit.download('wiki-corpus', data_dir=DATA_DIR)\n", + "# ROOT_DIR = download('wiki-corpus', data_dir=DATA_DIR)\n", "\n", "# OPTION 2: READ PREVIOUSLY-DOWNLOADED CORPUS FROM DISK\n", "# UNCOMMENT THIS LINE AND REPLACE WITH THE DIRECTORY WHERE THE CORPUS IS LOCATED\n", @@ -58,7 +67,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 5, "metadata": { "collapsed": true }, @@ -111,11 +120,40 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": { "collapsed": true }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Created chart \"Target-admins vs Target-nonadmins.png\"\n", + "Created chart \"Speaker-admins vs Speaker-nonadmins.png\"\n" + ] + }, + { + "data": { + "image/png": "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Hou6detqMjQljJOo8hw4cED8+uuvQgghrl27Jpo0aSIUCoWwtLQUUVFRGo6u6lEoFNJcT882hUIh6tevL2JiYjQdHr1mHP2kRc6fP4/NmzeXKLeystKqtTUYJ1Hl8fb2lv7fqFEjXLlyRSs74FYVLw4/1tHRQe3atdGoUSPo6fErT+54+0mLmJubIyUlpUR5QkIC6tatq4GIVGOcRK9XzZo1mdBUUOfOndG5c2fUrl0bT548wd9//42rV69i37592LVrl6bDo9eMaasWGTJkCKZPn45t27ZBoVCgqKgI0dHRmDp1KkaOHKnp8CSMk4i01Z9//on+/fvj3LlzWr3wJr0mmr7/Rf/Izc0VH330kdDT0xMKhUJUq1ZN6OjoiA8//FAUFBRoOjwJ4yQibfXee++Jfv36ifT0dFG9enVx8eJFcezYMeHu7i7++OMPTYdHrxnnqdESQgjcvn0btWvXRkZGBs6fP4+srCy0bt1aq3rsM04i0mac9+ffjbeftIQQAo0aNcLFixfh5OQEOzs7TYekEuMkIm2mat6fJk2acN6ffwl2FNYSOjo6cHJywv379zUdSpkYJxFpM8778+/GpEaLLFq0CNOmTcOFCxc0HUqZGCcRaavg4GAUFRUBKF548+bNm3jrrbewb98+rFy5UsPR0evGPjVaxMLCAjk5OSgoKIC+vj6MjIyU9j948EBDkSljnERUlXDen38P9qnRIsuXL9d0COXCOImoKqlZs6amQ6A3hC01REREJAtsqdEimZmZKssVCgUMDAygr6//hiNSjXESEZE2YkuNFtHR0Snznm+9evUwatQohISEQEdHc328GScREWkjttRokQ0bNuA///kPRo0aBXd3dwDAyZMnsXHjRgQHByM9PR1Lly6FgYEBZs2axThlEicREVUSTUxjTKp17dpVbN26tUT51q1bRdeuXYUQQvzwww+iSZMmbzo0JYyTiIi0EW8/aREjIyOcO3euxDT+165dg6urK3JycnDz5k00b94cOTk5GoqScRIRkXZiRwItYmdnh3Xr1pUoX7dunTTN//3792FhYfGmQ1PCOImISBuxT40WWbp0KQYOHIj9+/ejXbt2AIDTp0/jypUr+OWXXwAAp06dwuDBgzUZJuMkIiKtxNtPWubmzZtYu3attPBakyZN8PHHH8Pe3l6zgb2AcRIRkbZhUkNERESywNtPWuTcuXMqyxUKBQwNDVG/fn0YGBi84ahKYpxERKSN2FKjRZ6fLO7Z2/L85HHVqlXD4MGD8c0338DQ0FAjMQKMk4iItBNHP2mRHTt2wMnJCWvXrsXZs2dx9uxZrF27Fk2aNMHmzZuxbt06HD58GMHBwYxTRnESEVEl0dD8OKRCu3btxIEDB0qUHzhwQLRr104IIcSOHTuEo6Pjmw5NCeMkIiJtxJYaLXL+/Hk0aNCgRHmDBg1w/vx5AECrVq2QkpLypkNTwjiJiEgbManRIk2bNsWiRYuQl5cnleXn52PRokVo2rQpAODOnTuwtrbWVIgAGCcREWknjn7SIqtXr0bfvn1Rr149tGzZEkBxa0NhYSH27NkDAPjzzz/x6aefajJMxklERFqJo5+0zOPHj7Fp0yZcvXoVQPFkccOGDUONGjU0HJkyxklERNqGSQ0RERHJAm8/aaFLly4hOTlZqS8IAPTt21dDEanGOImISJswqdEif/75J95//32cP38eCoWixIRxhYWFmgxPwjiJiEgbcfSTFgkMDISDgwPu3bsHY2NjXLx4EX/88Qfc3Nzw+++/azo8CeMkIiJtxD41WsTS0hKHDx9Gy5YtYWZmhpMnT6JJkyY4fPgwpkyZgoSEBE2HCIBxEhGRdmJLjRYpLCyURuVYWlri7t27AIoni0tKStJkaEoYJxERaSP2qdEiLVq0wNmzZ+Hg4AAPDw8sXrwY+vr6WLt2LRwdHTUdnoRxEhGRNuLtJy3y22+/ITs7G/3798f169fx3nvv4erVq6hVqxa2bt2Krl27ajpEAIyTiIi0E5MaLffgwQNYWFhII3a0FeMkIiJNY1JDREREssCOwkRERCQLTGqIiIhIFpjUEBERkSwwqSEiIiJZYFJDREREssCkhoiIiGSBSQ0RERHJApMaIiIikoX/Bz6RT9nzur5JAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjUAAAHkCAYAAADGn96PAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABtt0lEQVR4nO3de1zP9/8//turqHROSSQKOVckJeyTQ2QMbea8aWnMNjGZYYscRsZymjBbThuTNvM1zHsUQyU6Op+zciinqVWkw+P3h1/PeXm9Slm8Xj3drpfL87K9Hs/H8/m8P1+v9Lr3eD4OCiGEABEREVENp6PpAIiIiIiqA5MaIiIikgUmNURERCQLTGqIiIhIFpjUEBERkSwwqSEiIiJZYFJDREREssCkhoiIiGShlqYDeFlKS0tx48YNmJiYQKFQaDocIiIiqgQhBP755x80bNgQOjoVt8W8MknNjRs3YGdnp+kwiIiI6DlkZmaiUaNGFdZ5ZZIaExMTAI/fFFNTUw1HQ0RERJWRm5sLOzs76Xu8Iq9MUlP2yMnU1JRJDRERUQ1Tma4j7ChMREREsvBcSU14eDjs7e1hYGAADw8PHDt2rML6UVFRaNWqFQwMDODk5IQ9e/Yo7Z89ezZatWoFIyMjWFhYwNvbGwkJCUp17O3toVAolLaFCxc+T/hEREQkQ1V+/BQZGYmgoCCsWbMGHh4eWLZsGXx8fHD+/HlYW1ur1I+Li8OIESMQGhqKN954A1u2bIGvry+Sk5PRrl07AECLFi2wcuVKNG3aFA8ePMDSpUvRp08fXLp0CfXq1ZPONXfuXIwdO1Z6XZnna0Q1RWlpKR49eqTpMIiIXqratWtDV1e3Ws6lEEKIqhzg4eGBTp06YeXKlQAe/yK2s7NDYGAgpk+frlJ/2LBhyM/Px65du6Syzp07o3379lizZo3aa+Tm5sLMzAz79+9Hr169ADxuqfnkk0/wySefVCVclXPm5OSwTw1pnUePHiE9PR2lpaWaDoWI6KUzNzeHjY2N2n4zVfn+rlJLzaNHj5CUlIQZM2ZIZTo6OvD29kZ8fLzaY+Lj4xEUFKRU5uPjgx07dpR7jbVr18LMzAwuLi5K+xYuXIh58+ahcePGGDlyJCZPnoxatdTfQmFhIQoLC6XXubm5lblFopdOCIGbN29CV1cXdnZ2z5yHgYhILoQQKCgowK1btwAADRo0+E/nq1JSc+fOHZSUlKB+/fpK5fXr18e5c+fUHpOVlaW2flZWllLZrl27MHz4cBQUFKBBgwbYt28frKyspP0TJ06Eq6sr6tati7i4OMyYMQM3b97EkiVL1F43NDQUc+bMqcrtEWlEcXExCgoK0LBhQxgaGmo6HCKil6pOnToAgFu3bsHa2vo/PYrSmiHdPXr0QGpqKu7cuYPvvvsOQ4cORUJCgtRP58nWHmdnZ+jp6eGDDz5AaGgo9PX1Vc43Y8YMpWPKxrkTaZuSkhIAgJ6enoYjISLSjLI/6IqKiv5TUlOldm4rKyvo6uoiOztbqTw7Oxs2NjZqj7GxsalUfSMjIzRv3hydO3dGREQEatWqhYiIiHJj8fDwQHFxMa5evap2v76+vjQnDeemoZqAy3cQ0auqun7/VSmp0dPTQ8eOHREdHS2VlZaWIjo6Gp6enmqP8fT0VKoPAPv27Su3/pPnfbJPzNNSU1Oho6OjdsQVERERvXqq/PgpKCgIfn5+cHNzg7u7O5YtW4b8/Hz4+/sDAEaPHg1bW1uEhoYCACZNmgQvLy+EhYWhf//+2Lp1KxITE7F27VoAQH5+PubPn4+BAweiQYMGuHPnDsLDw3H9+nUMGTIEwOPOxgkJCejRowdMTEwQHx+PyZMn45133oGFhUV1vRdEWiUjA7hz5+Vdz8oKaNz45V2PiKjaiefwzTffiMaNGws9PT3h7u4ujh49Ku3z8vISfn5+SvW3bdsmWrRoIfT09ETbtm3F7t27pX0PHjwQb775pmjYsKHQ09MTDRo0EAMHDhTHjh2T6iQlJQkPDw9hZmYmDAwMROvWrcWCBQvEw4cPKx1zTk6OACBycnKe55aJXpgHDx6IM2fOiAcPHkhlf/0lhIGBEMDL2wwMHl+3JgIgfv31V02HoVZISIhwcXH5T+dIT08XAERKSkq1xFSe/fv3i1atWoni4uIXep3yrF+/XpiZmWnk2nJz+/ZtUa9ePZGZmanpUCpF3e/BMlX5/n6upKYmYlJD2krdP+akpJeb0JRtSUmVj/vWrVti/Pjxws7OTujp6Yn69euLPn36iCNHjryAd6lick9qiouLxc2bN0VRUVH1BFUOV1dX8eOPP0qvnzf25z3ueZOaH3/8UTg7O4s6deoIGxsb4e/vL+7cuSPt9/LyEgBUtn79+kl1fvnlF9G7d29Rt27d/5RABgYGCldXV6Gnp6f2PThw4IAYOHCgsLGxEYaGhsLFxUXpPS+zbds20bJlS6Gvry/atWun1BggxOP3uGXLlsLQ0FCYm5uLXr16KTUwCCHElClTxJgxY57rPl626kpqOCEGET2XwYMHIyUlBRs3bsSFCxewc+dOdO/eHXfv3tV0aP+Zts3srKurCxsbm3Ln5aoOR44cweXLlzF48OAXdo0XITY2FqNHj0ZAQABOnz6NqKgoHDt2TGn2+e3bt+PmzZvSdurUKejq6kpdHIDHXSG6deuGr7766j/HNGbMGAwbNkztvri4ODg7O+OXX37BiRMn4O/vj9GjRytNUFs2E39AQABSUlLg6+sLX19fnDp1SqpTNhP/yZMnceTIEdjb26NPnz64ffu2VMff3x+bN2/GvXv3/vM91RgvIuPSRmypIW1VE1tq/v77bwFAHDx4sMJ6AMSqVatE3759hYGBgXBwcBBRUVFKdTIyMsSQIUOEmZmZsLCwEAMHDhTp6enS/mPHjglvb29haWkpTE1Nxf/93/+JpKcCxVMtNbNmzRI2NjYiLS1NCCHE4cOHRbdu3YSBgYFo1KiRCAwMFHl5eVL9Jk2aiLlz54p3331XmJiYqDxCL/PZZ58JR0dHUadOHeHg4CCCg4PFo0ePlOqEhoYKa2trYWxsLMaMGSOmTZum9Be7n5+fGDRokJg/f76wtrYWZmZmYs6cOaKoqEh8+umnwsLCQtja2op169ZJxzz9+OnAgQMCgNi/f7/o2LGjqFOnjvD09BTnzp2TjklNTRXdu3cXxsbGwsTERLi6uorjx4+X+1l9/PHH4u2335Zer1+/XqVlY/369UIIIf766y8xcOBAYWRkJExMTMSQIUNEVlbWM48LCwsT7dq1E4aGhqJRo0biww8/FP/884/SNavaUrN48WLRtGlTpbIVK1YIW1vbco9ZunSpMDExUfoZKFNdj/qq0lrVr18/4e/vL70eOnSo6N+/v1IdDw8P8cEHH5R7jrLvuP379yuVOzg4iO+//77ygWsIW2qItIBC8fxbTWZsbAxjY2Ps2LGjwlGKADBz5kwMHjwYaWlpGDVqFIYPH46zZ88CeDwnhY+PD0xMTHD48GHExsbC2NgYffv2lVpL/vnnH/j5+eHIkSM4evQoHB0d0a9fP/zzzz8q1xJCIDAwEJs2bcLhw4fh7OyMy5cvo2/fvhg8eDBOnDiByMhIHDlyBBMmTFA69uuvv4aLiwtSUlIwc+ZMtfdiYmKCDRs24MyZM1i+fDm+++47LF26VNq/bds2zJ49GwsWLEBiYiIaNGiAVatWqZwnJiYGN27cwKFDh7BkyRKEhITgjTfegIWFBRISEjB+/Hh88MEHuHbtWoXv7RdffIGwsDAkJiaiVq1aGDNmjLRv1KhRaNSoEY4fP46kpCRMnz4dtWvXLvdchw8fhpubm/R62LBhmDJlCtq2bSu1cAwbNgylpaUYNGgQ7t27hz///BP79u3DlStXpJaJ8o4DHs9Av2LFCpw+fRobN25ETEwMPvvss3Jjunr1KhQKBQ4ePFhuHU9PT2RmZmLPnj0QQiA7Oxs///wz+vXrV+4xERERGD58OIyMjMqt8zLl5OSgbt260uv4+Hh4e3sr1fHx8Sl35v6KZuJ3d3fH4cOHqz9obVX9+ZZ2YksNvQj/pVWkTE1sqRFCiJ9//llYWFgIAwMD0aVLFzFjxgypZeTf9wdi/PjxSmUeHh7iww8/FEII8cMPP4iWLVuK0tJSaX9hYaGoU6eO+N///qf2uiUlJcLExET89ttvSteJiooSI0eOFK1btxbXrl2T9gUEBIhx48YpnePw4cNCR0dHes+bNGkifH19K3/z/7/FixeLjh07Sq89PT3FRx99pHK/T7fUNGnSRJSUlEhlLVu2FK+99pr0uri4WBgZGYmffvpJCFFxS02Z3bt3CwDSPZmYmIgNGzZU+l7MzMzEpk2blMrUtTb88ccfQldXV2RkZEhlp0+fFgCkAR6VbaWIiooSlpaW0uunW2quXbsmWrZsKRISEio8z7Zt24SxsbGoVauWACAGDBig0oJWJiEhQQAo95wvu6UmMjJS6OnpiVOnTklltWvXFlu2bFGqFx4eLqytrZXKfvvtN2FkZCQUCoVo2LCh0gCbMpMnTxbdu3d/vpt4idhSQ0QaNXjwYNy4cQM7d+5E3759cfDgQbi6umLDhg1K9Z6ek8rT01NqqUlLS8OlS5dgYmIitf7UrVsXDx8+xOXLlwE8nqxz7NixcHR0hJmZGUxNTZGXl4eMjAyl806ePBkJCQk4dOgQbG1tpfK0tDRs2LBBOr+xsTF8fHxQWlqK9PR0qd6TrRTjx49Xql8mMjISXbt2hY2NDYyNjREcHKwUx9mzZ+Hh4VHh/QNA27Ztldb4ql+/PpycnKTXurq6sLS0lNbDKY+zs7P0/2Vr5pQdExQUhPfffx/e3t5YuHCh9H6W58GDBzAwMKiwDvD4Hu3s7JRmaG/Tpg3Mzc2lz7U8ZYsU29rawsTEBO+++y7u3r2LgoICtfVtbW1x7tw5uLu7l3vOM2fOYNKkSZg1axaSkpKwd+9eXL16FePHj1dbPyIiAk5OThWe82U5cOAA/P398d1336Ft27ZVPr5sJv64uDj07dsXQ4cOVfmZqVOnTrnvrxwxqSGi52ZgYIDevXtj5syZiIuLw3vvvYeQkJBKH5+Xl4eOHTsiNTVVabtw4QJGjhwJAPDz80NqaiqWL1+OuLg4pKamwtLSUqUzb+/evXH9+nX873//U7nGBx98oHT+tLQ0XLx4Ec2aNZPqPfkoYu7cuUr1gcePBEaNGoV+/fph165dSElJwRdffPFcnYqffgykUCjUlj1r1fYnjymbkbXsmNmzZ+P06dPo378/YmJi0KZNG/z666/lnsvKygp///13le6jKq5evYo33nhD6iSblJSE8PBwAP+tY3ZoaCi6du2KqVOnwtnZGT4+Pli1ahXWrVuHmzdvKtXNz8/H1q1bERAQ8J/upTr8+eefGDBgAJYuXYrRo0cr7avOmfjv3buHevXqvZib0EJas/YTEdV8bdq0wY4dO5TKjh49qvRL++jRo+jQoQMAwNXVFZGRkbC2ti53KZPY2FisWrVK6iORmZmJO2pmJRw4cCAGDBiAkSNHQldXF8OHD5eucebMGTRv3rzS92Ftba0yW3lcXByaNGmCL774Qir766+/lOq0bt0aCQkJKverKS1atECLFi0wefJkjBgxAuvXr8ebb76ptm6HDh1w5swZpTI9PT1pbbIyrVu3RmZmJjIzM6XWmjNnzuD+/fto06ZNucclJSWhtLQUYWFhUivVtm3b/vM9FhQUqIwKK1s7SAihVB4VFYXCwkK88847//m6/8XBgwfxxhtv4KuvvsK4ceNU9pfNxP/JJ59IZc87E/+pU6fQvXv36gi7RmBLDRFV2d27d9GzZ0/8+OOPOHHiBNLT0xEVFYVFixZh0KBBSnWjoqKwbt06XLhwASEhITh27JjUSXfUqFGwsrLCoEGDcPjwYaSnp+PgwYOYOHGi1EnW0dERP/zwA86ePYuEhASMGjVKWtX3aW+++SZ++OEH+Pv74+effwYATJs2DXFxcZgwYQJSU1Nx8eJF/L//9/9UOgo/i6OjIzIyMrB161ZcvnwZK1asUGn5mDRpEtatW4f169dL93v69OkqXac6PHjwABMmTMDBgwfx119/ITY2FsePH0fr1q3LPcbHxwdHjhxRKrO3t0d6erq02HBhYSG8vb3h5OSEUaNGITk5GceOHcPo0aPh5eUlPcJTd1zz5s1RVFSEb775BleuXMEPP/yANWvWVHgf169fR6tWrXDs2LFy6wwYMADbt2/H6tWrceXKFcTGxmLixIlwd3dHw4YNlepGRETA19cXlpaWKue5d+8eUlNTpcTu/PnzSE1NRVZWVoUxPu3SpUvScQ8ePJBa+8paow4cOID+/ftj4sSJGDx4MLKyspCVlaU07HrSpEnYu3cvwsLCcO7cOcyePRuJiYnSz2x+fj4+//xzHD16FH/99ReSkpIwZswYpZn4gccJX1JSEvr06VOle6jRXkB/H63EjsL0IryojsLaPqPww4cPxfTp04Wrq6swMzMThoaGomXLliI4OFgUFBQ88f5AhIeHi969ewt9fX1hb28vIiMjlc518+ZNMXr0aGFlZSX09fVF06ZNxdixY6V/q8nJycLNzU0YGBgIR0dHERUVJZo0aSKWLl2qdJ0nh3RHRkYKAwMD8csvvwghHg8L7927tzA2NhZGRkbC2dlZzJ8/X6r/9PnKM3XqVGFpaSmMjY3FsGHDxNKlS1WGIM+fP19YWVkJY2Nj4efnJz777DO1Q7qf5OXlJSZNmqRU9mRM5XUU/vvvv6X6KSkpAoBIT08XhYWFYvjw4dLEiA0bNhQTJkxQ2wmzzN27d4WBgYHSsPCHDx+KwYMHC3Nz80oP6a7ouCVLlogGDRqIOnXqCB8fH7Fp0yal+3i6o3DZfR84cKDcuIV4PIS7TZs2ok6dOqJBgwZi1KhRSp3FhRDi3LlzAoD4448/1J5D3VB0ACIkJESq4+fnJ7y8vCqMpbyJ/sqmKfDz81O7/+nz/teZ+IUQYsuWLaJly5YVxqstqqujsEKIp9rnZCo3NxdmZmbIycnhit1Ubf7L0Oyyf3kPHz5Eeno6HBwclDpqymHtJ4VCgV9//RW+vr7Ve2J6IaZOnYrc3Fx8++23mg5FK3l5eaFHjx6YPXu2pkOplM6dO2PixIlS/zRtVt7vQaBq39/sU0OkpRo35gKT9HJ98cUXWLVqFUpLS5VGZ9HjuWQuX76M3bt3azqUSrlz5w7eeustjBgxQtOhvFRMaoiICABgbm6Ozz//XNNhaCUzM7NnToaoTaysrCqc2FCumNQQ0QvzijzdJiItwfZFIiIikgUmNURERCQLTGqIiIhIFpjUEBERkSwwqSEiIiJZ4OgnIi2VkZOBOwUvb/Y9K0MrNDarmRPjcJK/xwtY7tixQ1qA83lcvXoVDg4OSElJQfv27asttqdFR0djwoQJOHXqlLRO08u0YcMGfPLJJ7h///5Lv/araM2aNdi9ezd+++23F34tJjVEWigjJwMtV7bEw+KHL+2aBrUMcH7C+UonNrdv38asWbOwe/duZGdnw8LCAi4uLpg1axa6du36gqOlF8HOzg43b96ElZXVC73OZ599huDgYCmhed6ErDoSucq6efMmpkyZgsTERFy6dAkTJ07EsmXLVOotW7YMq1evRkZGBqysrPD2228jNDRUaZbc8PBwLF68GFlZWXBxccE333wDd3d3lXMJIdCvXz/s3bu3ykl72XpYqampKCwsRNu2bTF79mz4+PhIdezt7VUWZQWAjz76COHh4VKSq862bdukdaYUaqZW/+mnn6RFZceMGYN58+bh8OHDeO211yp9D8+Dj5+ItNCdgjsvNaEBgIfFD6vUMjR48GCkpKRg48aNuHDhAnbu3Inu3bvj7t27LzDKl6Ns8cFXja6uLmxsbFRWva5OR44cweXLlzF48OAXdo0XobCwEPXq1UNwcDBcXFzU1tmyZQumT5+OkJAQnD17FhEREYiMjFSa0DAyMhJBQUEICQlBcnIyXFxc4OPjg1u3bqmcb9myZWoThso4dOgQevfujT179iApKQk9evTAgAEDkJKSItU5fvw4bt68KW379u0DAClZKUtyn9zmzJkDY2NjvP7660rXW79+vVK9JxMwPT09jBw5EitWrHiue6kKJjVEVGX379/H4cOH8dVXX6FHjx5o0qQJ3N3dMWPGDAwcOFCqp1AosHr1arz++uuoU6cOmjZtKq2eXSYzMxNDhw6Fubk56tati0GDBuHq1avS/uPHj6N3796wsrKCmZkZvLy8kJycXGF8ISEhaNCgAU6cOAHg8Rfpa6+9hjp16sDOzg4TJ05Efn6+VN/e3h7z5s3D6NGjYWpqinHjxqmc8+rVq1AoFNi+fTt69OgBQ0NDuLi4ID4+XqneL7/8grZt20JfXx/29vYICwtT2m9vb48FCxZgzJgxMDExQePGjbF27VqlOtOmTUOLFi1gaGiIpk2bYubMmSgqKlKqs3DhQtSvXx8mJiYICAjAw4fKSfB7770HX19fLFiwAPXr14e5uTnmzp2L4uJiTJ06FXXr1kWjRo2wfv16lXssa/k4ePAgFAoFoqOj4ebmBkNDQ3Tp0gXnz5+XjklLS0OPHj1gYmICU1NTdOzYEYmJieV+Nlu3bkXv3r2llosNGzZgzpw5SEtLg0KhgEKhwIYNGwAAGRkZGDRoEIyNjWFqaoqhQ4ciOzv7mcctWbIETk5OMDIygp2dHT766CPk5eWVG1Nl2NvbY/ny5Rg9ejTMzMzU1omLi0PXrl0xcuRI2Nvbo0+fPhgxYoTSKuNLlizB2LFj4e/vjzZt2mDNmjUwNDTEunXrlM6VmpqKsLAwlfLKWrZsGT777DN06tQJjo6OWLBgARwdHZUeAdWrVw82NjbStmvXLjRr1gxeXl4A/k1yn9x+/fVXDB06FMbGxkrXMzc3V6r39PpNAwYMwM6dO/HgwYPnup/KYlJDRFVmbGwMY2Nj7NixA4WFhRXWnTlzJgYPHoy0tDSMGjUKw4cPx9mzZwEARUVF8PHxgYmJCQ4fPozY2FgYGxujb9++UmvJP//8Az8/Pxw5cgRHjx6Fo6Mj+vXrh3/++UflWkIIBAYGYtOmTTh8+DCcnZ1x+fJl9O3bF4MHD8aJEycQGRmJI0eOYMKECUrHfv3113BxcUFKSgpmzpxZ7v188cUX+PTTT5GamooWLVpgxIgRKC4uBgAkJSVh6NChGD58OE6ePInZs2dj5syZ0pdtmbCwMLi5uSElJQUfffQRPvzwQ6VEwcTEBBs2bMCZM2ewfPlyfPfdd1i6dKm0f9u2bZg9ezYWLFiAxMRENGjQAKtWrVKJNSYmBjdu3MChQ4ewZMkShISE4I033oCFhQUSEhIwfvx4fPDBB8+c/v+LL75AWFgYEhMTUatWLYwZM0baN2rUKDRq1AjHjx9HUlISpk+fjtq1a5d7rsOHD8PNzU16PWzYMEyZMgVt27aV/sofNmwYSktLMWjQINy7dw9//vkn9u3bhytXrmDYsGEVHgcAOjo6WLFiBU6fPo2NGzciJiamwiUDypK5gwcPVvg+PEuXLl2QlJQkJTFXrlzBnj170K9fPwCPWwCTkpLg7e0tHaOjowNvb2+l5LigoAAjR45EeHg4bGxs/lNMZUpLS/HPP/+gbt26avc/evQIP/74I8aMGVNu61BSUhJSU1MREBCgsu/jjz+GlZUV3N3dsW7dOpXZxN3c3FBcXIyEhIT/fjMVqd7Fw7VXVZYuJ6qsx2ttP99W5sGDB+LMmTPiwYMHUlnSjSSB2XjpW9KNpErf+88//ywsLCyEgYGB6NKli5gxY4ZIS0t76v2BGD9+vFKZh4eH+PDDD4UQQvzwww+iZcuWorS0VNpfWFgo6tSpI/73v/+pvW5JSYkwMTERv/32m9J1oqKixMiRI0Xr1q3FtWvXpH0BAQFi3LhxSuc4fPiw0NHRkd7zJk2aCF9f3wrvNz09XQAQ33//vVR2+vRpAUCcPXtWCCHEyJEjRe/evZWOmzp1qmjTpo30ukmTJuKdd96RXpeWlgpra2uxevXqcq+9ePFi0bFjR+m1p6en+Oijj5TqeHh4CBcXF+m1n5+faNKkiSgpKZHKWrZsKV577TXpdXFxsTAyMhI//fST0j2mpKQIIYQ4cOCAACD2798vHbN7924BQHrvTExMxIYNG8qN/WlmZmZi06ZNSmUhISFKsQshxB9//CF0dXVFRkaGVFb2fh87dqzc49SJiooSlpaW0uv169cLMzMz6fW1a9dEy5YtRUJCQqXuwcvLS0yaNEntvuXLl4vatWuLWrVqqfz8X79+XQAQcXFxSsdMnTpVuLu7S6/HjRsnAgICpNcAxK+//lqp2Mrz1VdfCQsLC5Gdna12f2RkpNDV1RXXr18v9xwffvihaN26tUr53LlzxZEjR0RycrJYuHCh0NfXF8uXL1epZ2FhUe7Pirrfg2Wq8v3Nlhoiei6DBw/GjRs3sHPnTvTt2xcHDx6Eq6urSquEp6enyuuylpq0tDRcunQJJiYmUutP3bp18fDhQ1y+fBkAkJ2djbFjx8LR0RFmZmYwNTVFXl4eMjIylM47efJkJCQk4NChQ7C1tZXK09LSsGHDBun8xsbG8PHxQWlpKdLT06V6T7YejB8/Xqn+k5ydnaX/b9CgAQBI/SHOnj2r0km6a9euuHjxIkpKStSeQ6FQwMbGRqlPRWRkJLp27QobGxsYGxsjODhY6X7Pnj0LDw+PCt9nAGjbtq3Satv169eHk5OT9FpXVxeWlpZq+3NU9p6DgoLw/vvvw9vbGwsXLpQ+t/I8ePBA5dGEOmfPnoWdnR3s7OyksjZt2sDc3Fz6+SnP/v370atXL9ja2sLExATvvvsu7t69i4KCArX1bW1tce7cObWddavi4MGDWLBgAVatWoXk5GRs374du3fvxrx58yp9jp07dyImJkZtJ+TntWXLFsyZMwfbtm2DtbW12joRERF4/fXX0bBhQ7X7Hzx4gC1btqhtpZk5cya6du2KDh06YNq0afjss8+wePFilXp16tQp9zOoLkxqiOi5GRgYoHfv3pg5cybi4uLw3nvvISQkpNLH5+XloWPHjkhNTVXaLly4gJEjRwIA/Pz8kJqaiuXLlyMuLg6pqamwtLRU6czbu3dvXL9+Hf/73/9UrvHBBx8onT8tLQ0XL15Es2bNpHpGRkbS/8+dO1ep/pOefLRS1kxfWlpa6Xt++hxl5yk7R3x8PEaNGoV+/fph165dSElJwRdffPFcnZfVXaeia1fmPE/f8+zZs3H69Gn0798fMTExaNOmDX799ddyz2VlZYW///67SvdRFVevXsUbb7wBZ2dn/PLLL0hKSkJ4eDiAF98BfObMmXj33Xfx/vvvw8nJCW+++SYWLFiA0NBQlJaWwsrKCrq6ulK/oDLZ2dnSY6aYmBhcvnwZ5ubmqFWrltRpe/DgwejevXuVY9q6dSvef/99bNu2Temx15P++usv7N+/H++//3655/n5559RUFCA0aNHP/OaHh4euHbtmsqj6Xv37qFevXpVu4Eq4pBuIqo2bdq0wY4dO5TKjh49qvSL8OjRo+jQoQMAwNXVFZGRkbC2toapqanac8bGxmLVqlVSv4TMzEzcuaM6SmvgwIEYMGAARo4cCV1dXWk4qaurK86cOYPmzZtX+j6sra3L/Yu2Iq1bt0ZsbKxK/C1atKj0fCxxcXFo0qQJvvjiC6ns6WG3rVu3RkJCgsr7qiktWrRAixYtMHnyZIwYMQLr16/Hm2++qbZuhw4dcObMGaUyPT09pZYs4PE9ZmZmIjMzU2qtOXPmDO7fv482bdqUe1xSUhJKS0sRFhYmtVJt27atWu7zWQoKCpRaxgBIn7sQAnp6eujYsSOio6Ol0UGlpaXSvD0AMH36dJXkwsnJCUuXLsWAAQOqFM9PP/2EMWPGYOvWrejfv3+59davXw9ra+sK60RERGDgwIGVSkpSU1NhYWEBfX19qezy5ct4+PCh9G//RWFSQ0RVdvfuXQwZMgRjxoyBs7MzTExMkJiYiEWLFmHQoEFKdaOiouDm5oZu3bph8+bNOHbsGCIiIgA87mS6ePFiDBo0CHPnzkWjRo3w119/Yfv27fjss8/QqFEjODo64ocffoCbmxtyc3MxdepU1KlTR21cb775Jn744Qe8++67qFWrFt5++21MmzYNnTt3xoQJE/D+++/DyMgIZ86cwb59+7By5cpqfV+mTJmCTp06Yd68eRg2bBji4+OxcuVKtZ14y+Po6IiMjAxs3boVnTp1wu7du1VaPiZNmoT33nsPbm5u6Nq1KzZv3ozTp0+jadOm1Xo/z/LgwQNMnToVb7/9NhwcHHDt2jUcP368wuHaPj4+2Lhxo1KZvb090tPTkZqaikaNGsHExATe3t5wcnLCqFGjsGzZMhQXF+Ojjz6Cl5eX9KhQ3XHNmzdHUVERvvnmGwwYMACxsbFYs2ZNhfdx/fp19OrVC5s2barwEVRZq11eXh5u376N1NRU6OnpSUnWgAEDsGTJEnTo0AEeHh64dOkSZs6ciQEDBkjJTVBQEPz8/ODm5gZ3d3csW7YM+fn58Pf3BwBp9NDTGjduXO6cMeps2bIFfn5+WL58OTw8PJCVlQXg8SOgJ0dvlZaWYv369fDz8yt3KP+lS5dw6NAh7NmzR2Xfb7/9huzsbHTu3BkGBgbYt28fFixYgE8//VSp3uHDh9G0aVOl1tEX4pm9bmSCHYXpRXhVOwo/fPhQTJ8+Xbi6ugozMzNhaGgoWrZsKYKDg0VBQcET7w9EeHi46N27t9DX1xf29vYiMjJS6Vw3b94Uo0ePFlZWVkJfX180bdpUjB07Vvq3mpycLNzc3ISBgYFwdHQUUVFRokmTJmLp0qVK13myI2VkZKQwMDAQv/zyixBCiGPHjonevXsLY2NjYWRkJJydncX8+fOl+k+fT52nO9EKIcTff/8tAIgDBw5IZT///LNo06aNqF27tmjcuLFYvHix0nnUXcvFxUWEhIRIr6dOnSosLS2FsbGxGDZsmFi6dKlSx1YhhJg/f76wsrISxsbGws/PT3z22WcqHYUHDRqkdIy6Dq5PxlNeR+G///5bqp+SkiIAiPT0dFFYWCiGDx8u7OzshJ6enmjYsKGYMGGC2s6eZe7evSsMDAzEuXPnpLKHDx+KwYMHC3NzcwFArF+/XgghxF9//SUGDhwojIyMhImJiRgyZIjIysp65nFLliwRDRo0EHXq1BE+Pj5i06ZNSvfxdEfhsvt+8nNUB4DK1qRJE2l/UVGRmD17tmjWrJkwMDAQdnZ24qOPPlJ6/4QQ4ptvvhGNGzcWenp6wt3dXRw9evSZ1326o3CTJk2Ufmae5uXlpTZePz8/pXr/+9//BABx/vz5cs81Y8YMYWdnp9TpvMzvv/8u2rdvL/3bcnFxEWvWrFGp26dPHxEaGlruNaqro7BCiKfGXclUbm4uzMzMkJOTU24zN1FVPee8WAAepzYA8PDhQ6Snp8PBwUHqQFkTZhSuDC5fQOpMnToVubm5+PbbbzUdSo1UUFAAS0tL/P7778/Vz+ZlO336NHr27IkLFy6UO8ePut+DZary/c3HT0RaqLFZY5yfcJ5rP5EsffHFF1i1ahVKS0tV+qDQsx04cAA9e/asEQkN8HiJiU2bNpWb0FQnJjVEWqqxWWMmGSRL5ubmSksHUNX079+/wk692qa8UVcvApMaInphXpGn20SkJdjuR0RERLLApIaIiIhkgUkNkZbgoxoielVV1+8/JjVEGlY2KdeLnsKdiEhbla0JVdEK75XBjsJEGlarVi0YGhri9u3bqF27Noe4EtErQwiBgoIC3Lp1C+bm5pVeTqQ8TGqINEyhUKBBgwZIT09XWeOHiOhVYG5urnZ5iKpiUkOkBfT09ODo6MhHUET0yqldu/Z/bqEp81xJTXh4OBYvXoysrCy4uLjgm2++qXARsKioKMycORNXr16Fo6MjvvrqK2nFXeDx0vVbt25FZmamtIrp/Pnz4eHhIdW5d+8eAgMD8dtvv0FHRweDBw/G8uXLYWxs/Dy3QKR1dHR0VKYHJyKiyqvyw/vIyEgEBQUhJCQEycnJcHFxgY+PD27duqW2flxcHEaMGIGAgACkpKTA19cXvr6+OHXqlFSnRYsWWLlyJU6ePIkjR47A3t4effr0we3bt6U6o0aNwunTp7Fv3z7s2rULhw4dwrhx457jlomIiEiOqrygpYeHBzp16oSVK1cCeLxsuZ2dHQIDAzF9+nSV+sOGDUN+fj527dollXXu3Bnt27cvdzn4ssWr9u/fj169euHs2bNo06YNjh8/Li05v3fvXvTr1w/Xrl1Dw4YNnxk3F7SkF6E6FrQkIqLyVeX7u0otNY8ePUJSUpLSOg46Ojrw9vZGfHy82mPi4+NV1n3w8fEpt/6jR4+wdu1amJmZwcXFRTqHubm5lNAAj9eS0NHRQUJCgtrzFBYWIjc3V2kjIiIi+apSUnPnzh2UlJSgfv36SuX169dHVlaW2mOysrIqVX/Xrl0wNjaGgYEBli5din379sHKyko6h7W1tVL9WrVqoW7duuVeNzQ0FGZmZtJmZ2dXlVslIiKiGkZrJsTo0aMHUlNTERcXh759+2Lo0KHl9tOpjBkzZiAnJ0faMjMzqzFaIiIi0jZVSmqsrKygq6uL7OxspfLs7Oxyx5fb2NhUqr6RkRGaN2+Ozp07IyIiArVq1UJERIR0jqcTnOLiYty7d6/c6+rr68PU1FRpIyIiIvmqUlJTNtw6OjpaKistLUV0dDQ8PT3VHuPp6alUHwD27dtXbv0nz1tYWCid4/79+0hKSpL2x8TEoLS0VGnYNxEREb26qjxPTVBQEPz8/ODm5gZ3d3csW7YM+fn58Pf3BwCMHj0atra2CA0NBQBMmjQJXl5eCAsLQ//+/bF161YkJiZi7dq1AID8/HzMnz8fAwcORIMGDXDnzh2Eh4fj+vXrGDJkCACgdevW6Nu3L8aOHYs1a9agqKgIEyZMwPDhwys18omIiIjkr8pJzbBhw3D79m3MmjULWVlZaN++Pfbu3St1Bs7IyFBau6ZLly7YsmULgoOD8fnnn8PR0RE7duxAu3btADxezO/cuXPYuHEj7ty5A0tLS3Tq1AmHDx9G27ZtpfNs3rwZEyZMQK9evaTJ91asWPFf75+IiIhkosrz1NRUnKeGXgTOU0NE9GK9sHlqiIiIiLQVkxoiIiKSBSY1REREJAtMaoiIiEgWmNQQERGRLDCpISIiIlmo8jw1RFQ9FHOefzy4COF4cCKip7GlhoiIiGSBSQ0RERHJApMaIiIikgUmNURERCQLTGqIiIhIFpjUEBERkSwwqSEiIiJZYFJDREREssCkhoiIiGSBSQ0RERHJApMaIiIikgUmNURERCQLTGqIiIhIFpjUEBERkSwwqSEiIiJZYFJDREREssCkhoiIiGSBSQ0RERHJApMaIiIikgUmNURERCQLTGqIiIhIFpjUEBERkSwwqSEiIiJZYFJDREREssCkhoiIiGSBSQ0RERHJApMaIiIikgUmNURERCQLTGqIiIhIFpjUEBERkSwwqSEiIiJZYFJDREREssCkhoiIiGSBSQ0RERHJwnMlNeHh4bC3t4eBgQE8PDxw7NixCutHRUWhVatWMDAwgJOTE/bs2SPtKyoqwrRp0+Dk5AQjIyM0bNgQo0ePxo0bN5TOYW9vD4VCobQtXLjwecInIiIiGapyUhMZGYmgoCCEhIQgOTkZLi4u8PHxwa1bt9TWj4uLw4gRIxAQEICUlBT4+vrC19cXp06dAgAUFBQgOTkZM2fORHJyMrZv347z589j4MCBKueaO3cubt68KW2BgYFVDZ+IiIhkSiGEEFU5wMPDA506dcLKlSsBAKWlpbCzs0NgYCCmT5+uUn/YsGHIz8/Hrl27pLLOnTujffv2WLNmjdprHD9+HO7u7vjrr7/QuHFjAI9baj755BN88sknVQlXkpubCzMzM+Tk5MDU1PS5zkH0NIXiPxw8+/kPFiFV+mdLRFRjVeX7u0otNY8ePUJSUhK8vb3/PYGODry9vREfH6/2mPj4eKX6AODj41NufQDIycmBQqGAubm5UvnChQthaWmJDh06YPHixSguLi73HIWFhcjNzVXaiIiISL5qVaXynTt3UFJSgvr16yuV169fH+fOnVN7TFZWltr6WVlZaus/fPgQ06ZNw4gRI5QysokTJ8LV1RV169ZFXFwcZsyYgZs3b2LJkiVqzxMaGoo5c+ZU5faIiIioBqtSUvOiFRUVYejQoRBCYPXq1Ur7goKCpP93dnaGnp4ePvjgA4SGhkJfX1/lXDNmzFA6Jjc3F3Z2di8ueCIiItKoKiU1VlZW0NXVRXZ2tlJ5dnY2bGxs1B5jY2NTqfplCc1ff/2FmJiYZz438/DwQHFxMa5evYqWLVuq7NfX11eb7BAREZE8ValPjZ6eHjp27Ijo6GiprLS0FNHR0fD09FR7jKenp1J9ANi3b59S/bKE5uLFi9i/fz8sLS2fGUtqaip0dHRgbW1dlVsgIiIimary46egoCD4+fnBzc0N7u7uWLZsGfLz8+Hv7w8AGD16NGxtbREaGgoAmDRpEry8vBAWFob+/ftj69atSExMxNq1awE8TmjefvttJCcnY9euXSgpKZH629StWxd6enqIj49HQkICevToARMTE8THx2Py5Ml45513YGFhUV3vBZFs/ZdRWlUbH0lEpDlVTmqGDRuG27dvY9asWcjKykL79u2xd+9eqTNwRkYGdHT+bQDq0qULtmzZguDgYHz++edwdHTEjh070K5dOwDA9evXsXPnTgBA+/btla514MABdO/eHfr6+ti6dStmz56NwsJCODg4YPLkyUp9ZoiIiOjVVuV5amoqzlNDL0JNmaeGLTVEVFO9sHlqiIiIiLQVkxoiIiKSBSY1REREJAtMaoiIiEgWmNQQERGRLDCpISIiIllgUkNERESywKSGiIiIZIFJDREREckCkxoiIiKSBSY1REREJAtMaoiIiEgWmNQQERGRLDCpISIiIllgUkNERESywKSGiIiIZIFJDREREckCkxoiIiKShVqaDoCIqIxC8fzHClF9cRBRzcSWGiIiIpIFJjVEREQkC0xqiIiISBaY1BAREZEsMKkhIiIiWWBSQ0RERLLAId1EVCHFnOcfZy1C5DvO+nmHn3PoOdGLw5YaIiIikgUmNURERCQLTGqIiIhIFpjUEBERkSwwqSEiIiJZYFJDREREssCkhoiIiGSBSQ0RERHJApMaIiIikgUmNURERCQLTGqIiIhIFpjUEBERkSwwqSEiIiJZYFJDREREslBL0wEQEVUHxRzFcx8rQkQ1RkJEmvJcLTXh4eGwt7eHgYEBPDw8cOzYsQrrR0VFoVWrVjAwMICTkxP27Nkj7SsqKsK0adPg5OQEIyMjNGzYEKNHj8aNGzeUznHv3j2MGjUKpqamMDc3R0BAAPLy8p4nfCIiIpKhKic1kZGRCAoKQkhICJKTk+Hi4gIfHx/cunVLbf24uDiMGDECAQEBSElJga+vL3x9fXHq1CkAQEFBAZKTkzFz5kwkJydj+/btOH/+PAYOHKh0nlGjRuH06dPYt28fdu3ahUOHDmHcuHHPcctEREQkRwohRJXaXT08PNCpUyesXLkSAFBaWgo7OzsEBgZi+vTpKvWHDRuG/Px87Nq1Syrr3Lkz2rdvjzVr1qi9xvHjx+Hu7o6//voLjRs3xtmzZ9GmTRscP34cbm5uAIC9e/eiX79+uHbtGho2bPjMuHNzc2FmZoacnByYmppW5ZaJyqV4/icewOyX97iEcVbseR4/PW+sVfuNS0RV+f6uUkvNo0ePkJSUBG9v739PoKMDb29vxMfHqz0mPj5eqT4A+Pj4lFsfAHJycqBQKGBubi6dw9zcXEpoAMDb2xs6OjpISEhQe47CwkLk5uYqbURERCRfVeoofOfOHZSUlKB+/fpK5fXr18e5c+fUHpOVlaW2flZWltr6Dx8+xLRp0zBixAgpI8vKyoK1tbVy4LVqoW7duuWeJzQ0FHPmzKnUfRERvSzs0Ez04mjVkO6ioiIMHToUQgisXr36P51rxowZyMnJkbbMzMxqipKIiIi0UZVaaqysrKCrq4vs7Gyl8uzsbNjY2Kg9xsbGplL1yxKav/76CzExMUrPzWxsbFQ6IhcXF+PevXvlXldfXx/6+vqVvjciIiKq2arUUqOnp4eOHTsiOjpaKistLUV0dDQ8PT3VHuPp6alUHwD27dunVL8sobl48SL2798PS0tLlXPcv38fSUlJUllMTAxKS0vh4eFRlVsgIiIimary5HtBQUHw8/ODm5sb3N3dsWzZMuTn58Pf3x8AMHr0aNja2iI0NBQAMGnSJHh5eSEsLAz9+/fH1q1bkZiYiLVr1wJ4nNC8/fbbSE5Oxq5du1BSUiL1k6lbty709PTQunVr9O3bF2PHjsWaNWtQVFSECRMmYPjw4ZUa+URERETyV+WkZtiwYbh9+zZmzZqFrKwstG/fHnv37pU6A2dkZEBH598GoC5dumDLli0IDg7G559/DkdHR+zYsQPt2rUDAFy/fh07d+4EALRv317pWgcOHED37t0BAJs3b8aECRPQq1cv6OjoYPDgwVixYsXz3DMRERHJUJXnqampOE8NvQg1ZV4VxlmxlzlPzcuOk6ime2Hz1BARERFpKy5oWU3+y1+Yr0ZbGRER0YvFlhoiIiKSBSY1REREJAtMaoiIiEgW2KfmFcO+P0REJFdsqSEiIiJZYFJDREREssCkhoiIiGSBSQ0RERHJApMaIiIikgUmNURERCQLHNJNRCRjnMaBXiVsqSEiIiJZYFJDREREssCkhoiIiGSBSQ0RERHJApMaIiIikgWOfiKtxBEbRERUVWypISIiIllgUkNERESywKSGiIiIZIFJDREREckCkxoiIiKSBSY1REREJAtMaoiIiEgWOE+NFlDMeb5JWUQIJ2QhIiIqw5YaIiIikgUmNURERCQLTGqIiIhIFpjUEBERkSwwqSEiIiJZ4OgnqjSO0iIiIm3GlhoiIiKSBSY1REREJAtMaoiIiEgWmNQQERGRLDCpISIiIllgUkNERESywKSGiIiIZOG5kprw8HDY29vDwMAAHh4eOHbsWIX1o6Ki0KpVKxgYGMDJyQl79uxR2r99+3b06dMHlpaWUCgUSE1NVTlH9+7doVAolLbx48c/T/hEREQkQ1VOaiIjIxEUFISQkBAkJyfDxcUFPj4+uHXrltr6cXFxGDFiBAICApCSkgJfX1/4+vri1KlTUp38/Hx069YNX331VYXXHjt2LG7evCltixYtqmr4REREJFNVTmqWLFmCsWPHwt/fH23atMGaNWtgaGiIdevWqa2/fPly9O3bF1OnTkXr1q0xb948uLq6YuXKlVKdd999F7NmzYK3t3eF1zY0NISNjY20mZqaVjV8IiIikqkqJTWPHj1CUlKSUvKho6MDb29vxMfHqz0mPj5eJVnx8fEpt35FNm/eDCsrK7Rr1w4zZsxAQUFBuXULCwuRm5urtBEREZF8VWntpzt37qCkpAT169dXKq9fvz7OnTun9pisrCy19bOysqoU6MiRI9GkSRM0bNgQJ06cwLRp03D+/Hls375dbf3Q0FDMmTOnStcgIiKimqvGLGg5btw46f+dnJzQoEED9OrVC5cvX0azZs1U6s+YMQNBQUHS69zcXNjZ2b2UWImIiOjlq1JSY2VlBV1dXWRnZyuVZ2dnw8bGRu0xNjY2VapfWR4eHgCAS5cuqU1q9PX1oa+v/5+uQURERDVHlfrU6OnpoWPHjoiOjpbKSktLER0dDU9PT7XHeHp6KtUHgH379pVbv7LKhn03aNDgP52HiIiI5KHKj5+CgoLg5+cHNzc3uLu7Y9myZcjPz4e/vz8AYPTo0bC1tUVoaCgAYNKkSfDy8kJYWBj69++PrVu3IjExEWvXrpXOee/ePWRkZODGjRsAgPPnzwOANMrp8uXL2LJlC/r16wdLS0ucOHECkydPxv/93//B2dn5P78JJC+KOYrnPlaEiGqMhIiIXqYqJzXDhg3D7du3MWvWLGRlZaF9+/bYu3ev1Bk4IyMDOjr/NgB16dIFW7ZsQXBwMD7//HM4Ojpix44daNeunVRn586dUlIEAMOHDwcAhISEYPbs2dDT08P+/fulBMrOzg6DBw9GcHDwc984ERERyYtCCPFK/Gmam5sLMzMz5OTkvJD5bRTP3zgAzH6+g5+nVYFxVqyqsTLOisk1TuA/xFpT4gTwanw7kLaryvc3134iIiIiWWBSQ0RERLJQY+apISKil+t5O92zwz1pCltqiIiISBaY1BAREZEsMKkhIiIiWWBSQ0RERLLApIaIiIhkgUkNERERyQKTGiIiIpIFJjVEREQkC0xqiIiISBaY1BAREZEsMKkhIiIiWWBSQ0RERLLApIaIiIhkgUkNERERyQKTGiIiIpIFJjVEREQkC0xqiIiISBaY1BAREZEsMKkhIiIiWWBSQ0RERLLApIaIiIhkgUkNERERyQKTGiIiIpIFJjVEREQkC0xqiIiISBaY1BAREZEsMKkhIiIiWWBSQ0RERLLApIaIiIhkgUkNERERyUItTQdARESkUDz/sUJUXxxUs7GlhoiIiGSBSQ0RERHJApMaIiIikgUmNURERCQLTGqIiIhIFpjUEBERkSwwqSEiIiJZeK6kJjw8HPb29jAwMICHhweOHTtWYf2oqCi0atUKBgYGcHJywp49e5T2b9++HX369IGlpSUUCgVSU1NVzvHw4UN8/PHHsLS0hLGxMQYPHozs7OznCZ+IiIhkqMpJTWRkJIKCghASEoLk5GS4uLjAx8cHt27dUls/Li4OI0aMQEBAAFJSUuDr6wtfX1+cOnVKqpOfn49u3brhq6++Kve6kydPxm+//YaoqCj8+eefuHHjBt56662qhk9EREQyVeWkZsmSJRg7diz8/f3Rpk0brFmzBoaGhli3bp3a+suXL0ffvn0xdepUtG7dGvPmzYOrqytWrlwp1Xn33Xcxa9YseHt7qz1HTk4OIiIisGTJEvTs2RMdO3bE+vXrERcXh6NHj1b1FoiIiEiGqpTUPHr0CElJSUrJh46ODry9vREfH6/2mPj4eJVkxcfHp9z66iQlJaGoqEjpPK1atULjxo3LPU9hYSFyc3OVNiIiIpKvKiU1d+7cQUlJCerXr69UXr9+fWRlZak9Jisrq0r1yzuHnp4ezM3NK32e0NBQmJmZSZudnV2lr0dEREQ1j2xHP82YMQM5OTnSlpmZqemQiIiI6AWq0irdVlZW0NXVVRl1lJ2dDRsbG7XH2NjYVKl+eed49OgR7t+/r9RaU9F59PX1oa+vX+lrEBERUc1WpZYaPT09dOzYEdHR0VJZaWkpoqOj4enpqfYYT09PpfoAsG/fvnLrq9OxY0fUrl1b6Tznz59HRkZGlc5DRERE8lWllhoACAoKgp+fH9zc3ODu7o5ly5YhPz8f/v7+AIDRo0fD1tYWoaGhAIBJkybBy8sLYWFh6N+/P7Zu3YrExESsXbtWOue9e/eQkZGBGzduAHicsACPW2hsbGxgZmaGgIAABAUFoW7dujA1NUVgYCA8PT3RuXPn//wmEBERUc1X5aRm2LBhuH37NmbNmoWsrCy0b98ee/fulToDZ2RkQEfn3wagLl26YMuWLQgODsbnn38OR0dH7NixA+3atZPq7Ny5U0qKAGD48OEAgJCQEMyePRsAsHTpUujo6GDw4MEoLCyEj48PVq1a9Vw3TURERPKjEEIITQfxMuTm5sLMzAw5OTkwNTWt9vMrFP/h4NnPd7AIqfpHxzgrVtVYGWfF5Bon8B9irSlxAjXm3/yr8S326qrK97dsRz8RERHRq4VJDREREclClfvUEBERvar4mEy7saWGiIiIZIFJDREREckCHz8RERHJzKv6mIxJDRER1WiKOS9v6DlpNz5+IiIiIllgUkNERESywKSGiIiIZIFJDREREckCkxoiIiKSBY5+IiIiegmed5QWwJFalcWWGiIiIpIFJjVEREQkC0xqiIiISBaY1BAREZEsMKkhIiIiWWBSQ0RERLLApIaIiIhkgUkNERERyQKTGiIiIpIFJjVEREQkC1wmgYiIiCQ1eTkHttQQERGRLDCpISIiIllgUkNERESywKSGiIiIZIFJDREREckCkxoiIiKSBSY1REREJAtMaoiIiEgWmNQQERGRLDCpISIiIllgUkNERESywKSGiIiIZIFJDREREckCkxoiIiKSBSY1REREJAtMaoiIiEgWniupCQ8Ph729PQwMDODh4YFjx45VWD8qKgqtWrWCgYEBnJycsGfPHqX9QgjMmjULDRo0QJ06deDt7Y2LFy8q1bG3t4dCoVDaFi5c+DzhExERkQxVOamJjIxEUFAQQkJCkJycDBcXF/j4+ODWrVtq68fFxWHEiBEICAhASkoKfH194evri1OnTkl1Fi1ahBUrVmDNmjVISEiAkZERfHx88PDhQ6VzzZ07Fzdv3pS2wMDAqoZPREREMlXlpGbJkiUYO3Ys/P390aZNG6xZswaGhoZYt26d2vrLly9H3759MXXqVLRu3Rrz5s2Dq6srVq5cCeBxK82yZcsQHByMQYMGwdnZGZs2bcKNGzewY8cOpXOZmJjAxsZG2oyMjKp+x0RERCRLVUpqHj16hKSkJHh7e/97Ah0deHt7Iz4+Xu0x8fHxSvUBwMfHR6qfnp6OrKwspTpmZmbw8PBQOefChQthaWmJDh06YPHixSguLq5K+ERERCRjtapS+c6dOygpKUH9+vWVyuvXr49z586pPSYrK0tt/aysLGl/WVl5dQBg4sSJcHV1Rd26dREXF4cZM2bg5s2bWLJkidrrFhYWorCwUHqdm5tbybskIiKimqhKSY0mBQUFSf/v7OwMPT09fPDBBwgNDYW+vr5K/dDQUMyZM+dlhkhEREQaVKXHT1ZWVtDV1UV2drZSeXZ2NmxsbNQeY2NjU2H9sv9W5ZwA4OHhgeLiYly9elXt/hkzZiAnJ0faMjMzK7w3IiIiqtmqlNTo6emhY8eOiI6OlspKS0sRHR0NT09Ptcd4enoq1QeAffv2SfUdHBxgY2OjVCc3NxcJCQnlnhMAUlNToaOjA2tra7X79fX1YWpqqrQRERGRfFX58VNQUBD8/Pzg5uYGd3d3LFu2DPn5+fD39wcAjB49Gra2tggNDQUATJo0CV5eXggLC0P//v2xdetWJCYmYu3atQAAhUKBTz75BF9++SUcHR3h4OCAmTNnomHDhvD19QXwuLNxQkICevToARMTE8THx2Py5Ml45513YGFhUU1vBREREdVkVU5qhg0bhtu3b2PWrFnIyspC+/btsXfvXqmjb0ZGBnR0/m0A6tKlC7Zs2YLg4GB8/vnncHR0xI4dO9CuXTupzmeffYb8/HyMGzcO9+/fR7du3bB3714YGBgAeNzqsnXrVsyePRuFhYVwcHDA5MmTlfrZEBER0avtuToKT5gwARMmTFC77+DBgyplQ4YMwZAhQ8o9n0KhwNy5czF37ly1+11dXXH06NHnCZWIiIheEVz7iYiIiGSBSQ0RERHJApMaIiIikgUmNURERCQLTGqIiIhIFpjUEBERkSwwqSEiIiJZYFJDREREssCkhoiIiGSBSQ0RERHJApMaIiIikgUmNURERCQLTGqIiIhIFpjUEBERkSwwqSEiIiJZYFJDREREssCkhoiIiGSBSQ0RERHJApMaIiIikgUmNURERCQLTGqIiIhIFpjUEBERkSwwqSEiIiJZYFJDREREssCkhoiIiGSBSQ0RERHJApMaIiIikgUmNURERCQLTGqIiIhIFpjUEBERkSwwqSEiIiJZYFJDREREssCkhoiIiGSBSQ0RERHJApMaIiIikgUmNURERCQLTGqIiIhIFpjUEBERkSwwqSEiIiJZYFJDREREssCkhoiIiGThuZKa8PBw2Nvbw8DAAB4eHjh27FiF9aOiotCqVSsYGBjAyckJe/bsUdovhMCsWbPQoEED1KlTB97e3rh48aJSnXv37mHUqFEwNTWFubk5AgICkJeX9zzhExERkQxVOamJjIxEUFAQQkJCkJycDBcXF/j4+ODWrVtq68fFxWHEiBEICAhASkoKfH194evri1OnTkl1Fi1ahBUrVmDNmjVISEiAkZERfHx88PDhQ6nOqFGjcPr0aezbtw+7du3CoUOHMG7cuOe4ZSIiIpKjKic1S5YswdixY+Hv7482bdpgzZo1MDQ0xLp169TWX758Ofr27YupU6eidevWmDdvHlxdXbFy5UoAj1tpli1bhuDgYAwaNAjOzs7YtGkTbty4gR07dgAAzp49i7179+L777+Hh4cHunXrhm+++QZbt27FjRs3nv/uiYiISDZqVaXyo0ePkJSUhBkzZkhlOjo68Pb2Rnx8vNpj4uPjERQUpFTm4+MjJSzp6enIysqCt7e3tN/MzAweHh6Ij4/H8OHDER8fD3Nzc7i5uUl1vL29oaOjg4SEBLz55psq1y0sLERhYaH0OicnBwCQm5tblVt+OR4+u4o6L/1eZB4n8JJjZZzVi3FWP5n/m68pcQKv9s9o2TmFEM+uLKrg+vXrAoCIi4tTKp86dapwd3dXe0zt2rXFli1blMrCw8OFtbW1EEKI2NhYAUDcuHFDqc6QIUPE0KFDhRBCzJ8/X7Ro0ULl3PXq1ROrVq1Se92QkBABgBs3bty4ceMmgy0zM/OZeUqVWmpqkhkzZii1EJWWluLevXuwtLSEQqHQYGSVl5ubCzs7O2RmZsLU1FTT4ZSLcVYvxln9akqsjLN6Mc7qpak4hRD4559/0LBhw2fWrVJSY2VlBV1dXWRnZyuVZ2dnw8bGRu0xNjY2FdYv+292djYaNGigVKd9+/ZSnac7IhcXF+PevXvlXldfXx/6+vpKZebm5hXfoJYyNTXV6h/0MoyzejHO6ldTYmWc1YtxVi9NxGlmZlapelXqKKynp4eOHTsiOjpaKistLUV0dDQ8PT3VHuPp6alUHwD27dsn1XdwcICNjY1SndzcXCQkJEh1PD09cf/+fSQlJUl1YmJiUFpaCg8Pj6rcAhEREclUlR8/BQUFwc/PD25ubnB3d8eyZcuQn58Pf39/AMDo0aNha2uL0NBQAMCkSZPg5eWFsLAw9O/fH1u3bkViYiLWrl0LAFAoFPjkk0/w5ZdfwtHREQ4ODpg5cyYaNmwIX19fAEDr1q3Rt29fjB07FmvWrEFRUREmTJiA4cOHV6o5ioiIiOSvyknNsGHDcPv2bcyaNQtZWVlo37499u7di/r16wMAMjIyoKPzbwNQly5dsGXLFgQHB+Pzzz+Ho6MjduzYgXbt2kl1PvvsM+Tn52PcuHG4f/8+unXrhr1798LAwECqs3nzZkyYMAG9evWCjo4OBg8ejBUrVvyXe9d6+vr6CAkJUXmMpm0YZ/VinNWvpsTKOKsX46xeNSFOhRCVGSNFREREpN249hMRERHJApMaIiIikgUmNURERCQLTGqIiIhIFpjUEBERkSwwqakBzp49i6ZNm2o6DABAWloavvzyS6xatQp37txR2pebm4sxY8ZoKDJl33//Pfz8/LB+/XoAQGRkJFq3bo2mTZsiJCREw9GpysjIULtYmxACGRkZGohIPoQQlVsIjyrt4cP/sOLhS5SZmYnMzExNh0EvEYd01wBpaWlwdXVFSUmJRuP4448/MGDAADg6OuKff/5Bfn4+oqKi0KNHDwCPl7Zo2LChxuNctmwZgoOD4ePjg/j4eHz88cdYunQpJk+ejJKSEoSFhWHx4sUYN26cRuN8kq6uLm7evAlra2ul8rt378La2lqj72lQUBDmzZsHIyMjpfXU1DE2Nkbbtm3x9ttvQ1dX9yVFqF5ERASWLl2KixcvAgAcHR3xySef4P3339doXDVVaWkp5s+fjzVr1iA7OxsXLlxA06ZNMXPmTNjb2yMgIEDTIQJ4vITOnDlzsGLFCuTl5QF4/HMZGBiIkJAQ1K5dW8MR1nwlJSU4efIkmjRpAgsLC02Ho0S2C1rWJM/6orh9+/ZLiqRis2fPxqeffor58+dDCIHFixdj4MCBiIqKQt++fTUdnuTbb7/F2rVrMXLkSKSkpMDd3R1r1qyRfuna2tpi9erVWpXUCCHULrSal5enNAmlJqSkpKCoqEj6/4oUFhZi+fLl2LNnDzZu3PgywlNr1qxZWLJkCQIDA6XlVuLj4zF58mRkZGRg7ty5GotNnfv37+PYsWO4desWSktLlfaNHj1aQ1Ep+/LLL7Fx40YsWrQIY8eOlcrbtWuHZcuWaU1SExgYiO3bt2PRokVKn/3s2bNx9+5drF69WsMR/qsmfO4A8Mknn8DJyQkBAQEoKSmBl5cX4uLiYGhoiF27dqF79+6aDlHClhotoKuri/bt25e7QFheXh6Sk5M13gJiZmaG5ORkNGvWTCrbsmULxo0bh61bt6JTp05a0VJjaGiIc+fOoXHjxgAAAwMDJCUloW3btgCAS5cuoVOnTvj77781GSaAfxPa5cuXY+zYsTA0NJT2lZSUICEhAbq6uoiNjdVUiFWWmJiIXr16IScnR2Mx1KtXDytWrMCIESOUyn/66ScEBgaqPDrVpN9++w2jRo1CXl4eTE1NlZJbhUKBe/fuaTC6fzVv3hzffvstevXqBRMTE6SlpaFp06Y4d+4cPD09teLfE/D499TWrVvx+uuvK5Xv2bMHI0aM0OjP5ZNqyucOAI0aNcKOHTvg5uaGHTt24OOPP8aBAwfwww8/ICYmRqt+P7GlRgs0b94ckydPxjvvvKN2f2pqKjp27PiSo1Klr6+P+/fvK5WNHDkSOjo6GDZsGMLCwjQT2FMMDQ2Rn58vva5Xrx6MjY2V6hQXF7/ssNQqa/kQQuDkyZPQ09OT9unp6cHFxQWffvqppsJ7Ls7Ozti0aZNGYygqKoKbm5tKeceOHbXmsy8zZcoUjBkzBgsWLFBKarXN9evX0bx5c5Xy0tJSqSVPG+jr68Pe3l6l3MHBQenfl6bVlM8dAO7cuQMbGxsAj5PDIUOGoEWLFhgzZgyWL1+u4eiUManRAm5ubkhKSio3qVEoFFrR0bF9+/Y4cOCASoI1fPhwCCHg5+enociUtWrVCidOnEDr1q0BQKWj4Llz59T+0tOEAwcOAAD8/f2xfPnyclvrtEVJSQk2bNiA6OhotU3mMTEx0NPTw6BBgzQU4WPvvvsuVq9ejSVLliiVr127FqNGjdJQVOpdv34dEydO1PovtjZt2uDw4cNo0qSJUvnPP/+MDh06aCgqVRMmTMC8efOwfv16aY2iwsJCzJ8/HxMmTNBwdP+qKZ87ANSvXx9nzpxBgwYNsHfvXukRXkFBgcb7zj2NSY0WCAsLQ2FhYbn7XVxcVL48NOHDDz/EoUOH1O4bMWIEhBD47rvvXnJUqr766isYGRmVuz8jIwMffPDBS4zo2cpGaWm7SZMmYcOGDejfvz/atWunth+QpjzZN02hUOD777/HH3/8gc6dOwMAEhISkJGRoVV9FQDAx8cHiYmJWjPCsTyzZs2Cn58frl+/jtLSUmzfvh3nz5/Hpk2bsGvXLo3G9tZbbym93r9/Pxo1agQXFxcAjwdbPHr0CL169dJEeGrVlM8dePxH19ChQ9GgQQMoFAp4e3sDePxvqlWrVhqOThn71BBpgfz8fCxcuLDcFpArV65oKDJlVlZW2LRpE/r166fpUFSUjcJ7FoVCgZiYmBccTeVFRERg7ty58Pf3h5OTk8ronIEDB2ooMlWHDx/G3LlzkZaWhry8PLi6umLWrFno06ePRuPy9/evdF1t+QOiJn3uwOMWuczMTAwZMgSNGjUCAGzcuBHm5uYab5l9EpMaIi0wYsQI/Pnnn3j33Xelv4aeNGnSJA1Fpqxhw4Y4ePAgWrRooelQZENHp/zpwhQKhcY73tckQghkZmaiXr16qFOnjqbDqRA/9xeDSQ2RFjA3N8fu3bvRtWtXTYdSobCwMFy5cgUrV67UqkdPTyoqKkKdOnWQmpqKdu3aaToceolKS0thYGCA06dPw9HRUdPhyEp0dDSWLl2Ks2fPAgBat26NTz75RHoUpS3Yp4ZIC1hYWKBu3bqaDuOZjhw5ggMHDuD3339H27ZtVZrMt2/frqHI/lW7dm00btyYf+lWAwsLi0onr9owBFlHRweOjo64e/cuk5pqtGrVKkyaNAlvv/221Gp89OhR9OvXD0uXLsXHH3+s4Qj/xZYaIi3w448/4v/9v/+HjRs3avVoiGf1XdCm/grbt2/HDz/8UCOSxT///BNff/219FdwmzZtMHXqVLz22msajasqEyhqy+jH3377DYsWLcLq1au1vqVOWz/3pzVq1AjTp09XGT0WHh6OBQsW4Pr16xqKTBWTGi306NEjpKeno1mzZqhVS3sb0xhn9enQoQMuX74MIQTs7e1VWkCSk5M1FFnN1KFDB1y6dAlFRUVo0qSJymg4bXo/f/zxR/j7++Ott96SHj/Gxsbi119/xYYNGzBy5EgNR1izWFhYoKCgAMXFxdDT01PpW6MNLUpAzfrcjY2NkZqaqjJP0cWLF9GhQwdpOQptwKRGixQUFCAwMFD666hsbZXAwEDY2tpi+vTpGo7wMcZZ/ebMmVPhfm1bhPP27ds4f/48AKBly5aoV6+ehiNSVpPez9atW2PcuHGYPHmyUvmSJUvw3XffSX/Fa9qePXugq6sLHx8fpfI//vgDJSUlKjP4asqzWpe0pUWppnzuwONJVjt06ICpU6cqlX/99ddITEzE1q1bNRSZGoK0xsSJE0XHjh3F4cOHhZGRkbh8+bIQQogdO3aI9u3bazi6fzHOV1deXp7w9/cXurq6QqFQCIVCIWrVqiXGjBkj8vPzNR1ejaSnpycuXryoUn7x4kWhr6+vgYjUc3JyErt371Yp//3334Wzs7MGIqrZasrnLoQQ8+bNE2ZmZqJfv35i3rx5Yt68eaJ///7C3NxczJs3TyxfvlzaNI1JjRZp3LixiI+PF0IIYWxsLH0JX7x4UZiYmGgyNCWM89U1btw40bRpU7Fnzx6Rk5MjcnJyxO7du0WzZs3E+PHjNR2ekr///lt89913Yvr06eLu3btCCCGSkpLEtWvXNByZsmbNmok1a9aolK9evVo0b95cAxGpZ2BgINLT01XK09PThaGh4csPqAKXLl0SX3zxhRg+fLjIzs4WQgixZ88ecerUKQ1H9q+a8rkLIYS9vX2lNgcHB02HKrSzg8Er6vbt27C2tlYpz8/P16rhs4yz+pWUlGDp0qXYtm0bMjIy8OjRI6X92tIP4JdffsHPP/+stCpvv379UKdOHQwdOlRrVkA+ceIEvL29YWZmhqtXr2Ls2LGoW7cutm/fjoyMDI2vTfWkKVOmYOLEiUhNTUWXLl0APO5bsWHDBq1aV8fMzAxXrlxRWWLk0qVLFc7g/bL9+eefeP3119G1a1ccOnQI8+fPh7W1NdLS0hAREYGff/5Z0yECqDmfOwCkp6drOoTK03RWRf967bXXxIoVK4QQj1sWrly5IoQQYsKECcLHx0eToSlhnNVv5syZokGDBuLrr78WBgYGYt68eSIgIEBYWlpqRZNumTp16ogzZ86olJ86dUqr/lrv1auXmDp1qhBCuZUuNjZWNGnSRIORqbd9+3bRtWtXUbduXVG3bl3RtWtXsWPHDk2HpWTcuHHCyclJXLp0SSq7ePGicHZ2FgEBARqMTFnnzp1FWFiYEEL5s09ISBC2traaDE1FTfjcn1RYWCjOnTsnioqKNB1KuZjUaJHDhw8LY2NjMX78eGFgYCAmTZokevfuLYyMjERiYqKmw5MwzurXtGlTsWvXLiHE41/EZV8cy5cvFyNGjNBkaEp69uwphgwZIh48eCCVFRQUiCFDhohevXppMDJlpqam0nv45Bfb1atXtaq/QlFRkZgzZ47IzMzUdCjPdP/+fdG5c2dRq1Yt6XFDrVq1RI8ePcTff/+t6fAkRkZG0h8wT3726enpWvPZ16TPXQgh8vPzxZgxY4Surq7Q1dWV3tMJEyaI0NBQDUenrPx5muml69atG1JTU1FcXAwnJyf88ccfsLa2Rnx8vMrK2JrEOKtfVlYWnJycADwePpmTkwMAeOONN7B7925NhqZk2bJliI2NRaNGjdCrVy/06tULdnZ2iI2N1aomc319feTm5qqUX7hwQatGatWqVQuLFi1CcXGxpkN5JjMzM8TFxWH37t346KOPMGXKFERHRyMmJgbm5uaaDk9ibm6OmzdvqpSnpKTA1tZWAxGpqkmfOwDMmDEDaWlpOHjwIAwMDKRyb29vREZGajAyVexTo2WaNWumFStdPwvjrF6NGjXCzZs30bhxYzRr1gx//PEHXF1dcfz4cejr62s6PImTkxMuXryIzZs349y5cwAer1s1atQorVprZ+DAgZg7dy62bdsG4PFaOhkZGZg2bRoGDx6s4eiU9erVC3/++adKXxVtpFAo0KdPH40vYFmR4cOHY9q0aYiKioJCoUBpaSliY2Px6aefatUK7TXpc9+xYwciIyPRuXNnpf6Ibdu2xeXLlzUYmSomNVpEV1cXN2/eVOncevfuXVhbW2vNtO+Ms/q9+eabiI6OhoeHBwIDA/HOO+8gIiICGRkZKvNYaFJoaCjq16+PsWPHKpWvW7cOt2/fxrRp0zQUmbKwsDC8/fbbsLa2xoMHD+Dl5YWsrCx4enpi/vz5mg5Pyeuvv47p06fj5MmT6Nixo0qnW02u1rxixQqMGzcOBgYGWLFiRYV1J06c+JKiqtiCBQvw8ccfw87ODiUlJWjTpg1KSkowcuRIBAcHazo8iTZ/7k+rSYMuOPmeFtHR0UFWVpbKD8+NGzfQrFkzPHjwQEORKWOcL158fDzi4+Ph6OiIAQMGaDocib29PbZs2SKN1iiTkJCA4cOHa90oiSNHjuDEiRPIy8uDq6ur1i2+B2j3as0ODg5ITEyEpaUlHBwcyq2nUChw5cqVlxjZs2VkZODUqVPIy8tDhw4dtG4tKG3+3J/2f//3fxgyZAgCAwNhYmKCEydOwMHBAYGBgbh48SL27t2r6RAlbKnRAmV/ASkUCnz//fcwNjaW9pWUlODQoUNo1aqVpsKTMM6Xx9PTE56enpoOQ0VWVhYaNGigUl6vXj21/Rg0JTMzE3Z2dujWrRu6deum6XAqVFpaqukQyvVkkqptCWt5jhw5gm7duqFx48Zo3LixpsMplzZ/7k9bsGABXn/9dZw5cwbFxcVYvnw5zpw5g7i4OPz555+aDk8JkxotsHTpUgCAEAJr1qyBrq6utE9PTw/29vZYs2aNpsKTMM4X51nzpmhLX4CyTsFP/9UeGxuLhg0baigqVfb29ujWrRveeecdvP3227CwsNB0SDXe3Llz8emnn6osuPrgwQMsXrwYs2bN0lBkynr27AlbW1uMGDEC77zzDtq0aaPpkGq8bt26IS0tDaGhodKgC1dXV8THx0sDHLSGRsdekZLu3buLe/fuaTqMZ2Kc1c/c3FxpMzIyEgqFQujr6wsLCwtNhyf56quvhKWlpVi3bp24evWquHr1qoiIiBCWlpZiwYIFmg5PkpycLD799FPRqFEjoa+vLwYNGiSioqLEw4cPNR2aWvv37xf9+/cXTZs2FU2bNhX9+/cX+/bt03RYSnR0dKTZeZ90584doaOjo4GI1Lt9+7b45ptvRJcuXYRCoRAuLi5i0aJFWjl8uiZ87o8ePRL+/v7SMHltx6SGSEtduHBB9OrVS+zdu1fToUhKS0vFZ599JgwMDISOjo7Q0dERhoaGYs6cOZoOTa3S0lIRExMj3n//fWFhYSHMzMyEv7+/psNSEh4eLmrVqiWGDx8urZ8zYsQIUbt2bbFy5UpNhydRKBTi1q1bKuXR0dHCyspKAxE925UrV8SXX34p2rZtK3R1dUWPHj00HZKkpnzuQjye96mmJDXsKKxlrl27hp07d6qdKn/JkiUaikoV43w5EhMT8c4770jDp7VFXl4ezp49izp16sDR0VGrhp2XJzk5GQEBAThx4oRWdcJs1KgRpk+fjgkTJiiVh4eHY8GCBbh+/bqGInvMwsICCoUCOTk5MDU1VRrtUlJSgry8PIwfPx7h4eEajLJ8JSUl+P333zFz5kyt+uy1/XN/kp+fH9q3b69VIzHLwz41WiQ6OhoDBw5E06ZNce7cObRr1w5Xr16FEAKurq6aDk/COF+eWrVq4caNG5oOQ4WxsTE6deqk6TCe6dq1a9iyZQu2bNmCU6dOwdPTU+u+fO/fv4++ffuqlPfp00crhsgvW7YMQgiMGTMGc+bMgZmZmbSvrI+aNnZqj42NxebNm/Hzzz/j4cOHGDRoEEJDQzUdlkTbP/cnOTo6Yu7cuYiNjVU7/FxbhvMDHNKtVdzd3fH6669jzpw5MDExQVpaGqytrTFq1Cj07dsXH374oaZDBMA4X4SdO3cqvRZC4ObNm1i5ciXs7Ozw+++/ayiymunbb7/Fli1bEBsbi1atWmHUqFEYOXIkmjRpounQVIwcORIdOnTA1KlTlcq//vprJCYmYuvWrRqK7F/FxcXYvHkzevbsCTs7O02HU6EZM2Zg69atuHHjBnr37o1Ro0Zh0KBBKh2cNa0mfO5latJwfiY1WsTExASpqalo1qwZLCwscOTIEbRt2xZpaWkYNGgQrl69qukQATDOF+HpOSsUCgXq1auHnj17IiwsTO0waiqfnZ2dNNOxi4uLpsOp0Jdffomvv/4aXbt2lVo8jh49itjYWEyZMgWmpqZSXU3+RWxoaIizZ89qZWL4pK5du2LUqFEYOnQorKysNB1OuWrK5/60spRB2ybdK8PHT1rEyMhI6vfRoEEDXL58GW3btgUA3LlzR5OhKWGc1a8mzVlRE2RkZGjtL92nRUREwMLCAmfOnMGZM2ekcnNzc0REREivFQqFRr/c3N3dkZKSovVJTWxsbLn7hBBa83NRUz73MhEREVi6dCkuXrwI4PEjqU8++QTvv/++hiNTxqRGi3Tu3BlHjhxB69at0a9fP0yZMgUnT57E9u3b0blzZ02HJ2Gc1S8oKKjSdWtCB2dNOHHiRKXrOjs7v8BIqqamTGpXtojltWvX1Par0Jb39L333kN4eLhKfFevXsW7776Lw4cPaygyZU9+7tre+jFr1iwsWbIEgYGBUqtSfHw8Jk+ejIyMDMydO1fDEf6Lj5+0yJUrV5CXlwdnZ2fk5+djypQpiIuLg6OjI5YsWaI1fyExzurXo0cPJCcno7i4GC1btgTweEVpXV1dpU7NCoUCMTExmgpTq+no6EChUFTqC0LTI2CCgoIwb948GBkZVZjQKhQKhIWFvcTIyldTpvXv0KEDcnNz8eOPP0pfwBs3bsTEiRPRs2dP/PrrrxqO8F81pfWjXr16WLFiBUaMGKFU/tNPPyEwMFCrWr7ZUqNFmjZtKv2/kZGR1s16W4ZxVr8BAwbAxMQEGzdulGa//fvvv+Hv74/XXnsNU6ZM0XCE2u/Jv3xTUlLw6aefYurUqUp/WYaFhWHRokWaClGSkpKCoqIi6f/Lo01/udeUFqVjx47h888/R/fu3TFlyhRcunQJv//+O5YsWaKyEKsm1aTWj6KiIri5uamUd+zYEcXFxRqIqHxsqSHSAra2tvjjjz+kPj9lTp06hT59+mjlsG5t5u7ujtmzZ6Nfv35K5Xv27MHMmTORlJSkochqvjNnzqjM+6RQKLRq4VUACAkJwbx581CrVi38+eefWjfsvCa1fgQGBqJ27doqj74//fRTPHjwQKumSWBLjRYpm+TqaQqFAgYGBmjevDnee+89+Pv7ayC6fzHO6pebm4vbt2+rlN++fRv//POPBiKq2U6ePKl2GKqDg4NSp0yqvCtXruDNN9/EyZMn1T7m05bHT0VFRZg+fTrCw8MxY8YMHDlyBG+99RYiIiJUklxNqkmtH8DjR2V//PGH1B8xISEBGRkZGD16tNIjVE33+WNSo0VmzZqF+fPn4/XXX4e7uzuAx02pe/fuxccff4z09HR8+OGHKC4u1mgzKuOsfm+++Sb8/f0RFhYmxZqQkICpU6firbfe0mhsNVHr1q0RGhqK77//Hnp6egCAR48eITQ0FK1bt9ZwdDXTpEmT4ODggOjoaDg4OCAhIQH37t3DlClT8PXXX2s6PImbmxsKCgpw8OBBdO7cGUIILFq0CG+99RbGjBmDVatWaTpEAMC7776L1atXqyQBa9euxahRozQUlXqnTp2S+vZdvnwZAGBlZQUrKyucOnVKqqcVj0tf6qIMVKG33npLrF69WqV8zZo14q233hJCCLFixQrRrl27lx2aEsZZ/fLz88WHH34o9PX1pTWV9PT0xIcffijy8vI0HV6Nk5CQIKytrUW9evVEr169RK9evUS9evVEvXr1REJCgqbDq5EsLS1FWlqaEOLxWkDnzp0TQjxe+6l9+/aaDE3JmDFj1P6bSU5OFm3bttVAROpNmDBBmJqairZt24qAgAAREBAg2rVrJ0xNTcWECRPE5MmTpY0qj31qtIixsTFSU1PRvHlzpfJLly6hffv2yMvLw+XLl6XRPJrCOF+c/Px86S+hZs2aqQxLpcrLz8/H5s2bpXWzWrdujZEjR/I9fU4WFhZITk6Gg4MDmjVrhu+//x49evTA5cuX4eTkhIKCAk2H+EyFhYVas05Zjx49KlWPIx6rho+ftEjdunXx22+/qSwa9ttvv6Fu3boAHv+iNjEx0UR4Esb54hgZGWnNfB81nZGREbp164bGjRtLnVqjo6MBAAMHDtRkaDVSu3btkJaWBgcHB3h4eGDRokXQ09PD2rVrlUYaalpGRkaF+xs3bvySIqnYgQMHNB2CLDGp0SIzZ87Ehx9+iAMHDkj9Ko4fP449e/ZIw5H37dsHLy8vTYbJOEnrqevU+vTq0lQ1wcHBUovm3Llz8cYbb+C1116DpaUlIiMjNRzdv+zt7bV6jiJ6sfj4ScvExsZi5cqVOH/+PACgZcuWCAwMRJcuXTQcmTLGSdpswIAB0NXVxffff6+2U+trr72m6RBl4d69e+WOMtSUtLQ0pddFRUVISUnBkiVLMH/+fHa8lzkmNUQkO1ZWVoiJiYGzszPMzMxw7NgxtGzZEjExMZgyZUqFE96RPO3evRuLFy/GwYMHNR0KvUDlz3tNGnH58mUEBwdj5MiRuHXrFgDg999/x+nTpzUcmTLGSdqspKRE6itlZWUlTV7YpEkTqdWOXi0tW7bE8ePHNR0GvWBMarTIn3/+CScnJyQkJOCXX35BXl4egMfNqSEhIRqO7l+Mk7RdWadWAFKn1tjYWMydO1erOrVS9cvNzVXacnJycO7cOQQHB8PR0VHT4dGLpsHh5PSUzp07i7CwMCGEEMbGxuLy5ctCiMdzbtja2moyNCWMk7Td3r17xS+//CKEEOLixYuiZcuWQqFQCCsrKxEdHa3h6OhFUigU0lxPZZtCoRCNGzcWcXFxmg6PXjCOftIiJ0+exJYtW1TKra2ttWodEMZJ2s7Hx0f6/+bNm+PcuXNa2amVqt/TQ6V1dHRQr149NG/eHLVq8StP7vj4SYuYm5vj5s2bKuUpKSmwtbXVQETqMU6qierWrcuE5hXg5eUFLy8v1KtXDw8ePMDff/+NCxcuYM+ePdi5c6emw6MXjGmrFhk+fDimTZuGqKgoKBQKlJaWIjY2Fp9++ilGjx6t6fAkjJOItNWVK1fw1ltv4cSJE1q98Ca9IJp+/kX/KiwsFO+//76oVauWUCgUonbt2kJHR0e88847ori4WNPhSRgnEWmrN954QwwaNEjcvn1bGBsbi9OnT4vDhw8Ld3d3cejQIU2HRy8Y56nREkIIZGZmol69erhz5w5OnjyJvLw8dOjQQat67DNOItJmnKPo1cbHT1pCCIHmzZvj9OnTcHR0hJ2dnaZDUotxEpE2UzdHUcuWLTlH0SuCHYW1hI6ODhwdHXH37l1Nh1IhxklE2oxzFL3amNRokYULF2Lq1Kk4deqUpkOpEOMkIm0VHByM0tJSAI8X3kxPT8drr72GPXv2YMWKFRqOjl409qnRIhYWFigoKEBxcTH09PRQp04dpf337t3TUGTKGCcR1SSco+jVwT41WmTZsmWaDqFSGCcR1SR169bVdAj0krClhoiIiGSBLTVaJDc3V225QqGAvr4+9PT0XnJE6jFOIiLSRmyp0SI6OjoVPvNt1KgR3nvvPYSEhEBHR3N9vBknERFpI7bUaJENGzbgiy++wHvvvQd3d3cAwLFjx7Bx40YEBwfj9u3b+Prrr6Gvr4/PP/+cccokTiIiqiaamMaY1OvZs6eIjIxUKY+MjBQ9e/YUQgixadMm0bJly5cdmhLGSURE2oiPn7RInTp1cOLECZVp/C9evAgXFxcUFBQgPT0dbdu2RUFBgYaiZJxERKSd2JFAi9jZ2SEiIkKlPCIiQprm/+7du7CwsHjZoSlhnEREpI3Yp0aLfP311xgyZAh+//13dOrUCQCQmJiIc+fO4eeffwYAHD9+HMOGDdNkmIyTiIi0Eh8/aZn09HSsXbtWWnitZcuW+OCDD2Bvb6/ZwJ7COImISNswqSEiIiJZ4OMnLXLixAm15QqFAgYGBmjcuDH09fVfclSqGCcREWkjttRokScniyv7WJ6cPK527doYNmwYvv32WxgYGGgkRoBxEhGRduLoJy3y66+/wtHREWvXrkVaWhrS0tKwdu1atGzZElu2bEFERARiYmIQHBzMOGUUJxERVRMNzY9DanTq1Ens3btXpXzv3r2iU6dOQgghfv31V9G0adOXHZoSxklERNqILTVa5OTJk2jSpIlKeZMmTXDy5EkAQPv27XHz5s2XHZoSxklERNqISY0WadWqFRYuXIhHjx5JZUVFRVi4cCFatWoFALh+/Trq16+vqRABME4iItJOHP2kRcLDwzFw4EA0atQIzs7OAB63NpSUlGDXrl0AgCtXruCjjz7SZJiMk4iItBJHP2mZf/75B5s3b8aFCxcAPJ4sbuTIkTAxMdFwZMoYJxERaRsmNURERCQLfPykhc6cOYOMjAylviAAMHDgQA1FpB7jJCIibcKkRotcuXIFb775Jk6ePAmFQqEyYVxJSYkmw5MwTiIi0kYc/aRFJk2aBAcHB9y6dQuGhoY4ffo0Dh06BDc3Nxw8eFDT4UkYJxERaSP2qdEiVlZWiImJgbOzM8zMzHDs2DG0bNkSMTExmDJlClJSUjQdIgDGSURE2oktNVqkpKREGpVjZWWFGzduAHg8Wdz58+c1GZoSxklERNqIfWq0SLt27ZCWlgYHBwd4eHhg0aJF0NPTw9q1a9G0aVNNhydhnEREpI34+EmL/O9//0N+fj7eeustXLp0CW+88QYuXLgAS0tLREZGomfPnpoOEQDjJCIi7cSkRsvdu3cPFhYW0ogdbcU4iYhI05jUEBERkSywozARERHJApMaIiIikgUmNURERCQLTGqIiIhIFpjUEBERkSwwqSEiIiJZYFJDREREssCkhoiIiGTh/wME1/tXwubrbwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# create coordination object\n", "coord = Coordination()\n", @@ -163,7 +201,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 7, "metadata": { "collapsed": true }, @@ -176,12 +214,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": { "collapsed": true, "scrolled": true }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloading supreme-corpus to /Users/seanzhangkx/.convokit/saved-corpora/supreme-corpus\n", + "Downloading supreme-corpus from http://zissou.infosci.cornell.edu/convokit/datasets/supreme-corpus/supreme-corpus.zip (1255.8MB)... Done\n" + ] + } + ], "source": [ "# OPTION 1: DOWNLOAD CORPUS\n", "# UNCOMMENT THESE LINES TO DOWNLOAD CORPUS\n", @@ -197,7 +244,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 9, "metadata": { "scrolled": true }, @@ -333,7 +380,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 12, "metadata": { "collapsed": true }, @@ -341,12 +388,12 @@ "source": [ "case_ids = {'03-1164', '04-1332', '04-1140', '04-805', '04-1495', '05-352', '04-1360b', '06-5306', '03-1388', '04-473b', '03-8661', '03-1160', '03-633', '05-1508', '05-746', '05-547', '05-502', '04-759', '03-1116', '05-1240', '03-287', '04-607', '05-1126', '04-1477', '04-8990', '06-480', '04-1152', '05-1429', '03-1488', '04-10566', '04-905', '05-493', '05-1575', '04-848', '05-983', '03-1395', '06-5754', '04-52', '05-9264', '03-725', '05-184', '04-1131', '04-698', '05-381', '06-593', '02-1472', '04-712', '04-1376', '03-184', '06-116', '04-1618', '03-1500', '03-9627', '05-669', '05-85', '05-7058', '06-313', '05-1631', '05-6551', '04-1244', '05-705', '06-84', '03-1693', '04-593', '04-1034', '04-944', '04-1186', '05-1342', '04-277', '04-37', '04-70', '06-219', '04-1329', '05-465', '05-595', '04-631', '03-1230', '06-278', '04-473', '05-130', '03-814', '04-1414', '04-433', '05-83', '04-637', '04-1327', '03-9685', '02-1672', '03-1696', '04-1170b', '03-636', '04-1371', '05-1272', '04-6964', '05-380', '05-996', '03-1407', '05-1256', '05-998', '03-932', '06-5247', '04-1067', '05-1157', '03-923', '05-1541', '05-9222', '05-5992', '03-9168', '05-200', '05-260', '04-368', '04-603', '05-204', '04-480', '04-1528', '04-721', '03-10198', '04-495', '03-878', '03-9877', '04-1527', '05-593', '04-1506', '05-128', '06-5618', '05-1074', '03-9560', '03-892', '04-1084', '04-980', '05-7053', '04-881', '03-1237', '04-1324', '05-416', '04-5928', '05-1629', '04-5293', '03-9046', '04-163', '05-5705', '03-1293', '04-1581', '04-597', '04-169', '03-1423', '03-407', '03-750', '05-1056', '03-388', '05-5224', '03-931', '03-1238', '04-1203', '03-1454', '05-259', '05-11284', '05-8820', '05-608', '04-1739', '06-102', '04-5462', '03-855', '03-1039', '04-514', '04-563', '05-11304', '05-8794', '04-623', '04-885', '04-1170', '05-1589', '04-9728', '06-157', '04-5286', '04-1264', '05-908', '04-1704', '05-848', '04-1350', '05-1120', '03-409', '06-484', '04-1144', '05-785', '03-1601', '04-6432', '04-373', '04-1544', '04-278', '05-409', '05-5966', '04-928', '05-1382', '05-915', '05-1345', '128orig', '04-340', '03-1566', '05-18', '105original', '03-9659', '04-1360', '03-710'}\n", "\n", - "corpus = corpus.filter_utterances_by(lambda u: u.meta[\"case_id\"][5:] in case_ids)" + "corpus = Corpus.filter_utterances(corpus, lambda u: u.meta[\"case_id\"][5:] in case_ids)" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -359,26 +406,22 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAErCAYAAADQckjCAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAA2/klEQVR4nO3dfZxUc//48de7rXSDJBFtlES197WpUCESSVeqSypXEXFdwsXFxSV3Vxd+hUsk6XKTyE2Ru/26jUqK1G5ru0N0hy03W6iU1Nb798c5M81Os7tTzZnZzryfj8c8duacM+d9zuzMez7zOee8P6KqGGOM8a9qid4AY4wx3rJEb4wxPmeJ3hhjfM4SvTHG+JwlemOM8bnqid6AcEcccYQ2bdo00ZthjDEHlIULF65X1YaR5lW5RN+0aVMKCgoSvRnGGHNAEZFvyptnXTfGGONzluiNMcbnLNEbY4zPVbk+erN/duzYQXFxMdu2bUv0phhjPFCrVi1SU1OpUaNG1M+xRO8zxcXFHHLIITRt2hQRSfTmGGNiSFXZsGEDxcXFNGvWLOrnWdeNz2zbto0GDRpYkjfGh0SEBg0a7PUvdkv0PmRJ3hj/2pfPtyV6Y4zxuagSvYh0F5HlIrJCRG6JMP8gEZnqzp8vIk1D5mWKyDwRWSYiS0SkVgy331SiUSMQid2tUaOK423YsIHs7Gyys7Np1KgRjRs3Dj7evn17TPft119/Zfz48TFd55w5c0hLSyM7O5vff/89puuOxsEHHxxx+pAhQ5g2bVrU65kwYQLPPvvsXscPf03XrVtH375993o9kTz00EPBbZo0aRLr1q2L6jlbt26tdLnTTz+90gstJ0yYQEZGBtnZ2Zx22ml8/vnnwXmLFy+mY8eOpKWlkZGREewa2b59O8OGDePEE0+kZcuWvPLKKxXGWLBgQfD9npWVxWuvvRac9/DDD5Oenk5aWhoPPfRQcPrtt99OZmYm2dnZdOvWLfi6vPnmm9xxxx2V7ntUVLXCG5ACrASOB2oCi4DWYcv8DZjg3u8PTHXvVwcWA1nu4wZASkXx2rZtq2bfff7552UeQ+xv+fmRb+HuvPNOvf/++6Pa7h07duz1vq5evVrT0tL2+nkVufLKK3Xy5MkxXWeoyvazbt26EacPHjxYX375ZS82qQwvXlNVZ78zMjKC+9+lSxfNj/SmCXPcccdpSUlJpctFs76NGzcG77/xxht6zjnnlNm2oqIiVVVdv369lpaWqqrqHXfcoSNGjFBV1Z07d1a6LVu2bAnu47p167Rhw4a6Y8cOXbJkiaalpQXnd+3aVb/++us9tuvhhx/WK6+8UlVVd+3apdnZ2bply5Y94oR/zlVVgQItJ69G06I/GVihqqtUdTswBegVtkwv4Bn3/jSgqzgdSd2Axaq6yP1S2aCqO/f628gc0J544gnatWtHVlYWffr0CbbQhgwZwlVXXUX79u355z//ycqVK+nQoQMZGRncdtttZVq3999/P+3atSMzM5M777wTgFtuuYWVK1eSnZ3NTTfdtEfc8FZwYH0ffvghp59+On379qVly5YMHDgQVeXJJ5/kpZde4vbbb2fgwIH89ttvdO3alTZt2pCRkcEbb7wRjPvoo48G13vXXXfxwAMPoKrcdNNNpKenk5GRwdSpU4PxOnXqxAUXXEDr1q0B+NOf/kTbtm1JS0vj8ccfL7Pd119/PWlpaXTt2pWSkpI99mvhwoV06dKFtm3bcs455/D999/vsUxgm6Bsa3f9+vUEakktW7aMk08+mezsbDIzM/n666/3eE3XrFlDeno6ADt37uTGG28kPT2dzMxMHnnkkai3Z+bMmbRp04bq1aszbdo0CgoKGDhwYPCX04wZM8jJySEjI4PLLruMP/74g7Fjx7Ju3TrOOOMMzjjjDAD++te/kpubS1paWvB9EK1DDz00eH/Lli3Bvu7p06eTmZlJVlYWAA0aNCAlJQWAiRMn8q9//QuAatWqccQRR1QYo06dOlSv7pzMuG3btmCML774gvbt2wfnd+nShVdffbXC7RIRTj/9dN5888292s+IyvsGCNyAvsCTIY8vAcaFLbMUSA15vBI4Avg7MBl4DygE/llZPGvR75+q2KJfv359cNqIESN07Nixquq0Unv06BFsPfXo0UNfeOEFVVV97LHHgq3b9957T6+44grdtWuX7ty5U3v06KGzZ8+utPUZ3goOrG/WrFl66KGH6nfffac7d+7UDh066Jw5c/Z4zo4dO4KtrZKSEm3evLnu2rVLCwsLtXPnzsH1tmrVSr/99ludNm2annXWWVpaWqo//PCDNmnSRNetW6ezZs3SOnXq6KpVq4LP2bBhg6qqbt26VdPS0oKvEaDPPfecqqr++9//1quvvrrMdm3fvl07duyoP/30k6qqTpkyRS+99NJyX3vVsq3dkpISPe6441RVdfjw4cFYf/zxh27dunWP1zT08fjx47VPnz7BFuuGDRui3p477rgj+H8P36bff/9dU1NTdfny5aqqeskll+iYMWNUdc8WfeB1Ky0t1S5duuiiRYv2WN/QoUPLbd2PGzdOjz/+eE1NTdWvvvpKVVXHjBmjgwYN0m7dumlOTo6OHj1aVVV/+eUXTU1N1euvv15zcnK0b9+++sMPP0Rcb6hPP/1UW7durXXr1tVXX31VVZ3PZYsWLXT9+vW6ZcsW7dChgw4fPjz4nFtvvVVTU1M1LS0t+Fqqqj733HNllgvwokW/P6oDpwED3b+9RaRr+EIiMkxECkSkIFILxhzYli5dSqdOncjIyOD5559n2bJlwXn9+vULtp7mzZtHv379ABgwYEBwmenTpzN9+nRycnJo06YNX375JV9//fV+bdPJJ59Mamoq1apVIzs7mzVr1uyxjKpy6623kpmZyVlnncXatWv58ccfycnJ4aeffmLdunUsWrSI+vXr06RJE+bOncvFF19MSkoKRx11FF26dCE/Pz8YL/S857Fjx5KVlUWHDh347rvvgvtTrVo1LrroIgAGDRrE3Llzy2zT8uXLWbp0KWeffTbZ2dncfffdFBcX79Nr0LFjR+69915Gjx7NN998Q+3atStc/oMPPuDKK68MtlgPP/zwqLfn+++/p2HDiIUVWb58Oc2aNePEE08EYPDgwXz00UcRl33ppZdo06YNOTk5LFu2rEw/e8CTTz5Jbm5uxOdfffXVrFy5ktGjR3P33XcDUFpayty5c3n++eeZO3cur732GjNmzKC0tJTi4mJOOeUUCgsL6dixIzfeeGOFrxFA+/btWbZsGfn5+fy///f/2LZtG61ateLmm2+mW7dudO/enezs7OD7HuCee+7hu+++Y+DAgYwbNy44/cgjj4zqWEZlokn0a4EmIY9T3WkRlxGR6kA9YANQDHykqutVdSvwNtAmPICqPq6quaqaW96bwRy4hgwZwrhx41iyZAl33nlnmXOA69atW+nzVZV//etfFBUVUVRUxIoVKxg6dOgey40YMSJ4IAygevXq7Nq1C4Bdu3aVORh80EEHBe+npKRQWlq6x/qef/55SkpKWLhwIUVFRRx11FHBbe/Xrx/Tpk1j6tSpwcRckdD9/PDDD/nggw+YN28eixYtIicnp9zzosNPpVNV0tLSgq/FkiVLmD59eoWxQ1+H0DgDBgwgLy+P2rVrc9555zFz5sxK9yNctNtTu3bt/b5ae/Xq1TzwwAPMmDGDxYsX06NHj31eZ//+/Xn99dcBSE1NpXPnzhxxxBHUqVOH8847j8LCQho0aECdOnW48MILAed/XlhYGHWMVq1acfDBB7N06VIAhg4dysKFC/noo4+oX79+8Ist1MCBA8sc8N22bVulX8DRiCbR5wMtRKSZiNTEOdiaF7ZMHjDYvd8XmOn+lHgPyBCROu4XQBdgz69g42ubN2/m6KOPZseOHTz//PPlLtehQ4fgm3zKlCnB6eeccw4TJ07kt99+A2Dt2rX89NNPHHLIIWzevDm43D333BNMOOCUvF64cCEAeXl57NixY6+2e+PGjRx55JHUqFGDWbNm8c03u6vAXnTRRUyZMoVp06YFf4V06tSJqVOnsnPnTkpKSvjoo484+eSTI663fv361KlThy+//JJPP/00OG/Xrl3B4wovvPACp512WpnnnnTSSZSUlDBv3jzAKXkR+gspktDXIfSYxapVqzj++OO59tpr6dWrF4sXL97jNQ119tln87///S/4pfjzzz9HvT2tWrVixYoVwcehcU466STWrFkTnD958mS6dOmyx3KbNm2ibt261KtXjx9//JF33nmnwv0OF/or8K233qJFixaA8/5asmQJW7dupbS0lNmzZ9O6dWtEhJ49e/Lhhx8CMGPGjOAxltdeey3Ydx9q9erVwdfnm2++4csvvwweE/npp58A+Pbbb3n11VeDv1pDt+uNN96gZcuWwcdfffVV8BjJ/qg00atqKTAcJ2l/AbykqstEZKSIXOAu9hTQQERWADcAt7jP/QV4EOfLoggoVNW39nurTdSOOiq26zv88L1/zn/+8x/at2/PqaeeWuZNHO6hhx7iwQcfJDMzkxUrVlCvXj0AunXrxoABA+jYsSMZGRn07duXzZs306BBA0499VTS09MjHoy94oormD17NllZWcybNy+qXw+hBg4cSEFBARkZGTz77LNltj0tLY3NmzfTuHFjjj76aAB69+4dPKh35plnct9999Eowvmo3bt3p7S0lFatWnHLLbfQoUOH4Ly6deuyYMEC0tPTmTlz5h6n19WsWZNp06Zx8803k5WVRXZ2Np988knE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\n", + "image/png": "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0vPj/v37SE9PR+PGjdXGYFTolW7LSJcr3VaWUaNG4eTJkzpfO4LK79SpU3Bzc0NaWppOh2CUKDMzEy1atEBiYqJ0iI7+ExYWhn379mHv3r1yR8HOnTsxbtw4HDt27JlfRLGkz11dvr85hoXo/zW0bohTY09J9xI6caL86yrlkLYaJdxLaN68eXjllVdgbm6OnTt3YvXq1fj6669lzfQ8uXnzJn744QdYWVlpXGejKrK3t0d0dDQyMjJYsGixc+dOLFmyRO4YAP67xotSrvj8JFUjJVElaWjdUCogCi+Wfz1t61ZQoEoQHx+PuXPn4s6dO3BycsLixYvx7rvvyh3ruTFy5EgkJCRg6dKlGgMmqyql39BSTo+faSSnN954Q+4IOmHBQvSc+9///id3hOfali1b5I5AVCXwLCEiIiJSPBYsREREpHgsWOi5VQ1OkCMiqhIq4vOWBQs9d4qvkFoV7p1BRFQdFH/eFn/+lgcH3dJzR19fHzY2Nrh69SoAwMzMTO3KrhWhHPdLIyKqdoQQuHv3Lq5evQobGxvo6+uXe10sWOi5VHyzsuKiRZvHbmejkxJuZktE9FyysbHRuEmkrliw0HNJpVKhbt26sLOz07gLbrFevcq//pMny78sEVF1Ymho+FQ9K8VYsNBzTV9fv8Q/pH/+Kf96H7nyNBERVQAOuiUiIiLFY8FCREREiseChYiIiBSPBQsREREpHgsWIiIiUjwWLERERKR4LFiIiIhI8ViwEBERkeKxYCEiIiLFY8FCREREiseChYiIiBSPBQsREREpHgsWIiIiUjwWLERERKR4LFiIiIhI8ViwEBERkeKxYCEiIiLFY8FCREREiseChYiIiBSPBQsREREpXrkKlsjISDg6OsLExAQdOnRAfHx8qe03bdoENzc3mJiYwN3dHTt27FCbP2LECKhUKrVHz549yxONiIiIqiGdC5aNGzciODgYYWFhSExMROvWreHj44OrV69qbX/w4EH4+flh5MiRSEpKwoABAzBgwACkpKSotevZsycuX74sPb7//vvybRERERFVOyohhNBlgQ4dOqB9+/ZYsmQJAKCwsBAODg4IDAzExIkTNdr7+voiNzcXv/zyizStY8eO8PDwwLJlywAU9bDcvn0bW7duLddGZGdnw9raGllZWbCysirXOogep1KVf1nd/qqIiJ5Punx/69TDkp+fj4SEBPTo0eO/FejpoUePHoiLi9O6TFxcnFp7APDx8dFov3fvXtjZ2cHV1RVjxozBjRs3SsyRl5eH7OxstQcRERFVXzoVLNevX0dBQQHq1KmjNr1OnTrIzMzUukxmZuYT2/fs2RNr1qxBTEwMvvjiC+zbtw+9evVCQUGB1nWGh4fD2tpaejg4OOiyGURERFTFGMgdAACGDBki/b+7uztatWqFJk2aYO/evejevbtG+0mTJiE4OFh6np2dzaKFiIioGtOph8XW1hb6+vq4cuWK2vQrV67A3t5e6zL29vY6tQcAJycn2Nra4syZM1rnGxsbw8rKSu1BRERE1ZdOBYuRkRHatWuHmJgYaVphYSFiYmLg7e2tdRlvb2+19gCwe/fuEtsDwL///osbN26gbt26usQjIiKiakrn05qDg4OxYsUKrF69GqmpqRgzZgxyc3MREBAAABg2bBgmTZoktQ8KCsKuXbsQERGBkydPYtq0aThy5AjGjh0LAMjJyUFISAj++usvnD9/HjExMejfvz+cnZ3h4+NTQZtJREREVZnOY1h8fX1x7do1TJ06FZmZmfDw8MCuXbukgbUZGRnQ0/uvDurUqRPWr1+P0NBQTJ48GS4uLti6dStatmwJANDX18exY8ewevVq3L59G/Xq1cOrr76KmTNnwtjYuII2k4iIiKoyna/DokS8Dgs9C7wOCxHRs/XMrsNCREREJAcWLERERKR4LFiIiIhI8ViwEBERkeKxYCEiIiLFY8FCREREiseChYiIiBSPBQsREREpHgsWIiIiUjwWLERERKR4LFiIiIhI8ViwEBERkeKxYCEiIiLFY8FCREREiseChYiIiBSPBQsREREpHgsWIiIiUjwWLERERKR4LFiIiIhI8ViwEBERkeKxYCEiIiLFY8FCREREiseChYiIiBSPBQsREREpHgsWIiIiUjwWLERERKR4LFiIiIhI8ViwEBERkeKxYCEiIiLFY8FCREREiseChYiIiBSPBQsREREpHgsWIiIiUjwWLERERKR4LFiIiIhI8ViwEBERkeKxYCEiIiLFY8FCREREiseChYiIiBSPBQsREREpHgsWIiIiUjwWLERERKR4LFiIiIhI8ViwEBERkeKxYCEiIiLFY8FCREREiseChYiIiBSvXAVLZGQkHB0dYWJigg4dOiA+Pr7U9ps2bYKbmxtM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Dg4OumwGERERVTGKOq35wYMHePPNNyGEwNKlS0tsN2nSJGRlZUmPCxcuVGJKIiIiqmw6Dbq1tbWFvr4+rly5ojb9ypUrsLe317qMvb19mdoXFyv//PMP9uzZU2LvCgAYGxvD2NhYl+hERERUhenUw2JkZIR27dohJiZGmlZYWIiYmBh4e3trXcbb21utPQDs3r1brX1xsZKWlobff/8dtWrV0iUWERERVXM6n9YcHByM4cOHw9PTE15eXli4cCFyc3MREBAAABg2bBjq16+P8PBwAEBQUBC6du2KiIgI9OnTBxs2bMCRI0cQFRUFoKhYeeONN5CYmIhffvkFBQUF0viWmjVrwsjIqKK2lYiIiKoonQsWX19fXLt2DVOnTkVmZiY8PDywa9cuaWBtRkYG9PT+67jp1KkT1q9fj9DQUEyePBkuLi7YunUrWrZsCQC4ePEifv75ZwCAh4eH2mv98ccfeOmll8q5aURERFRdlOvS/GPHjsXYsWO1ztu7d6/GtMGDB2Pw4MFa2zs6OkLw2stERERUCkWdJURERESkDQsWIiIiUjwWLERERKR45RrDQkRERFVPVb6BLHtYiIiISPFYsBAREZHisWAhIiIixWPBQkRERIrHgoWIiIgUjwULERERKR4LFiIiIlI8FixERESkeCxYiIiIqhCVqvyPqowFCxERESkeCxYiIiJSPBYsREREpHgsWIiIiEjxWLAQERGR4rFgISIiIsVjwUJERESKx4KFiIiIFI8FCxERESkeCxYiIiJSPBYsREREpHgGcgcgIiIqiWp6+W+AI8JEBSYhubGHhYiIiBSPPSxERERPiT1Bzx57WIiIiEjxWLAQERGR4rFgISIiIsVjwUJERESKx4KFiIiIFI8FCxERESkeCxYiIiJSPBYsREREpHgsWIiIiEjxWLAQERGR4rFgISIiIsVjwUJERESKx4KFiIiIFI8FCxERESkeCxYiIiJSPBYsREREpHgsWIiIiEjxWLAQERGR4rFgISIiIsVjwUJERESKZ1CehSIjI/Hll18iMzMTrVu3xldffQUvL68S22/atAlTpkzB+fPn4eLigi+++AK9e/eW5m/evBnLli1DQkICbt68iaSkJHh4eJQnGhERlYFquqrcy4owUYFJiMpG5x6WjRs3Ijg4GGFhYUhMTETr1q3h4+ODq1evam1/8OBB+Pn5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", "text/plain": [ - "
" + "
" ] }, - "metadata": { - "needs_background": "light" - }, + "metadata": {}, "output_type": "display_data" }, { "data": { - "image/png": "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\n", + "image/png": "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isJEREQv0vNc+ViIF5eDqjb21BAREZEssKghIiIiWWBRQ0RERLLAooaIiIhkgQOFiYiIXgHF7MqPhhZhHA1dEeypISIiIllgUUNERESywKKGiIiIZIFFDREREckCixoiIiKSBRY1REREJAssaoiIiEgWWNQQERGRLPDie0RERCSpyhcJZE8NERERyQKLGiIiIpIFFjVEREQVpFBUfqKXj0UNERERyQKLGiIiIpIFFjVEREQkC5UqaiIiIuDg4ABjY2O4u7vj+PHj5baPjIyEs7MzjI2N4erqij179igt3759O3r27ImaNWtCoVAgKSlJZRuPHj3Cp59+ipo1a8Lc3BwDBw5ERkZGZeITERGRDGlc1Gzbtg2hoaEICwtDQkICWrduDS8vL9y9e1dt+6NHj8LPzw9BQUFITEyEt7c3vL29cfbsWalNbm4uunbtii+//LLM5x0/fjx+/fVXREZG4tChQ7hz5w4GDBigaXwiIiKSKY2LmiVLlmDEiBEIDAxE8+bNsWbNGpiamuLbb79V23758uXo1asXJk2aBBcXF8ydOxdt27bFypUrpTYfffQRZs6cCU9PT7XbePjwIdatW4clS5bg7bffRrt27bB+/XocPXoUx44d03QXiIiISIY0KmoKCgoQHx+vVHzo6enB09MTsbGxateJjY1VKVa8vLzKbK9OfHw8CgsLlbbj7OyMBg0alLmd/Px8ZGdnK01EREQkXxoVNZmZmSguLkbt2rWV5teuXRvp6elq10lPT9eofVnbMDQ0hJWVVYW3Ex4eDktLS2myt7ev8PMRERFR1SPbs5+mTp2Khw8fStPNmze1HYmIiIheIo1uaGljYwN9fX2Vs44yMjJgZ2endh07OzuN2pe1jYKCAjx48ECpt6a87RgZGcHIyKjCz0FERERVm0Y9NYaGhmjXrh2io6OleSUlJYiOjoaHh4fadTw8PJTaA0BUVFSZ7dVp164dqlWrprSdixcvIjU1VaPtEBERkXxp1FMDAKGhoQgICED79u3RsWNHLFu2DLm5uQgMDAQADB06FPXq1UN4eDgAYOzYsejWrRsWL16Mvn37YuvWrTh58iTWrl0rbTMrKwupqam4c+cOgMcFC/C4h8bOzg6WlpYICgpCaGgoatSoAQsLC4SEhMDDwwOdOnV67heBiIiIqj6NixpfX1/cu3cPM2fORHp6Otzc3LB3715pMHBqair09P7tAOrcuTO2bNmC6dOnY9q0aXBycsLOnTvRsmVLqc0vv/wiFUUAMHjwYABAWFgYZs2aBQBYunQp9PT0MHDgQOTn58PLywurVq2q1E4TERGR/Ghc1ABAcHAwgoOD1S47ePCgyjwfHx/4+PiUub1hw4Zh2LBh5T6nsbExIiIiEBERoUlUIiIiek3I9uwnIiIier2wqCEiIiJZYFFDREREssCihoiIiGShUgOFiYiIdIVitqJS64kw8YKTkLaxp4aIiEhmFIrKT1UZixoiIiKSBRY1REREJAssaoiIiEgWWNQQERGRLLCoISIiIllgUUNERESywKKGiIiIZIFFDREREckCixoiIiKSBRY1REREJAssaoiIiEgWWNQQERGRLLCoISIiIllgUUNERESywKKGiIiIZIFFDREREckCixoiIiKSBRY1REREJAssaoiIiEgWWNQQERGRLLCoISIiIllgUUNERESywKKGiIiIZIFFDREREclCpYqaiIgIODg4wNjYGO7u7jh+/Hi57SMjI+Hs7AxjY2O4urpiz549SsuFEJg5cybq1KkDExMTeHp64vLly0ptHBwcoFAolKb58+dXJj4RERHJkMZFzbZt2xAaGoqwsDAkJCSgdevW8PLywt27d9W2P3r0KPz8/BAUFITExER4e3vD29sbZ8+eldosWLAAK1aswJo1axAXFwczMzN4eXnh0aNHStuaM2cO0tLSpCkkJETT+ERERCRTGhc1S5YswYgRIxAYGIjmzZtjzZo1MDU1xbfffqu2/fLly9GrVy9MmjQJLi4umDt3Ltq2bYuVK1cCeNxLs2zZMkyfPh39+/dHq1atsGnTJty5cwc7d+5U2lb16tVhZ2cnTWZmZprvMREREcmSRkVNQUEB4uPj4enp+e8G9PTg6emJ2NhYtevExsYqtQcALy8vqX1KSgrS09OV2lhaWsLd3V1lm/Pnz0fNmjXRpk0bLFy4EEVFRWVmzc/PR3Z2ttJERERE8mWgSePMzEwUFxejdu3aSvNr166N5ORkteukp6erbZ+eni4tL51XVhsAGDNmDNq2bYsaNWrg6NGjmDp1KtLS0rBkyRK1zxseHo7Zs2drsntERERUhWlU1GhTaGio9P9WrVrB0NAQn3zyCcLDw2FkZKTSfurUqUrrZGdnw97e/pVkJSIioldPo8NP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p0xyEhHRC6KNyxiTem+//bbYtm2byvxt27aJt99+WwghxKZNm0SzZs1edTQlzElERLqIh590iImJCU6fPq1yGf/Lly+jdevWyMvLQ0pKClq0aIG8vDwtpWROIiLSTRxIoEPs7e2xbt06lfnr1q2TLvN///59WFtbv+poSpiTiIh0EcfU6JBFixbBx8cHv/32Gzp06AAAOHnyJJKTk/Hjjz8CAE6cOAFfX19txmROIiLSSTz8pGNSUlKwdu1a6UZhzZo1wyeffAIHBwftBnsKcxIRka5hUUNERESywMNPOuT06dNq5ysUChgbG6NBgwYwMjJ6xalUMScREeki9tTokCcvFlf6tjx58bhq1arB19cXX331FYyNjbWSEWBOIiLSTTz7SYfs2LEDTk5OWLt2LU6dOoVTp05h7dq1aNasGbZs2YJ169Zh//79mD59OnPKKCcREb0gWro+DqnRoUMHsXfvXpX5e/fuFR06dBBCCLFjxw7RqFGjVx1NCXMSEZEuYk+NDjlz5gwaNmyoMr9hw4Y4c+YMAMDNzQ1paWmvOpoS5iQiIl3EokaHODs7Y/78+SgoKJDmFRYWYv78+XB2dgYA3L59G7Vr19ZWRADMSUREuolnP+mQiIgI9OvXD/Xr10erVq0APO5tKC4uxq5duwAA165dw3/+8x9txmROIiLSSTz7Scf8/fff2Lx5My5dugTg8cXihgwZgurVq2s5mTLmJCIiXcOihoiIiGSBh5900Pnz55Gamqo0FgQA+vXrp6VE6jEnERHpEhY1OuTatWt4//33cebMGSgUCpULxhUXF2sznoQ5iYhIF/HsJx0yduxYODo64u7duzA1NcW5c+fw559/on379jh48KC240mYk4iIdBHH1OgQGxsb7N+/H61atYKlpSWOHz+OZs2aYf/+/ZgwYQISExO1HREAcxIRkW5iT40OKS4uls7KsbGxwZ07dwA8vljcxYsXtRlNCXMSEZEu4pgaHdKyZUucOnUKjo6OcHd3x4IFC2BoaIi1a9eiUaNG2o4nYU4iItJFPPykQ37//Xfk5uZiwIABuHLlCt59911cunQJNWvWxLZt2/D2229rOyIA5iQiIt3EokbHZWVlwdraWjpjR1cxJxERaRuLGiIiIpIFDhQmIiIiWWBRQ0RERLLAooaIiIhkgUUNERERyQKLGiIiIpIFFjVEREQkCyxqiIiISBZY1BAREZEs/D/FKZV6Lje6dwAAAABJRU5ErkJggg==", "text/plain": [ - "
" + "
" ] }, - "metadata": { - "needs_background": "light" - }, + "metadata": {}, "output_type": "display_data" } ], @@ -483,7 +526,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.3" + "version": "3.9.7" } }, "nbformat": 4, From 7eac9fcf84425f68244f674dc2b644a1e8d3126f Mon Sep 17 00:00:00 2001 From: seanzhangkx8 <106214464+seanzhangkx8@users.noreply.github.com> Date: Wed, 19 Apr 2023 23:34:41 -0400 Subject: [PATCH 04/20] comments for changes --- convokit/coordination/coordination.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/convokit/coordination/coordination.py b/convokit/coordination/coordination.py index a5d79091..1d524479 100644 --- a/convokit/coordination/coordination.py +++ b/convokit/coordination/coordination.py @@ -109,7 +109,7 @@ def transform(self, corpus: Corpus) -> Corpus: utterance_thresh_func=self.utterance_thresh_func, ) - # avoiding mutability for the sake of DB corpus + # Keep record of all score update for all (speakers, target) pairs to avoid redundant operations todo = {} for (speaker, target), score in pair_scores.items(): @@ -121,6 +121,7 @@ def transform(self, corpus: Corpus) -> Corpus: for key, score in todo.items(): speaker = key[0] target = key[1] + # For avoiding mutability for the sake of DB corpus temp_dict = copy.deepcopy(speaker.meta[self.coordination_attribute_name]) temp_dict[target] = score speaker.meta[self.coordination_attribute_name] = temp_dict From b2d41b1946e6c2df0b7a60b9352266e84d44519d Mon Sep 17 00:00:00 2001 From: seanzhangkx8 <106214464+seanzhangkx8@users.noreply.github.com> Date: Thu, 4 May 2023 02:08:32 -0400 Subject: [PATCH 05/20] metadata field deepcopy --- convokit/model/convoKitMeta.py | 12 +++++++++++- .../tests/phrasing_motifs/test_questionSentences.py | 7 ++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/convokit/model/convoKitMeta.py b/convokit/model/convoKitMeta.py index 72a36e2e..05393179 100644 --- a/convokit/model/convoKitMeta.py +++ b/convokit/model/convoKitMeta.py @@ -7,6 +7,7 @@ from .convoKitIndex import ConvoKitIndex import json from typing import Union +import copy # See reference: https://stackoverflow.com/questions/7760916/correct-usage-of-a-getter-setter-for-dictionary-values @@ -30,9 +31,18 @@ def storage_key(self) -> str: return f"{self.obj_type}_{self.owner.id}" def __getitem__(self, item): - return self._get_storage().get_data( + # in DB mode, metadata field mutation would not be updated. (ex. mutating dict/list metadata fields) + # we align MEM mode behavior and DB mode by making deepcopy of metadata fields, so mutation no longer + # affect corpus metadata storage, but only acting on the copy of it. + item = self._get_storage().get_data( "meta", self.storage_key, item, self.index.get_index(self.obj_type) ) + immutable_types = (int, float, bool, complex, str, tuple, frozenset) + if isinstance(item, immutable_types): + return item + else: + # return copy.deepcopy(item) if item is not common python immutable type + return copy.deepcopy(item) def _get_storage(self): # special case for Corpus meta since that's the only time owner is not a CorpusComponent diff --git a/convokit/tests/phrasing_motifs/test_questionSentences.py b/convokit/tests/phrasing_motifs/test_questionSentences.py index 1509e0c2..07a52e82 100644 --- a/convokit/tests/phrasing_motifs/test_questionSentences.py +++ b/convokit/tests/phrasing_motifs/test_questionSentences.py @@ -1,4 +1,5 @@ import unittest +import copy from convokit.phrasing_motifs.questionSentences import QuestionSentences from convokit.tests.test_utils import small_burr_corpus_parsed, reload_corpus_in_db_mode @@ -7,10 +8,14 @@ def parsed_burr_sir_corpus_with_lowercase_are(): corpus = small_burr_corpus_parsed() for utterance in corpus.iter_utterances(): - parsed = utterance.retrieve_meta("parsed") + # with new DB mode behavior, mutation to metadata fields is no longer supported. + parsed = copy.deepcopy(utterance.retrieve_meta("parsed")) for sentence in parsed: if sentence["toks"][0]["tok"] == "Are": + # trying to mutate here originally. + # solve by deepcopying the entire metadata field, modify it, then replace entire original field. sentence["toks"][0]["tok"] = "are" + utterance.meta["parsed"] = parsed return corpus From 5f371d166a5e52c48a521af767616b041e072a9f Mon Sep 17 00:00:00 2001 From: seanzhangkx8 <106214464+seanzhangkx8@users.noreply.github.com> Date: Thu, 25 May 2023 22:15:58 +0800 Subject: [PATCH 06/20] documentation and website update for V3.0 --- README.md | 2 +- docs/source/architecture.rst | 8 +++++--- docs/source/conf.py | 6 +++--- docs/source/index.rst | 2 +- docs/source/storage_options.rst | 34 ++++----------------------------- docs/source/troubleshooting.rst | 32 +++++++++++++++++++++++++++++++ 6 files changed, 46 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index d787355b..5aa82a66 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ [![Slack Community](https://img.shields.io/static/v1?logo=slack&style=flat&color=red&label=slack&message=community)](https://join.slack.com/t/convokit/shared_invite/zt-1axq34qrp-1hDXQrvSXClIbJOqw4S03Q) -This toolkit contains tools to extract conversational features and analyze social phenomena in conversations, using a [single unified interface](https://convokit.cornell.edu/documentation/architecture.html) inspired by (and compatible with) scikit-learn. Several large [conversational datasets](https://github.com/CornellNLP/ConvoKit#datasets) are included together with scripts exemplifying the use of the toolkit on these datasets. The latest version is [2.5.3](https://github.com/CornellNLP/ConvoKit/releases/tag/v2.5.2) (released 16 Jan 2022); follow the [project on GitHub](https://github.com/CornellNLP/ConvoKit) to keep track of updates. +This toolkit contains tools to extract conversational features and analyze social phenomena in conversations, using a [single unified interface](https://convokit.cornell.edu/documentation/architecture.html) inspired by (and compatible with) scikit-learn. Several large [conversational datasets](https://github.com/CornellNLP/ConvoKit#datasets) are included together with scripts exemplifying the use of the toolkit on these datasets. The latest version is [3.0.0](https://github.com/CornellNLP/ConvoKit/releases/tag/v3.0.0) (released 1 June 2023); follow the [project on GitHub](https://github.com/CornellNLP/ConvoKit) to keep track of updates. Read our [documentation](https://convokit.cornell.edu/documentation) or try ConvoKit in our [interactive tutorial](https://colab.research.google.com/github/CornellNLP/ConvoKit/blob/master/examples/Introduction_to_ConvoKit.ipynb). diff --git a/docs/source/architecture.rst b/docs/source/architecture.rst index db85bde0..0cbf310c 100644 --- a/docs/source/architecture.rst +++ b/docs/source/architecture.rst @@ -24,7 +24,9 @@ In everyday usage, "metadata" simply refers to information for identifying and o Each of the four classes in the hierarchy contains a ``.meta`` field, which is a dictionary that maps from metadata name to value. In the previous example, you would want a Speaker-level metadata entry called something like "start-date". So, if ``spkr`` is an instance of Speaker representing a Reddit user who joined on April 1, 2008, ``spkr.meta`` would be a dictionary looking like ``{"start-date": "04-01-2008"}``. While for simplicity we have represented the start date as a string, in practice there are no restrictions on what kinds of objects can be stored as metadata, so you could have chosen a fancier representation, like a Pandas timestamp. -Note that all of the datasets that ship with ConvoKit have some metadata already present, usually related to the task that the dataset was originally designed for. To learn what metadata is present in a Corpus, you can access its ``meta_index`` attribute. +Note that *all* metadata values should be treated as immutable regardless of type; for more detailed information, refer to `Immutability of Metadata Fields `_. + +All of the datasets that ship with ConvoKit have some metadata already present, usually related to the task that the dataset was originally designed for. To learn what metadata is present in a Corpus, you can access its meta_index attribute. Vectors ^^^^^^^ @@ -35,7 +37,7 @@ Additionally, ConvoKit provides support for adding vector data (e.g. GloVe repre Transformer ----------- -Of course, if we only had Corpus objects (merely large containers of data), we wouldn't really be able to do anything interesting. In practice, we need to manipulate the corpora in some way. This idea is represented in ConvoKit as the Transformer class. +Of course, if we only had Corpus objects (merely large containers of data), we wouldn't really be able to do anything interesting. In practice, we need to manipulate the corpora in some way. This idea is represented in ConvoKit as the Transformer class. At a high level, a Transformer is an object that takes in a Corpus and gives back the same Corpus with some modifications done to it. In almost all cases, these modifications will take the form of changed or added metadata. For example, one kind of Transformer built in to ConvoKit is the TextParser, which is designed to add dependency parses to a Corpus. When you run the TextParser on a Corpus, it adds to each Utterance a metadata entry called "parsed", whose value is the dependency parse of that Utterance's text (represented as a `SpaCy Doc `_). The modified Corpus is then returned so you can continue to do other things with it (including running other Transformers). @@ -61,7 +63,7 @@ more complicated task, like named entity recognition. In general, the code for c Transformers takes the following form:: # Assume that transformer1,transformer2,... have been previously initialized as instances of Transformer subclasses - + base_corpus = Corpus(...) corpus1 = transformer1.transform(base_corpus) diff --git a/docs/source/conf.py b/docs/source/conf.py index 3b4d5b0f..13130272 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -55,7 +55,7 @@ # General information about the project. project = "convokit" -copyright = "2017-2022 The ConvoKit Developers" +copyright = "2017-2023 The ConvoKit Developers" author = "The ConvoKit Developers" # The version info for the project you're documenting, acts as replacement for @@ -63,9 +63,9 @@ # built documents. # # The short X.Y version. -version = "2.5" +version = "3.0" # The full version, including alpha/beta/rc tags. -release = "2.5.3" +release = "3.0.0" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/docs/source/index.rst b/docs/source/index.rst index 9a389466..e887a4f6 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -8,7 +8,7 @@ Cornell Conversational Analysis Toolkit (ConvoKit) Documentation This toolkit contains tools to extract conversational features and analyze social phenomena in conversations, using a `single unified interface `_ inspired by (and compatible with) scikit-learn. Several large `conversational datasets `_ are included together with scripts exemplifying the use of the toolkit on these datasets. -More information can be found at our `website `_. The latest version is `2.5.3 `_ (released 16 Jan 2022). +More information can be found at our `website `_. The latest version is `3.0.0 `_ (released 1 June 2023). Contents -------- diff --git a/docs/source/storage_options.rst b/docs/source/storage_options.rst index 0075fc5f..b6d0bec7 100644 --- a/docs/source/storage_options.rst +++ b/docs/source/storage_options.rst @@ -43,37 +43,11 @@ This can be done in three ways: Differences in Corpus behavior between backends =============================================== For the most part, the two backends are designed to be interchangeable; that is, code written for one backend should work in the other backend out-of-the-box. -However, some specifics of MongoDB result in two minor differences in Corpus behavior that you should be aware of when writing your code. +We made deliberate design choices during implementation to ensure consistent behavior of the code between the two supported backends. +However, some specifics of MongoDB result in one minor differences in Corpus behavior that you should be aware of when writing your code. -First, since the MongoDB backend uses a MongoDB database as its data storage system, it needs to give that database a name. -Thus, there is an additional parameter in the Corpus constructor, ``db_collection_prefix``, which is only used by the MongoDB backend. +Since the MongoDB backend uses a MongoDB database as its data storage system, it needs to give that database a name. +Thus, there is an additional parameter in the Corpus constructor, db_collection_prefix, which is only used by the MongoDB backend. This parameter determines how the MongoDB database will be named. Note that you still have the option of not specifying a name, but in this case a random name will be used. It is best practice to explicitly supply a name yourself, so you know what database to reconnect to in the event that reconnection is needed after a system crash. - -Second, because all operations in MongoDB involve *copying* data from the MongoDB database to the Python process (or vice versa), all metadata values must be treated as *immutable*. -This does not really make a difference for primitive values like ints and strings, since those are immutable in Python to begin with. -However, code that relies on mutating a more complex type like a dictionary may not work as expected in the MongoDB backend. -For example, suppose the metadata entry ``"foo"`` is a list type, and you access it by saving it to a Python variable as follows: - ->>> saved_foo = my_utt.meta["foo"] - -Because lists are considered mutable in Python, you might expect the following code to successfully add a new item in the ``foo`` metadata of ``my_utt``: - ->>> saved_foo.append("new value") - -This will work in the native Python backend. -However, it will not work in the MongoDB backend; the code will run, but only the variable ``saved_foo`` will be affected, not the actual metadata of ``my_utt``. -This is because ``saved_foo`` only contains a copy of the data in the MongoDB database, which has been translated into a Python object. -Thus, any operations that are done directly on ``saved_foo`` are done only to the Python object, and do not involve any database writes. - -It is therefore best to treat *all* metadata objects, regardless of type, as immutable when using the MongoDB backend. -Thus, the correct way to change metadata in MongoDB mode is the same way you would change an int or string type metadata entry: that is, by completely overwriting it. -For example, to achieve the desired effect with the ``"foo"`` metadata entry from above, you should do the following: - ->>> temp_foo = my_utt.meta["foo"] ->>> temp_foo.append("new value") ->>> my_utt.meta["foo"] = temp_foo - -By adding the additional line of code that overwrites the ``"foo"`` metadata entry, you are telling ConvoKit that you want to update the value of ``"foo"`` in the database-backed metadata table with a new value, represented by ``temp_foo`` which contains the new additional item. -Thus the contents of ``temp_foo`` will get written to the database as the new value of ``my_utt.meta["foo"]``, hence updating the metadata as desired. diff --git a/docs/source/troubleshooting.rst b/docs/source/troubleshooting.rst index 58f93c81..3d12b69b 100644 --- a/docs/source/troubleshooting.rst +++ b/docs/source/troubleshooting.rst @@ -62,3 +62,35 @@ and if that doesn't fix the issue, then run: >>> open /Applications/Python\ 3.7/Install\ Certificates.command (Substitute 3.7 in the above command with your current Python version (e.g. 3.8 or 3.9) if necessary.) + +Immutability of Metadata Fields +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Starting with 3.0, ConvoKit disallows mutation on Metadata fields to prevent unintended data loss and ensure the integrity of the corpus metadata storage. +When accessing a Metadata field, a deep copy of the field is returned to prevent mutation changes to the copy from affecting the storage. +This behavior is intended to ensure consistency between DB and MEM modes, since permitting mutations to mutable metadata fields in DB mode would solely modify the in-memory data without updating the database, thereby risking potential data loss. + +Since all mutations to mutable metadata fields only affect the in-memory copy of the data instead of the actual storage, potentially resulting in data loss. +Thus all metadata values must be treated as *immutable*. This does not really make a difference for primitive values like ints and strings, +since those are immutable in Python to begin with. However, code that relies on mutating a more complex type like lists or dictionaries may not work as expected. +For example, suppose the metadata entry ``"foo"`` is a list type, and you access it by saving it to a Python variable as follows: + +>>> saved_foo = my_utt.meta["foo"] + +Because lists are considered mutable in Python, you might expect the following code to successfully add a new item in the ``foo`` metadata of ``my_utt``: + +>>> saved_foo.append("new value") + +However, it will not work in the new 3.0 version of ConvoKit; the code will run, but only the variable ``saved_foo`` will be affected, not the actual metadata storage of ``my_utt``. +This is because ``saved_foo`` only contains a copy of the data from the storage, which has been translated into a Python object. +Thus, any operations that are done directly on ``saved_foo`` are done only to the Python object, and do not involve any storage writes. + +It is therefore necessary to treat *all* metadata objects, regardless of type, as immutable. +Thus, the way to change metadata is the same way you would change an int or string type metadata entry: that is, by completely overwriting it. +For example, to achieve the desired effect with the ``"foo"`` metadata entry from above, you should do the following: + +>>> temp_foo = my_utt.meta["foo"] +>>> temp_foo.append("new value") +>>> my_utt.meta["foo"] = temp_foo + +By adding the additional line of code that overwrites the ``"foo"`` metadata entry, you are telling ConvoKit that you want to update the value of ``"foo"`` in the storage’s metadata table with a new value, represented by ``temp_foo`` which contains the new additional item. +Thus the contents of ``temp_foo`` will get written to the storage as the new value of ``my_utt.meta["foo"]``, hence updating the metadata as desired. From d39649283c30f9662c2eb787bd4e3310d7f0c4b1 Mon Sep 17 00:00:00 2001 From: seanzhangkx8 <106214464+seanzhangkx8@users.noreply.github.com> Date: Fri, 26 May 2023 22:27:04 +0800 Subject: [PATCH 07/20] get dataframe mutation fix --- convokit/model/corpus.py | 12 +++++++++--- convokit/model/corpusUtil.py | 34 ++++++++++++++++++++++++++++------ 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/convokit/model/corpus.py b/convokit/model/corpus.py index dc59e87d..db8dee31 100644 --- a/convokit/model/corpus.py +++ b/convokit/model/corpus.py @@ -443,6 +443,7 @@ def get_utterances_dataframe( self, selector: Optional[Callable[[Utterance], bool]] = lambda utt: True, exclude_meta: bool = False, + mutable: bool = False, ): """ Get a DataFrame of the utterances with fields and metadata attributes, with an optional selector that filters @@ -451,9 +452,10 @@ def get_utterances_dataframe( :param exclude_meta: whether to exclude metadata :param selector: a (lambda) function that takes a Utterance and returns True or False (i.e. include / exclude). By default, the selector includes all Utterances in the Corpus. + :param mutable: whether to allow changes to corpus metadata reflecting in already generated dataframe. :return: a pandas DataFrame """ - return get_utterances_dataframe(self, selector, exclude_meta) + return get_utterances_dataframe(self, selector, exclude_meta, mutable) def iter_conversations( self, selector: Optional[Callable[[Conversation], bool]] = lambda convo: True @@ -473,6 +475,7 @@ def get_conversations_dataframe( self, selector: Optional[Callable[[Conversation], bool]] = lambda convo: True, exclude_meta: bool = False, + mutable: bool = False, ): """ Get a DataFrame of the conversations with fields and metadata attributes, with an optional selector that filters @@ -481,9 +484,10 @@ def get_conversations_dataframe( :param exclude_meta: whether to exclude metadata :param selector: a (lambda) function that takes a Conversation and returns True or False (i.e. include / exclude). By default, the selector includes all Conversations in the Corpus. + :param mutable: whether to allow changes to corpus metadata reflecting in already generated dataframe. :return: a pandas DataFrame """ - return get_conversations_dataframe(self, selector, exclude_meta) + return get_conversations_dataframe(self, selector, exclude_meta, mutable) def iter_speakers( self, selector: Optional[Callable[[Speaker], bool]] = lambda speaker: True @@ -504,6 +508,7 @@ def get_speakers_dataframe( self, selector: Optional[Callable[[Speaker], bool]] = lambda utt: True, exclude_meta: bool = False, + mutable: bool = False, ): """ Get a DataFrame of the Speakers with fields and metadata attributes, with an optional selector that filters @@ -512,9 +517,10 @@ def get_speakers_dataframe( :param exclude_meta: whether to exclude metadata :param selector: selector: a (lambda) function that takes a Speaker and returns True or False (i.e. include / exclude). By default, the selector includes all Speakers in the Corpus. + :param mutable: whether to allow changes to corpus metadata reflecting in already generated dataframe. :return: a pandas DataFrame """ - return get_speakers_dataframe(self, selector, exclude_meta) + return get_speakers_dataframe(self, selector, exclude_meta, mutable) def iter_objs( self, diff --git a/convokit/model/corpusUtil.py b/convokit/model/corpusUtil.py index 99e36a19..d18daba9 100644 --- a/convokit/model/corpusUtil.py +++ b/convokit/model/corpusUtil.py @@ -4,9 +4,12 @@ """ import pandas as pd +import copy -def get_utterances_dataframe(obj, selector=lambda utt: True, exclude_meta: bool = False): +def get_utterances_dataframe( + obj, selector=lambda utt: True, exclude_meta: bool = False, mutable: bool = False +): """ Get a DataFrame of the utterances of a given object with fields and metadata attributes, with an optional selector that filters for utterances that should be included. @@ -15,11 +18,18 @@ def get_utterances_dataframe(obj, selector=lambda utt: True, exclude_meta: bool :param exclude_meta: whether to exclude metadata :param selector: a (lambda) function that takes a Utterance and returns True or False (i.e. include / exclude). By default, the selector includes all Utterances that compose the object. + :param mutable: whether to allow changes to corpus metadata reflecting in already generated dataframe. :return: a pandas DataFrame """ ds = dict() for utt in obj.iter_utterances(selector): - d = utt.to_dict().copy() + if mutable: + d = utt.to_dict().copy() + else: + d = {} + for k, v in utt.to_dict().items(): + d[k] = v + # d = copy.deepcopy(utt_dict) if not exclude_meta: for k, v in d["meta"].items(): d["meta." + k] = v @@ -35,7 +45,9 @@ def get_utterances_dataframe(obj, selector=lambda utt: True, exclude_meta: bool ] -def get_conversations_dataframe(obj, selector=lambda convo: True, exclude_meta: bool = False): +def get_conversations_dataframe( + obj, selector=lambda convo: True, exclude_meta: bool = False, mutable: bool = False +): """ Get a DataFrame of the conversations of a given object with fields and metadata attributes, with an optional selector that filters for conversations that should be included. @@ -44,11 +56,15 @@ def get_conversations_dataframe(obj, selector=lambda convo: True, exclude_meta: :param exclude_meta: whether to exclude metadata :param selector: a (lambda) function that takes a Conversation and returns True or False (i.e. include / exclude). By default, the selector includes all Conversations in the Corpus. + :param mutable: whether to allow changes to corpus metadata reflecting in already generated dataframe. :return: a pandas DataFrame """ ds = dict() for convo in obj.iter_conversations(selector): - d = convo.to_dict().copy() + if mutable: + d = convo.to_dict().copy() + else: + d = copy.deepcopy(convo.to_dict()) if not exclude_meta: for k, v in d["meta"].items(): d["meta." + k] = v @@ -59,7 +75,9 @@ def get_conversations_dataframe(obj, selector=lambda convo: True, exclude_meta: return df.set_index("id") -def get_speakers_dataframe(obj, selector=lambda utt: True, exclude_meta: bool = False): +def get_speakers_dataframe( + obj, selector=lambda utt: True, exclude_meta: bool = False, mutable: bool = False +): """ Get a DataFrame of the Speakers with fields and metadata attributes, with an optional selector that filters Speakers that should be included. Edits to the DataFrame do not change the corpus in any way. @@ -67,11 +85,15 @@ def get_speakers_dataframe(obj, selector=lambda utt: True, exclude_meta: bool = :param exclude_meta: whether to exclude metadata :param selector: selector: a (lambda) function that takes a Speaker and returns True or False (i.e. include / exclude). By default, the selector includes all Speakers in the Corpus. + :param mutable: whether to allow changes to corpus metadata reflecting in already generated dataframe. :return: a pandas DataFrame """ ds = dict() for spkr in obj.iter_speakers(selector): - d = spkr.to_dict().copy() + if mutable: + d = spkr.to_dict().copy() + else: + d = copy.deepcopy(spkr.to_dict()) if not exclude_meta: for k, v in d["meta"].items(): d["meta." + k] = v From 2d83839fcb21f673fb935a4640139b7e658cb60b Mon Sep 17 00:00:00 2001 From: seanzhangkx8 <106214464+seanzhangkx8@users.noreply.github.com> Date: Thu, 1 Jun 2023 22:22:00 +0800 Subject: [PATCH 08/20] fix get dataframe mutability --- convokit/model/corpusUtil.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/convokit/model/corpusUtil.py b/convokit/model/corpusUtil.py index d18daba9..a7441e3c 100644 --- a/convokit/model/corpusUtil.py +++ b/convokit/model/corpusUtil.py @@ -64,7 +64,10 @@ def get_conversations_dataframe( if mutable: d = convo.to_dict().copy() else: - d = copy.deepcopy(convo.to_dict()) + d = {} + for k, v in convo.to_dict().items(): + d[k] = v + # d = copy.deepcopy(utt_dict) if not exclude_meta: for k, v in d["meta"].items(): d["meta." + k] = v @@ -93,7 +96,10 @@ def get_speakers_dataframe( if mutable: d = spkr.to_dict().copy() else: - d = copy.deepcopy(spkr.to_dict()) + d = {} + for k, v in spkr.to_dict().items(): + d[k] = v + # d = copy.deepcopy(utt_dict) if not exclude_meta: for k, v in d["meta"].items(): d["meta." + k] = v From a9d9d38c3b2eb7fd9b00a99ba23c907656b6b5e8 Mon Sep 17 00:00:00 2001 From: seanzhangkx8 <106214464+seanzhangkx8@users.noreply.github.com> Date: Fri, 2 Jun 2023 22:29:19 +0800 Subject: [PATCH 09/20] modify 3.0 documentation --- docs/source/awry.rst | 23 ++++++++--------------- docs/source/troubleshooting.rst | 9 ++++----- 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/docs/source/awry.rst b/docs/source/awry.rst index 5825474f..e758ae24 100644 --- a/docs/source/awry.rst +++ b/docs/source/awry.rst @@ -1,11 +1,11 @@ Conversations Gone Awry Dataset =============================== -A collection of conversations from Wikipedia talk pages that derail into personal attacks (4,188 conversations, 30,021 comments). +A collection of conversations from Wikipedia talk pages that derail into personal attacks (4,188 conversations, 30,021 comments). -Distributed together with: +Distributed together with: -`Conversations gone awry: Detecting early signs of conversational failure `_. Justine Zhang, Jonathan P. Chang, Cristian Danescu-Niculescu-Mizil, Lucas Dixon, Yiqing Hua, Nithum Thain, Dario Taraborelli. ACL 2018. +`Conversations gone awry: Detecting early signs of conversational failure `_. Justine Zhang, Jonathan P. Chang, Cristian Danescu-Niculescu-Mizil, Lucas Dixon, Yiqing Hua, Nithum Thain, Dario Taraborelli. ACL 2018. and @@ -45,10 +45,10 @@ Metadata for each conversation include: * page_title: the title of the talk page the comment came from * page_id: the unique numerical ID of the talk page the comment came from -* pair_id: the id of the conversation that this comment's conversation is paired with +* pair_id: the id of the conversation that this conversation is paired with * conversation_has_personal_attack: whether any comment in this comment's conversation contains a personal attack according to crowdsourced annotators -* verified: whether the personal attack label has been double-checked by an internal annotator and confirmed to be correct -* pair_verified: whether the personal attack label for the paired conversation has been double-checked by an internal annotator and confirmed to be correct +* verified: whether the personal attack label has been double-checked by an internal annotator and confirmed to be correct +* pair_verified: whether the personal attack label for the paired conversation has been double-checked by an internal annotator and confirmed to be correct * annotation_year: which round of annotation the conversation's label came from. Possible values are "2018" for the first annotation round and "2019" for the second annotation round. * split: which split (train, val, or test) this conversation was used in for the experiments described in "Trouble on the Horizon" (not applicable to results from "Conversations Gone Awry", which reports leave-one-out accuracies). @@ -56,7 +56,7 @@ Metadata for each conversation include: Usage ----- -To download directly with ConvoKit: +To download directly with ConvoKit: >>> from convokit import Corpus, download >>> corpus = Corpus(filename=download("conversations-gone-awry-corpus")) @@ -78,7 +78,7 @@ This data was collected from late 2017 to early 2018 and was annotated in two ro Related links ^^^^^^^^^^^^^ -* Fun: Guess whether a `conversation will go awry `_. +* Fun: Guess whether a `conversation will go awry `_. * `Wikipedia editors' talk Pages `_. @@ -87,10 +87,3 @@ Contact ^^^^^^^ Please email any questions to: cristian@cs.cornell.edu (Cristian Danescu-Niculescu-Mizil) - - - - - - - diff --git a/docs/source/troubleshooting.rst b/docs/source/troubleshooting.rst index 3d12b69b..ddf32858 100644 --- a/docs/source/troubleshooting.rst +++ b/docs/source/troubleshooting.rst @@ -69,8 +69,7 @@ Starting with 3.0, ConvoKit disallows mutation on Metadata fields to prevent uni When accessing a Metadata field, a deep copy of the field is returned to prevent mutation changes to the copy from affecting the storage. This behavior is intended to ensure consistency between DB and MEM modes, since permitting mutations to mutable metadata fields in DB mode would solely modify the in-memory data without updating the database, thereby risking potential data loss. -Since all mutations to mutable metadata fields only affect the in-memory copy of the data instead of the actual storage, potentially resulting in data loss. -Thus all metadata values must be treated as *immutable*. This does not really make a difference for primitive values like ints and strings, +Therefore, all metadata values must be treated as *immutable*. This does not really make a difference for primitive values like ints and strings, since those are immutable in Python to begin with. However, code that relies on mutating a more complex type like lists or dictionaries may not work as expected. For example, suppose the metadata entry ``"foo"`` is a list type, and you access it by saving it to a Python variable as follows: @@ -80,9 +79,9 @@ Because lists are considered mutable in Python, you might expect the following c >>> saved_foo.append("new value") -However, it will not work in the new 3.0 version of ConvoKit; the code will run, but only the variable ``saved_foo`` will be affected, not the actual metadata storage of ``my_utt``. -This is because ``saved_foo`` only contains a copy of the data from the storage, which has been translated into a Python object. -Thus, any operations that are done directly on ``saved_foo`` are done only to the Python object, and do not involve any storage writes. +However, it will not work starting with the 3.0 version of ConvoKit; the code will run, but only the variable ``saved_foo`` will be affected, not the actual metadata storage of ``my_utt``. +This is because ``saved_foo`` only contains a copy of the data from the storage. +Thus, any operations that are done directly on ``saved_foo`` are done only to the copy, and do not involve any storage writes. It is therefore necessary to treat *all* metadata objects, regardless of type, as immutable. Thus, the way to change metadata is the same way you would change an int or string type metadata entry: that is, by completely overwriting it. From 6cb107464f88a6b6a7649e71c52dac751f954c36 Mon Sep 17 00:00:00 2001 From: seanzhangkx8 <106214464+seanzhangkx8@users.noreply.github.com> Date: Sat, 3 Jun 2023 13:14:25 +0800 Subject: [PATCH 10/20] revert get dataframe fixes --- convokit/model/corpus.py | 12 +++-------- convokit/model/corpusUtil.py | 40 ++++++------------------------------ 2 files changed, 9 insertions(+), 43 deletions(-) diff --git a/convokit/model/corpus.py b/convokit/model/corpus.py index db8dee31..dc59e87d 100644 --- a/convokit/model/corpus.py +++ b/convokit/model/corpus.py @@ -443,7 +443,6 @@ def get_utterances_dataframe( self, selector: Optional[Callable[[Utterance], bool]] = lambda utt: True, exclude_meta: bool = False, - mutable: bool = False, ): """ Get a DataFrame of the utterances with fields and metadata attributes, with an optional selector that filters @@ -452,10 +451,9 @@ def get_utterances_dataframe( :param exclude_meta: whether to exclude metadata :param selector: a (lambda) function that takes a Utterance and returns True or False (i.e. include / exclude). By default, the selector includes all Utterances in the Corpus. - :param mutable: whether to allow changes to corpus metadata reflecting in already generated dataframe. :return: a pandas DataFrame """ - return get_utterances_dataframe(self, selector, exclude_meta, mutable) + return get_utterances_dataframe(self, selector, exclude_meta) def iter_conversations( self, selector: Optional[Callable[[Conversation], bool]] = lambda convo: True @@ -475,7 +473,6 @@ def get_conversations_dataframe( self, selector: Optional[Callable[[Conversation], bool]] = lambda convo: True, exclude_meta: bool = False, - mutable: bool = False, ): """ Get a DataFrame of the conversations with fields and metadata attributes, with an optional selector that filters @@ -484,10 +481,9 @@ def get_conversations_dataframe( :param exclude_meta: whether to exclude metadata :param selector: a (lambda) function that takes a Conversation and returns True or False (i.e. include / exclude). By default, the selector includes all Conversations in the Corpus. - :param mutable: whether to allow changes to corpus metadata reflecting in already generated dataframe. :return: a pandas DataFrame """ - return get_conversations_dataframe(self, selector, exclude_meta, mutable) + return get_conversations_dataframe(self, selector, exclude_meta) def iter_speakers( self, selector: Optional[Callable[[Speaker], bool]] = lambda speaker: True @@ -508,7 +504,6 @@ def get_speakers_dataframe( self, selector: Optional[Callable[[Speaker], bool]] = lambda utt: True, exclude_meta: bool = False, - mutable: bool = False, ): """ Get a DataFrame of the Speakers with fields and metadata attributes, with an optional selector that filters @@ -517,10 +512,9 @@ def get_speakers_dataframe( :param exclude_meta: whether to exclude metadata :param selector: selector: a (lambda) function that takes a Speaker and returns True or False (i.e. include / exclude). By default, the selector includes all Speakers in the Corpus. - :param mutable: whether to allow changes to corpus metadata reflecting in already generated dataframe. :return: a pandas DataFrame """ - return get_speakers_dataframe(self, selector, exclude_meta, mutable) + return get_speakers_dataframe(self, selector, exclude_meta) def iter_objs( self, diff --git a/convokit/model/corpusUtil.py b/convokit/model/corpusUtil.py index a7441e3c..99e36a19 100644 --- a/convokit/model/corpusUtil.py +++ b/convokit/model/corpusUtil.py @@ -4,12 +4,9 @@ """ import pandas as pd -import copy -def get_utterances_dataframe( - obj, selector=lambda utt: True, exclude_meta: bool = False, mutable: bool = False -): +def get_utterances_dataframe(obj, selector=lambda utt: True, exclude_meta: bool = False): """ Get a DataFrame of the utterances of a given object with fields and metadata attributes, with an optional selector that filters for utterances that should be included. @@ -18,18 +15,11 @@ def get_utterances_dataframe( :param exclude_meta: whether to exclude metadata :param selector: a (lambda) function that takes a Utterance and returns True or False (i.e. include / exclude). By default, the selector includes all Utterances that compose the object. - :param mutable: whether to allow changes to corpus metadata reflecting in already generated dataframe. :return: a pandas DataFrame """ ds = dict() for utt in obj.iter_utterances(selector): - if mutable: - d = utt.to_dict().copy() - else: - d = {} - for k, v in utt.to_dict().items(): - d[k] = v - # d = copy.deepcopy(utt_dict) + d = utt.to_dict().copy() if not exclude_meta: for k, v in d["meta"].items(): d["meta." + k] = v @@ -45,9 +35,7 @@ def get_utterances_dataframe( ] -def get_conversations_dataframe( - obj, selector=lambda convo: True, exclude_meta: bool = False, mutable: bool = False -): +def get_conversations_dataframe(obj, selector=lambda convo: True, exclude_meta: bool = False): """ Get a DataFrame of the conversations of a given object with fields and metadata attributes, with an optional selector that filters for conversations that should be included. @@ -56,18 +44,11 @@ def get_conversations_dataframe( :param exclude_meta: whether to exclude metadata :param selector: a (lambda) function that takes a Conversation and returns True or False (i.e. include / exclude). By default, the selector includes all Conversations in the Corpus. - :param mutable: whether to allow changes to corpus metadata reflecting in already generated dataframe. :return: a pandas DataFrame """ ds = dict() for convo in obj.iter_conversations(selector): - if mutable: - d = convo.to_dict().copy() - else: - d = {} - for k, v in convo.to_dict().items(): - d[k] = v - # d = copy.deepcopy(utt_dict) + d = convo.to_dict().copy() if not exclude_meta: for k, v in d["meta"].items(): d["meta." + k] = v @@ -78,9 +59,7 @@ def get_conversations_dataframe( return df.set_index("id") -def get_speakers_dataframe( - obj, selector=lambda utt: True, exclude_meta: bool = False, mutable: bool = False -): +def get_speakers_dataframe(obj, selector=lambda utt: True, exclude_meta: bool = False): """ Get a DataFrame of the Speakers with fields and metadata attributes, with an optional selector that filters Speakers that should be included. Edits to the DataFrame do not change the corpus in any way. @@ -88,18 +67,11 @@ def get_speakers_dataframe( :param exclude_meta: whether to exclude metadata :param selector: selector: a (lambda) function that takes a Speaker and returns True or False (i.e. include / exclude). By default, the selector includes all Speakers in the Corpus. - :param mutable: whether to allow changes to corpus metadata reflecting in already generated dataframe. :return: a pandas DataFrame """ ds = dict() for spkr in obj.iter_speakers(selector): - if mutable: - d = spkr.to_dict().copy() - else: - d = {} - for k, v in spkr.to_dict().items(): - d[k] = v - # d = copy.deepcopy(utt_dict) + d = spkr.to_dict().copy() if not exclude_meta: for k, v in d["meta"].items(): d["meta." + k] = v From 18567d4b1556bcedc946608cc6c360b466a778ec Mon Sep 17 00:00:00 2001 From: seanzhangkx8 <106214464+seanzhangkx8@users.noreply.github.com> Date: Thu, 8 Jun 2023 20:54:37 +0800 Subject: [PATCH 11/20] pairer maximize pair mode fix --- convokit/paired_prediction/pairer.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/convokit/paired_prediction/pairer.py b/convokit/paired_prediction/pairer.py index 0d39d7ed..67381a9e 100644 --- a/convokit/paired_prediction/pairer.py +++ b/convokit/paired_prediction/pairer.py @@ -70,10 +70,22 @@ def _pair_objs(self, pos_objects, neg_objects): pair_feat_to_neg_objs = defaultdict(list) for obj in pos_objects: - pair_feat_to_pos_objs[self.pairing_func(obj)].append(obj) + if self.pair_mode == "maximize": + try: + pair_feat_to_pos_objs[str(self.pairing_func(obj))].append(obj) + except Exception as e: + pair_feat_to_pos_objs[self.pairing_func(obj)].append(obj) + else: + pair_feat_to_pos_objs[self.pairing_func(obj)].append(obj) for obj in neg_objects: - pair_feat_to_neg_objs[self.pairing_func(obj)].append(obj) + if self.pair_mode == "maximize": + try: + pair_feat_to_neg_objs[str(self.pairing_func(obj))].append(obj) + except Exception as e: + pair_feat_to_neg_objs[self.pairing_func(obj)].append(obj) + else: + pair_feat_to_neg_objs[self.pairing_func(obj)].append(obj) valid_pairs = set(pair_feat_to_neg_objs).intersection(set(pair_feat_to_pos_objs)) From 406a04c6abf0e652f8d80ccd65c56bfd57a2b11e Mon Sep 17 00:00:00 2001 From: seanzhangkx8 <106214464+seanzhangkx8@users.noreply.github.com> Date: Thu, 22 Jun 2023 13:26:45 +0800 Subject: [PATCH 12/20] backendMapper, config documentation --- .../{storageManager.py => backendMapper.py} | 31 ++++++----- convokit/model/corpus.py | 55 ++++++++++--------- convokit/model/corpusComponent.py | 4 +- convokit/model/corpus_helpers.py | 12 ++-- docs/source/config.rst | 8 +++ docs/source/index.rst | 3 +- docs/source/install.rst | 6 +- 7 files changed, 69 insertions(+), 50 deletions(-) rename convokit/model/{storageManager.py => backendMapper.py} (90%) create mode 100644 docs/source/config.rst diff --git a/convokit/model/storageManager.py b/convokit/model/backendMapper.py similarity index 90% rename from convokit/model/storageManager.py rename to convokit/model/backendMapper.py index d7ffa441..55f804f5 100644 --- a/convokit/model/storageManager.py +++ b/convokit/model/backendMapper.py @@ -6,13 +6,14 @@ import pickle -class StorageManager(metaclass=ABCMeta): +class BackendMapper(metaclass=ABCMeta): """ Abstraction layer for the concrete representation of data and metadata within corpus components (e.g., Utterance text and timestamps). All requests to access or modify corpusComponent fields (with the exception of ID) are - actually routed through one of StorageManager's concrete subclasses. Each - subclass implements a storage backend that contains the actual data. + actually routed through one of BackendMapper's concrete subclasses. Each + subclass implements a concrete backend mapping from ConvoKit operations to actual data. + (These mappings are referred to as collections.) """ def __init__(self): @@ -84,7 +85,7 @@ def delete_data( self, component_type: str, component_id: str, property_name: Optional[str] = None ): """ - Delete a data entry from this StorageManager for the component of type + Delete a data entry from this BackendMapper for the component of type component_type with id component_id. If property_name is specified delete only that property, otherwise delete the entire entry. """ @@ -93,7 +94,7 @@ def delete_data( @abstractmethod def clear_all_data(self): """ - Erase all data from this StorageManager (i.e., reset self.data to its + Erase all data from this BackendMapper (i.e., reset self.data to its initial empty state; Python will garbage-collect the now-unreferenced old data entries). This is used for cleanup after destructive Corpus operations. @@ -104,7 +105,7 @@ def clear_all_data(self): def count_entries(self, component_type: str): """ Count the number of entries held for the specified component type by - this StorageManager instance + this BackendMapper instance """ return NotImplemented @@ -117,7 +118,7 @@ def get_collection(self, component_type: str): def purge_obsolete_entries(self, utterance_ids, conversation_ids, speaker_ids, meta_ids): """ - Compare the entries in this StorageManager to the existing component ids + Compare the entries in this BackendMapper to the existing component ids provided as parameters, and delete any entries that are not found in the parameter ids. """ @@ -133,9 +134,9 @@ def purge_obsolete_entries(self, utterance_ids, conversation_ids, speaker_ids, m self.delete_data(obj_type, obj_id) -class MemStorageManager(StorageManager): +class MemMapper(BackendMapper): """ - Concrete StorageManager implementation for in-memory data storage. + Concrete BackendMapper implementation for in-memory data storage. Collections are implemented as vanilla Python dicts. """ @@ -170,7 +171,7 @@ def get_data( collection = self.get_collection(component_type) if component_id not in collection: raise KeyError( - f"This StorageManager does not have an entry for the {component_type} with id {component_id}." + f"This BackendMapper does not have an entry for the {component_type} with id {component_id}." ) if property_name is None: return collection[component_id] @@ -190,7 +191,7 @@ def update_data( # CorpusComponent constructor so if the ID is missing that indicates something is wrong if component_id not in collection: raise KeyError( - f"This StorageManager does not have an entry for the {component_type} with id {component_id}." + f"This BackendMapper does not have an entry for the {component_type} with id {component_id}." ) collection[component_id][property_name] = new_value @@ -200,7 +201,7 @@ def delete_data( collection = self.get_collection(component_type) if component_id not in collection: raise KeyError( - f"This StorageManager does not have an entry for the {component_type} with id {component_id}." + f"This BackendMapper does not have an entry for the {component_type} with id {component_id}." ) if property_name is None: del collection[component_id] @@ -215,9 +216,9 @@ def count_entries(self, component_type: str): return len(self.get_collection(component_type)) -class DBStorageManager(StorageManager): +class DBMapper(BackendMapper): """ - Concrete StorageManager implementation for database-backed data storage. + Concrete BackendMapper implementation for database-backed data storage. Collections are implemented as MongoDB collections. """ @@ -272,7 +273,7 @@ def get_data( all_fields = collection.find_one({"_id": component_id}) if all_fields is None: raise KeyError( - f"This StorageManager does not have an entry for the {component_type} with id {component_id}." + f"This BackendMapper does not have an entry for the {component_type} with id {component_id}." ) if property_name is None: # if some data is known to be binary type, unpack it diff --git a/convokit/model/corpus.py b/convokit/model/corpus.py index dc59e87d..9bf22753 100644 --- a/convokit/model/corpus.py +++ b/convokit/model/corpus.py @@ -10,7 +10,7 @@ from .convoKitMatrix import ConvoKitMatrix from .corpusUtil import * from .corpus_helpers import * -from .storageManager import StorageManager +from .backendMapper import BackendMapper class Corpus: @@ -19,6 +19,8 @@ class Corpus: :param filename: Path to a folder containing a Corpus or to an utterances.jsonl / utterances.json file to load :param utterances: list of utterances to initialize Corpus from + :param db_collection_prefix: if a db backend is used, this determines how the database will be named. If not specified, a random name will be used. + :param db_host: if specified, and a db backend is used, connect to the database at this URL. If not specified, will default to the db_host in the ConvoKit global configuration file. :param preload_vectors: list of names of vectors to be preloaded from directory; by default, no vectors are loaded but can be loaded any time after corpus initialization (i.e. vectors are lazy-loaded). :param utterance_start_index: if loading from directory and the corpus folder contains utterances.jsonl, specify the @@ -36,6 +38,9 @@ class Corpus: index.json is already accurate and disabling it will allow for a faster corpus load. This parameter is set to True by default, i.e. type-checking is not carried out. + :param backend: specify the backend type, either “mem” or “db”, default to “mem”. + :param backend_mapper: (advanced usage only) if provided, use this as the BackendMapper instance instead of initializing a new one. + :ivar meta_index: index of Corpus metadata :ivar vectors: the vectors stored in the Corpus :ivar corpus_dirpath: path to the directory the corpus was loaded from @@ -56,24 +61,24 @@ def __init__( exclude_speaker_meta: Optional[List[str]] = None, exclude_overall_meta: Optional[List[str]] = None, disable_type_check=True, - storage_type: Optional[str] = None, - storage: Optional[StorageManager] = None, + backend: Optional[str] = None, + backend_mapper: Optional[BackendMapper] = None, ): self.config = ConvoKitConfig() self.corpus_dirpath = get_corpus_dirpath(filename) # configure corpus ID (optional for mem mode, required for DB mode) - if storage_type is None: - storage_type = self.config.default_storage_mode - if db_collection_prefix is None and filename is None and storage_type == "db": + if backend is None: + backend = self.config.default_storage_mode + if db_collection_prefix is None and filename is None and backend == "db": db_collection_prefix = create_safe_id() warn( "You are in DB mode, but no collection prefix was specified and no filename was given from which to infer one." "Will use a randomly generated unique prefix " + db_collection_prefix ) - self.id = get_corpus_id(db_collection_prefix, filename, storage_type) - self.storage_type = storage_type - self.storage = initialize_storage(self, storage, storage_type, db_host) + self.id = get_corpus_id(db_collection_prefix, filename, backend) + self.backend = backend + self.backend_mapper = initialize_storage(self, backend_mapper, backend, db_host) self.meta_index = ConvoKitIndex(self) self.meta = ConvoKitMeta(self, self.meta_index, "corpus") @@ -91,10 +96,10 @@ def __init__( if exclude_overall_meta is None: exclude_overall_meta = [] - if filename is not None and storage_type == "db": + if filename is not None and backend == "db": # JSON-to-DB construction mode uses a specialized code branch, which # optimizes for this use case by using direct batch insertions into the - # DB rather than going through the StorageManager, hence improving + # DB rather than going through the BackendMapper, hence improving # efficiency. with open(os.path.join(filename, "index.json"), "r") as f: @@ -104,7 +109,7 @@ def __init__( # populate the DB with the contents of the source file ids_in_db = populate_db_from_file( filename, - self.storage.db, + self.backend_mapper.db, self.id, self.meta_index, utterance_start_index, @@ -115,7 +120,7 @@ def __init__( exclude_overall_meta, ) - # with the StorageManager's DB now populated, initialize the corresponding + # with the BackendMapper's DB now populated, initialize the corresponding # CorpusComponent instances. init_corpus_from_storage_manager(self, ids_in_db) @@ -216,8 +221,8 @@ def reconnect_to_db(cls, db_collection_prefix: str, db_host: Optional[str] = Non resume where you left off. """ # create a blank Corpus that will hold the data - result = cls(db_collection_prefix=db_collection_prefix, db_host=db_host, storage_type="db") - # through the constructor, the blank Corpus' StorageManager is now connected + result = cls(db_collection_prefix=db_collection_prefix, db_host=db_host, backend="db") + # through the constructor, the blank Corpus' BackendMapper is now connected # to the DB. Next use the DB contents to populate the corpus components. init_corpus_from_storage_manager(result) @@ -621,7 +626,7 @@ def filter_conversations_by(self, selector: Callable[[Conversation], bool]): meta_ids.append(convo.meta.storage_key) for speaker in self.iter_speakers(): meta_ids.append(speaker.meta.storage_key) - self.storage.purge_obsolete_entries( + self.backend_mapper.purge_obsolete_entries( self.get_utterance_ids(), self.get_conversation_ids(), self.get_speaker_ids(), meta_ids ) @@ -645,8 +650,8 @@ def filter_utterances(source_corpus: "Corpus", selector: Callable[[Utterance], b convo.meta.update(source_corpus.get_conversation(convo.id).meta) # original Corpus is invalidated and no longer usable; clear all data from - # its now-orphaned StorageManager to avoid having duplicates in memory - source_corpus.storage.clear_all_data() + # its now-orphaned BackendMapper to avoid having duplicates in memory + source_corpus.backend_mapper.clear_all_data() return new_corpus @@ -720,8 +725,8 @@ def reindex_conversations( print(missing_convo_roots) # original Corpus is invalidated and no longer usable; clear all data from - # its now-orphaned StorageManager to avoid having duplicates in memory - source_corpus.storage.clear_all_data() + # its now-orphaned BackendMapper to avoid having duplicates in memory + source_corpus.backend_mapper.clear_all_data() return new_corpus @@ -1027,10 +1032,10 @@ def merge(primary: "Corpus", secondary: "Corpus", warnings: bool = True): new_corpus.reinitialize_index() # source corpora are now invalidated and all needed data has been copied - # into the new merged corpus; clear the source corpora's storage to + # into the new merged corpus; clear the source corpora's backend mapper to # prevent having duplicates in memory - primary.storage.clear_all_data() - secondary.storage.clear_all_data() + primary.backend_mapper.clear_all_data() + secondary.backend_mapper.clear_all_data() return new_corpus @@ -1295,9 +1300,9 @@ def load_info(self, obj_type, fields=None, dir_name=None): for field in fields: # self.aux_info[field] = self.load_jsonlist_to_dict( # os.path.join(dir_name, 'feat.%s.jsonl' % field)) - if self.storage_type == "mem": + if self.backend == "mem": load_info_to_mem(self, dir_name, obj_type, field) - elif self.storage_type == "db": + elif self.backend == "db": load_info_to_db(self, dir_name, obj_type, field) def dump_info(self, obj_type, fields, dir_name=None): diff --git a/convokit/model/corpusComponent.py b/convokit/model/corpusComponent.py index 83064ab3..d126d94a 100644 --- a/convokit/model/corpusComponent.py +++ b/convokit/model/corpusComponent.py @@ -48,7 +48,7 @@ def set_owner(self, owner): self._owner = owner if owner is not None: # when a new owner Corpus is assigned, we must take the following steps: - # (1) transfer this component's data to the new owner's StorageManager + # (1) transfer this component's data to the new owner's BackendMapper # (2) avoid duplicates by removing the data from the old owner (or temp storage if there was no prior owner) # (3) reinitialize the metadata instance data_dict = ( @@ -71,7 +71,7 @@ def set_owner(self, owner): def init_meta(self, meta, overwrite=False): if self._owner is None: # ConvoKitMeta instances are not allowed for ownerless (standalone) - # components since they must be backed by a StorageManager. In this + # components since they must be backed by a BackendMapper. In this # case we must forcibly convert the ConvoKitMeta instance to dict if isinstance(meta, ConvoKitMeta): meta = meta.to_dict() diff --git a/convokit/model/corpus_helpers.py b/convokit/model/corpus_helpers.py index 056230a3..1da8017d 100644 --- a/convokit/model/corpus_helpers.py +++ b/convokit/model/corpus_helpers.py @@ -16,7 +16,7 @@ from .convoKitIndex import ConvoKitIndex from .convoKitMeta import ConvoKitMeta from .speaker import Speaker -from .storageManager import StorageManager, MemStorageManager, DBStorageManager +from .backendMapper import BackendMapper, MemMapper, DBMapper from .utterance import Utterance BIN_DELIM_L, BIN_DELIM_R = "<##bin{", "}&&@**>" @@ -83,17 +83,17 @@ def get_corpus_dirpath(filename: str) -> Optional[str]: def initialize_storage( - corpus: "Corpus", storage: Optional[StorageManager], storage_type: str, db_host: Optional[str] + corpus: "Corpus", storage: Optional[BackendMapper], storage_type: str, db_host: Optional[str] ): if storage is not None: return storage else: if storage_type == "mem": - return MemStorageManager() + return MemMapper() elif storage_type == "db": if db_host is None: db_host = corpus.config.db_host - return DBStorageManager(corpus.id, db_host) + return DBMapper(corpus.id, db_host) else: raise ValueError( f"Unrecognized setting '{storage_type}' for storage type; should be either 'mem' or 'db'." @@ -886,7 +886,7 @@ def populate_db_from_file( ): """ Populate all necessary collections of a MongoDB database so that it can be - used by a DBStorageManager, sourcing data from the valid ConvoKit Corpus + used by a DBMapper, sourcing data from the valid ConvoKit Corpus data pointed to by the filename parameter. """ binary_meta, updated_exclude_meta = load_binary_metadata( @@ -983,5 +983,5 @@ def init_corpus_from_storage_manager(corpus, utt_ids=None): corpus.meta_index.enable_type_check() corpus.update_speakers_data() - # restore the StorageManager's init behavior to default + # restore the BackendMapper's init behavior to default corpus.storage.bypass_init = False diff --git a/docs/source/config.rst b/docs/source/config.rst new file mode 100644 index 00000000..56a92444 --- /dev/null +++ b/docs/source/config.rst @@ -0,0 +1,8 @@ +Configurations +=================== + +After you import convokit for the first time, a default configuration file will be generated in ~/.convokit/config.yml. +There are currently three variables: +db_host: +data_directory: +default_storage_mode: diff --git a/docs/source/index.rst b/docs/source/index.rst index e887a4f6..e4aff083 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -8,7 +8,7 @@ Cornell Conversational Analysis Toolkit (ConvoKit) Documentation This toolkit contains tools to extract conversational features and analyze social phenomena in conversations, using a `single unified interface `_ inspired by (and compatible with) scikit-learn. Several large `conversational datasets `_ are included together with scripts exemplifying the use of the toolkit on these datasets. -More information can be found at our `website `_. The latest version is `3.0.0 `_ (released 1 June 2023). +More information can be found at our `website `_. The latest version is `3.0.0 `_ (released June 21, 2023). Contents -------- @@ -21,6 +21,7 @@ Contents Introductory tutorial Core Concepts Data Format + Configurations Troubleshooting .. toctree:: diff --git a/docs/source/install.rst b/docs/source/install.rst index 74a05de1..44651406 100644 --- a/docs/source/install.rst +++ b/docs/source/install.rst @@ -31,6 +31,10 @@ For more information on choosing between the two options and setting up the Mong Choosing a Backend: native Python vs MongoDB Setting up MongoDB for ConvoKit +Configuration +================== +ConvoKit configurations are stored in "~/.convokit/config.yml", check out our `Configuration Guide `_ for a list of configuration details. + Troubleshooting =============== -If you run into any issues during or after installation, check out our `Troubleshooting Guide `_ for a list of solutions to common issues. \ No newline at end of file +If you run into any issues during or after installation, check out our `Troubleshooting Guide `_ for a list of solutions to common issues. From 46feed04ae398f59583a6f66bd67246649043fa9 Mon Sep 17 00:00:00 2001 From: seanzhangkx8 <106214464+seanzhangkx8@users.noreply.github.com> Date: Sun, 9 Jul 2023 21:17:06 +0800 Subject: [PATCH 13/20] goodbye to python3.7 --- docs/source/install.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/install.rst b/docs/source/install.rst index 44651406..00630467 100644 --- a/docs/source/install.rst +++ b/docs/source/install.rst @@ -3,7 +3,7 @@ Installing ConvoKit System Requirements =================== -ConvoKit requires Python 3.7 or above. +ConvoKit requires Python 3.8 or above. Package Installation ==================== From 4ab48c75fcad7e3d8ef87fe6eb38f3a2e975ea53 Mon Sep 17 00:00:00 2001 From: seanzhangkx8 <106214464+seanzhangkx8@users.noreply.github.com> Date: Tue, 11 Jul 2023 23:34:17 +0800 Subject: [PATCH 14/20] release date update --- docs/source/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index e4aff083..47f027fe 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -8,7 +8,7 @@ Cornell Conversational Analysis Toolkit (ConvoKit) Documentation This toolkit contains tools to extract conversational features and analyze social phenomena in conversations, using a `single unified interface `_ inspired by (and compatible with) scikit-learn. Several large `conversational datasets `_ are included together with scripts exemplifying the use of the toolkit on these datasets. -More information can be found at our `website `_. The latest version is `3.0.0 `_ (released June 21, 2023). +More information can be found at our `website `_. The latest version is `3.0.0 `_ (released July 11, 2023). Contents -------- From 1be1132476950b5e9d0174a462580104e6562e1a Mon Sep 17 00:00:00 2001 From: seanzhangkx8 <106214464+seanzhangkx8@users.noreply.github.com> Date: Sun, 16 Jul 2023 21:06:07 +0800 Subject: [PATCH 15/20] remove all storage reference --- convokit/convokitConfig.py | 10 +- .../demos/parliament_demo.ipynb | 374 +- .../demos/scotus_orientation_demo.ipynb | 205 +- .../demos/switchboard_exploration_demo.ipynb | 304 +- .../switchboard_exploration_dual_demo.ipynb | 230 +- .../demos/wiki_awry_demo.ipynb | 347 +- .../demos/fightingwords_demo.ipynb | 27 +- .../forecaster/CRAFT/demos/craft_demo.ipynb | 78 +- .../CRAFT/demos/craft_demo_new.ipynb | 27 +- .../CRAFT/demos/craft_demo_original.ipynb | 363 +- .../CRAFT/demos/craft_demo_training.ipynb | 31 +- .../forecaster/tests/cumulativeBoW_demo.ipynb | 30 +- convokit/model/backendMapper.py | 2 +- convokit/model/convoKitMeta.py | 48 +- convokit/model/corpus.py | 20 +- convokit/model/corpusComponent.py | 32 +- convokit/model/corpus_helpers.py | 30 +- convokit/ranker/demos/ranker_demo.ipynb | 20 +- convokit/surprise/demos/surprise_demo.ipynb | 57 +- convokit/surprise/demos/tennis_demo.ipynb | 106 +- .../general/from_pandas/test_from_pandas.py | 4 +- .../test_load_dump_corpora.py | 30 +- .../general/merge_corpus/test_merge_corpus.py | 84 +- .../convokitIndex_issues_demo.ipynb | 29 +- .../notebook_testers/exclude_meta_tests.ipynb | 16 +- .../reindex_conversations_example.ipynb | 46 +- convokit/tests/test_utils.py | 2 +- .../text_processing/demo/cleaning_text.ipynb | 23 +- docs/source/config.rst | 2 +- docs/source/db_setup.rst | 40 +- docs/source/storage_options.rst | 8 +- docs/source/troubleshooting.rst | 10 +- examples/Introduction_to_ConvoKit.ipynb | 64 +- .../Conversations_Gone_Awry_Prediction.ipynb | 446 +- examples/converting_movie_corpus.ipynb | 101 +- examples/coordination/examples.ipynb | 397 +- examples/corpus_from_pandas.ipynb | 22 +- .../Create_Conversations_Script.ipynb | 894 +- .../wikiconv/corpus_deletion_demo.ipynb | 249 +- examples/hyperconvo/hyperconvo_demo.ipynb | 21277 +++++++++++++--- examples/hyperconvo/predictive_tasks.ipynb | 331 +- examples/merging/corpus_merge_demo.ipynb | 149 +- ...Politeness_Marker_and_Summarize_Demo.ipynb | 32 +- ...ategies_in_MT-mediated_Communication.ipynb | 303 +- .../politeness_demo.ipynb | 61 +- .../short-politeness-example.ipynb | 21 +- examples/prompt-types/prompt-type-demo.ipynb | 223 +- .../prompt-type-wrapper-demo.ipynb | 48 +- examples/sigdial-demo.ipynb | 17 +- .../speaker-convo-diversity-demo.ipynb | 94 +- .../text_preprocessing_demo.ipynb | 337 +- examples/vectors/bag-of-words-demo.ipynb | 116 +- examples/vectors/vector_demo.ipynb | 73 +- 53 files changed, 20480 insertions(+), 7410 deletions(-) diff --git a/convokit/convokitConfig.py b/convokit/convokitConfig.py index 6d11d8dc..37f3ac37 100644 --- a/convokit/convokitConfig.py +++ b/convokit/convokitConfig.py @@ -4,13 +4,13 @@ DEFAULT_CONFIG_CONTENTS = ( - "# Default Storage Parameters\n" + "# Default Backend Parameters\n" "db_host: localhost:27017\n" "data_directory: ~/.convokit/saved-corpora\n" - "default_storage_mode: mem" + "default_backend: mem" ) -ENV_VARS = {"db_host": "CONVOKIT_DB_HOST", "default_storage_mode": "CONVOKIT_STORAGE_MODE"} +ENV_VARS = {"db_host": "CONVOKIT_DB_HOST", "default_backend": "CONVOKIT_BACKEND"} class ConvoKitConfig: @@ -52,5 +52,5 @@ def data_directory(self): return self.config_contents.get("data_directory", "~/.convokit/saved-corpora") @property - def default_storage_mode(self): - return self._get_config_from_env_or_file("default_storage_mode", "mem") + def default_backend(self): + return self._get_config_from_env_or_file("default_backend", "mem") diff --git a/convokit/expected_context_framework/demos/parliament_demo.ipynb b/convokit/expected_context_framework/demos/parliament_demo.ipynb index f7ee2390..23e31909 100644 --- a/convokit/expected_context_framework/demos/parliament_demo.ipynb +++ b/convokit/expected_context_framework/demos/parliament_demo.ipynb @@ -20,8 +20,7 @@ "outputs": [], "source": [ "import warnings\n", - "\n", - "warnings.filterwarnings(\"ignore\")" + "warnings.filterwarnings('ignore')" ] }, { @@ -74,7 +73,7 @@ }, "outputs": [], "source": [ - "# OPTION 1: DOWNLOAD CORPUS\n", + "# OPTION 1: DOWNLOAD CORPUS \n", "# UNCOMMENT THESE LINES TO DOWNLOAD CORPUS\n", "# DATA_DIR = ''\n", "# PARL_CORPUS_PATH = download('parliament-corpus', data_dir=DATA_DIR)\n", @@ -129,7 +128,7 @@ }, "outputs": [], "source": [ - "parl_corpus.load_info(\"utterance\", [\"arcs\", \"q_arcs\"])" + "parl_corpus.load_info('utterance',['arcs','q_arcs'])" ] }, { @@ -156,10 +155,7 @@ }, "outputs": [], "source": [ - "from convokit.expected_context_framework import (\n", - " ColNormedTfidfTransformer,\n", - " ExpectedContextModelTransformer,\n", - ")" + "from convokit.expected_context_framework import ColNormedTfidfTransformer, ExpectedContextModelTransformer" ] }, { @@ -187,12 +183,9 @@ } ], "source": [ - "q_tfidf_obj = ColNormedTfidfTransformer(\n", - " input_field=\"q_arcs\", output_field=\"q_arc_tfidf\", min_df=100, max_df=0.1, binary=False\n", - ")\n", - "q_tfidf_obj.fit(\n", - " parl_corpus, selector=lambda x: x.meta[\"is_question\"] and x.meta[\"pair_has_features\"]\n", - ")\n", + "q_tfidf_obj = ColNormedTfidfTransformer(input_field='q_arcs', output_field='q_arc_tfidf',\n", + " min_df=100, max_df=.1, binary=False)\n", + "q_tfidf_obj.fit(parl_corpus, selector=lambda x: x.meta['is_question'] and x.meta['pair_has_features'])\n", "print(len(q_tfidf_obj.get_vocabulary()))" ] }, @@ -210,10 +203,9 @@ } ], "source": [ - "a_tfidf_obj = ColNormedTfidfTransformer(\n", - " input_field=\"arcs\", output_field=\"arc_tfidf\", min_df=100, max_df=0.1, binary=False\n", - ")\n", - "a_tfidf_obj.fit(parl_corpus, selector=lambda x: x.meta[\"is_answer\"] and x.meta[\"pair_has_features\"])\n", + "a_tfidf_obj = ColNormedTfidfTransformer(input_field='arcs', output_field='arc_tfidf',\n", + " min_df=100, max_df=.1, binary=False)\n", + "a_tfidf_obj.fit(parl_corpus, selector=lambda x: x.meta['is_answer'] and x.meta['pair_has_features'])\n", "print(len(a_tfidf_obj.get_vocabulary()))" ] }, @@ -225,12 +217,8 @@ }, "outputs": [], "source": [ - "_ = q_tfidf_obj.transform(\n", - " parl_corpus, selector=lambda x: x.meta[\"is_question\"] and x.meta[\"pair_has_features\"]\n", - ")\n", - "_ = a_tfidf_obj.transform(\n", - " parl_corpus, selector=lambda x: x.meta[\"is_answer\"] and x.meta[\"pair_has_features\"]\n", - ")" + "_ = q_tfidf_obj.transform(parl_corpus, selector=lambda x: x.meta['is_question'] and x.meta['pair_has_features'])\n", + "_ = a_tfidf_obj.transform(parl_corpus, selector=lambda x: x.meta['is_answer'] and x.meta['pair_has_features'])" ] }, { @@ -262,15 +250,10 @@ "outputs": [], "source": [ "q_ec = ExpectedContextModelTransformer(\n", - " context_field=\"next_id\",\n", - " output_prefix=\"fw\",\n", - " vect_field=\"q_arc_tfidf\",\n", - " context_vect_field=\"arc_tfidf\",\n", - " n_svd_dims=25,\n", - " n_clusters=8,\n", - " random_state=1000,\n", - " cluster_random_state=1000,\n", - ")" + " context_field='next_id', output_prefix='fw', \n", + " vect_field='q_arc_tfidf', context_vect_field='arc_tfidf',\n", + " n_svd_dims=25, n_clusters=8,\n", + " random_state=1000, cluster_random_state=1000)" ] }, { @@ -288,11 +271,8 @@ }, "outputs": [], "source": [ - "q_ec.fit(\n", - " parl_corpus,\n", - " selector=lambda x: x.meta[\"is_question\"] and (x.meta.get(\"q_arc_tfidf__n_feats\", 0) > 0),\n", - " context_selector=lambda x: x.meta[\"is_answer\"] and (x.meta.get(\"arc_tfidf__n_feats\", 0) > 0),\n", - ")" + "q_ec.fit(parl_corpus, selector=lambda x: x.meta['is_question'] and (x.meta.get('q_arc_tfidf__n_feats',0)>0),\n", + " context_selector=lambda x: x.meta['is_answer'] and (x.meta.get('arc_tfidf__n_feats',0)>0))" ] }, { @@ -813,18 +793,8 @@ }, "outputs": [], "source": [ - "q_ec.set_cluster_names(\n", - " [\n", - " \"demand_account\",\n", - " \"shared_concern\",\n", - " \"agreement\",\n", - " \"issue_update\",\n", - " \"question_premises\",\n", - " \"request_assurance\",\n", - " \"prompt_comment\",\n", - " \"accept_propose\",\n", - " ]\n", - ")" + "q_ec.set_cluster_names(['demand_account', 'shared_concern', 'agreement', 'issue_update',\n", + " 'question_premises', 'request_assurance', 'prompt_comment', 'accept_propose'])" ] }, { @@ -956,16 +926,10 @@ }, "outputs": [], "source": [ - "_ = q_ec.transform(\n", - " parl_corpus,\n", - " selector=lambda x: x.meta[\"is_question\"] and (x.meta.get(\"q_arc_tfidf__n_feats\", 0) > 0),\n", - ")\n", + "_ = q_ec.transform(parl_corpus, selector=lambda x: x.meta['is_question'] and (x.meta.get('q_arc_tfidf__n_feats',0)>0))\n", "\n", "# this call derives representations of answers, following our method.\n", - "_ = q_ec.transform_context_utts(\n", - " parl_corpus,\n", - " selector=lambda x: x.meta[\"is_answer\"] and (x.meta.get(\"arc_tfidf__n_feats\", 0) > 0),\n", - ")" + "_ = q_ec.transform_context_utts(parl_corpus, selector=lambda x: x.meta['is_answer'] and (x.meta.get('arc_tfidf__n_feats',0)>0)) " ] }, { @@ -989,7 +953,7 @@ } ], "source": [ - "ut_eg_id = \"2010-03-25c.364.5\"\n", + "ut_eg_id = '2010-03-25c.364.5'\n", "eg_ut = parl_corpus.get_utterance(ut_eg_id)\n", "print(eg_ut.text)" ] @@ -1018,7 +982,7 @@ } ], "source": [ - "eg_ut.meta[\"fw_clustering.cluster\"], eg_ut.meta[\"fw_clustering.cluster_dist\"]" + "eg_ut.meta['fw_clustering.cluster'], eg_ut.meta['fw_clustering.cluster_dist']" ] }, { @@ -1049,7 +1013,7 @@ } ], "source": [ - "parl_corpus.get_vectors(\"fw_repr\", [ut_eg_id])\n", + "parl_corpus.get_vectors('fw_repr',[ut_eg_id])\n", "# technical note: for an explanation of why there are only 24 dimensions, instead of 25, see the `snip_first_dim` parameter in the documentation" ] }, @@ -1077,7 +1041,7 @@ } ], "source": [ - "eg_ut.meta[\"fw_range\"]" + "eg_ut.meta['fw_range']" ] }, { @@ -1109,23 +1073,10 @@ "outputs": [], "source": [ "for ut in parl_corpus.iter_utterances():\n", - " ut.meta[\"speaker\"] = ut.speaker.id\n", - "utt_meta_df = parl_corpus.get_attribute_table(\n", - " \"utterance\",\n", - " [\n", - " \"fw_clustering.cluster\",\n", - " \"govt\",\n", - " \"govt_coarse\",\n", - " \"is_question\",\n", - " \"is_answer\",\n", - " \"is_incumbent\",\n", - " \"is_oppn\",\n", - " \"speaker\",\n", - " \"party\",\n", - " \"tenure\",\n", - " \"next_id\",\n", - " ],\n", - ")" + " ut.meta['speaker'] = ut.speaker.id\n", + "utt_meta_df = parl_corpus.get_attribute_table('utterance',\n", + " ['fw_clustering.cluster','govt', 'govt_coarse','is_question','is_answer',\n", + " 'is_incumbent','is_oppn','speaker','party', 'tenure','next_id'])" ] }, { @@ -1143,13 +1094,10 @@ }, "outputs": [], "source": [ - "utt_meta_sub = utt_meta_df[\n", - " ((utt_meta_df.is_incumbent == True) | (utt_meta_df.is_oppn == True))\n", - " & (utt_meta_df.speaker != \"\")\n", - " & (utt_meta_df.party.notnull())\n", - " & (utt_meta_df.govt_coarse != \"thatcher+major\")\n", - " & (utt_meta_df[\"fw_clustering.cluster\"].notnull())\n", - "].copy()" + "utt_meta_sub = utt_meta_df[((utt_meta_df.is_incumbent == True) | (utt_meta_df.is_oppn == True))\n", + " & (utt_meta_df.speaker != '') & (utt_meta_df.party.notnull())\n", + " & (utt_meta_df.govt_coarse != 'thatcher+major')\n", + " & (utt_meta_df['fw_clustering.cluster'].notnull())].copy()" ] }, { @@ -1178,9 +1126,7 @@ " val_false = sum((col == val) & ~bool_col)\n", " nval_true = sum((col != val) & bool_col)\n", " nval_false = sum((col != val) & ~bool_col)\n", - " log_odds_entries.append(\n", - " {\"val\": val, \"log_odds\": np.log((val_true / val_false) / (nval_true / nval_false))}\n", - " )\n", + " log_odds_entries.append({'val': val, 'log_odds': np.log((val_true/val_false)/(nval_true/nval_false))})\n", " return log_odds_entries" ] }, @@ -1192,13 +1138,12 @@ }, "outputs": [], "source": [ - "log_odds_party = []\n", + "log_odds_party = []\n", "for cname in q_ec.get_cluster_names():\n", - " entry = compute_log_odds(\n", - " utt_meta_sub[\"fw_clustering.cluster\"], utt_meta_sub[\"is_incumbent\"], val_subset=[cname]\n", - " )\n", + " entry = compute_log_odds(utt_meta_sub['fw_clustering.cluster'],utt_meta_sub['is_incumbent'],\n", + " val_subset=[cname])\n", " log_odds_party += entry\n", - "log_odds_party_df = pd.DataFrame(log_odds_party).set_index(\"val\")" + "log_odds_party_df = pd.DataFrame(log_odds_party).set_index('val')" ] }, { @@ -1209,7 +1154,7 @@ }, "outputs": [], "source": [ - "type_order = log_odds_party_df.sort_values(\"log_odds\").index" + "type_order = log_odds_party_df.sort_values('log_odds').index\n" ] }, { @@ -1220,16 +1165,9 @@ }, "outputs": [], "source": [ - "display_names = [\n", - " \"Demand for account\",\n", - " \"Questioning premises\",\n", - " \"Prompt for comment\",\n", - " \"Accept and propose\",\n", - " \"Req. for assurance\",\n", - " \"Issue update\",\n", - " \"Shared concerns\",\n", - " \"Agreement\",\n", - "]" + "display_names = ['Demand for account', 'Questioning premises', 'Prompt for comment',\n", + " 'Accept and propose', 'Req. for assurance', 'Issue update', \n", + " 'Shared concerns', 'Agreement']" ] }, { @@ -1241,7 +1179,6 @@ "outputs": [], "source": [ "from matplotlib import pyplot as plt\n", - "\n", "%matplotlib inline" ] }, @@ -1262,21 +1199,21 @@ } ], "source": [ - "fig, ax = plt.subplots(figsize=(4, 6))\n", + "fig, ax = plt.subplots(figsize=(4,6))\n", "ax.set_xlim(-1.5, 1.5)\n", - "ax.set_ylim(-0.5, 7.5)\n", - "for i, cname in enumerate(type_order):\n", + "ax.set_ylim(-.5,7.5)\n", + "for i,cname in enumerate(type_order):\n", " log_odds = log_odds_party_df.loc[cname].log_odds\n", - " ax.scatter([log_odds], [i], color=\"black\", s=49)\n", - " ax.plot([-1.25, 1.25], [i, i], \"--\", color=\"grey\", linewidth=0.5)\n", - "ax.plot([0, 0], [-2, 8], color=\"grey\", linewidth=1)\n", + " ax.scatter([log_odds], [i], color='black',s=49)\n", + " ax.plot([-1.25,1.25],[i,i],'--', color='grey', linewidth=.5)\n", + "ax.plot([0,0],[-2,8], color='grey', linewidth=1)\n", "ax.invert_yaxis()\n", "ax.set_yticks(np.arange(len(type_order)))\n", "ax.set_yticklabels(display_names, fontsize=14)\n", - "ax.set_xticklabels([-1.5, -1, -0.5, 0, 0.5, 1, 1.5], fontsize=14)\n", - "plt.rc(\"xtick\", labelsize=12)\n", - "plt.rc(\"ytick\", labelsize=12)\n", - "ax.set_xlabel(\"log odds ratio\", fontsize=16)\n", + "ax.set_xticklabels([-1.5,-1,-.5,0,.5,1,1.5], fontsize=14)\n", + "plt.rc('xtick',labelsize=12)\n", + "plt.rc('ytick',labelsize=12)\n", + "ax.set_xlabel('log odds ratio', fontsize=16)\n", "None" ] }, @@ -1311,19 +1248,8 @@ }, "outputs": [], "source": [ - "med_tenures = pd.concat(\n", - " [\n", - " utt_meta_sub[utt_meta_sub.is_incumbent]\n", - " .groupby(\"fw_clustering.cluster\")\n", - " .tenure.median()\n", - " .rename(\"govt\"),\n", - " utt_meta_sub[~utt_meta_sub.is_incumbent]\n", - " .groupby(\"fw_clustering.cluster\")\n", - " .tenure.median()\n", - " .rename(\"oppn\"),\n", - " ],\n", - " axis=1,\n", - ")\n", + "med_tenures = pd.concat([utt_meta_sub[utt_meta_sub.is_incumbent].groupby('fw_clustering.cluster').tenure.median().rename('govt'),\n", + "utt_meta_sub[~utt_meta_sub.is_incumbent].groupby('fw_clustering.cluster').tenure.median().rename('oppn')], axis=1)\n", "med_in_tenure = utt_meta_sub[utt_meta_sub.is_incumbent].tenure.median()\n", "med_op_tenure = utt_meta_sub[~utt_meta_sub.is_incumbent].tenure.median()" ] @@ -1447,25 +1373,23 @@ } ], "source": [ - "fig, ax = plt.subplots(figsize=(4, 6))\n", + "fig, ax = plt.subplots(figsize=(4,6))\n", "ax.set_xlim(2, 13)\n", - "ax.set_ylim(-0.5, 7.5)\n", - "for i, cname in enumerate(type_order):\n", - " ax.scatter([med_tenures.loc[cname].govt], [i - 0.05], s=49, color=\"blue\")\n", - " ax.scatter(\n", - " [med_tenures.loc[cname].oppn], [i + 0.05], s=49, color=\"red\", facecolor=\"white\", marker=\"s\"\n", - " )\n", - " ax.plot([0.5, 14.5], [i, i], \"--\", color=\"grey\", linewidth=0.5)\n", - "ax.plot([med_in_tenure, med_in_tenure], [-2, 8], color=\"blue\", linewidth=1)\n", - "ax.plot([med_op_tenure, med_op_tenure], [-2, 8], \"--\", color=\"red\", linewidth=1)\n", + "ax.set_ylim(-.5,7.5)\n", + "for i,cname in enumerate(type_order):\n", + " ax.scatter([med_tenures.loc[cname].govt],[i-.05], s=49, color='blue')\n", + " ax.scatter([med_tenures.loc[cname].oppn],[i+.05], s=49, color='red', facecolor='white',marker='s')\n", + " ax.plot([.5,14.5],[i,i],'--', color='grey', linewidth=.5)\n", + "ax.plot([med_in_tenure, med_in_tenure],[-2,8], color='blue',linewidth=1)\n", + "ax.plot([med_op_tenure, med_op_tenure],[-2,8], '--', color='red', linewidth=1)\n", "ax.invert_yaxis()\n", - "ax.set_xticks([5, 10])\n", - "ax.set_xticklabels([5, 10], fontsize=14)\n", + "ax.set_xticks([5,10])\n", + "ax.set_xticklabels([5,10], fontsize=14)\n", "ax.set_yticks(np.arange(8))\n", "ax.set_yticklabels(display_names, fontsize=14)\n", - "ax.set_xlabel(\"median tenure\", fontsize=16)\n", - "plt.rc(\"xtick\", labelsize=12)\n", - "plt.rc(\"ytick\", labelsize=12)" + "ax.set_xlabel('median tenure', fontsize=16)\n", + "plt.rc('xtick',labelsize=12)\n", + "plt.rc('ytick',labelsize=12)" ] }, { @@ -1509,15 +1433,10 @@ "outputs": [], "source": [ "a_ec = ExpectedContextModelTransformer(\n", - " context_field=\"reply_to\",\n", - " output_prefix=\"bk\",\n", - " vect_field=\"arc_tfidf\",\n", - " context_vect_field=\"q_arc_tfidf\",\n", - " n_svd_dims=15,\n", - " n_clusters=5,\n", - " random_state=1000,\n", - " cluster_random_state=1000,\n", - ")" + " context_field='reply_to', output_prefix='bk', \n", + " vect_field='arc_tfidf', context_vect_field='q_arc_tfidf',\n", + " n_svd_dims=15, n_clusters=5,\n", + " random_state=1000, cluster_random_state=1000)" ] }, { @@ -1528,12 +1447,8 @@ }, "outputs": [], "source": [ - "a_ec.fit(\n", - " parl_corpus,\n", - " selector=lambda x: x.meta[\"is_answer\"] and (x.meta.get(\"arc_tfidf__n_feats\", 0) > 0),\n", - " context_selector=lambda x: x.meta[\"is_question\"]\n", - " and (x.meta.get(\"q_arc_tfidf__n_feats\", 0) > 0),\n", - ")" + "a_ec.fit(parl_corpus, selector=lambda x: x.meta['is_answer'] and (x.meta.get('arc_tfidf__n_feats',0)>0),\n", + " context_selector=lambda x: x.meta['is_question'] and (x.meta.get('q_arc_tfidf__n_feats',0)>0))" ] }, { @@ -1858,7 +1773,7 @@ }, "outputs": [], "source": [ - "a_ec.set_cluster_names([\"progress_report\", \"statement\", \"endorsement\", \"comment\", \"commitment\"])" + "a_ec.set_cluster_names(['progress_report', 'statement', 'endorsement', 'comment', 'commitment'])" ] }, { @@ -1966,10 +1881,7 @@ }, "outputs": [], "source": [ - "_ = a_ec.transform(\n", - " parl_corpus,\n", - " selector=lambda x: x.meta[\"is_answer\"] and (x.meta.get(\"arc_tfidf__n_feats\", 0) > 0),\n", - ")" + "_ = a_ec.transform(parl_corpus, selector=lambda x: x.meta['is_answer'] and (x.meta.get('arc_tfidf__n_feats',0)>0))" ] }, { @@ -1981,17 +1893,12 @@ }, "outputs": [], "source": [ - "a_utt_meta_df = parl_corpus.get_attribute_table(\"utterance\", [\"bk_clustering.cluster\"])\n", - "a_utt_meta_sub = a_utt_meta_df.join(\n", - " utt_meta_df[\n", - " ((utt_meta_df.is_incumbent == True) | (utt_meta_df.is_oppn == True))\n", - " & (utt_meta_df.speaker != \"\")\n", - " & (utt_meta_df.party.notnull())\n", - " & (utt_meta_df.govt_coarse != \"thatcher+major\")\n", - " ].set_index(\"next_id\"),\n", - " how=\"inner\",\n", - ")\n", - "a_utt_meta_sub = a_utt_meta_sub[a_utt_meta_sub[\"bk_clustering.cluster\"].notnull()]" + "a_utt_meta_df = parl_corpus.get_attribute_table('utterance',\n", + " ['bk_clustering.cluster'])\n", + "a_utt_meta_sub = a_utt_meta_df.join(utt_meta_df[((utt_meta_df.is_incumbent == True) | (utt_meta_df.is_oppn == True))\n", + " & (utt_meta_df.speaker != '') & (utt_meta_df.party.notnull())\n", + " & (utt_meta_df.govt_coarse != 'thatcher+major')].set_index('next_id'), how='inner')\n", + "a_utt_meta_sub = a_utt_meta_sub[a_utt_meta_sub['bk_clustering.cluster'].notnull()]" ] }, { @@ -2022,13 +1929,12 @@ }, "outputs": [], "source": [ - "log_odds_party_answer = []\n", + "log_odds_party_answer = []\n", "for cname in a_ec.get_cluster_names():\n", - " entry = compute_log_odds(\n", - " a_utt_meta_sub[\"bk_clustering.cluster\"], a_utt_meta_sub[\"is_incumbent\"], val_subset=[cname]\n", - " )\n", + " entry = compute_log_odds(a_utt_meta_sub['bk_clustering.cluster'],a_utt_meta_sub['is_incumbent'],\n", + " val_subset=[cname])\n", " log_odds_party_answer += entry\n", - "log_odds_party_answer_df = pd.DataFrame(log_odds_party_answer).set_index(\"val\")" + "log_odds_party_answer_df = pd.DataFrame(log_odds_party_answer).set_index('val')" ] }, { @@ -2039,7 +1945,7 @@ }, "outputs": [], "source": [ - "a_type_order = log_odds_party_answer_df.sort_values(\"log_odds\").index" + "a_type_order = log_odds_party_answer_df.sort_values('log_odds').index" ] }, { @@ -2050,7 +1956,7 @@ }, "outputs": [], "source": [ - "a_display_names = [\"Statement\", \"Comment\", \"Progress report\", \"Commitment\", \"Endorsement\"]" + "a_display_names = ['Statement', 'Comment', 'Progress report', 'Commitment', 'Endorsement']" ] }, { @@ -2070,20 +1976,20 @@ } ], "source": [ - "fig, ax = plt.subplots(figsize=(3, 4))\n", + "fig, ax = plt.subplots(figsize=(3,4))\n", "ax.set_xlim(-1.5, 1.5)\n", - "ax.set_ylim(-0.5, 4.5)\n", - "for i, cname in enumerate(a_type_order):\n", + "ax.set_ylim(-.5,4.5)\n", + "for i,cname in enumerate(a_type_order):\n", " log_odds = log_odds_party_answer_df.loc[cname].log_odds\n", - " ax.scatter([log_odds], [i], color=\"black\", s=49)\n", - " ax.plot([-1.25, 1.25], [i, i], \"--\", color=\"grey\", linewidth=0.5)\n", - "ax.plot([0, 0], [-2, 5], color=\"grey\", linewidth=1)\n", + " ax.scatter([log_odds], [i], color='black',s=49) \n", + " ax.plot([-1.25,1.25],[i,i],'--', color='grey', linewidth=.5)\n", + "ax.plot([0,0],[-2,5], color='grey', linewidth=1)\n", "ax.invert_yaxis()\n", "ax.set_yticks(np.arange(len(a_type_order)))\n", "ax.set_yticklabels(a_display_names, fontsize=14)\n", - "ax.set_xlabel(\"log odds ratio\", fontsize=16)\n", - "ax.set_xticks([-1, 0, 1])\n", - "ax.set_xticklabels([-1, 0, 1], fontsize=14)\n", + "ax.set_xlabel('log odds ratio', fontsize=16)\n", + "ax.set_xticks([-1,0,1])\n", + "ax.set_xticklabels([-1,0,1], fontsize=14)\n", "None" ] }, @@ -2113,7 +2019,8 @@ }, "outputs": [], "source": [ - "utt_range_df = parl_corpus.get_attribute_table(\"utterance\", [\"fw_clustering.cluster\", \"fw_range\"])\n", + "utt_range_df = parl_corpus.get_attribute_table('utterance',\n", + " ['fw_clustering.cluster','fw_range'])\n", "utt_range_df = utt_range_df[utt_range_df.fw_range.notnull()].copy()" ] }, @@ -2125,9 +2032,7 @@ }, "outputs": [], "source": [ - "fw_range_distrs = (\n", - " utt_range_df.groupby(\"fw_clustering.cluster\").fw_range.describe().sort_values(\"50%\")\n", - ")\n", + "fw_range_distrs = utt_range_df.groupby('fw_clustering.cluster').fw_range.describe().sort_values('50%')\n", "med_range_full = utt_range_df.fw_range.median()" ] }, @@ -2148,23 +2053,23 @@ } ], "source": [ - "fig, ax = plt.subplots(figsize=(4, 6))\n", - "ax.set_xlim(0.7, 0.9)\n", - "ax.set_ylim(-0.5, 7.5)\n", - "for i, cname in enumerate(type_order):\n", - " med_range = fw_range_distrs.loc[cname][\"50%\"]\n", - " left = fw_range_distrs.loc[cname][\"25%\"]\n", - " right = fw_range_distrs.loc[cname][\"75%\"]\n", - " ax.scatter([med_range], [i], color=\"black\", s=49)\n", - " ax.plot([left, right], [i, i], color=\"black\")\n", - " ax.plot([-1.25, 1.25], [i, i], \"--\", color=\"grey\", linewidth=0.5)\n", - "ax.plot([med_range_full, med_range_full], [-2, 8], \"--\", color=\"grey\", linewidth=1)\n", + "fig, ax = plt.subplots(figsize=(4,6))\n", + "ax.set_xlim(.7, .9)\n", + "ax.set_ylim(-.5,7.5)\n", + "for i,cname in enumerate(type_order):\n", + " med_range = fw_range_distrs.loc[cname]['50%']\n", + " left = fw_range_distrs.loc[cname]['25%']\n", + " right = fw_range_distrs.loc[cname]['75%']\n", + " ax.scatter([med_range], [i], color='black',s=49)\n", + " ax.plot([left,right],[i,i], color='black')\n", + " ax.plot([-1.25,1.25],[i,i],'--', color='grey', linewidth=.5)\n", + "ax.plot([med_range_full,med_range_full],[-2,8], '--', color='grey', linewidth=1)\n", "ax.invert_yaxis()\n", "ax.set_yticks(np.arange(len(type_order)))\n", "ax.set_yticklabels(display_names, fontsize=14)\n", - "ax.set_xlabel(\"$\\overrightarrow{\\Sigma}$\", fontsize=16)\n", - "plt.rc(\"xtick\", labelsize=14)\n", - "plt.rc(\"ytick\", labelsize=14)" + "ax.set_xlabel('$\\overrightarrow{\\Sigma}$', fontsize=16)\n", + "plt.rc('xtick',labelsize=14)\n", + "plt.rc('ytick',labelsize=14)\n" ] }, { @@ -2242,21 +2147,13 @@ }, "outputs": [], "source": [ - "q_pipe = ExpectedContextModelPipeline(\n", - " context_field=\"next_id\",\n", - " output_prefix=\"fw\",\n", - " text_field=\"q_arcs\",\n", - " context_text_field=\"arcs\",\n", - " share_tfidf_models=False,\n", - " text_pipe=parliament_arc_pipeline(),\n", - " tfidf_params={\"binary\": False, \"min_df\": 100, \"max_df\": 0.1},\n", - " min_terms=1,\n", - " n_svd_dims=25,\n", - " n_clusters=8,\n", - " cluster_on=\"utts\",\n", - " random_state=1000,\n", - " cluster_random_state=1000,\n", - ")" + "q_pipe = ExpectedContextModelPipeline(context_field='next_id', output_prefix='fw',\n", + " text_field='q_arcs', context_text_field='arcs', share_tfidf_models=False,\n", + " text_pipe=parliament_arc_pipeline(), \n", + " tfidf_params={'binary': False, 'min_df': 100, 'max_df': .1}, \n", + " min_terms=1,\n", + " n_svd_dims=25, n_clusters=8, cluster_on='utts',\n", + " random_state=1000, cluster_random_state=1000)" ] }, { @@ -2267,11 +2164,9 @@ }, "outputs": [], "source": [ - "q_pipe.fit(\n", - " parl_corpus,\n", - " selector=lambda x: x.meta[\"is_question\"] and x.meta[\"pair_has_features\"],\n", - " context_selector=lambda x: x.meta[\"is_answer\"] and x.meta[\"pair_has_features\"],\n", - ")" + "q_pipe.fit(parl_corpus,\n", + " selector=lambda x: x.meta['is_question'] and x.meta['pair_has_features'],\n", + " context_selector=lambda x: x.meta['is_answer'] and x.meta['pair_has_features'])" ] }, { @@ -2554,18 +2449,8 @@ }, "outputs": [], "source": [ - "q_pipe.set_cluster_names(\n", - " [\n", - " \"demand_account\",\n", - " \"shared_concern\",\n", - " \"agreement\",\n", - " \"issue_update\",\n", - " \"question_premises\",\n", - " \"request_assurance\",\n", - " \"prompt_comment\",\n", - " \"accept_propose\",\n", - " ]\n", - ")" + "q_pipe.set_cluster_names(['demand_account', 'shared_concern', 'agreement', 'issue_update',\n", + " 'question_premises', 'request_assurance', 'prompt_comment', 'accept_propose'])" ] }, { @@ -2584,8 +2469,7 @@ "outputs": [], "source": [ "new_ut = q_pipe.transform_utterance(\n", - " \"Can the Minister please explain why the reopening was delayed?\"\n", - ")" + " 'Can the Minister please explain why the reopening was delayed?')" ] }, { @@ -2602,7 +2486,7 @@ } ], "source": [ - "print(\"question type:\", new_ut.meta[\"fw_clustering.cluster\"])" + "print('question type:', new_ut.meta['fw_clustering.cluster'])" ] }, { @@ -2654,7 +2538,7 @@ "source": [ "# note that different versions of SpaCy may produce different outputs, since the\n", "# dependency parses may change from version to version\n", - "new_ut.meta[\"fw_repr\"]" + "new_ut.meta['fw_repr']" ] }, { diff --git a/convokit/expected_context_framework/demos/scotus_orientation_demo.ipynb b/convokit/expected_context_framework/demos/scotus_orientation_demo.ipynb index cb047f4c..0de52a3b 100644 --- a/convokit/expected_context_framework/demos/scotus_orientation_demo.ipynb +++ b/convokit/expected_context_framework/demos/scotus_orientation_demo.ipynb @@ -21,8 +21,7 @@ "outputs": [], "source": [ "import warnings\n", - "\n", - "warnings.filterwarnings(\"ignore\")" + "warnings.filterwarnings('ignore')" ] }, { @@ -75,7 +74,7 @@ }, "outputs": [], "source": [ - "# OPTION 1: DOWNLOAD CORPUS\n", + "# OPTION 1: DOWNLOAD CORPUS \n", "# UNCOMMENT THESE LINES TO DOWNLOAD CORPUS\n", "# DATA_DIR = ''\n", "# SCOTUS_CORPUS_PATH = download('supreme-corpus', data_dir=DATA_DIR)\n", @@ -130,7 +129,7 @@ }, "outputs": [], "source": [ - "scotus_corpus.load_info(\"utterance\", [\"arcs\", \"tokens\"])" + "scotus_corpus.load_info('utterance',['arcs','tokens'])" ] }, { @@ -149,10 +148,8 @@ "outputs": [], "source": [ "from convokit.text_processing import TextProcessor\n", - "\n", - "wordcounter = TextProcessor(\n", - " input_field=\"tokens\", output_field=\"wordcount\", proc_fn=lambda x: len(x.split())\n", - ")\n", + "wordcounter = TextProcessor(input_field='tokens', output_field='wordcount',\n", + " proc_fn=lambda x: len(x.split()))\n", "scotus_corpus = wordcounter.transform(scotus_corpus)" ] }, @@ -172,7 +169,7 @@ "outputs": [], "source": [ "for ut in scotus_corpus.iter_utterances(selector=lambda x: x.reply_to is not None):\n", - " scotus_corpus.get_utterance(ut.reply_to).meta[\"next_id\"] = ut.id" + " scotus_corpus.get_utterance(ut.reply_to).meta['next_id'] = ut.id" ] }, { @@ -220,24 +217,20 @@ "outputs": [], "source": [ "for ut in scotus_corpus.iter_utterances():\n", - " ut.meta[\"is_valid_context\"] = (\n", - " (ut.meta[\"speaker_type\"] == \"A\")\n", - " and (ut.meta[\"arcs\"] != \"\")\n", - " and (ut.meta[\"wordcount\"] >= min_wc_context)\n", - " and (ut.meta[\"wordcount\"] <= max_wc_context)\n", - " )\n", + " ut.meta['is_valid_context'] = (ut.meta['speaker_type'] == 'A')\\\n", + " and (ut.meta['arcs'] != '')\\\n", + " and (ut.meta['wordcount'] >= min_wc_context)\\\n", + " and (ut.meta['wordcount'] <= max_wc_context) \n", "for ut in scotus_corpus.iter_utterances():\n", - " if (\"next_id\" not in ut.meta) or (ut.reply_to is None):\n", - " ut.meta[\"is_valid_utt\"] = False\n", + " if ('next_id' not in ut.meta) or (ut.reply_to is None): \n", + " ut.meta['is_valid_utt'] = False\n", " else:\n", - " ut.meta[\"is_valid_utt\"] = (\n", - " (ut.meta[\"speaker_type\"] == \"J\")\n", - " and (ut.meta[\"arcs\"] != \"\")\n", - " and (ut.meta[\"wordcount\"] >= min_wc)\n", - " and (ut.meta[\"wordcount\"] <= max_wc)\n", - " and scotus_corpus.get_utterance(ut.meta[\"next_id\"]).meta[\"is_valid_context\"]\n", - " and scotus_corpus.get_utterance(ut.reply_to).meta[\"is_valid_context\"]\n", - " )" + " ut.meta['is_valid_utt'] = (ut.meta['speaker_type'] == 'J')\\\n", + " and (ut.meta['arcs'] != '')\\\n", + " and (ut.meta['wordcount'] >= min_wc)\\\n", + " and (ut.meta['wordcount'] <= max_wc)\\\n", + " and scotus_corpus.get_utterance(ut.meta['next_id']).meta['is_valid_context']\\\n", + " and scotus_corpus.get_utterance(ut.reply_to).meta['is_valid_context']" ] }, { @@ -264,7 +257,7 @@ } ], "source": [ - "sum(ut.meta[\"is_valid_utt\"] for ut in scotus_corpus.iter_utterances())" + "sum(ut.meta['is_valid_utt'] for ut in scotus_corpus.iter_utterances())" ] }, { @@ -284,7 +277,7 @@ } ], "source": [ - "sum(ut.meta[\"is_valid_context\"] for ut in scotus_corpus.iter_utterances())" + "sum(ut.meta['is_valid_context'] for ut in scotus_corpus.iter_utterances())" ] }, { @@ -331,16 +324,10 @@ }, "outputs": [], "source": [ - "j_tfidf_obj = ColNormedTfidfTransformer(\n", - " input_field=\"arcs\",\n", - " output_field=\"j_tfidf\",\n", - " binary=True,\n", - " min_df=250,\n", - " max_df=1.0,\n", - " max_features=2000,\n", - ")\n", - "_ = j_tfidf_obj.fit(scotus_corpus, selector=lambda x: x.meta[\"is_valid_utt\"])\n", - "_ = j_tfidf_obj.transform(scotus_corpus, selector=lambda x: x.meta[\"is_valid_utt\"])" + "j_tfidf_obj = ColNormedTfidfTransformer(input_field='arcs', output_field='j_tfidf', binary=True, \n", + " min_df=250, max_df=1., max_features=2000)\n", + "_ = j_tfidf_obj.fit(scotus_corpus, selector=lambda x: x.meta['is_valid_utt'])\n", + "_ = j_tfidf_obj.transform(scotus_corpus, selector=lambda x: x.meta['is_valid_utt'])" ] }, { @@ -351,16 +338,10 @@ }, "outputs": [], "source": [ - "a_tfidf_obj = ColNormedTfidfTransformer(\n", - " input_field=\"arcs\",\n", - " output_field=\"a_tfidf\",\n", - " binary=True,\n", - " min_df=250,\n", - " max_df=1.0,\n", - " max_features=2000,\n", - ")\n", - "_ = a_tfidf_obj.fit(scotus_corpus, selector=lambda x: x.meta[\"is_valid_context\"])\n", - "_ = a_tfidf_obj.transform(scotus_corpus, selector=lambda x: x.meta[\"is_valid_context\"])" + "a_tfidf_obj = ColNormedTfidfTransformer(input_field='arcs', output_field='a_tfidf', binary=True, \n", + " min_df=250, max_df=1., max_features=2000)\n", + "_ = a_tfidf_obj.fit(scotus_corpus, selector=lambda x: x.meta['is_valid_context'])\n", + "_ = a_tfidf_obj.transform(scotus_corpus, selector=lambda x: x.meta['is_valid_context'])" ] }, { @@ -380,14 +361,10 @@ }, "outputs": [], "source": [ - "dual_context_model = DualContextWrapper(\n", - " context_fields=[\"reply_to\", \"next_id\"],\n", - " output_prefixes=[\"bk\", \"fw\"],\n", - " vect_field=\"j_tfidf\",\n", - " context_vect_field=\"a_tfidf\",\n", - " n_svd_dims=15,\n", - " random_state=1000,\n", - ")" + "dual_context_model = DualContextWrapper(context_fields=['reply_to','next_id'], output_prefixes=['bk','fw'],\n", + " vect_field='j_tfidf', context_vect_field='a_tfidf', \n", + " n_svd_dims=15,\n", + " random_state=1000)" ] }, { @@ -398,11 +375,8 @@ }, "outputs": [], "source": [ - "dual_context_model.fit(\n", - " scotus_corpus,\n", - " selector=lambda x: x.meta[\"is_valid_utt\"],\n", - " context_selector=lambda x: x.meta[\"is_valid_context\"],\n", - ")" + "dual_context_model.fit(scotus_corpus, selector=lambda x: x.meta['is_valid_utt'],\n", + " context_selector=lambda x: x.meta['is_valid_context'])" ] }, { @@ -774,10 +748,10 @@ } ], "source": [ - "print(\"\\nhigh orientation\")\n", - "display(term_df.sort_values(\"orn\")[[\"orn\"]].tail(20))\n", - "print(\"low orientation\")\n", - "display(term_df.sort_values(\"orn\")[[\"orn\"]].head(20))" + "print('\\nhigh orientation')\n", + "display(term_df.sort_values('orn')[['orn']].tail(20))\n", + "print('low orientation')\n", + "display(term_df.sort_values('orn')[['orn']].head(20))" ] }, { @@ -818,24 +792,19 @@ "outputs": [], "source": [ "sentence_utts = []\n", - "for ut in scotus_corpus.iter_utterances(selector=lambda x: x.meta[\"is_valid_utt\"]):\n", - " sents = ut.meta[\"arcs\"].split(\"\\n\")\n", - " tok_sents = ut.meta[\"tokens\"].split(\"\\n\")\n", + "for ut in scotus_corpus.iter_utterances(selector=lambda x: x.meta['is_valid_utt']):\n", + " sents = ut.meta['arcs'].split('\\n')\n", + " tok_sents = ut.meta['tokens'].split('\\n')\n", " for i, (sent, tok_sent) in enumerate(zip(sents, tok_sents)):\n", - " utt_id = ut.id + \"_\" + \"%03d\" % i\n", + " utt_id = ut.id + '_' + '%03d' % i\n", " speaker = ut.speaker\n", " text = tok_sent\n", - " meta = {\"arcs\": sent, \"utt_id\": ut.id, \"speaker\": ut.speaker.id}\n", - " sentence_utts.append(\n", - " Utterance(\n", - " id=utt_id,\n", - " speaker=speaker,\n", - " text=text,\n", - " reply_to=ut.reply_to,\n", - " conversation_id=ut.conversation_id,\n", - " meta=meta,\n", - " )\n", - " )" + " meta = {'arcs': sent, 'utt_id': ut.id, 'speaker': ut.speaker.id}\n", + " sentence_utts.append(Utterance(\n", + " id=utt_id, speaker=speaker, text=text,\n", + " reply_to=ut.reply_to, conversation_id=ut.conversation_id,\n", + " meta=meta\n", + " ))" ] }, { @@ -884,9 +853,7 @@ "outputs": [], "source": [ "_ = j_tfidf_obj.transform(sentence_corpus)\n", - "_ = dual_context_model.transform(\n", - " sentence_corpus, selector=lambda x: x.meta[\"j_tfidf__n_feats\"] >= 1\n", - ")" + "_ = dual_context_model.transform(sentence_corpus, selector=lambda x: x.meta['j_tfidf__n_feats'] >= 1)\n" ] }, { @@ -903,9 +870,9 @@ } ], "source": [ - "ut_eg_id = \"20030__1_029_000\"\n", + "ut_eg_id = '20030__1_029_000'\n", "eg_ut = sentence_corpus.get_utterance(ut_eg_id)\n", - "print(eg_ut.speaker.meta[\"name\"], \":\", eg_ut.text)" + "print(eg_ut.speaker.meta['name'], ':',eg_ut.text)" ] }, { @@ -925,7 +892,7 @@ } ], "source": [ - "eg_ut.meta[\"orn\"]" + "eg_ut.meta['orn']" ] }, { @@ -952,13 +919,10 @@ }, "outputs": [], "source": [ - "sent_df = sentence_corpus.get_attribute_table(\"utterance\", [\"orn\", \"j_tfidf__n_feats\"])\n", - "text_df = pd.DataFrame(\n", - " [\n", - " {\"id\": ut._id, \"text\": ut.text, \"speaker\": ut.speaker.meta[\"name\"]}\n", - " for ut in sentence_corpus.iter_utterances()\n", - " ]\n", - ").set_index(\"id\")\n", + "sent_df = sentence_corpus.get_attribute_table('utterance',['orn','j_tfidf__n_feats'])\n", + "text_df = pd.DataFrame([{'id': ut._id, 'text': ut.text, 'speaker': ut.speaker.meta['name']}\n", + " for ut in sentence_corpus.iter_utterances()\n", + "]).set_index('id')\n", "sent_df = sent_df.join(text_df)" ] }, @@ -999,12 +963,10 @@ }, "outputs": [], "source": [ - "low_subset = sent_df[\n", - " (sent_df.j_tfidf__n_feats >= 30) & (sent_df.orn < sent_df.orn.quantile(0.1))\n", - "].sample(10, random_state=9)\n", - "high_subset = sent_df[\n", - " (sent_df.j_tfidf__n_feats >= 30) & (sent_df.orn > sent_df.orn.quantile(0.9))\n", - "].sample(10, random_state=9)" + "low_subset = sent_df[(sent_df.j_tfidf__n_feats >= 30)\n", + " & (sent_df.orn < sent_df.orn.quantile(.1))].sample(10,random_state=9)\n", + "high_subset = sent_df[(sent_df.j_tfidf__n_feats >= 30)\n", + " & (sent_df.orn > sent_df.orn.quantile(.9))].sample(10,random_state=9)" ] }, { @@ -1057,9 +1019,9 @@ } ], "source": [ - "for id, row in high_subset.sort_values(\"orn\", ascending=False).iterrows():\n", - " print(id, row.speaker, \"orientation:\", row.orn)\n", - " print(\">\", row.text)\n", + "for id, row in high_subset.sort_values('orn', ascending=False).iterrows():\n", + " print(id,row.speaker, 'orientation:',row.orn)\n", + " print('>', row.text)\n", " print()" ] }, @@ -1106,9 +1068,9 @@ } ], "source": [ - "for id, row in low_subset.sort_values(\"orn\").iterrows():\n", - " print(id, row.speaker, \"orientation:\", row.orn)\n", - " print(\">\", row.text)\n", + "for id, row in low_subset.sort_values('orn').iterrows():\n", + " print(id,row.speaker, 'orientation:',row.orn)\n", + " print('>', row.text)\n", " print()" ] }, @@ -1178,16 +1140,11 @@ }, "outputs": [], "source": [ - "dual_pipe = DualContextPipeline(\n", - " context_fields=[\"reply_to\", \"next_id\"],\n", - " output_prefixes=[\"bk\", \"fw\"],\n", - " share_tfidf_models=False,\n", - " text_field=\"arcs\",\n", - " text_pipe=scotus_arc_pipeline(),\n", - " tfidf_params={\"binary\": True, \"min_df\": 250, \"max_features\": 2000},\n", - " n_svd_dims=15,\n", - " random_state=1000,\n", - ")" + "dual_pipe = DualContextPipeline(context_fields=['reply_to','next_id'], \n", + " output_prefixes=['bk','fw'], share_tfidf_models=False,\n", + " text_field='arcs', text_pipe=scotus_arc_pipeline(), \n", + " tfidf_params={'binary': True, 'min_df': 250, 'max_features': 2000}, \n", + " n_svd_dims=15, random_state=1000)" ] }, { @@ -1198,11 +1155,9 @@ }, "outputs": [], "source": [ - "dual_pipe.fit(\n", - " scotus_corpus,\n", - " selector=lambda x: x.meta[\"is_valid_utt\"],\n", - " context_selector=lambda x: x.meta[\"is_valid_context\"],\n", - ")" + "dual_pipe.fit(scotus_corpus,\n", + " selector=lambda x: x.meta['is_valid_utt'],\n", + " context_selector=lambda x: x.meta['is_valid_context'])" ] }, { @@ -1527,10 +1482,10 @@ } ], "source": [ - "print(\"\\nhigh orientation\")\n", - "display(term_df_new.sort_values(\"orn\")[[\"orn\"]].tail(20))\n", - "print(\"low orientation\")\n", - "display(term_df_new.sort_values(\"orn\")[[\"orn\"]].head(20))" + "print('\\nhigh orientation')\n", + "display(term_df_new.sort_values('orn')[['orn']].tail(20))\n", + "print('low orientation')\n", + "display(term_df_new.sort_values('orn')[['orn']].head(20))" ] }, { @@ -1548,7 +1503,7 @@ }, "outputs": [], "source": [ - "eg_ut_new = dual_pipe.transform_utterance(\"What is the difference between these statutes?\")" + "eg_ut_new = dual_pipe.transform_utterance('What is the difference between these statutes?')" ] }, { @@ -1565,7 +1520,7 @@ } ], "source": [ - "print(\"orientation:\", eg_ut_new.meta[\"orn\"])" + "print('orientation:', eg_ut_new.meta['orn'])" ] }, { diff --git a/convokit/expected_context_framework/demos/switchboard_exploration_demo.ipynb b/convokit/expected_context_framework/demos/switchboard_exploration_demo.ipynb index c233d41a..d330b462 100644 --- a/convokit/expected_context_framework/demos/switchboard_exploration_demo.ipynb +++ b/convokit/expected_context_framework/demos/switchboard_exploration_demo.ipynb @@ -22,8 +22,7 @@ "outputs": [], "source": [ "import warnings\n", - "\n", - "warnings.filterwarnings(\"ignore\")" + "warnings.filterwarnings('ignore')" ] }, { @@ -80,7 +79,7 @@ }, "outputs": [], "source": [ - "# OPTION 1: DOWNLOAD CORPUS\n", + "# OPTION 1: DOWNLOAD CORPUS \n", "# UNCOMMENT THESE LINES TO DOWNLOAD CORPUS\n", "# DATA_DIR = ''\n", "# SW_CORPUS_PATH = download('switchboard-processed-corpus', data_dir=DATA_DIR)\n", @@ -128,7 +127,7 @@ }, "outputs": [], "source": [ - "utt_eg_id = \"3496-79\"" + "utt_eg_id = '3496-79'" ] }, { @@ -155,7 +154,7 @@ } ], "source": [ - "sw_corpus.get_utterance(utt_eg_id).meta[\"alpha_text\"]" + "sw_corpus.get_utterance(utt_eg_id).meta['alpha_text']" ] }, { @@ -195,19 +194,19 @@ "source": [ "topic_counts = defaultdict(set)\n", "for ut in sw_corpus.iter_utterances():\n", - " topic = sw_corpus.get_conversation(ut.conversation_id).meta[\"topic\"]\n", - " for x in set(ut.meta[\"alpha_text\"].lower().split()):\n", + " topic = sw_corpus.get_conversation(ut.conversation_id).meta['topic']\n", + " for x in set(ut.meta['alpha_text'].lower().split()):\n", " topic_counts[x].add(topic)\n", "topic_counts = {x: len(y) for x, y in topic_counts.items()}\n", "\n", "word_convo_counts = defaultdict(set)\n", "for ut in sw_corpus.iter_utterances():\n", - " for x in set(ut.meta[\"alpha_text\"].lower().split()):\n", + " for x in set(ut.meta['alpha_text'].lower().split()):\n", " word_convo_counts[x].add(ut.conversation_id)\n", - "word_convo_counts = {x: len(y) for x, y in word_convo_counts.items()}\n", + "word_convo_counts = {x: len(y) for x, y in word_convo_counts.items()}\n", "\n", - "min_topic_words = set(x for x, y in topic_counts.items() if y >= 33)\n", - "min_convo_words = set(x for x, y in word_convo_counts.items() if y >= 200)\n", + "min_topic_words = set(x for x,y in topic_counts.items() if y >= 33)\n", + "min_convo_words = set(x for x,y in word_convo_counts.items() if y >= 200)\n", "vocab = sorted(min_topic_words.intersection(min_convo_words))" ] }, @@ -248,10 +247,7 @@ }, "outputs": [], "source": [ - "from convokit.expected_context_framework import (\n", - " ColNormedTfidfTransformer,\n", - " ExpectedContextModelTransformer,\n", - ")" + "from convokit.expected_context_framework import ColNormedTfidfTransformer, ExpectedContextModelTransformer" ] }, { @@ -271,9 +267,7 @@ }, "outputs": [], "source": [ - "tfidf_obj = ColNormedTfidfTransformer(\n", - " input_field=\"alpha_text\", output_field=\"col_normed_tfidf\", binary=True, vocabulary=vocab\n", - ")\n", + "tfidf_obj = ColNormedTfidfTransformer(input_field='alpha_text', output_field='col_normed_tfidf', binary=True, vocabulary=vocab)\n", "_ = tfidf_obj.fit(sw_corpus)\n", "_ = tfidf_obj.transform(sw_corpus)" ] @@ -302,16 +296,10 @@ }, "outputs": [], "source": [ - "ec_fw = ExpectedContextModelTransformer(\n", - " context_field=\"next_id\",\n", - " output_prefix=\"fw\",\n", - " vect_field=\"col_normed_tfidf\",\n", - " context_vect_field=\"col_normed_tfidf\",\n", - " n_svd_dims=15,\n", - " n_clusters=2,\n", - " random_state=1000,\n", - " cluster_random_state=1000,\n", - ")" + "ec_fw = ExpectedContextModelTransformer(context_field='next_id', output_prefix='fw', \n", + " vect_field='col_normed_tfidf', context_vect_field='col_normed_tfidf', \n", + " n_svd_dims=15, n_clusters=2,\n", + " random_state=1000, cluster_random_state=1000)" ] }, { @@ -329,11 +317,8 @@ }, "outputs": [], "source": [ - "ec_fw.fit(\n", - " sw_corpus,\n", - " selector=lambda x: x.meta.get(\"col_normed_tfidf__n_feats\", 0) >= 5,\n", - " context_selector=lambda x: x.meta.get(\"col_normed_tfidf__n_feats\", 0) >= 5,\n", - ")" + "ec_fw.fit(sw_corpus, selector=lambda x: x.meta.get('col_normed_tfidf__n_feats',0)>=5, \n", + " context_selector=lambda x: x.meta.get('col_normed_tfidf__n_feats',0)>= 5)" ] }, { @@ -353,22 +338,13 @@ }, "outputs": [], "source": [ - "ec_bk = ExpectedContextModelTransformer(\n", - " context_field=\"reply_to\",\n", - " output_prefix=\"bk\",\n", - " vect_field=\"col_normed_tfidf\",\n", - " context_vect_field=\"col_normed_tfidf\",\n", - " n_svd_dims=15,\n", - " n_clusters=2,\n", - " random_state=1000,\n", - " cluster_random_state=1000,\n", - " model=ec_fw,\n", - ")\n", - "ec_bk.fit(\n", - " sw_corpus,\n", - " selector=lambda x: x.meta.get(\"col_normed_tfidf__n_feats\", 0) >= 5,\n", - " context_selector=lambda x: x.meta.get(\"col_normed_tfidf__n_feats\", 0) >= 5,\n", - ")" + "ec_bk = ExpectedContextModelTransformer(context_field='reply_to', output_prefix='bk', \n", + " vect_field='col_normed_tfidf', context_vect_field='col_normed_tfidf', \n", + " n_svd_dims=15, n_clusters=2,\n", + " random_state=1000, cluster_random_state=1000,\n", + " model=ec_fw)\n", + "ec_bk.fit(sw_corpus, selector=lambda x: x.meta.get('col_normed_tfidf__n_feats',0)>=5, \n", + " context_selector=lambda x: x.meta.get('col_normed_tfidf__n_feats',0)>= 5)" ] }, { @@ -689,8 +665,8 @@ }, "outputs": [], "source": [ - "ec_fw.set_cluster_names([\"commentary\", \"personal\"])\n", - "ec_bk.set_cluster_names([\"personal\", \"commentary\"])" + "ec_fw.set_cluster_names(['commentary','personal'])\n", + "ec_bk.set_cluster_names(['personal', 'commentary'])" ] }, { @@ -781,13 +757,9 @@ }, "outputs": [], "source": [ - "term_df = pd.DataFrame(\n", - " {\n", - " \"index\": ec_fw.get_terms(),\n", - " \"fw_range\": ec_fw.get_term_ranges(),\n", - " \"bk_range\": ec_bk.get_term_ranges(),\n", - " }\n", - ").set_index(\"index\")" + "term_df = pd.DataFrame({'index': ec_fw.get_terms(),\n", + " 'fw_range': ec_fw.get_term_ranges(),\n", + " 'bk_range': ec_bk.get_term_ranges()}).set_index('index')" ] }, { @@ -893,8 +865,10 @@ }, "outputs": [], "source": [ - "term_df[\"orn\"] = term_df.bk_range - term_df.fw_range\n", - "term_df[\"shift\"] = paired_distances(ec_fw.ec_model.term_reprs, ec_bk.ec_model.term_reprs)" + "term_df['orn'] = term_df.bk_range - term_df.fw_range\n", + "term_df['shift'] = paired_distances(\n", + " ec_fw.ec_model.term_reprs, ec_bk.ec_model.term_reprs\n", + " )" ] }, { @@ -1297,15 +1271,15 @@ } ], "source": [ - "k = 10\n", - "print(\"low orientation\")\n", - "display(term_df.sort_values(\"orn\").head(k)[[\"orn\"]])\n", - "print(\"high orientation\")\n", - "display(term_df.sort_values(\"orn\").tail(k)[[\"orn\"]])\n", - "print(\"\\nlow shift\")\n", - "display(term_df.sort_values(\"shift\").head(k)[[\"shift\"]])\n", - "print(\"high shift\")\n", - "display(term_df.sort_values(\"shift\").tail(k)[[\"shift\"]])" + "k=10\n", + "print('low orientation')\n", + "display(term_df.sort_values('orn').head(k)[['orn']])\n", + "print('high orientation')\n", + "display(term_df.sort_values('orn').tail(k)[['orn']])\n", + "print('\\nlow shift')\n", + "display(term_df.sort_values('shift').head(k)[['shift']])\n", + "print('high shift')\n", + "display(term_df.sort_values('shift').tail(k)[['shift']])" ] }, { @@ -1334,8 +1308,8 @@ }, "outputs": [], "source": [ - "_ = ec_fw.transform(sw_corpus, selector=lambda x: x.meta.get(\"col_normed_tfidf__n_feats\", 0) >= 5)\n", - "_ = ec_bk.transform(sw_corpus, selector=lambda x: x.meta.get(\"col_normed_tfidf__n_feats\", 0) >= 5)" + "_ = ec_fw.transform(sw_corpus, selector=lambda x: x.meta.get('col_normed_tfidf__n_feats',0)>=5)\n", + "_ = ec_bk.transform(sw_corpus, selector=lambda x: x.meta.get('col_normed_tfidf__n_feats',0)>=5)" ] }, { @@ -1390,8 +1364,8 @@ ], "source": [ "eg_ut = sw_corpus.get_utterance(utt_eg_id)\n", - "print(\"Forwards range:\", eg_ut.meta[\"fw_range\"])\n", - "print(\"Backwards range:\", eg_ut.meta[\"bk_range\"])" + "print('Forwards range:', eg_ut.meta['fw_range'])\n", + "print('Backwards range:', eg_ut.meta['bk_range'])" ] }, { @@ -1416,8 +1390,8 @@ } ], "source": [ - "print(\"Forwards cluster:\", eg_ut.meta[\"fw_clustering.cluster\"])\n", - "print(\"Backwards cluster:\", eg_ut.meta[\"bk_clustering.cluster\"])" + "print('Forwards cluster:', eg_ut.meta['fw_clustering.cluster'])\n", + "print('Backwards cluster:', eg_ut.meta['bk_clustering.cluster'])" ] }, { @@ -1435,10 +1409,8 @@ }, "outputs": [], "source": [ - "for ut in sw_corpus.iter_utterances(\n", - " selector=lambda x: x.meta.get(\"col_normed_tfidf__n_feats\", 0) >= 5\n", - "):\n", - " ut.meta[\"orn\"] = ut.meta[\"bk_range\"] - ut.meta[\"fw_range\"]" + "for ut in sw_corpus.iter_utterances(selector=lambda x: x.meta.get('col_normed_tfidf__n_feats',0)>=5):\n", + " ut.meta['orn'] = ut.meta['bk_range'] - ut.meta['fw_range']" ] }, { @@ -1456,9 +1428,9 @@ }, "outputs": [], "source": [ - "utt_shifts = paired_distances(sw_corpus.get_vectors(\"fw_repr\"), sw_corpus.get_vectors(\"bk_repr\"))\n", - "for id, shift in zip(sw_corpus.get_vector_matrix(\"fw_repr\").ids, utt_shifts):\n", - " sw_corpus.get_utterance(id).meta[\"shift\"] = shift" + "utt_shifts = paired_distances(sw_corpus.get_vectors('fw_repr'), sw_corpus.get_vectors('bk_repr'))\n", + "for id, shift in zip(sw_corpus.get_vector_matrix('fw_repr').ids, utt_shifts):\n", + " sw_corpus.get_utterance(id).meta['shift'] = shift" ] }, { @@ -1476,8 +1448,8 @@ } ], "source": [ - "print(\"shift:\", eg_ut.meta[\"shift\"])\n", - "print(\"orientation:\", eg_ut.meta[\"orn\"])" + "print('shift:', eg_ut.meta['shift'])\n", + "print('orientation:', eg_ut.meta['orn'])" ] }, { @@ -1522,10 +1494,10 @@ }, "outputs": [], "source": [ - "df = sw_corpus.get_attribute_table(\n", - " \"utterance\", [\"bk_clustering.cluster\", \"fw_clustering.cluster\", \"orn\", \"shift\", \"tags\"]\n", - ")\n", - "df = df[df[\"bk_clustering.cluster\"].notnull()]" + "df = sw_corpus.get_attribute_table('utterance',\n", + " ['bk_clustering.cluster', 'fw_clustering.cluster',\n", + " 'orn', 'shift', 'tags'])\n", + "df = df[df['bk_clustering.cluster'].notnull()]" ] }, { @@ -1543,9 +1515,9 @@ }, "outputs": [], "source": [ - "tag_subset = [\"aa\", \"b\", \"ba\", \"h\", \"ny\", \"qw\", \"qy\", \"sd\", \"sv\"]\n", + "tag_subset = ['aa', 'b', 'ba', 'h', 'ny', 'qw', 'qy', 'sd', 'sv'] \n", "for tag in tag_subset:\n", - " df[\"has_\" + tag] = df.tags.apply(lambda x: tag in x.split())" + " df['has_' + tag] = df.tags.apply(lambda x: tag in x.split())" ] }, { @@ -1574,9 +1546,7 @@ " val_false = sum((col == val) & ~bool_col)\n", " nval_true = sum((col != val) & bool_col)\n", " nval_false = sum((col != val) & ~bool_col)\n", - " log_odds_entries.append(\n", - " {\"val\": val, \"log_odds\": np.log((val_true / val_false) / (nval_true / nval_false))}\n", - " )\n", + " log_odds_entries.append({'val': val, 'log_odds': np.log((val_true/val_false)/(nval_true/nval_false))})\n", " return log_odds_entries" ] }, @@ -1590,10 +1560,10 @@ "source": [ "bk_log_odds = []\n", "for tag in tag_subset:\n", - " entry = compute_log_odds(df[\"bk_clustering.cluster\"], df[\"has_\" + tag], [\"commentary\"])[0]\n", - " entry[\"tag\"] = tag\n", + " entry = compute_log_odds(df['bk_clustering.cluster'],df['has_' + tag], ['commentary'])[0]\n", + " entry['tag'] = tag\n", " bk_log_odds.append(entry)\n", - "bk_log_odds_df = pd.DataFrame(bk_log_odds).set_index(\"tag\").sort_values(\"log_odds\")[[\"log_odds\"]]" + "bk_log_odds_df = pd.DataFrame(bk_log_odds).set_index('tag').sort_values('log_odds')[['log_odds']]" ] }, { @@ -1606,10 +1576,10 @@ "source": [ "fw_log_odds = []\n", "for tag in tag_subset:\n", - " entry = compute_log_odds(df[\"fw_clustering.cluster\"], df[\"has_\" + tag], [\"commentary\"])[0]\n", - " entry[\"tag\"] = tag\n", + " entry = compute_log_odds(df['fw_clustering.cluster'],df['has_' + tag], ['commentary'])[0]\n", + " entry['tag'] = tag\n", " fw_log_odds.append(entry)\n", - "fw_log_odds_df = pd.DataFrame(fw_log_odds).set_index(\"tag\").sort_values(\"log_odds\")[[\"log_odds\"]]" + "fw_log_odds_df = pd.DataFrame(fw_log_odds).set_index('tag').sort_values('log_odds')[['log_odds']]" ] }, { @@ -1754,10 +1724,10 @@ } ], "source": [ - "print(\"forwards types vs labels\")\n", + "print('forwards types vs labels')\n", "display(fw_log_odds_df.T)\n", - "print(\"--------------------------\")\n", - "print(\"backwards types vs labels\")\n", + "print('--------------------------')\n", + "print('backwards types vs labels')\n", "display(bk_log_odds_df.T)" ] }, @@ -1809,17 +1779,14 @@ " s = np.sqrt(((n1 - 1) * s1 + (n2 - 1) * s2) / (n1 + n2 - 2))\n", " u1, u2 = np.mean(d1), np.mean(d2)\n", " return (u1 - u2) / s\n", - "\n", - "\n", "def get_pstars(p):\n", - " if p < 0.001:\n", - " return \"***\"\n", + " if p < 0.001:\n", + " return '***'\n", " elif p < 0.01:\n", - " return \"**\"\n", + " return '**'\n", " elif p < 0.05:\n", - " return \"*\"\n", - " else:\n", - " return \"\"" + " return '*'\n", + " else: return ''" ] }, { @@ -1830,16 +1797,17 @@ }, "outputs": [], "source": [ - "stat_col = \"orn\"\n", + "stat_col = 'orn'\n", "entries = []\n", "for tag in tag_subset:\n", - " has = df[df[\"has_\" + tag]][stat_col]\n", - " hasnt = df[~df[\"has_\" + tag]][stat_col]\n", - " entry = {\"tag\": tag, \"pval\": stats.mannwhitneyu(has, hasnt)[1], \"cd\": cohend(has, hasnt)}\n", - " entry[\"ps\"] = get_pstars(entry[\"pval\"] * len(tag_subset))\n", + " has = df[df['has_' + tag]][stat_col]\n", + " hasnt = df[~df['has_' + tag]][stat_col]\n", + " entry = {'tag': tag, 'pval': stats.mannwhitneyu(has, hasnt)[1],\n", + " 'cd': cohend(has, hasnt)}\n", + " entry['ps'] = get_pstars(entry['pval'] * len(tag_subset))\n", " entries.append(entry)\n", - "orn_stat_df = pd.DataFrame(entries).set_index(\"tag\").sort_values(\"cd\")\n", - "orn_stat_df = orn_stat_df[np.abs(orn_stat_df.cd) >= 0.1]" + "orn_stat_df = pd.DataFrame(entries).set_index('tag').sort_values('cd')\n", + "orn_stat_df = orn_stat_df[np.abs(orn_stat_df.cd) >= .1]" ] }, { @@ -1850,16 +1818,17 @@ }, "outputs": [], "source": [ - "stat_col = \"shift\"\n", + "stat_col = 'shift'\n", "entries = []\n", "for tag in tag_subset:\n", - " has = df[df[\"has_\" + tag]][stat_col]\n", - " hasnt = df[~df[\"has_\" + tag]][stat_col]\n", - " entry = {\"tag\": tag, \"pval\": stats.mannwhitneyu(has, hasnt)[1], \"cd\": cohend(has, hasnt)}\n", - " entry[\"ps\"] = get_pstars(entry[\"pval\"] * len(tag_subset))\n", + " has = df[df['has_' + tag]][stat_col]\n", + " hasnt = df[~df['has_' + tag]][stat_col]\n", + " entry = {'tag': tag, 'pval': stats.mannwhitneyu(has, hasnt)[1],\n", + " 'cd': cohend(has, hasnt)}\n", + " entry['ps'] = get_pstars(entry['pval'] * len(tag_subset))\n", " entries.append(entry)\n", - "shift_stat_df = pd.DataFrame(entries).set_index(\"tag\").sort_values(\"cd\")\n", - "shift_stat_df = shift_stat_df[np.abs(shift_stat_df.cd) >= 0.1]" + "shift_stat_df = pd.DataFrame(entries).set_index('tag').sort_values('cd')\n", + "shift_stat_df = shift_stat_df[np.abs(shift_stat_df.cd) >= .1]" ] }, { @@ -2030,10 +1999,10 @@ } ], "source": [ - "print(\"orientation vs labels\")\n", + "print('orientation vs labels')\n", "display(orn_stat_df.T)\n", - "print(\"--------------------------\")\n", - "print(\"shift vs labels\")\n", + "print('--------------------------')\n", + "print('shift vs labels')\n", "display(shift_stat_df.T)" ] }, @@ -2075,7 +2044,7 @@ }, "outputs": [], "source": [ - "FW_MODEL_PATH = os.path.join(SW_CORPUS_PATH, \"fw\")" + "FW_MODEL_PATH = os.path.join(SW_CORPUS_PATH, 'fw')" ] }, { @@ -2133,16 +2102,9 @@ }, "outputs": [], "source": [ - "ec_fw_new = ExpectedContextModelTransformer(\n", - " \"next_id\",\n", - " \"fw_new\",\n", - " \"col_normed_tfidf\",\n", - " \"col_normed_tfidf\",\n", - " n_svd_dims=15,\n", - " n_clusters=2,\n", - " random_state=1000,\n", - " cluster_random_state=1000,\n", - ")" + "ec_fw_new = ExpectedContextModelTransformer('next_id', 'fw_new', 'col_normed_tfidf', 'col_normed_tfidf', \n", + " n_svd_dims=15, n_clusters=2,\n", + " random_state=1000, cluster_random_state=1000)" ] }, { @@ -2171,9 +2133,7 @@ }, "outputs": [], "source": [ - "_ = ec_fw_new.transform(\n", - " sw_corpus, selector=lambda x: x.meta.get(\"col_normed_tfidf__n_feats\", 0) >= 5\n", - ")" + "_ = ec_fw_new.transform(sw_corpus, selector=lambda x: x.meta.get('col_normed_tfidf__n_feats',0)>=5)" ] }, { @@ -2193,7 +2153,7 @@ } ], "source": [ - "np.allclose(sw_corpus.get_vectors(\"fw_repr\"), sw_corpus.get_vectors(\"fw_new_repr\"))" + "np.allclose(sw_corpus.get_vectors('fw_repr'), sw_corpus.get_vectors('fw_new_repr'))" ] }, { @@ -2238,7 +2198,7 @@ "source": [ "# see `demo_text_pipelines.py` in this demo's directory for details\n", "# in short, this pipeline will either output the `alpha_text` metadata field\n", - "# of an utterance, or write the utterance's `text` attribute into the `alpha_text`\n", + "# of an utterance, or write the utterance's `text` attribute into the `alpha_text` \n", "# metadata field\n", "from demo_text_pipelines import switchboard_text_pipeline" ] @@ -2264,19 +2224,13 @@ }, "outputs": [], "source": [ - "fw_pipe = ExpectedContextModelPipeline(\n", - " context_field=\"next_id\",\n", - " output_prefix=\"fw\",\n", - " text_field=\"alpha_text\",\n", - " text_pipe=switchboard_text_pipeline(),\n", - " tfidf_params={\"binary\": True, \"vocabulary\": vocab},\n", - " min_terms=5,\n", - " n_svd_dims=15,\n", - " n_clusters=2,\n", - " cluster_on=\"utts\",\n", - " random_state=1000,\n", - " cluster_random_state=1000,\n", - ")" + "fw_pipe = ExpectedContextModelPipeline(context_field='next_id', output_prefix='fw',\n", + " text_field='alpha_text',\n", + " text_pipe=switchboard_text_pipeline(), \n", + " tfidf_params={'binary': True, 'vocabulary': vocab}, \n", + " min_terms=5,\n", + " n_svd_dims=15, n_clusters=2, cluster_on='utts',\n", + " random_state=1000, cluster_random_state=1000)" ] }, { @@ -2307,20 +2261,14 @@ }, "outputs": [], "source": [ - "bk_pipe = ExpectedContextModelPipeline(\n", - " context_field=\"reply_to\",\n", - " output_prefix=\"bk\",\n", - " text_field=\"alpha_text\",\n", - " text_pipe=switchboard_text_pipeline(),\n", - " tfidf_params={\"binary\": True, \"vocabulary\": vocab},\n", - " min_terms=5,\n", - " ec_model=fw_pipe,\n", - " n_svd_dims=15,\n", - " n_clusters=2,\n", - " cluster_on=\"utts\",\n", - " random_state=1000,\n", - " cluster_random_state=1000,\n", - ")" + "bk_pipe = ExpectedContextModelPipeline(context_field='reply_to', output_prefix='bk',\n", + " text_field='alpha_text',\n", + " text_pipe=switchboard_text_pipeline(), \n", + " tfidf_params={'binary': True, 'vocabulary': vocab}, \n", + " min_terms=5,\n", + " ec_model=fw_pipe,\n", + " n_svd_dims=15, n_clusters=2, cluster_on='utts',\n", + " random_state=1000, cluster_random_state=1000)" ] }, { @@ -2349,8 +2297,8 @@ }, "outputs": [], "source": [ - "fw_pipe.set_cluster_names([\"commentary\", \"personal\"])\n", - "bk_pipe.set_cluster_names([\"personal\", \"commentary\"])" + "fw_pipe.set_cluster_names(['commentary','personal'])\n", + "bk_pipe.set_cluster_names(['personal', 'commentary'])" ] }, { @@ -2368,7 +2316,7 @@ }, "outputs": [], "source": [ - "eg_ut_new = fw_pipe.transform_utterance(\"How old were you when you left ?\")\n", + "eg_ut_new = fw_pipe.transform_utterance('How old were you when you left ?')\n", "eg_ut_new = bk_pipe.transform_utterance(eg_ut_new)" ] }, @@ -2409,7 +2357,7 @@ } ], "source": [ - "eg_ut_new.meta[\"fw_repr\"]" + "eg_ut_new.meta['fw_repr']" ] }, { @@ -2430,10 +2378,10 @@ ], "source": [ "# note these attributes have the exact same values as those of eg_ut, computed above\n", - "print(\"Forwards range:\", eg_ut_new.meta[\"fw_range\"])\n", - "print(\"Backwards range:\", eg_ut_new.meta[\"bk_range\"])\n", - "print(\"Forwards cluster:\", eg_ut_new.meta[\"fw_clustering.cluster\"])\n", - "print(\"Backwards cluster:\", eg_ut_new.meta[\"bk_clustering.cluster\"])" + "print('Forwards range:', eg_ut_new.meta['fw_range'])\n", + "print('Backwards range:', eg_ut_new.meta['bk_range'])\n", + "print('Forwards cluster:', eg_ut_new.meta['fw_clustering.cluster'])\n", + "print('Backwards cluster:', eg_ut_new.meta['bk_clustering.cluster'])" ] } ], diff --git a/convokit/expected_context_framework/demos/switchboard_exploration_dual_demo.ipynb b/convokit/expected_context_framework/demos/switchboard_exploration_dual_demo.ipynb index cd7da4c2..7e7ed112 100644 --- a/convokit/expected_context_framework/demos/switchboard_exploration_dual_demo.ipynb +++ b/convokit/expected_context_framework/demos/switchboard_exploration_dual_demo.ipynb @@ -23,8 +23,7 @@ "outputs": [], "source": [ "import warnings\n", - "\n", - "warnings.filterwarnings(\"ignore\")" + "warnings.filterwarnings('ignore')" ] }, { @@ -81,7 +80,7 @@ }, "outputs": [], "source": [ - "# OPTION 1: DOWNLOAD CORPUS\n", + "# OPTION 1: DOWNLOAD CORPUS \n", "# UNCOMMENT THESE LINES TO DOWNLOAD CORPUS\n", "# DATA_DIR = ''\n", "# SW_CORPUS_PATH = download('switchboard-processed-corpus', data_dir=DATA_DIR)\n", @@ -129,7 +128,7 @@ }, "outputs": [], "source": [ - "utt_eg_id = \"3496-79\"" + "utt_eg_id = '3496-79'" ] }, { @@ -156,7 +155,7 @@ } ], "source": [ - "sw_corpus.get_utterance(utt_eg_id).meta[\"alpha_text\"]" + "sw_corpus.get_utterance(utt_eg_id).meta['alpha_text']" ] }, { @@ -196,19 +195,19 @@ "source": [ "topic_counts = defaultdict(set)\n", "for ut in sw_corpus.iter_utterances():\n", - " topic = sw_corpus.get_conversation(ut.conversation_id).meta[\"topic\"]\n", - " for x in set(ut.meta[\"alpha_text\"].lower().split()):\n", + " topic = sw_corpus.get_conversation(ut.conversation_id).meta['topic']\n", + " for x in set(ut.meta['alpha_text'].lower().split()):\n", " topic_counts[x].add(topic)\n", "topic_counts = {x: len(y) for x, y in topic_counts.items()}\n", "\n", "word_convo_counts = defaultdict(set)\n", "for ut in sw_corpus.iter_utterances():\n", - " for x in set(ut.meta[\"alpha_text\"].lower().split()):\n", + " for x in set(ut.meta['alpha_text'].lower().split()):\n", " word_convo_counts[x].add(ut.conversation_id)\n", - "word_convo_counts = {x: len(y) for x, y in word_convo_counts.items()}\n", + "word_convo_counts = {x: len(y) for x, y in word_convo_counts.items()}\n", "\n", - "min_topic_words = set(x for x, y in topic_counts.items() if y >= 33)\n", - "min_convo_words = set(x for x, y in word_convo_counts.items() if y >= 200)\n", + "min_topic_words = set(x for x,y in topic_counts.items() if y >= 33)\n", + "min_convo_words = set(x for x,y in word_convo_counts.items() if y >= 200)\n", "vocab = sorted(min_topic_words.intersection(min_convo_words))" ] }, @@ -269,9 +268,7 @@ }, "outputs": [], "source": [ - "tfidf_obj = ColNormedTfidfTransformer(\n", - " input_field=\"alpha_text\", output_field=\"col_normed_tfidf\", binary=True, vocabulary=vocab\n", - ")\n", + "tfidf_obj = ColNormedTfidfTransformer(input_field='alpha_text', output_field='col_normed_tfidf', binary=True, vocabulary=vocab)\n", "_ = tfidf_obj.fit(sw_corpus)\n", "_ = tfidf_obj.transform(sw_corpus)" ] @@ -299,16 +296,10 @@ }, "outputs": [], "source": [ - "dual_context_model = DualContextWrapper(\n", - " context_fields=[\"reply_to\", \"next_id\"],\n", - " output_prefixes=[\"bk\", \"fw\"],\n", - " vect_field=\"col_normed_tfidf\",\n", - " context_vect_field=\"col_normed_tfidf\",\n", - " n_svd_dims=15,\n", - " n_clusters=2,\n", - " random_state=1000,\n", - " cluster_random_state=1000,\n", - ")" + "dual_context_model = DualContextWrapper(context_fields=['reply_to','next_id'], output_prefixes=['bk','fw'],\n", + " vect_field='col_normed_tfidf', context_vect_field='col_normed_tfidf', \n", + " n_svd_dims=15, n_clusters=2,\n", + " random_state=1000, cluster_random_state=1000)" ] }, { @@ -326,11 +317,8 @@ }, "outputs": [], "source": [ - "dual_context_model.fit(\n", - " sw_corpus,\n", - " selector=lambda x: x.meta.get(\"col_normed_tfidf__n_feats\", 0) >= 5,\n", - " context_selector=lambda x: x.meta.get(\"col_normed_tfidf__n_feats\", 0) >= 5,\n", - ")" + "dual_context_model.fit(sw_corpus,selector=lambda x: x.meta.get('col_normed_tfidf__n_feats',0)>=5, \n", + " context_selector=lambda x: x.meta.get('col_normed_tfidf__n_feats',0)>= 5)" ] }, { @@ -637,8 +625,8 @@ }, "outputs": [], "source": [ - "dual_context_model.ec_models[0].set_cluster_names([\"personal\", \"commentary\"])\n", - "dual_context_model.ec_models[1].set_cluster_names([\"commentary\", \"personal\"])" + "dual_context_model.ec_models[0].set_cluster_names(['personal', 'commentary'])\n", + "dual_context_model.ec_models[1].set_cluster_names(['commentary', 'personal'])" ] }, { @@ -1171,15 +1159,15 @@ } ], "source": [ - "k = 10\n", - "print(\"low orientation\")\n", - "display(term_df.sort_values(\"orn\").head(k)[[\"orn\"]])\n", - "print(\"high orientation\")\n", - "display(term_df.sort_values(\"orn\").tail(k)[[\"orn\"]])\n", - "print(\"\\nlow shift\")\n", - "display(term_df.sort_values(\"shift\").head(k)[[\"shift\"]])\n", - "print(\"high shift\")\n", - "display(term_df.sort_values(\"shift\").tail(k)[[\"shift\"]])" + "k=10\n", + "print('low orientation')\n", + "display(term_df.sort_values('orn').head(k)[['orn']])\n", + "print('high orientation')\n", + "display(term_df.sort_values('orn').tail(k)[['orn']])\n", + "print('\\nlow shift')\n", + "display(term_df.sort_values('shift').head(k)[['shift']])\n", + "print('high shift')\n", + "display(term_df.sort_values('shift').tail(k)[['shift']])" ] }, { @@ -1208,9 +1196,7 @@ }, "outputs": [], "source": [ - "_ = dual_context_model.transform(\n", - " sw_corpus, selector=lambda x: x.meta.get(\"col_normed_tfidf__n_feats\", 0) >= 5\n", - ")" + "_ = dual_context_model.transform(sw_corpus, selector=lambda x: x.meta.get('col_normed_tfidf__n_feats',0)>=5)" ] }, { @@ -1265,8 +1251,8 @@ ], "source": [ "eg_ut = sw_corpus.get_utterance(utt_eg_id)\n", - "print(\"Forwards range:\", eg_ut.meta[\"fw_range\"])\n", - "print(\"Backwards range:\", eg_ut.meta[\"bk_range\"])" + "print('Forwards range:', eg_ut.meta['fw_range'])\n", + "print('Backwards range:', eg_ut.meta['bk_range'])" ] }, { @@ -1291,8 +1277,8 @@ } ], "source": [ - "print(\"Forwards cluster:\", eg_ut.meta[\"fw_clustering.cluster\"])\n", - "print(\"Backwards cluster:\", eg_ut.meta[\"bk_clustering.cluster\"])" + "print('Forwards cluster:', eg_ut.meta['fw_clustering.cluster'])\n", + "print('Backwards cluster:', eg_ut.meta['bk_clustering.cluster'])" ] }, { @@ -1317,8 +1303,8 @@ } ], "source": [ - "print(\"shift:\", eg_ut.meta[\"shift\"])\n", - "print(\"orientation:\", eg_ut.meta[\"orn\"])" + "print('shift:', eg_ut.meta['shift'])\n", + "print('orientation:', eg_ut.meta['orn'])" ] }, { @@ -1349,10 +1335,10 @@ }, "outputs": [], "source": [ - "df = sw_corpus.get_attribute_table(\n", - " \"utterance\", [\"bk_clustering.cluster\", \"fw_clustering.cluster\", \"orn\", \"shift\", \"tags\"]\n", - ")\n", - "df = df[df[\"bk_clustering.cluster\"].notnull()]" + "df = sw_corpus.get_attribute_table('utterance',\n", + " ['bk_clustering.cluster', 'fw_clustering.cluster',\n", + " 'orn', 'shift', 'tags'])\n", + "df = df[df['bk_clustering.cluster'].notnull()]" ] }, { @@ -1370,9 +1356,9 @@ }, "outputs": [], "source": [ - "tag_subset = [\"aa\", \"b\", \"ba\", \"h\", \"ny\", \"qw\", \"qy\", \"sd\", \"sv\"]\n", + "tag_subset = ['aa', 'b', 'ba', 'h', 'ny', 'qw', 'qy', 'sd', 'sv'] \n", "for tag in tag_subset:\n", - " df[\"has_\" + tag] = df.tags.apply(lambda x: tag in x.split())" + " df['has_' + tag] = df.tags.apply(lambda x: tag in x.split())" ] }, { @@ -1401,9 +1387,7 @@ " val_false = sum((col == val) & ~bool_col)\n", " nval_true = sum((col != val) & bool_col)\n", " nval_false = sum((col != val) & ~bool_col)\n", - " log_odds_entries.append(\n", - " {\"val\": val, \"log_odds\": np.log((val_true / val_false) / (nval_true / nval_false))}\n", - " )\n", + " log_odds_entries.append({'val': val, 'log_odds': np.log((val_true/val_false)/(nval_true/nval_false))})\n", " return log_odds_entries" ] }, @@ -1417,10 +1401,10 @@ "source": [ "bk_log_odds = []\n", "for tag in tag_subset:\n", - " entry = compute_log_odds(df[\"bk_clustering.cluster\"], df[\"has_\" + tag], [\"commentary\"])[0]\n", - " entry[\"tag\"] = tag\n", + " entry = compute_log_odds(df['bk_clustering.cluster'],df['has_' + tag], ['commentary'])[0]\n", + " entry['tag'] = tag\n", " bk_log_odds.append(entry)\n", - "bk_log_odds_df = pd.DataFrame(bk_log_odds).set_index(\"tag\").sort_values(\"log_odds\")[[\"log_odds\"]]" + "bk_log_odds_df = pd.DataFrame(bk_log_odds).set_index('tag').sort_values('log_odds')[['log_odds']]" ] }, { @@ -1433,10 +1417,10 @@ "source": [ "fw_log_odds = []\n", "for tag in tag_subset:\n", - " entry = compute_log_odds(df[\"fw_clustering.cluster\"], df[\"has_\" + tag], [\"commentary\"])[0]\n", - " entry[\"tag\"] = tag\n", + " entry = compute_log_odds(df['fw_clustering.cluster'],df['has_' + tag], ['commentary'])[0]\n", + " entry['tag'] = tag\n", " fw_log_odds.append(entry)\n", - "fw_log_odds_df = pd.DataFrame(fw_log_odds).set_index(\"tag\").sort_values(\"log_odds\")[[\"log_odds\"]]" + "fw_log_odds_df = pd.DataFrame(fw_log_odds).set_index('tag').sort_values('log_odds')[['log_odds']]" ] }, { @@ -1581,10 +1565,10 @@ } ], "source": [ - "print(\"forwards types vs labels\")\n", + "print('forwards types vs labels')\n", "display(fw_log_odds_df.T)\n", - "print(\"--------------------------\")\n", - "print(\"backwards types vs labels\")\n", + "print('--------------------------')\n", + "print('backwards types vs labels')\n", "display(bk_log_odds_df.T)" ] }, @@ -1636,17 +1620,14 @@ " s = np.sqrt(((n1 - 1) * s1 + (n2 - 1) * s2) / (n1 + n2 - 2))\n", " u1, u2 = np.mean(d1), np.mean(d2)\n", " return (u1 - u2) / s\n", - "\n", - "\n", "def get_pstars(p):\n", - " if p < 0.001:\n", - " return \"***\"\n", + " if p < 0.001:\n", + " return '***'\n", " elif p < 0.01:\n", - " return \"**\"\n", + " return '**'\n", " elif p < 0.05:\n", - " return \"*\"\n", - " else:\n", - " return \"\"" + " return '*'\n", + " else: return ''" ] }, { @@ -1657,16 +1638,17 @@ }, "outputs": [], "source": [ - "stat_col = \"orn\"\n", + "stat_col = 'orn'\n", "entries = []\n", "for tag in tag_subset:\n", - " has = df[df[\"has_\" + tag]][stat_col]\n", - " hasnt = df[~df[\"has_\" + tag]][stat_col]\n", - " entry = {\"tag\": tag, \"pval\": stats.mannwhitneyu(has, hasnt)[1], \"cd\": cohend(has, hasnt)}\n", - " entry[\"ps\"] = get_pstars(entry[\"pval\"] * len(tag_subset))\n", + " has = df[df['has_' + tag]][stat_col]\n", + " hasnt = df[~df['has_' + tag]][stat_col]\n", + " entry = {'tag': tag, 'pval': stats.mannwhitneyu(has, hasnt)[1],\n", + " 'cd': cohend(has, hasnt)}\n", + " entry['ps'] = get_pstars(entry['pval'] * len(tag_subset))\n", " entries.append(entry)\n", - "orn_stat_df = pd.DataFrame(entries).set_index(\"tag\").sort_values(\"cd\")\n", - "orn_stat_df = orn_stat_df[np.abs(orn_stat_df.cd) >= 0.1]" + "orn_stat_df = pd.DataFrame(entries).set_index('tag').sort_values('cd')\n", + "orn_stat_df = orn_stat_df[np.abs(orn_stat_df.cd) >= .1]" ] }, { @@ -1677,16 +1659,17 @@ }, "outputs": [], "source": [ - "stat_col = \"shift\"\n", + "stat_col = 'shift'\n", "entries = []\n", "for tag in tag_subset:\n", - " has = df[df[\"has_\" + tag]][stat_col]\n", - " hasnt = df[~df[\"has_\" + tag]][stat_col]\n", - " entry = {\"tag\": tag, \"pval\": stats.mannwhitneyu(has, hasnt)[1], \"cd\": cohend(has, hasnt)}\n", - " entry[\"ps\"] = get_pstars(entry[\"pval\"] * len(tag_subset))\n", + " has = df[df['has_' + tag]][stat_col]\n", + " hasnt = df[~df['has_' + tag]][stat_col]\n", + " entry = {'tag': tag, 'pval': stats.mannwhitneyu(has, hasnt)[1],\n", + " 'cd': cohend(has, hasnt)}\n", + " entry['ps'] = get_pstars(entry['pval'] * len(tag_subset))\n", " entries.append(entry)\n", - "shift_stat_df = pd.DataFrame(entries).set_index(\"tag\").sort_values(\"cd\")\n", - "shift_stat_df = shift_stat_df[np.abs(shift_stat_df.cd) >= 0.1]" + "shift_stat_df = pd.DataFrame(entries).set_index('tag').sort_values('cd')\n", + "shift_stat_df = shift_stat_df[np.abs(shift_stat_df.cd) >= .1]" ] }, { @@ -1857,10 +1840,10 @@ } ], "source": [ - "print(\"orientation vs labels\")\n", + "print('orientation vs labels')\n", "display(orn_stat_df.T)\n", - "print(\"--------------------------\")\n", - "print(\"shift vs labels\")\n", + "print('--------------------------')\n", + "print('shift vs labels')\n", "display(shift_stat_df.T)" ] }, @@ -1906,7 +1889,7 @@ }, "outputs": [], "source": [ - "DUAL_MODEL_PATH = os.path.join(SW_CORPUS_PATH, \"dual_model\")" + "DUAL_MODEL_PATH = os.path.join(SW_CORPUS_PATH, 'dual_model')" ] }, { @@ -1959,17 +1942,11 @@ }, "outputs": [], "source": [ - "dual_model_new = DualContextWrapper(\n", - " context_fields=[\"reply_to\", \"next_id\"],\n", - " output_prefixes=[\"bk_new\", \"fw_new\"],\n", - " vect_field=\"col_normed_tfidf\",\n", - " context_vect_field=\"col_normed_tfidf\",\n", - " wrapper_output_prefix=\"new\",\n", - " n_svd_dims=15,\n", - " n_clusters=2,\n", - " random_state=1000,\n", - " cluster_random_state=1000,\n", - ")" + "dual_model_new = DualContextWrapper(context_fields=['reply_to','next_id'], output_prefixes=['bk_new','fw_new'],\n", + " vect_field='col_normed_tfidf', context_vect_field='col_normed_tfidf', \n", + " wrapper_output_prefix='new',\n", + " n_svd_dims=15, n_clusters=2,\n", + " random_state=1000, cluster_random_state=1000)" ] }, { @@ -1980,7 +1957,7 @@ }, "outputs": [], "source": [ - "dual_model_new.load(DUAL_MODEL_PATH, model_dirs=[\"bk\", \"fw\"])" + "dual_model_new.load(DUAL_MODEL_PATH, model_dirs=['bk','fw'])" ] }, { @@ -1998,9 +1975,7 @@ }, "outputs": [], "source": [ - "_ = dual_model_new.transform(\n", - " sw_corpus, selector=lambda x: x.meta.get(\"col_normed_tfidf__n_feats\", 0) >= 5\n", - ")" + "_ = dual_model_new.transform(sw_corpus, selector=lambda x: x.meta.get('col_normed_tfidf__n_feats',0)>=5)" ] }, { @@ -2040,7 +2015,7 @@ } ], "source": [ - "np.allclose(sw_corpus.get_vectors(\"bk_new_repr\"), sw_corpus.get_vectors(\"bk_repr\"))" + "np.allclose(sw_corpus.get_vectors('bk_new_repr'), sw_corpus.get_vectors('bk_repr'))" ] }, { @@ -2060,7 +2035,7 @@ } ], "source": [ - "np.allclose(sw_corpus.get_vectors(\"fw_new_repr\"), sw_corpus.get_vectors(\"fw_repr\"))" + "np.allclose(sw_corpus.get_vectors('fw_new_repr'), sw_corpus.get_vectors('fw_repr'))" ] }, { @@ -2071,11 +2046,9 @@ }, "outputs": [], "source": [ - "for ut in sw_corpus.iter_utterances(\n", - " selector=lambda x: x.meta.get(\"col_normed_tfidf__n_feats\", 0) >= 5\n", - "):\n", - " assert ut.meta[\"orn\"] == ut.meta[\"new_orn\"]\n", - " assert ut.meta[\"shift\"] == ut.meta[\"new_shift\"]" + "for ut in sw_corpus.iter_utterances(selector=lambda x: x.meta.get('col_normed_tfidf__n_feats',0)>=5):\n", + " assert ut.meta['orn'] == ut.meta['new_orn']\n", + " assert ut.meta['shift'] == ut.meta['new_shift']" ] }, { @@ -2120,7 +2093,7 @@ "source": [ "# see `demo_text_pipelines.py` in this demo's directory for details\n", "# in short, this pipeline will either output the `alpha_text` metadata field\n", - "# of an utterance, or write the utterance's `text` attribute into the `alpha_text`\n", + "# of an utterance, or write the utterance's `text` attribute into the `alpha_text` \n", "# metadata field\n", "from demo_text_pipelines import switchboard_text_pipeline" ] @@ -2146,18 +2119,13 @@ }, "outputs": [], "source": [ - "pipe_obj = DualContextPipeline(\n", - " context_fields=[\"reply_to\", \"next_id\"],\n", - " output_prefixes=[\"bk\", \"fw\"],\n", - " text_field=\"alpha_text\",\n", - " text_pipe=switchboard_text_pipeline(),\n", - " tfidf_params={\"binary\": True, \"vocabulary\": vocab},\n", - " min_terms=5,\n", - " n_svd_dims=15,\n", - " n_clusters=2,\n", - " random_state=1000,\n", - " cluster_random_state=1000,\n", - ")" + "pipe_obj = DualContextPipeline(context_fields=['reply_to','next_id'], \n", + " output_prefixes=['bk','fw'],\n", + " text_field='alpha_text', text_pipe=switchboard_text_pipeline(), \n", + " tfidf_params={'binary': True, 'vocabulary': vocab}, \n", + " min_terms=5,\n", + " n_svd_dims=15, n_clusters=2,\n", + " random_state=1000, cluster_random_state=1000)" ] }, { @@ -2194,7 +2162,7 @@ }, "outputs": [], "source": [ - "eg_ut_new = pipe_obj.transform_utterance(\"How old were you when you left ?\")" + "eg_ut_new = pipe_obj.transform_utterance('How old were you when you left ?')" ] }, { @@ -2215,8 +2183,8 @@ ], "source": [ "# note these attributes have the exact same values as those of eg_ut, computed above\n", - "print(\"shift:\", eg_ut_new.meta[\"shift\"])\n", - "print(\"orientation:\", eg_ut_new.meta[\"orn\"])" + "print('shift:', eg_ut_new.meta['shift'])\n", + "print('orientation:', eg_ut_new.meta['orn'])" ] }, { diff --git a/convokit/expected_context_framework/demos/wiki_awry_demo.ipynb b/convokit/expected_context_framework/demos/wiki_awry_demo.ipynb index e0ffecb1..1f06b867 100644 --- a/convokit/expected_context_framework/demos/wiki_awry_demo.ipynb +++ b/convokit/expected_context_framework/demos/wiki_awry_demo.ipynb @@ -32,8 +32,7 @@ "outputs": [], "source": [ "import warnings\n", - "\n", - "warnings.filterwarnings(\"ignore\")" + "warnings.filterwarnings('ignore')" ] }, { @@ -86,7 +85,7 @@ }, "outputs": [], "source": [ - "# OPTION 1: DOWNLOAD CORPUS\n", + "# OPTION 1: DOWNLOAD CORPUS \n", "# UNCOMMENT THESE LINES TO DOWNLOAD CORPUS\n", "# DATA_DIR = ''\n", "# WIKI_CORPUS_PATH = download('wiki-corpus', data_dir=DATA_DIR)\n", @@ -141,7 +140,7 @@ }, "outputs": [], "source": [ - "wiki_corpus.load_info(\"utterance\", [\"arcs_censored\"])" + "wiki_corpus.load_info('utterance',['arcs_censored'])" ] }, { @@ -160,10 +159,8 @@ "outputs": [], "source": [ "from convokit.text_processing import TextProcessor\n", - "\n", - "join_arcs = TextProcessor(\n", - " input_field=\"arcs_censored\", output_field=\"arcs\", proc_fn=lambda sents: \"\\n\".join(sents)\n", - ")\n", + "join_arcs = TextProcessor(input_field='arcs_censored', output_field='arcs',\n", + " proc_fn=lambda sents: '\\n'.join(sents))\n", "wiki_corpus = join_arcs.transform(wiki_corpus)" ] }, @@ -183,7 +180,7 @@ "outputs": [], "source": [ "for ut in wiki_corpus.iter_utterances(selector=lambda x: x.reply_to is not None):\n", - " wiki_corpus.get_utterance(ut.reply_to).meta[\"next_id\"] = ut.id" + " wiki_corpus.get_utterance(ut.reply_to).meta['next_id'] = ut.id" ] }, { @@ -210,10 +207,7 @@ }, "outputs": [], "source": [ - "from convokit.expected_context_framework import (\n", - " ColNormedTfidfTransformer,\n", - " ExpectedContextModelTransformer,\n", - ")" + "from convokit.expected_context_framework import ColNormedTfidfTransformer, ExpectedContextModelTransformer" ] }, { @@ -235,15 +229,11 @@ }, "outputs": [], "source": [ - "first_tfidf_obj = ColNormedTfidfTransformer(\n", - " input_field=\"arcs\", output_field=\"first_tfidf\", binary=True, min_df=50\n", - ")\n", - "_ = first_tfidf_obj.fit(wiki_corpus, selector=lambda x: x.meta.get(\"next_id\", None) is not None)\n", + "first_tfidf_obj = ColNormedTfidfTransformer(input_field='arcs', output_field='first_tfidf', binary=True, min_df=50)\n", + "_ = first_tfidf_obj.fit(wiki_corpus, selector=lambda x: x.meta.get('next_id',None) is not None)\n", "_ = first_tfidf_obj.transform(wiki_corpus)\n", "\n", - "second_tfidf_obj = ColNormedTfidfTransformer(\n", - " input_field=\"arcs\", output_field=\"second_tfidf\", binary=True, min_df=50\n", - ")\n", + "second_tfidf_obj = ColNormedTfidfTransformer(input_field='arcs', output_field='second_tfidf', binary=True, min_df=50)\n", "_ = second_tfidf_obj.fit(wiki_corpus, selector=lambda x: x.reply_to is not None)\n", "_ = second_tfidf_obj.transform(wiki_corpus)" ] @@ -268,16 +258,10 @@ "outputs": [], "source": [ "ec_fw = ExpectedContextModelTransformer(\n", - " context_field=\"next_id\",\n", - " output_prefix=\"fw\",\n", - " vect_field=\"first_tfidf\",\n", - " context_vect_field=\"second_tfidf\",\n", - " n_svd_dims=25,\n", - " n_clusters=6,\n", - " cluster_on=\"terms\",\n", - " random_state=1000,\n", - " cluster_random_state=1000,\n", - ")" + " context_field='next_id', output_prefix='fw', \n", + " vect_field='first_tfidf', context_vect_field='second_tfidf', \n", + " n_svd_dims=25, n_clusters=6, cluster_on='terms',\n", + " random_state=1000, cluster_random_state=1000)" ] }, { @@ -295,13 +279,10 @@ }, "outputs": [], "source": [ - "ec_fw.fit(\n", - " wiki_corpus,\n", - " selector=lambda x: (x.meta.get(\"first_tfidf__n_feats\", 0) >= 1)\n", - " and (x.meta.get(\"next_id\", None) is not None),\n", - " context_selector=lambda x: (x.meta.get(\"second_tfidf__n_feats\", 0) >= 1)\n", - " and (x.reply_to is not None),\n", - ")" + "ec_fw.fit(wiki_corpus, selector=lambda x: (x.meta.get('first_tfidf__n_feats',0)>=1)\n", + " and (x.meta.get('next_id',None) is not None), \n", + " context_selector=lambda x: (x.meta.get('second_tfidf__n_feats',0)>= 1)\n", + " and (x.reply_to is not None))" ] }, { @@ -683,7 +664,7 @@ } ], "source": [ - "ec_fw.print_clusters(k=10, corpus=wiki_corpus, max_chars=200)" + "ec_fw.print_clusters(k=10,corpus=wiki_corpus,max_chars=200)" ] }, { @@ -708,9 +689,9 @@ }, "outputs": [], "source": [ - "ec_fw.set_cluster_names(\n", - " [\"casual\", \"coordination\", \"procedures\", \"contention\", \"editing\", \"moderation\"]\n", - ")" + "ec_fw.set_cluster_names(['casual', 'coordination', \n", + " 'procedures', 'contention',\n", + " 'editing', 'moderation'])" ] }, { @@ -837,7 +818,7 @@ }, "outputs": [], "source": [ - "# OPTION 1: DOWNLOAD CORPUS\n", + "# OPTION 1: DOWNLOAD CORPUS \n", "# UNCOMMENT THESE LINES TO DOWNLOAD CORPUS\n", "# DATA_DIR = ''\n", "# AWRY_CORPUS_PATH = download('conversations-gone-awry-corpus', data_dir=DATA_DIR)\n", @@ -866,9 +847,7 @@ }, "outputs": [], "source": [ - "awry_corpus = awry_corpus.filter_conversations_by(\n", - " lambda convo: convo.meta[\"annotation_year\"] == \"2018\"\n", - ")\n", + "awry_corpus = awry_corpus.filter_conversations_by(lambda convo: convo.meta['annotation_year'] == '2018')\n", "# here we filter to consider only the conversations from the original paper" ] }, @@ -906,7 +885,7 @@ }, "outputs": [], "source": [ - "awry_corpus.load_info(\"utterance\", [\"parsed\"])" + "awry_corpus.load_info('utterance',['parsed'])" ] }, { @@ -918,7 +897,6 @@ "outputs": [], "source": [ "from demo_text_pipelines import wiki_arc_pipeline\n", - "\n", "# see `demo_text_pipelines.py` in this demo's directory for details\n", "# in short, this pipeline will compute the dependency-parse arcs we use as input features,\n", "# but will skip over utterances for which these attributes already exist\n", @@ -977,15 +955,10 @@ }, "outputs": [], "source": [ - "cluster_assign_df = awry_corpus.get_attribute_table(\"utterance\", [\"fw_clustering.cluster_id_\"])\n", + "cluster_assign_df = awry_corpus.get_attribute_table('utterance',['fw_clustering.cluster_id_'])\n", "type_assignments = np.zeros((len(cluster_assign_df), 6))\n", - "type_assignments[\n", - " np.arange(len(cluster_assign_df)),\n", - " cluster_assign_df[\"fw_clustering.cluster_id_\"].values.astype(int),\n", - "] = 1\n", - "cluster_assign_df = pd.DataFrame(\n", - " columns=np.arange(6), index=cluster_assign_df.index, data=type_assignments\n", - ")\n", + "type_assignments[np.arange(len(cluster_assign_df)),cluster_assign_df['fw_clustering.cluster_id_'].values.astype(int)] = 1\n", + "cluster_assign_df = pd.DataFrame(columns=np.arange(6), index=cluster_assign_df.index, data=type_assignments)\n", "cluster_assign_df.columns = ec_fw.get_cluster_names()" ] }, @@ -1149,9 +1122,7 @@ " convo_ids.append(comment.root)\n", " timestamps.append(comment.timestamp)\n", " page_ids.append(conversation.meta[\"page_id\"])\n", - "comment_df = pd.DataFrame(\n", - " {\"conversation_id\": convo_ids, \"timestamp\": timestamps, \"page_id\": page_ids}, index=comment_ids\n", - ")\n", + "comment_df = pd.DataFrame({\"conversation_id\": convo_ids, \"timestamp\": timestamps, \"page_id\": page_ids}, index=comment_ids)\n", "\n", "# we'll do our construction using awry conversation ID's as the reference key\n", "awry_convo_ids = set()\n", @@ -1159,21 +1130,14 @@ "good_convo_map = {}\n", "page_id_map = {}\n", "for conversation in awry_corpus.iter_conversations():\n", - " if (\n", - " conversation.meta[\"conversation_has_personal_attack\"]\n", - " and conversation.id not in awry_convo_ids\n", - " ):\n", + " if conversation.meta[\"conversation_has_personal_attack\"] and conversation.id not in awry_convo_ids:\n", " awry_convo_ids.add(conversation.id)\n", " good_convo_map[conversation.id] = conversation.meta[\"pair_id\"]\n", " page_id_map[conversation.id] = conversation.meta[\"page_id\"]\n", "awry_convo_ids = list(awry_convo_ids)\n", - "pairs_df = pd.DataFrame(\n", - " {\n", - " \"bad_conversation_id\": awry_convo_ids,\n", - " \"conversation_id\": [good_convo_map[cid] for cid in awry_convo_ids],\n", - " \"page_id\": [page_id_map[cid] for cid in awry_convo_ids],\n", - " }\n", - ")\n", + "pairs_df = pd.DataFrame({\"bad_conversation_id\": awry_convo_ids,\n", + " \"conversation_id\": [good_convo_map[cid] for cid in awry_convo_ids],\n", + " \"page_id\": [page_id_map[cid] for cid in awry_convo_ids]})\n", "# finally, we will augment the pairs dataframe with the IDs of the first and second comment for both\n", "# the bad and good conversation. This will come in handy for constructing the feature matrix.\n", "first_ids = []\n", @@ -1182,22 +1146,14 @@ "second_ids_bad = []\n", "for row in pairs_df.itertuples():\n", " # \"first two\" is defined in terms of time of posting\n", - " comments_sorted = comment_df[comment_df.conversation_id == row.conversation_id].sort_values(\n", - " by=\"timestamp\"\n", - " )\n", + " comments_sorted = comment_df[comment_df.conversation_id==row.conversation_id].sort_values(by=\"timestamp\")\n", " first_ids.append(comments_sorted.iloc[0].name)\n", " second_ids.append(comments_sorted.iloc[1].name)\n", - " comments_sorted_bad = comment_df[\n", - " comment_df.conversation_id == row.bad_conversation_id\n", - " ].sort_values(by=\"timestamp\")\n", + " comments_sorted_bad = comment_df[comment_df.conversation_id==row.bad_conversation_id].sort_values(by=\"timestamp\")\n", " first_ids_bad.append(comments_sorted_bad.iloc[0].name)\n", " second_ids_bad.append(comments_sorted_bad.iloc[1].name)\n", - "pairs_df = pairs_df.assign(\n", - " first_id=first_ids,\n", - " second_id=second_ids,\n", - " bad_first_id=first_ids_bad,\n", - " bad_second_id=second_ids_bad,\n", - ")" + "pairs_df = pairs_df.assign(first_id=first_ids, second_id=second_ids, \n", + " bad_first_id=first_ids_bad, bad_second_id=second_ids_bad)" ] }, { @@ -1208,19 +1164,11 @@ }, "outputs": [], "source": [ - "tox_first_comment_features = pairs_df[[\"bad_first_id\"]].join(\n", - " cluster_assign_df, how=\"left\", on=\"bad_first_id\"\n", - ")[cluster_assign_df.columns]\n", - "ntox_first_comment_features = pairs_df[[\"first_id\"]].join(\n", - " cluster_assign_df, how=\"left\", on=\"first_id\"\n", - ")[cluster_assign_df.columns]\n", + "tox_first_comment_features =pairs_df[['bad_first_id']].join(cluster_assign_df, how='left', on='bad_first_id')[cluster_assign_df.columns]\n", + "ntox_first_comment_features =pairs_df[['first_id']].join(cluster_assign_df, how='left', on='first_id')[cluster_assign_df.columns]\n", "\n", - "tox_second_comment_features = pairs_df[[\"bad_second_id\"]].join(\n", - " cluster_assign_df, how=\"left\", on=\"bad_second_id\"\n", - ")[cluster_assign_df.columns]\n", - "ntox_second_comment_features = pairs_df[[\"second_id\"]].join(\n", - " cluster_assign_df, how=\"left\", on=\"second_id\"\n", - ")[cluster_assign_df.columns]" + "tox_second_comment_features =pairs_df[['bad_second_id']].join(cluster_assign_df, how='left', on='bad_second_id')[cluster_assign_df.columns]\n", + "ntox_second_comment_features =pairs_df[['second_id']].join(cluster_assign_df, how='left', on='second_id')[cluster_assign_df.columns]" ] }, { @@ -1259,51 +1207,36 @@ "outputs": [], "source": [ "def get_p_stars(x):\n", - " if x < 0.001:\n", - " return \"***\"\n", - " elif x < 0.01:\n", - " return \"**\"\n", - " elif x < 0.05:\n", - " return \"*\"\n", - " else:\n", - " return \"\"\n", - "\n", - "\n", - "def compare_tox(df_ntox, df_tox, min_n=0):\n", + " if x < .001: return '***'\n", + " elif x < .01: return '**'\n", + " elif x < .05: return '*'\n", + " else: return ''\n", + "def compare_tox(df_ntox, df_tox, min_n=0):\n", " cols = df_ntox.columns\n", - " num_feats_in_tox = df_tox[cols].sum().astype(int).rename(\"num_feat_tox\")\n", - " num_nfeats_in_tox = (1 - df_tox[cols]).sum().astype(int).rename(\"num_nfeat_tox\")\n", - " num_feats_in_ntox = df_ntox[cols].sum().astype(int).rename(\"num_feat_ntox\")\n", - " num_nfeats_in_ntox = (1 - df_ntox[cols]).sum().astype(int).rename(\"num_nfeat_ntox\")\n", - " prop_tox = df_tox[cols].mean().rename(\"prop_tox\")\n", - " ref_prop_ntox = df_ntox[cols].mean().rename(\"prop_ntox\")\n", + " num_feats_in_tox = df_tox[cols].sum().astype(int).rename('num_feat_tox')\n", + " num_nfeats_in_tox = (1 - df_tox[cols]).sum().astype(int).rename('num_nfeat_tox')\n", + " num_feats_in_ntox = df_ntox[cols].sum().astype(int).rename('num_feat_ntox')\n", + " num_nfeats_in_ntox = (1 - df_ntox[cols]).sum().astype(int).rename('num_nfeat_ntox')\n", + " prop_tox = df_tox[cols].mean().rename('prop_tox')\n", + " ref_prop_ntox = df_ntox[cols].mean().rename('prop_ntox')\n", " n_tox = len(df_tox)\n", - " df = pd.concat(\n", - " [\n", - " num_feats_in_tox,\n", - " num_nfeats_in_tox,\n", - " num_feats_in_ntox,\n", - " num_nfeats_in_ntox,\n", - " prop_tox,\n", - " ref_prop_ntox,\n", - " ],\n", - " axis=1,\n", - " )\n", - " df[\"num_total\"] = df.num_feat_tox + df.num_feat_ntox\n", - " df[\"log_odds\"] = (\n", - " np.log(df.num_feat_tox)\n", - " - np.log(df.num_nfeat_tox)\n", - " + np.log(df.num_nfeat_ntox)\n", - " - np.log(df.num_feat_ntox)\n", - " )\n", - " df[\"abs_log_odds\"] = np.abs(df.log_odds)\n", - " df[\"binom_p\"] = df.apply(\n", - " lambda x: stats.binom_test(x.num_feat_tox, n_tox, x.prop_ntox), axis=1\n", - " ) # *5\n", + " df = pd.concat([\n", + " num_feats_in_tox, \n", + " num_nfeats_in_tox,\n", + " num_feats_in_ntox,\n", + " num_nfeats_in_ntox,\n", + " prop_tox,\n", + " ref_prop_ntox,\n", + " ], axis=1)\n", + " df['num_total'] = df.num_feat_tox + df.num_feat_ntox\n", + " df['log_odds'] = np.log(df.num_feat_tox) - np.log(df.num_nfeat_tox) \\\n", + " + np.log(df.num_nfeat_ntox) - np.log(df.num_feat_ntox)\n", + " df['abs_log_odds'] = np.abs(df.log_odds)\n", + " df['binom_p'] = df.apply(lambda x: stats.binom_test(x.num_feat_tox, n_tox, x.prop_ntox), axis=1)#*5\n", " df = df[df.num_total >= min_n]\n", - " df[\"p\"] = df[\"binom_p\"].apply(lambda x: \"%.3f\" % x)\n", - " df[\"pstars\"] = df[\"binom_p\"].apply(get_p_stars)\n", - " return df.sort_values(\"log_odds\", ascending=False)" + " df['p'] = df['binom_p'].apply(lambda x: '%.3f' % x)\n", + " df['pstars'] = df['binom_p'].apply(get_p_stars)\n", + " return df.sort_values('log_odds', ascending=False)" ] }, { @@ -1343,7 +1276,6 @@ "outputs": [], "source": [ "from matplotlib import pyplot as plt\n", - "\n", "%matplotlib inline" ] }, @@ -1355,102 +1287,84 @@ }, "outputs": [], "source": [ - "# we are now ready to plot these comparisons. the following (rather intimidating) helper function\n", + "# we are now ready to plot these comparisons. the following (rather intimidating) helper function \n", "# produces a nicely-formatted plot:\n", - "def draw_figure(\n", - " ax, first_cmp, second_cmp, title=\"\", prompt_types=6, min_log_odds=0.2, min_freq=50, xlim=0.85\n", - "):\n", + "def draw_figure(ax, first_cmp, second_cmp, title='', prompt_types=6, min_log_odds=.2, min_freq=50,xlim=.85):\n", + "\n", " # selecting and sorting the features to plot, given minimum effect sizes and statistical significance\n", - " frequent_feats = first_cmp[first_cmp.num_total >= min_freq].index.union(\n", - " second_cmp[second_cmp.num_total >= min_freq].index\n", - " )\n", - " lrg_effect_feats = first_cmp[\n", - " (first_cmp.abs_log_odds >= 0.2) & (first_cmp.binom_p < 0.05)\n", - " ].index.union(second_cmp[(second_cmp.abs_log_odds >= 0.2) & (second_cmp.binom_p < 0.05)].index)\n", - " # feats_to_include = frequent_feats.intersection(lrg_effect_feats)\n", + " frequent_feats = first_cmp[first_cmp.num_total >= min_freq].index.union(second_cmp[second_cmp.num_total >= min_freq].index)\n", + " lrg_effect_feats = first_cmp[(first_cmp.abs_log_odds >= .2)\n", + " & (first_cmp.binom_p < .05)].index.union(second_cmp[(second_cmp.abs_log_odds >= .2)\n", + " & (second_cmp.binom_p < .05)].index)\n", + "# feats_to_include = frequent_feats.intersection(lrg_effect_feats)\n", " feats_to_include = first_cmp.index\n", " feat_order = sorted(feats_to_include, key=lambda x: first_cmp.loc[x].log_odds, reverse=True)\n", "\n", " # parameters determining the look of the figure\n", - " colors = [\"blue\", \"grey\"]\n", - " shapes = [\"^\", \"s\"]\n", - " eps = 0.02\n", - " star_eps = 0.035\n", + " colors = ['blue', 'grey']\n", + " shapes = ['^', 's'] \n", + " eps = .02\n", + " star_eps = .035\n", " xlim = xlim\n", - " min_log = 0.2\n", + " min_log = .2\n", " gap_prop = 2\n", " label_size = 14\n", - " title_size = 18\n", + " title_size=18\n", " radius = 256\n", " features = feat_order\n", " ax.invert_yaxis()\n", - " ax.plot([0, 0], [0, len(features) / gap_prop], color=\"black\")\n", - "\n", - " # for each figure we plot the point according to effect size in the first and second comment,\n", + " ax.plot([0,0], [0, len(features)/gap_prop], color='black')\n", + " \n", + " # for each figure we plot the point according to effect size in the first and second comment, \n", " # and add axis labels denoting statistical significance\n", " yticks = []\n", " yticklabels = []\n", " for f_idx, feat in enumerate(features):\n", - " curr_y = (f_idx + 0.5) / gap_prop\n", + " curr_y = (f_idx + .5)/gap_prop\n", " yticks.append(curr_y)\n", " try:\n", + " \n", " first_p = first_cmp.loc[feat].binom_p\n", - " second_p = second_cmp.loc[feat].binom_p\n", + " second_p = second_cmp.loc[feat].binom_p \n", " if first_cmp.loc[feat].abs_log_odds < min_log:\n", " first_face = \"white\"\n", " elif first_p >= 0.05:\n", - " first_face = \"white\"\n", + " first_face = 'white'\n", " else:\n", " first_face = colors[0]\n", " if second_cmp.loc[feat].abs_log_odds < min_log:\n", " second_face = \"white\"\n", " elif second_p >= 0.05:\n", - " second_face = \"white\"\n", + " second_face = 'white'\n", " else:\n", " second_face = colors[1]\n", - " ax.plot(\n", - " [-1 * xlim, xlim], [curr_y, curr_y], \"--\", color=\"grey\", zorder=0, linewidth=0.5\n", - " )\n", - "\n", - " ax.scatter(\n", - " [first_cmp.loc[feat].log_odds],\n", - " [curr_y + eps],\n", - " s=radius,\n", - " edgecolor=colors[0],\n", - " marker=shapes[0],\n", - " zorder=20,\n", - " facecolors=first_face,\n", - " )\n", - " ax.scatter(\n", - " [second_cmp.loc[feat].log_odds],\n", - " [curr_y + eps],\n", - " s=radius,\n", - " edgecolor=colors[1],\n", - " marker=shapes[1],\n", - " zorder=10,\n", - " facecolors=second_face,\n", - " )\n", - "\n", + " ax.plot([-1 * xlim, xlim], [curr_y, curr_y], '--', color='grey', zorder=0, linewidth=.5)\n", + " \n", + " ax.scatter([first_cmp.loc[feat].log_odds], [curr_y + eps], s=radius, edgecolor=colors[0], marker=shapes[0],\n", + " zorder=20, facecolors=first_face)\n", + " ax.scatter([second_cmp.loc[feat].log_odds], [curr_y + eps], s=radius, edgecolor=colors[1], marker=shapes[1], \n", + " zorder=10, facecolors=second_face)\n", + " \n", " first_pstr_len = len(get_p_stars(first_p))\n", " second_pstr_len = len(get_p_stars(second_p))\n", - " p_str = np.array([\" \"] * 8)\n", + " p_str = np.array([' '] * 8)\n", " if first_pstr_len > 0:\n", - " p_str[:first_pstr_len] = \"*\"\n", + " p_str[:first_pstr_len] = '*'\n", " if second_pstr_len > 0:\n", - " p_str[-second_pstr_len:] = \"⁺\"\n", - "\n", - " feat_str = str(feat) + \"\\n\" + \"\".join(p_str)\n", + " p_str[-second_pstr_len:] = '⁺'\n", + " \n", + " feat_str = str(feat) + '\\n' + ''.join(p_str)\n", " yticklabels.append(feat_str)\n", " except Exception as e:\n", - " yticklabels.append(\"\")\n", - "\n", + " yticklabels.append('')\n", + " \n", " # add the axis labels\n", - " ax.set_xlabel(\"log-odds ratio\", fontsize=28)\n", - " ax.set_xticks([-xlim - 0.05, -0.5, 0, 0.5, xlim])\n", - " ax.set_xticklabels([\"on-track\", -0.5, 0, 0.5, \"awry\"], fontsize=24)\n", + " ax.set_xlabel('log-odds ratio', fontsize=28)\n", + " ax.set_xticks([-xlim-.05, -.5, 0, .5, xlim])\n", + " ax.set_xticklabels(['on-track', -.5, 0, .5, 'awry'], fontsize=24)\n", " ax.set_yticks(yticks)\n", " ax.set_yticklabels(yticklabels, fontsize=32)\n", - " ax.tick_params(axis=\"both\", which=\"both\", bottom=\"off\", top=\"off\", left=\"off\")\n", + " ax.tick_params(axis='both', which='both', bottom='off', top='off',left='off')\n", " return feat_order" ] }, @@ -1471,8 +1385,8 @@ } ], "source": [ - "f, ax = plt.subplots(1, 1, figsize=(10, 10))\n", - "_ = draw_figure(ax, first_comparisons, second_comparisons, \"\")" + "f, ax = plt.subplots(1,1, figsize=(10,10))\n", + "_ = draw_figure(ax, first_comparisons, second_comparisons, '')" ] }, { @@ -1529,20 +1443,13 @@ }, "outputs": [], "source": [ - "fw_pipe = ExpectedContextModelPipeline(\n", - " context_field=\"next_id\",\n", - " output_prefix=\"fw\",\n", - " text_field=\"arcs\",\n", - " share_tfidf_models=False,\n", - " text_pipe=wiki_arc_pipeline(),\n", - " tfidf_params={\"binary\": True, \"min_df\": 50},\n", - " min_terms=1,\n", - " n_svd_dims=25,\n", - " n_clusters=6,\n", - " cluster_on=\"terms\",\n", - " random_state=1000,\n", - " cluster_random_state=1000,\n", - ")" + "fw_pipe = ExpectedContextModelPipeline(context_field='next_id', output_prefix='fw',\n", + " text_field='arcs', share_tfidf_models=False,\n", + " text_pipe=wiki_arc_pipeline(), \n", + " tfidf_params={'binary': True, 'min_df': 50}, \n", + " min_terms=1,\n", + " n_svd_dims=25, n_clusters=6, cluster_on='terms',\n", + " random_state=1000, cluster_random_state=1000)" ] }, { @@ -1553,11 +1460,9 @@ }, "outputs": [], "source": [ - "fw_pipe.fit(\n", - " wiki_corpus,\n", - " selector=lambda x: x.meta.get(\"next_id\", None) is not None,\n", - " context_selector=lambda x: x.reply_to is not None,\n", - ")" + "fw_pipe.fit(wiki_corpus,\n", + " selector=lambda x: x.meta.get('next_id',None) is not None,\n", + " context_selector=lambda x: x.reply_to is not None)" ] }, { @@ -1771,9 +1676,9 @@ }, "outputs": [], "source": [ - "fw_pipe.set_cluster_names(\n", - " [\"casual\", \"coordination\", \"procedures\", \"contention\", \"editing\", \"moderation\"]\n", - ")" + "fw_pipe.set_cluster_names(['casual', 'coordination', \n", + " 'procedures', 'contention',\n", + " 'editing', 'moderation'])" ] }, { @@ -1791,7 +1696,7 @@ }, "outputs": [], "source": [ - "new_ut = fw_pipe.transform_utterance(\"Let me help you out with that\")" + "new_ut = fw_pipe.transform_utterance('Let me help you out with that')" ] }, { @@ -1808,7 +1713,7 @@ } ], "source": [ - "print(\"type:\", new_ut.meta[\"fw_clustering.cluster\"])" + "print('type:', new_ut.meta['fw_clustering.cluster'])" ] }, { @@ -1860,7 +1765,7 @@ "source": [ "# note that different versions of SpaCy may produce different outputs, since the\n", "# dependency parses may change from version to version\n", - "new_ut.meta[\"fw_repr\"]" + "new_ut.meta['fw_repr']" ] }, { diff --git a/convokit/fighting_words/demos/fightingwords_demo.ipynb b/convokit/fighting_words/demos/fightingwords_demo.ipynb index 733f26c2..2f4b37ff 100644 --- a/convokit/fighting_words/demos/fightingwords_demo.ipynb +++ b/convokit/fighting_words/demos/fightingwords_demo.ipynb @@ -24,7 +24,7 @@ } ], "source": [ - "corpus = Corpus(filename=download(\"reddit-corpus-small\"))" + "corpus = Corpus(filename=download('reddit-corpus-small'))" ] }, { @@ -48,7 +48,7 @@ } ], "source": [ - "fw = FightingWords(ngram_range=(1, 1))" + "fw = FightingWords(ngram_range=(1,1))" ] }, { @@ -78,11 +78,8 @@ } ], "source": [ - "fw.fit(\n", - " corpus,\n", - " class1_func=lambda utt: utt.meta[\"subreddit\"] == \"Christianity\",\n", - " class2_func=lambda utt: utt.meta[\"subreddit\"] == \"atheism\",\n", - ")" + "fw.fit(corpus, class1_func=lambda utt: utt.meta['subreddit'] == 'Christianity', \n", + " class2_func=lambda utt: utt.meta['subreddit'] == \"atheism\",)" ] }, { @@ -104,7 +101,7 @@ } ], "source": [ - "df = fw.summarize(corpus, plot=True, class1_name=\"r/Christianity\", class2_name=\"r/atheism\")" + "df = fw.summarize(corpus, plot=True, class1_name='r/Christianity', class2_name='r/atheism')" ] }, { @@ -941,7 +938,7 @@ } ], "source": [ - "fw.get_zscore(\"education\")" + "fw.get_zscore('education')" ] }, { @@ -961,7 +958,7 @@ } ], "source": [ - "fw.get_zscore(\"morals\")" + "fw.get_zscore('morals')" ] }, { @@ -981,7 +978,7 @@ } ], "source": [ - "fw.transform(corpus, config={\"annot_method\": \"top_k\", \"top_k\": 10})" + "fw.transform(corpus, config={'annot_method': 'top_k', 'top_k': 10})" ] }, { @@ -1041,10 +1038,10 @@ "source": [ "for utt in corpus.iter_utterances():\n", " if utt.meta[\"subreddit\"] in [\"atheism\", \"Christianity\"]:\n", - " if len(utt.meta[\"fighting_words_class1\"]) > 0:\n", - " print(utt.meta[\"subreddit\"])\n", - " print(utt.meta[\"fighting_words_class1\"])\n", - " print(utt.meta[\"fighting_words_class2\"])\n", + " if len(utt.meta['fighting_words_class1']) > 0:\n", + " print(utt.meta['subreddit'])\n", + " print(utt.meta['fighting_words_class1'])\n", + " print(utt.meta['fighting_words_class2'])\n", " print(utt.text)\n", " break" ] diff --git a/convokit/forecaster/CRAFT/demos/craft_demo.ipynb b/convokit/forecaster/CRAFT/demos/craft_demo.ipynb index 079d9fc8..2514dd40 100644 --- a/convokit/forecaster/CRAFT/demos/craft_demo.ipynb +++ b/convokit/forecaster/CRAFT/demos/craft_demo.ipynb @@ -45,7 +45,7 @@ } ], "source": [ - "corpus = Corpus(filename=download(\"conversations-gone-awry-corpus\"))" + "corpus = Corpus(filename=download('conversations-gone-awry-corpus'))" ] }, { @@ -125,18 +125,16 @@ "metadata": {}, "outputs": [], "source": [ - "MAX_LENGTH = 80 # this constant controls the maximum number of tokens to consider; it must be set to 80 since that's what CRAFT was trained one.\n", - "forecaster = Forecaster(\n", - " forecaster_model=craft_model,\n", - " forecast_mode=\"past\",\n", - " convo_structure=\"linear\",\n", - " text_func=lambda utt: utt.meta[\"tokens\"][: (MAX_LENGTH - 1)],\n", - " label_func=lambda utt: int(utt.meta[\"comment_has_personal_attack\"]),\n", - " forecast_attribute_name=\"prediction\",\n", - " forecast_prob_attribute_name=\"pred_score\",\n", - " use_last_only=False,\n", - " skip_broken_convos=False,\n", - ")" + "MAX_LENGTH = 80 # this constant controls the maximum number of tokens to consider; it must be set to 80 since that's what CRAFT was trained one.\n", + "forecaster = Forecaster(forecaster_model = craft_model,\n", + " forecast_mode = \"past\",\n", + " convo_structure=\"linear\",\n", + " text_func = lambda utt: utt.meta[\"tokens\"][:(MAX_LENGTH-1)],\n", + " label_func = lambda utt: int(utt.meta['comment_has_personal_attack']),\n", + " forecast_attribute_name=\"prediction\", forecast_prob_attribute_name=\"pred_score\",\n", + " use_last_only = False,\n", + " skip_broken_convos=False\n", + " )" ] }, { @@ -244,11 +242,7 @@ "# comments, but rather the \"section header\" (something akin to a conversation title in Wikipedia talk pages). Since they\n", "# are not real comments, we do not want to include them in forecasting. We use the ignore_utterances parameter to\n", "# specify this behavior.\n", - "forecaster.transform(\n", - " corpus,\n", - " selector=lambda convo: convo.meta[\"split\"] in [\"test\"],\n", - " ignore_utterances=lambda utt: utt.meta[\"is_section_header\"],\n", - ")" + "forecaster.transform(corpus, selector=lambda convo: convo.meta[\"split\"] in ['test'], ignore_utterances=lambda utt: utt.meta['is_section_header'])" ] }, { @@ -282,15 +276,15 @@ "metadata": {}, "outputs": [], "source": [ - "FORECAST_THRESH = 0.570617 # Threshold learned on a validation set. Try playing with this to see how it affects the precision-recall tradeoff!\n", + "FORECAST_THRESH = 0.570617 # Threshold learned on a validation set. Try playing with this to see how it affects the precision-recall tradeoff!\n", "preds = []\n", "labels = []\n", "# Iterate at a conversation level and consolidate predictions for each conversation\n", - "for convo in corpus.iter_conversations(selector=lambda c: c.meta[\"split\"] == \"test\"):\n", - " labels.append(int(convo.meta[\"conversation_has_personal_attack\"]))\n", + "for convo in corpus.iter_conversations(selector=lambda c: c.meta['split'] == 'test'):\n", + " labels.append(int(convo.meta['conversation_has_personal_attack']))\n", " prediction = 0\n", " for utt in convo.iter_utterances():\n", - " if utt.meta[\"pred_score\"] is not None and utt.meta[\"pred_score\"] > FORECAST_THRESH:\n", + " if utt.meta['pred_score'] is not None and utt.meta['pred_score'] > FORECAST_THRESH:\n", " prediction = 1\n", " preds.append(prediction)\n", "preds = np.asarray(preds)\n", @@ -313,13 +307,9 @@ "source": [ "# Compute accuracy, precision, recall, F1, and false positive rate\n", "acc = np.mean(preds == labels)\n", - "precision, recall, f1, _ = precision_recall_fscore_support(preds, labels, average=\"binary\")\n", - "fpr = np.mean(preds[labels == 0])\n", - "print(\n", - " \"Accuracy = {:.2%}, Precision = {:.2%}, Recall = {:.2%}, FPR = {:.2%}, F1 = {:.2%}\".format(\n", - " acc, precision, recall, fpr, f1\n", - " )\n", - ")" + "precision, recall, f1, _ = precision_recall_fscore_support(preds, labels, average='binary')\n", + "fpr = np.mean(preds[labels==0])\n", + "print(\"Accuracy = {:.2%}, Precision = {:.2%}, Recall = {:.2%}, FPR = {:.2%}, F1 = {:.2%}\".format(acc, precision, recall, fpr, f1))" ] }, { @@ -336,24 +326,20 @@ "metadata": {}, "outputs": [], "source": [ - "comments_until_derail = (\n", - " {}\n", - ") # store the \"number of comments until derailment\" metric for each conversation\n", + "comments_until_derail = {} # store the \"number of comments until derailment\" metric for each conversation\n", "\n", - "for convo in corpus.iter_conversations(\n", - " selector=lambda c: c.meta[\"split\"] == \"test\" and c.meta[\"conversation_has_personal_attack\"]\n", - "):\n", + "for convo in corpus.iter_conversations(selector=lambda c: c.meta['split'] == 'test' and c.meta['conversation_has_personal_attack']):\n", " # filter out the section header as usual\n", - " utts = [utt for utt in convo.iter_utterances() if not utt.meta[\"is_section_header\"]]\n", + " utts = [utt for utt in convo.iter_utterances() if not utt.meta['is_section_header']]\n", " # by construction, the last comment is the one with the personal attack\n", " derail_idx = len(utts) - 1\n", " # now scan the utterances in order until we find the first derailment prediction (if any)\n", " for idx in range(1, len(utts)):\n", - " if utts[idx].meta[\"pred_score\"] > FORECAST_THRESH:\n", + " if utts[idx].meta['pred_score'] > FORECAST_THRESH:\n", " # recall that the forecast_score meta field specifies what CRAFT thought this comment would look like BEFORE it\n", - " # saw this comment. So the actual CRAFT forecast is made during the previous comment; we account for this by\n", + " # saw this comment. So the actual CRAFT forecast is made during the previous comment; we account for this by \n", " # subtracting 1 from idx\n", - " comments_until_derail[convo.id] = derail_idx - (idx - 1)\n", + " comments_until_derail[convo.id] = derail_idx - (idx-1)\n", " break" ] }, @@ -378,14 +364,12 @@ "source": [ "# visualize the distribution of \"number of comments until derailment\" as a histogram (reproducing Figure 4 from the paper)\n", "comments_until_derail_vals = np.asarray(list(comments_until_derail.values()))\n", - "plt.rcParams[\"figure.figsize\"] = (10.0, 5.0)\n", - "plt.rcParams[\"font.size\"] = 24\n", - "plt.hist(\n", - " comments_until_derail_vals, bins=range(1, np.max(comments_until_derail_vals)), density=True\n", - ")\n", - "plt.xlim(1, 10)\n", - "plt.xticks(np.arange(1, 10) + 0.5, np.arange(1, 10))\n", - "plt.yticks(np.arange(0, 0.25, 0.05), np.arange(0, 25, 5))\n", + "plt.rcParams['figure.figsize'] = (10.0, 5.0)\n", + "plt.rcParams['font.size'] = 24\n", + "plt.hist(comments_until_derail_vals, bins=range(1, np.max(comments_until_derail_vals)), density=True)\n", + "plt.xlim(1,10)\n", + "plt.xticks(np.arange(1,10)+0.5, np.arange(1,10))\n", + "plt.yticks(np.arange(0,0.25,0.05), np.arange(0,25,5))\n", "plt.xlabel(\"Number of comments elapsed\")\n", "plt.ylabel(\"% of conversations\")\n", "plt.show()" diff --git a/convokit/forecaster/CRAFT/demos/craft_demo_new.ipynb b/convokit/forecaster/CRAFT/demos/craft_demo_new.ipynb index 43a7bfcf..2f86af97 100644 --- a/convokit/forecaster/CRAFT/demos/craft_demo_new.ipynb +++ b/convokit/forecaster/CRAFT/demos/craft_demo_new.ipynb @@ -84,17 +84,15 @@ "metadata": {}, "outputs": [], "source": [ - "forecaster = Forecaster(\n", - " forecaster_model=craft_model,\n", - " forecast_mode=\"future\",\n", - " convo_structure=\"linear\",\n", - " text_func=lambda utt: utt.meta[\"tokens\"][: (MAX_LENGTH - 1)],\n", - " label_func=lambda utt: int(utt.meta[\"comment_has_personal_attack\"]),\n", - " forecast_attribute_name=\"prediction\",\n", - " forecast_prob_attribute_name=\"pred_score\",\n", - " use_last_only=True,\n", - " skip_broken_convos=False,\n", - ")" + "forecaster = Forecaster(forecaster_model = craft_model,\n", + " forecast_mode = \"future\",\n", + " convo_structure=\"linear\",\n", + " text_func = lambda utt: utt.meta[\"tokens\"][:(MAX_LENGTH-1)],\n", + " label_func = lambda utt: int(utt.meta['comment_has_personal_attack']),\n", + " forecast_attribute_name=\"prediction\", forecast_prob_attribute_name=\"pred_score\",\n", + " use_last_only = True,\n", + " skip_broken_convos=False\n", + " )" ] }, { @@ -210,11 +208,8 @@ } ], "source": [ - "forecaster.transform(\n", - " corpus,\n", - " selector=lambda convo: convo.meta[\"split\"] == \"train\",\n", - " ignore_utterances=lambda utt: utt.meta[\"is_section_header\"],\n", - ")" + "forecaster.transform(corpus, selector=lambda convo: convo.meta[\"split\"] == \"train\",\n", + " ignore_utterances=lambda utt: utt.meta[\"is_section_header\"])" ] }, { diff --git a/convokit/forecaster/CRAFT/demos/craft_demo_original.ipynb b/convokit/forecaster/CRAFT/demos/craft_demo_original.ipynb index cbe588db..85a91c26 100644 --- a/convokit/forecaster/CRAFT/demos/craft_demo_original.ipynb +++ b/convokit/forecaster/CRAFT/demos/craft_demo_original.ipynb @@ -40,7 +40,6 @@ "import itertools\n", "from urllib.request import urlretrieve\n", "from convokit import download, Corpus\n", - "\n", "%matplotlib inline" ] }, @@ -116,20 +115,14 @@ "\n", " def __init__(self, name, word2index=None, index2word=None):\n", " self.name = name\n", - " self.trimmed = (\n", - " False if not word2index else True\n", - " ) # if a precomputed vocab is specified assume the user wants to use it as-is\n", + " self.trimmed = False if not word2index else True # if a precomputed vocab is specified assume the user wants to use it as-is\n", " self.word2index = word2index if word2index else {\"UNK\": UNK_token}\n", " self.word2count = {}\n", - " self.index2word = (\n", - " index2word\n", - " if index2word\n", - " else {PAD_token: \"PAD\", SOS_token: \"SOS\", EOS_token: \"EOS\", UNK_token: \"UNK\"}\n", - " )\n", + " self.index2word = index2word if index2word else {PAD_token: \"PAD\", SOS_token: \"SOS\", EOS_token: \"EOS\", UNK_token: \"UNK\"}\n", " self.num_words = 4 if not index2word else len(index2word) # Count SOS, EOS, PAD, UNK\n", "\n", " def addSentence(self, sentence):\n", - " for word in sentence.split(\" \"):\n", + " for word in sentence.split(' '):\n", " self.addWord(word)\n", "\n", " def addWord(self, word):\n", @@ -153,22 +146,19 @@ " if v >= min_count:\n", " keep_words.append(k)\n", "\n", - " print(\n", - " \"keep_words {} / {} = {:.4f}\".format(\n", - " len(keep_words), len(self.word2index), len(keep_words) / len(self.word2index)\n", - " )\n", - " )\n", + " print('keep_words {} / {} = {:.4f}'.format(\n", + " len(keep_words), len(self.word2index), len(keep_words) / len(self.word2index)\n", + " ))\n", "\n", " # Reinitialize dictionaries\n", " self.word2index = {\"UNK\": UNK_token}\n", " self.word2count = {}\n", " self.index2word = {PAD_token: \"PAD\", SOS_token: \"SOS\", EOS_token: \"EOS\", UNK_token: \"UNK\"}\n", - " self.num_words = 4 # Count default tokens\n", + " self.num_words = 4 # Count default tokens\n", "\n", " for word in keep_words:\n", " self.addWord(word)\n", "\n", - "\n", "# Create a Voc object from precomputed data structures\n", "def loadPrecomputedVoc(corpus_name, word2index_url, index2word_url):\n", " # load the word-to-index lookup map\n", @@ -192,26 +182,26 @@ "source": [ "# Helper functions for preprocessing and tokenizing text\n", "\n", - "\n", "# Turn a Unicode string to plain ASCII, thanks to\n", "# https://stackoverflow.com/a/518232/2809427\n", "def unicodeToAscii(s):\n", - " return \"\".join(c for c in unicodedata.normalize(\"NFD\", s) if unicodedata.category(c) != \"Mn\")\n", - "\n", + " return ''.join(\n", + " c for c in unicodedata.normalize('NFD', s)\n", + " if unicodedata.category(c) != 'Mn'\n", + " )\n", "\n", "# Tokenize the string using NLTK\n", "def tokenize(text):\n", - " tokenizer = nltk.tokenize.RegexpTokenizer(pattern=r\"\\w+|[^\\w\\s]\")\n", + " tokenizer = nltk.tokenize.RegexpTokenizer(pattern=r'\\w+|[^\\w\\s]')\n", " # simplify the problem space by considering only ASCII data\n", " cleaned_text = unicodeToAscii(text.lower())\n", "\n", " # if the resulting string is empty, nothing else to do\n", " if not cleaned_text.strip():\n", " return []\n", - "\n", + " \n", " return tokenizer.tokenize(cleaned_text)\n", "\n", - "\n", "# Given a ConvoKit conversation, preprocess each utterance's text by tokenizing and truncating.\n", "# Returns the processed dialog entry where text has been replaced with a list of\n", "# tokens, each no longer than MAX_LENGTH - 1 (to leave space for the EOS token)\n", @@ -219,27 +209,20 @@ " processed = []\n", " for utterance in dialog.iter_utterances():\n", " # skip the section header, which does not contain conversational content\n", - " if utterance.meta[\"is_section_header\"]:\n", + " if utterance.meta['is_section_header']:\n", " continue\n", " tokens = tokenize(utterance.text)\n", " # replace out-of-vocabulary tokens\n", " for i in range(len(tokens)):\n", " if tokens[i] not in voc.word2index:\n", " tokens[i] = \"UNK\"\n", - " processed.append(\n", - " {\n", - " \"tokens\": tokens,\n", - " \"is_attack\": int(utterance.meta[\"comment_has_personal_attack\"]),\n", - " \"id\": utterance.id,\n", - " }\n", - " )\n", + " processed.append({\"tokens\": tokens, \"is_attack\": int(utterance.meta['comment_has_personal_attack']), \"id\": utterance.id})\n", " return processed\n", "\n", - "\n", "# Load context-reply pairs from the Corpus, optionally filtering to only conversations\n", "# from the specified split (train, val, or test).\n", "# Each conversation, which has N comments (not including the section header) will\n", - "# get converted into N-1 comment-reply pairs, one pair for each reply\n", + "# get converted into N-1 comment-reply pairs, one pair for each reply \n", "# (the first comment does not reply to anything).\n", "# Each comment-reply pair is a tuple consisting of the conversational context\n", "# (that is, all comments prior to the reply), the reply itself, the label (that\n", @@ -250,14 +233,14 @@ " pairs = []\n", " for convo in corpus.iter_conversations():\n", " # consider only conversations in the specified split of the data\n", - " if split is None or convo.meta[\"split\"] == split:\n", + " if split is None or convo.meta['split'] == split:\n", " dialog = processDialog(voc, convo)\n", " for idx in range(1, len(dialog)):\n", - " reply = dialog[idx][\"tokens\"][: (MAX_LENGTH - 1)]\n", + " reply = dialog[idx][\"tokens\"][:(MAX_LENGTH-1)]\n", " label = dialog[idx][\"is_attack\"]\n", " comment_id = dialog[idx][\"id\"]\n", " # gather as context all utterances preceding the reply\n", - " context = [u[\"tokens\"][: (MAX_LENGTH - 1)] for u in dialog[:idx]]\n", + " context = [u[\"tokens\"][:(MAX_LENGTH-1)] for u in dialog[:idx]]\n", " pairs.append((context, reply, label, comment_id))\n", " return pairs" ] @@ -274,15 +257,12 @@ "source": [ "# Helper functions for turning dialog and text sequences into tensors, and manipulating those tensors\n", "\n", - "\n", "def indexesFromSentence(voc, sentence):\n", " return [voc.word2index[word] for word in sentence] + [EOS_token]\n", "\n", - "\n", "def zeroPadding(l, fillvalue=PAD_token):\n", " return list(itertools.zip_longest(*l, fillvalue=fillvalue))\n", "\n", - "\n", "def binaryMatrix(l, value=PAD_token):\n", " m = []\n", " for i, seq in enumerate(l):\n", @@ -294,14 +274,11 @@ " m[i].append(1)\n", " return m\n", "\n", - "\n", "# Takes a batch of dialogs (lists of lists of tokens) and converts it into a\n", "# batch of utterances (lists of tokens) sorted by length, while keeping track of\n", "# the information needed to reconstruct the original batch of dialogs\n", "def dialogBatch2UtteranceBatch(dialog_batch):\n", - " utt_tuples = (\n", - " []\n", - " ) # will store tuples of (utterance, original position in batch, original position in dialog)\n", + " utt_tuples = [] # will store tuples of (utterance, original position in batch, original position in dialog)\n", " for batch_idx in range(len(dialog_batch)):\n", " dialog = dialog_batch[batch_idx]\n", " for dialog_idx in range(len(dialog)):\n", @@ -315,7 +292,6 @@ " dialog_indices = [u[2] for u in utt_tuples]\n", " return utt_batch, batch_indices, dialog_indices\n", "\n", - "\n", "# Returns padded input sequence tensor and lengths\n", "def inputVar(l, voc):\n", " indexes_batch = [indexesFromSentence(voc, sentence) for sentence in l]\n", @@ -324,7 +300,6 @@ " padVar = torch.LongTensor(padList)\n", " return padVar, lengths\n", "\n", - "\n", "# Returns padded target sequence tensor, padding mask, and max target length\n", "def outputVar(l, voc):\n", " indexes_batch = [indexesFromSentence(voc, sentence) for sentence in l]\n", @@ -335,7 +310,6 @@ " padVar = torch.LongTensor(padList)\n", " return padVar, mask, max_target_len\n", "\n", - "\n", "# Returns all items for a given batch of pairs\n", "def batch2TrainData(voc, pair_batch, already_sorted=False):\n", " if not already_sorted:\n", @@ -351,19 +325,7 @@ " inp, utt_lengths = inputVar(input_utterances, voc)\n", " output, mask, max_target_len = outputVar(output_batch, voc)\n", " label_batch = torch.FloatTensor(label_batch) if label_batch[0] is not None else None\n", - " return (\n", - " inp,\n", - " dialog_lengths,\n", - " utt_lengths,\n", - " batch_indices,\n", - " dialog_indices,\n", - " label_batch,\n", - " id_batch,\n", - " output,\n", - " mask,\n", - " max_target_len,\n", - " )\n", - "\n", + " return inp, dialog_lengths, utt_lengths, batch_indices, dialog_indices, label_batch, id_batch, output, mask, max_target_len\n", "\n", "def batchIterator(voc, source_data, batch_size, shuffle=True):\n", " cur_idx = 0\n", @@ -374,7 +336,7 @@ " cur_idx = 0\n", " if shuffle:\n", " random.shuffle(source_data)\n", - " batch = source_data[cur_idx : (cur_idx + batch_size)]\n", + " batch = source_data[cur_idx:(cur_idx+batch_size)]\n", " # the true batch size may be smaller than the given batch size if there is not enough data left\n", " true_batch_size = len(batch)\n", " # ensure that the dialogs in this batch are sorted by length, as expected by the padding module\n", @@ -384,7 +346,7 @@ " batch_labels = [x[2] for x in batch]\n", " # convert batch to tensors\n", " batch_tensors = batch2TrainData(voc, batch, already_sorted=True)\n", - " yield (batch_tensors, batch_dialogs, batch_labels, true_batch_size)\n", + " yield (batch_tensors, batch_dialogs, batch_labels, true_batch_size) \n", " cur_idx += batch_size" ] }, @@ -521,9 +483,7 @@ ], "source": [ "# Inspect the Voc object to make sure it loaded correctly\n", - "print(\n", - " voc.num_words\n", - ") # expected vocab size is 50004: it was built using a fixed vocab size of 50k plus 4 spots for special tokens PAD, SOS, EOS, and UNK.\n", + "print(voc.num_words) # expected vocab size is 50004: it was built using a fixed vocab size of 50k plus 4 spots for special tokens PAD, SOS, EOS, and UNK.\n", "print(list(voc.word2index.items())[:10])\n", "print(list(voc.index2word.items())[:10])" ] @@ -627,7 +587,7 @@ } ], "source": [ - "for token_list in uttid_to_test_pair[\"201082648.33321.33321\"][0]:\n", + "for token_list in uttid_to_test_pair['201082648.33321.33321'][0]:\n", " print(token_list)\n", " print()" ] @@ -656,7 +616,6 @@ "source": [ "class EncoderRNN(nn.Module):\n", " \"\"\"This module represents the utterance encoder component of CRAFT, responsible for creating vector representations of utterances\"\"\"\n", - "\n", " def __init__(self, hidden_size, embedding, n_layers=1, dropout=0):\n", " super(EncoderRNN, self).__init__()\n", " self.n_layers = n_layers\n", @@ -665,13 +624,8 @@ "\n", " # Initialize GRU; the input_size and hidden_size params are both set to 'hidden_size'\n", " # because our input size is a word embedding with number of features == hidden_size\n", - " self.gru = nn.GRU(\n", - " hidden_size,\n", - " hidden_size,\n", - " n_layers,\n", - " dropout=(0 if n_layers == 1 else dropout),\n", - " bidirectional=True,\n", - " )\n", + " self.gru = nn.GRU(hidden_size, hidden_size, n_layers,\n", + " dropout=(0 if n_layers == 1 else dropout), bidirectional=True)\n", "\n", " def forward(self, input_seq, input_lengths, hidden=None):\n", " # Convert word indexes to embeddings\n", @@ -683,28 +637,21 @@ " # Unpack padding\n", " outputs, _ = torch.nn.utils.rnn.pad_packed_sequence(outputs)\n", " # Sum bidirectional GRU outputs\n", - " outputs = outputs[:, :, : self.hidden_size] + outputs[:, :, self.hidden_size :]\n", + " outputs = outputs[:, :, :self.hidden_size] + outputs[:, : ,self.hidden_size:]\n", " # Return output and final hidden state\n", " return outputs, hidden\n", "\n", - "\n", "class ContextEncoderRNN(nn.Module):\n", " \"\"\"This module represents the context encoder component of CRAFT, responsible for creating an order-sensitive vector representation of conversation context\"\"\"\n", - "\n", " def __init__(self, hidden_size, n_layers=1, dropout=0):\n", " super(ContextEncoderRNN, self).__init__()\n", " self.n_layers = n_layers\n", " self.hidden_size = hidden_size\n", - "\n", + " \n", " # only unidirectional GRU for context encoding\n", - " self.gru = nn.GRU(\n", - " hidden_size,\n", - " hidden_size,\n", - " n_layers,\n", - " dropout=(0 if n_layers == 1 else dropout),\n", - " bidirectional=False,\n", - " )\n", - "\n", + " self.gru = nn.GRU(hidden_size, hidden_size, n_layers,\n", + " dropout=(0 if n_layers == 1 else dropout), bidirectional=False)\n", + " \n", " def forward(self, input_seq, input_lengths, hidden=None):\n", " # Pack padded batch of sequences for RNN module\n", " packed = torch.nn.utils.rnn.pack_padded_sequence(input_seq, input_lengths)\n", @@ -715,15 +662,13 @@ " # return output and final hidden state\n", " return outputs, hidden\n", "\n", - "\n", "class SingleTargetClf(nn.Module):\n", " \"\"\"This module represents the CRAFT classifier head, which takes the context encoding and uses it to make a forecast\"\"\"\n", - "\n", " def __init__(self, hidden_size, dropout=0.1):\n", " super(SingleTargetClf, self).__init__()\n", - "\n", + " \n", " self.hidden_size = hidden_size\n", - "\n", + " \n", " # initialize classifier\n", " self.layer1 = nn.Linear(hidden_size, hidden_size)\n", " self.layer1_act = nn.LeakyReLU()\n", @@ -731,7 +676,7 @@ " self.layer2_act = nn.LeakyReLU()\n", " self.clf = nn.Linear(hidden_size // 2, 1)\n", " self.dropout = nn.Dropout(p=dropout)\n", - "\n", + " \n", " def forward(self, encoder_outputs, encoder_input_lengths):\n", " # from stackoverflow (https://stackoverflow.com/questions/50856936/taking-the-last-state-from-bilstm-bigru-in-pytorch)\n", " # First we unsqueeze seqlengths two times so it has the same number of\n", @@ -739,11 +684,11 @@ " # (batch_size) -> (1, batch_size, 1)\n", " lengths = encoder_input_lengths.unsqueeze(0).unsqueeze(2)\n", " # Then we expand it accordingly\n", - " # (1, batch_size, 1) -> (1, batch_size, hidden_size)\n", + " # (1, batch_size, 1) -> (1, batch_size, hidden_size) \n", " lengths = lengths.expand((1, -1, encoder_outputs.size(2)))\n", "\n", " # take only the last state of the encoder for each batch\n", - " last_outputs = torch.gather(encoder_outputs, 0, lengths - 1).squeeze()\n", + " last_outputs = torch.gather(encoder_outputs, 0, lengths-1).squeeze()\n", " # forward pass through hidden layers\n", " layer1_out = self.layer1_act(self.layer1(self.dropout(last_outputs)))\n", " layer2_out = self.layer2_act(self.layer2(self.dropout(layer1_out)))\n", @@ -751,70 +696,51 @@ " logits = self.clf(self.dropout(layer2_out)).squeeze()\n", " return logits\n", "\n", - "\n", "class Predictor(nn.Module):\n", " \"\"\"This helper module encapsulates the CRAFT pipeline, defining the logic of passing an input through each consecutive sub-module.\"\"\"\n", - "\n", " def __init__(self, encoder, context_encoder, classifier):\n", " super(Predictor, self).__init__()\n", " self.encoder = encoder\n", " self.context_encoder = context_encoder\n", " self.classifier = classifier\n", - "\n", - " def forward(\n", - " self,\n", - " input_batch,\n", - " dialog_lengths,\n", - " dialog_lengths_list,\n", - " utt_lengths,\n", - " batch_indices,\n", - " dialog_indices,\n", - " batch_size,\n", - " max_length,\n", - " ):\n", + " \n", + " def forward(self, input_batch, dialog_lengths, dialog_lengths_list, utt_lengths, batch_indices, dialog_indices, batch_size, max_length):\n", " # Forward input through encoder model\n", " _, utt_encoder_hidden = self.encoder(input_batch, utt_lengths)\n", - "\n", + " \n", " # Convert utterance encoder final states to batched dialogs for use by context encoder\n", - " context_encoder_input = makeContextEncoderInput(\n", - " utt_encoder_hidden, dialog_lengths_list, batch_size, batch_indices, dialog_indices\n", - " )\n", - "\n", + " context_encoder_input = makeContextEncoderInput(utt_encoder_hidden, dialog_lengths_list, batch_size, batch_indices, dialog_indices)\n", + " \n", " # Forward pass through context encoder\n", - " context_encoder_outputs, context_encoder_hidden = self.context_encoder(\n", - " context_encoder_input, dialog_lengths\n", - " )\n", - "\n", + " context_encoder_outputs, context_encoder_hidden = self.context_encoder(context_encoder_input, dialog_lengths)\n", + " \n", " # Forward pass through classifier to get prediction logits\n", " logits = self.classifier(context_encoder_outputs, dialog_lengths)\n", - "\n", + " \n", " # Apply sigmoid activation\n", " predictions = F.sigmoid(logits)\n", " return predictions\n", "\n", - "\n", - "def makeContextEncoderInput(\n", - " utt_encoder_hidden, dialog_lengths, batch_size, batch_indices, dialog_indices\n", - "):\n", + "def makeContextEncoderInput(utt_encoder_hidden, dialog_lengths, batch_size, batch_indices, dialog_indices):\n", " \"\"\"The utterance encoder takes in utterances in combined batches, with no knowledge of which ones go where in which conversation.\n", - " Its output is therefore also unordered. We correct this by using the information computed during tensor conversion to regroup\n", - " the utterance vectors into their proper conversational order.\"\"\"\n", + " Its output is therefore also unordered. We correct this by using the information computed during tensor conversion to regroup\n", + " the utterance vectors into their proper conversational order.\"\"\"\n", " # first, sum the forward and backward encoder states\n", - " utt_encoder_summed = utt_encoder_hidden[-2, :, :] + utt_encoder_hidden[-1, :, :]\n", + " utt_encoder_summed = utt_encoder_hidden[-2,:,:] + utt_encoder_hidden[-1,:,:]\n", " # we now have hidden state of shape [utterance_batch_size, hidden_size]\n", " # split it into a list of [hidden_size,] x utterance_batch_size\n", " last_states = [t.squeeze() for t in utt_encoder_summed.split(1, dim=0)]\n", - "\n", + " \n", " # create a placeholder list of tensors to group the states by source dialog\n", " states_dialog_batched = [[None for _ in range(dialog_lengths[i])] for i in range(batch_size)]\n", - "\n", + " \n", " # group the states by source dialog\n", " for hidden_state, batch_idx, dialog_idx in zip(last_states, batch_indices, dialog_indices):\n", " states_dialog_batched[batch_idx][dialog_idx] = hidden_state\n", - "\n", + " \n", " # stack each dialog into a tensor of shape [dialog_length, hidden_size]\n", " states_dialog_batched = [torch.stack(d) for d in states_dialog_batched]\n", - "\n", + " \n", " # finally, condense all the dialog tensors into a single zero-padded tensor\n", " # of shape [max_dialog_length, batch_size, hidden_size]\n", " return torch.nn.utils.rnn.pad_sequence(states_dialog_batched)" @@ -842,77 +768,36 @@ }, "outputs": [], "source": [ - "def _evaluate_batch(\n", - " encoder,\n", - " context_encoder,\n", - " predictor,\n", - " voc,\n", - " input_batch,\n", - " dialog_lengths,\n", - " dialog_lengths_list,\n", - " utt_lengths,\n", - " batch_indices,\n", - " dialog_indices,\n", - " batch_size,\n", - " device,\n", - " max_length=MAX_LENGTH,\n", - "):\n", + "def _evaluate_batch(encoder, context_encoder, predictor, voc, input_batch, dialog_lengths, \n", + " dialog_lengths_list, utt_lengths, batch_indices, dialog_indices, batch_size, device, max_length=MAX_LENGTH):\n", " # Set device options\n", " input_batch = input_batch.to(device)\n", " dialog_lengths = dialog_lengths.to(device)\n", " utt_lengths = utt_lengths.to(device)\n", " # Predict future attack using predictor\n", - " scores = predictor(\n", - " input_batch,\n", - " dialog_lengths,\n", - " dialog_lengths_list,\n", - " utt_lengths,\n", - " batch_indices,\n", - " dialog_indices,\n", - " batch_size,\n", - " max_length,\n", - " )\n", + " scores = predictor(input_batch, dialog_lengths, dialog_lengths_list, utt_lengths, batch_indices, dialog_indices, batch_size, max_length)\n", " predictions = (scores > 0.5).float()\n", " return predictions, scores\n", "\n", - "\n", "def _evaluate_dataset(dataset, encoder, context_encoder, predictor, voc, batch_size, device):\n", " # create a batch iterator for the given data\n", " batch_iterator = batchIterator(voc, dataset, batch_size, shuffle=False)\n", " # find out how many iterations we will need to cover the whole dataset\n", " n_iters = len(dataset) // batch_size + int(len(dataset) % batch_size > 0)\n", - " output_df = {\"id\": [], \"prediction\": [], \"score\": []}\n", - " for iteration in range(1, n_iters + 1):\n", + " output_df = {\n", + " \"id\": [],\n", + " \"prediction\": [],\n", + " \"score\": []\n", + " }\n", + " for iteration in range(1, n_iters+1):\n", " batch, batch_dialogs, _, true_batch_size = next(batch_iterator)\n", " # Extract fields from batch\n", - " (\n", - " input_variable,\n", - " dialog_lengths,\n", - " utt_lengths,\n", - " batch_indices,\n", - " dialog_indices,\n", - " labels,\n", - " convo_ids,\n", - " target_variable,\n", - " mask,\n", - " max_target_len,\n", - " ) = batch\n", + " input_variable, dialog_lengths, utt_lengths, batch_indices, dialog_indices, labels, convo_ids, target_variable, mask, max_target_len = batch\n", " dialog_lengths_list = [len(x) for x in batch_dialogs]\n", " # run the model\n", - " predictions, scores = _evaluate_batch(\n", - " encoder,\n", - " context_encoder,\n", - " predictor,\n", - " voc,\n", - " input_variable,\n", - " dialog_lengths,\n", - " dialog_lengths_list,\n", - " utt_lengths,\n", - " batch_indices,\n", - " dialog_indices,\n", - " true_batch_size,\n", - " device,\n", - " )\n", + " predictions, scores = _evaluate_batch(encoder, context_encoder, predictor, voc, input_variable,\n", + " dialog_lengths, dialog_lengths_list, utt_lengths, batch_indices, dialog_indices,\n", + " true_batch_size, device)\n", "\n", " # format the output as a dataframe (which we can later re-join with the corpus)\n", " for i in range(true_batch_size):\n", @@ -922,10 +807,8 @@ " output_df[\"id\"].append(convo_id)\n", " output_df[\"prediction\"].append(pred)\n", " output_df[\"score\"].append(score)\n", - "\n", - " print(\n", - " \"Iteration: {}; Percent complete: {:.1f}%\".format(iteration, iteration / n_iters * 100)\n", - " )\n", + " \n", + " print(\"Iteration: {}; Percent complete: {:.1f}%\".format(iteration, iteration / n_iters * 100))\n", "\n", " return pd.DataFrame(output_df).set_index(\"id\")" ] @@ -1055,7 +938,7 @@ "random.seed(2019)\n", "\n", "# Tell torch to use GPU. Note that if you are running this notebook in a non-GPU environment, you can change 'cuda' to 'cpu' to get the code to run.\n", - "device = torch.device(\"cpu\")\n", + "device = torch.device('cpu')\n", "\n", "print(\"Loading saved parameters...\")\n", "if not os.path.isfile(\"model.tar\"):\n", @@ -1065,14 +948,14 @@ "# checkpoint = torch.load(\"model.tar\")\n", "# If running in a non-GPU environment, you need to tell PyTorch to convert the parameters to CPU tensor format.\n", "# To do so, replace the previous line with the following:\n", - "checkpoint = torch.load(\"model.tar\", map_location=torch.device(\"cpu\"))\n", - "encoder_sd = checkpoint[\"en\"]\n", - "context_sd = checkpoint[\"ctx\"]\n", - "attack_clf_sd = checkpoint[\"atk_clf\"]\n", - "embedding_sd = checkpoint[\"embedding\"]\n", - "voc.__dict__ = checkpoint[\"voc_dict\"]\n", - "\n", - "print(\"Building encoders, decoder, and classifier...\")\n", + "checkpoint = torch.load(\"model.tar\", map_location=torch.device('cpu'))\n", + "encoder_sd = checkpoint['en']\n", + "context_sd = checkpoint['ctx']\n", + "attack_clf_sd = checkpoint['atk_clf']\n", + "embedding_sd = checkpoint['embedding']\n", + "voc.__dict__ = checkpoint['voc_dict']\n", + "\n", + "print('Building encoders, decoder, and classifier...')\n", "# Initialize word embeddings\n", "embedding = nn.Embedding(voc.num_words, hidden_size)\n", "embedding.load_state_dict(embedding_sd)\n", @@ -1088,7 +971,7 @@ "encoder = encoder.to(device)\n", "context_encoder = context_encoder.to(device)\n", "attack_clf = attack_clf.to(device)\n", - "print(\"Models built and ready to go!\")\n", + "print('Models built and ready to go!')\n", "\n", "# Set dropout layers to eval mode\n", "encoder.eval()\n", @@ -1099,9 +982,7 @@ "predictor = Predictor(encoder, context_encoder, attack_clf)\n", "\n", "# Run the pipeline!\n", - "forecasts_df = _evaluate_dataset(\n", - " test_pairs, encoder, context_encoder, predictor, voc, batch_size, device\n", - ")" + "forecasts_df = _evaluate_dataset(test_pairs, encoder, context_encoder, predictor, voc, batch_size, device)" ] }, { @@ -1316,10 +1197,10 @@ "# prior to actually seeing this utterance, that this utterance *would be* a derailment\".\n", "for convo in corpus.iter_conversations():\n", " # only consider test set conversations (we did not make predictions for the other ones)\n", - " if convo.meta[\"split\"] == \"test\":\n", + " if convo.meta['split'] == \"test\":\n", " for utt in convo.iter_utterances():\n", " if utt.id in forecasts_df.index:\n", - " utt.meta[\"forecast_score\"] = forecasts_df.loc[utt.id].score" + " utt.meta['forecast_score'] = forecasts_df.loc[utt.id].score" ] }, { @@ -1355,23 +1236,20 @@ "# set up to not look at the last comment, meaning that all forecasts we obtained are forecasts made prior to derailment. This simplifies\n", "# the computation of forecast accuracy as we now do not need to explicitly consider when a forecast was made.\n", "\n", - "conversational_forecasts_df = {\"convo_id\": [], \"label\": [], \"score\": [], \"prediction\": []}\n", + "conversational_forecasts_df = {\n", + " \"convo_id\": [],\n", + " \"label\": [],\n", + " \"score\": [],\n", + " \"prediction\": []\n", + "}\n", "\n", "for convo in corpus.iter_conversations():\n", - " if convo.meta[\"split\"] == \"test\":\n", - " conversational_forecasts_df[\"convo_id\"].append(convo.id)\n", - " conversational_forecasts_df[\"label\"].append(\n", - " int(convo.meta[\"conversation_has_personal_attack\"])\n", - " )\n", - " forecast_scores = [\n", - " utt.meta[\"forecast_score\"]\n", - " for utt in convo.iter_utterances()\n", - " if \"forecast_score\" in utt.meta\n", - " ]\n", - " conversational_forecasts_df[\"score\"] = np.max(forecast_scores)\n", - " conversational_forecasts_df[\"prediction\"].append(\n", - " int(np.max(forecast_scores) > FORECAST_THRESH)\n", - " )\n", + " if convo.meta['split'] == \"test\":\n", + " conversational_forecasts_df['convo_id'].append(convo.id)\n", + " conversational_forecasts_df['label'].append(int(convo.meta['conversation_has_personal_attack']))\n", + " forecast_scores = [utt.meta['forecast_score'] for utt in convo.iter_utterances() if 'forecast_score' in utt.meta]\n", + " conversational_forecasts_df['score'] = np.max(forecast_scores)\n", + " conversational_forecasts_df['prediction'].append(int(np.max(forecast_scores) > FORECAST_THRESH))\n", "\n", "conversational_forecasts_df = pd.DataFrame(conversational_forecasts_df).set_index(\"convo_id\")\n", "print((conversational_forecasts_df.label == conversational_forecasts_df.prediction).mean())" @@ -1403,15 +1281,14 @@ "source": [ "# in addition to accuracy, we can also consider applying other metrics at the conversation level, such as precision/recall\n", "def get_pr_stats(preds, labels):\n", - " tp = ((labels == 1) & (preds == 1)).sum()\n", - " fp = ((labels == 0) & (preds == 1)).sum()\n", - " tn = ((labels == 0) & (preds == 0)).sum()\n", - " fn = ((labels == 1) & (preds == 0)).sum()\n", + " tp = ((labels==1)&(preds==1)).sum()\n", + " fp = ((labels==0)&(preds==1)).sum()\n", + " tn = ((labels==0)&(preds==0)).sum()\n", + " fn = ((labels==1)&(preds==0)).sum()\n", " print(\"Precision = {0:.4f}, recall = {1:.4f}\".format(tp / (tp + fp), tp / (tp + fn)))\n", " print(\"False positive rate =\", fp / (fp + tn))\n", " print(\"F1 =\", 2 / (((tp + fp) / tp) + ((tp + fn) / tp)))\n", "\n", - "\n", "get_pr_stats(conversational_forecasts_df.prediction, conversational_forecasts_df.label)" ] }, @@ -1497,25 +1374,23 @@ }, "outputs": [], "source": [ - "comments_until_derail = (\n", - " {}\n", - ") # store the \"number of comments until derailment\" metric for each conversation\n", - "time_until_derail = {} # store the \"time until derailment\" metric for each conversation\n", + "comments_until_derail = {} # store the \"number of comments until derailment\" metric for each conversation\n", + "time_until_derail = {} # store the \"time until derailment\" metric for each conversation\n", "\n", "for convo in corpus.iter_conversations():\n", - " if convo.meta[\"split\"] == \"test\" and convo.meta[\"conversation_has_personal_attack\"]:\n", + " if convo.meta['split'] == \"test\" and convo.meta['conversation_has_personal_attack']:\n", " # filter out the section header as usual\n", - " utts = [utt for utt in convo.iter_utterances() if not utt.meta[\"is_section_header\"]]\n", + " utts = [utt for utt in convo.iter_utterances() if not utt.meta['is_section_header']]\n", " # by construction, the last comment is the one with the personal attack\n", " derail_idx = len(utts) - 1\n", " # now scan the utterances in order until we find the first derailment prediction (if any)\n", " for idx in range(1, len(utts)):\n", - " if utts[idx].meta[\"forecast_score\"] > FORECAST_THRESH:\n", + " if utts[idx].meta['forecast_score'] > FORECAST_THRESH:\n", " # recall that the forecast_score meta field specifies what CRAFT thought this comment would look like BEFORE it\n", - " # saw this comment. So the actual CRAFT forecast is made during the previous comment; we account for this by\n", + " # saw this comment. So the actual CRAFT forecast is made during the previous comment; we account for this by \n", " # subtracting 1 from idx\n", - " comments_until_derail[convo.id] = derail_idx - (idx - 1)\n", - " time_until_derail[convo.id] = utts[derail_idx].timestamp - utts[(idx - 1)].timestamp\n", + " comments_until_derail[convo.id] = derail_idx - (idx-1)\n", + " time_until_derail[convo.id] = utts[derail_idx].timestamp - utts[(idx-1)].timestamp\n", " break" ] }, @@ -1543,12 +1418,7 @@ "source": [ "# compute some quick statistics about the distribution of the \"number of comments until derailment\" metric\n", "comments_until_derail_vals = np.asarray(list(comments_until_derail.values()))\n", - "print(\n", - " np.min(comments_until_derail_vals),\n", - " np.max(comments_until_derail_vals),\n", - " np.median(comments_until_derail_vals),\n", - " np.mean(comments_until_derail_vals),\n", - ")" + "print(np.min(comments_until_derail_vals), np.max(comments_until_derail_vals), np.median(comments_until_derail_vals), np.mean(comments_until_derail_vals))" ] }, { @@ -1576,12 +1446,7 @@ "# compute some quick statistics about the distribution of the \"time until derailment\" metric\n", "# note that since timestamps are in seconds, we convert to hours by dividing by 3600, to make it more human readable\n", "time_until_derail_vals = np.asarray(list(time_until_derail.values())) / 3600\n", - "print(\n", - " np.min(time_until_derail_vals),\n", - " np.max(time_until_derail_vals),\n", - " np.median(time_until_derail_vals),\n", - " np.mean(time_until_derail_vals),\n", - ")" + "print(np.min(time_until_derail_vals), np.max(time_until_derail_vals), np.median(time_until_derail_vals), np.mean(time_until_derail_vals))" ] }, { @@ -1612,14 +1477,12 @@ ], "source": [ "# visualize the distribution of \"number of comments until derailment\" as a histogram (reproducing Figure 4 from the paper)\n", - "plt.rcParams[\"figure.figsize\"] = (10.0, 5.0)\n", - "plt.rcParams[\"font.size\"] = 24\n", - "plt.hist(\n", - " comments_until_derail_vals, bins=range(1, np.max(comments_until_derail_vals)), density=True\n", - ")\n", - "plt.xlim(1, 10)\n", - "plt.xticks(np.arange(1, 10) + 0.5, np.arange(1, 10))\n", - "plt.yticks(np.arange(0, 0.25, 0.05), np.arange(0, 25, 5))\n", + "plt.rcParams['figure.figsize'] = (10.0, 5.0)\n", + "plt.rcParams['font.size'] = 24\n", + "plt.hist(comments_until_derail_vals, bins=range(1, np.max(comments_until_derail_vals)), density=True)\n", + "plt.xlim(1,10)\n", + "plt.xticks(np.arange(1,10)+0.5, np.arange(1,10))\n", + "plt.yticks(np.arange(0,0.25,0.05), np.arange(0,25,5))\n", "plt.xlabel(\"Number of comments elapsed\")\n", "plt.ylabel(\"% of conversations\")\n", "plt.show()" diff --git a/convokit/forecaster/CRAFT/demos/craft_demo_training.ipynb b/convokit/forecaster/CRAFT/demos/craft_demo_training.ipynb index 7ebce0f7..441f18cb 100644 --- a/convokit/forecaster/CRAFT/demos/craft_demo_training.ipynb +++ b/convokit/forecaster/CRAFT/demos/craft_demo_training.ipynb @@ -54,7 +54,9 @@ } ], "source": [ - "craft_model = CRAFTModel(device_type=\"cpu\", options={\"validation_size\": 0.2, \"train_epochs\": 5})" + "craft_model = CRAFTModel(device_type=\"cpu\", options={'validation_size': 0.2,\n", + " 'train_epochs': 5\n", + " })" ] }, { @@ -63,17 +65,15 @@ "metadata": {}, "outputs": [], "source": [ - "forecaster = Forecaster(\n", - " forecaster_model=craft_model,\n", - " forecast_mode=\"past\",\n", - " convo_structure=\"linear\",\n", - " text_func=lambda utt: utt.meta[\"tokens\"][: (MAX_LENGTH - 1)],\n", - " label_func=lambda utt: int(utt.meta[\"comment_has_personal_attack\"]),\n", - " forecast_attribute_name=\"prediction\",\n", - " forecast_prob_attribute_name=\"pred_score\",\n", - " use_last_only=True,\n", - " skip_broken_convos=False,\n", - ")" + "forecaster = Forecaster(forecaster_model = craft_model,\n", + " forecast_mode = 'past',\n", + " convo_structure=\"linear\",\n", + " text_func = lambda utt: utt.meta[\"tokens\"][:(MAX_LENGTH-1)],\n", + " label_func = lambda utt: int(utt.meta['comment_has_personal_attack']),\n", + " forecast_attribute_name=\"prediction\", forecast_prob_attribute_name=\"pred_score\",\n", + " use_last_only = True,\n", + " skip_broken_convos=False\n", + " )" ] }, { @@ -200,11 +200,8 @@ } ], "source": [ - "forecaster.fit(\n", - " corpus,\n", - " selector=lambda convo: convo.meta[\"split\"] == \"train\",\n", - " ignore_utterances=lambda utt: utt.meta[\"is_section_header\"],\n", - ")" + "forecaster.fit(corpus, selector = lambda convo: convo.meta[\"split\"] == \"train\",\n", + " ignore_utterances = lambda utt: utt.meta[\"is_section_header\"])" ] }, { diff --git a/convokit/forecaster/tests/cumulativeBoW_demo.ipynb b/convokit/forecaster/tests/cumulativeBoW_demo.ipynb index 6b08b5ec..cbfd7f18 100644 --- a/convokit/forecaster/tests/cumulativeBoW_demo.ipynb +++ b/convokit/forecaster/tests/cumulativeBoW_demo.ipynb @@ -23,7 +23,7 @@ } ], "source": [ - "corpus = Corpus(filename=download(\"subreddit-Cornell\"))" + "corpus = Corpus(filename=download('subreddit-Cornell'))" ] }, { @@ -58,7 +58,7 @@ "metadata": {}, "outputs": [], "source": [ - "convo = corpus.get_conversation(\"o31u0\")" + "convo = corpus.get_conversation('o31u0')" ] }, { @@ -224,7 +224,7 @@ "source": [ "# Adding a 'y' feature to fit to\n", "for utt in corpus.iter_utterances():\n", - " utt.add_meta(\"pos_score\", int(utt.meta[\"score\"] > 0))" + " utt.add_meta('pos_score', int(utt.meta['score'] > 0))" ] }, { @@ -243,7 +243,7 @@ } ], "source": [ - "forecaster = Forecaster(label_func=lambda utt: utt.meta[\"pos_score\"], skip_broken_convos=True)" + "forecaster = Forecaster(label_func=lambda utt: utt.meta['pos_score'], skip_broken_convos=True)" ] }, { @@ -330,7 +330,7 @@ "metadata": {}, "outputs": [], "source": [ - "corpus.get_utterance(\"dpn8e4v\")" + "corpus.get_utterance('dpn8e4v')" ] }, { @@ -339,7 +339,7 @@ "metadata": {}, "outputs": [], "source": [ - "corpus.get_utterance(\"dpn8e4v\").root" + "corpus.get_utterance('dpn8e4v').root" ] }, { @@ -348,7 +348,7 @@ "metadata": {}, "outputs": [], "source": [ - "corpus.get_conversation(corpus.get_utterance(\"dpn8e4v\").root).print_conversation_structure()" + "corpus.get_conversation(corpus.get_utterance('dpn8e4v').root).print_conversation_structure()" ] }, { @@ -364,9 +364,7 @@ "metadata": {}, "outputs": [], "source": [ - "corpus.get_conversation(corpus.get_utterance(\"dpn8e4v\").root).print_conversation_structure(\n", - " lambda utt: str(utt.meta[\"forecast\"])\n", - ")" + "corpus.get_conversation(corpus.get_utterance('dpn8e4v').root).print_conversation_structure(lambda utt: str(utt.meta['forecast']))" ] }, { @@ -382,9 +380,7 @@ "metadata": {}, "outputs": [], "source": [ - "corpus.get_conversation(corpus.get_utterance(\"dpn8e4v\").root).print_conversation_structure(\n", - " lambda utt: str(utt.meta[\"pos_score\"])\n", - ")" + "corpus.get_conversation(corpus.get_utterance('dpn8e4v').root).print_conversation_structure(lambda utt: str(utt.meta['pos_score']))" ] }, { @@ -393,8 +389,8 @@ "metadata": {}, "outputs": [], "source": [ - "forecasts = [utt.meta[\"forecast\"] for utt in corpus.iter_utterances()]\n", - "actual = [utt.meta[\"pos_score\"] for utt in corpus.iter_utterances()]" + "forecasts = [utt.meta['forecast'] for utt in corpus.iter_utterances()]\n", + "actual = [utt.meta['pos_score'] for utt in corpus.iter_utterances()]" ] }, { @@ -403,9 +399,7 @@ "metadata": {}, "outputs": [], "source": [ - "y_true_pred = [\n", - " (forecast, actual) for forecast, actual in zip(forecasts, actual) if forecast is not None\n", - "]" + "y_true_pred = [(forecast, actual) for forecast, actual in zip(forecasts, actual) if forecast is not None]" ] }, { diff --git a/convokit/model/backendMapper.py b/convokit/model/backendMapper.py index 55f804f5..8cb0665a 100644 --- a/convokit/model/backendMapper.py +++ b/convokit/model/backendMapper.py @@ -17,7 +17,7 @@ class BackendMapper(metaclass=ABCMeta): """ def __init__(self): - # concrete data storage (i.e., collections) for each component type + # concrete data backend (i.e., collections) for each component type # this will be assigned in subclasses self.data = {"utterance": None, "conversation": None, "speaker": None, "meta": None} diff --git a/convokit/model/convoKitMeta.py b/convokit/model/convoKitMeta.py index 05393179..ea444e6d 100644 --- a/convokit/model/convoKitMeta.py +++ b/convokit/model/convoKitMeta.py @@ -22,20 +22,20 @@ def __init__(self, owner, convokit_index, obj_type, overwrite=False): self.index: ConvoKitIndex = convokit_index self.obj_type = obj_type - self._get_storage().initialize_data_for_component( - "meta", self.storage_key, overwrite=overwrite + self._get_backend().initialize_data_for_component( + "meta", self.backend_key, overwrite=overwrite ) @property - def storage_key(self) -> str: + def backend_key(self) -> str: return f"{self.obj_type}_{self.owner.id}" def __getitem__(self, item): # in DB mode, metadata field mutation would not be updated. (ex. mutating dict/list metadata fields) # we align MEM mode behavior and DB mode by making deepcopy of metadata fields, so mutation no longer - # affect corpus metadata storage, but only acting on the copy of it. - item = self._get_storage().get_data( - "meta", self.storage_key, item, self.index.get_index(self.obj_type) + # affect corpus metadata backend, but only acting on the copy of it. + item = self._get_backend().get_data( + "meta", self.backend_key, item, self.index.get_index(self.obj_type) ) immutable_types = (int, float, bool, complex, str, tuple, frozenset) if isinstance(item, immutable_types): @@ -44,16 +44,16 @@ def __getitem__(self, item): # return copy.deepcopy(item) if item is not common python immutable type return copy.deepcopy(item) - def _get_storage(self): + def _get_backend(self): # special case for Corpus meta since that's the only time owner is not a CorpusComponent # since cannot directly import Corpus to check the type (circular import), as a proxy we # check for the obj_type attribute which is common to all CorpusComponent but not # present in Corpus if not hasattr(self.owner, "obj_type"): - return self.owner.storage + return self.owner.backend_mapper # self.owner -> CorpusComponent - # self.owner.owner -> Corpus that owns the CorpusComponent (only Corpus has direct pointer to storage) - return self.owner.owner.storage + # self.owner.owner -> Corpus that owns the CorpusComponent (only Corpus has direct pointer to backend) + return self.owner.owner.backend_mapper @staticmethod def _check_type_and_update_index(index, obj_type, key, value): @@ -82,14 +82,14 @@ def __setitem__(self, key, value): if self.index.type_check: ConvoKitMeta._check_type_and_update_index(self.index, self.obj_type, key, value) - self._get_storage().update_data( - "meta", self.storage_key, key, value, self.index.get_index(self.obj_type) + self._get_backend().update_data( + "meta", self.backend_key, key, value, self.index.get_index(self.obj_type) ) def __delitem__(self, key): if self.obj_type == "corpus": self.index.del_from_index(self.obj_type, key) - self._get_storage().delete_data("meta", self.storage_key, key) + self._get_backend().delete_data("meta", self.backend_key, key) else: if self.index.lock_metadata_deletion[self.obj_type]: warn( @@ -101,26 +101,26 @@ def __delitem__(self, key): ) ) else: - self._get_storage().delete_data("meta", self.storage_key, key) + self._get_backend().delete_data("meta", self.backend_key, key) def __iter__(self): return ( - self._get_storage() - .get_data("meta", self.storage_key, index=self.index.get_index(self.obj_type)) + self._get_backend() + .get_data("meta", self.backend_key, index=self.index.get_index(self.obj_type)) .__iter__() ) def __len__(self): return ( - self._get_storage() - .get_data("meta", self.storage_key, index=self.index.get_index(self.obj_type)) + self._get_backend() + .get_data("meta", self.backend_key, index=self.index.get_index(self.obj_type)) .__len__() ) def __contains__(self, x): return ( - self._get_storage() - .get_data("meta", self.storage_key, index=self.index.get_index(self.obj_type)) + self._get_backend() + .get_data("meta", self.backend_key, index=self.index.get_index(self.obj_type)) .__contains__(x) ) @@ -129,8 +129,8 @@ def __repr__(self) -> str: def to_dict(self): return dict( - self._get_storage().get_data( - "meta", self.storage_key, index=self.index.get_index(self.obj_type) + self._get_backend().get_data( + "meta", self.backend_key, index=self.index.get_index(self.obj_type) ) ) @@ -144,8 +144,8 @@ def reinitialize_from(self, other: Union["ConvoKitMeta", dict]): raise TypeError( "ConvoKitMeta can only be reinitialized from a dict instance or another ConvoKitMeta" ) - self._get_storage().initialize_data_for_component( - "meta", self.storage_key, overwrite=True, initial_value=other + self._get_backend().initialize_data_for_component( + "meta", self.backend_key, overwrite=True, initial_value=other ) diff --git a/convokit/model/corpus.py b/convokit/model/corpus.py index 9bf22753..7ec3883e 100644 --- a/convokit/model/corpus.py +++ b/convokit/model/corpus.py @@ -69,7 +69,7 @@ def __init__( # configure corpus ID (optional for mem mode, required for DB mode) if backend is None: - backend = self.config.default_storage_mode + backend = self.config.default_backend if db_collection_prefix is None and filename is None and backend == "db": db_collection_prefix = create_safe_id() warn( @@ -78,12 +78,12 @@ def __init__( ) self.id = get_corpus_id(db_collection_prefix, filename, backend) self.backend = backend - self.backend_mapper = initialize_storage(self, backend_mapper, backend, db_host) + self.backend_mapper = initialize_backend(self, backend_mapper, backend, db_host) self.meta_index = ConvoKitIndex(self) self.meta = ConvoKitMeta(self, self.meta_index, "corpus") - # private storage + # private backend self._vector_matrices = dict() convos_data = defaultdict(dict) @@ -122,7 +122,7 @@ def __init__( # with the BackendMapper's DB now populated, initialize the corresponding # CorpusComponent instances. - init_corpus_from_storage_manager(self, ids_in_db) + init_corpus_from_backend_manager(self, ids_in_db) self.meta_index.enable_type_check() # load preload_vectors @@ -224,7 +224,7 @@ def reconnect_to_db(cls, db_collection_prefix: str, db_host: Optional[str] = Non result = cls(db_collection_prefix=db_collection_prefix, db_host=db_host, backend="db") # through the constructor, the blank Corpus' BackendMapper is now connected # to the DB. Next use the DB contents to populate the corpus components. - init_corpus_from_storage_manager(result) + init_corpus_from_backend_manager(result) return result @@ -618,14 +618,14 @@ def filter_conversations_by(self, selector: Callable[[Conversation], bool]): self.update_speakers_data() self.reinitialize_index() - # clear all storage entries corresponding to filtered-out components - meta_ids = [self.meta.storage_key] + # clear all backend entries corresponding to filtered-out components + meta_ids = [self.meta.backend_key] for utt in self.iter_utterances(): - meta_ids.append(utt.meta.storage_key) + meta_ids.append(utt.meta.backend_key) for convo in self.iter_conversations(): - meta_ids.append(convo.meta.storage_key) + meta_ids.append(convo.meta.backend_key) for speaker in self.iter_speakers(): - meta_ids.append(speaker.meta.storage_key) + meta_ids.append(speaker.meta.backend_key) self.backend_mapper.purge_obsolete_entries( self.get_utterance_ids(), self.get_conversation_ids(), self.get_speaker_ids(), meta_ids ) diff --git a/convokit/model/corpusComponent.py b/convokit/model/corpusComponent.py index d126d94a..1ae8dd49 100644 --- a/convokit/model/corpusComponent.py +++ b/convokit/model/corpusComponent.py @@ -20,12 +20,12 @@ def __init__( self.vectors = vectors if vectors is not None else [] # if the CorpusComponent is initialized with an owner set up an entry - # in the owner's storage; if it is not initialized with an owner - # (i.e. it is a standalone object) set up a dict-based temp storage + # in the owner's backend; if it is not initialized with an owner + # (i.e. it is a standalone object) set up a dict-based temp backend if self.owner is None: - self._temp_storage = initial_data if initial_data is not None else {} + self._temp_backend = initial_data if initial_data is not None else {} else: - self.owner.storage.initialize_data_for_component( + self.owner.backend_mapper.initialize_data_for_component( self.obj_type, self._id, initial_value=(initial_data if initial_data is not None else {}), @@ -42,28 +42,28 @@ def set_owner(self, owner): if owner is self._owner: # no action needed return - # stash the metadata first since reassigning self._owner will break its storage connection + # stash the metadata first since reassigning self._owner will break its backend connection meta_vals = {k: v for k, v in self.meta.items()} previous_owner = self._owner self._owner = owner if owner is not None: # when a new owner Corpus is assigned, we must take the following steps: # (1) transfer this component's data to the new owner's BackendMapper - # (2) avoid duplicates by removing the data from the old owner (or temp storage if there was no prior owner) + # (2) avoid duplicates by removing the data from the old owner (or temp backend if there was no prior owner) # (3) reinitialize the metadata instance data_dict = ( - dict(previous_owner.storage.get_data(self.obj_type, self.id)) + dict(previous_owner.backend_mapper.get_data(self.obj_type, self.id)) if previous_owner is not None - else self._temp_storage + else self._temp_backend ) - self.owner.storage.initialize_data_for_component( + self.owner.backend_mapper.initialize_data_for_component( self.obj_type, self.id, initial_value=data_dict ) if previous_owner is not None: - previous_owner.storage.delete_data(self.obj_type, self.id) - previous_owner.storage.delete_data("meta", self.meta.storage_key) + previous_owner.backend_mapper.delete_data(self.obj_type, self.id) + previous_owner.backend_mapper.delete_data("meta", self.meta.backend_key) else: - del self._temp_storage + del self._temp_backend self._meta = self.init_meta(meta_vals) owner = property(get_owner, set_owner) @@ -110,14 +110,14 @@ def set_meta(self, new_meta): def get_data(self, property_name): if self._owner is None: - return self._temp_storage[property_name] - return self.owner.storage.get_data(self.obj_type, self.id, property_name) + return self._temp_backend[property_name] + return self.owner.backend_mapper.get_data(self.obj_type, self.id, property_name) def set_data(self, property_name, value): if self._owner is None: - self._temp_storage[property_name] = value + self._temp_backend[property_name] = value else: - self.owner.storage.update_data(self.obj_type, self.id, property_name, value) + self.owner.backend_mapper.update_data(self.obj_type, self.id, property_name, value) # def __eq__(self, other): # if type(self) != type(other): return False diff --git a/convokit/model/corpus_helpers.py b/convokit/model/corpus_helpers.py index 1da8017d..62a90aee 100644 --- a/convokit/model/corpus_helpers.py +++ b/convokit/model/corpus_helpers.py @@ -34,7 +34,7 @@ def get_corpus_id( - db_collection_prefix: Optional[str], filename: Optional[str], storage_type: str + db_collection_prefix: Optional[str], filename: Optional[str], backend: str ) -> Optional[str]: if db_collection_prefix is not None: # treat the unique collection prefix as the ID (even if a filename is specified) @@ -45,7 +45,7 @@ def get_corpus_id( else: corpus_id = None - if storage_type == "db" and corpus_id is not None: + if backend == "db" and corpus_id is not None: compatibility_msg = check_id_for_mongodb(corpus_id) if compatibility_msg is not None: random_id = create_safe_id() @@ -82,21 +82,21 @@ def get_corpus_dirpath(filename: str) -> Optional[str]: return os.path.dirname(filename) -def initialize_storage( - corpus: "Corpus", storage: Optional[BackendMapper], storage_type: str, db_host: Optional[str] +def initialize_backend( + corpus: "Corpus", backend_mapper: Optional[BackendMapper], backend: str, db_host: Optional[str] ): - if storage is not None: - return storage + if backend_mapper is not None: + return backend_mapper else: - if storage_type == "mem": + if backend == "mem": return MemMapper() - elif storage_type == "db": + elif backend == "db": if db_host is None: db_host = corpus.config.db_host return DBMapper(corpus.id, db_host) else: raise ValueError( - f"Unrecognized setting '{storage_type}' for storage type; should be either 'mem' or 'db'." + f"Unrecognized setting '{backend}' for backend type; should be either 'mem' or 'db'." ) @@ -820,7 +820,7 @@ def load_info_to_db(corpus, dir_name, obj_type, field, index_key="id", value_key its contents into the DB, and updates the Corpus' metadata index """ filename = os.path.join(dir_name, "info.%s.jsonl" % field) - meta_collection = corpus.storage.get_collection("meta") + meta_collection = corpus.backend_mapper.get_collection("meta") # attept to use saved type information index_file = os.path.join(dir_name, "index.json") @@ -947,19 +947,19 @@ def populate_db_from_file( return inserted_utt_ids -def init_corpus_from_storage_manager(corpus, utt_ids=None): +def init_corpus_from_backend_manager(corpus, utt_ids=None): """ Use an already-populated MongoDB database to initialize the components of the specified Corpus (which should be empty before this function is called) """ # we will bypass the initialization step when constructing components since # we know their necessary data already exists within the db - corpus.storage.bypass_init = True + corpus.backend_mapper.bypass_init = True # fetch object ids from the DB and initialize corpus components for them # create speakers first so we can refer to them when initializing utterances speakers = {} - for speaker_doc in corpus.storage.data["speaker"].find(projection=["_id"]): + for speaker_doc in corpus.backend_mapper.data["speaker"].find(projection=["_id"]): speaker_id = speaker_doc["_id"] speakers[speaker_id] = Speaker(owner=corpus, id=speaker_id) corpus.speakers = speakers @@ -967,7 +967,7 @@ def init_corpus_from_storage_manager(corpus, utt_ids=None): # next, create utterances utterances = {} convo_to_utts = defaultdict(list) - for utt_doc in corpus.storage.data["utterance"].find( + for utt_doc in corpus.backend_mapper.data["utterance"].find( projection=["_id", "speaker_id", "conversation_id"] ): utt_id = utt_doc["_id"] @@ -984,4 +984,4 @@ def init_corpus_from_storage_manager(corpus, utt_ids=None): corpus.update_speakers_data() # restore the BackendMapper's init behavior to default - corpus.storage.bypass_init = False + corpus.backend_mapper.bypass_init = False diff --git a/convokit/ranker/demos/ranker_demo.ipynb b/convokit/ranker/demos/ranker_demo.ipynb index d9dc1deb..aa045f56 100644 --- a/convokit/ranker/demos/ranker_demo.ipynb +++ b/convokit/ranker/demos/ranker_demo.ipynb @@ -24,7 +24,7 @@ } ], "source": [ - "corpus = Corpus(filename=download(\"subreddit-Cornell\"))" + "corpus = Corpus(filename=download('subreddit-Cornell'))" ] }, { @@ -187,7 +187,7 @@ "# Sanity check of (rank, score) pairings\n", "utt_sample = list(corpus.iter_utterances())[:10]\n", "\n", - "sorted([(utt.meta[\"rank\"], utt.meta[\"score\"]) for utt in utt_sample], key=lambda x: x[0])" + "sorted([(utt.meta['rank'], utt.meta['score']) for utt in utt_sample], key=lambda x: x[0]) " ] }, { @@ -203,12 +203,11 @@ "metadata": {}, "outputs": [], "source": [ - "ranker = convokit.Ranker(\n", - " obj_type=\"speaker\",\n", - " score_func=lambda user: len(list(user.iter_utterances())),\n", - " score_attribute_name=\"num_utts\",\n", - " rank_attribute_name=\"num_utts_rank\",\n", - ")" + "ranker = convokit.Ranker(obj_type=\"speaker\", \n", + " score_func=lambda user: len(list(user.iter_utterances())), \n", + " score_attribute_name=\"num_utts\",\n", + " rank_attribute_name=\"num_utts_rank\"\n", + " )" ] }, { @@ -344,10 +343,7 @@ "# Sanity check of (rank, score) pairings\n", "speaker_sample = list(corpus.iter_speakers())[:10]\n", "\n", - "sorted(\n", - " [(spkr.meta[\"num_utts_rank\"], spkr.meta[\"num_utts\"]) for spkr in speaker_sample],\n", - " key=lambda x: x[0],\n", - ")" + "sorted([(spkr.meta['num_utts_rank'], spkr.meta['num_utts']) for spkr in speaker_sample], key=lambda x: x[0]) " ] }, { diff --git a/convokit/surprise/demos/surprise_demo.ipynb b/convokit/surprise/demos/surprise_demo.ipynb index 0cf249f9..92946d6c 100644 --- a/convokit/surprise/demos/surprise_demo.ipynb +++ b/convokit/surprise/demos/surprise_demo.ipynb @@ -49,7 +49,7 @@ } ], "source": [ - "corpus = Corpus(filename=download(\"subreddit-Cornell\"))" + "corpus = Corpus(filename=download('subreddit-Cornell'))" ] }, { @@ -86,9 +86,7 @@ "metadata": {}, "outputs": [], "source": [ - "SPEAKER_BLACKLIST = [\"[deleted]\", \"DeltaBot\", \"AutoModerator\"]\n", - "\n", - "\n", + "SPEAKER_BLACKLIST = ['[deleted]', 'DeltaBot', 'AutoModerator']\n", "def utterance_is_valid(utterance):\n", " return utterance.speaker.id not in SPEAKER_BLACKLIST and utterance.text" ] @@ -119,7 +117,7 @@ "metadata": {}, "outputs": [], "source": [ - "speaker_activities = corpus.get_attribute_table(\"speaker\", [\"n_convos\"])" + "speaker_activities = corpus.get_attribute_table('speaker', ['n_convos'])" ] }, { @@ -221,7 +219,7 @@ } ], "source": [ - "speaker_activities.sort_values(\"n_convos\", ascending=False).head(10)" + "speaker_activities.sort_values('n_convos', ascending=False).head(10)" ] }, { @@ -230,7 +228,7 @@ "metadata": {}, "outputs": [], "source": [ - "top_speakers = speaker_activities.sort_values(\"n_convos\", ascending=False).head(100).index" + "top_speakers = speaker_activities.sort_values('n_convos', ascending=False).head(100).index" ] }, { @@ -241,10 +239,7 @@ "source": [ "import itertools\n", "\n", - "subset_utts = [\n", - " list(corpus.get_speaker(speaker).iter_utterances(selector=utterance_is_valid))\n", - " for speaker in top_speakers\n", - "]\n", + "subset_utts = [list(corpus.get_speaker(speaker).iter_utterances(selector=utterance_is_valid)) for speaker in top_speakers]\n", "subset_corpus = Corpus(utterances=list(itertools.chain(*subset_utts)))" ] }, @@ -292,9 +287,9 @@ "source": [ "import spacy\n", "\n", - "spacy_nlp = spacy.load(\"en_core_web_sm\", disable=[\"ner\", \"parser\", \"tagger\", \"lemmatizer\"])\n", + "spacy_nlp = spacy.load('en_core_web_sm', disable=['ner','parser', 'tagger', 'lemmatizer'])\n", "for utt in subset_corpus.iter_utterances():\n", - " utt.meta[\"joined_tokens\"] = [t.text.lower() for t in spacy_nlp(utt.text)]" + " utt.meta['joined_tokens'] = [t.text.lower() for t in spacy_nlp(utt.text)]" ] }, { @@ -303,14 +298,7 @@ "metadata": {}, "outputs": [], "source": [ - "surp = Surprise(\n", - " tokenizer=lambda x: x,\n", - " model_key_selector=lambda utt: \"_\".join([utt.speaker.id, utt.conversation_id]),\n", - " target_sample_size=100,\n", - " context_sample_size=1000,\n", - " n_samples=50,\n", - " smooth=True,\n", - ")" + "surp = Surprise(tokenizer=lambda x: x, model_key_selector=lambda utt: '_'.join([utt.speaker.id, utt.conversation_id]), target_sample_size=100, context_sample_size=1000, n_samples=50, smooth=True)" ] }, { @@ -328,20 +316,7 @@ } ], "source": [ - "surp = surp.fit(\n", - " subset_corpus,\n", - " text_func=lambda utt: [\n", - " list(\n", - " itertools.chain(\n", - " *[\n", - " u.meta[\"joined_tokens\"]\n", - " for u in utt.speaker.iter_utterances()\n", - " if u.conversation_id != utt.conversation_id\n", - " ]\n", - " )\n", - " )\n", - " ],\n", - ")" + "surp = surp.fit(subset_corpus, text_func=lambda utt: [list(itertools.chain(*[u.meta['joined_tokens'] for u in utt.speaker.iter_utterances() if u.conversation_id != utt.conversation_id]))])" ] }, { @@ -369,7 +344,7 @@ } ], "source": [ - "transformed_corpus = surp.transform(subset_corpus, obj_type=\"speaker\")" + "transformed_corpus = surp.transform(subset_corpus, obj_type='speaker')" ] }, { @@ -388,16 +363,10 @@ "source": [ "import pandas as pd\n", "from functools import reduce\n", - "\n", - "\n", - "def combine_dicts(x, y):\n", + "def combine_dicts(x,y):\n", " x.update(y)\n", " return x\n", - "\n", - "\n", - "surprise_scores = reduce(\n", - " combine_dicts, transformed_corpus.get_speakers_dataframe()[\"meta.surprise\"].values\n", - ")\n", + "surprise_scores = reduce(combine_dicts, transformed_corpus.get_speakers_dataframe()['meta.surprise'].values)\n", "suprise_series = pd.Series(surprise_scores).dropna()" ] }, diff --git a/convokit/surprise/demos/tennis_demo.ipynb b/convokit/surprise/demos/tennis_demo.ipynb index a3e9135d..a5012807 100644 --- a/convokit/surprise/demos/tennis_demo.ipynb +++ b/convokit/surprise/demos/tennis_demo.ipynb @@ -36,8 +36,8 @@ "metadata": {}, "outputs": [], "source": [ - "PATH = \"/home/axl4\" # replace with your path to tennis_data directory\n", - "data_dir = f\"{PATH}/tennis_data/\"" + "PATH = '/home/axl4' # replace with your path to tennis_data directory\n", + "data_dir = f'{PATH}/tennis_data/'" ] }, { @@ -46,7 +46,7 @@ "metadata": {}, "outputs": [], "source": [ - "corpus_speakers = {\"COMMENTATOR\": Speaker(id=\"COMMENTATOR\", meta={})}" + "corpus_speakers = {'COMMENTATOR': Speaker(id = 'COMMENTATOR', meta = {})}" ] }, { @@ -55,7 +55,7 @@ "metadata": {}, "outputs": [], "source": [ - "with open(data_dir + \"text_commentaries.json\", \"r\") as f:\n", + "with open(data_dir + 'text_commentaries.json', 'r') as f:\n", " commentaries = json.load(f)" ] }, @@ -76,17 +76,9 @@ "utterances = []\n", "count = 0\n", "for c in tqdm(commentaries):\n", - " idx = \"c{}\".format(count)\n", - " meta = {\"player_gender\": c[\"gender\"], \"scoreline\": c[\"scoreline\"]}\n", - " utterances.append(\n", - " Utterance(\n", - " id=idx,\n", - " speaker=corpus_speakers[\"COMMENTATOR\"],\n", - " conversation_id=idx,\n", - " text=c[\"commentary\"],\n", - " meta=meta,\n", - " )\n", - " )\n", + " idx = 'c{}'.format(count)\n", + " meta = {'player_gender': c['gender'], 'scoreline': c['scoreline']}\n", + " utterances.append(Utterance(id=idx, speaker=corpus_speakers['COMMENTATOR'], conversation_id=idx, text=c['commentary'], meta=meta))\n", " count += 1" ] }, @@ -121,7 +113,7 @@ } ], "source": [ - "interview_corpus = Corpus(filename=download(\"tennis-corpus\"))" + "interview_corpus = Corpus(filename=download('tennis-corpus'))" ] }, { @@ -156,11 +148,8 @@ "metadata": {}, "outputs": [], "source": [ - "for utt in interview_corpus.iter_utterances(selector=lambda u: u.meta[\"is_question\"]):\n", - " utt.add_meta(\n", - " \"player_gender\",\n", - " utt.get_conversation().get_utterance(utt.id.replace(\"q\", \"a\")).get_speaker().meta[\"gender\"],\n", - " )" + "for utt in interview_corpus.iter_utterances(selector=lambda u: u.meta['is_question']):\n", + " utt.add_meta('player_gender', utt.get_conversation().get_utterance(utt.id.replace('q', 'a')).get_speaker().meta['gender'])" ] }, { @@ -180,18 +169,10 @@ "source": [ "from nltk import word_tokenize\n", "\n", - "\n", "def tokenizer(text):\n", " return list(filter(lambda w: w.isalnum(), word_tokenize(text.lower())))\n", "\n", - "\n", - "surp = Surprise(\n", - " model_key_selector=lambda utt: \"corpus\",\n", - " tokenizer=tokenizer,\n", - " target_sample_size=10,\n", - " context_sample_size=None,\n", - " n_samples=3,\n", - ")" + "surp = Surprise(model_key_selector=lambda utt: 'corpus', tokenizer=tokenizer, target_sample_size=10, context_sample_size=None, n_samples=3)" ] }, { @@ -226,10 +207,7 @@ } ], "source": [ - "surp.fit(\n", - " game_commentary_corpus,\n", - " text_func=lambda utt: [\" \".join([u.text for u in game_commentary_corpus.iter_utterances()])],\n", - ")" + "surp.fit(game_commentary_corpus, text_func=lambda utt: [' '.join([u.text for u in game_commentary_corpus.iter_utterances()])])" ] }, { @@ -248,18 +226,9 @@ "import itertools\n", "\n", "SAMPLE = True\n", - "SAMPLE_SIZE = (\n", - " 10000 # edit this to change the number of interview questions to calculate surprise for\n", - ")\n", + "SAMPLE_SIZE = 10000 # edit this to change the number of interview questions to calculate surprise for\n", "\n", - "subset_utts = [\n", - " interview_corpus.get_utterance(utt)\n", - " for utt in interview_corpus.get_utterances_dataframe(\n", - " selector=lambda utt: utt.meta[\"is_question\"]\n", - " )\n", - " .sample(SAMPLE_SIZE)\n", - " .index\n", - "]\n", + "subset_utts = [interview_corpus.get_utterance(utt) for utt in interview_corpus.get_utterances_dataframe(selector=lambda utt: utt.meta['is_question']).sample(SAMPLE_SIZE).index]\n", "subset_corpus = Corpus(utterances=subset_utts) if SAMPLE else interview_corpus" ] }, @@ -294,7 +263,7 @@ } ], "source": [ - "surp.transform(subset_corpus, obj_type=\"utterance\", selector=lambda utt: utt.meta[\"is_question\"])" + "surp.transform(subset_corpus, obj_type='utterance', selector=lambda utt: utt.meta['is_question'])" ] }, { @@ -311,7 +280,7 @@ "metadata": {}, "outputs": [], "source": [ - "utterances = subset_corpus.get_utterances_dataframe(selector=lambda utt: utt.meta[\"is_question\"])" + "utterances = subset_corpus.get_utterances_dataframe(selector=lambda utt: utt.meta['is_question'])" ] }, { @@ -333,9 +302,7 @@ "source": [ "import pandas as pd\n", "\n", - "female_qs = pd.to_numeric(\n", - " utterances[utterances[\"meta.player_gender\"] == \"F\"][\"meta.surprise\"]\n", - ").dropna()\n", + "female_qs = pd.to_numeric(utterances[utterances['meta.player_gender'] == 'F']['meta.surprise']).dropna()\n", "female_qs.median()" ] }, @@ -356,9 +323,7 @@ } ], "source": [ - "male_qs = pd.to_numeric(\n", - " utterances[utterances[\"meta.player_gender\"] == \"M\"][\"meta.surprise\"]\n", - ").dropna()\n", + "male_qs = pd.to_numeric(utterances[utterances['meta.player_gender'] == 'M']['meta.surprise']).dropna()\n", "male_qs.median()" ] }, @@ -489,12 +454,7 @@ "metadata": {}, "outputs": [], "source": [ - "gender_models_surp = Surprise(\n", - " model_key_selector=lambda utt: utt.meta[\"player_gender\"],\n", - " target_sample_size=10,\n", - " context_sample_size=5000,\n", - " surprise_attr_name=\"surprise_gender_model\",\n", - ")" + "gender_models_surp = Surprise(model_key_selector=lambda utt: utt.meta['player_gender'], target_sample_size=10, context_sample_size=5000, surprise_attr_name='surprise_gender_model')" ] }, { @@ -522,7 +482,7 @@ } ], "source": [ - "gender_models_surp.fit(interview_corpus, selector=lambda utt: utt.meta[\"is_question\"])" + "gender_models_surp.fit(interview_corpus, selector=lambda utt: utt.meta['is_question'])" ] }, { @@ -558,13 +518,7 @@ } ], "source": [ - "gender_models_surp.transform(\n", - " subset_corpus,\n", - " obj_type=\"utterance\",\n", - " group_and_models=lambda utt: (utt.id, [\"M\", \"F\"]),\n", - " group_model_attr_key=lambda _, m: m,\n", - " selector=lambda utt: utt.meta[\"is_question\"],\n", - ")" + "gender_models_surp.transform(subset_corpus, obj_type='utterance', group_and_models=lambda utt: (utt.id, ['M', 'F']), group_model_attr_key=lambda _, m: m, selector=lambda utt: utt.meta['is_question'])" ] }, { @@ -581,7 +535,7 @@ "metadata": {}, "outputs": [], "source": [ - "utterances = subset_corpus.get_utterances_dataframe(selector=lambda utt: utt.meta[\"is_question\"])" + "utterances = subset_corpus.get_utterances_dataframe(selector=lambda utt: utt.meta['is_question'])" ] }, { @@ -601,9 +555,7 @@ } ], "source": [ - "utterances[utterances[\"meta.player_gender\"] == \"F\"][\"meta.surprise_gender_model\"].map(\n", - " lambda x: x[\"M\"]\n", - ").dropna().mean()" + "utterances[utterances['meta.player_gender'] == 'F']['meta.surprise_gender_model'].map(lambda x: x['M']).dropna().mean()" ] }, { @@ -623,9 +575,7 @@ } ], "source": [ - "utterances[utterances[\"meta.player_gender\"] == \"F\"][\"meta.surprise_gender_model\"].map(\n", - " lambda x: x[\"F\"]\n", - ").dropna().mean()" + "utterances[utterances['meta.player_gender'] == 'F']['meta.surprise_gender_model'].map(lambda x: x['F']).dropna().mean()" ] }, { @@ -645,9 +595,7 @@ } ], "source": [ - "utterances[utterances[\"meta.player_gender\"] == \"M\"][\"meta.surprise_gender_model\"].map(\n", - " lambda x: x[\"M\"]\n", - ").dropna().mean()" + "utterances[utterances['meta.player_gender'] == 'M']['meta.surprise_gender_model'].map(lambda x: x['M']).dropna().mean()" ] }, { @@ -667,9 +615,7 @@ } ], "source": [ - "utterances[utterances[\"meta.player_gender\"] == \"M\"][\"meta.surprise_gender_model\"].map(\n", - " lambda x: x[\"F\"]\n", - ").dropna().mean()" + "utterances[utterances['meta.player_gender'] == 'M']['meta.surprise_gender_model'].map(lambda x: x['F']).dropna().mean()" ] }, { diff --git a/convokit/tests/general/from_pandas/test_from_pandas.py b/convokit/tests/general/from_pandas/test_from_pandas.py index e9970857..58e554a5 100644 --- a/convokit/tests/general/from_pandas/test_from_pandas.py +++ b/convokit/tests/general/from_pandas/test_from_pandas.py @@ -48,7 +48,7 @@ def no_speaker_convo_dfs(self): class TestWithMem(CorpusFromPandas): def setUp(self) -> None: - self.corpus = Corpus(download("subreddit-hey"), storage_type="mem") + self.corpus = Corpus(download("subreddit-hey"), backend="mem") self.utt_df = self.corpus.get_utterances_dataframe() self.convo_df = self.corpus.get_conversations_dataframe() self.speaker_df = self.corpus.get_speakers_dataframe() @@ -72,7 +72,7 @@ def test_no_speaker_convo_dfs(self): class TestWithDB(CorpusFromPandas): def setUp(self) -> None: - self.corpus = Corpus(download("subreddit-hey"), storage_type="db") + self.corpus = Corpus(download("subreddit-hey"), backend="db") self.utt_df = self.corpus.get_utterances_dataframe() self.convo_df = self.corpus.get_conversations_dataframe() self.speaker_df = self.corpus.get_speakers_dataframe() diff --git a/convokit/tests/general/load_and_dump_corpora/test_load_dump_corpora.py b/convokit/tests/general/load_and_dump_corpora/test_load_dump_corpora.py index b3c4c0a3..ebcc55c8 100644 --- a/convokit/tests/general/load_and_dump_corpora/test_load_dump_corpora.py +++ b/convokit/tests/general/load_and_dump_corpora/test_load_dump_corpora.py @@ -10,33 +10,33 @@ """ -@pytest.mark.parametrize("storage_type", ["mem", "db"]) -def test_load_dump_subreddit(storage_type): - corpus = Corpus(download("subreddit-hey"), storage_type=storage_type) +@pytest.mark.parametrize("backend", ["mem", "db"]) +def test_load_dump_subreddit(backend): + corpus = Corpus(download("subreddit-hey"), backend=backend) corpus.dump("subreddit") -@pytest.mark.parametrize("storage_type", ["mem", "db"]) -def test_load_dump_tennis(storage_type): - corpus = Corpus(download("tennis-corpus"), storage_type=storage_type) +@pytest.mark.parametrize("backend", ["mem", "db"]) +def test_load_dump_tennis(backend): + corpus = Corpus(download("tennis-corpus"), backend=backend) corpus.dump("tennis-corpus") -@pytest.mark.parametrize("storage_type", ["mem", "db"]) -def test_load_dump_politeness(storage_type): - corpus = Corpus(download("wikipedia-politeness-corpus"), storage_type=storage_type) +@pytest.mark.parametrize("backend", ["mem", "db"]) +def test_load_dump_politeness(backend): + corpus = Corpus(download("wikipedia-politeness-corpus"), backend=backend) corpus.dump("wikipedia-politeness-corpus") -@pytest.mark.parametrize("storage_type", ["mem", "db"]) -def test_load_dump_switchboard(storage_type): - corpus = Corpus(download("switchboard-corpus"), storage_type=storage_type) +@pytest.mark.parametrize("backend", ["mem", "db"]) +def test_load_dump_switchboard(backend): + corpus = Corpus(download("switchboard-corpus"), backend=backend) corpus.dump("switchboard-corpus") -@pytest.mark.parametrize("storage_type", ["mem", "db"]) -def test_load_wikiconv(storage_type): - corpus = Corpus(download("wikiconv-2004"), storage_type=storage_type) +@pytest.mark.parametrize("backend", ["mem", "db"]) +def test_load_wikiconv(backend): + corpus = Corpus(download("wikiconv-2004"), backend=backend) corpus.dump("switchboard-corpus") diff --git a/convokit/tests/general/merge_corpus/test_merge_corpus.py b/convokit/tests/general/merge_corpus/test_merge_corpus.py index c06489de..c29e91be 100644 --- a/convokit/tests/general/merge_corpus/test_merge_corpus.py +++ b/convokit/tests/general/merge_corpus/test_merge_corpus.py @@ -29,14 +29,16 @@ def no_overlap(self): self.assertEqual(len(list(merged.iter_speakers())), 6) for utt_id in all_utt_ids: - self.assertTrue(merged.storage.has_data_for_component("utterance", utt_id)) + self.assertTrue(merged.backend_mapper.has_data_for_component("utterance", utt_id)) for speaker_id in all_speaker_ids: - self.assertTrue(merged.storage.has_data_for_component("speaker", speaker_id)) + self.assertTrue(merged.backend_mapper.has_data_for_component("speaker", speaker_id)) - for component_type in self.base_corpus.storage.data.keys(): - self.assertEqual(self.base_corpus.storage.count_entries(component_type), 0) - for component_type in self.non_overlapping_corpus.storage.data.keys(): - self.assertEqual(self.non_overlapping_corpus.storage.count_entries(component_type), 0) + for component_type in self.base_corpus.backend_mapper.data.keys(): + self.assertEqual(self.base_corpus.backend_mapper.count_entries(component_type), 0) + for component_type in self.non_overlapping_corpus.backend_mapper.data.keys(): + self.assertEqual( + self.non_overlapping_corpus.backend_mapper.count_entries(component_type), 0 + ) def with_overlap(self): """ @@ -55,14 +57,16 @@ def with_overlap(self): self.assertEqual(len(list(merged.iter_speakers())), 5) for utt_id in all_utt_ids: - self.assertTrue(merged.storage.has_data_for_component("utterance", utt_id)) + self.assertTrue(merged.backend_mapper.has_data_for_component("utterance", utt_id)) for speaker_id in all_speaker_ids: - self.assertTrue(merged.storage.has_data_for_component("speaker", speaker_id)) + self.assertTrue(merged.backend_mapper.has_data_for_component("speaker", speaker_id)) - for component_type in self.base_corpus.storage.data.keys(): - self.assertEqual(self.base_corpus.storage.count_entries(component_type), 0) - for component_type in self.overlapping_corpus.storage.data.keys(): - self.assertEqual(self.overlapping_corpus.storage.count_entries(component_type), 0) + for component_type in self.base_corpus.backend_mapper.data.keys(): + self.assertEqual(self.base_corpus.backend_mapper.count_entries(component_type), 0) + for component_type in self.overlapping_corpus.backend_mapper.data.keys(): + self.assertEqual( + self.overlapping_corpus.backend_mapper.count_entries(component_type), 0 + ) def overlap_diff_data(self): """ @@ -87,19 +91,23 @@ def overlap_diff_data(self): self.assertEqual(merged.get_utterance("2").speaker.id, "charlie") for utt_id in all_utt_ids: - self.assertTrue(merged.storage.has_data_for_component("utterance", utt_id)) + self.assertTrue(merged.backend_mapper.has_data_for_component("utterance", utt_id)) for speaker_id in all_speaker_ids: if ( speaker_id == "candace" ): # this speaker shouldn't be present due to overlap prioritization - self.assertFalse(merged.storage.has_data_for_component("speaker", speaker_id)) + self.assertFalse( + merged.backend_mapper.has_data_for_component("speaker", speaker_id) + ) else: - self.assertTrue(merged.storage.has_data_for_component("speaker", speaker_id)) + self.assertTrue(merged.backend_mapper.has_data_for_component("speaker", speaker_id)) - for component_type in self.base_corpus.storage.data.keys(): - self.assertEqual(self.base_corpus.storage.count_entries(component_type), 0) - for component_type in self.overlapping_corpus.storage.data.keys(): - self.assertEqual(self.overlapping_corpus.storage.count_entries(component_type), 0) + for component_type in self.base_corpus.backend_mapper.data.keys(): + self.assertEqual(self.base_corpus.backend_mapper.count_entries(component_type), 0) + for component_type in self.overlapping_corpus.backend_mapper.data.keys(): + self.assertEqual( + self.overlapping_corpus.backend_mapper.count_entries(component_type), 0 + ) def overlap_diff_metadata(self): """ @@ -129,16 +137,22 @@ def overlap_diff_metadata(self): self.assertEqual(merged.get_utterance("2").meta["the"], "ringo") for utt_id in all_utt_ids: - self.assertTrue(merged.storage.has_data_for_component("utterance", utt_id)) - self.assertTrue(merged.storage.has_data_for_component("meta", f"utterance_{utt_id}")) + self.assertTrue(merged.backend_mapper.has_data_for_component("utterance", utt_id)) + self.assertTrue( + merged.backend_mapper.has_data_for_component("meta", f"utterance_{utt_id}") + ) for speaker_id in all_speaker_ids: - self.assertTrue(merged.storage.has_data_for_component("speaker", speaker_id)) - self.assertTrue(merged.storage.has_data_for_component("meta", f"speaker_{speaker_id}")) + self.assertTrue(merged.backend_mapper.has_data_for_component("speaker", speaker_id)) + self.assertTrue( + merged.backend_mapper.has_data_for_component("meta", f"speaker_{speaker_id}") + ) - for component_type in self.base_corpus.storage.data.keys(): - self.assertEqual(self.base_corpus.storage.count_entries(component_type), 0) - for component_type in self.overlapping_corpus.storage.data.keys(): - self.assertEqual(self.overlapping_corpus.storage.count_entries(component_type), 0) + for component_type in self.base_corpus.backend_mapper.data.keys(): + self.assertEqual(self.base_corpus.backend_mapper.count_entries(component_type), 0) + for component_type in self.overlapping_corpus.backend_mapper.data.keys(): + self.assertEqual( + self.overlapping_corpus.backend_mapper.count_entries(component_type), 0 + ) def overlap_convo_metadata(self): """ @@ -158,24 +172,26 @@ def overlap_convo_metadata(self): self.assertEqual(len(merged.get_conversation("convo1").meta), 3) self.assertEqual(merged.get_conversation("convo1").meta["hello"], "food") - self.assertTrue(merged.storage.has_data_for_component("conversation", "convo1")) - self.assertTrue(merged.storage.has_data_for_component("meta", "conversation_convo1")) + self.assertTrue(merged.backend_mapper.has_data_for_component("conversation", "convo1")) + self.assertTrue(merged.backend_mapper.has_data_for_component("meta", "conversation_convo1")) self.assertFalse( - self.base_corpus_with_convo_id.storage.has_data_for_component("conversation", "convo1") + self.base_corpus_with_convo_id.backend_mapper.has_data_for_component( + "conversation", "convo1" + ) ) self.assertFalse( - self.overlapping_corpus_with_convo_id.storage.has_data_for_component( + self.overlapping_corpus_with_convo_id.backend_mapper.has_data_for_component( "conversation", "convo1" ) ) self.assertFalse( - self.base_corpus_with_convo_id.storage.has_data_for_component( + self.base_corpus_with_convo_id.backend_mapper.has_data_for_component( "meta", "conversation_convo1" ) ) self.assertFalse( - self.overlapping_corpus_with_convo_id.storage.has_data_for_component( + self.overlapping_corpus_with_convo_id.backend_mapper.has_data_for_component( "meta", "conversation_convo1" ) ) @@ -225,7 +241,7 @@ def add_utterance(self): self.assertEqual(added.get_utterance("5").speaker.id, "foxtrot") for utt in added.iter_utterances(): - self.assertFalse(hasattr(utt, "_temp_storage")) + self.assertFalse(hasattr(utt, "_temp_backend")) class TestWithMem(CorpusMerge): diff --git a/convokit/tests/notebook_testers/convokitIndex_issues_demo.ipynb b/convokit/tests/notebook_testers/convokitIndex_issues_demo.ipynb index fc704139..212183fb 100644 --- a/convokit/tests/notebook_testers/convokitIndex_issues_demo.ipynb +++ b/convokit/tests/notebook_testers/convokitIndex_issues_demo.ipynb @@ -7,8 +7,7 @@ "outputs": [], "source": [ "import os\n", - "\n", - "os.chdir(\"../..\")" + "os.chdir('../..')" ] }, { @@ -27,7 +26,7 @@ "metadata": {}, "outputs": [], "source": [ - "utterances = [Utterance(id=str(i), speaker=User(id=\"speaker\" + str(i))) for i in range(10)]" + "utterances = [Utterance(id=str(i), speaker=User(id='speaker'+str(i))) for i in range(10)]" ] }, { @@ -158,7 +157,7 @@ "outputs": [], "source": [ "for utt in corpus.iter_utterances():\n", - " utt.meta[\"good_meta\"] = 1" + " utt.meta['good_meta'] = 1" ] }, { @@ -191,8 +190,8 @@ "metadata": {}, "outputs": [], "source": [ - "for utt in corpus.iter_utterances(): # annotate first utt\n", - " utt.meta[\"okay_meta\"] = 1\n", + "for utt in corpus.iter_utterances(): # annotate first utt\n", + " utt.meta['okay_meta'] = 1\n", " break" ] }, @@ -226,10 +225,10 @@ "metadata": {}, "outputs": [], "source": [ - "idx = 1 ##\n", - "for utt in corpus.iter_utterances(): # annotate second utt\n", + "idx = 1 ## \n", + "for utt in corpus.iter_utterances(): # annotate second utt\n", " if idx == 2:\n", - " utt.meta[\"okay_meta2\"] = 1\n", + " utt.meta['okay_meta2'] = 1\n", " idx += 1" ] }, @@ -263,11 +262,11 @@ "metadata": {}, "outputs": [], "source": [ - "for idx, utt in enumerate(corpus.iter_utterances()): # annotate alternating utts\n", + "for idx, utt in enumerate(corpus.iter_utterances()): # annotate alternating utts\n", " if idx % 2:\n", - " utt.meta[\"bad_meta\"] = 1\n", + " utt.meta['bad_meta'] = 1\n", " else:\n", - " utt.meta[\"bad_meta\"] = None" + " utt.meta['bad_meta'] = None\n" ] }, { @@ -319,7 +318,7 @@ "outputs": [], "source": [ "for utt in corpus.iter_utterances():\n", - " utt.meta[\"to_be_deleted\"] = 1" + " utt.meta['to_be_deleted'] = 1" ] }, { @@ -352,7 +351,7 @@ "metadata": {}, "outputs": [], "source": [ - "del corpus.random_utterance().meta[\"to_be_deleted\"]" + "del corpus.random_utterance().meta['to_be_deleted']" ] }, { @@ -379,7 +378,7 @@ ], "source": [ "for utt in corpus.iter_utterances():\n", - " print(utt.meta.get(\"to_be_deleted\", None))" + " print(utt.meta.get('to_be_deleted', None))" ] }, { diff --git a/convokit/tests/notebook_testers/exclude_meta_tests.ipynb b/convokit/tests/notebook_testers/exclude_meta_tests.ipynb index ce619b81..62c435b0 100644 --- a/convokit/tests/notebook_testers/exclude_meta_tests.ipynb +++ b/convokit/tests/notebook_testers/exclude_meta_tests.ipynb @@ -7,8 +7,7 @@ "outputs": [], "source": [ "import os\n", - "\n", - "os.chdir(\"../../..\")\n", + "os.chdir('../../..')\n", "import convokit" ] }, @@ -35,7 +34,7 @@ } ], "source": [ - "corpus = Corpus(filename=download(\"subreddit-lol\"))" + "corpus = Corpus(filename=download('subreddit-lol'))" ] }, { @@ -80,13 +79,10 @@ } ], "source": [ - "corpus2 = Corpus(\n", - " filename=download(\"subreddit-lol\"),\n", - " exclude_conversation_meta=[\"subreddit\"],\n", - " exclude_speaker_meta=[\"num_posts\"],\n", - " exclude_utterance_meta=[\"score\"],\n", - " exclude_overall_meta=[\"num_posts\"],\n", - ")" + "corpus2 = Corpus(filename=download('subreddit-lol'), exclude_conversation_meta=['subreddit'],\n", + " exclude_speaker_meta=['num_posts'],\n", + " exclude_utterance_meta=['score'],\n", + " exclude_overall_meta=['num_posts'])" ] }, { diff --git a/convokit/tests/notebook_testers/reindex_conversations_example.ipynb b/convokit/tests/notebook_testers/reindex_conversations_example.ipynb index 5eb93ccb..7132649b 100644 --- a/convokit/tests/notebook_testers/reindex_conversations_example.ipynb +++ b/convokit/tests/notebook_testers/reindex_conversations_example.ipynb @@ -7,8 +7,7 @@ "outputs": [], "source": [ "import os\n", - "\n", - "os.chdir(\"..\")" + "os.chdir('..')" ] }, { @@ -71,23 +70,28 @@ " 4 5 6 7 8 9\n", "10 11\n", "\"\"\"\n", - "corpus = Corpus(\n", - " utterances=[\n", - " Utterance(id=\"0\", reply_to=None, root=\"0\", user=User(name=\"alice\"), timestamp=0),\n", - " Utterance(id=\"2\", reply_to=\"0\", root=\"0\", user=User(name=\"alice\"), timestamp=2),\n", - " Utterance(id=\"1\", reply_to=\"0\", root=\"0\", user=User(name=\"alice\"), timestamp=1),\n", - " Utterance(id=\"3\", reply_to=\"0\", root=\"0\", user=User(name=\"alice\"), timestamp=3),\n", - " Utterance(id=\"4\", reply_to=\"1\", root=\"0\", user=User(name=\"alice\"), timestamp=4),\n", - " Utterance(id=\"5\", reply_to=\"1\", root=\"0\", user=User(name=\"alice\"), timestamp=5),\n", - " Utterance(id=\"6\", reply_to=\"1\", root=\"0\", user=User(name=\"alice\"), timestamp=6),\n", - " Utterance(id=\"7\", reply_to=\"2\", root=\"0\", user=User(name=\"alice\"), timestamp=4),\n", - " Utterance(id=\"8\", reply_to=\"2\", root=\"0\", user=User(name=\"alice\"), timestamp=5),\n", - " Utterance(id=\"9\", reply_to=\"3\", root=\"0\", user=User(name=\"alice\"), timestamp=4),\n", - " Utterance(id=\"10\", reply_to=\"4\", root=\"0\", user=User(name=\"alice\"), timestamp=5),\n", - " Utterance(id=\"11\", reply_to=\"9\", root=\"0\", user=User(name=\"alice\"), timestamp=10),\n", - " Utterance(id=\"other\", reply_to=None, root=\"other\", user=User(name=\"alice\"), timestamp=99),\n", - " ]\n", - ")" + "corpus = Corpus(utterances = [\n", + " Utterance(id=\"0\", reply_to=None, root=\"0\", user=User(name=\"alice\"), timestamp=0),\n", + "\n", + " Utterance(id=\"2\", reply_to=\"0\", root=\"0\", user=User(name=\"alice\"), timestamp=2),\n", + " Utterance(id=\"1\", reply_to=\"0\", root=\"0\", user=User(name=\"alice\"), timestamp=1),\n", + " Utterance(id=\"3\", reply_to=\"0\", root=\"0\", user=User(name=\"alice\"), timestamp=3),\n", + "\n", + " Utterance(id=\"4\", reply_to=\"1\", root=\"0\", user=User(name=\"alice\"), timestamp=4),\n", + " Utterance(id=\"5\", reply_to=\"1\", root=\"0\", user=User(name=\"alice\"), timestamp=5),\n", + " Utterance(id=\"6\", reply_to=\"1\", root=\"0\", user=User(name=\"alice\"), timestamp=6),\n", + "\n", + " Utterance(id=\"7\", reply_to=\"2\", root=\"0\", user=User(name=\"alice\"), timestamp=4),\n", + " Utterance(id=\"8\", reply_to=\"2\", root=\"0\", user=User(name=\"alice\"), timestamp=5),\n", + "\n", + " Utterance(id=\"9\", reply_to=\"3\", root=\"0\", user=User(name=\"alice\"), timestamp=4),\n", + "\n", + " Utterance(id=\"10\", reply_to=\"4\", root=\"0\", user=User(name=\"alice\"), timestamp=5),\n", + "\n", + " Utterance(id=\"11\", reply_to=\"9\", root=\"0\", user=User(name=\"alice\"), timestamp=10),\n", + "\n", + " Utterance(id=\"other\", reply_to=None, root=\"other\", user=User(name=\"alice\"), timestamp=99)\n", + "])" ] }, { @@ -103,8 +107,8 @@ "metadata": {}, "outputs": [], "source": [ - "corpus.get_conversation(\"0\").meta[\"hey\"] = \"jude\"\n", - "corpus.meta[\"foo\"] = \"bar\"" + "corpus.get_conversation(\"0\").meta['hey'] = 'jude'\n", + "corpus.meta['foo'] = 'bar'" ] }, { diff --git a/convokit/tests/test_utils.py b/convokit/tests/test_utils.py index 42bd5759..87b37a48 100644 --- a/convokit/tests/test_utils.py +++ b/convokit/tests/test_utils.py @@ -267,7 +267,7 @@ def reload_corpus_in_db_mode(corpus): corpus_id = "_" + uuid4().hex try: corpus.dump(corpus_id, base_path=".") - db_corpus = Corpus(corpus_id, storage_type="db") + db_corpus = Corpus(corpus_id, backend="db") return db_corpus finally: if os.path.exists(corpus_id): diff --git a/convokit/text_processing/demo/cleaning_text.ipynb b/convokit/text_processing/demo/cleaning_text.ipynb index 64bc4fb5..846ca438 100644 --- a/convokit/text_processing/demo/cleaning_text.ipynb +++ b/convokit/text_processing/demo/cleaning_text.ipynb @@ -7,8 +7,7 @@ "outputs": [], "source": [ "import os\n", - "\n", - "os.chdir(\"../../..\")" + "os.chdir('../../..')" ] }, { @@ -59,7 +58,7 @@ } ], "source": [ - "corpus = Corpus(filename=download(\"subreddit-Cornell\"))" + "corpus = Corpus(filename=download('subreddit-Cornell'))" ] }, { @@ -98,7 +97,7 @@ } ], "source": [ - "corpus.get_utterance(\"15enm8\").text" + "corpus.get_utterance('15enm8').text" ] }, { @@ -152,7 +151,7 @@ } ], "source": [ - "corpus.get_utterance(\"15enm8\").text" + "corpus.get_utterance('15enm8').text" ] }, { @@ -180,7 +179,7 @@ } ], "source": [ - "corpus.get_utterance(\"15enm8\").meta" + "corpus.get_utterance('15enm8').meta" ] }, { @@ -223,7 +222,7 @@ ], "source": [ "cleaner = TextCleaner(replace_text=True, save_original=True, verbosity=10000)\n", - "corpus = Corpus(filename=download(\"subreddit-Cornell\"))\n", + "corpus = Corpus(filename=download('subreddit-Cornell'))\n", "cleaner.transform(corpus)" ] }, @@ -244,7 +243,7 @@ } ], "source": [ - "corpus.get_utterance(\"15enm8\").text" + "corpus.get_utterance('15enm8').text" ] }, { @@ -264,7 +263,7 @@ } ], "source": [ - "corpus.get_utterance(\"15enm8\").meta[\"original\"]" + "corpus.get_utterance('15enm8').meta['original']" ] }, { @@ -307,7 +306,7 @@ ], "source": [ "cleaner = TextCleaner(replace_text=False, verbosity=10000)\n", - "corpus = Corpus(filename=download(\"subreddit-Cornell\"))\n", + "corpus = Corpus(filename=download('subreddit-Cornell'))\n", "cleaner.transform(corpus)" ] }, @@ -328,7 +327,7 @@ } ], "source": [ - "corpus.get_utterance(\"15enm8\").text" + "corpus.get_utterance('15enm8').text" ] }, { @@ -348,7 +347,7 @@ } ], "source": [ - "corpus.get_utterance(\"15enm8\").meta[\"cleaned\"]" + "corpus.get_utterance('15enm8').meta['cleaned']" ] }, { diff --git a/docs/source/config.rst b/docs/source/config.rst index 56a92444..9b076f35 100644 --- a/docs/source/config.rst +++ b/docs/source/config.rst @@ -5,4 +5,4 @@ After you import convokit for the first time, a default configuration file will There are currently three variables: db_host: data_directory: -default_storage_mode: +default_backend: diff --git a/docs/source/db_setup.rst b/docs/source/db_setup.rst index 13f6b843..a4b9eea5 100644 --- a/docs/source/db_setup.rst +++ b/docs/source/db_setup.rst @@ -1,10 +1,10 @@ Setting Up MongoDB For ConvoKit =============================== -`The MongoDB Documentation `_ provides a complete -guide on installing and running a MongoDB server. Here, we provide a simplified -guide to getting MongoDB setup to use with ConvoKit's DB Storage mode, in a handful -of settings. +`The MongoDB Documentation `_ provides a complete +guide on installing and running a MongoDB server. Here, we provide a simplified +guide to getting MongoDB setup to use with ConvoKit's DB Backend, in a handful +of settings. Running MongoDB with Conda -------------------------- @@ -12,24 +12,24 @@ Running MongoDB with Conda 0. Install conda if needed, following `these instructions `_ for your system. 1. (Optional) Create a new environment where you want to install mongodb: -:: +:: $ conda create --name my_env 2. Activate your newly created environment, or an existing environment where you want to install mongodb: -:: +:: $ conda activate my_env 3. Install the mongodb package. -:: +:: $ conda install mongodb -Check to see if version is at least 5.0. +Check to see if version is at least 5.0. :: @@ -38,28 +38,28 @@ Check to see if version is at least 5.0. If not, utilize: :: - + $ conda install -c conda-forge mongodb=5.0 4. Start the MongoDB server as a daemon process. -:: +:: - $ mongod --fork --logpath --dbpath + $ mongod --fork --logpath --dbpath 5. Use the MongoDB server for ConvoKit! 6. To stop the MongoDB server, on Linux or MacOS, use the ``htop`` command to find the mongod process ID and run: -:: +:: $ kill 6. Alternitivly, to stop the MongoDB server on Linux, run -:: +:: - $ mongod --shutdown + $ mongod --shutdown Sometimes, the above process doesn't work for MacOS. However, there is another solution for MacOS users below. @@ -85,7 +85,7 @@ Running MongoDB on MacOS with Homebrew 3. Use the MongoDB server for ConvoKit! 4. To stop the MongoDB server, run -:: +:: $ brew services stop mongodb-community@5.0 @@ -93,15 +93,15 @@ Using MongoDB Atlas: A remote MongoDB server in the cloud --------------------------------------------------------- MongoDB offers a cloud service version of their database, called MongoDB Atlas. -Atlas provides a free tier that is a good option for starting out with ConvoKit -remote DB storage, and several paid tiers that provide production level performance. +Atlas provides a free tier that is a good option for starting out with ConvoKit +remote DB backend, and several paid tiers that provide production level performance. Follow these instructions, based on `the instructions for getting started with Atlas -provided by the MongoDB team `_, +provided by the MongoDB team `_, to setup a MongoDB server in the cloud for use with ConvoKit. 0. Register a new MongoDB Atlas account here: https://account.mongodb.com/account/register, and log into the Atlas UI. 1. Create a new MongoDB cluster and a database user within the Atlas UI. 2. Add your IP address to the set of approved IP addresses that can connect to cluster, and setup a DB user, within the Atlas UI (as suggested in the "Setup connection security" tab). 3. In the "Choose a connection method" tab, select "Connect your Application" and choose Python as your driver. Then, copy the outputted URI, which should look something like ``mongodb+srv://:@cluster0.m0srt.mongodb.net/myFirstDatabase?retryWrites=true&w=majority`` -4. Paste the aforementioned URI into ~/.convokit/config.yml in the db_host field. Then, replace and with the credentials you setup in step 1, and replace ``myFirstDatabase`` with ``convokit``. -5. Use the remote MongoDB server for ConvoKit! \ No newline at end of file +4. Paste the aforementioned URI into ~/.convokit/config.yml in the db_host field. Then, replace and with the credentials you setup in step 1, and replace ``myFirstDatabase`` with ``convokit``. +5. Use the remote MongoDB server for ConvoKit! diff --git a/docs/source/storage_options.rst b/docs/source/storage_options.rst index b6d0bec7..bf0390be 100644 --- a/docs/source/storage_options.rst +++ b/docs/source/storage_options.rst @@ -34,11 +34,11 @@ How to Change Backends Once you have chosen the backend that best suits your purposes, the next step is to tell ConvoKit to use it. This can be done in three ways: -#. Corpus-level: ConvoKit supports specifying a backend on a per-Corpus basis. This is done through the ``storage_type`` parameter when constructing a corpus. You can set this parameter to the string ``"mem"`` for the native Python backend or ``"db"`` for the MongoDB backend. It is possible to mix Python-backed and MongoDB-backed corpora in the same script. +#. Corpus-level: ConvoKit supports specifying a backend on a per-Corpus basis. This is done through the ``backend`` parameter when constructing a corpus. You can set this parameter to the string ``"mem"`` for the native Python backend or ``"db"`` for the MongoDB backend. It is possible to mix Python-backed and MongoDB-backed corpora in the same script. -#. System-level: If you want to change the *default* backend in all ConvoKit code that runs on your computer (i.e., the backend that gets used when the ``storage_type`` parameter is not given), this is controlled by the ConvoKit system setting ``"default_storage_mode"``. This is set to ``"mem"`` when ConvoKit is first installed, but you can change it to ``"db"`` to tell ConvoKit to use the MongoDB backend by default. Note: ConvoKit system settings are found in the ``config.yml`` file, which is located in the hidden directory ``~/.convokit``. +#. System-level: If you want to change the *default* backend in all ConvoKit code that runs on your computer (i.e., the backend that gets used when the ``backend`` parameter is not given), this is controlled by the ConvoKit system setting ``"default_backend"``. This is set to ``"mem"`` when ConvoKit is first installed, but you can change it to ``"db"`` to tell ConvoKit to use the MongoDB backend by default. Note: ConvoKit system settings are found in the ``config.yml`` file, which is located in the hidden directory ``~/.convokit``. -#. Script-level: As an in-between option, if you want to change the default storage option used in a specific Python script but not at the whole-system level, you can do this by setting the environment variable ``CONVOKIT_STORAGE_MODE`` before running your script. For example, if you normally run your script as ``python3 myscript.py``, running it instead as ``CONVOKIT_STORAGE_MODE=db python myscript.py`` will set the default storage mode to MongoDB for that run of the script only. +#. Script-level: As an in-between option, if you want to change the default backend option used in a specific Python script but not at the whole-system level, you can do this by setting the environment variable ``CONVOKIT_BACKEND`` before running your script. For example, if you normally run your script as ``python3 myscript.py``, running it instead as ``CONVOKIT_BACKEND=db python myscript.py`` will set the default backend to MongoDB for that run of the script only. Differences in Corpus behavior between backends =============================================== @@ -46,7 +46,7 @@ For the most part, the two backends are designed to be interchangeable; that is, We made deliberate design choices during implementation to ensure consistent behavior of the code between the two supported backends. However, some specifics of MongoDB result in one minor differences in Corpus behavior that you should be aware of when writing your code. -Since the MongoDB backend uses a MongoDB database as its data storage system, it needs to give that database a name. +Since the MongoDB backend uses a MongoDB database as its data storage backend, it needs to give that database a name. Thus, there is an additional parameter in the Corpus constructor, db_collection_prefix, which is only used by the MongoDB backend. This parameter determines how the MongoDB database will be named. Note that you still have the option of not specifying a name, but in this case a random name will be used. diff --git a/docs/source/troubleshooting.rst b/docs/source/troubleshooting.rst index ddf32858..13c7d267 100644 --- a/docs/source/troubleshooting.rst +++ b/docs/source/troubleshooting.rst @@ -65,8 +65,8 @@ and if that doesn't fix the issue, then run: Immutability of Metadata Fields ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Starting with 3.0, ConvoKit disallows mutation on Metadata fields to prevent unintended data loss and ensure the integrity of the corpus metadata storage. -When accessing a Metadata field, a deep copy of the field is returned to prevent mutation changes to the copy from affecting the storage. +Starting with 3.0, ConvoKit disallows mutation on Metadata fields to prevent unintended data loss and ensure the integrity of the corpus metadata backend storage. +When accessing a Metadata field, a deep copy of the field is returned to prevent mutation changes to the copy from affecting the backend storage. This behavior is intended to ensure consistency between DB and MEM modes, since permitting mutations to mutable metadata fields in DB mode would solely modify the in-memory data without updating the database, thereby risking potential data loss. Therefore, all metadata values must be treated as *immutable*. This does not really make a difference for primitive values like ints and strings, @@ -80,8 +80,8 @@ Because lists are considered mutable in Python, you might expect the following c >>> saved_foo.append("new value") However, it will not work starting with the 3.0 version of ConvoKit; the code will run, but only the variable ``saved_foo`` will be affected, not the actual metadata storage of ``my_utt``. -This is because ``saved_foo`` only contains a copy of the data from the storage. -Thus, any operations that are done directly on ``saved_foo`` are done only to the copy, and do not involve any storage writes. +This is because ``saved_foo`` only contains a copy of the data from the backend storage. +Thus, any operations that are done directly on ``saved_foo`` are done only to the copy, and do not involve any backend storage writes. It is therefore necessary to treat *all* metadata objects, regardless of type, as immutable. Thus, the way to change metadata is the same way you would change an int or string type metadata entry: that is, by completely overwriting it. @@ -92,4 +92,4 @@ For example, to achieve the desired effect with the ``"foo"`` metadata entry fro >>> my_utt.meta["foo"] = temp_foo By adding the additional line of code that overwrites the ``"foo"`` metadata entry, you are telling ConvoKit that you want to update the value of ``"foo"`` in the storage’s metadata table with a new value, represented by ``temp_foo`` which contains the new additional item. -Thus the contents of ``temp_foo`` will get written to the storage as the new value of ``my_utt.meta["foo"]``, hence updating the metadata as desired. +Thus the contents of ``temp_foo`` will get written to the backend storage as the new value of ``my_utt.meta["foo"]``, hence updating the metadata as desired. diff --git a/examples/Introduction_to_ConvoKit.ipynb b/examples/Introduction_to_ConvoKit.ipynb index c2138e6e..ec5158ee 100644 --- a/examples/Introduction_to_ConvoKit.ipynb +++ b/examples/Introduction_to_ConvoKit.ipynb @@ -32,22 +32,15 @@ "# for pretty printing of cells within the Colab version of this notebook\n", "from IPython.display import HTML, display\n", "\n", - "\n", "def set_css():\n", - " display(\n", - " HTML(\n", - " \"\"\"\n", + " display(HTML('''\n", " \n", - " \"\"\"\n", - " )\n", - " )\n", - "\n", - "\n", - "get_ipython().events.register(\"pre_run_cell\", set_css)" + " '''))\n", + "get_ipython().events.register('pre_run_cell', set_css)" ] }, { @@ -129,7 +122,7 @@ } ], "source": [ - "corpus = Corpus(download(\"subreddit-Cornell\"))" + "corpus = Corpus(download('subreddit-Cornell'))" ] }, { @@ -164,7 +157,7 @@ } ], "source": [ - "switchboard_corpus = Corpus(download(\"switchboard-corpus\"))" + "switchboard_corpus = Corpus(download('switchboard-corpus'))" ] }, { @@ -606,7 +599,7 @@ ], "source": [ "# Here's an example of a corpus with more sophisticated labels such as speaker intentions and perceptions\n", - "deception_corpus = Corpus(download(\"diplomacy-corpus\"))\n", + "deception_corpus = Corpus(download('diplomacy-corpus'))\n", "deception_corpus.random_utterance().meta" ] }, @@ -645,7 +638,7 @@ } ], "source": [ - "# Another example is Switchboard, which has utterances with a list of [text segment, tag] pairs,\n", + "# Another example is Switchboard, which has utterances with a list of [text segment, tag] pairs, \n", "# where tag refers to the DAMSL speech act tag.\n", "switchboard_corpus.random_utterance().meta" ] @@ -695,7 +688,7 @@ ], "source": [ "# How to add metadata\n", - "utt.meta[\"dialog_acts\"] = [\"question\", \"request\"]\n", + "utt.meta['dialog_acts'] = ['question', 'request']\n", "utt.meta" ] }, @@ -744,7 +737,7 @@ ], "source": [ "# This is an equivalent way of adding metadata\n", - "convo.add_meta(\"toxicity_score\", 5)\n", + "convo.add_meta('toxicity_score', 5)\n", "convo.meta" ] }, @@ -821,7 +814,7 @@ ], "source": [ "# We can fetch individual objects by ID\n", - "corpus.get_speaker(\"ulysses2014\")\n", + "corpus.get_speaker('ulysses2014')\n", "# corpus.get_conversation('7bir0w')\n", "# corpus.get_utterance('dsyd46r')" ] @@ -862,7 +855,7 @@ ], "source": [ "# We can check if the Corpus contains an object with a specified ID\n", - "corpus.has_speaker(\"ulysses2014\")\n", + "corpus.has_speaker('ulysses2014')\n", "# corpus.has_conversation('7bir0w')\n", "# corpus.has_utterance('dsyd46r')" ] @@ -1078,7 +1071,7 @@ "source": [ "for utt in corpus.iter_utterances():\n", " print(utt.text)\n", - " break" + " break " ] }, { @@ -1114,7 +1107,7 @@ ], "source": [ "for convo in corpus.iter_conversations():\n", - " print(convo.meta[\"num_comments\"])\n", + " print(convo.meta['num_comments'])\n", " break" ] }, @@ -1343,8 +1336,8 @@ "source": [ "# consider this sequence of operations that highlight how to navigate between components\n", "utt = corpus.random_utterance()\n", - "convo = utt.get_conversation() # get the Conversation the Utterance belongs to\n", - "spkr = utt.speaker # get the Speaker who made the Utterance\n", + "convo = utt.get_conversation() # get the Conversation the Utterance belongs to\n", + "spkr = utt.speaker # get the Speaker who made the Utterance\n", "\n", "spkr_convos = list(spkr.iter_conversations())\n", "spkr_utts = list(spkr.iter_utterances())\n", @@ -1651,7 +1644,7 @@ } ], "source": [ - "convo = corpus.get_conversation(\"7yy032\")\n", + "convo = corpus.get_conversation('7yy032')\n", "print(convo)" ] }, @@ -1780,7 +1773,7 @@ ], "source": [ "# Instead of printing the Speaker ID, we print the Utterance ID\n", - "switchboard_corpus.get_conversation(\"4771-0\").print_conversation_structure(lambda utt: utt.id)" + "switchboard_corpus.get_conversation('4771-0').print_conversation_structure(lambda utt: utt.id)" ] }, { @@ -1936,7 +1929,7 @@ ], "source": [ "# Since the first utterance has ID '7yy032'\n", - "first_utt = corpus.get_utterance(\"7yy032\")" + "first_utt = corpus.get_utterance('7yy032')" ] }, { @@ -2072,16 +2065,16 @@ "source": [ "# Traverse the conversation tree in interesting ways\n", "print(\"Breadth first:\")\n", - "print([utt.speaker.id for utt in convo.traverse(\"bfs\")], \"\\n\")\n", + "print([utt.speaker.id for utt in convo.traverse('bfs')],\"\\n\")\n", "\n", "print(\"Depth first:\")\n", - "print([utt.speaker.id for utt in convo.traverse(\"dfs\")], \"\\n\")\n", + "print([utt.speaker.id for utt in convo.traverse('dfs')],\"\\n\")\n", "\n", "print(\"Preorder:\")\n", - "print([utt.speaker.id for utt in convo.traverse(\"preorder\")], \"\\n\")\n", + "print([utt.speaker.id for utt in convo.traverse('preorder')],\"\\n\")\n", "\n", "print(\"Postorder:\")\n", - "print([utt.speaker.id for utt in convo.traverse(\"postorder\")], \"\\n\")\n", + "print([utt.speaker.id for utt in convo.traverse('postorder')],\"\\n\")\n", "\n", "print(\"For reference, here is the structure of the thread again:\")\n", "convo.print_conversation_structure()" @@ -2331,7 +2324,7 @@ } ], "source": [ - "corpus = Corpus(download(\"reddit-corpus-small\"))" + "corpus = Corpus(download('reddit-corpus-small'))" ] }, { @@ -2493,11 +2486,8 @@ } ], "source": [ - "fw.fit(\n", - " corpus,\n", - " class1_func=lambda utt: utt.meta[\"subreddit\"] == \"Christianity\",\n", - " class2_func=lambda utt: utt.meta[\"subreddit\"] == \"atheism\",\n", - ")" + "fw.fit(corpus, class1_func = lambda utt: utt.meta['subreddit'] == 'Christianity',\n", + " class2_func = lambda utt: utt.meta['subreddit'] == 'atheism')" ] }, { @@ -2960,7 +2950,7 @@ } ], "source": [ - "fw.summarize(corpus, plot=True, class1_name=\"r/Christianity\", class2_name=\"r/atheism\")" + "fw.summarize(corpus, plot=True, class1_name='r/Christianity', class2_name='r/atheism')" ] }, { @@ -3025,4 +3015,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file diff --git a/examples/conversations-gone-awry/Conversations_Gone_Awry_Prediction.ipynb b/examples/conversations-gone-awry/Conversations_Gone_Awry_Prediction.ipynb index 616bd3bd..b011a089 100644 --- a/examples/conversations-gone-awry/Conversations_Gone_Awry_Prediction.ipynb +++ b/examples/conversations-gone-awry/Conversations_Gone_Awry_Prediction.ipynb @@ -40,7 +40,6 @@ "from convokit import Corpus\n", "\n", "import matplotlib.pyplot as plt\n", - "\n", "%matplotlib inline" ] }, @@ -51,8 +50,7 @@ "outputs": [], "source": [ "import warnings\n", - "\n", - "warnings.filterwarnings(\"ignore\")" + "warnings.filterwarnings('ignore')" ] }, { @@ -83,7 +81,7 @@ } ], "source": [ - "# OPTION 1: DOWNLOAD CORPUS\n", + "# OPTION 1: DOWNLOAD CORPUS \n", "# UNCOMMENT THESE LINES TO DOWNLOAD CORPUS\n", "# DATA_DIR = ''\n", "# AWRY_ROOT_DIR = download('conversations-gone-awry-corpus', data_dir=DATA_DIR)\n", @@ -93,7 +91,7 @@ "# AWRY_ROOT_DIR = ''\n", "\n", "awry_corpus = Corpus(AWRY_ROOT_DIR)\n", - "awry_corpus.load_info(\"utterance\", [\"parsed\"])" + "awry_corpus.load_info('utterance',['parsed'])" ] }, { @@ -109,9 +107,7 @@ "metadata": {}, "outputs": [], "source": [ - "awry_corpus = awry_corpus.filter_conversations_by(\n", - " lambda convo: convo.meta[\"annotation_year\"] == \"2018\"\n", - ")" + "awry_corpus = awry_corpus.filter_conversations_by(lambda convo: convo.meta['annotation_year'] == '2018')" ] }, { @@ -159,7 +155,7 @@ } ], "source": [ - "# OPTION 1: DOWNLOAD CORPUS\n", + "# OPTION 1: DOWNLOAD CORPUS \n", "# UNCOMMENT THESE LINES TO DOWNLOAD CORPUS\n", "# DATA_DIR = ''\n", "# FULL_ROOT_DIR = download('wiki-corpus', data_dir=DATA_DIR)\n", @@ -169,7 +165,7 @@ "# FULL_ROOT_DIR = ''\n", "\n", "full_corpus = Corpus(FULL_ROOT_DIR)\n", - "full_corpus.load_info(\"utterance\", [\"parsed\"])" + "full_corpus.load_info('utterance',['parsed'])" ] }, { @@ -324,18 +320,9 @@ } ], "source": [ - "pt_model = PromptTypeWrapper(\n", - " n_types=6,\n", - " use_prompt_motifs=False,\n", - " root_only=False,\n", - " questions_only=False,\n", - " enforce_caps=False,\n", - " min_support=20,\n", - " min_df=100,\n", - " svd__n_components=50,\n", - " max_dist=1.0,\n", - " random_state=1000,\n", - ")\n", + "pt_model = PromptTypeWrapper(n_types=6, use_prompt_motifs=False, root_only=False,\n", + " questions_only=False, enforce_caps=False, min_support=20, min_df=100,\n", + " svd__n_components=50, max_dist=1., random_state=1000)\n", "pt_model.fit(full_corpus)" ] }, @@ -1904,14 +1891,8 @@ }, "outputs": [], "source": [ - "TYPE_NAMES = [\n", - " \"Prompt: Casual\",\n", - " \"Prompt: Moderation\",\n", - " \"Prompt: Coordination\",\n", - " \"Prompt: Contention\",\n", - " \"Prompt: Editing\",\n", - " \"Prompt: Procedures\",\n", - "]" + "TYPE_NAMES = ['Prompt: Casual', 'Prompt: Moderation', 'Prompt: Coordination', 'Prompt: Contention',\n", + " 'Prompt: Editing', 'Prompt: Procedures']" ] }, { @@ -1967,9 +1948,10 @@ }, "outputs": [], "source": [ - "prompt_dist_df = awry_corpus.get_vectors(name=\"prompt_types__prompt_dists__6\", as_dataframe=True)\n", + "prompt_dist_df = awry_corpus.get_vectors(name='prompt_types__prompt_dists__6', \n", + " as_dataframe=True)\n", "type_ids = np.argmin(prompt_dist_df.values, axis=1)\n", - "mask = np.min(prompt_dist_df.values, axis=1) >= 1.0\n", + "mask = np.min(prompt_dist_df.values, axis=1) >= 1.\n", "type_ids[mask] = 6" ] }, @@ -2107,13 +2089,10 @@ "metadata": {}, "outputs": [], "source": [ - "prompt_type_assignments = np.zeros((len(prompt_dist_df), prompt_dist_df.shape[1] + 1))\n", - "prompt_type_assignments[np.arange(len(type_ids)), type_ids] = 1\n", - "prompt_type_assignment_df = pd.DataFrame(\n", - " columns=np.arange(prompt_dist_df.shape[1] + 1),\n", - " index=prompt_dist_df.index,\n", - " data=prompt_type_assignments,\n", - ")\n", + "prompt_type_assignments = np.zeros((len(prompt_dist_df), prompt_dist_df.shape[1]+1))\n", + "prompt_type_assignments[np.arange(len(type_ids)),type_ids] = 1\n", + "prompt_type_assignment_df = pd.DataFrame(columns=np.arange(prompt_dist_df.shape[1]+1), index=prompt_dist_df.index, \n", + " data=prompt_type_assignments)\n", "prompt_type_assignment_df = prompt_type_assignment_df[prompt_type_assignment_df.columns[:-1]]" ] }, @@ -2901,9 +2880,7 @@ " convo_ids.append(comment.conversation_id)\n", " timestamps.append(comment.timestamp)\n", " page_ids.append(conversation.meta[\"page_id\"])\n", - "comment_df = pd.DataFrame(\n", - " {\"conversation_id\": convo_ids, \"timestamp\": timestamps, \"page_id\": page_ids}, index=comment_ids\n", - ")\n", + "comment_df = pd.DataFrame({\"conversation_id\": convo_ids, \"timestamp\": timestamps, \"page_id\": page_ids}, index=comment_ids)\n", "\n", "# we'll do our construction using awry conversation ID's as the reference key\n", "awry_convo_ids = set()\n", @@ -2911,21 +2888,14 @@ "good_convo_map = {}\n", "page_id_map = {}\n", "for conversation in awry_corpus.iter_conversations():\n", - " if (\n", - " conversation.meta[\"conversation_has_personal_attack\"]\n", - " and conversation.id not in awry_convo_ids\n", - " ):\n", + " if conversation.meta[\"conversation_has_personal_attack\"] and conversation.id not in awry_convo_ids:\n", " awry_convo_ids.add(conversation.id)\n", " good_convo_map[conversation.id] = conversation.meta[\"pair_id\"]\n", " page_id_map[conversation.id] = conversation.meta[\"page_id\"]\n", "awry_convo_ids = list(awry_convo_ids)\n", - "pairs_df = pd.DataFrame(\n", - " {\n", - " \"bad_conversation_id\": awry_convo_ids,\n", - " \"conversation_id\": [good_convo_map[cid] for cid in awry_convo_ids],\n", - " \"page_id\": [page_id_map[cid] for cid in awry_convo_ids],\n", - " }\n", - ")\n", + "pairs_df = pd.DataFrame({\"bad_conversation_id\": awry_convo_ids,\n", + " \"conversation_id\": [good_convo_map[cid] for cid in awry_convo_ids],\n", + " \"page_id\": [page_id_map[cid] for cid in awry_convo_ids]})\n", "# finally, we will augment the pairs dataframe with the IDs of the first and second comment for both\n", "# the bad and good conversation. This will come in handy for constructing the feature matrix.\n", "first_ids = []\n", @@ -2934,22 +2904,14 @@ "second_ids_bad = []\n", "for row in pairs_df.itertuples():\n", " # \"first two\" is defined in terms of time of posting\n", - " comments_sorted = comment_df[comment_df.conversation_id == row.conversation_id].sort_values(\n", - " by=\"timestamp\"\n", - " )\n", + " comments_sorted = comment_df[comment_df.conversation_id==row.conversation_id].sort_values(by=\"timestamp\")\n", " first_ids.append(comments_sorted.iloc[0].name)\n", " second_ids.append(comments_sorted.iloc[1].name)\n", - " comments_sorted_bad = comment_df[\n", - " comment_df.conversation_id == row.bad_conversation_id\n", - " ].sort_values(by=\"timestamp\")\n", + " comments_sorted_bad = comment_df[comment_df.conversation_id==row.bad_conversation_id].sort_values(by=\"timestamp\")\n", " first_ids_bad.append(comments_sorted_bad.iloc[0].name)\n", " second_ids_bad.append(comments_sorted_bad.iloc[1].name)\n", - "pairs_df = pairs_df.assign(\n", - " first_id=first_ids,\n", - " second_id=second_ids,\n", - " bad_first_id=first_ids_bad,\n", - " bad_second_id=second_ids_bad,\n", - ")" + "pairs_df = pairs_df.assign(first_id=first_ids, second_id=second_ids, \n", + " bad_first_id=first_ids_bad, bad_second_id=second_ids_bad)" ] }, { @@ -2986,19 +2948,19 @@ "outputs": [], "source": [ "def clean_feature_name(feat):\n", - " new_feat = feat.replace(\"feature_politeness\", \"\").replace(\"==\", \"\").replace(\"_\", \" \")\n", + " new_feat = feat.replace('feature_politeness','').replace('==','').replace('_', ' ')\n", " split = new_feat.split()\n", - " first, rest = split[0], \" \".join(split[1:]).lower()\n", + " first, rest = split[0], ' '.join(split[1:]).lower()\n", " if first[0].isalpha():\n", " first = first.title()\n", - " if \"Hashedge\" in first:\n", - " return \"Hedge (lexicon)\"\n", - " if \"Hedges\" in first:\n", - " return \"Hedge (dep. tree)\"\n", - " if \"greeting\" in feat:\n", - " return \"Greetings\"\n", - " cleaner_str = first + \" \" + rest\n", - " # cleaner_str = cleaner_str.replace('2nd', '2$\\mathregular{^{nd}}$').replace('1st', '1$\\mathregular{^{st}}$')\n", + " if 'Hashedge' in first:\n", + " return 'Hedge (lexicon)'\n", + " if 'Hedges' in first:\n", + " return 'Hedge (dep. tree)'\n", + " if 'greeting' in feat:\n", + " return 'Greetings'\n", + " cleaner_str = first + ' ' + rest\n", + "# cleaner_str = cleaner_str.replace('2nd', '2$\\mathregular{^{nd}}$').replace('1st', '1$\\mathregular{^{st}}$')\n", " return cleaner_str" ] }, @@ -3010,16 +2972,9 @@ }, "outputs": [], "source": [ - "politeness_strategies_display = politeness_strategies[\n", - " [\n", - " col\n", - " for col in politeness_strategies.columns\n", - " if col not in [\"feature_politeness_==HASNEGATIVE==\", \"feature_politeness_==HASPOSITIVE==\"]\n", - " ]\n", - "].copy()\n", - "politeness_strategies_display.columns = [\n", - " clean_feature_name(col) for col in politeness_strategies_display.columns\n", - "]" + "politeness_strategies_display = politeness_strategies[[col for col in politeness_strategies.columns \n", + " if col not in ['feature_politeness_==HASNEGATIVE==', 'feature_politeness_==HASPOSITIVE==']]].copy()\n", + "politeness_strategies_display.columns = [clean_feature_name(col) for col in politeness_strategies_display.columns]" ] }, { @@ -3041,19 +2996,11 @@ }, "outputs": [], "source": [ - "tox_first_comment_features = pairs_df[[\"bad_first_id\"]].join(\n", - " all_features, how=\"left\", on=\"bad_first_id\"\n", - ")[all_features.columns]\n", - "ntox_first_comment_features = pairs_df[[\"first_id\"]].join(all_features, how=\"left\", on=\"first_id\")[\n", - " all_features.columns\n", - "]\n", + "tox_first_comment_features =pairs_df[['bad_first_id']].join(all_features, how='left', on='bad_first_id')[all_features.columns]\n", + "ntox_first_comment_features =pairs_df[['first_id']].join(all_features, how='left', on='first_id')[all_features.columns]\n", "\n", - "tox_second_comment_features = pairs_df[[\"bad_second_id\"]].join(\n", - " all_features, how=\"left\", on=\"bad_second_id\"\n", - ")[all_features.columns]\n", - "ntox_second_comment_features = pairs_df[[\"second_id\"]].join(\n", - " all_features, how=\"left\", on=\"second_id\"\n", - ")[all_features.columns]" + "tox_second_comment_features =pairs_df[['bad_second_id']].join(all_features, how='left', on='bad_second_id')[all_features.columns]\n", + "ntox_second_comment_features =pairs_df[['second_id']].join(all_features, how='left', on='second_id')[all_features.columns]" ] }, { @@ -3065,49 +3012,36 @@ "outputs": [], "source": [ "def get_p_stars(x):\n", - " if x < 0.001:\n", - " return \"***\"\n", - " elif x < 0.01:\n", - " return \"**\"\n", - " elif x < 0.05:\n", - " return \"*\"\n", - " else:\n", - " return \"\"\n", - "\n", - "\n", - "def compare_tox(df_ntox, df_tox, min_n=0):\n", + " if x < .001: return '***'\n", + " elif x < .01: return '**'\n", + " elif x < .05: return '*'\n", + " else: return ''\n", + "def compare_tox(df_ntox, df_tox, min_n=0):\n", " cols = df_ntox.columns\n", - " num_feats_in_tox = df_tox[cols].sum().astype(int).rename(\"num_feat_tox\")\n", - " num_nfeats_in_tox = (1 - df_tox[cols]).sum().astype(int).rename(\"num_nfeat_tox\")\n", - " num_feats_in_ntox = df_ntox[cols].sum().astype(int).rename(\"num_feat_ntox\")\n", - " num_nfeats_in_ntox = (1 - df_ntox[cols]).sum().astype(int).rename(\"num_nfeat_ntox\")\n", - " prop_tox = df_tox[cols].mean().rename(\"prop_tox\")\n", - " ref_prop_ntox = df_ntox[cols].mean().rename(\"prop_ntox\")\n", + " num_feats_in_tox = df_tox[cols].sum().astype(int).rename('num_feat_tox')\n", + " num_nfeats_in_tox = (1 - df_tox[cols]).sum().astype(int).rename('num_nfeat_tox')\n", + " num_feats_in_ntox = df_ntox[cols].sum().astype(int).rename('num_feat_ntox')\n", + " num_nfeats_in_ntox = (1 - df_ntox[cols]).sum().astype(int).rename('num_nfeat_ntox')\n", + " prop_tox = df_tox[cols].mean().rename('prop_tox')\n", + " ref_prop_ntox = df_ntox[cols].mean().rename('prop_ntox')\n", " n_tox = len(df_tox)\n", - " df = pd.concat(\n", - " [\n", - " num_feats_in_tox,\n", - " num_nfeats_in_tox,\n", - " num_feats_in_ntox,\n", - " num_nfeats_in_ntox,\n", - " prop_tox,\n", - " ref_prop_ntox,\n", - " ],\n", - " axis=1,\n", - " )\n", - " df[\"num_total\"] = df.num_feat_tox + df.num_feat_ntox\n", - " df[\"log_odds\"] = (\n", - " np.log(df.num_feat_tox)\n", - " - np.log(df.num_nfeat_tox)\n", - " + np.log(df.num_nfeat_ntox)\n", - " - np.log(df.num_feat_ntox)\n", - " )\n", - " df[\"abs_log_odds\"] = np.abs(df.log_odds)\n", - " df[\"binom_p\"] = df.apply(lambda x: stats.binom_test(x.num_feat_tox, n_tox, x.prop_ntox), axis=1)\n", + " df = pd.concat([\n", + " num_feats_in_tox, \n", + " num_nfeats_in_tox,\n", + " num_feats_in_ntox,\n", + " num_nfeats_in_ntox,\n", + " prop_tox,\n", + " ref_prop_ntox,\n", + " ], axis=1)\n", + " df['num_total'] = df.num_feat_tox + df.num_feat_ntox\n", + " df['log_odds'] = np.log(df.num_feat_tox) - np.log(df.num_nfeat_tox) \\\n", + " + np.log(df.num_nfeat_ntox) - np.log(df.num_feat_ntox)\n", + " df['abs_log_odds'] = np.abs(df.log_odds)\n", + " df['binom_p'] = df.apply(lambda x: stats.binom_test(x.num_feat_tox, n_tox, x.prop_ntox), axis=1)\n", " df = df[df.num_total >= min_n]\n", - " df[\"p\"] = df[\"binom_p\"].apply(lambda x: \"%.3f\" % x)\n", - " df[\"pstars\"] = df[\"binom_p\"].apply(get_p_stars)\n", - " return df.sort_values(\"log_odds\", ascending=False)" + " df['p'] = df['binom_p'].apply(lambda x: '%.3f' % x)\n", + " df['pstars'] = df['binom_p'].apply(get_p_stars)\n", + " return df.sort_values('log_odds', ascending=False)" ] }, { @@ -3130,110 +3064,85 @@ }, "outputs": [], "source": [ - "# we are now ready to plot these comparisons. the following (rather intimidating) helper function\n", + "# we are now ready to plot these comparisons. the following (rather intimidating) helper function \n", "# produces a nicely-formatted plot:\n", - "def draw_figure(\n", - " ax, first_cmp, second_cmp, title=\"\", prompt_types=6, min_log_odds=0.2, min_freq=50, xlim=0.85\n", - "):\n", + "def draw_figure(ax, first_cmp, second_cmp, title='', prompt_types=6, min_log_odds=.2, min_freq=50,xlim=.85):\n", + "\n", " # selecting and sorting the features to plot, given minimum effect sizes and statistical significance\n", - " frequent_feats = first_cmp[first_cmp.num_total >= min_freq].index.union(\n", - " second_cmp[second_cmp.num_total >= min_freq].index\n", - " )\n", - " lrg_effect_feats = first_cmp[\n", - " (first_cmp.abs_log_odds >= 0.2) & (first_cmp.binom_p < 0.05)\n", - " ].index.union(second_cmp[(second_cmp.abs_log_odds >= 0.2) & (second_cmp.binom_p < 0.05)].index)\n", + " frequent_feats = first_cmp[first_cmp.num_total >= min_freq].index.union(second_cmp[second_cmp.num_total >= min_freq].index)\n", + " lrg_effect_feats = first_cmp[(first_cmp.abs_log_odds >= .2)\n", + " & (first_cmp.binom_p < .05)].index.union(second_cmp[(second_cmp.abs_log_odds >= .2)\n", + " & (second_cmp.binom_p < .05)].index)\n", " feats_to_include = frequent_feats.intersection(lrg_effect_feats)\n", " feat_order = sorted(feats_to_include, key=lambda x: first_cmp.loc[x].log_odds, reverse=True)\n", "\n", " # parameters determining the look of the figure\n", - " colors = [\"darkorchid\", \"seagreen\"]\n", - " shapes = [\"d\", \"s\"]\n", - " eps = 0.02\n", - " star_eps = 0.035\n", + " colors = ['darkorchid', 'seagreen']\n", + " shapes = ['d', 's'] \n", + " eps = .02\n", + " star_eps = .035\n", " xlim = xlim\n", - " min_log = 0.2\n", + " min_log = .2\n", " gap_prop = 2\n", " label_size = 14\n", - " title_size = 18\n", + " title_size=18\n", " radius = 144\n", " features = feat_order\n", " ax.invert_yaxis()\n", - " ax.plot([0, 0], [0, len(features) / gap_prop], color=\"black\")\n", - "\n", - " # for each figure we plot the point according to effect size in the first and second comment,\n", + " ax.plot([0,0], [0, len(features)/gap_prop], color='black')\n", + " \n", + " # for each figure we plot the point according to effect size in the first and second comment, \n", " # and add axis labels denoting statistical significance\n", " yticks = []\n", " yticklabels = []\n", " for f_idx, feat in enumerate(features):\n", - " curr_y = (f_idx + 0.5) / gap_prop\n", + " curr_y = (f_idx + .5)/gap_prop\n", " yticks.append(curr_y)\n", " try:\n", + " \n", " first_p = first_cmp.loc[feat].binom_p\n", - " second_p = second_cmp.loc[feat].binom_p\n", + " second_p = second_cmp.loc[feat].binom_p \n", " if first_cmp.loc[feat].abs_log_odds < min_log:\n", " first_face = \"white\"\n", " elif first_p >= 0.05:\n", - " first_face = \"white\"\n", + " first_face = 'white'\n", " else:\n", " first_face = colors[0]\n", " if second_cmp.loc[feat].abs_log_odds < min_log:\n", " second_face = \"white\"\n", " elif second_p >= 0.05:\n", - " second_face = \"white\"\n", + " second_face = 'white'\n", " else:\n", " second_face = colors[1]\n", - " ax.plot(\n", - " [-1 * xlim, xlim], [curr_y, curr_y], \"--\", color=\"grey\", zorder=0, linewidth=0.5\n", - " )\n", - "\n", - " ax.scatter(\n", - " [first_cmp.loc[feat].log_odds],\n", - " [curr_y + eps],\n", - " s=radius,\n", - " edgecolor=colors[0],\n", - " marker=shapes[0],\n", - " zorder=20,\n", - " facecolors=first_face,\n", - " )\n", - " ax.scatter(\n", - " [second_cmp.loc[feat].log_odds],\n", - " [curr_y + eps],\n", - " s=radius,\n", - " edgecolor=colors[1],\n", - " marker=shapes[1],\n", - " zorder=10,\n", - " facecolors=second_face,\n", - " )\n", - "\n", + " ax.plot([-1 * xlim, xlim], [curr_y, curr_y], '--', color='grey', zorder=0, linewidth=.5)\n", + " \n", + " ax.scatter([first_cmp.loc[feat].log_odds], [curr_y + eps], s=radius, edgecolor=colors[0], marker=shapes[0],\n", + " zorder=20, facecolors=first_face)\n", + " ax.scatter([second_cmp.loc[feat].log_odds], [curr_y + eps], s=radius, edgecolor=colors[1], marker=shapes[1], \n", + " zorder=10, facecolors=second_face)\n", + " \n", " first_pstr_len = len(get_p_stars(first_p))\n", " second_pstr_len = len(get_p_stars(second_p))\n", - " p_str = np.array([\" \"] * 8)\n", + " p_str = np.array([' '] * 8)\n", " if first_pstr_len > 0:\n", - " p_str[:first_pstr_len] = \"*\"\n", + " p_str[:first_pstr_len] = '*'\n", " if second_pstr_len > 0:\n", - " p_str[-second_pstr_len:] = \"⁺\"\n", - "\n", - " feat_str = feat + \"\\n\" + \"\".join(p_str)\n", + " p_str[-second_pstr_len:] = '⁺'\n", + " \n", + " feat_str = feat + '\\n' + ''.join(p_str)\n", " yticklabels.append(feat_str)\n", " except Exception as e:\n", - " yticklabels.append(\"\")\n", - "\n", + " yticklabels.append('')\n", + " \n", " # add the axis labels\n", - " ax.set_xlabel(\"log-odds ratio\", fontsize=14, family=\"serif\")\n", - " ax.set_xticks([-xlim - 0.05, -0.5, 0, 0.5, xlim])\n", - " ax.set_xticklabels([\"on-track\", -0.5, 0, 0.5, \"awry\"], fontsize=14, family=\"serif\")\n", + " ax.set_xlabel('log-odds ratio', fontsize=14, family='serif')\n", + " ax.set_xticks([-xlim-.05, -.5, 0, .5, xlim])\n", + " ax.set_xticklabels(['on-track', -.5, 0, .5, 'awry'], fontsize=14, family='serif')\n", " ax.set_yticks(yticks)\n", - " ax.set_yticklabels(yticklabels, fontsize=16, family=\"serif\")\n", - " ax.tick_params(axis=\"both\", which=\"both\", bottom=\"off\", top=\"off\", left=\"off\")\n", - " if title != \"\":\n", - " ax.text(\n", - " 0,\n", - " (len(features) + 2.25) / gap_prop,\n", - " title,\n", - " fontsize=title_size,\n", - " family=\"serif\",\n", - " horizontalalignment=\"center\",\n", - " )\n", + " ax.set_yticklabels(yticklabels, fontsize=16, family='serif')\n", + " ax.tick_params(axis='both', which='both', bottom='off', top='off',left='off')\n", + " if title != '':\n", + " ax.text(0, (len(features) + 2.25)/ gap_prop, title, fontsize=title_size, family='serif',horizontalalignment='center',)\n", " return feat_order" ] }, @@ -3254,8 +3163,8 @@ } ], "source": [ - "f, ax = plt.subplots(1, 1, figsize=(5, 10))\n", - "_ = draw_figure(ax, first_comparisons, second_comparisons, \"First & second comment\")" + "f, ax = plt.subplots(1,1, figsize=(5,10))\n", + "_ = draw_figure(ax, first_comparisons, second_comparisons, 'First & second comment')" ] }, { @@ -3288,28 +3197,20 @@ "outputs": [], "source": [ "def features_for_convo(convo_id, first_comment_id, second_comment_id):\n", + "\n", " # get prompt type features\n", " try:\n", " first_prompts = prompt_dist_df.loc[first_comment_id]\n", " except:\n", - " first_prompts = pd.Series(\n", - " data=np.ones(len(prompt_dist_df.columns)), index=prompt_dist_df.columns\n", - " )\n", + " first_prompts = pd.Series(data=np.ones(len(prompt_dist_df.columns)), index=prompt_dist_df.columns)\n", " try:\n", - " second_prompts = prompt_dist_df.loc[second_comment_id].rename(\n", - " {c: c + \"_second\" for c in prompt_dist_df.columns}\n", - " )\n", + " second_prompts = prompt_dist_df.loc[second_comment_id].rename({c: c + \"_second\" for c in prompt_dist_df.columns})\n", " except:\n", - " second_prompts = pd.Series(\n", - " data=np.ones(len(prompt_dist_df.columns)),\n", - " index=[c + \"_second\" for c in prompt_dist_df.columns],\n", - " )\n", + " second_prompts = pd.Series(data=np.ones(len(prompt_dist_df.columns)), index=[c + \"_second\" for c in prompt_dist_df.columns])\n", " prompts = first_prompts.append(second_prompts)\n", " # get politeness strategies features\n", " first_politeness = politeness_strategies.loc[first_comment_id]\n", - " second_politeness = politeness_strategies.loc[second_comment_id].rename(\n", - " {c: c + \"_second\" for c in politeness_strategies.columns}\n", - " )\n", + " second_politeness = politeness_strategies.loc[second_comment_id].rename({c: c + \"_second\" for c in politeness_strategies.columns})\n", " politeness = first_politeness.append(second_politeness)\n", " return politeness.append(prompts)" ] @@ -3323,16 +3224,9 @@ "outputs": [], "source": [ "convo_ids = np.concatenate((pairs_df.conversation_id.values, pairs_df.bad_conversation_id.values))\n", - "feats = [\n", - " features_for_convo(row.conversation_id, row.first_id, row.second_id)\n", - " for row in pairs_df.itertuples()\n", - "] + [\n", - " features_for_convo(row.bad_conversation_id, row.bad_first_id, row.bad_second_id)\n", - " for row in pairs_df.itertuples()\n", - "]\n", - "feature_table = pd.DataFrame(\n", - " data=np.vstack([f.values for f in feats]), columns=feats[0].index, index=convo_ids\n", - ")" + "feats = [features_for_convo(row.conversation_id, row.first_id, row.second_id) for row in pairs_df.itertuples()] + \\\n", + " [features_for_convo(row.bad_conversation_id, row.bad_first_id, row.bad_second_id) for row in pairs_df.itertuples()]\n", + "feature_table = pd.DataFrame(data=np.vstack([f.values for f in feats]), columns=feats[0].index, index=convo_ids)" ] }, { @@ -3345,14 +3239,10 @@ "source": [ "# in the paper, we dropped the sentiment lexicon based features (HASPOSITIVE and HASNEGATIVE), opting\n", "# to instead use them as a baseline. We do this here as well to be consistent with the paper.\n", - "feature_table = feature_table.drop(\n", - " columns=[\n", - " \"feature_politeness_==HASPOSITIVE==\",\n", - " \"feature_politeness_==HASNEGATIVE==\",\n", - " \"feature_politeness_==HASPOSITIVE==_second\",\n", - " \"feature_politeness_==HASNEGATIVE==_second\",\n", - " ]\n", - ")" + "feature_table = feature_table.drop(columns=[\"feature_politeness_==HASPOSITIVE==\",\n", + " \"feature_politeness_==HASNEGATIVE==\",\n", + " \"feature_politeness_==HASPOSITIVE==_second\",\n", + " \"feature_politeness_==HASNEGATIVE==_second\"])" ] }, { @@ -3638,7 +3528,7 @@ } ], "source": [ - "feature_table.head(5)" + "feature_table.head(5)\n" ] }, { @@ -3674,42 +3564,27 @@ " vals, counts = np.unique(seq, return_counts=True)\n", " return vals[np.argmax(counts)]\n", "\n", - "\n", "def run_pred_single(inputs, X, y):\n", " f_idx, (train_idx, test_idx) = inputs\n", - "\n", + " \n", " X_train, X_test = X[train_idx], X[test_idx]\n", " y_train, y_test = y[train_idx], y[test_idx]\n", - "\n", - " base_clf = Pipeline(\n", - " [\n", - " (\"scaler\", StandardScaler()),\n", - " (\"featselect\", SelectPercentile(score_func=f_classif, percentile=10)),\n", - " (\"logreg\", LogisticRegression(solver=\"liblinear\")),\n", - " ]\n", - " )\n", - " clf = GridSearchCV(\n", - " base_clf,\n", - " {\n", - " \"logreg__C\": [10**i for i in range(-4, 4)],\n", - " \"featselect__percentile\": list(range(10, 110, 10)),\n", - " },\n", - " cv=3,\n", - " )\n", + " \n", + " base_clf = Pipeline([(\"scaler\", StandardScaler()), (\"featselect\", SelectPercentile(score_func=f_classif, percentile=10)), (\"logreg\", LogisticRegression(solver='liblinear'))])\n", + " clf = GridSearchCV(base_clf, {\"logreg__C\": [10**i for i in range(-4,4)], \"featselect__percentile\": list(range(10, 110, 10))}, cv=3)\n", "\n", " clf.fit(X_train, y_train)\n", - "\n", - " y_scores = clf.predict_proba(X_test)[:, 1]\n", + " \n", + " y_scores = clf.predict_proba(X_test)[:,1]\n", " y_pred = clf.predict(X_test)\n", - "\n", + " \n", " feature_weights = clf.best_estimator_.named_steps[\"logreg\"].coef_.flatten()\n", " feature_mask = clf.best_estimator_.named_steps[\"featselect\"].get_support()\n", - "\n", + " \n", " hyperparams = clf.best_params_\n", - "\n", + " \n", " return (y_pred, y_scores, feature_weights, hyperparams, feature_mask)\n", "\n", - "\n", "def run_pred(X, y, fnames, groups):\n", " feature_weights = {}\n", " scores = np.asarray([np.nan for i in range(len(y))])\n", @@ -3717,10 +3592,10 @@ " hyperparameters = defaultdict(list)\n", " splits = list(enumerate(LeaveOneGroupOut().split(X, y, groups)))\n", " accs = []\n", - "\n", + " \n", " with Pool(os.cpu_count()) as p:\n", " prediction_results = p.map(partial(run_pred_single, X=X, y=y), splits)\n", - "\n", + " \n", " fselect_pvals_all = []\n", " for i in range(len(splits)):\n", " f_idx, (train_idx, test_idx) = splits[i]\n", @@ -3730,16 +3605,15 @@ " feature_weights[f_idx] = np.asarray([np.nan for _ in range(len(fnames))])\n", " feature_weights[f_idx][mask_i] = weights_i\n", " for param in hyperparams_i:\n", - " hyperparameters[param].append(hyperparams_i[param])\n", - "\n", + " hyperparameters[param].append(hyperparams_i[param]) \n", + " \n", " acc = np.mean(y_pred == y)\n", " pvalue = stats.binom_test(sum(y_pred == y), n=len(y), alternative=\"greater\")\n", - "\n", + " \n", " coef_df = pd.DataFrame(feature_weights, index=fnames)\n", - " coef_df[\"mean_coef\"] = coef_df.apply(np.nanmean, axis=1)\n", - " coef_df[\"std_coef\"] = coef_df.apply(np.nanstd, axis=1)\n", - " return acc, coef_df[[\"mean_coef\", \"std_coef\"]], scores, pd.DataFrame(hyperparameters), pvalue\n", - "\n", + " coef_df['mean_coef'] = coef_df.apply(np.nanmean, axis=1)\n", + " coef_df['std_coef'] = coef_df.apply(np.nanstd, axis=1)\n", + " return acc, coef_df[['mean_coef', 'std_coef']], scores, pd.DataFrame(hyperparameters), pvalue\n", "\n", "def get_labeled_pairs(pairs_df):\n", " paired_labels = []\n", @@ -3753,33 +3627,27 @@ " else:\n", " c0s.append(row.bad_conversation_id)\n", " c1s.append(row.conversation_id)\n", - " paired_labels.append(i % 2)\n", + " paired_labels.append(i%2)\n", " page_ids.append(row.page_id)\n", - " return pd.DataFrame(\n", - " {\"c0\": c0s, \"c1\": c1s, \"first_convo_toxic\": paired_labels, \"page_id\": page_ids}\n", - " )\n", - "\n", + " return pd.DataFrame({\"c0\": c0s, \"c1\": c1s,\"first_convo_toxic\": paired_labels, \"page_id\": page_ids})\n", "\n", "def get_feature_subset(labeled_pairs_df, feature_list):\n", - " prompt_type_names = [\"type_%d_dist\" % i for i in range(6)] + [\n", - " \"type_%d_dist_second\" % i for i in range(6)\n", - " ]\n", + " prompt_type_names = [\"type_%d_dist\" % i for i in range(6)] + [\"type_%d_dist_second\" % i for i in range(6)]\n", " politeness_names = [f for f in feature_table.columns if f not in prompt_type_names]\n", - "\n", + " \n", " features_to_use = []\n", " if \"prompt_types\" in feature_list:\n", " features_to_use += prompt_type_names\n", " if \"politeness_strategies\" in feature_list:\n", " features_to_use += politeness_names\n", - "\n", + " \n", " feature_subset = feature_table[features_to_use]\n", - "\n", + " \n", " c0_feats = feature_subset.loc[labeled_pairs_df.c0].values\n", " c1_feats = feature_subset.loc[labeled_pairs_df.c1].values\n", - "\n", + " \n", " return c0_feats, c1_feats, features_to_use\n", "\n", - "\n", "def run_pipeline(feature_set):\n", " print(\"Running prediction task for feature set\", \"+\".join(feature_set))\n", " print(\"Generating labels...\")\n", @@ -3790,9 +3658,7 @@ " print(\"Using\", X.shape[1], \"features\")\n", " y = labeled_pairs_df.first_convo_toxic.values\n", " print(\"Running leave-one-page-out prediction...\")\n", - " accuracy, coefs, scores, hyperparams, pvalue = run_pred(\n", - " X, y, feature_names, labeled_pairs_df.page_id\n", - " )\n", + " accuracy, coefs, scores, hyperparams, pvalue = run_pred(X, y, feature_names, labeled_pairs_df.page_id)\n", " print(\"Accuracy:\", accuracy)\n", " print(\"p-value: %.4e\" % pvalue)\n", " print(\"C (mode):\", mode(hyperparams.logreg__C))\n", @@ -3957,11 +3823,7 @@ } ], "source": [ - "feature_combos = [\n", - " [\"politeness_strategies\"],\n", - " [\"prompt_types\"],\n", - " [\"politeness_strategies\", \"prompt_types\"],\n", - "]\n", + "feature_combos = [[\"politeness_strategies\"], [\"prompt_types\"], [\"politeness_strategies\", \"prompt_types\"]]\n", "combo_names = []\n", "accs = []\n", "for combo in feature_combos:\n", diff --git a/examples/converting_movie_corpus.ipynb b/examples/converting_movie_corpus.ipynb index 9eee2773..24275b5e 100644 --- a/examples/converting_movie_corpus.ipynb +++ b/examples/converting_movie_corpus.ipynb @@ -85,7 +85,7 @@ "metadata": {}, "outputs": [], "source": [ - "with open(data_dir + \"movie_characters_metadata.txt\", \"r\", encoding=\"utf-8\", errors=\"ignore\") as f:\n", + "with open(data_dir + \"movie_characters_metadata.txt\", \"r\", encoding='utf-8', errors='ignore') as f:\n", " speaker_data = f.readlines()" ] }, @@ -111,13 +111,11 @@ "speaker_meta = {}\n", "for speaker in speaker_data:\n", " speaker_info = [info.strip() for info in speaker.split(\"+++$+++\")]\n", - " speaker_meta[speaker_info[0]] = {\n", - " \"character_name\": speaker_info[1],\n", - " \"movie_idx\": speaker_info[2],\n", - " \"movie_name\": speaker_info[3],\n", - " \"gender\": speaker_info[4],\n", - " \"credit_pos\": speaker_info[5],\n", - " }" + " speaker_meta[speaker_info[0]] = {\"character_name\": speaker_info[1],\n", + " \"movie_idx\": speaker_info[2],\n", + " \"movie_name\": speaker_info[3],\n", + " \"gender\": speaker_info[4],\n", + " \"credit_pos\": speaker_info[5]}" ] }, { @@ -133,7 +131,7 @@ "metadata": {}, "outputs": [], "source": [ - "corpus_speakers = {k: Speaker(id=k, meta=v) for k, v in speaker_meta.items()}" + "corpus_speakers = {k: Speaker(id = k, meta = v) for k,v in speaker_meta.items()}" ] }, { @@ -181,7 +179,7 @@ } ], "source": [ - "corpus_speakers[\"u0\"].meta" + "corpus_speakers['u0'].meta" ] }, { @@ -198,7 +196,7 @@ "metadata": {}, "outputs": [], "source": [ - "with open(data_dir + \"movie_lines.txt\", \"r\", encoding=\"utf-8\", errors=\"ignore\") as f:\n", + "with open(data_dir + \"movie_lines.txt\", \"r\", encoding='utf-8', errors='ignore') as f:\n", " utterance_data = f.readlines()" ] }, @@ -251,27 +249,21 @@ "\n", "count = 0\n", "for utterance in tqdm(utterance_data):\n", + " \n", " utterance_info = [info.strip() for info in utterance.split(\"+++$+++\")]\n", - "\n", + " \n", " if len(utterance_info) < 4:\n", " print(utterance_info)\n", - "\n", + " \n", " try:\n", - " idx, speaker, movie_id, text = (\n", - " utterance_info[0],\n", - " utterance_info[1],\n", - " utterance_info[2],\n", - " utterance_info[4],\n", - " )\n", + " idx, speaker, movie_id, text = utterance_info[0], utterance_info[1], utterance_info[2], utterance_info[4]\n", " except:\n", " print(utterance_info)\n", - "\n", - " meta = {\"movie_id\": movie_id}\n", - "\n", - " # root & reply_to will be updated later, timestamp is not applicable\n", - " utterance_corpus[idx] = Utterance(\n", - " id=idx, speaker=corpus_speakers[speaker], text=text, meta=meta\n", - " )\n", + " \n", + " meta = {'movie_id': movie_id}\n", + " \n", + " # root & reply_to will be updated later, timestamp is not applicable \n", + " utterance_corpus[idx] = Utterance(id=idx, speaker=corpus_speakers[speaker], text=text, meta=meta)\n", "\n", "print(\"Total number of utterances = {}\".format(len(utterance_corpus)))" ] @@ -300,7 +292,7 @@ } ], "source": [ - "utterance_corpus[\"L1044\"]" + "utterance_corpus['L1044'] " ] }, { @@ -317,7 +309,7 @@ "metadata": {}, "outputs": [], "source": [ - "with open(data_dir + \"movie_conversations.txt\", \"r\", encoding=\"utf-8\", errors=\"ignore\") as f:\n", + "with open(data_dir + \"movie_conversations.txt\", \"r\", encoding='utf-8', errors='ignore') as f:\n", " convo_data = f.readlines()" ] }, @@ -345,25 +337,27 @@ ], "source": [ "for info in tqdm(convo_data):\n", + " \n", " speaker1, speaker2, m, convo = [info.strip() for info in info.split(\"+++$+++\")]\n", "\n", " convo_seq = ast.literal_eval(convo)\n", - "\n", + " \n", " # update utterance\n", " conversation_id = convo_seq[0]\n", - "\n", + " \n", " # convo_seq is a list of utterances ids, arranged in conversational order\n", " for i, line in enumerate(convo_seq):\n", + " \n", " # sanity checking: speaker giving the utterance is indeed in the pair of characters provided\n", " if utterance_corpus[line].speaker.id not in [speaker1, speaker2]:\n", " print(\"speaker mismatch in line {0}\".format(i))\n", - "\n", + " \n", " utterance_corpus[line].conversation_id = conversation_id\n", - "\n", + " \n", " if i == 0:\n", " utterance_corpus[line].reply_to = None\n", " else:\n", - " utterance_corpus[line].reply_to = convo_seq[i - 1]" + " utterance_corpus[line].reply_to = convo_seq[i-1]" ] }, { @@ -390,7 +384,7 @@ } ], "source": [ - "utterance_corpus[\"L666499\"]" + "utterance_corpus['L666499']" ] }, { @@ -416,7 +410,7 @@ "metadata": {}, "outputs": [], "source": [ - "# Note that by default the version number is incremented\n", + "# Note that by default the version number is incremented \n", "movie_corpus = Corpus(utterances=utterance_list)" ] }, @@ -441,9 +435,7 @@ } ], "source": [ - "print(\n", - " \"number of conversations in the dataset = {}\".format(len(movie_corpus.get_conversation_ids()))\n", - ")" + "print(\"number of conversations in the dataset = {}\".format(len(movie_corpus.get_conversation_ids())))" ] }, { @@ -490,7 +482,7 @@ "metadata": {}, "outputs": [], "source": [ - "with open(data_dir + \"movie_titles_metadata.txt\", \"r\", encoding=\"utf-8\", errors=\"ignore\") as f:\n", + "with open(data_dir + \"movie_titles_metadata.txt\", \"r\", encoding='utf-8', errors='ignore') as f:\n", " movie_extra = f.readlines()" ] }, @@ -503,14 +495,12 @@ "movie_meta = defaultdict(dict)\n", "\n", "for movie in movie_extra:\n", - " movie_id, title, year, rating, votes, genre = [info.strip() for info in movie.split(\"+++$+++\")]\n", - " movie_meta[movie_id] = {\n", - " \"movie_name\": title,\n", - " \"release_year\": year,\n", - " \"rating\": rating,\n", - " \"votes\": votes,\n", - " \"genre\": genre,\n", - " }" + " movie_id, title, year, rating, votes, genre = [info.strip() for info in movie.split(\"+++$+++\")]\n", + " movie_meta[movie_id] = {\"movie_name\": title,\n", + " \"release_year\": year,\n", + " \"rating\": rating,\n", + " \"votes\": votes,\n", + " \"genre\": genre}" ] }, { @@ -527,12 +517,13 @@ "outputs": [], "source": [ "for convo in movie_corpus.iter_conversations():\n", + " \n", " # get the movie_id for the conversation by checking from utterance info\n", " convo_id = convo.get_id()\n", - " movie_idx = movie_corpus.get_utterance(convo_id).meta[\"movie_id\"]\n", - "\n", + " movie_idx = movie_corpus.get_utterance(convo_id).meta['movie_id']\n", + " \n", " # add movie idx as meta, and update meta with additional movie information\n", - " convo.meta[\"movie_idx\"] = movie_idx\n", + " convo.meta['movie_idx'] = movie_idx\n", " convo.meta.update(movie_meta[movie_idx])" ] }, @@ -588,7 +579,7 @@ "metadata": {}, "outputs": [], "source": [ - "with open(data_dir + \"raw_script_urls.txt\", \"r\", encoding=\"utf-8\", errors=\"ignore\") as f:\n", + "with open(data_dir + \"raw_script_urls.txt\", \"r\", encoding='utf-8', errors='ignore') as f:\n", " urls = f.readlines()" ] }, @@ -610,7 +601,7 @@ "metadata": {}, "outputs": [], "source": [ - "movie_corpus.meta[\"url\"] = movie2url" + "movie_corpus.meta['url'] = movie2url" ] }, { @@ -626,7 +617,7 @@ "metadata": {}, "outputs": [], "source": [ - "movie_corpus.meta[\"name\"] = \"Cornell Movie-Dialogs Corpus\"" + "movie_corpus.meta['name'] = \"Cornell Movie-Dialogs Corpus\"" ] }, { @@ -745,7 +736,7 @@ } ], "source": [ - "movie_corpus.get_utterance(\"L666499\").retrieve_meta(\"parsed\")" + "movie_corpus.get_utterance('L666499').retrieve_meta('parsed')" ] }, { @@ -816,7 +807,7 @@ } ], "source": [ - "meta_index(filename=os.path.join(os.path.expanduser(\"~\"), \".convokit/saved-corpora/movie-corpus\"))" + "meta_index(filename = os.path.join(os.path.expanduser(\"~\"), \".convokit/saved-corpora/movie-corpus\"))" ] }, { diff --git a/examples/coordination/examples.ipynb b/examples/coordination/examples.ipynb index 1a4e501f..a93ee950 100644 --- a/examples/coordination/examples.ipynb +++ b/examples/coordination/examples.ipynb @@ -87,9 +87,8 @@ " # the rest plots this data as a double bar graph\n", " a_data_points = sorted(a_score_by_marker.items())\n", " b_data_points = sorted(b_score_by_marker.items())\n", - " a_data_points, b_data_points = zip(\n", - " *sorted(zip(a_data_points, b_data_points), key=lambda x: x[0][1], reverse=True)\n", - " )\n", + " a_data_points, b_data_points = zip(*sorted(zip(a_data_points, b_data_points),\n", + " key=lambda x: x[0][1], reverse=True))\n", " labels, a_data_points = zip(*a_data_points)\n", " _, b_data_points = zip(*b_data_points)\n", "\n", @@ -104,24 +103,14 @@ " ax.bar(np.arange(len(a_data_points)), a_data_points, 0.35, color=a_color)\n", " ax.bar(np.arange(len(b_data_points)) + 0.35, b_data_points, 0.35, color=b_color)\n", "\n", - " b_patch = mpatches.Patch(\n", - " color=\"b\",\n", - " label=a_description\n", - " + \" (total: \"\n", - " + str(a_scores[\"count_agg1\"])\n", - " + \", \"\n", - " + str(a_scores[\"count_agg2\"])\n", - " + \")\",\n", - " )\n", - " g_patch = mpatches.Patch(\n", - " color=\"g\",\n", - " label=b_description\n", - " + \" (total: \"\n", - " + str(b_scores[\"count_agg1\"])\n", - " + \", \"\n", - " + str(b_scores[\"count_agg2\"])\n", - " + \")\",\n", - " )\n", + " b_patch = mpatches.Patch(color=\"b\",\n", + " label=a_description + \" (total: \" +\n", + " str(a_scores[\"count_agg1\"]) + \", \" +\n", + " str(a_scores[\"count_agg2\"]) + \")\")\n", + " g_patch = mpatches.Patch(color=\"g\",\n", + " label=b_description + \" (total: \" +\n", + " str(b_scores[\"count_agg1\"]) + \", \" +\n", + " str(b_scores[\"count_agg2\"]) + \")\")\n", " plt.legend(handles=[b_patch, g_patch])\n", "\n", " filename = str(a_description) + \" vs \" + str(b_description) + \".png\"\n", @@ -178,49 +167,19 @@ "\n", "# do speakers on the whole coordinate more to admins or nonadmins?\n", "make_chart(\n", - " coord.summarize(\n", - " corpus,\n", - " everyone,\n", - " admins,\n", - " focus=\"targets\",\n", - " summary_report=True,\n", - " target_thresh=7,\n", - " split_by_attribs=split,\n", - " ),\n", - " coord.summarize(\n", - " corpus,\n", - " everyone,\n", - " nonadmins,\n", - " focus=\"targets\",\n", - " summary_report=True,\n", - " target_thresh=7,\n", - " split_by_attribs=split,\n", - " ),\n", - " \"Target-admins\",\n", - " \"Target-nonadmins\",\n", + " coord.summarize(corpus, everyone, admins, focus=\"targets\", summary_report=True,\n", + " target_thresh=7, split_by_attribs=split),\n", + " coord.summarize(corpus, everyone, nonadmins, focus=\"targets\", summary_report=True,\n", + " target_thresh=7, split_by_attribs=split),\n", + " \"Target-admins\", \"Target-nonadmins\"\n", ")\n", "# do admins coordinate to other people more than nonadmins do?\n", "make_chart(\n", - " coord.summarize(\n", - " corpus,\n", - " admins,\n", - " everyone,\n", - " summary_report=True,\n", - " speaker_thresh=7,\n", - " target_thresh=7,\n", - " split_by_attribs=split,\n", - " ),\n", - " coord.summarize(\n", - " corpus,\n", - " nonadmins,\n", - " everyone,\n", - " summary_report=True,\n", - " speaker_thresh=7,\n", - " target_thresh=7,\n", - " split_by_attribs=split,\n", - " ),\n", - " \"Speaker-admins\",\n", - " \"Speaker-nonadmins\",\n", + " coord.summarize(corpus, admins, everyone, summary_report=True,\n", + " speaker_thresh=7, target_thresh=7, split_by_attribs=split),\n", + " coord.summarize(corpus, nonadmins, everyone, summary_report=True,\n", + " speaker_thresh=7, target_thresh=7, split_by_attribs=split),\n", + " \"Speaker-admins\", \"Speaker-nonadmins\"\n", ")" ] }, @@ -274,7 +233,7 @@ "# OPTION 1: DOWNLOAD CORPUS\n", "# UNCOMMENT THESE LINES TO DOWNLOAD CORPUS\n", "# DATA_DIR = ''\n", - "# ROOT_DIR = download('supreme-corpus', data_dir=DATA_DIR)\n", + "# ROOT_DIR = convokit.download('supreme-corpus', data_dir=DATA_DIR)\n", "\n", "# OPTION 2: READ PREVIOUSLY-DOWNLOADED CORPUS FROM DISK\n", "# UNCOMMENT THIS LINE AND REPLACE WITH THE DIRECTORY WHERE THE CORPUS IS LOCATED\n", @@ -387,18 +346,16 @@ "# compute coordination from each justice to everyone\n", "print(\"Justices, ranked by how much they coordinate to others:\")\n", "justices_to_everyone = coord.summarize(corpus, justices, everyone)\n", - "for justice, score in sorted(\n", - " justices_to_everyone.averages_by_speaker().items(), key=lambda x: x[1], reverse=True\n", - "):\n", + "for justice, score in sorted(justices_to_everyone.averages_by_speaker().items(),\n", + " key=lambda x: x[1], reverse=True):\n", " print(justice.id, round(score, 5))\n", "print()\n", "\n", "# compute coordination from everyone to each justice\n", "print(\"Justices, ranked by how much others coordinate to them:\")\n", "everyone_to_justices = coord.summarize(corpus, everyone, justices, focus=\"targets\")\n", - "for justice, score in sorted(\n", - " everyone_to_justices.averages_by_speaker().items(), key=lambda x: x[1], reverse=True\n", - "):\n", + "for justice, score in sorted(everyone_to_justices.averages_by_speaker().items(), \n", + " key=lambda x: x[1], reverse=True):\n", " print(justice.id, round(score, 5))\n", "print()" ] @@ -429,212 +386,7 @@ }, "outputs": [], "source": [ - "case_ids = {\n", - " \"03-1164\",\n", - " \"04-1332\",\n", - " \"04-1140\",\n", - " \"04-805\",\n", - " \"04-1495\",\n", - " \"05-352\",\n", - " \"04-1360b\",\n", - " \"06-5306\",\n", - " \"03-1388\",\n", - " \"04-473b\",\n", - " \"03-8661\",\n", - " \"03-1160\",\n", - " \"03-633\",\n", - " \"05-1508\",\n", - " \"05-746\",\n", - " \"05-547\",\n", - " \"05-502\",\n", - " \"04-759\",\n", - " \"03-1116\",\n", - " \"05-1240\",\n", - " \"03-287\",\n", - " \"04-607\",\n", - " \"05-1126\",\n", - " \"04-1477\",\n", - " \"04-8990\",\n", - " \"06-480\",\n", - " \"04-1152\",\n", - " \"05-1429\",\n", - " \"03-1488\",\n", - " \"04-10566\",\n", - " \"04-905\",\n", - " \"05-493\",\n", - " \"05-1575\",\n", - " \"04-848\",\n", - " \"05-983\",\n", - " \"03-1395\",\n", - " \"06-5754\",\n", - " \"04-52\",\n", - " \"05-9264\",\n", - " \"03-725\",\n", - " \"05-184\",\n", - " \"04-1131\",\n", - " \"04-698\",\n", - " \"05-381\",\n", - " \"06-593\",\n", - " \"02-1472\",\n", - " \"04-712\",\n", - " \"04-1376\",\n", - " \"03-184\",\n", - " \"06-116\",\n", - " \"04-1618\",\n", - " \"03-1500\",\n", - " \"03-9627\",\n", - " \"05-669\",\n", - " \"05-85\",\n", - " \"05-7058\",\n", - " \"06-313\",\n", - " \"05-1631\",\n", - " \"05-6551\",\n", - " \"04-1244\",\n", - " \"05-705\",\n", - " \"06-84\",\n", - " \"03-1693\",\n", - " \"04-593\",\n", - " \"04-1034\",\n", - " \"04-944\",\n", - " \"04-1186\",\n", - " \"05-1342\",\n", - " \"04-277\",\n", - " \"04-37\",\n", - " \"04-70\",\n", - " \"06-219\",\n", - " \"04-1329\",\n", - " \"05-465\",\n", - " \"05-595\",\n", - " \"04-631\",\n", - " \"03-1230\",\n", - " \"06-278\",\n", - " \"04-473\",\n", - " \"05-130\",\n", - " \"03-814\",\n", - " \"04-1414\",\n", - " \"04-433\",\n", - " \"05-83\",\n", - " \"04-637\",\n", - " \"04-1327\",\n", - " \"03-9685\",\n", - " \"02-1672\",\n", - " \"03-1696\",\n", - " \"04-1170b\",\n", - " \"03-636\",\n", - " \"04-1371\",\n", - " \"05-1272\",\n", - " \"04-6964\",\n", - " \"05-380\",\n", - " \"05-996\",\n", - " \"03-1407\",\n", - " \"05-1256\",\n", - " \"05-998\",\n", - " \"03-932\",\n", - " \"06-5247\",\n", - " \"04-1067\",\n", - " \"05-1157\",\n", - " \"03-923\",\n", - " \"05-1541\",\n", - " \"05-9222\",\n", - " \"05-5992\",\n", - " \"03-9168\",\n", - " \"05-200\",\n", - " \"05-260\",\n", - " \"04-368\",\n", - " \"04-603\",\n", - " \"05-204\",\n", - " \"04-480\",\n", - " \"04-1528\",\n", - " \"04-721\",\n", - " \"03-10198\",\n", - " \"04-495\",\n", - " \"03-878\",\n", - " \"03-9877\",\n", - " \"04-1527\",\n", - " \"05-593\",\n", - " \"04-1506\",\n", - " \"05-128\",\n", - " \"06-5618\",\n", - " \"05-1074\",\n", - " \"03-9560\",\n", - " \"03-892\",\n", - " \"04-1084\",\n", - " \"04-980\",\n", - " \"05-7053\",\n", - " \"04-881\",\n", - " \"03-1237\",\n", - " \"04-1324\",\n", - " \"05-416\",\n", - " \"04-5928\",\n", - " \"05-1629\",\n", - " \"04-5293\",\n", - " \"03-9046\",\n", - " \"04-163\",\n", - " \"05-5705\",\n", - " \"03-1293\",\n", - " \"04-1581\",\n", - " \"04-597\",\n", - " \"04-169\",\n", - " \"03-1423\",\n", - " \"03-407\",\n", - " \"03-750\",\n", - " \"05-1056\",\n", - " \"03-388\",\n", - " \"05-5224\",\n", - " \"03-931\",\n", - " \"03-1238\",\n", - " \"04-1203\",\n", - " \"03-1454\",\n", - " \"05-259\",\n", - " \"05-11284\",\n", - " \"05-8820\",\n", - " \"05-608\",\n", - " \"04-1739\",\n", - " \"06-102\",\n", - " \"04-5462\",\n", - " \"03-855\",\n", - " \"03-1039\",\n", - " \"04-514\",\n", - " \"04-563\",\n", - " \"05-11304\",\n", - " \"05-8794\",\n", - " \"04-623\",\n", - " \"04-885\",\n", - " \"04-1170\",\n", - " \"05-1589\",\n", - " \"04-9728\",\n", - " \"06-157\",\n", - " \"04-5286\",\n", - " \"04-1264\",\n", - " \"05-908\",\n", - " \"04-1704\",\n", - " \"05-848\",\n", - " \"04-1350\",\n", - " \"05-1120\",\n", - " \"03-409\",\n", - " \"06-484\",\n", - " \"04-1144\",\n", - " \"05-785\",\n", - " \"03-1601\",\n", - " \"04-6432\",\n", - " \"04-373\",\n", - " \"04-1544\",\n", - " \"04-278\",\n", - " \"05-409\",\n", - " \"05-5966\",\n", - " \"04-928\",\n", - " \"05-1382\",\n", - " \"05-915\",\n", - " \"05-1345\",\n", - " \"128orig\",\n", - " \"04-340\",\n", - " \"03-1566\",\n", - " \"05-18\",\n", - " \"105original\",\n", - " \"03-9659\",\n", - " \"04-1360\",\n", - " \"03-710\",\n", - "}\n", + "case_ids = {'03-1164', '04-1332', '04-1140', '04-805', '04-1495', '05-352', '04-1360b', '06-5306', '03-1388', '04-473b', '03-8661', '03-1160', '03-633', '05-1508', '05-746', '05-547', '05-502', '04-759', '03-1116', '05-1240', '03-287', '04-607', '05-1126', '04-1477', '04-8990', '06-480', '04-1152', '05-1429', '03-1488', '04-10566', '04-905', '05-493', '05-1575', '04-848', '05-983', '03-1395', '06-5754', '04-52', '05-9264', '03-725', '05-184', '04-1131', '04-698', '05-381', '06-593', '02-1472', '04-712', '04-1376', '03-184', '06-116', '04-1618', '03-1500', '03-9627', '05-669', '05-85', '05-7058', '06-313', '05-1631', '05-6551', '04-1244', '05-705', '06-84', '03-1693', '04-593', '04-1034', '04-944', '04-1186', '05-1342', '04-277', '04-37', '04-70', '06-219', '04-1329', '05-465', '05-595', '04-631', '03-1230', '06-278', '04-473', '05-130', '03-814', '04-1414', '04-433', '05-83', '04-637', '04-1327', '03-9685', '02-1672', '03-1696', '04-1170b', '03-636', '04-1371', '05-1272', '04-6964', '05-380', '05-996', '03-1407', '05-1256', '05-998', '03-932', '06-5247', '04-1067', '05-1157', '03-923', '05-1541', '05-9222', '05-5992', '03-9168', '05-200', '05-260', '04-368', '04-603', '05-204', '04-480', '04-1528', '04-721', '03-10198', '04-495', '03-878', '03-9877', '04-1527', '05-593', '04-1506', '05-128', '06-5618', '05-1074', '03-9560', '03-892', '04-1084', '04-980', '05-7053', '04-881', '03-1237', '04-1324', '05-416', '04-5928', '05-1629', '04-5293', '03-9046', '04-163', '05-5705', '03-1293', '04-1581', '04-597', '04-169', '03-1423', '03-407', '03-750', '05-1056', '03-388', '05-5224', '03-931', '03-1238', '04-1203', '03-1454', '05-259', '05-11284', '05-8820', '05-608', '04-1739', '06-102', '04-5462', '03-855', '03-1039', '04-514', '04-563', '05-11304', '05-8794', '04-623', '04-885', '04-1170', '05-1589', '04-9728', '06-157', '04-5286', '04-1264', '05-908', '04-1704', '05-848', '04-1350', '05-1120', '03-409', '06-484', '04-1144', '05-785', '03-1601', '04-6432', '04-373', '04-1544', '04-278', '05-409', '05-5966', '04-928', '05-1382', '05-915', '05-1345', '128orig', '04-340', '03-1566', '05-18', '105original', '03-9659', '04-1360', '03-710'}\n", "\n", "corpus = Corpus.filter_utterances(corpus, lambda u: u.meta[\"case_id\"][5:] in case_ids)" ] @@ -687,109 +439,64 @@ "justices = lambda speaker: speaker.meta[\"type\"] == \"J\"\n", "lawyers = lambda speaker: speaker.meta[\"type\"] == \"A\"\n", "\n", - "\n", "# filter out justice utterances, leaving only justices who voted on the same side as the advocates speaking to them\n", "def target_justice_is_favorable(speaker_utt, target_utt):\n", " convo = speaker_utt.get_conversation()\n", - " if convo.meta[\"votes_side\"] is None:\n", - " return False\n", - " if speaker_utt.speaker.id not in convo.meta[\"advocates\"]:\n", - " return False\n", + " if convo.meta[\"votes_side\"] is None: return False\n", + " if speaker_utt.speaker.id not in convo.meta[\"advocates\"]: return False\n", " lawyer_side = convo.meta[\"advocates\"][speaker_utt.speaker.id][\"side\"]\n", - " if target_utt.speaker.id not in convo.meta[\"votes_side\"]:\n", - " return False\n", + " if target_utt.speaker.id not in convo.meta[\"votes_side\"]: return False\n", " justice_side = convo.meta[\"votes_side\"][target_utt.speaker.id]\n", " return justice_side == lawyer_side\n", "\n", - "\n", "def target_justice_is_unfavorable(speaker_utt, target_utt):\n", " convo = speaker_utt.get_conversation()\n", - " if convo.meta[\"votes_side\"] is None:\n", - " return False\n", - " if speaker_utt.speaker.id not in convo.meta[\"advocates\"]:\n", - " return False\n", + " if convo.meta[\"votes_side\"] is None: return False\n", + " if speaker_utt.speaker.id not in convo.meta[\"advocates\"]: return False\n", " lawyer_side = convo.meta[\"advocates\"][speaker_utt.speaker.id][\"side\"]\n", - " if target_utt.speaker.id not in convo.meta[\"votes_side\"]:\n", - " return False\n", + " if target_utt.speaker.id not in convo.meta[\"votes_side\"]: return False\n", " justice_side = convo.meta[\"votes_side\"][target_utt.speaker.id]\n", " return justice_side != lawyer_side\n", "\n", - "\n", "# filter out justice utterances, leaving only justices who voted on the same side as the advocates they spoke to\n", "def speaker_justice_is_favorable(speaker_utt, target_utt):\n", " convo = speaker_utt.get_conversation()\n", - " if convo.meta[\"votes_side\"] is None:\n", - " return False\n", - " if target_utt.speaker.id not in convo.meta[\"advocates\"]:\n", - " return False\n", + " if convo.meta[\"votes_side\"] is None: return False\n", + " if target_utt.speaker.id not in convo.meta[\"advocates\"]: return False\n", " lawyer_side = convo.meta[\"advocates\"][target_utt.speaker.id][\"side\"]\n", - " if speaker_utt.speaker.id not in convo.meta[\"votes_side\"]:\n", - " return False\n", + " if speaker_utt.speaker.id not in convo.meta[\"votes_side\"]: return False\n", " justice_side = convo.meta[\"votes_side\"][speaker_utt.speaker.id]\n", " return justice_side == lawyer_side\n", "\n", - "\n", "def speaker_justice_is_unfavorable(speaker_utt, target_utt):\n", " convo = speaker_utt.get_conversation()\n", - " if convo.meta[\"votes_side\"] is None:\n", - " return False\n", - " if target_utt.speaker.id not in convo.meta[\"advocates\"]:\n", - " return False\n", + " if convo.meta[\"votes_side\"] is None: return False\n", + " if target_utt.speaker.id not in convo.meta[\"advocates\"]: return False\n", " lawyer_side = convo.meta[\"advocates\"][target_utt.speaker.id][\"side\"]\n", - " if speaker_utt.speaker.id not in convo.meta[\"votes_side\"]:\n", - " return False\n", + " if speaker_utt.speaker.id not in convo.meta[\"votes_side\"]: return False\n", " justice_side = convo.meta[\"votes_side\"][speaker_utt.speaker.id]\n", " return justice_side != lawyer_side\n", "\n", - "\n", "# do lawyers coordinate more to unfavorable or favorable justices?\n", "make_chart(\n", - " coord.summarize(\n", - " corpus,\n", - " lawyers,\n", - " justices,\n", - " summary_report=True,\n", - " target_thresh=3,\n", - " speaker_thresh=3,\n", - " split_by_attribs=split,\n", - " target_utterance_selector=target_justice_is_unfavorable,\n", - " ),\n", - " coord.summarize(\n", - " corpus,\n", - " lawyers,\n", - " justices,\n", - " summary_report=True,\n", - " target_thresh=3,\n", - " speaker_thresh=3,\n", - " split_by_attribs=split,\n", - " target_utterance_selector=target_justice_is_favorable,\n", - " ),\n", - " \"Target-unfavorable justice\",\n", - " \"Target-favorable justice\",\n", + " coord.summarize(corpus, lawyers, justices, summary_report=True,\n", + " target_thresh=3, speaker_thresh=3, split_by_attribs=split,\n", + " target_utterance_selector=target_justice_is_unfavorable),\n", + " coord.summarize(corpus, lawyers, justices, summary_report=True,\n", + " target_thresh=3, speaker_thresh=3, split_by_attribs=split,\n", + " target_utterance_selector=target_justice_is_favorable),\n", + " \"Target-unfavorable justice\", \"Target-favorable justice\"\n", ")\n", "# do unfavorable justices coordinate to lawyers more than favorable justices, or\n", "# vice versa?\n", "make_chart(\n", - " coord.summarize(\n", - " corpus,\n", - " justices,\n", - " lawyers,\n", - " summary_report=True,\n", - " target_thresh=6,\n", - " split_by_attribs=split,\n", - " speaker_utterance_selector=speaker_justice_is_unfavorable,\n", - " ),\n", - " coord.summarize(\n", - " corpus,\n", - " justices,\n", - " lawyers,\n", - " summary_report=True,\n", - " target_thresh=6,\n", - " split_by_attribs=split,\n", - " speaker_utterance_selector=speaker_justice_is_favorable,\n", - " ),\n", - " \"Speaker-unfavorable justice\",\n", - " \"Speaker-favorable justice\",\n", + " coord.summarize(corpus, justices, lawyers, summary_report=True,\n", + " target_thresh=6, split_by_attribs=split,\n", + " speaker_utterance_selector=speaker_justice_is_unfavorable),\n", + " coord.summarize(corpus, justices, lawyers, summary_report=True,\n", + " target_thresh=6, split_by_attribs=split,\n", + " speaker_utterance_selector=speaker_justice_is_favorable),\n", + " \"Speaker-unfavorable justice\", \"Speaker-favorable justice\"\n", ")" ] }, diff --git a/examples/corpus_from_pandas.ipynb b/examples/corpus_from_pandas.ipynb index 15610b42..37d3e8a6 100644 --- a/examples/corpus_from_pandas.ipynb +++ b/examples/corpus_from_pandas.ipynb @@ -48,7 +48,7 @@ ], "source": [ "# using an existing Corpus of the subreddit named 'hey'\n", - "corpus = Corpus(download(\"subreddit-hey\"))" + "corpus = Corpus(download('subreddit-hey')) " ] }, { @@ -78,9 +78,9 @@ "outputs": [], "source": [ "# you can ignore this\n", - "utt_df = corpus.get_utterances_dataframe().drop(columns=[\"vectors\"])\n", - "convo_df = corpus.get_conversations_dataframe().drop(columns=[\"vectors\"])\n", - "speaker_df = corpus.get_speakers_dataframe().drop(columns=[\"vectors\"])" + "utt_df = corpus.get_utterances_dataframe().drop(columns=['vectors'])\n", + "convo_df = corpus.get_conversations_dataframe().drop(columns=['vectors'])\n", + "speaker_df = corpus.get_speakers_dataframe().drop(columns=['vectors'])" ] }, { @@ -992,9 +992,7 @@ } ], "source": [ - "new_corpus = Corpus.from_pandas(\n", - " utterances_df=utt_df, speakers_df=speaker_df, conversations_df=convo_df\n", - ")" + "new_corpus = Corpus.from_pandas(utterances_df=utt_df, speakers_df=speaker_df, conversations_df=convo_df)" ] }, { @@ -1032,10 +1030,10 @@ "outputs": [], "source": [ "# constructing simple utterance dataframe, you can ignore this\n", - "simple_utt_df = utt_df[[\"timestamp\", \"text\", \"speaker\", \"reply_to\", \"conversation_id\"]]\n", + "simple_utt_df = utt_df[['timestamp', 'text', 'speaker', 'reply_to', 'conversation_id']]\n", "ids = list(simple_utt_df.index)\n", "simple_utt_df = simple_utt_df.reset_index()\n", - "simple_utt_df[\"id\"] = ids" + "simple_utt_df['id'] = ids" ] }, { @@ -1536,7 +1534,7 @@ ], "source": [ "# before\n", - "corpus.get_conversations_dataframe().drop(columns=[\"vectors\"]).head()" + "corpus.get_conversations_dataframe().drop(columns=['vectors']).head()" ] }, { @@ -1603,7 +1601,7 @@ ], "source": [ "# after\n", - "new_corpus.get_conversations_dataframe().drop(columns=[\"vectors\"]).head()" + "new_corpus.get_conversations_dataframe().drop(columns=['vectors']).head()" ] }, { @@ -1642,4 +1640,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file diff --git a/examples/dataset-examples/wikiconv/Create_Conversations_Script.ipynb b/examples/dataset-examples/wikiconv/Create_Conversations_Script.ipynb index 164a93b3..3264372b 100644 --- a/examples/dataset-examples/wikiconv/Create_Conversations_Script.ipynb +++ b/examples/dataset-examples/wikiconv/Create_Conversations_Script.ipynb @@ -15,7 +15,7 @@ "metadata": {}, "outputs": [], "source": [ - "# import relevant modules\n", + "#import relevant modules\n", "from datetime import datetime, timedelta\n", "from convokit import Corpus, download\n", "import re\n", @@ -31,13 +31,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "Dataset already exists at /Users/seanzhangkx/.convokit/downloads/wikiconv-2003\n" + "Downloading wikiconv-2003 to /kitchen/convokit_corpora_jpc/wikiconv-2003\n", + "Downloading wikiconv-2003 from http://zissou.infosci.cornell.edu/convokit/datasets/wikiconv-corpus/corpus-zipped/2003/full.corpus.zip (38.7MB)... Done\n" ] } ], "source": [ "# Load the 2003 wikiconv corpus (feel free to change this to a year of your preference)\n", - "wikiconv_corpus = Corpus(filename=download(\"wikiconv-2003\"))" + "wikiconv_corpus = Corpus(filename=download('wikiconv-2003'))" ] }, { @@ -102,21 +103,18 @@ "metadata": {}, "outputs": [], "source": [ - "# Randomly chooses the set number of conversations to print from the entire conversaton set\n", - "def print_random_conversations(\n", - " conversation_list, number_of_conversations, conversation_min_length, conversation_corpus\n", - "):\n", + "#Randomly chooses the set number of conversations to print from the entire conversaton set\n", + "def print_random_conversations(conversation_list, number_of_conversations, conversation_min_length, conversation_corpus): \n", " randomly_generated_conversation_list = []\n", - " while len(randomly_generated_conversation_list) != number_of_conversations:\n", - " new_conversation = random.randint(0, (len(conversation_list) - 1))\n", + " while (len(randomly_generated_conversation_list) != number_of_conversations):\n", + " new_conversation = random.randint(0, (len(conversation_list)-1))\n", " new_conversation_id = conversation_list[new_conversation]\n", " conversation_ids_list = new_conversation_id.get_utterance_ids()\n", - " if new_conversation not in randomly_generated_conversation_list and (\n", - " len(conversation_ids_list) >= conversation_min_length\n", - " ):\n", + " if (new_conversation not in randomly_generated_conversation_list \n", + " and (len(conversation_ids_list) >= conversation_min_length)):\n", " randomly_generated_conversation_list.append(new_conversation_id)\n", - "\n", - " return randomly_generated_conversation_list" + " \n", + " return randomly_generated_conversation_list\n" ] }, { @@ -135,7 +133,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "[Conversation({'obj_type': 'conversation', 'vectors': [], 'tree': None, 'owner': , 'id': '1172638.641.641', 'meta': ConvoKitMeta({'page_id': '253576', 'page_title': 'Roman Catholic Archdiocese of Quebec', 'page_type': 'talk'})}), Conversation({'obj_type': 'conversation', 'vectors': [], 'tree': None, 'owner': , 'id': '691102.8439.8439', 'meta': ConvoKitMeta({'page_id': '178863', 'page_title': 'Jimfbleak', 'page_type': 'user_talk'})}), Conversation({'obj_type': 'conversation', 'vectors': [], 'tree': None, 'owner': , 'id': '490071.18706.18706', 'meta': ConvoKitMeta({'page_id': '14218', 'page_title': 'Homophobia/Archive 6', 'page_type': 'talk'})})]\n" + "[Conversation({'obj_type': 'conversation', 'meta': {'page_id': '383784', 'page_title': 'Matty j', 'page_type': 'user_talk'}, 'vectors': [], 'tree': None, 'owner': , 'id': '2081953.389.389'}), Conversation({'obj_type': 'conversation', 'meta': {'page_id': '187772', 'page_title': 'Large numbers', 'page_type': 'talk'}, 'vectors': [], 'tree': None, 'owner': , 'id': '1053969.145.145'}), Conversation({'obj_type': 'conversation', 'meta': {'page_id': '269015', 'page_title': 'Creationism/Archive 6', 'page_type': 'talk'}, 'vectors': [], 'tree': None, 'owner': , 'id': '1324714.25382.25382'})]\n" ] } ], @@ -144,10 +142,9 @@ "number_of_conversations_to_print = 3\n", "conversation_min_length = 2\n", "\n", - "random_conversations = print_random_conversations(\n", - " conversation_list, number_of_conversations_to_print, conversation_min_length, wikiconv_corpus\n", - ")\n", - "print(random_conversations)" + "random_conversations = print_random_conversations(conversation_list, number_of_conversations_to_print,\n", + " conversation_min_length, wikiconv_corpus)\n", + "print (random_conversations)" ] }, { @@ -167,22 +164,21 @@ "name": "stdout", "output_type": "stream", "text": [ - "https://en.wikipedia.org/w/index.php?title=talk:Roman_Catholic_Archdiocese_of_Quebec\n", - "https://en.wikipedia.org/w/index.php?title=user_talk:Jimfbleak\n", - "https://en.wikipedia.org/w/index.php?title=talk:Homophobia/Archive_6\n" + "https://en.wikipedia.org/w/index.php?title=user_talk:Matty_j\n", + "https://en.wikipedia.org/w/index.php?title=talk:Large_numbers\n", + "https://en.wikipedia.org/w/index.php?title=talk:Creationism/Archive_6\n" ] } ], "source": [ "def wikipedia_link_info(conversation):\n", - " page_title = conversation.meta[\"page_title\"]\n", - " page_title = re.sub(\"\\s+\", \"_\", page_title)\n", - " page_type = conversation.meta[\"page_type\"]\n", - " link_value = \"https://en.wikipedia.org/w/index.php?title=\" + page_type + \":\" + page_title\n", - "\n", + " page_title = conversation.meta['page_title']\n", + " page_title = re.sub('\\s+', '_', page_title)\n", + " page_type = conversation.meta['page_type']\n", + " link_value = \"https://en.wikipedia.org/w/index.php?title=\"+page_type+\":\"+page_title\n", + " \n", " return link_value\n", "\n", - "\n", "for conversation in random_conversations:\n", " print(wikipedia_link_info(conversation))\n", " conversation_ids_list = conversation.get_utterance_ids()" @@ -203,7 +199,7 @@ "metadata": {}, "outputs": [], "source": [ - "# For any comments that do not have matching reply to ids, sort these comments in order of recency\n", + "#For any comments that do not have matching reply to ids, sort these comments in order of recency \n", "def sort_by_timestamp(conversation_ids_list, conversation_corpus):\n", " list_of_utterances = []\n", " for id_val in conversation_ids_list:\n", @@ -212,10 +208,10 @@ " tuple_val = (id_val, timestamp_val)\n", " list_of_utterances.append(tuple_val)\n", "\n", - " sorted_utterance_list = sorted(list_of_utterances, key=lambda x: x[1])\n", + " sorted_utterance_list = sorted(list_of_utterances, key = lambda x:x[1])\n", " sorted_utterance_list.reverse()\n", " id_list = [i[0] for i in sorted_utterance_list]\n", - " return id_list" + " return (id_list)" ] }, { @@ -224,25 +220,23 @@ "metadata": {}, "outputs": [], "source": [ - "# Find cases in which an utterance's reply to is to a comment in the chain that has been modified, deleted or restored\n", - "def check_lists_for_match(\n", - " x, conversation_ids_list, utterance, next_utterance_value, conversation_corpus\n", - "):\n", - " modification_list = utterance.meta[\"modification\"]\n", - " deletion_list = utterance.meta[\"deletion\"]\n", - " restoration_list = utterance.meta[\"restoration\"]\n", - " if len(modification_list) > 0:\n", + "#Find cases in which an utterance's reply to is to a comment in the chain that has been modified, deleted or restored\n", + "def check_lists_for_match(x, conversation_ids_list, utterance, next_utterance_value, conversation_corpus):\n", + " modification_list = utterance.meta['modification']\n", + " deletion_list = utterance.meta['deletion']\n", + " restoration_list = utterance.meta['restoration']\n", + " if (len(modification_list)>0):\n", " for utterance_val in modification_list:\n", - " if utterance_val[\"id\"] == next_utterance_value.reply_to:\n", - " conversation_ids_list.insert(x + 1, next_utterance_value.id)\n", - " if len(deletion_list) > 0:\n", + " if (utterance_val['id'] == next_utterance_value.reply_to):\n", + " conversation_ids_list.insert(x+1, next_utterance_value.id)\n", + " if (len(deletion_list)>0):\n", " for utterance_val in deletion_list:\n", - " if utterance_val[\"id\"] == next_utterance_value.reply_to:\n", - " conversation_ids_list.insert(x + 1, next_utterance_value.id)\n", - " if len(restoration_list) > 0:\n", + " if (utterance_val['id'] == next_utterance_value.reply_to):\n", + " conversation_ids_list.insert(x+1, next_utterance_value.id)\n", + " if (len(restoration_list)>0):\n", " for utterance_val in restoration_list:\n", - " if utterance_val[\"id\"] == next_utterance_value.reply_to:\n", - " conversation_ids_list.insert(x + 1, next_utterance_value.id)" + " if (utterance_val['id'] == next_utterance_value.reply_to):\n", + " conversation_ids_list.insert(x+1, next_utterance_value.id)" ] }, { @@ -255,21 +249,15 @@ "def add_utterance(conversation_ids_list, next_utterance_value, conversation_corpus):\n", " if next_utterance_value.id in conversation_ids_list:\n", " return conversation_ids_list\n", - " elif next_utterance_value.reply_to is None:\n", + " elif (next_utterance_value.reply_to is None):\n", " conversation_ids_list.append(next_utterance_value.id)\n", " else:\n", - " for x in range(0, len(conversation_ids_list)):\n", + " for x in range(0,len(conversation_ids_list)):\n", " utterance_id = conversation_ids_list[x]\n", - " if utterance_id == next_utterance_value.reply_to:\n", - " conversation_ids_list.insert(x + 1, next_utterance_value.id)\n", + " if (utterance_id == next_utterance_value.reply_to):\n", + " conversation_ids_list.insert(x+1, next_utterance_value.id)\n", " else:\n", - " check_lists_for_match(\n", - " x,\n", - " conversation_ids_list,\n", - " conversation_corpus.get_utterance(utterance_id),\n", - " next_utterance_value,\n", - " conversation_corpus,\n", - " )\n", + " check_lists_for_match(x, conversation_ids_list, conversation_corpus.get_utterance(utterance_id), next_utterance_value, conversation_corpus)\n", "\n", " return conversation_ids_list" ] @@ -280,35 +268,29 @@ "metadata": {}, "outputs": [], "source": [ - "# The order of the returned conversation ids is not guaranteed; compute the correct ordering\n", + "#The order of the returned conversation ids is not guaranteed; compute the correct ordering \n", "def find_correct_order(conversation_ids_list, conversation_corpus):\n", " correct_list_order = []\n", - " # if the conversation has only one comment, return the conversation list\n", - " if len(conversation_ids_list) == 1:\n", + " #if the conversation has only one comment, return the conversation list\n", + " if (len(conversation_ids_list) == 1 ):\n", " return conversation_ids_list\n", "\n", - " # When the conversation has more than one comment, find the correct order of the comments\n", - " if len(conversation_ids_list) > 1:\n", - " # Implement a fail safe to efficiently sort\n", + " #When the conversation has more than one comment, find the correct order of the comments\n", + " if (len(conversation_ids_list) >1):\n", + " #Implement a fail safe to efficiently sort \n", " number_of_iterations = 0\n", - " while number_of_iterations < 20 and len(correct_list_order) != len(conversation_ids_list):\n", + " while (number_of_iterations <20 and len(correct_list_order) != len(conversation_ids_list)):\n", " for utterance_id in conversation_ids_list:\n", - " correct_list_order = add_utterance(\n", - " correct_list_order,\n", - " conversation_corpus.get_utterance(utterance_id),\n", - " conversation_corpus,\n", - " )\n", - " number_of_iterations += 1\n", + " correct_list_order = add_utterance(correct_list_order, conversation_corpus.get_utterance(utterance_id), conversation_corpus)\n", + " number_of_iterations+=1\n", "\n", - " # In some of the conversations, new utterances will be added that don't reply directly to the current conversation\n", - " # Instead, these new utterances are part of the topic at hand (under the same conversation root) and are sorted by recency\n", - " if len(correct_list_order) != len(conversation_ids_list):\n", + " #In some of the conversations, new utterances will be added that don't reply directly to the current conversation\n", + " #Instead, these new utterances are part of the topic at hand (under the same conversation root) and are sorted by recency\n", + " if (len(correct_list_order) != len(conversation_ids_list)):\n", " difference_in_sets = set(conversation_ids_list).difference(correct_list_order)\n", - " timestamp_sorted_difference = sort_by_timestamp(\n", - " list(difference_in_sets), conversation_corpus\n", - " )\n", + " timestamp_sorted_difference = sort_by_timestamp(list(difference_in_sets), conversation_corpus)\n", " correct_list_order.extend(timestamp_sorted_difference)\n", - " return correct_list_order" + " return correct_list_order\n" ] }, { @@ -327,16 +309,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Original Order of IDs:['1172638.641.641', '1173000.1045.1045']\n", - "Correct Order of IDs:['1172638.641.641', '1173000.1045.1045']\n", + "Original Order of IDs:['2081953.413.389', '2081953.389.389']\n", + "Correct Order of IDs:['2081953.389.389', '2081953.413.389']\n", "\n", "\n", - "Original Order of IDs:['811685.0.8439', '811685.0.8612']\n", - "Correct Order of IDs:['811685.0.8439', '811685.0.8612']\n", + "Original Order of IDs:['1053969.145.145', '1054046.1046.1046', '1054707.1680.1680', '3744612.1995.1995']\n", + "Correct Order of IDs:['1053969.145.145', '1054707.1680.1680', '3744612.1995.1995', '1054046.1046.1046']\n", "\n", "\n", - "Original Order of IDs:['709021.8491.9368', '709021.8654.11099']\n", - "Correct Order of IDs:['709021.8491.9368', '709021.8654.11099']\n", + "Original Order of IDs:['1344757.132.30543', '1344757.132.30573', '1344757.132.30760', '1344757.132.31076', '1344757.132.30860', '1344757.132.31731', '1344757.132.32775', '1344757.132.32926', '1329814.35766.35766']\n", + "Correct Order of IDs:['1344757.132.30543', '1344757.132.30573', '1344757.132.30760', '1344757.132.31076', '1344757.132.30860', '1344757.132.31731', '1344757.132.32775', '1344757.132.32926', '1329814.35766.35766']\n", "\n", "\n" ] @@ -345,9 +327,9 @@ "source": [ "for conversation in random_conversations:\n", " conversation_ids_list = conversation.get_utterance_ids()\n", - " print(\"Original Order of IDs:\" + str(conversation_ids_list))\n", - " print(\"Correct Order of IDs:\" + str(find_correct_order(conversation_ids_list, wikiconv_corpus)))\n", - " print(\"\\n\")" + " print ('Original Order of IDs:' + str(conversation_ids_list))\n", + " print('Correct Order of IDs:' + str(find_correct_order(conversation_ids_list, wikiconv_corpus)))\n", + " print ('\\n')" ] }, { @@ -363,26 +345,22 @@ "metadata": {}, "outputs": [], "source": [ - "# Print the conversation text from the list of conversation ids\n", + "#Print the conversation text from the list of conversation ids\n", "def print_final_conversation(random_conversations, conversation_corpus):\n", " for conversation in random_conversations:\n", " print(wikipedia_link_info(conversation))\n", " conversation_ids_list = conversation.get_utterance_ids()\n", - " # First correctly reorder the comments\n", + " #First correctly reorder the comments\n", " ordered_list = find_correct_order(conversation_ids_list, conversation_corpus)\n", - " # For each utterance, print the text present if the utterance has not been deleted\n", + " #For each utterance, print the text present if the utterance has not been deleted\n", " for utterance_id in ordered_list:\n", " utterance_value = conversation_corpus.get_utterance(utterance_id)\n", - " if utterance_value.text != \" \":\n", - " print(utterance_value.text)\n", - " date_time_val = datetime.fromtimestamp(utterance_value.timestamp).strftime(\n", - " \"%H:%M %d-%m-%Y\"\n", - " )\n", - " formatted_user_name = (\n", - " \"--\" + str(utterance_value.speaker.id) + \" \" + str(date_time_val)\n", - " )\n", - " print(formatted_user_name)\n", - " print(\"\\n\\n\")" + " if (utterance_value.text != \" \"):\n", + " print (utterance_value.text)\n", + " date_time_val = datetime.fromtimestamp(utterance_value.timestamp).strftime('%H:%M %d-%m-%Y')\n", + " formatted_user_name = \"--\" + str(utterance_value.user.name) + \" \" + str(date_time_val)\n", + " print (formatted_user_name)\n", + " print ('\\n\\n')" ] }, { @@ -394,32 +372,46 @@ "name": "stdout", "output_type": "stream", "text": [ - "https://en.wikipedia.org/w/index.php?title=talk:Roman_Catholic_Archdiocese_of_Quebec\n", - "Two problems with the title:\n", - "1) it should not be capitalized;\n", - "2) all the archbishops are also bishops (for example, the list at Diocese de Montreal lists a particular one as \"third bishop and first archbishop\").\n", - "I had moved this to List of Roman Catholic bishops of Quebec, and likewise for the Montreal list, but efghij moved them back. May I ask why? - \n", - "--Montrealais 11:41 20-07-2003\n", - "1) It should be capitalized. \"Bishop of Quebec\" is a title, just like \"Prime Minister of Canada\" or \"King of Spain\".\n", - "2) It's technically correct that all archbishops are also bishops, however it is somewhat counter-intuatve to list them all under \"Bishops of Quebec\".\n", - "- 19:00 20 Jul 2003 (UTC)\n", - "--Efghij 15:00 20-07-2003\n", + "https://en.wikipedia.org/w/index.php?title=user_talk:Matty_j\n", + " Baseball/temp \n", + "--Ktsquare 20:56 23-12-2003\n", + "Hi Matty, I noticed you have contributed to many bios of MLB players, I'd like to ask for your opinion whether it's time to move the rewritten Baseball/temp to Baseball. Please comment at Talk:Baseball/temp. Thanks. \n", + "--Ktsquare 20:56 23-12-2003\n", "\n", "\n", "\n", - "https://en.wikipedia.org/w/index.php?title=user_talk:Jimfbleak\n", + "https://en.wikipedia.org/w/index.php?title=talk:Large_numbers\n", + "Can I suggest that we include only pure numbers in this article, not distances and other measurements? Would anyone object if I deleted the astronomical distances, since they are only large numbers when expressed in small units? I suppose I should go further and say that Avogradro's number is also just an arbitrary unit, but I shan't, because I feel I'm on a slippery slope towards excluding everything! \n", + "--Heron 05:16 18-06-2003\n", + "Let me put this another way. I think the present article should be, as it mostly is, about the mathematics of large numbers. Other large quantities, such as astronomical distances, already have a place on the orders of magnitude pages (1e10 m etc.) Perhaps we should just link to them. \n", + "--Heron 05:56 18-06-2003\n", + "Yes, you're quite right. Well, about most things. I could argue that physically distance is dimensionless but that would just be arrogant pedantry. The page title is \"large number\" not just \"large\", and the order of magnitude pages are pretty good for comparing distances. BTW did you see my reply for you on Wikipedia:Reference desk? 13:53 18 Jun 2003 (UTC)\n", + "--Tim Starling 09:53 18-06-2003\n", + "I agree with you about 1010. I wouldn't call the number of bits on a hard disk particularly large, either. It is certainly subjective. My point was that measurements of distance etc. are different from pure numbers. Measurements are, by definition, relative, whereas at least pure numbers are absolute. Largeness is another thing. Perhaps one definition would be \"a number considered as large at a particular time by a particular culture\". For example, I seem to remember that the Old Testament uses the number 40 as a generic large number in several places (e.g. \"40 days and 40 nights\"). \n", + "--Heron 05:45 18-06-2003\n", "\n", "\n", "\n", - "https://en.wikipedia.org/w/index.php?title=talk:Homophobia/Archive_6\n", + "https://en.wikipedia.org/w/index.php?title=talk:Creationism/Archive_6\n", + "Luckily my university has an institutional subscription to OED online. Here it is:\n", + "'''Creationism''' A system or theory of creation: ''spec.'' ''a.'' The theory that God immediately creates a soul for every human being born (opposed to traducianism); ''b.'' The theory which attributes the origin of matter, the different species of animals and plants, etc., to `special creation' (opposed to evolutionism).\n", + " \n", + "--Netesq 12:29 22-08-2003\n", "\n", "\n", "\n" ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/sauna/conda-envs/zissou-env/lib/python3.7/site-packages/ipykernel_launcher.py:14: FutureWarning: speaker.name is deprecated and will be removed in a future release. Use speaker.id instead.\n" + ] } ], "source": [ - "print_final_conversation(random_conversations, wikiconv_corpus)" + "print_final_conversation(random_conversations, wikiconv_corpus)" ] }, { @@ -435,15 +427,10 @@ "metadata": {}, "outputs": [], "source": [ - "def change_defaults_print_final(\n", - " conversation_list, number_of_conversations, conversation_min_length, conversation_corpus\n", - "):\n", - " random_conversations = print_random_conversations(\n", - " conversation_list,\n", - " number_of_conversations_to_print,\n", - " conversation_min_length,\n", - " wikiconv_corpus,\n", - " )\n", + "def change_defaults_print_final(conversation_list, number_of_conversations, conversation_min_length, \n", + " conversation_corpus):\n", + " random_conversations = print_random_conversations(conversation_list, number_of_conversations_to_print,\n", + " conversation_min_length, wikiconv_corpus)\n", " print_final_conversation(random_conversations, conversation_corpus)" ] }, @@ -456,32 +443,41 @@ "name": "stdout", "output_type": "stream", "text": [ - "https://en.wikipedia.org/w/index.php?title=user_talk:Daniel_C._Boyer/archive_1\n", - "Have you written this article? or do you have any idea about this article? (If you don't understand Korean, the title means \"unmarried girl backdoor\" or something.) Is it one of your work? \n", - "--217.0.84.251 15:36 07-04-2003\n", - "Yes; it should be The Tailgating Spinster (title of my book of poetry). I apologise if my Korean is not good enough; perhaps you could provide a better translation of the title. \n", - "--Daniel C. Boyer 10:47 09-04-2003\n", - "OK. I'll try to find a better translation. But due to my poor english, I can't understand the title. Does Tailgating mean ''chasing closely''? And does Spinster mean ''unmarried old woman''? \n", - "--Xaos~enwiki 23:02 09-04-2003\n", - "Yes; \"tailgating\" means (when one is driving) to follow too closely behind the car (or truck) in front of you. A spinster is usually used to mean an ''unmaried old woman'' but it can mean an unmarried woman of any age (probably she would have to be old enough to be able to get married to qualify as a spinster). 19:43 Apr 10, 2003 (UTC)\n", - "--Daniel C. Boyer 15:43 10-04-2003\n", + "https://en.wikipedia.org/w/index.php?title=talk:Main_Page\n", + "age pump|Village pump]]. See talk:Wikipedia category schemes for general discussion of the category scheme on Wikipedia's Main Page.'''\n", + "'''See Wikipedia talk:Selected Articles on the Main Page for discussion of (and recommendations for) the Selected Articles on the Main Page. See below for more discussion of particular issues regarding the Main Page (e.g., whether to include a particular category on the page). Please add your additions at the bottom.'''\n", + "\n", + "Some older talk has been archived to\n", + "talk:Main Page/Archive 1\n", + "talk:Main Page/Archive 2\n", + "talk:Main Page/Archive 3\n", + "talk:Main Page/Archive 4\n", + "talk:Main Page/Archive 5\n", + "talk:Main Page/Archive 6\n", + "--Schneelocke 08:26 05-09-2003\n", "\n", "\n", "\n" ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/sauna/conda-envs/zissou-env/lib/python3.7/site-packages/ipykernel_launcher.py:14: FutureWarning: speaker.name is deprecated and will be removed in a future release. Use speaker.id instead.\n" + ] } ], "source": [ "conversation_list = list(wikiconv_corpus.iter_conversations())\n", "number_of_conversations_to_print = 1\n", "conversation_min_length = 2\n", - "# Refresher on where the wikiconv_corpus is defined\n", + "#Refresher on where the wikiconv_corpus is defined\n", "# corpus_path = \"/Users/adityajha/Desktop/ConvoKit-master/second_set/conversation_corpus_year_2015\"\n", "# wikiconv_corpus = Corpus(filename=corpus_path)\n", "\n", - "change_defaults_print_final(\n", - " conversation_list, number_of_conversations_to_print, conversation_min_length, wikiconv_corpus\n", - ")" + "change_defaults_print_final(conversation_list, number_of_conversations_to_print, conversation_min_length,\n", + " wikiconv_corpus)" ] }, { @@ -497,45 +493,37 @@ "metadata": {}, "outputs": [], "source": [ - "def sort_changes_by_timestamp(\n", - " modification_list, deletion_list, restoration_list, original_utterance\n", - "):\n", + "def sort_changes_by_timestamp(modification_list, deletion_list, restoration_list, original_utterance):\n", " text_time_tuple_list = []\n", - " if original_utterance is not None:\n", - " text_time_original = (\n", - " original_utterance[\"text\"],\n", - " original_utterance[\"timestamp\"],\n", - " original_utterance[\"speaker.id\"],\n", - " \"original\",\n", - " )\n", + " if (original_utterance is not None):\n", + " text_time_original = (original_utterance['text'],original_utterance['timestamp'],\n", + " original_utterance['speaker.id'], 'original')\n", " text_time_tuple_list.append(text_time_original)\n", + " \n", "\n", " for utterance in modification_list:\n", - " text_time = (\n", - " utterance[\"text\"],\n", - " utterance[\"timestamp\"],\n", - " utterance[\"speaker.id\"],\n", - " \"modification\",\n", - " )\n", + " text_time= (utterance['text'], utterance['timestamp'],\n", + " utterance['speaker.id'], 'modification')\n", " text_time_tuple_list.append(text_time)\n", - "\n", + " \n", " for utterance in deletion_list:\n", - " text_time = (\"\", utterance[\"timestamp\"], utterance[\"speaker.id\"], \"deletion\")\n", + " text_time= ('', utterance['timestamp'],\n", + " utterance['speaker.id'], 'deletion')\n", " text_time_tuple_list.append(text_time)\n", - "\n", + " \n", " for utterance in restoration_list:\n", - " text_time = (\n", - " utterance[\"text\"],\n", - " utterance[\"timestamp\"],\n", - " utterance[\"speaker.id\"],\n", - " \"restoration\",\n", - " )\n", + " text_time= (utterance['text'], utterance['timestamp'],\n", + " utterance['speaker.id'], 'restoration')\n", " text_time_tuple_list.append(text_time)\n", - "\n", + " \n", " text_time_tuple_list.sort(key=lambda x: x[1])\n", - " # text_time_tuple_list.reverse()\n", - "\n", - " return text_time_tuple_list" + " #text_time_tuple_list.reverse()\n", + " \n", + " \n", + " \n", + " return text_time_tuple_list\n", + " \n", + " " ] }, { @@ -547,52 +535,40 @@ "def print_intermediate_conversation(random_conversations, conversation_corpus):\n", " for conversation in random_conversations:\n", " conversation_ids_list = conversation.get_utterance_ids()\n", - " # First correctly reorder the comments\n", + " #First correctly reorder the comments\n", " ordered_list = find_correct_order(conversation_ids_list, conversation_corpus)\n", - " # For each utterance, print the text present if the utterance has not been deleted\n", + " #For each utterance, print the text present if the utterance has not been deleted\n", " for utterance_id in ordered_list:\n", " utterance_value = conversation_corpus.get_utterance(utterance_id)\n", - " if utterance_value.text != \" \":\n", - " final_comment = utterance_value.text\n", - " date_time_val = datetime.fromtimestamp(utterance_value.timestamp).strftime(\n", - " \"%H:%M %d-%m-%Y\"\n", - " )\n", - " formatted_user_name = (\n", - " \"--\" + str(utterance_value.speaker.id) + \" \" + str(date_time_val)\n", - " )\n", - "\n", + " if (utterance_value.text != \" \"):\n", + " final_comment = utterance_value.text\n", + " date_time_val = datetime.fromtimestamp(utterance_value.timestamp).strftime('%H:%M %d-%m-%Y')\n", + " formatted_user_name = \"--\" + str(utterance_value.user.name) + \" \" + str(date_time_val)\n", + " \n", + " \n", " final_timestamp = utterance_value.timestamp\n", - " modification_list = utterance_value.meta[\"modification\"]\n", - " deletion_list = utterance_value.meta[\"deletion\"]\n", - " restoration_list = utterance_value.meta[\"restoration\"]\n", - "\n", - " sorted_timestamps = sort_changes_by_timestamp(\n", - " modification_list,\n", - " deletion_list,\n", - " restoration_list,\n", - " utterance_value.meta[\"original\"],\n", - " )\n", - "\n", - " if len(sorted_timestamps) > 0:\n", + " modification_list = utterance_value.meta['modification']\n", + " deletion_list = utterance_value.meta['deletion']\n", + " restoration_list = utterance_value.meta['restoration']\n", + " \n", + " sorted_timestamps = sort_changes_by_timestamp(modification_list, deletion_list, restoration_list,\n", + " utterance_value.meta['original'])\n", + " \n", + " if (len(sorted_timestamps)>0):\n", " print(wikipedia_link_info(conversation))\n", - " print(\"Final Comment\")\n", - " print(final_comment)\n", - " print(formatted_user_name)\n", - "\n", + " print ('Final Comment')\n", + " print (final_comment)\n", + " print (formatted_user_name)\n", + " \n", " for value in sorted_timestamps:\n", - " print(\"\\n\")\n", - " print(value[3])\n", - " print(value[0])\n", - " formatted_user_name = (\n", - " \"--\"\n", - " + str(value[2])\n", - " + \" \"\n", - " + str(\n", - " datetime.fromtimestamp(float(value[1])).strftime(\"%H:%M %d-%m-%Y\")\n", - " )\n", - " )\n", - " # str(datetime.fromtimestamp(value[1]).strftime('%H:%M %d-%m-%Y'))\n", - " print(formatted_user_name)" + " print ('\\n')\n", + " print (value[3])\n", + " print (value[0])\n", + " formatted_user_name = \"--\" + str(value[2]) + \" \" + str(datetime.fromtimestamp(float(value[1])).strftime('%H:%M %d-%m-%Y'))\n", + " #str(datetime.fromtimestamp(value[1]).strftime('%H:%M %d-%m-%Y'))\n", + " print (formatted_user_name)\n", + "\n", + " " ] }, { @@ -608,15 +584,10 @@ "metadata": {}, "outputs": [], "source": [ - "def change_defaults_print_intermediate(\n", - " conversation_list, number_of_conversations, conversation_min_length, conversation_corpus\n", - "):\n", - " random_conversations = print_random_conversations(\n", - " conversation_list,\n", - " number_of_conversations_to_print,\n", - " conversation_min_length,\n", - " wikiconv_corpus,\n", - " )\n", + "def change_defaults_print_intermediate(conversation_list, number_of_conversations, conversation_min_length, \n", + " conversation_corpus):\n", + " random_conversations = print_random_conversations(conversation_list, number_of_conversations_to_print,\n", + " conversation_min_length, wikiconv_corpus)\n", " print_intermediate_conversation(random_conversations, conversation_corpus)" ] }, @@ -636,25 +607,499 @@ "name": "stdout", "output_type": "stream", "text": [ - "https://en.wikipedia.org/w/index.php?title=user_talk:Alex756/Archive\n", + "https://en.wikipedia.org/w/index.php?title=talk:Book_of_Revelation/Archive_1\n", + "Final Comment\n", + "OK, I can go look up some info. I am a little unsure of which part is considered sweeping. I assume that we agree that this historical interpretation is common among non-Christians and secular Bible scholars. It will be easy for me to get references to the Catholic part of this claim; this view is what their new publications have taught, for well over 20 years. References will be forthcoming. As for the viewpoint of liberal protestants, this will take a bit more work! \n", + "--RK 21:39 24-04-2003\n", + "\n", + "\n", + "original\n", + "OK, I can go look up some info. I am a little unsure of which part is considered sweeping. I assume that we agree that this historical interpretation is common among non-Christians and secular Bible scholars. It will be easy for me to get references to the Catholic part of this claim; this view is what their new publications have taught, for well over 20 years. References will be forthcoming. As for the viewpoint of liberal protestants, this will take a bit more work! \n", + "--RK 11:41 11-12-2002\n", + "\n", + "\n", + "deletion\n", + "\n", + "--RK 21:33 24-04-2003\n", + "\n", + "\n", + "restoration\n", + "OK, I can go look up some info. I am a little unsure of which part is considered sweeping. I assume that we agree that this historical interpretation is common among non-Christians and secular Bible scholars. It will be easy for me to get references to the Catholic part of this claim; this view is what their new publications have taught, for well over 20 years. References will be forthcoming. As for the viewpoint of liberal protestants, this will take a bit more work! \n", + "--RK 21:39 24-04-2003\n", + "https://en.wikipedia.org/w/index.php?title=talk:Book_of_Revelation/Archive_1\n", + "Final Comment\n", + "RK, I believe you are confusing ''interpretation'' with ''criticism''. I remodeled the contentious paragraph, and included a link to an article on apocalyptic literature. If I understand what you mean by \"historical\", you are regarding the book as entirely concerned with events in the recent past as of the date of authorship, fused with vague predictions of Christ coming in fire and vengeance, etc.. If so, you are not discussing an interpretation of the book qua prophecy, but an understanding held by higher critics who treat the book as an example of apocalyptic literature. Please take it there, and feel free to go crazy! Don't forget the book of Enoch, and the many apocalyptic works of the Maccabean era. .\n", + "--RK 21:39 24-04-2003\n", + "\n", + "\n", + "original\n", + "RK, I believe you are confusing ''interpretation'' with ''criticism''. I remodeled the contentious paragraph, and included a link to an article on apocalyptic literature. If I understand what you mean by \"historical\", you are regarding the book as entirely concerned with events in the recent past as of the date of authorship, fused with vague predictions of Christ coming in fire and vengeance, etc.. If so, you are not discussing an interpretation of the book qua prophecy, but an understanding held by higher critics who treat the book as an example of apocalyptic literature. Please take it there, and feel free to go crazy! Don't forget the book of Enoch, and the many apocalyptic works of the Maccabean era. .\n", + "--LenBudney 11:49 11-12-2002\n", + "\n", + "\n", + "deletion\n", + "\n", + "--RK 21:33 24-04-2003\n", + "\n", + "\n", + "restoration\n", + "RK, I believe you are confusing ''interpretation'' with ''criticism''. I remodeled the contentious paragraph, and included a link to an article on apocalyptic literature. If I understand what you mean by \"historical\", you are regarding the book as entirely concerned with events in the recent past as of the date of authorship, fused with vague predictions of Christ coming in fire and vengeance, etc.. If so, you are not discussing an interpretation of the book qua prophecy, but an understanding held by higher critics who treat the book as an example of apocalyptic literature. Please take it there, and feel free to go crazy! Don't forget the book of Enoch, and the many apocalyptic works of the Maccabean era. .\n", + "--RK 21:39 24-04-2003\n", + "https://en.wikipedia.org/w/index.php?title=talk:Book_of_Revelation/Archive_1\n", + "Final Comment\n", + "Yes, I think we've achieved understanding! I think the distinction I make is useful for purposes of clarity, since the \"liberal Christians\" who agree with what you called the \"historical school\" are, in doing so, taking a controversial (to Christians) stance on the inspiration of scripture. They are rejecting the book's own claim to be foretelling the future, and agreeing with the criticism which classifies it as a pseudo-prophecy. It would be hard to include that as a \"school of interpretation\" without violating NPOV as to questions of authority, inspiration, etc.\n", + "--RK 21:39 24-04-2003\n", + "\n", + "\n", + "original\n", + "Yes, I think we've achieved understanding! I think the distinction I make is useful for purposes of clarity, since the \"liberal Christians\" who agree with what you called the \"historical school\" are, in doing so, taking a controversial (to Christians) stance on the inspiration of scripture. They are rejecting the book's own claim to be foretelling the future, and agreeing with the criticism which classifies it as a pseudo-prophecy. It would be hard to include that as a \"school of interpretation\" without violating NPOV as to questions of authority, inspiration, etc.\n", + "--LenBudney 12:37 11-12-2002\n", + "\n", + "\n", + "deletion\n", + "\n", + "--RK 21:33 24-04-2003\n", + "\n", + "\n", + "restoration\n", + "Yes, I think we've achieved understanding! I think the distinction I make is useful for purposes of clarity, since the \"liberal Christians\" who agree with what you called the \"historical school\" are, in doing so, taking a controversial (to Christians) stance on the inspiration of scripture. They are rejecting the book's own claim to be foretelling the future, and agreeing with the criticism which classifies it as a pseudo-prophecy. It would be hard to include that as a \"school of interpretation\" without violating NPOV as to questions of authority, inspiration, etc.\n", + "--RK 21:39 24-04-2003\n", + "https://en.wikipedia.org/w/index.php?title=user_talk:BL~enwiki\n", + "Final Comment\n", + " King of Wikipedia \n", + "--BL~enwiki 13:28 25-09-2003\n", + "\n", + "\n", + "original\n", + " King of Wikipedia \n", + "--Oliver Pereira 23:01 21-08-2003\n", + "\n", + "\n", + "deletion\n", + "\n", + "--142.177.74.112 13:06 25-09-2003\n", + "\n", + "\n", + "restoration\n", + " King of Wikipedia \n", + "--BL~enwiki 13:28 25-09-2003\n", + "https://en.wikipedia.org/w/index.php?title=user_talk:BL~enwiki\n", + "Final Comment\n", + "I don't think you are. P \n", + "--BL~enwiki 13:28 25-09-2003\n", + "\n", + "\n", + "original\n", + "I don't think you are. P \n", + "--Oliver Pereira 23:01 21-08-2003\n", + "\n", + "\n", + "deletion\n", + "\n", + "--142.177.74.112 13:06 25-09-2003\n", + "\n", + "\n", + "restoration\n", + "I don't think you are. P \n", + "--BL~enwiki 13:28 25-09-2003\n", + "https://en.wikipedia.org/w/index.php?title=user_talk:BL~enwiki\n", + "Final Comment\n", + "Ofcourse I am! Look at Wikipedia:King of Wikipedia\n", + "--BL~enwiki 13:28 25-09-2003\n", + "\n", + "\n", + "original\n", + "Ofcourse I am! Look at Wikipedia:King of Wikipedia\n", + "--BL~enwiki 23:02 21-08-2003\n", + "\n", + "\n", + "deletion\n", + "\n", + "--142.177.74.112 13:06 25-09-2003\n", + "\n", + "\n", + "restoration\n", + "Ofcourse I am! Look at Wikipedia:King of Wikipedia\n", + "--BL~enwiki 13:28 25-09-2003\n", + "https://en.wikipedia.org/w/index.php?title=user_talk:BL~enwiki\n", + "Final Comment\n", + "I will defeat you! \n", + "--BL~enwiki 13:28 25-09-2003\n", + "\n", + "\n", + "original\n", + "I will defeat you! \n", + "--Oliver Pereira 23:05 21-08-2003\n", + "\n", + "\n", + "deletion\n", + "\n", + "--142.177.74.112 13:06 25-09-2003\n", + "\n", + "\n", + "restoration\n", + "I will defeat you! \n", + "--BL~enwiki 13:28 25-09-2003\n", + "https://en.wikipedia.org/w/index.php?title=user_talk:BL~enwiki\n", + "Final Comment\n", + "Hi BL, I'm curious why you re-instated the troll comment about jews ruling non-jews on the talk:Israel talk page. Going by the edits of that user on other pages, it wasn't a serious comment but something put on to deliberately provoke a reaction. Various pages linking to Israel or Jews have been targeted by a series of IPs in the 67 and 68 range, some provocatively hostile to Israel, some so sychophantically (may not be the right spelling but fuck it, I'm too knackered to care! -) ) pro-Israel they are unambiguously phoney. As you know, the Israel page and one or two others are like tinderboxes just waiting for someone to cast a match onto them. Whatever about rows over real comments, I thought it unwise to leave a crude piss-take that some people might believe was real and get angry over. We have had enough trouble on that page without phoney wind-up comments triggering off rows. -) \n", + "--BL~enwiki 13:28 25-09-2003\n", + "\n", + "\n", + "original\n", + "Hi BL, I'm curious why you re-instated the troll comment about jews ruling non-jews on the talk:Israel talk page. Going by the edits of that user on other pages, it wasn't a serious comment but something put on to deliberately provoke a reaction. Various pages linking to Israel or Jews have been targeted by a series of IPs in the 67 and 68 range, some provocatively hostile to Israel, some so sychophantically (may not be the right spelling but fuck it, I'm too knackered to care! -) ) pro-Israel they are unambiguously phoney. As you know, the Israel page and one or two others are like tinderboxes just waiting for someone to cast a match onto them. Whatever about rows over real comments, I thought it unwise to leave a crude piss-take that some people might believe was real and get angry over. We have had enough trouble on that page without phoney wind-up comments triggering off rows. -) \n", + "--Jtdirl 01:34 23-08-2003\n", + "\n", + "\n", + "deletion\n", + "\n", + "--142.177.74.112 13:06 25-09-2003\n", + "\n", + "\n", + "restoration\n", + "Hi BL, I'm curious why you re-instated the troll comment about jews ruling non-jews on the talk:Israel talk page. Going by the edits of that user on other pages, it wasn't a serious comment but something put on to deliberately provoke a reaction. Various pages linking to Israel or Jews have been targeted by a series of IPs in the 67 and 68 range, some provocatively hostile to Israel, some so sychophantically (may not be the right spelling but fuck it, I'm too knackered to care! -) ) pro-Israel they are unambiguously phoney. As you know, the Israel page and one or two others are like tinderboxes just waiting for someone to cast a match onto them. Whatever about rows over real comments, I thought it unwise to leave a crude piss-take that some people might believe was real and get angry over. We have had enough trouble on that page without phoney wind-up comments triggering off rows. -) \n", + "--BL~enwiki 13:28 25-09-2003\n", + "https://en.wikipedia.org/w/index.php?title=user_talk:BL~enwiki\n", + "Final Comment\n", + "By the way, would you stop yelling KEEEEP on the votes for deletion page? It's very annoying \n", + "--BL~enwiki 13:28 25-09-2003\n", + "\n", + "\n", + "original\n", + "By the way, would you stop yelling KEEEEP on the votes for deletion page? It's very annoying \n", + "--Robert Merkel 07:20 23-08-2003\n", + "\n", + "\n", + "deletion\n", + "\n", + "--142.177.74.112 13:06 25-09-2003\n", + "\n", + "\n", + "restoration\n", + "By the way, would you stop yelling KEEEEP on the votes for deletion page? It's very annoying \n", + "--BL~enwiki 13:28 25-09-2003\n", + "https://en.wikipedia.org/w/index.php?title=user_talk:BL~enwiki\n", + "Final Comment\n", + "There's no need to go around shouting \"KEEEP IT!\" at people on Wikipedia:Votes for deletion. This being a text medium, people will \"hear\" you just as clearly if you simply say \"Keep it.\"\n", + "In fact, this being a text medium, people are ''more'' likely to pay attention to what you're trying to say if you demonstrate that you do know the correct use of lowercase letters, and the correct spelling of \"keep\".\n", + "—\n", + "--BL~enwiki 13:28 25-09-2003\n", + "\n", + "\n", + "original\n", + "There's no need to go around shouting \"KEEEP IT!\" at people on Wikipedia:Votes for deletion. This being a text medium, people will \"hear\" you just as clearly if you simply say \"Keep it.\"\n", + "In fact, this being a text medium, people are *more* likely to pay attention to what you're trying to say if you demonstrate that you do know the correct use of lowercase letters, and the correct spelling of \"keep\".\n", + "—\n", + "--Paul A 22:46 24-08-2003\n", + "\n", + "\n", + "modification\n", + "There's no need to go around shouting \"KEEEP IT!\" at people on Wikipedia:Votes for deletion. This being a text medium, people will \"hear\" you just as clearly if you simply say \"Keep it.\"\n", + "In fact, this being a text medium, people are ''more'' likely to pay attention to what you're trying to say if you demonstrate that you do know the correct use of lowercase letters, and the correct spelling of \"keep\".\n", + "—\n", + "--Paul A 22:48 24-08-2003\n", + "\n", + "\n", + "deletion\n", + "\n", + "--142.177.74.112 13:06 25-09-2003\n", + "\n", + "\n", + "restoration\n", + "There's no need to go around shouting \"KEEEP IT!\" at people on Wikipedia:Votes for deletion. This being a text medium, people will \"hear\" you just as clearly if you simply say \"Keep it.\"\n", + "In fact, this being a text medium, people are ''more'' likely to pay attention to what you're trying to say if you demonstrate that you do know the correct use of lowercase letters, and the correct spelling of \"keep\".\n", + "—\n", + "--BL~enwiki 13:28 25-09-2003\n", + "https://en.wikipedia.org/w/index.php?title=user_talk:BL~enwiki\n", + "Final Comment\n", + ")- 0717, Sep 8, 2003 (UTC)\n", + "--BL~enwiki 13:28 25-09-2003\n", + "\n", + "\n", + "original\n", + ") - 0717, Sep 8, 2003 (UTC)\n", + "--Stevertigo 03:17 08-09-2003\n", + "\n", + "\n", + "modification\n", + ")- 0717, Sep 8, 2003 (UTC)\n", + "--Stevertigo 03:17 08-09-2003\n", + "\n", + "\n", + "deletion\n", + "\n", + "--142.177.74.112 13:06 25-09-2003\n", + "\n", + "\n", + "restoration\n", + ")- 0717, Sep 8, 2003 (UTC)\n", + "--BL~enwiki 13:28 25-09-2003\n", + "https://en.wikipedia.org/w/index.php?title=user_talk:BL~enwiki\n", + "Final Comment\n", + "English spellings should not be changed to American without good reason. Why did you change Kilometre to Kilometer in Km/h? The page is located at Kilometre anyway, so you are now causing a redirect to occur. See Wikipedia:Manual of Style. It is generally accepted that the version used by the original author is kept. 23:04, Sep 17, 2003 (UTC)\n", + "--BL~enwiki 13:28 25-09-2003\n", + "\n", + "\n", + "original\n", + "English spellings should not be changed to American without good reason. Why did you change Kilometre to Kilometer in Km/h? The page is located at Kilometre anyway, so you are now causing a redirect to occur. See Wikipedia:Manual of Style. It is generally accepted that the version used by the original author is kept. 23:04, Sep 17, 2003 (UTC)\n", + "--Angela 19:04 17-09-2003\n", + "\n", + "\n", + "modification\n", + "English spellings should not be changed to American without good reason. Why did you change Kilometre to Kilometer in Km/h? The page is located at Kilometre anyway, so you are now causing a redirect to occur. See Wikipedia:Manual of Style. It is generally accepted that the version used by the original author is kept. 23:04, Sep 17, 2003 (UTC)\n", + "--MartinHarper 20:46 20-09-2003\n", + "\n", + "\n", + "deletion\n", + "\n", + "--142.177.74.112 13:06 25-09-2003\n", + "\n", + "\n", + "restoration\n", + "English spellings should not be changed to American without good reason. Why did you change Kilometre to Kilometer in Km/h? The page is located at Kilometre anyway, so you are now causing a redirect to occur. See Wikipedia:Manual of Style. It is generally accepted that the version used by the original author is kept. 23:04, Sep 17, 2003 (UTC)\n", + "--BL~enwiki 13:28 25-09-2003\n", + "https://en.wikipedia.org/w/index.php?title=user_talk:BL~enwiki\n", + "Final Comment\n", + "Ok, you might find American and British English Differences and http://www.onelook.com/ useful. 23:28, Sep 17, 2003 (UTC)\n", + "--BL~enwiki 13:28 25-09-2003\n", + "\n", + "\n", + "original\n", + "Ok, you might find American and British English Differences and http://www.onelook.com/ useful. 23:28, Sep 17, 2003 (UTC)\n", + "--Angela 19:28 17-09-2003\n", + "\n", + "\n", + "deletion\n", + "\n", + "--142.177.74.112 13:06 25-09-2003\n", + "\n", + "\n", + "restoration\n", + "Ok, you might find American and British English Differences and http://www.onelook.com/ useful. 23:28, Sep 17, 2003 (UTC)\n", + "--BL~enwiki 13:28 25-09-2003\n", + "https://en.wikipedia.org/w/index.php?title=user_talk:BL~enwiki\n", + "Final Comment\n", + "Could you read and respond to Talk:The_Chronicles_of_George? 12:40, 17 Sep 2003 (UTC)\n", + " Hello? Is this thing on? *tap* *tap* *tap*. 00:46, 21 Sep 2003 (UTC)\n", + "--BL~enwiki 13:28 25-09-2003\n", + "\n", + "\n", + "original\n", + "Could you read and respond to Talk:The_Chronicles_of_George? 12:40, 17 Sep 2003 (UTC)\n", + " Hello? Is this thing on? *tap* *tap* *tap*. 00:46, 21 Sep 2003 (UTC)\n", + "--MartinHarper 20:46 20-09-2003\n", + "\n", + "\n", + "deletion\n", + "\n", + "--142.177.74.112 13:06 25-09-2003\n", + "\n", + "\n", + "restoration\n", + "Could you read and respond to Talk:The_Chronicles_of_George? 12:40, 17 Sep 2003 (UTC)\n", + " Hello? Is this thing on? *tap* *tap* *tap*. 00:46, 21 Sep 2003 (UTC)\n", + "--BL~enwiki 13:28 25-09-2003\n", + "https://en.wikipedia.org/w/index.php?title=user_talk:BL~enwiki\n", + "Final Comment\n", + " Uh, I dropped it earlier... \n", + "--BL~enwiki 13:28 25-09-2003\n", + "\n", + "\n", + "original\n", + " Uh, I dropped it earlier... \n", + "--Pizza Puzzle 20:56 20-09-2003\n", + "\n", + "\n", + "deletion\n", + "\n", + "--142.177.74.112 13:06 25-09-2003\n", + "\n", + "\n", + "restoration\n", + " Uh, I dropped it earlier... \n", + "--BL~enwiki 13:28 25-09-2003\n", + "https://en.wikipedia.org/w/index.php?title=user_talk:BL~enwiki\n", "Final Comment\n", - " Points of order \n", - "--142.177.103.185 19:51 13-10-2003\n", + "How is stating that a consensus is not required an \"impractical\" statement? 17:57, 24 Sep 2003 (UTC)\n", + "--BL~enwiki 13:28 25-09-2003\n", "\n", "\n", "original\n", - " Points of order \n", - "--142.177.78.145 19:38 13-10-2003\n", + "How is stating that a consensus is not required an \"impractical\" statement? 17:57, 24 Sep 2003 (UTC)\n", + "--Angela 13:57 24-09-2003\n", "\n", "\n", "deletion\n", "\n", - "--MartinHarper 19:40 13-10-2003\n", + "--142.177.74.112 13:06 25-09-2003\n", "\n", "\n", "restoration\n", - " Points of order \n", - "--142.177.103.185 19:51 13-10-2003\n" + "How is stating that a consensus is not required an \"impractical\" statement? 17:57, 24 Sep 2003 (UTC)\n", + "--BL~enwiki 13:28 25-09-2003\n", + "https://en.wikipedia.org/w/index.php?title=user_talk:BL~enwiki\n", + "Final Comment\n", + "I enjoyed reading your astute comments on the privatization page. A while ago, I added content to the privatization page, specifically the theory behind it. While I agree that it's generally valid theoretically, your points are often correct in practice.\n", + "Since it seems that you're also interested in economic policy, you might want to take a look at some content that I added a while ago to the History of post-communist Russia article. It's the best example on Wikipedia, of which I'm aware, of an in depth look at privatization in practice. Specifically, you might be interested in the sections on the three stages of privatization in Russia and the next section on the so-called \"virtual economy\" (a term coined by economists Clifford Gaddy and Barry Ickes in reference to post-Communist Russia). Since it's a long article, you'd be able to find these sections by clicking on the link in the pop up table of contents box at the top; the sections of privatization are under the broader heading of \"democratization and its setbacks.\" (Just to make a brief note about the structure of the article, the content doesn't really separate sections on economic restructuring and democratization, since they're so intertwined in a country remaking both its economic and political institutions.)\n", + "The sections that I'm recommending bring up all the sharp insights that you made (i.e. that design is more important than the mere transfer of ownership). Here, I'll just summarize the points made in the Russia article. State monopolies were rarely restructured before privatization. Thus, there was little competition over price and quality for consumer demand. In turn, there were few incentives to invest capital to salvage inefficient value-losing enterprises. Thus, efficiency (in terms of minimizing costs per unit of output) rarely improved. Instead of channeling investment into privatized enterprises, asset stripping (facilitated by capital market liberalization) was the common result. Moreover, despite sweeping openings, capital markets (i.e. the mechanisms to channel private savings into Russian companies) remain week.\n", + "It would be great if your interest in the articles on post-Communist Russia were aroused since I cannot find anyone interested in this subject. This is baffling since it is such a contentious topic. In academic literature (and especially within Russia), reform strategies, the sequencing of reform, and the pace of reform in post-Communist Russia remain contentious topics, argued often with great personal bitterness. After all, many prominent former Soviet specialists in the West were very active in the design of new economic and political institutions in Russia. Subject to harsh retrospective criticism, many economists at the US Treasury Department, IMF, World Bank, and top US universities have become very defensive. It's still a heated subject in the top journals, academic literature, and major periodicals on Russia and economics.\n", + "Anyway, sorry if my comments were a bit on the lengthy side. Don't feel compelled to redirect your attention to post-Communist Russia if you're uninterested. It's only my guess that you would be from your insightful comments. 06:03, 29 Sep 2003 (UTC)\n", + "BTW, since you are frequent contributor to Palestinian-related articles, I'm sure that the loss of the great scholar Edward Said isn't news to you. I don't know your feelings about him, but I think that his passing couldn't have come at a worse time. I'd argue that the popular writings on the Middle East in the US, exemplified by Daniel Pipes, are simply bigoted and hateful. It's sad to see such an effective counterweight to their venom gone. 06:03, 29 Sep 2003 (UTC)\n", + "--172 02:36 29-09-2003\n", + "\n", + "\n", + "original\n", + "I enjoyed reading your astute comments on the privatization page. A while ago, I added content to the privatization page, specifically the theory behind it. While I agree that it's generally valid theoretically, your points are often correct in practice.\n", + "Since it seems that you're also interested in economic policy, you might want to take a look at some content that I added a while ago to the History of post-communist Russia article. It's the best example on Wikipedia, of which I'm aware, of an in depth look at privatization in practice. Specifically, you might be interested in the sections on the three stages of privatization in Russia and the next section on the so-called \"virtual economy\" (a term coined by economists Clifford Gaddy and Barry Ickes in reference to post-Communist Russia). Since it's a long article, you'd be able to find these sections by clicking on the link in the pop up table of contents box at the top; the sections of privatization are under the broader heading of \"democratization and its setbacks.\" (Just to make a brief note about the structure of the article, the content doesn't really separate sections on economic restructuring and democratization, since they're so intertwined in a country remaking both its economic and political institutions.)\n", + "The sections that I'm recommending bring up all the sharp insights that you made (that design is more important than the mere transfer of ownership). Here, I'll just summarize the points made in the Russia article. State monopolies were rarely restructured before privatization. Thus, there was little competition over price and quality for consumer demand. In turn, there were few incentives to invest capital to salvage inefficient value-losing enterprises. Thus, efficiency (minimizing costs per unit of output) rarely improved. Instead of channeling investment into privatized enterprises, asset stripping (facilitated by capital market liberalization) was the common result. Moreover, despite sweeping openings, capital markets (the mechanisms to channel private savings into Russian companies) remain week.\n", + "It would be great if your interest in the articles on post-Communist Russia were aroused since I cannot find anyone interested in this subject. This is baffling since it is such a contentious topic. In academic literature (and especially within Russia), reform strategies, the sequencing of reform, and the pace of reform in post-Communist Russia remain contentious topics, argued often with great personal bitterness. After all, many prominent former Soviet specialists in the West were very active in the design of new economic and political institutions in Russia. Subject to harsh retrospective criticism, many economists at the US Treasury Department, IMF, World Bank, and top US universities have become very defensive. It's still a heated subject in the top journals, academic literature, and major periodicals on Russia and economics.\n", + "Anyway, sorry if my comments were a bit on the lengthy side. Don't feel compelled to redirect your attention to post-Communist Russia if you're uninterested. It's only my guess that you would be from your insightful comments. 06:03, 29 Sep 2003 (UTC)\n", + "BTW, since you are frequently contributor to Palestinian-related articles, I'm sure that the loss of the great scholar Edward Said isn't news to you. I don't know your feelings about him, but I think that his passing couldn't have come at a worse time. I'd argue that the popular writings on the Middle East in the US, exemplified by Daniel Pipes, are simply bigoted and hateful. It's sad to see such an effective counterweight to their venom gone. 06:03, 29 Sep 2003 (UTC)\n", + "--172 02:03 29-09-2003\n", + "\n", + "\n", + "modification\n", + "I enjoyed reading your astute comments on the privatization page. A while ago, I added content to the privatization page, specifically the theory behind it. While I agree that it's generally valid theoretically, your points are often correct in practice.\n", + "Since it seems that you're also interested in economic policy, you might want to take a look at some content that I added a while ago to the History of post-communist Russia article. It's the best example on Wikipedia, of which I'm aware, of an in depth look at privatization in practice. Specifically, you might be interested in the sections on the three stages of privatization in Russia and the next section on the so-called \"virtual economy\" (a term coined by economists Clifford Gaddy and Barry Ickes in reference to post-Communist Russia). Since it's a long article, you'd be able to find these sections by clicking on the link in the pop up table of contents box at the top; the sections of privatization are under the broader heading of \"democratization and its setbacks.\" (Just to make a brief note about the structure of the article, the content doesn't really separate sections on economic restructuring and democratization, since they're so intertwined in a country remaking both its economic and political institutions.)\n", + "The sections that I'm recommending bring up all the sharp insights that you made (that design is more important than the mere transfer of ownership). Here, I'll just summarize the points made in the Russia article. State monopolies were rarely restructured before privatization. Thus, there was little competition over price and quality for consumer demand. In turn, there were few incentives to invest capital to salvage inefficient value-losing enterprises. Thus, efficiency (minimizing costs per unit of output) rarely improved. Instead of channeling investment into privatized enterprises, asset stripping (facilitated by capital market liberalization) was the common result. Moreover, despite sweeping openings, capital markets (the mechanisms to channel private savings into Russian companies) remain week.\n", + "It would be great if your interest in the articles on post-Communist Russia were aroused since I cannot find anyone interested in this subject. This is baffling since it is such a contentious topic. In academic literature (and especially within Russia), reform strategies, the sequencing of reform, and the pace of reform in post-Communist Russia remain contentious topics, argued often with great personal bitterness. After all, many prominent former Soviet specialists in the West were very active in the design of new economic and political institutions in Russia. Subject to harsh retrospective criticism, many economists at the US Treasury Department, IMF, World Bank, and top US universities have become very defensive. It's still a heated subject in the top journals, academic literature, and major periodicals on Russia and economics.\n", + "Anyway, sorry if my comments were a bit on the lengthy side. Don't feel compelled to redirect your attention to post-Communist Russia if you're uninterested. It's only my guess that you would be from your insightful comments. 06:03, 29 Sep 2003 (UTC)\n", + "BTW, since you are frequent contributor to Palestinian-related articles, I'm sure that the loss of the great scholar Edward Said isn't news to you. I don't know your feelings about him, but I think that his passing couldn't have come at a worse time. I'd argue that the popular writings on the Middle East in the US, exemplified by Daniel Pipes, are simply bigoted and hateful. It's sad to see such an effective counterweight to their venom gone. 06:03, 29 Sep 2003 (UTC)\n", + "--172 02:07 29-09-2003\n", + "\n", + "\n", + "modification\n", + "I enjoyed reading your astute comments on the privatization page. A while ago, I added content to the privatization page, specifically the theory behind it. While I agree that it's generally valid theoretically, your points are often correct in practice.\n", + "Since it seems that you're also interested in economic policy, you might want to take a look at some content that I added a while ago to the History of post-communist Russia article. It's the best example on Wikipedia, of which I'm aware, of an in depth look at privatization in practice. Specifically, you might be interested in the sections on the three stages of privatization in Russia and the next section on the so-called \"virtual economy\" (a term coined by economists Clifford Gaddy and Barry Ickes in reference to post-Communist Russia). Since it's a long article, you'd be able to find these sections by clicking on the link in the pop up table of contents box at the top; the sections of privatization are under the broader heading of \"democratization and its setbacks.\" (Just to make a brief note about the structure of the article, the content doesn't really separate sections on economic restructuring and democratization, since they're so intertwined in a country remaking both its economic and political institutions.)\n", + "The sections that I'm recommending bring up all the sharp insights that you made (i.e. that design is more important than the mere transfer of ownership). Here, I'll just summarize the points made in the Russia article. State monopolies were rarely restructured before privatization. Thus, there was little competition over price and quality for consumer demand. In turn, there were few incentives to invest capital to salvage inefficient value-losing enterprises. Thus, efficiency (in terms of minimizing costs per unit of output) rarely improved. Instead of channeling investment into privatized enterprises, asset stripping (facilitated by capital market liberalization) was the common result. Moreover, despite sweeping openings, capital markets (i.e. the mechanisms to channel private savings into Russian companies) remain week.\n", + "It would be great if your interest in the articles on post-Communist Russia were aroused since I cannot find anyone interested in this subject. This is baffling since it is such a contentious topic. In academic literature (and especially within Russia), reform strategies, the sequencing of reform, and the pace of reform in post-Communist Russia remain contentious topics, argued often with great personal bitterness. After all, many prominent former Soviet specialists in the West were very active in the design of new economic and political institutions in Russia. Subject to harsh retrospective criticism, many economists at the US Treasury Department, IMF, World Bank, and top US universities have become very defensive. It's still a heated subject in the top journals, academic literature, and major periodicals on Russia and economics.\n", + "Anyway, sorry if my comments were a bit on the lengthy side. Don't feel compelled to redirect your attention to post-Communist Russia if you're uninterested. It's only my guess that you would be from your insightful comments. 06:03, 29 Sep 2003 (UTC)\n", + "BTW, since you are frequent contributor to Palestinian-related articles, I'm sure that the loss of the great scholar Edward Said isn't news to you. I don't know your feelings about him, but I think that his passing couldn't have come at a worse time. I'd argue that the popular writings on the Middle East in the US, exemplified by Daniel Pipes, are simply bigoted and hateful. It's sad to see such an effective counterweight to their venom gone. 06:03, 29 Sep 2003 (UTC)\n", + "--172 02:36 29-09-2003\n", + "https://en.wikipedia.org/w/index.php?title=user_talk:Angela/Archive1\n", + "Final Comment\n", + "Industrial Waste\n", + "--Angela 19:10 10-12-2003\n", + "\n", + "\n", + "original\n", + "Industrial Waste\n", + "--Ed Poor 14:30 09-12-2003\n", + "\n", + "\n", + "deletion\n", + "\n", + "--Angela 15:05 09-12-2003\n", + "\n", + "\n", + "restoration\n", + "Industrial Waste\n", + "--Angela 19:10 10-12-2003\n", + "https://en.wikipedia.org/w/index.php?title=talk:List_of_one-hit_wonders_on_the_UK_Singles_Chart\n", + "Final Comment\n", + "Just wondering on what grounds some of these songs are termed one hit wonders... I mean I just removed \"A-Ha - Take On Me\" because A-Ha were one of the bigger acts of the 80s, with a string of top 10 hits. Kajagoogoo, while being best known for Too Shy, had two other Top 10 hits, and a further top 20 hit. Let alone the top 40.\n", + "The Guinness Book of Hit Singles would tell us that a one hit wonder has to get to number one. I disagree with that, but would insist that a one hit wonder really has to have had only ONE HIT. Whether that's a top 40 hit or a top 75 hit is open to debate perhaps... But a LOT of these acts had more than one hit. -\n", + "--Mintguy 11:11 12-09-2003\n", + "\n", + "\n", + "original\n", + "Just wondering on what grounds some of these songs are termed one hit wonders... I mean I just removed \"A-Ha - Take On Me\" because A-Ha were one of the bigger acts of the 80s, with a string of top 10 hits. Kajagoogoo, while being best known for Too Shy, had two other Top 10 hits, and a further top 20 hit. Let alone the top 40.\n", + "The Guinness Book of Hit Singles would tell us that a one hit wonder has to get to number one. I disagree with that, but would insist that a one hit wonder really has to have had only ONE HIT. Whether that's a top 40 hit or a top 75 hit is open to debate perhaps... But a LOT of these acts had more than one hit. -\n", + "--Nommonomanac 21:30 03-12-2002\n", + "\n", + "\n", + "deletion\n", + "\n", + "--213.122.51.46 11:06 12-09-2003\n", + "\n", + "\n", + "restoration\n", + "Just wondering on what grounds some of these songs are termed one hit wonders... I mean I just removed \"A-Ha - Take On Me\" because A-Ha were one of the bigger acts of the 80s, with a string of top 10 hits. Kajagoogoo, while being best known for Too Shy, had two other Top 10 hits, and a further top 20 hit. Let alone the top 40.\n", + "The Guinness Book of Hit Singles would tell us that a one hit wonder has to get to number one. I disagree with that, but would insist that a one hit wonder really has to have had only ONE HIT. Whether that's a top 40 hit or a top 75 hit is open to debate perhaps... But a LOT of these acts had more than one hit. -\n", + "--Mintguy 11:11 12-09-2003\n", + "https://en.wikipedia.org/w/index.php?title=talk:List_of_one-hit_wonders_on_the_UK_Singles_Chart\n", + "Final Comment\n", + "I think if a band had a top 10 hit and had a few bubling under the top ten it's kinda borderline. What do you think? 02:55 Dec 4, 2002 (UTC)\n", + "--Mintguy 11:11 12-09-2003\n", + "\n", + "\n", + "original\n", + "I think if a band had a top 10 hit and had a few bubling under the top ten it's kinda borderline. What do you think? 02:55 Dec 4, 2002 (UTC)\n", + "--Mintguy 21:55 03-12-2002\n", + "\n", + "\n", + "deletion\n", + "\n", + "--213.122.51.46 11:06 12-09-2003\n", + "\n", + "\n", + "restoration\n", + "I think if a band had a top 10 hit and had a few bubling under the top ten it's kinda borderline. What do you think? 02:55 Dec 4, 2002 (UTC)\n", + "--Mintguy 11:11 12-09-2003\n", + "https://en.wikipedia.org/w/index.php?title=talk:List_of_one-hit_wonders_on_the_UK_Singles_Chart\n", + "Final Comment\n", + " Well... the way I see it, I'd say that a seperate top 40 hit would negate a top 10 hit's OHW status. I mean, if a band gets one record in the top ten and no others in the top 40, that seems to me to work out as a OHW. But a top ten and another in the top 40 doesn't... It means we don't have to worry about a massive amount of records - just a ''lot'' of records. More than one record in the top 40 doesn't seem like a OHW to me. -\n", + "--Mintguy 11:11 12-09-2003\n", + "\n", + "\n", + "original\n", + " Well... the way I see it, I'd say that a seperate top 40 hit would negate a top 10 hit's OHW status. I mean, if a band gets one record in the top ten and no others in the top 40, that seems to me to work out as a OHW. But a top ten and another in the top 40 doesn't... It means we don't have to worry about a massive amount of records - just a ''lot'' of records. More than one record in the top 40 doesn't seem like a OHW to me. -\n", + "--Nommonomanac 22:02 03-12-2002\n", + "\n", + "\n", + "deletion\n", + "\n", + "--213.122.51.46 11:06 12-09-2003\n", + "\n", + "\n", + "restoration\n", + " Well... the way I see it, I'd say that a seperate top 40 hit would negate a top 10 hit's OHW status. I mean, if a band gets one record in the top ten and no others in the top 40, that seems to me to work out as a OHW. But a top ten and another in the top 40 doesn't... It means we don't have to worry about a massive amount of records - just a ''lot'' of records. More than one record in the top 40 doesn't seem like a OHW to me. -\n", + "--Mintguy 11:11 12-09-2003\n", + "https://en.wikipedia.org/w/index.php?title=talk:List_of_one-hit_wonders_on_the_UK_Singles_Chart\n", + "Final Comment\n", + " Hmmm... It's difficult Billy Ray Curtis got another song (\"\"Could've been me\"\") to 24, but I doubt if anyone (but a fan) could remember it. It would be a shame to remove him. Channel 4 had a top 10 one hit wonder thing a while ago. I wonder what criteria they used.\n", + "--Mintguy 11:11 12-09-2003\n", + "\n", + "\n", + "original\n", + " Hmmm... It's difficult Billy Ray Curtis got another song (\"\"Could've been me\"\") to 24, but I doubt if anyone (but a fan) could remember it. It would be a shame to remove him. Channel 4 had a top 10 one hit wonder thing a while ago. I wonder what criteria they used.\n", + "--Mintguy 22:10 03-12-2002\n", + "\n", + "\n", + "deletion\n", + "\n", + "--213.122.51.46 11:06 12-09-2003\n", + "\n", + "\n", + "restoration\n", + " Hmmm... It's difficult Billy Ray Curtis got another song (\"\"Could've been me\"\") to 24, but I doubt if anyone (but a fan) could remember it. It would be a shame to remove him. Channel 4 had a top 10 one hit wonder thing a while ago. I wonder what criteria they used.\n", + "--Mintguy 11:11 12-09-2003\n", + "https://en.wikipedia.org/w/index.php?title=talk:List_of_one-hit_wonders_on_the_UK_Singles_Chart\n", + "Final Comment\n", + " Weren't they all number ones? I seem to remember a second Billy Ray Cyrus record coming out. I remember a small amount of associated pain. Though I don't remember the song. Reneé and Renato were in that C4 thing... They had a number 1 and a number 48, so that would fit my criteria. Which seems right. -\n", + "--Mintguy 11:11 12-09-2003\n", + "\n", + "\n", + "original\n", + " Weren't they all number ones? I seem to remember a second Billy Ray Cyrus record coming out. I remember a small amount of associated pain. Though I don't remember the song. Reneé and Renato were in that C4 thing... They had a number 1 and a number 48, so that would fit my criteria. Which seems right. -\n", + "--Nommonomanac 08:28 05-12-2002\n", + "\n", + "\n", + "deletion\n", + "\n", + "--213.122.51.46 11:06 12-09-2003\n", + "\n", + "\n", + "restoration\n", + " Weren't they all number ones? I seem to remember a second Billy Ray Cyrus record coming out. I remember a small amount of associated pain. Though I don't remember the song. Reneé and Renato were in that C4 thing... They had a number 1 and a number 48, so that would fit my criteria. Which seems right. -\n", + "--Mintguy 11:11 12-09-2003\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/sauna/conda-envs/zissou-env/lib/python3.7/site-packages/ipykernel_launcher.py:12: FutureWarning: speaker.name is deprecated and will be removed in a future release. Use speaker.id instead.\n" ] } ], @@ -663,9 +1108,8 @@ "number_of_conversations_to_print = 10\n", "conversation_min_length = 3\n", "\n", - "change_defaults_print_intermediate(\n", - " conversation_list, number_of_conversations_to_print, conversation_min_length, wikiconv_corpus\n", - ")" + "change_defaults_print_intermediate(conversation_list, number_of_conversations_to_print, conversation_min_length,\n", + " wikiconv_corpus)" ] }, { @@ -695,7 +1139,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.0" + "version": "3.7.7" } }, "nbformat": 4, diff --git a/examples/dataset-examples/wikiconv/corpus_deletion_demo.ipynb b/examples/dataset-examples/wikiconv/corpus_deletion_demo.ipynb index c8f0a5f3..49a552da 100644 --- a/examples/dataset-examples/wikiconv/corpus_deletion_demo.ipynb +++ b/examples/dataset-examples/wikiconv/corpus_deletion_demo.ipynb @@ -27,9 +27,9 @@ "metadata": {}, "outputs": [], "source": [ - "# import relevant modules\n", + "#import relevant modules\n", "from datetime import datetime, timedelta\n", - "from convokit import Corpus, Utterance, Conversation, download" + "from convokit import Corpus, User, Utterance, Conversation, download" ] }, { @@ -41,13 +41,13 @@ "name": "stdout", "output_type": "stream", "text": [ - "Dataset already exists at /Users/seanzhangkx/.convokit/downloads/wikiconv-2003\n" + "Dataset already exists at /home/jonathan/.convokit/downloads/wikiconv-2003\n" ] } ], "source": [ "# Load the 2003 wikiconv corpus (feel free to change this to a year of your preference)\n", - "wikiconv_corpus = Corpus(filename=download(\"wikiconv-2003\"))" + "wikiconv_corpus = Corpus(filename=download('wikiconv-2003'))" ] }, { @@ -113,7 +113,7 @@ { "data": { "text/plain": [ - "Utterance({'obj_type': 'utterance', 'vectors': [], 'speaker_': Speaker({'obj_type': 'speaker', 'vectors': [], 'owner': , 'id': 'Jay', 'meta': ConvoKitMeta({'user_id': '14784'})}), 'owner': , 'id': '5021479.2081.2077', 'meta': ConvoKitMeta({'is_section_header': True, 'indentation': '2', 'toxicity': 0.1219038, 'sever_toxicity': 0.06112729, 'ancestor_id': '5021479.2081.2077', 'rev_id': '5021479', 'parent_id': None, 'original': None, 'modification': [], 'deletion': [], 'restoration': []})})" + "Utterance({'id': '5021479.2081.2077', 'user': User([('name', 'Jay')]), 'root': '5021479.1277.1272', 'reply_to': '5021479.1277.1272', 'timestamp': 1070614595.0, 'text': \"You're right about separating the sandwich of war names and MiG names. Each plane should be sorted chronologically and have its own sentence detailing its importance. \", 'meta': {'is_section_header': True, 'indentation': '2', 'toxicity': 0.1219038, 'sever_toxicity': 0.06112729, 'ancestor_id': '5021479.2081.2077', 'rev_id': '5021479', 'parent_id': None, 'original': None, 'modification': [], 'deletion': [], 'restoration': []}})" ] }, "execution_count": 5, @@ -139,34 +139,35 @@ "outputs": [], "source": [ "def check_deletion_list_data(list_of_deletion_utterances, original_posting_time, timedelta_value):\n", - " # Count the total number of deleted utterances of each type\n", + " #Count the total number of deleted utterances of each type\n", " count_normal = 0\n", - " count_toxic = 0\n", + " count_toxic= 0\n", " count_sever_toxic = 0\n", - "\n", + " \n", " for deletion_utt in list_of_deletion_utterances:\n", - " toxicity_val = deletion_utt[\"meta\"][\"toxicity\"]\n", - " sever_toxicity_val = deletion_utt[\"meta\"][\"sever_toxicity\"]\n", - " timestamp_value = deletion_utt[\"timestamp\"]\n", + " toxicity_val = deletion_utt.meta['toxicity']\n", + " sever_toxicity_val = deletion_utt.meta['sever_toxicity']\n", + " timestamp_value = deletion_utt.timestamp\n", " deletion_datetime_val = datetime.fromtimestamp(timestamp_value)\n", - "\n", - " # delta_value is the time delta between when the deletion utt happened and the original utt's posting\n", - " if original_posting_time is None:\n", + " \n", + " #delta_value is the time delta between when the deletion utt happened and the original utt's posting \n", + " if (original_posting_time is None):\n", " delta_value = 0\n", - " else:\n", - " delta_value = deletion_datetime_val - original_posting_time\n", - "\n", - " # If the delta value is less than the provided time delta, consider its type\n", - " if delta_value <= timedelta(days=timedelta_value):\n", - " if toxicity_val < 0.5 and sever_toxicity_val < 0.5:\n", - " count_normal += 1\n", - " if toxicity_val > 0.5:\n", - " count_toxic += 1\n", - " if sever_toxicity_val > 0.5:\n", - " count_sever_toxic += 1\n", - "\n", - " # Return in tuple form the number of each type of affected comment\n", - " return (count_normal, count_toxic, count_sever_toxic)" + " else: \n", + " delta_value = deletion_datetime_val - original_posting_time \n", + " \n", + " #If the delta value is less than the provided time delta, consider its type\n", + " if (delta_value <= timedelta(days = timedelta_value)):\n", + " if (toxicity_val < 0.5 and sever_toxicity_val < 0.5):\n", + " count_normal +=1\n", + " if (toxicity_val > 0.5):\n", + " count_toxic +=1\n", + " if (sever_toxicity_val > 0.5):\n", + " count_sever_toxic +=1 \n", + " \n", + " #Return in tuple form the number of each type of affected comment\n", + " return (count_normal, count_toxic, count_sever_toxic)\n", + " " ] }, { @@ -183,68 +184,67 @@ "outputs": [], "source": [ "def get_deletion_counts(individual_utterance_list, timedelta_value):\n", - " # Normal Data count\n", + " #Normal Data count\n", " count_normal_deleted = 0\n", " count_normal_total = 0\n", " set_of_normal_comments = set()\n", + " \n", "\n", - " # Toxic data count\n", + " #Toxic data count\n", " count_toxic_deleted = 0\n", " count_toxic_total = 0\n", " set_of_toxic_comments = set()\n", "\n", - " # Sever Toxic Data count\n", + " #Sever Toxic Data count\n", " count_sever_deleted = 0\n", " count_sever_total = 0\n", " set_of_sever_comments = set()\n", - "\n", - " # Check each utterance\n", + " \n", + " #Check each utterance\n", " for utterance_value in individual_utterance_list:\n", - " toxicity_val = utterance_value.meta[\"toxicity\"]\n", - " sever_toxicity_val = utterance_value.meta[\"sever_toxicity\"]\n", - "\n", - " # Find the total number of comments of each type\n", - " if toxicity_val < 0.5 and sever_toxicity_val < 0.5:\n", - " if utterance_value.id not in set_of_normal_comments:\n", - " count_normal_total += 1\n", - " set_of_normal_comments.add(utterance_value.id)\n", - "\n", - " if toxicity_val > 0.5:\n", - " if utterance_value.id not in set_of_toxic_comments:\n", - " count_toxic_total += 1\n", + " toxicity_val = utterance_value.meta['toxicity']\n", + " sever_toxicity_val = utterance_value.meta['sever_toxicity']\n", + " \n", + " #Find the total number of comments of each type\n", + " if (toxicity_val < 0.5 and sever_toxicity_val < 0.5):\n", + " if (utterance_value.id not in set_of_normal_comments):\n", + " count_normal_total +=1 \n", + " set_of_normal_comments.add(utterance_value.id) \n", + " \n", + " if (toxicity_val > 0.5):\n", + " if (utterance_value.id not in set_of_toxic_comments):\n", + " count_toxic_total +=1\n", " set_of_toxic_comments.add(utterance_value.id)\n", - "\n", - " if sever_toxicity_val > 0.5:\n", - " if utterance_value.id not in set_of_sever_comments:\n", - " count_sever_total += 1\n", + " \n", + " if (sever_toxicity_val > 0.5):\n", + " if (utterance_value.id not in set_of_sever_comments):\n", + " count_sever_total +=1\n", " set_of_sever_comments.add(utterance_value.id)\n", - "\n", - " # Find the time that the original utterance is posted\n", - " original_utterance = utterance_value.meta[\"original\"]\n", - " if original_utterance is not None:\n", - " original_time = original_utterance[\"timestamp\"]\n", + " \n", + " #Find the time that the original utterance is posted\n", + " original_utterance = utterance_value.meta['original']\n", + " if (original_utterance is not None):\n", + " original_time = original_utterance.timestamp\n", " original_date_time = datetime.fromtimestamp(original_time)\n", " else:\n", - " original_date_time = datetime.fromtimestamp(utterance_value.timestamp)\n", - "\n", - " # Count the number of deleted comments\n", - " if len(utterance_value.meta[\"deletion\"]) > 0:\n", - " deletion_list = utterance_value.meta[\"deletion\"]\n", - " ind_normal, ind_toxic, ind_sever = check_deletion_list_data(\n", - " deletion_list, original_date_time, timedelta_value\n", - " )\n", + " original_date_time = datetime.fromtimestamp(utterance_value.timestamp)\n", + " \n", + " \n", + " #Count the number of deleted comments \n", + " if (len(utterance_value.meta['deletion']) >0):\n", + " deletion_list = utterance_value.meta['deletion']\n", + " ind_normal, ind_toxic, ind_sever = check_deletion_list_data(deletion_list, original_date_time, timedelta_value)\n", " count_normal_deleted += ind_normal\n", " count_toxic_deleted += ind_toxic\n", " count_sever_deleted += ind_sever\n", + " \n", + " return (count_normal_deleted, count_toxic_deleted, count_sever_deleted, \n", + " count_normal_total, count_toxic_total, count_sever_total)\n", + "\n", + "\n", + "\n", "\n", - " return (\n", - " count_normal_deleted,\n", - " count_toxic_deleted,\n", - " count_sever_deleted,\n", - " count_normal_total,\n", - " count_toxic_total,\n", - " count_sever_total,\n", - " )" + "\n" ] }, { @@ -260,21 +260,14 @@ "metadata": {}, "outputs": [], "source": [ - "def print_statistics(\n", - " count_normal_deleted,\n", - " count_toxic_deleted,\n", - " count_sever_deleted,\n", - " total_normal,\n", - " total_toxic,\n", - " total_sever,\n", - "):\n", - " prop_normal = count_normal_deleted / float(total_normal)\n", - " prop_toxic = count_toxic_deleted / float(total_toxic)\n", - " prop_sever = count_sever_deleted / float(total_sever)\n", + "def print_statistics(count_normal_deleted, count_toxic_deleted, count_sever_deleted, total_normal, total_toxic, total_sever):\n", + " prop_normal = count_normal_deleted/float(total_normal)\n", + " prop_toxic = count_toxic_deleted/float(total_toxic)\n", + " prop_sever = count_sever_deleted/float(total_sever)\n", "\n", - " print(\"Proportion of normal comments deleted: \" + str(prop_normal))\n", - " print(\"Proportion of toxic comments deleted: \" + str(prop_toxic))\n", - " print(\"Proportion of sever toxic comments deleted: \" + str(prop_sever))" + " print ('Proportion of normal comments deleted: ' + str(prop_normal)) \n", + " print ('Proportion of toxic comments deleted: ' + str(prop_toxic))\n", + " print ('Proportion of sever toxic comments deleted: ' + str(prop_sever)) " ] }, { @@ -300,28 +293,17 @@ } ], "source": [ - "# Set the default values we will need to compute the corpus statistics\n", + "#Set the default values we will need to compute the corpus statistics\n", "individual_utterance_list = list(wikiconv_corpus.iter_utterances())\n", "len_utterances = len(individual_utterance_list)\n", "timedelta_value = 1\n", "\n", - "# Find the counts of deleted comments and print statistics with a time delta of One Day\n", - "(\n", - " count_normal_deleted,\n", - " count_toxic_deleted,\n", - " count_sever_deleted,\n", - " total_normal,\n", - " total_toxic,\n", - " total_sever,\n", - ") = get_deletion_counts(individual_utterance_list, timedelta_value)\n", - "print_statistics(\n", - " count_normal_deleted,\n", - " count_toxic_deleted,\n", - " count_sever_deleted,\n", - " total_normal,\n", - " total_toxic,\n", - " total_sever,\n", - ")" + "#Find the counts of deleted comments and print statistics with a time delta of One Day\n", + "(count_normal_deleted, count_toxic_deleted, count_sever_deleted,\n", + " total_normal, total_toxic, total_sever) = get_deletion_counts(individual_utterance_list, timedelta_value)\n", + "print_statistics(count_normal_deleted, count_toxic_deleted, count_sever_deleted,\n", + " total_normal, total_toxic, total_sever)\n", + "\n" ] }, { @@ -348,22 +330,11 @@ ], "source": [ "timedelta_value = 7\n", - "(\n", - " count_normal_deleted,\n", - " count_toxic_deleted,\n", - " count_sever_deleted,\n", - " total_normal,\n", - " total_toxic,\n", - " total_sever,\n", - ") = get_deletion_counts(individual_utterance_list, timedelta_value)\n", - "print_statistics(\n", - " count_normal_deleted,\n", - " count_toxic_deleted,\n", - " count_sever_deleted,\n", - " total_normal,\n", - " total_toxic,\n", - " total_sever,\n", - ")" + "(count_normal_deleted, count_toxic_deleted, count_sever_deleted, \n", + " total_normal, total_toxic, total_sever) = get_deletion_counts(individual_utterance_list, timedelta_value)\n", + "print_statistics(count_normal_deleted, count_toxic_deleted, count_sever_deleted,\n", + " total_normal, total_toxic, total_sever)\n", + "\n" ] }, { @@ -390,22 +361,10 @@ ], "source": [ "timedelta_value = 30\n", - "(\n", - " count_normal_deleted,\n", - " count_toxic_deleted,\n", - " count_sever_deleted,\n", - " total_normal,\n", - " total_toxic,\n", - " total_sever,\n", - ") = get_deletion_counts(individual_utterance_list, timedelta_value)\n", - "print_statistics(\n", - " count_normal_deleted,\n", - " count_toxic_deleted,\n", - " count_sever_deleted,\n", - " total_normal,\n", - " total_toxic,\n", - " total_sever,\n", - ")" + "(count_normal_deleted, count_toxic_deleted, count_sever_deleted, \n", + " total_normal, total_toxic, total_sever) = get_deletion_counts(individual_utterance_list, timedelta_value)\n", + "print_statistics(count_normal_deleted, count_toxic_deleted, count_sever_deleted,\n", + " total_normal, total_toxic, total_sever)\n" ] }, { @@ -432,22 +391,10 @@ ], "source": [ "timedelta_value = 365\n", - "(\n", - " count_normal_deleted,\n", - " count_toxic_deleted,\n", - " count_sever_deleted,\n", - " total_normal,\n", - " total_toxic,\n", - " total_sever,\n", - ") = get_deletion_counts(individual_utterance_list, timedelta_value)\n", - "print_statistics(\n", - " count_normal_deleted,\n", - " count_toxic_deleted,\n", - " count_sever_deleted,\n", - " total_normal,\n", - " total_toxic,\n", - " total_sever,\n", - ")" + "(count_normal_deleted, count_toxic_deleted, count_sever_deleted,\n", + " total_normal, total_toxic, total_sever) = get_deletion_counts(individual_utterance_list, timedelta_value)\n", + "print_statistics(count_normal_deleted, count_toxic_deleted, count_sever_deleted,\n", + " total_normal, total_toxic, total_sever)" ] } ], @@ -467,7 +414,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.0" + "version": "3.7.2" } }, "nbformat": 4, diff --git a/examples/hyperconvo/hyperconvo_demo.ipynb b/examples/hyperconvo/hyperconvo_demo.ipynb index ee8a38ce..d46ef45d 100644 --- a/examples/hyperconvo/hyperconvo_demo.ipynb +++ b/examples/hyperconvo/hyperconvo_demo.ipynb @@ -14,7 +14,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -24,7 +24,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -43,14 +43,14 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Dataset already exists at /Users/seanzhangkx/.convokit/downloads/reddit-corpus-small\n" + "Dataset already exists at /Users/calebchiam/Documents/GitHub/ConvoKit/convokit/tensors/reddit-corpus-small\n" ] } ], @@ -60,16 +60,19 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "ConvoKitMeta({'subreddit': 'reddit-corpus-small', 'num_posts': 8286, 'num_comments': 288846, 'num_user': 119889})" + "{'subreddit': 'reddit-corpus-small',\n", + " 'num_posts': 8286,\n", + " 'num_comments': 288846,\n", + " 'num_user': 119889}" ] }, - "execution_count": 4, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -80,7 +83,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -115,18 +118,16 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ - "top_level_utterance_ids = [\n", - " utt.id for utt in corpus.iter_utterances() if utt.id == utt.meta[\"top_level_comment\"]\n", - "]" + "top_level_utterance_ids = [utt.id for utt in corpus.iter_utterances() if utt.id == utt.meta['top_level_comment']]" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -135,7 +136,7 @@ "10000" ] }, - "execution_count": 7, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -146,16 +147,13 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ - "threads_corpus = corpus.reindex_conversations(\n", - " source_corpus=corpus,\n", - " new_convo_roots=top_level_utterance_ids,\n", - " preserve_convo_meta=True,\n", - " preserve_corpus_meta=False,\n", - ")" + "threads_corpus = corpus.reindex_conversations(new_convo_roots=top_level_utterance_ids, \n", + " preserve_convo_meta=True,\n", + " preserve_corpus_meta=False)" ] }, { @@ -167,27 +165,27 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "Utterance({'obj_type': 'utterance', 'vectors': [], 'speaker_': Speaker({'obj_type': 'speaker', 'vectors': [], 'owner': , 'id': 'Prestonurvagi', 'meta': ConvoKitMeta({'num_posts': 0, 'num_comments': 1})}), 'owner': , 'id': 'e63uqhy', 'meta': ConvoKitMeta({'score': 1, 'top_level_comment': 'e63uqhy', 'retrieved_on': 1539133743, 'gilded': 0, 'gildings': {'gid_1': 0, 'gid_2': 0, 'gid_3': 0}, 'subreddit': 'sex', 'stickied': False, 'permalink': '/r/sex/comments/9gfh93/first_day_of_my_menstrual_cycle_and_im_wanting/e63uqhy/', 'author_flair_text': ''})})" + "Utterance({'obj_type': 'utterance', '_owner': , 'meta': {'score': 4091, 'top_level_comment': None, 'retrieved_on': 1540057333, 'gilded': 0, 'gildings': {'gid_1': 0, 'gid_2': 0, 'gid_3': 0}, 'subreddit': 'tifu', 'stickied': False, 'permalink': '/r/tifu/comments/9bzh9g/tifu_by_masturbating_with_my_dads_penis/', 'author_flair_text': ''}, '_id': '9bzh9g', 'vectors': [], 'speaker': Speaker({'obj_type': 'speaker', '_owner': , 'meta': {'num_posts': 1, 'num_comments': 0}, '_id': 'gerbalt', 'vectors': []}), 'conversation_id': '9bzh9g', '_root': '9bzh9g', 'reply_to': None, 'timestamp': 1535767318, 'text': '[removed]'})" ] }, - "execution_count": 9, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "corpus.random_utterance()" + "corpus.get_utterance('9bzh9g')" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -206,7 +204,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -240,16 +238,16 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ - "demo_threads = [\"e57u6ft\", \"e56rtrx\"]" + "demo_threads = ['e57u6ft', 'e56rtrx']" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -305,12 +303,12 @@ } ], "source": [ - "threads_corpus.get_conversation(\"e57u6ft\").print_conversation_structure()" + "threads_corpus.get_conversation('e57u6ft').print_conversation_structure()" ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -335,12 +333,12 @@ } ], "source": [ - "threads_corpus.get_conversation(\"e56rtrx\").print_conversation_structure()" + "threads_corpus.get_conversation('e56rtrx').print_conversation_structure()" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -365,7 +363,7 @@ } ], "source": [ - "threads_corpus.get_conversation(\"e56rtrx\").print_conversation_structure(lambda utt: utt.text)" + "threads_corpus.get_conversation('e56rtrx').print_conversation_structure(lambda utt: utt.text)" ] }, { @@ -384,16 +382,16 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 16, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -401,7 +399,7 @@ "source": [ "# create a hyperconvo object and use it to extract features\n", "# Limit our analysis to the first 10 comments of threads with at least 10 comments\n", - "hc = HyperConvo(prefix_len=10, min_convo_len=10)\n", + "hc = HyperConvo(prefix_len=10, min_convo_len=10) \n", "hc.transform(threads_corpus)" ] }, @@ -414,7 +412,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -423,7 +421,7 @@ "{'hyperconvo'}" ] }, - "execution_count": 17, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -434,47 +432,47 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "e5hm9mp\n" + "e6p7yrp\n" ] } ], "source": [ "# Let's look at a (valid) Conversation that has a HyperConvo vector computed for it\n", - "convo1 = next(threads_corpus.iter_conversations(lambda convo: convo.has_vector(\"hyperconvo\")))\n", + "convo1 = next(threads_corpus.iter_conversations(lambda convo: convo.has_vector('hyperconvo')))\n", "print(convo1.id)" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<1x140 sparse matrix of type ''\n", - "\twith 132 stored elements in Compressed Sparse Row format>" + "\twith 130 stored elements in Compressed Sparse Row format>" ] }, - "execution_count": 19, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "convo1.get_vector(\"hyperconvo\")" + "convo1.get_vector('hyperconvo')" ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 23, "metadata": {}, "outputs": [ { @@ -498,714 +496,717 @@ " \n", " \n", " \n", - " max[indegree over c->c responses]\n", - " argmax[indegree over c->c responses]\n", - " norm.max[indegree over c->c responses]\n", - " 2nd-largest[indegree over c->c responses]\n", + " 2nd-argmax[indegree over C->C mid-thread responses]\n", + " 2nd-argmax[indegree over C->C responses]\n", + " 2nd-argmax[indegree over C->c mid-thread responses]\n", + " 2nd-argmax[indegree over C->c responses]\n", + " 2nd-argmax[indegree over c->c mid-thread responses]\n", " 2nd-argmax[indegree over c->c responses]\n", - " norm.2nd-largest[indegree over c->c responses]\n", - " mean[indegree over c->c responses]\n", - " mean-nonzero[indegree over c->c responses]\n", - " prop-nonzero[indegree over c->c responses]\n", - " prop-multiple[indegree over c->c responses]\n", - " entropy[indegree over c->c responses]\n", - " 2nd-largest / max[indegree over c->c responses]\n", - " max[outdegree over C->c responses]\n", - " max[indegree over C->c responses]\n", - " argmax[outdegree over C->c responses]\n", - " argmax[indegree over C->c responses]\n", - " norm.max[outdegree over C->c responses]\n", - " norm.max[indegree over C->c responses]\n", - " 2nd-largest[outdegree over C->c responses]\n", - " 2nd-largest[indegree over C->c responses]\n", + " 2nd-argmax[outdegree over C->C mid-thread responses]\n", + " 2nd-argmax[outdegree over C->C responses]\n", + " 2nd-argmax[outdegree over C->c mid-thread responses]\n", " 2nd-argmax[outdegree over C->c responses]\n", - " 2nd-argmax[indegree over C->c responses]\n", - " norm.2nd-largest[outdegree over C->c responses]\n", - " norm.2nd-largest[indegree over C->c responses]\n", - " mean[outdegree over C->c responses]\n", - " mean[indegree over C->c responses]\n", - " mean-nonzero[outdegree over C->c responses]\n", - " mean-nonzero[indegree over C->c responses]\n", - " prop-nonzero[outdegree over C->c responses]\n", - " prop-nonzero[indegree over C->c responses]\n", - " prop-multiple[outdegree over C->c responses]\n", - " prop-multiple[indegree over C->c responses]\n", - " entropy[outdegree over C->c responses]\n", - " entropy[indegree over C->c responses]\n", - " 2nd-largest / max[outdegree over C->c responses]\n", + " 2nd-largest / max[indegree over C->C mid-thread responses]\n", + " 2nd-largest / max[indegree over C->C responses]\n", + " 2nd-largest / max[indegree over C->c mid-thread responses]\n", " 2nd-largest / max[indegree over C->c responses]\n", - " max[outdegree over C->C responses]\n", - " max[indegree over C->C responses]\n", - " argmax[outdegree over C->C responses]\n", - " argmax[indegree over C->C responses]\n", - " norm.max[outdegree over C->C responses]\n", - " norm.max[indegree over C->C responses]\n", - " 2nd-largest[outdegree over C->C responses]\n", - " 2nd-largest[indegree over C->C responses]\n", - " 2nd-argmax[outdegree over C->C responses]\n", - " 2nd-argmax[indegree over C->C responses]\n", - " norm.2nd-largest[outdegree over C->C responses]\n", - " norm.2nd-largest[indegree over C->C responses]\n", - " mean[outdegree over C->C responses]\n", - " mean[indegree over C->C responses]\n", - " mean-nonzero[outdegree over C->C responses]\n", - " mean-nonzero[indegree over C->C responses]\n", - " prop-nonzero[outdegree over C->C responses]\n", - " prop-nonzero[indegree over C->C responses]\n", - " prop-multiple[outdegree over C->C responses]\n", - " prop-multiple[indegree over C->C responses]\n", - " entropy[outdegree over C->C responses]\n", - " entropy[indegree over C->C responses]\n", + " 2nd-largest / max[indegree over c->c mid-thread responses]\n", + " 2nd-largest / max[indegree over c->c responses]\n", + " 2nd-largest / max[outdegree over C->C mid-thread responses]\n", " 2nd-largest / max[outdegree over C->C responses]\n", - " 2nd-largest / max[indegree over C->C responses]\n", - " is-present[reciprocity motif]\n", - " count[reciprocity motif]\n", - " is-present[external reciprocity motif]\n", - " count[external reciprocity motif]\n", - " is-present[dyadic interaction motif]\n", + " 2nd-largest / max[outdegree over C->c mid-thread responses]\n", + " 2nd-largest / max[outdegree over C->c responses]\n", + " 2nd-largest[indegree over C->C mid-thread responses]\n", + " 2nd-largest[indegree over C->C responses]\n", + " 2nd-largest[indegree over C->c mid-thread responses]\n", + " 2nd-largest[indegree over C->c responses]\n", + " 2nd-largest[indegree over c->c mid-thread responses]\n", + " 2nd-largest[indegree over c->c responses]\n", + " 2nd-largest[outdegree over C->C mid-thread responses]\n", + " 2nd-largest[outdegree over C->C responses]\n", + " 2nd-largest[outdegree over C->c mid-thread responses]\n", + " 2nd-largest[outdegree over C->c responses]\n", + " argmax[indegree over C->C mid-thread responses]\n", + " argmax[indegree over C->C responses]\n", + " argmax[indegree over C->c mid-thread responses]\n", + " argmax[indegree over C->c responses]\n", + " argmax[indegree over c->c mid-thread responses]\n", + " argmax[indegree over c->c responses]\n", + " argmax[outdegree over C->C mid-thread responses]\n", + " argmax[outdegree over C->C responses]\n", + " argmax[outdegree over C->c mid-thread responses]\n", + " argmax[outdegree over C->c responses]\n", + " count[dyadic interaction motif over mid-thread]\n", " count[dyadic interaction motif]\n", - " is-present[incoming triads]\n", + " count[external reciprocity motif over mid-thread]\n", + " count[external reciprocity motif]\n", + " count[incoming triads over mid-thread]\n", " count[incoming triads]\n", - " is-present[outgoing triads]\n", + " count[outgoing triads over mid-thread]\n", " count[outgoing triads]\n", - " max[indegree over c->c mid-thread responses]\n", - " argmax[indegree over c->c mid-thread responses]\n", - " norm.max[indegree over c->c mid-thread responses]\n", - " 2nd-largest[indegree over c->c mid-thread responses]\n", - " 2nd-argmax[indegree over c->c mid-thread responses]\n", - " norm.2nd-largest[indegree over c->c mid-thread responses]\n", - " mean[indegree over c->c mid-thread responses]\n", - " mean-nonzero[indegree over c->c mid-thread responses]\n", - " prop-nonzero[indegree over c->c mid-thread responses]\n", - " prop-multiple[indegree over c->c mid-thread responses]\n", - " entropy[indegree over c->c mid-thread responses]\n", - " 2nd-largest / max[indegree over c->c mid-thread responses]\n", - " max[outdegree over C->c mid-thread responses]\n", - " max[indegree over C->c mid-thread responses]\n", - " argmax[outdegree over C->c mid-thread responses]\n", - " argmax[indegree over C->c mid-thread responses]\n", - " norm.max[outdegree over C->c mid-thread responses]\n", - " norm.max[indegree over C->c mid-thread responses]\n", - " 2nd-largest[outdegree over C->c mid-thread responses]\n", - " 2nd-largest[indegree over C->c mid-thread responses]\n", - " 2nd-argmax[outdegree over C->c mid-thread responses]\n", - " 2nd-argmax[indegree over C->c mid-thread responses]\n", - " norm.2nd-largest[outdegree over C->c mid-thread responses]\n", - " norm.2nd-largest[indegree over C->c mid-thread responses]\n", - " mean[outdegree over C->c mid-thread responses]\n", - " mean[indegree over C->c mid-thread responses]\n", - " mean-nonzero[outdegree over C->c mid-thread responses]\n", - " mean-nonzero[indegree over C->c mid-thread responses]\n", - " prop-nonzero[outdegree over C->c mid-thread responses]\n", - " prop-nonzero[indegree over C->c mid-thread responses]\n", - " prop-multiple[outdegree over C->c mid-thread responses]\n", - " prop-multiple[indegree over C->c mid-thread responses]\n", - " entropy[outdegree over C->c mid-thread responses]\n", + " count[reciprocity motif over mid-thread]\n", + " count[reciprocity motif]\n", + " entropy[indegree over C->C mid-thread responses]\n", + " entropy[indegree over C->C responses]\n", " entropy[indegree over C->c mid-thread responses]\n", - " 2nd-largest / max[outdegree over C->c mid-thread responses]\n", - " 2nd-largest / max[indegree over C->c mid-thread responses]\n", - " max[outdegree over C->C mid-thread responses]\n", - " max[indegree over C->C mid-thread responses]\n", - " argmax[outdegree over C->C mid-thread responses]\n", - " argmax[indegree over C->C mid-thread responses]\n", - " norm.max[outdegree over C->C mid-thread responses]\n", - " norm.max[indegree over C->C mid-thread responses]\n", - " 2nd-largest[outdegree over C->C mid-thread responses]\n", - " 2nd-largest[indegree over C->C mid-thread responses]\n", - " 2nd-argmax[outdegree over C->C mid-thread responses]\n", - " 2nd-argmax[indegree over C->C mid-thread responses]\n", - " norm.2nd-largest[outdegree over C->C mid-thread responses]\n", - " norm.2nd-largest[indegree over C->C mid-thread responses]\n", - " mean[outdegree over C->C mid-thread responses]\n", - " mean[indegree over C->C mid-thread responses]\n", - " mean-nonzero[outdegree over C->C mid-thread responses]\n", - " mean-nonzero[indegree over C->C mid-thread responses]\n", - " prop-nonzero[outdegree over C->C mid-thread responses]\n", - " prop-nonzero[indegree over C->C mid-thread responses]\n", - " prop-multiple[outdegree over C->C mid-thread responses]\n", - " prop-multiple[indegree over C->C mid-thread responses]\n", + " entropy[indegree over C->c responses]\n", + " entropy[indegree over c->c mid-thread responses]\n", + " entropy[indegree over c->c responses]\n", " entropy[outdegree over C->C mid-thread responses]\n", - " entropy[indegree over C->C mid-thread responses]\n", - " 2nd-largest / max[outdegree over C->C mid-thread responses]\n", - " 2nd-largest / max[indegree over C->C mid-thread responses]\n", - " is-present[reciprocity motif over mid-thread]\n", - " count[reciprocity motif over mid-thread]\n", - " is-present[external reciprocity motif over mid-thread]\n", - " count[external reciprocity motif over mid-thread]\n", + " entropy[outdegree over C->C responses]\n", + " entropy[outdegree over C->c mid-thread responses]\n", + " entropy[outdegree over C->c responses]\n", " is-present[dyadic interaction motif over mid-thread]\n", - " count[dyadic interaction motif over mid-thread]\n", + " is-present[dyadic interaction motif]\n", + " is-present[external reciprocity motif over mid-thread]\n", + " is-present[external reciprocity motif]\n", " is-present[incoming triads over mid-thread]\n", - " count[incoming triads over mid-thread]\n", + " is-present[incoming triads]\n", " is-present[outgoing triads over mid-thread]\n", - " count[outgoing triads over mid-thread]\n", - " \n", - " \n", - " \n", - " \n", - " e5hm9mp\n", - " 3.0\n", - " 1.0\n", - " 0.333333\n", - " 1.0\n", - " 0.0\n", - " 0.111111\n", - " 0.9\n", - " 1.285714\n", - " 0.7\n", - " 0.142857\n", - " 1.83102\n", - " 0.333333\n", - " 2.0\n", - " 3.0\n", - " 0.0\n", - " 1.0\n", - " 0.222222\n", - " 0.333333\n", - " 2.0\n", - " 1.0\n", - " 2.0\n", - " 0.0\n", - " 0.222222\n", - " 0.111111\n", - " 1.8\n", - " 0.9\n", - " 1.8\n", - " 1.285714\n", - " 1.0\n", - " 0.7\n", - " 0.8\n", - " 0.142857\n", - " 1.581094\n", - " 1.83102\n", - " 1.0\n", - " 0.333333\n", - " 2.0\n", - " 3.0\n", + " is-present[outgoing triads]\n", + " is-present[reciprocity motif over mid-thread]\n", + " is-present[reciprocity motif]\n", + " max[indegree over C->C mid-thread responses]\n", + " max[indegree over C->C responses]\n", + " max[indegree over C->c mid-thread responses]\n", + " max[indegree over C->c responses]\n", + " max[indegree over c->c mid-thread responses]\n", + " max[indegree over c->c responses]\n", + " max[outdegree over C->C mid-thread responses]\n", + " max[outdegree over C->C responses]\n", + " max[outdegree over C->c mid-thread responses]\n", + " max[outdegree over C->c responses]\n", + " mean-nonzero[indegree over C->C mid-thread responses]\n", + " mean-nonzero[indegree over C->C responses]\n", + " mean-nonzero[indegree over C->c mid-thread responses]\n", + " mean-nonzero[indegree over C->c responses]\n", + " mean-nonzero[indegree over c->c mid-thread responses]\n", + " mean-nonzero[indegree over c->c responses]\n", + " mean-nonzero[outdegree over C->C mid-thread responses]\n", + " mean-nonzero[outdegree over C->C responses]\n", + " mean-nonzero[outdegree over C->c mid-thread responses]\n", + " mean-nonzero[outdegree over C->c responses]\n", + " mean[indegree over C->C mid-thread responses]\n", + " mean[indegree over C->C responses]\n", + " mean[indegree over C->c mid-thread responses]\n", + " mean[indegree over C->c responses]\n", + " mean[indegree over c->c mid-thread responses]\n", + " mean[indegree over c->c responses]\n", + " mean[outdegree over C->C mid-thread responses]\n", + " mean[outdegree over C->C responses]\n", + " mean[outdegree over C->c mid-thread responses]\n", + " mean[outdegree over C->c responses]\n", + " norm.2nd-largest[indegree over C->C mid-thread responses]\n", + " norm.2nd-largest[indegree over C->C responses]\n", + " norm.2nd-largest[indegree over C->c mid-thread responses]\n", + " norm.2nd-largest[indegree over C->c responses]\n", + " norm.2nd-largest[indegree over c->c mid-thread responses]\n", + " norm.2nd-largest[indegree over c->c responses]\n", + " norm.2nd-largest[outdegree over C->C mid-thread responses]\n", + " norm.2nd-largest[outdegree over C->C responses]\n", + " norm.2nd-largest[outdegree over C->c mid-thread responses]\n", + " norm.2nd-largest[outdegree over C->c responses]\n", + " norm.max[indegree over C->C mid-thread responses]\n", + " norm.max[indegree over C->C responses]\n", + " norm.max[indegree over C->c mid-thread responses]\n", + " norm.max[indegree over C->c responses]\n", + " norm.max[indegree over c->c mid-thread responses]\n", + " norm.max[indegree over c->c responses]\n", + " norm.max[outdegree over C->C mid-thread responses]\n", + " norm.max[outdegree over C->C responses]\n", + " norm.max[outdegree over C->c mid-thread responses]\n", + " norm.max[outdegree over C->c responses]\n", + " prop-multiple[indegree over C->C mid-thread responses]\n", + " prop-multiple[indegree over C->C responses]\n", + " prop-multiple[indegree over C->c mid-thread responses]\n", + " prop-multiple[indegree over C->c responses]\n", + " prop-multiple[indegree over c->c mid-thread responses]\n", + " prop-multiple[indegree over c->c responses]\n", + " prop-multiple[outdegree over C->C mid-thread responses]\n", + " prop-multiple[outdegree over C->C responses]\n", + " prop-multiple[outdegree over C->c mid-thread responses]\n", + " prop-multiple[outdegree over C->c responses]\n", + " prop-nonzero[indegree over C->C mid-thread responses]\n", + " prop-nonzero[indegree over C->C responses]\n", + " prop-nonzero[indegree over C->c mid-thread responses]\n", + " prop-nonzero[indegree over C->c responses]\n", + " prop-nonzero[indegree over c->c mid-thread responses]\n", + " prop-nonzero[indegree over c->c responses]\n", + " prop-nonzero[outdegree over C->C mid-thread responses]\n", + " prop-nonzero[outdegree over C->C responses]\n", + " prop-nonzero[outdegree over C->c mid-thread responses]\n", + " prop-nonzero[outdegree over C->c responses]\n", + " \n", + " \n", + " \n", + " \n", + " e6p7yrp\n", " 0.0\n", " 1.0\n", - " 0.25\n", - " 0.375\n", - " 2.0\n", - " 2.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", " 2.0\n", - " 0.0\n", - " 0.25\n", - " 0.25\n", - " 1.6\n", - " 1.6\n", - " 1.6\n", - " 1.6\n", " 1.0\n", + " 2.0\n", + " 3.0\n", + " 0.333333\n", + " 0.2\n", " 1.0\n", - " 0.6\n", - " 0.4\n", - " 1.559581\n", - " 1.494175\n", + " 0.333333\n", " 1.0\n", + " 0.333333\n", + " 0.333333\n", + " 0.333333\n", + " 0.333333\n", " 0.666667\n", " 1.0\n", - " 4.0\n", " 1.0\n", - " 4.0\n", " 1.0\n", - " 3.0\n", " 1.0\n", - " 4.0\n", " 1.0\n", - " 3.0\n", - " 3.0\n", - " 0.0\n", - " 0.375\n", " 1.0\n", " 1.0\n", - " 0.125\n", - " 0.888889\n", - " 1.333333\n", - " 0.666667\n", - " 0.166667\n", - " 1.667462\n", - " 0.333333\n", - " 2.0\n", - " 3.0\n", " 1.0\n", - " 0.0\n", - " 0.25\n", - " 0.375\n", - " 2.0\n", " 1.0\n", " 2.0\n", " 1.0\n", - " 0.25\n", - " 0.125\n", - " 1.6\n", - " 0.888889\n", - " 2.0\n", - " 1.333333\n", - " 0.8\n", - " 0.666667\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", " 1.0\n", - " 0.166667\n", - " 1.386294\n", - " 1.667462\n", + " 0.0\n", " 1.0\n", - " 0.333333\n", + " 0.0\n", " 2.0\n", " 3.0\n", - " 1.0\n", - " 0.0\n", - " 0.285714\n", - " 0.428571\n", " 2.0\n", - " 1.0\n", " 2.0\n", + " 3.0\n", + " 10.0\n", + " 3.0\n", + " 3.0\n", + " 2.0\n", + " 4.0\n", + " 1.242453\n", + " 1.073543\n", + " 1.791759\n", + " 1.83102\n", + " 1.791759\n", + " 1.83102\n", + " 1.242453\n", + " 1.667462\n", + " 1.242453\n", + " 1.676988\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", " 1.0\n", - " 0.285714\n", - " 0.142857\n", - " 1.4\n", - " 1.4\n", - " 1.75\n", - " 1.4\n", - " 0.8\n", " 1.0\n", - " 0.75\n", - " 0.2\n", - " 1.351784\n", - " 1.475076\n", " 1.0\n", - " 0.333333\n", " 1.0\n", - " 3.0\n", " 1.0\n", - " 2.0\n", " 1.0\n", - " 2.0\n", + " 1.0\n", + " 3.0\n", + " 5.0\n", " 1.0\n", " 3.0\n", " 1.0\n", " 3.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 1.5\n", + " 2.0\n", + " 1.0\n", + " 1.285714\n", + " 1.0\n", + " 1.285714\n", + " 1.5\n", + " 1.333333\n", + " 1.5\n", + " 1.5\n", + " 1.0\n", + " 1.333333\n", + " 0.666667\n", + " 0.9\n", + " 0.666667\n", + " 0.9\n", + " 1.0\n", + " 1.333333\n", + " 1.0\n", + " 1.5\n", + " 0.166667\n", + " 0.125\n", + " 0.166667\n", + " 0.111111\n", + " 0.166667\n", + " 0.111111\n", + " 0.166667\n", + " 0.125\n", + " 0.166667\n", + " 0.222222\n", + " 0.5\n", + " 0.625\n", + " 0.166667\n", + " 0.333333\n", + " 0.166667\n", + " 0.333333\n", + " 0.5\n", + " 0.375\n", + " 0.5\n", + " 0.333333\n", + " 0.25\n", + " 0.25\n", + " 0.0\n", + " 0.142857\n", + " 0.0\n", + " 0.142857\n", + " 0.25\n", + " 0.166667\n", + " 0.25\n", + " 0.333333\n", + " 0.666667\n", + " 0.666667\n", + " 0.666667\n", + " 0.7\n", + " 0.666667\n", + " 0.7\n", + " 0.666667\n", + " 1.0\n", + " 0.666667\n", + " 1.0\n", " \n", " \n", "\n", "" ], "text/plain": [ - " max[indegree over c->c responses] \\\n", - "e5hm9mp 3.0 \n", + " 2nd-argmax[indegree over C->C mid-thread responses] \\\n", + "e6p7yrp 0.0 \n", "\n", - " argmax[indegree over c->c responses] \\\n", - "e5hm9mp 1.0 \n", + " 2nd-argmax[indegree over C->C responses] \\\n", + "e6p7yrp 1.0 \n", "\n", - " norm.max[indegree over c->c responses] \\\n", - "e5hm9mp 0.333333 \n", + " 2nd-argmax[indegree over C->c mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", "\n", - " 2nd-largest[indegree over c->c responses] \\\n", - "e5hm9mp 1.0 \n", + " 2nd-argmax[indegree over C->c responses] \\\n", + "e6p7yrp 1.0 \n", + "\n", + " 2nd-argmax[indegree over c->c mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", "\n", " 2nd-argmax[indegree over c->c responses] \\\n", - "e5hm9mp 0.0 \n", + "e6p7yrp 1.0 \n", "\n", - " norm.2nd-largest[indegree over c->c responses] \\\n", - "e5hm9mp 0.111111 \n", + " 2nd-argmax[outdegree over C->C mid-thread responses] \\\n", + "e6p7yrp 2.0 \n", "\n", - " mean[indegree over c->c responses] \\\n", - "e5hm9mp 0.9 \n", + " 2nd-argmax[outdegree over C->C responses] \\\n", + "e6p7yrp 1.0 \n", "\n", - " mean-nonzero[indegree over c->c responses] \\\n", - "e5hm9mp 1.285714 \n", + " 2nd-argmax[outdegree over C->c mid-thread responses] \\\n", + "e6p7yrp 2.0 \n", "\n", - " prop-nonzero[indegree over c->c responses] \\\n", - "e5hm9mp 0.7 \n", + " 2nd-argmax[outdegree over C->c responses] \\\n", + "e6p7yrp 3.0 \n", "\n", - " prop-multiple[indegree over c->c responses] \\\n", - "e5hm9mp 0.142857 \n", - "\n", - " entropy[indegree over c->c responses] \\\n", - "e5hm9mp 1.83102 \n", - "\n", - " 2nd-largest / max[indegree over c->c responses] \\\n", - "e5hm9mp 0.333333 \n", + " 2nd-largest / max[indegree over C->C mid-thread responses] \\\n", + "e6p7yrp 0.333333 \n", "\n", - " max[outdegree over C->c responses] \\\n", - "e5hm9mp 2.0 \n", + " 2nd-largest / max[indegree over C->C responses] \\\n", + "e6p7yrp 0.2 \n", "\n", - " max[indegree over C->c responses] \\\n", - "e5hm9mp 3.0 \n", + " 2nd-largest / max[indegree over C->c mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", "\n", - " argmax[outdegree over C->c responses] \\\n", - "e5hm9mp 0.0 \n", + " 2nd-largest / max[indegree over C->c responses] \\\n", + "e6p7yrp 0.333333 \n", "\n", - " argmax[indegree over C->c responses] \\\n", - "e5hm9mp 1.0 \n", + " 2nd-largest / max[indegree over c->c mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", "\n", - " norm.max[outdegree over C->c responses] \\\n", - "e5hm9mp 0.222222 \n", + " 2nd-largest / max[indegree over c->c responses] \\\n", + "e6p7yrp 0.333333 \n", "\n", - " norm.max[indegree over C->c responses] \\\n", - "e5hm9mp 0.333333 \n", + " 2nd-largest / max[outdegree over C->C mid-thread responses] \\\n", + "e6p7yrp 0.333333 \n", "\n", - " 2nd-largest[outdegree over C->c responses] \\\n", - "e5hm9mp 2.0 \n", + " 2nd-largest / max[outdegree over C->C responses] \\\n", + "e6p7yrp 0.333333 \n", "\n", - " 2nd-largest[indegree over C->c responses] \\\n", - "e5hm9mp 1.0 \n", + " 2nd-largest / max[outdegree over C->c mid-thread responses] \\\n", + "e6p7yrp 0.333333 \n", "\n", - " 2nd-argmax[outdegree over C->c responses] \\\n", - "e5hm9mp 2.0 \n", + " 2nd-largest / max[outdegree over C->c responses] \\\n", + "e6p7yrp 0.666667 \n", "\n", - " 2nd-argmax[indegree over C->c responses] \\\n", - "e5hm9mp 0.0 \n", + " 2nd-largest[indegree over C->C mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", "\n", - " norm.2nd-largest[outdegree over C->c responses] \\\n", - "e5hm9mp 0.222222 \n", + " 2nd-largest[indegree over C->C responses] \\\n", + "e6p7yrp 1.0 \n", "\n", - " norm.2nd-largest[indegree over C->c responses] \\\n", - "e5hm9mp 0.111111 \n", + " 2nd-largest[indegree over C->c mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", "\n", - " mean[outdegree over C->c responses] \\\n", - "e5hm9mp 1.8 \n", + " 2nd-largest[indegree over C->c responses] \\\n", + "e6p7yrp 1.0 \n", "\n", - " mean[indegree over C->c responses] \\\n", - "e5hm9mp 0.9 \n", + " 2nd-largest[indegree over c->c mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", "\n", - " mean-nonzero[outdegree over C->c responses] \\\n", - "e5hm9mp 1.8 \n", + " 2nd-largest[indegree over c->c responses] \\\n", + "e6p7yrp 1.0 \n", "\n", - " mean-nonzero[indegree over C->c responses] \\\n", - "e5hm9mp 1.285714 \n", + " 2nd-largest[outdegree over C->C mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", "\n", - " prop-nonzero[outdegree over C->c responses] \\\n", - "e5hm9mp 1.0 \n", + " 2nd-largest[outdegree over C->C responses] \\\n", + "e6p7yrp 1.0 \n", "\n", - " prop-nonzero[indegree over C->c responses] \\\n", - "e5hm9mp 0.7 \n", + " 2nd-largest[outdegree over C->c mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", "\n", - " prop-multiple[outdegree over C->c responses] \\\n", - "e5hm9mp 0.8 \n", + " 2nd-largest[outdegree over C->c responses] \\\n", + "e6p7yrp 2.0 \n", "\n", - " prop-multiple[indegree over C->c responses] \\\n", - "e5hm9mp 0.142857 \n", + " argmax[indegree over C->C mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", "\n", - " entropy[outdegree over C->c responses] \\\n", - "e5hm9mp 1.581094 \n", + " argmax[indegree over C->C responses] \\\n", + "e6p7yrp 0.0 \n", "\n", - " entropy[indegree over C->c responses] \\\n", - "e5hm9mp 1.83102 \n", + " argmax[indegree over C->c mid-thread responses] \\\n", + "e6p7yrp 0.0 \n", "\n", - " 2nd-largest / max[outdegree over C->c responses] \\\n", - "e5hm9mp 1.0 \n", + " argmax[indegree over C->c responses] \\\n", + "e6p7yrp 0.0 \n", "\n", - " 2nd-largest / max[indegree over C->c responses] \\\n", - "e5hm9mp 0.333333 \n", + " argmax[indegree over c->c mid-thread responses] \\\n", + "e6p7yrp 0.0 \n", "\n", - " max[outdegree over C->C responses] \\\n", - "e5hm9mp 2.0 \n", + " argmax[indegree over c->c responses] \\\n", + "e6p7yrp 0.0 \n", "\n", - " max[indegree over C->C responses] \\\n", - "e5hm9mp 3.0 \n", + " argmax[outdegree over C->C mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", "\n", " argmax[outdegree over C->C responses] \\\n", - "e5hm9mp 0.0 \n", + "e6p7yrp 0.0 \n", "\n", - " argmax[indegree over C->C responses] \\\n", - "e5hm9mp 1.0 \n", - "\n", - " norm.max[outdegree over C->C responses] \\\n", - "e5hm9mp 0.25 \n", + " argmax[outdegree over C->c mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", "\n", - " norm.max[indegree over C->C responses] \\\n", - "e5hm9mp 0.375 \n", + " argmax[outdegree over C->c responses] \\\n", + "e6p7yrp 0.0 \n", "\n", - " 2nd-largest[outdegree over C->C responses] \\\n", - "e5hm9mp 2.0 \n", + " count[dyadic interaction motif over mid-thread] \\\n", + "e6p7yrp 2.0 \n", "\n", - " 2nd-largest[indegree over C->C responses] \\\n", - "e5hm9mp 2.0 \n", + " count[dyadic interaction motif] \\\n", + "e6p7yrp 3.0 \n", "\n", - " 2nd-argmax[outdegree over C->C responses] \\\n", - "e5hm9mp 2.0 \n", + " count[external reciprocity motif over mid-thread] \\\n", + "e6p7yrp 2.0 \n", "\n", - " 2nd-argmax[indegree over C->C responses] \\\n", - "e5hm9mp 0.0 \n", + " count[external reciprocity motif] \\\n", + "e6p7yrp 2.0 \n", "\n", - " norm.2nd-largest[outdegree over C->C responses] \\\n", - "e5hm9mp 0.25 \n", + " count[incoming triads over mid-thread] count[incoming triads] \\\n", + "e6p7yrp 3.0 10.0 \n", "\n", - " norm.2nd-largest[indegree over C->C responses] \\\n", - "e5hm9mp 0.25 \n", + " count[outgoing triads over mid-thread] count[outgoing triads] \\\n", + "e6p7yrp 3.0 3.0 \n", "\n", - " mean[outdegree over C->C responses] \\\n", - "e5hm9mp 1.6 \n", + " count[reciprocity motif over mid-thread] count[reciprocity motif] \\\n", + "e6p7yrp 2.0 4.0 \n", "\n", - " mean[indegree over C->C responses] \\\n", - "e5hm9mp 1.6 \n", + " entropy[indegree over C->C mid-thread responses] \\\n", + "e6p7yrp 1.242453 \n", "\n", - " mean-nonzero[outdegree over C->C responses] \\\n", - "e5hm9mp 1.6 \n", + " entropy[indegree over C->C responses] \\\n", + "e6p7yrp 1.073543 \n", "\n", - " mean-nonzero[indegree over C->C responses] \\\n", - "e5hm9mp 1.6 \n", + " entropy[indegree over C->c mid-thread responses] \\\n", + "e6p7yrp 1.791759 \n", "\n", - " prop-nonzero[outdegree over C->C responses] \\\n", - "e5hm9mp 1.0 \n", + " entropy[indegree over C->c responses] \\\n", + "e6p7yrp 1.83102 \n", "\n", - " prop-nonzero[indegree over C->C responses] \\\n", - "e5hm9mp 1.0 \n", + " entropy[indegree over c->c mid-thread responses] \\\n", + "e6p7yrp 1.791759 \n", "\n", - " prop-multiple[outdegree over C->C responses] \\\n", - "e5hm9mp 0.6 \n", + " entropy[indegree over c->c responses] \\\n", + "e6p7yrp 1.83102 \n", "\n", - " prop-multiple[indegree over C->C responses] \\\n", - "e5hm9mp 0.4 \n", + " entropy[outdegree over C->C mid-thread responses] \\\n", + "e6p7yrp 1.242453 \n", "\n", " entropy[outdegree over C->C responses] \\\n", - "e5hm9mp 1.559581 \n", - "\n", - " entropy[indegree over C->C responses] \\\n", - "e5hm9mp 1.494175 \n", + "e6p7yrp 1.667462 \n", "\n", - " 2nd-largest / max[outdegree over C->C responses] \\\n", - "e5hm9mp 1.0 \n", + " entropy[outdegree over C->c mid-thread responses] \\\n", + "e6p7yrp 1.242453 \n", "\n", - " 2nd-largest / max[indegree over C->C responses] \\\n", - "e5hm9mp 0.666667 \n", + " entropy[outdegree over C->c responses] \\\n", + "e6p7yrp 1.676988 \n", "\n", - " is-present[reciprocity motif] count[reciprocity motif] \\\n", - "e5hm9mp 1.0 4.0 \n", + " is-present[dyadic interaction motif over mid-thread] \\\n", + "e6p7yrp 1.0 \n", "\n", - " is-present[external reciprocity motif] \\\n", - "e5hm9mp 1.0 \n", + " is-present[dyadic interaction motif] \\\n", + "e6p7yrp 1.0 \n", "\n", - " count[external reciprocity motif] \\\n", - "e5hm9mp 4.0 \n", + " is-present[external reciprocity motif over mid-thread] \\\n", + "e6p7yrp 1.0 \n", "\n", - " is-present[dyadic interaction motif] \\\n", - "e5hm9mp 1.0 \n", + " is-present[external reciprocity motif] \\\n", + "e6p7yrp 1.0 \n", "\n", - " count[dyadic interaction motif] is-present[incoming triads] \\\n", - "e5hm9mp 3.0 1.0 \n", + " is-present[incoming triads over mid-thread] \\\n", + "e6p7yrp 1.0 \n", "\n", - " count[incoming triads] is-present[outgoing triads] \\\n", - "e5hm9mp 4.0 1.0 \n", + " is-present[incoming triads] \\\n", + "e6p7yrp 1.0 \n", "\n", - " count[outgoing triads] max[indegree over c->c mid-thread responses] \\\n", - "e5hm9mp 3.0 3.0 \n", + " is-present[outgoing triads over mid-thread] \\\n", + "e6p7yrp 1.0 \n", "\n", - " argmax[indegree over c->c mid-thread responses] \\\n", - "e5hm9mp 0.0 \n", + " is-present[outgoing triads] \\\n", + "e6p7yrp 1.0 \n", "\n", - " norm.max[indegree over c->c mid-thread responses] \\\n", - "e5hm9mp 0.375 \n", + " is-present[reciprocity motif over mid-thread] \\\n", + "e6p7yrp 1.0 \n", "\n", - " 2nd-largest[indegree over c->c mid-thread responses] \\\n", - "e5hm9mp 1.0 \n", + " is-present[reciprocity motif] \\\n", + "e6p7yrp 1.0 \n", "\n", - " 2nd-argmax[indegree over c->c mid-thread responses] \\\n", - "e5hm9mp 1.0 \n", + " max[indegree over C->C mid-thread responses] \\\n", + "e6p7yrp 3.0 \n", "\n", - " norm.2nd-largest[indegree over c->c mid-thread responses] \\\n", - "e5hm9mp 0.125 \n", + " max[indegree over C->C responses] \\\n", + "e6p7yrp 5.0 \n", "\n", - " mean[indegree over c->c mid-thread responses] \\\n", - "e5hm9mp 0.888889 \n", + " max[indegree over C->c mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", "\n", - " mean-nonzero[indegree over c->c mid-thread responses] \\\n", - "e5hm9mp 1.333333 \n", + " max[indegree over C->c responses] \\\n", + "e6p7yrp 3.0 \n", "\n", - " prop-nonzero[indegree over c->c mid-thread responses] \\\n", - "e5hm9mp 0.666667 \n", + " max[indegree over c->c mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", "\n", - " prop-multiple[indegree over c->c mid-thread responses] \\\n", - "e5hm9mp 0.166667 \n", + " max[indegree over c->c responses] \\\n", + "e6p7yrp 3.0 \n", "\n", - " entropy[indegree over c->c mid-thread responses] \\\n", - "e5hm9mp 1.667462 \n", + " max[outdegree over C->C mid-thread responses] \\\n", + "e6p7yrp 3.0 \n", "\n", - " 2nd-largest / max[indegree over c->c mid-thread responses] \\\n", - "e5hm9mp 0.333333 \n", + " max[outdegree over C->C responses] \\\n", + "e6p7yrp 3.0 \n", "\n", " max[outdegree over C->c mid-thread responses] \\\n", - "e5hm9mp 2.0 \n", + "e6p7yrp 3.0 \n", "\n", - " max[indegree over C->c mid-thread responses] \\\n", - "e5hm9mp 3.0 \n", + " max[outdegree over C->c responses] \\\n", + "e6p7yrp 3.0 \n", "\n", - " argmax[outdegree over C->c mid-thread responses] \\\n", - "e5hm9mp 1.0 \n", + " mean-nonzero[indegree over C->C mid-thread responses] \\\n", + "e6p7yrp 1.5 \n", "\n", - " argmax[indegree over C->c mid-thread responses] \\\n", - "e5hm9mp 0.0 \n", + " mean-nonzero[indegree over C->C responses] \\\n", + "e6p7yrp 2.0 \n", "\n", - " norm.max[outdegree over C->c mid-thread responses] \\\n", - "e5hm9mp 0.25 \n", + " mean-nonzero[indegree over C->c mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", "\n", - " norm.max[indegree over C->c mid-thread responses] \\\n", - "e5hm9mp 0.375 \n", + " mean-nonzero[indegree over C->c responses] \\\n", + "e6p7yrp 1.285714 \n", "\n", - " 2nd-largest[outdegree over C->c mid-thread responses] \\\n", - "e5hm9mp 2.0 \n", + " mean-nonzero[indegree over c->c mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", "\n", - " 2nd-largest[indegree over C->c mid-thread responses] \\\n", - "e5hm9mp 1.0 \n", + " mean-nonzero[indegree over c->c responses] \\\n", + "e6p7yrp 1.285714 \n", "\n", - " 2nd-argmax[outdegree over C->c mid-thread responses] \\\n", - "e5hm9mp 2.0 \n", + " mean-nonzero[outdegree over C->C mid-thread responses] \\\n", + "e6p7yrp 1.5 \n", "\n", - " 2nd-argmax[indegree over C->c mid-thread responses] \\\n", - "e5hm9mp 1.0 \n", + " mean-nonzero[outdegree over C->C responses] \\\n", + "e6p7yrp 1.333333 \n", "\n", - " norm.2nd-largest[outdegree over C->c mid-thread responses] \\\n", - "e5hm9mp 0.25 \n", + " mean-nonzero[outdegree over C->c mid-thread responses] \\\n", + "e6p7yrp 1.5 \n", "\n", - " norm.2nd-largest[indegree over C->c mid-thread responses] \\\n", - "e5hm9mp 0.125 \n", + " mean-nonzero[outdegree over C->c responses] \\\n", + "e6p7yrp 1.5 \n", "\n", - " mean[outdegree over C->c mid-thread responses] \\\n", - "e5hm9mp 1.6 \n", + " mean[indegree over C->C mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", + "\n", + " mean[indegree over C->C responses] \\\n", + "e6p7yrp 1.333333 \n", "\n", " mean[indegree over C->c mid-thread responses] \\\n", - "e5hm9mp 0.888889 \n", + "e6p7yrp 0.666667 \n", "\n", - " mean-nonzero[outdegree over C->c mid-thread responses] \\\n", - "e5hm9mp 2.0 \n", + " mean[indegree over C->c responses] \\\n", + "e6p7yrp 0.9 \n", "\n", - " mean-nonzero[indegree over C->c mid-thread responses] \\\n", - "e5hm9mp 1.333333 \n", + " mean[indegree over c->c mid-thread responses] \\\n", + "e6p7yrp 0.666667 \n", "\n", - " prop-nonzero[outdegree over C->c mid-thread responses] \\\n", - "e5hm9mp 0.8 \n", + " mean[indegree over c->c responses] \\\n", + "e6p7yrp 0.9 \n", "\n", - " prop-nonzero[indegree over C->c mid-thread responses] \\\n", - "e5hm9mp 0.666667 \n", + " mean[outdegree over C->C mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", "\n", - " prop-multiple[outdegree over C->c mid-thread responses] \\\n", - "e5hm9mp 1.0 \n", + " mean[outdegree over C->C responses] \\\n", + "e6p7yrp 1.333333 \n", "\n", - " prop-multiple[indegree over C->c mid-thread responses] \\\n", - "e5hm9mp 0.166667 \n", + " mean[outdegree over C->c mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", "\n", - " entropy[outdegree over C->c mid-thread responses] \\\n", - "e5hm9mp 1.386294 \n", + " mean[outdegree over C->c responses] \\\n", + "e6p7yrp 1.5 \n", "\n", - " entropy[indegree over C->c mid-thread responses] \\\n", - "e5hm9mp 1.667462 \n", + " norm.2nd-largest[indegree over C->C mid-thread responses] \\\n", + "e6p7yrp 0.166667 \n", "\n", - " 2nd-largest / max[outdegree over C->c mid-thread responses] \\\n", - "e5hm9mp 1.0 \n", + " norm.2nd-largest[indegree over C->C responses] \\\n", + "e6p7yrp 0.125 \n", "\n", - " 2nd-largest / max[indegree over C->c mid-thread responses] \\\n", - "e5hm9mp 0.333333 \n", + " norm.2nd-largest[indegree over C->c mid-thread responses] \\\n", + "e6p7yrp 0.166667 \n", "\n", - " max[outdegree over C->C mid-thread responses] \\\n", - "e5hm9mp 2.0 \n", + " norm.2nd-largest[indegree over C->c responses] \\\n", + "e6p7yrp 0.111111 \n", "\n", - " max[indegree over C->C mid-thread responses] \\\n", - "e5hm9mp 3.0 \n", + " norm.2nd-largest[indegree over c->c mid-thread responses] \\\n", + "e6p7yrp 0.166667 \n", "\n", - " argmax[outdegree over C->C mid-thread responses] \\\n", - "e5hm9mp 1.0 \n", + " norm.2nd-largest[indegree over c->c responses] \\\n", + "e6p7yrp 0.111111 \n", "\n", - " argmax[indegree over C->C mid-thread responses] \\\n", - "e5hm9mp 0.0 \n", + " norm.2nd-largest[outdegree over C->C mid-thread responses] \\\n", + "e6p7yrp 0.166667 \n", "\n", - " norm.max[outdegree over C->C mid-thread responses] \\\n", - "e5hm9mp 0.285714 \n", + " norm.2nd-largest[outdegree over C->C responses] \\\n", + "e6p7yrp 0.125 \n", + "\n", + " norm.2nd-largest[outdegree over C->c mid-thread responses] \\\n", + "e6p7yrp 0.166667 \n", + "\n", + " norm.2nd-largest[outdegree over C->c responses] \\\n", + "e6p7yrp 0.222222 \n", "\n", " norm.max[indegree over C->C mid-thread responses] \\\n", - "e5hm9mp 0.428571 \n", + "e6p7yrp 0.5 \n", "\n", - " 2nd-largest[outdegree over C->C mid-thread responses] \\\n", - "e5hm9mp 2.0 \n", + " norm.max[indegree over C->C responses] \\\n", + "e6p7yrp 0.625 \n", "\n", - " 2nd-largest[indegree over C->C mid-thread responses] \\\n", - "e5hm9mp 1.0 \n", + " norm.max[indegree over C->c mid-thread responses] \\\n", + "e6p7yrp 0.166667 \n", "\n", - " 2nd-argmax[outdegree over C->C mid-thread responses] \\\n", - "e5hm9mp 2.0 \n", + " norm.max[indegree over C->c responses] \\\n", + "e6p7yrp 0.333333 \n", "\n", - " 2nd-argmax[indegree over C->C mid-thread responses] \\\n", - "e5hm9mp 1.0 \n", + " norm.max[indegree over c->c mid-thread responses] \\\n", + "e6p7yrp 0.166667 \n", "\n", - " norm.2nd-largest[outdegree over C->C mid-thread responses] \\\n", - "e5hm9mp 0.285714 \n", + " norm.max[indegree over c->c responses] \\\n", + "e6p7yrp 0.333333 \n", "\n", - " norm.2nd-largest[indegree over C->C mid-thread responses] \\\n", - "e5hm9mp 0.142857 \n", + " norm.max[outdegree over C->C mid-thread responses] \\\n", + "e6p7yrp 0.5 \n", "\n", - " mean[outdegree over C->C mid-thread responses] \\\n", - "e5hm9mp 1.4 \n", + " norm.max[outdegree over C->C responses] \\\n", + "e6p7yrp 0.375 \n", "\n", - " mean[indegree over C->C mid-thread responses] \\\n", - "e5hm9mp 1.4 \n", + " norm.max[outdegree over C->c mid-thread responses] \\\n", + "e6p7yrp 0.5 \n", "\n", - " mean-nonzero[outdegree over C->C mid-thread responses] \\\n", - "e5hm9mp 1.75 \n", + " norm.max[outdegree over C->c responses] \\\n", + "e6p7yrp 0.333333 \n", "\n", - " mean-nonzero[indegree over C->C mid-thread responses] \\\n", - "e5hm9mp 1.4 \n", + " prop-multiple[indegree over C->C mid-thread responses] \\\n", + "e6p7yrp 0.25 \n", "\n", - " prop-nonzero[outdegree over C->C mid-thread responses] \\\n", - "e5hm9mp 0.8 \n", + " prop-multiple[indegree over C->C responses] \\\n", + "e6p7yrp 0.25 \n", "\n", - " prop-nonzero[indegree over C->C mid-thread responses] \\\n", - "e5hm9mp 1.0 \n", + " prop-multiple[indegree over C->c mid-thread responses] \\\n", + "e6p7yrp 0.0 \n", "\n", - " prop-multiple[outdegree over C->C mid-thread responses] \\\n", - "e5hm9mp 0.75 \n", + " prop-multiple[indegree over C->c responses] \\\n", + "e6p7yrp 0.142857 \n", "\n", - " prop-multiple[indegree over C->C mid-thread responses] \\\n", - "e5hm9mp 0.2 \n", + " prop-multiple[indegree over c->c mid-thread responses] \\\n", + "e6p7yrp 0.0 \n", "\n", - " entropy[outdegree over C->C mid-thread responses] \\\n", - "e5hm9mp 1.351784 \n", + " prop-multiple[indegree over c->c responses] \\\n", + "e6p7yrp 0.142857 \n", "\n", - " entropy[indegree over C->C mid-thread responses] \\\n", - "e5hm9mp 1.475076 \n", + " prop-multiple[outdegree over C->C mid-thread responses] \\\n", + "e6p7yrp 0.25 \n", "\n", - " 2nd-largest / max[outdegree over C->C mid-thread responses] \\\n", - "e5hm9mp 1.0 \n", + " prop-multiple[outdegree over C->C responses] \\\n", + "e6p7yrp 0.166667 \n", "\n", - " 2nd-largest / max[indegree over C->C mid-thread responses] \\\n", - "e5hm9mp 0.333333 \n", + " prop-multiple[outdegree over C->c mid-thread responses] \\\n", + "e6p7yrp 0.25 \n", "\n", - " is-present[reciprocity motif over mid-thread] \\\n", - "e5hm9mp 1.0 \n", + " prop-multiple[outdegree over C->c responses] \\\n", + "e6p7yrp 0.333333 \n", "\n", - " count[reciprocity motif over mid-thread] \\\n", - "e5hm9mp 3.0 \n", + " prop-nonzero[indegree over C->C mid-thread responses] \\\n", + "e6p7yrp 0.666667 \n", "\n", - " is-present[external reciprocity motif over mid-thread] \\\n", - "e5hm9mp 1.0 \n", + " prop-nonzero[indegree over C->C responses] \\\n", + "e6p7yrp 0.666667 \n", "\n", - " count[external reciprocity motif over mid-thread] \\\n", - "e5hm9mp 2.0 \n", + " prop-nonzero[indegree over C->c mid-thread responses] \\\n", + "e6p7yrp 0.666667 \n", "\n", - " is-present[dyadic interaction motif over mid-thread] \\\n", - "e5hm9mp 1.0 \n", + " prop-nonzero[indegree over C->c responses] \\\n", + "e6p7yrp 0.7 \n", "\n", - " count[dyadic interaction motif over mid-thread] \\\n", - "e5hm9mp 2.0 \n", + " prop-nonzero[indegree over c->c mid-thread responses] \\\n", + "e6p7yrp 0.666667 \n", "\n", - " is-present[incoming triads over mid-thread] \\\n", - "e5hm9mp 1.0 \n", + " prop-nonzero[indegree over c->c responses] \\\n", + "e6p7yrp 0.7 \n", "\n", - " count[incoming triads over mid-thread] \\\n", - "e5hm9mp 3.0 \n", + " prop-nonzero[outdegree over C->C mid-thread responses] \\\n", + "e6p7yrp 0.666667 \n", "\n", - " is-present[outgoing triads over mid-thread] \\\n", - "e5hm9mp 1.0 \n", + " prop-nonzero[outdegree over C->C responses] \\\n", + "e6p7yrp 1.0 \n", "\n", - " count[outgoing triads over mid-thread] \n", - "e5hm9mp 3.0 " + " prop-nonzero[outdegree over C->c mid-thread responses] \\\n", + "e6p7yrp 0.666667 \n", + "\n", + " prop-nonzero[outdegree over C->c responses] \n", + "e6p7yrp 1.0 " ] }, - "execution_count": 20, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "pd.set_option(\"display.max_columns\", 140)\n", - "convo1.get_vector(\"hyperconvo\", as_dataframe=True)" + "pd.set_option('display.max_columns', 140)\n", + "convo1.get_vector('hyperconvo', as_dataframe=True)" ] }, { @@ -1217,7 +1218,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 27, "metadata": {}, "outputs": [ { @@ -1241,889 +1242,4441 @@ " \n", " \n", " \n", - " max[indegree over c->c responses]\n", - " argmax[indegree over c->c responses]\n", - " norm.max[indegree over c->c responses]\n", - " 2nd-largest[indegree over c->c responses]\n", + " 2nd-argmax[indegree over C->C mid-thread responses]\n", + " 2nd-argmax[indegree over C->C responses]\n", + " 2nd-argmax[indegree over C->c mid-thread responses]\n", + " 2nd-argmax[indegree over C->c responses]\n", + " 2nd-argmax[indegree over c->c mid-thread responses]\n", " 2nd-argmax[indegree over c->c responses]\n", - " norm.2nd-largest[indegree over c->c responses]\n", - " mean[indegree over c->c responses]\n", - " mean-nonzero[indegree over c->c responses]\n", - " prop-nonzero[indegree over c->c responses]\n", - " prop-multiple[indegree over c->c responses]\n", - " entropy[indegree over c->c responses]\n", - " 2nd-largest / max[indegree over c->c responses]\n", - " max[outdegree over C->c responses]\n", - " max[indegree over C->c responses]\n", - " argmax[outdegree over C->c responses]\n", - " argmax[indegree over C->c responses]\n", - " norm.max[outdegree over C->c responses]\n", - " norm.max[indegree over C->c responses]\n", - " 2nd-largest[outdegree over C->c responses]\n", - " 2nd-largest[indegree over C->c responses]\n", + " 2nd-argmax[outdegree over C->C mid-thread responses]\n", + " 2nd-argmax[outdegree over C->C responses]\n", + " 2nd-argmax[outdegree over C->c mid-thread responses]\n", " 2nd-argmax[outdegree over C->c responses]\n", - " 2nd-argmax[indegree over C->c responses]\n", - " norm.2nd-largest[outdegree over C->c responses]\n", - " norm.2nd-largest[indegree over C->c responses]\n", - " mean[outdegree over C->c responses]\n", - " mean[indegree over C->c responses]\n", - " mean-nonzero[outdegree over C->c responses]\n", - " mean-nonzero[indegree over C->c responses]\n", - " prop-nonzero[outdegree over C->c responses]\n", - " prop-nonzero[indegree over C->c responses]\n", - " prop-multiple[outdegree over C->c responses]\n", - " prop-multiple[indegree over C->c responses]\n", - " entropy[outdegree over C->c responses]\n", - " entropy[indegree over C->c responses]\n", - " 2nd-largest / max[outdegree over C->c responses]\n", + " 2nd-largest / max[indegree over C->C mid-thread responses]\n", + " 2nd-largest / max[indegree over C->C responses]\n", + " 2nd-largest / max[indegree over C->c mid-thread responses]\n", " 2nd-largest / max[indegree over C->c responses]\n", - " max[outdegree over C->C responses]\n", - " max[indegree over C->C responses]\n", - " argmax[outdegree over C->C responses]\n", - " argmax[indegree over C->C responses]\n", - " norm.max[outdegree over C->C responses]\n", - " norm.max[indegree over C->C responses]\n", - " 2nd-largest[outdegree over C->C responses]\n", - " 2nd-largest[indegree over C->C responses]\n", - " 2nd-argmax[outdegree over C->C responses]\n", - " 2nd-argmax[indegree over C->C responses]\n", - " norm.2nd-largest[outdegree over C->C responses]\n", - " norm.2nd-largest[indegree over C->C responses]\n", - " mean[outdegree over C->C responses]\n", - " mean[indegree over C->C responses]\n", - " mean-nonzero[outdegree over C->C responses]\n", - " mean-nonzero[indegree over C->C responses]\n", - " prop-nonzero[outdegree over C->C responses]\n", - " prop-nonzero[indegree over C->C responses]\n", - " prop-multiple[outdegree over C->C responses]\n", - " prop-multiple[indegree over C->C responses]\n", - " entropy[outdegree over C->C responses]\n", - " entropy[indegree over C->C responses]\n", + " 2nd-largest / max[indegree over c->c mid-thread responses]\n", + " 2nd-largest / max[indegree over c->c responses]\n", + " 2nd-largest / max[outdegree over C->C mid-thread responses]\n", " 2nd-largest / max[outdegree over C->C responses]\n", - " 2nd-largest / max[indegree over C->C responses]\n", - " is-present[reciprocity motif]\n", - " count[reciprocity motif]\n", - " is-present[external reciprocity motif]\n", + " 2nd-largest / max[outdegree over C->c mid-thread responses]\n", + " 2nd-largest / max[outdegree over C->c responses]\n", + " 2nd-largest[indegree over C->C mid-thread responses]\n", + " 2nd-largest[indegree over C->C responses]\n", + " 2nd-largest[indegree over C->c mid-thread responses]\n", + " 2nd-largest[indegree over C->c responses]\n", + " 2nd-largest[indegree over c->c mid-thread responses]\n", + " 2nd-largest[indegree over c->c responses]\n", + " 2nd-largest[outdegree over C->C mid-thread responses]\n", + " 2nd-largest[outdegree over C->C responses]\n", + " 2nd-largest[outdegree over C->c mid-thread responses]\n", + " 2nd-largest[outdegree over C->c responses]\n", + " argmax[indegree over C->C mid-thread responses]\n", + " argmax[indegree over C->C responses]\n", + " argmax[indegree over C->c mid-thread responses]\n", + " argmax[indegree over C->c responses]\n", + " argmax[indegree over c->c mid-thread responses]\n", + " argmax[indegree over c->c responses]\n", + " argmax[outdegree over C->C mid-thread responses]\n", + " argmax[outdegree over C->C responses]\n", + " argmax[outdegree over C->c mid-thread responses]\n", + " argmax[outdegree over C->c responses]\n", + " count[dyadic interaction motif over mid-thread]\n", + " count[dyadic interaction motif]\n", + " count[external reciprocity motif over mid-thread]\n", " count[external reciprocity motif]\n", + " count[incoming triads over mid-thread]\n", + " count[incoming triads]\n", + " count[outgoing triads over mid-thread]\n", + " count[outgoing triads]\n", + " count[reciprocity motif over mid-thread]\n", + " count[reciprocity motif]\n", + " entropy[indegree over C->C mid-thread responses]\n", + " entropy[indegree over C->C responses]\n", + " entropy[indegree over C->c mid-thread responses]\n", + " entropy[indegree over C->c responses]\n", + " entropy[indegree over c->c mid-thread responses]\n", + " entropy[indegree over c->c responses]\n", + " entropy[outdegree over C->C mid-thread responses]\n", + " entropy[outdegree over C->C responses]\n", + " entropy[outdegree over C->c mid-thread responses]\n", + " entropy[outdegree over C->c responses]\n", + " is-present[dyadic interaction motif over mid-thread]\n", " is-present[dyadic interaction motif]\n", - " count[dyadic interaction motif]\n", + " is-present[external reciprocity motif over mid-thread]\n", + " is-present[external reciprocity motif]\n", + " is-present[incoming triads over mid-thread]\n", " is-present[incoming triads]\n", - " count[incoming triads]\n", + " is-present[outgoing triads over mid-thread]\n", " is-present[outgoing triads]\n", - " count[outgoing triads]\n", + " is-present[reciprocity motif over mid-thread]\n", + " is-present[reciprocity motif]\n", + " max[indegree over C->C mid-thread responses]\n", + " max[indegree over C->C responses]\n", + " max[indegree over C->c mid-thread responses]\n", + " max[indegree over C->c responses]\n", " max[indegree over c->c mid-thread responses]\n", - " argmax[indegree over c->c mid-thread responses]\n", - " norm.max[indegree over c->c mid-thread responses]\n", - " 2nd-largest[indegree over c->c mid-thread responses]\n", - " 2nd-argmax[indegree over c->c mid-thread responses]\n", - " norm.2nd-largest[indegree over c->c mid-thread responses]\n", - " mean[indegree over c->c mid-thread responses]\n", - " mean-nonzero[indegree over c->c mid-thread responses]\n", - " prop-nonzero[indegree over c->c mid-thread responses]\n", - " prop-multiple[indegree over c->c mid-thread responses]\n", - " entropy[indegree over c->c mid-thread responses]\n", - " 2nd-largest / max[indegree over c->c mid-thread responses]\n", + " max[indegree over c->c responses]\n", + " max[outdegree over C->C mid-thread responses]\n", + " max[outdegree over C->C responses]\n", " max[outdegree over C->c mid-thread responses]\n", - " max[indegree over C->c mid-thread responses]\n", - " argmax[outdegree over C->c mid-thread responses]\n", - " argmax[indegree over C->c mid-thread responses]\n", - " norm.max[outdegree over C->c mid-thread responses]\n", - " norm.max[indegree over C->c mid-thread responses]\n", - " 2nd-largest[outdegree over C->c mid-thread responses]\n", - " 2nd-largest[indegree over C->c mid-thread responses]\n", - " 2nd-argmax[outdegree over C->c mid-thread responses]\n", - " 2nd-argmax[indegree over C->c mid-thread responses]\n", - " norm.2nd-largest[outdegree over C->c mid-thread responses]\n", - " norm.2nd-largest[indegree over C->c mid-thread responses]\n", - " mean[outdegree over C->c mid-thread responses]\n", - " mean[indegree over C->c mid-thread responses]\n", - " mean-nonzero[outdegree over C->c mid-thread responses]\n", + " max[outdegree over C->c responses]\n", + " mean-nonzero[indegree over C->C mid-thread responses]\n", + " mean-nonzero[indegree over C->C responses]\n", " mean-nonzero[indegree over C->c mid-thread responses]\n", - " prop-nonzero[outdegree over C->c mid-thread responses]\n", - " prop-nonzero[indegree over C->c mid-thread responses]\n", - " prop-multiple[outdegree over C->c mid-thread responses]\n", - " prop-multiple[indegree over C->c mid-thread responses]\n", - " entropy[outdegree over C->c mid-thread responses]\n", - " entropy[indegree over C->c mid-thread responses]\n", - " 2nd-largest / max[outdegree over C->c mid-thread responses]\n", - " 2nd-largest / max[indegree over C->c mid-thread responses]\n", - " max[outdegree over C->C mid-thread responses]\n", - " max[indegree over C->C mid-thread responses]\n", - " argmax[outdegree over C->C mid-thread responses]\n", - " argmax[indegree over C->C mid-thread responses]\n", - " norm.max[outdegree over C->C mid-thread responses]\n", - " norm.max[indegree over C->C mid-thread responses]\n", - " 2nd-largest[outdegree over C->C mid-thread responses]\n", - " 2nd-largest[indegree over C->C mid-thread responses]\n", - " 2nd-argmax[outdegree over C->C mid-thread responses]\n", - " 2nd-argmax[indegree over C->C mid-thread responses]\n", - " norm.2nd-largest[outdegree over C->C mid-thread responses]\n", - " norm.2nd-largest[indegree over C->C mid-thread responses]\n", - " mean[outdegree over C->C mid-thread responses]\n", - " mean[indegree over C->C mid-thread responses]\n", + " mean-nonzero[indegree over C->c responses]\n", + " mean-nonzero[indegree over c->c mid-thread responses]\n", + " mean-nonzero[indegree over c->c responses]\n", " mean-nonzero[outdegree over C->C mid-thread responses]\n", - " mean-nonzero[indegree over C->C mid-thread responses]\n", - " prop-nonzero[outdegree over C->C mid-thread responses]\n", - " prop-nonzero[indegree over C->C mid-thread responses]\n", - " prop-multiple[outdegree over C->C mid-thread responses]\n", + " mean-nonzero[outdegree over C->C responses]\n", + " mean-nonzero[outdegree over C->c mid-thread responses]\n", + " mean-nonzero[outdegree over C->c responses]\n", + " mean[indegree over C->C mid-thread responses]\n", + " mean[indegree over C->C responses]\n", + " mean[indegree over C->c mid-thread responses]\n", + " mean[indegree over C->c responses]\n", + " mean[indegree over c->c mid-thread responses]\n", + " mean[indegree over c->c responses]\n", + " mean[outdegree over C->C mid-thread responses]\n", + " mean[outdegree over C->C responses]\n", + " mean[outdegree over C->c mid-thread responses]\n", + " mean[outdegree over C->c responses]\n", + " norm.2nd-largest[indegree over C->C mid-thread responses]\n", + " norm.2nd-largest[indegree over C->C responses]\n", + " norm.2nd-largest[indegree over C->c mid-thread responses]\n", + " norm.2nd-largest[indegree over C->c responses]\n", + " norm.2nd-largest[indegree over c->c mid-thread responses]\n", + " norm.2nd-largest[indegree over c->c responses]\n", + " norm.2nd-largest[outdegree over C->C mid-thread responses]\n", + " norm.2nd-largest[outdegree over C->C responses]\n", + " norm.2nd-largest[outdegree over C->c mid-thread responses]\n", + " norm.2nd-largest[outdegree over C->c responses]\n", + " norm.max[indegree over C->C mid-thread responses]\n", + " norm.max[indegree over C->C responses]\n", + " norm.max[indegree over C->c mid-thread responses]\n", + " norm.max[indegree over C->c responses]\n", + " norm.max[indegree over c->c mid-thread responses]\n", + " norm.max[indegree over c->c responses]\n", + " norm.max[outdegree over C->C mid-thread responses]\n", + " norm.max[outdegree over C->C responses]\n", + " norm.max[outdegree over C->c mid-thread responses]\n", + " norm.max[outdegree over C->c responses]\n", " prop-multiple[indegree over C->C mid-thread responses]\n", - " entropy[outdegree over C->C mid-thread responses]\n", - " entropy[indegree over C->C mid-thread responses]\n", - " 2nd-largest / max[outdegree over C->C mid-thread responses]\n", - " 2nd-largest / max[indegree over C->C mid-thread responses]\n", - " is-present[reciprocity motif over mid-thread]\n", - " count[reciprocity motif over mid-thread]\n", - " is-present[external reciprocity motif over mid-thread]\n", - " count[external reciprocity motif over mid-thread]\n", - " is-present[dyadic interaction motif over mid-thread]\n", - " count[dyadic interaction motif over mid-thread]\n", - " is-present[incoming triads over mid-thread]\n", - " count[incoming triads over mid-thread]\n", - " is-present[outgoing triads over mid-thread]\n", - " count[outgoing triads over mid-thread]\n", + " prop-multiple[indegree over C->C responses]\n", + " prop-multiple[indegree over C->c mid-thread responses]\n", + " prop-multiple[indegree over C->c responses]\n", + " prop-multiple[indegree over c->c mid-thread responses]\n", + " prop-multiple[indegree over c->c responses]\n", + " prop-multiple[outdegree over C->C mid-thread responses]\n", + " prop-multiple[outdegree over C->C responses]\n", + " prop-multiple[outdegree over C->c mid-thread responses]\n", + " prop-multiple[outdegree over C->c responses]\n", + " prop-nonzero[indegree over C->C mid-thread responses]\n", + " prop-nonzero[indegree over C->C responses]\n", + " prop-nonzero[indegree over C->c mid-thread responses]\n", + " prop-nonzero[indegree over C->c responses]\n", + " prop-nonzero[indegree over c->c mid-thread responses]\n", + " prop-nonzero[indegree over c->c responses]\n", + " prop-nonzero[outdegree over C->C mid-thread responses]\n", + " prop-nonzero[outdegree over C->C responses]\n", + " prop-nonzero[outdegree over C->c mid-thread responses]\n", + " prop-nonzero[outdegree over C->c responses]\n", " \n", " \n", " \n", " \n", - " e5hm9mp\n", - " 3.0\n", + " e6p7yrp\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", " 1.0\n", - " 0.333333\n", " 1.0\n", - " 0.0\n", - " 0.111111\n", - " 0.9\n", - " 1.285714\n", - " 0.7\n", - " 0.142857\n", - " 1.831020\n", - " 0.333333\n", - " 2.0\n", - " 3.0\n", - " 0.0\n", " 1.0\n", - " 0.222222\n", - " 0.333333\n", " 2.0\n", " 1.0\n", " 2.0\n", - " 0.0\n", - " 0.222222\n", - " 0.111111\n", - " 1.800000\n", - " 0.9\n", - " 1.800000\n", - " 1.285714\n", - " 1.000000\n", - " 0.7\n", - " 0.800000\n", - " 0.142857\n", - " 1.581094\n", - " 1.831020\n", - " 1.000000\n", - " 0.333333\n", - " 2.0\n", " 3.0\n", - " 0.0\n", - " 1.0\n", - " 0.250000\n", - " 0.375000\n", - " 2.0\n", - " 2.0\n", - " 2.0\n", - " 0.0\n", - " 0.250000\n", - " 0.250000\n", - " 1.600000\n", - " 1.600000\n", - " 1.600000\n", - " 1.600000\n", - " 1.000000\n", + " 0.333333\n", + " 0.200000\n", " 1.000000\n", - " 0.600000\n", - " 0.400000\n", - " 1.559581\n", - " 1.494175\n", + " 0.333333\n", " 1.000000\n", + " 0.333333\n", + " 0.333333\n", + " 0.333333\n", + " 0.333333\n", " 0.666667\n", " 1.0\n", - " 4.0\n", " 1.0\n", - " 4.0\n", " 1.0\n", - " 3.0\n", " 1.0\n", - " 4.0\n", " 1.0\n", - " 3.0\n", - " 3.0\n", - " 0.0\n", - " 0.375000\n", " 1.0\n", " 1.0\n", - " 0.125000\n", - " 0.888889\n", - " 1.333333\n", - " 0.666667\n", - " 0.166667\n", - " 1.667462\n", - " 0.333333\n", - " 2.0\n", - " 3.0\n", " 1.0\n", - " 0.0\n", - " 0.250000\n", - " 0.375000\n", - " 2.0\n", " 1.0\n", " 2.0\n", " 1.0\n", - " 0.250000\n", - " 0.125000\n", - " 1.600000\n", - " 0.888889\n", - " 2.000000\n", - " 1.333333\n", - " 0.800000\n", - " 0.666667\n", - " 1.000000\n", - " 0.166667\n", - " 1.386294\n", - " 1.667462\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", " 1.0\n", - " 0.333333\n", - " 2.0\n", - " 3.0\n", + " 0.0\n", " 1.0\n", " 0.0\n", - " 0.285714\n", - " 0.428571\n", " 2.0\n", - " 1.0\n", + " 3.0\n", + " 2.0\n", + " 2.0\n", + " 3.0\n", + " 10.0\n", + " 3.0\n", + " 3.0\n", " 2.0\n", + " 4.0\n", + " 1.242453\n", + " 1.073543\n", + " 1.791759\n", + " 1.831020\n", + " 1.791759\n", + " 1.831020\n", + " 1.242453\n", + " 1.667462\n", + " 1.242453\n", + " 1.676988\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", " 1.0\n", - " 0.285714\n", - " 0.142857\n", - " 1.400000\n", - " 1.400000\n", - " 1.750000\n", - " 1.400000\n", - " 0.800000\n", - " 1.000000\n", - " 0.750000\n", - " 0.200000\n", - " 1.351784\n", - " 1.475076\n", " 1.0\n", - " 0.333333\n", " 1.0\n", - " 3.0\n", " 1.0\n", - " 2.0\n", " 1.0\n", - " 2.0\n", " 1.0\n", " 3.0\n", + " 5.0\n", " 1.0\n", " 3.0\n", - " \n", - " \n", - " e5ytz1d\n", + " 1.0\n", " 3.0\n", - " 0.0\n", - " 0.333333\n", " 3.0\n", - " 2.0\n", - " 0.333333\n", - " 0.9\n", - " 2.250000\n", - " 0.4\n", - " 0.750000\n", - " 1.310784\n", - " 1.000000\n", - " 1.0\n", " 3.0\n", - " 0.0\n", - " 0.0\n", - " 0.111111\n", - " 0.333333\n", - " 1.0\n", " 3.0\n", - " 1.0\n", - " 2.0\n", - " 0.111111\n", - " 0.333333\n", + " 3.0\n", + " 1.500000\n", + " 2.000000\n", + " 1.000000\n", + " 1.285714\n", " 1.000000\n", + " 1.285714\n", + " 1.500000\n", + " 1.333333\n", + " 1.500000\n", + " 1.500000\n", + " 1.000000\n", + " 1.333333\n", + " 0.666667\n", + " 0.9\n", + " 0.666667\n", " 0.9\n", " 1.000000\n", - " 2.250000\n", + " 1.333333\n", " 1.000000\n", - " 0.4\n", + " 1.500000\n", + " 0.166667\n", + " 0.125000\n", + " 0.166667\n", + " 0.111111\n", + " 0.166667\n", + " 0.111111\n", + " 0.166667\n", + " 0.125000\n", + " 0.166667\n", + " 0.222222\n", + " 0.500000\n", + " 0.625000\n", + " 0.166667\n", + " 0.333333\n", + " 0.166667\n", + " 0.333333\n", + " 0.500000\n", + " 0.375000\n", + " 0.500000\n", + " 0.333333\n", + " 0.250000\n", + " 0.250000\n", " 0.000000\n", - " 0.750000\n", - " 2.197225\n", - " 1.310784\n", + " 0.142857\n", + " 0.000000\n", + " 0.142857\n", + " 0.250000\n", + " 0.166667\n", + " 0.250000\n", + " 0.333333\n", + " 0.666667\n", + " 0.666667\n", + " 0.666667\n", + " 0.7\n", + " 0.666667\n", + " 0.7\n", + " 0.666667\n", " 1.000000\n", + " 0.666667\n", " 1.000000\n", + " \n", + " \n", + " e5ywqyk\n", + " 1.0\n", + " 1.0\n", " 1.0\n", - " 3.0\n", " 0.0\n", + " 1.0\n", " 0.0\n", - " 0.111111\n", - " 0.333333\n", + " 2.0\n", " 1.0\n", " 3.0\n", - " 1.0\n", - " 2.0\n", - " 0.111111\n", - " 0.333333\n", - " 1.000000\n", - " 1.000000\n", - " 1.000000\n", - " 2.250000\n", + " 3.0\n", + " 0.500000\n", " 1.000000\n", - " 0.444444\n", - " 0.000000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.750000\n", " 0.750000\n", - " 2.197225\n", - " 1.310784\n", - " 1.000000\n", - " 1.000000\n", " 1.0\n", + " 2.0\n", " 1.0\n", " 1.0\n", - " 5.0\n", " 1.0\n", " 1.0\n", " 1.0\n", - " 7.0\n", + " 1.0\n", + " 3.0\n", + " 3.0\n", + " 0.0\n", " 0.0\n", " 0.0\n", - " 3.0\n", " 1.0\n", - " 0.500000\n", - " 2.0\n", " 0.0\n", - " 0.333333\n", - " 0.666667\n", - " 2.000000\n", - " 0.333333\n", - " 0.666667\n", - " 1.011404\n", - " 0.666667\n", " 1.0\n", - " 3.0\n", - " 3.0\n", " 1.0\n", - " 0.166667\n", - " 0.500000\n", + " 0.0\n", " 1.0\n", - " 2.0\n", - " 4.0\n", " 0.0\n", - " 0.166667\n", - " 0.333333\n", - " 0.666667\n", - " 0.666667\n", - " 1.000000\n", - " 2.000000\n", - " 0.666667\n", - " 0.333333\n", - " 0.000000\n", - " 0.666667\n", - " 1.791759\n", - " 1.011404\n", - " 1.0\n", - " 0.666667\n", " 1.0\n", - " 3.0\n", - " 3.0\n", + " 2.0\n", " 1.0\n", - " 0.166667\n", - " 0.500000\n", + " 2.0\n", " 1.0\n", " 2.0\n", - " 4.0\n", - " 0.0\n", - " 0.166667\n", - " 0.333333\n", - " 0.666667\n", - " 0.666667\n", - " 1.000000\n", - " 2.000000\n", - " 0.666667\n", - " 0.333333\n", - " 0.000000\n", - " 0.666667\n", - " 1.791759\n", - " 1.011404\n", " 1.0\n", - " 0.666667\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", " 1.0\n", - " 4.0\n", - " 0.0\n", - " 0.0\n", - " \n", - " \n", - " e6ls80j\n", - " 4.0\n", - " 0.0\n", - " 0.444444\n", - " 3.0\n", - " 2.0\n", - " 0.333333\n", - " 0.9\n", - " 2.250000\n", - " 0.4\n", - " 0.500000\n", + " 5.0\n", + " 6.0\n", + " 1.039721\n", + " 1.054920\n", + " 1.906155\n", + " 2.043192\n", + " 1.906155\n", + " 2.043192\n", + " 1.039721\n", + " 1.332179\n", + " 0.974315\n", " 1.214890\n", - " 0.750000\n", - " 3.0\n", - " 4.0\n", - " 3.0\n", - " 0.0\n", - " 0.333333\n", - " 0.444444\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", " 2.0\n", - " 3.0\n", " 2.0\n", " 2.0\n", - " 0.222222\n", - " 0.333333\n", - " 1.285714\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 4.0\n", + " 4.0\n", + " 1.333333\n", + " 1.666667\n", + " 1.142857\n", + " 1.125000\n", + " 1.142857\n", + " 1.125000\n", + " 1.333333\n", + " 1.250000\n", + " 2.666667\n", + " 2.250000\n", + " 1.000000\n", + " 1.250000\n", + " 0.888889\n", " 0.9\n", - " 1.500000\n", + " 0.888889\n", + " 0.9\n", + " 1.000000\n", + " 1.250000\n", + " 2.000000\n", " 2.250000\n", - " 0.857143\n", - " 0.4\n", + " 0.250000\n", + " 0.400000\n", + " 0.125000\n", + " 0.111111\n", + " 0.125000\n", + " 0.111111\n", + " 0.250000\n", + " 0.200000\n", + " 0.375000\n", " 0.333333\n", " 0.500000\n", - " 1.676988\n", - " 1.214890\n", + " 0.400000\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.500000\n", + " 0.400000\n", + " 0.500000\n", + " 0.444444\n", + " 0.333333\n", + " 0.666667\n", + " 0.142857\n", + " 0.125000\n", + " 0.142857\n", + " 0.125000\n", + " 0.333333\n", + " 0.250000\n", " 0.666667\n", + " 0.500000\n", + " 0.750000\n", + " 0.750000\n", + " 0.777778\n", + " 0.8\n", + " 0.777778\n", + " 0.8\n", " 0.750000\n", + " 1.000000\n", + " 0.750000\n", + " 1.000000\n", + " \n", + " \n", + " e5qv9rj\n", + " 0.0\n", " 3.0\n", - " 4.0\n", + " 0.0\n", " 3.0\n", " 0.0\n", - " 0.333333\n", - " 0.444444\n", - " 2.0\n", + " 3.0\n", " 3.0\n", " 2.0\n", + " 3.0\n", " 2.0\n", - " 0.222222\n", " 0.333333\n", - " 1.285714\n", - " 1.285714\n", - " 1.500000\n", - " 2.250000\n", - " 0.857143\n", - " 0.571429\n", + " 1.000000\n", " 0.333333\n", - " 0.500000\n", - " 1.676988\n", - " 1.214890\n", - " 0.666667\n", - " 0.750000\n", - " 1.0\n", + " 1.000000\n", + " 0.333333\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", " 1.0\n", + " 3.0\n", " 1.0\n", - " 4.0\n", + " 3.0\n", " 1.0\n", + " 3.0\n", " 1.0\n", " 1.0\n", - " 9.0\n", " 1.0\n", - " 4.0\n", - " 3.0\n", " 1.0\n", - " 0.600000\n", + " 2.0\n", + " 0.0\n", + " 2.0\n", + " 0.0\n", + " 2.0\n", + " 0.0\n", + " 2.0\n", " 1.0\n", - " 4.0\n", - " 0.200000\n", - " 0.555556\n", - " 1.666667\n", - " 0.333333\n", - " 0.333333\n", - " 0.950271\n", - " 0.333333\n", " 2.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 5.0\n", + " 6.0\n", " 3.0\n", - " 2.0\n", + " 6.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.242453\n", + " 1.464816\n", + " 1.242453\n", + " 1.464816\n", + " 1.242453\n", + " 1.464816\n", + " 1.791759\n", + " 2.197225\n", + " 1.791759\n", + " 2.197225\n", + " 0.0\n", + " 0.0\n", " 1.0\n", - " 0.400000\n", - " 0.600000\n", " 1.0\n", " 1.0\n", " 1.0\n", - " 4.0\n", - " 0.200000\n", - " 0.200000\n", - " 0.833333\n", - " 0.555556\n", - " 1.250000\n", - " 1.666667\n", - " 0.666667\n", - " 0.333333\n", - " 0.250000\n", - " 0.333333\n", - " 1.332179\n", - " 0.950271\n", - " 0.5\n", - " 0.333333\n", - " 2.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", " 3.0\n", - " 2.0\n", " 1.0\n", - " 0.400000\n", - " 0.600000\n", " 1.0\n", " 1.0\n", " 1.0\n", - " 4.0\n", - " 0.200000\n", - " 0.200000\n", - " 0.833333\n", - " 0.833333\n", - " 1.250000\n", - " 1.666667\n", - " 0.666667\n", + " 1.500000\n", + " 1.800000\n", + " 1.500000\n", + " 1.800000\n", + " 1.500000\n", + " 1.800000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.666667\n", + " 0.900000\n", + " 0.666667\n", + " 0.9\n", + " 0.666667\n", + " 0.9\n", + " 0.666667\n", + " 0.900000\n", + " 0.666667\n", + " 0.900000\n", + " 0.166667\n", + " 0.333333\n", + " 0.166667\n", + " 0.333333\n", + " 0.166667\n", + " 0.333333\n", + " 0.166667\n", + " 0.111111\n", + " 0.166667\n", + " 0.111111\n", " 0.500000\n", - " 0.250000\n", " 0.333333\n", - " 1.332179\n", - " 0.950271\n", - " 0.5\n", + " 0.500000\n", " 0.333333\n", - " 1.0\n", - " 1.0\n", - " 1.0\n", - " 1.0\n", - " 1.0\n", - " 1.0\n", - " 1.0\n", - " 3.0\n", - " 1.0\n", - " 1.0\n", + " 0.500000\n", + " 0.333333\n", + " 0.166667\n", + " 0.111111\n", + " 0.166667\n", + " 0.111111\n", + " 0.250000\n", + " 0.400000\n", + " 0.250000\n", + " 0.400000\n", + " 0.250000\n", + " 0.400000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.444444\n", + " 0.500000\n", + " 0.444444\n", + " 0.5\n", + " 0.444444\n", + " 0.5\n", + " 0.666667\n", + " 0.900000\n", + " 0.666667\n", + " 0.900000\n", " \n", " \n", - " e5mhgl5\n", - " 2.0\n", + " e6jhojf\n", + " 0.0\n", " 1.0\n", - " 0.222222\n", - " 2.0\n", - " 4.0\n", - " 0.222222\n", - " 0.9\n", - " 1.285714\n", - " 0.7\n", - " 0.285714\n", - " 1.889159\n", - " 1.000000\n", - " 2.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", " 2.0\n", - " 4.0\n", " 1.0\n", - " 0.222222\n", - " 0.222222\n", - " 2.0\n", - " 2.0\n", - " 6.0\n", - " 4.0\n", - " 0.222222\n", - " 0.222222\n", - " 1.125000\n", - " 0.9\n", - " 1.285714\n", - " 1.285714\n", - " 0.875000\n", - " 0.7\n", - " 0.285714\n", - " 0.285714\n", - " 1.889159\n", - " 1.889159\n", - " 1.000000\n", - " 1.000000\n", " 2.0\n", " 2.0\n", - " 4.0\n", - " 1.0\n", + " 0.333333\n", " 0.250000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", " 0.250000\n", - " 1.0\n", - " 2.0\n", - " 1.0\n", - " 4.0\n", - " 0.125000\n", " 0.250000\n", - " 1.000000\n", - " 1.000000\n", - " 1.142857\n", - " 1.333333\n", - " 0.875000\n", - " 0.750000\n", - " 0.142857\n", - " 0.333333\n", - " 1.906155\n", - " 1.732868\n", " 0.500000\n", - " 1.000000\n", + " 0.500000\n", + " 1.0\n", " 1.0\n", - " 2.0\n", " 1.0\n", - " 6.0\n", " 1.0\n", " 1.0\n", " 1.0\n", - " 2.0\n", " 1.0\n", " 1.0\n", - " 2.0\n", - " 0.0\n", - " 0.250000\n", - " 2.0\n", - " 3.0\n", - " 0.250000\n", - " 0.888889\n", - " 1.333333\n", - " 0.666667\n", - " 0.333333\n", - " 1.732868\n", - " 1.000000\n", " 2.0\n", " 2.0\n", - " 3.0\n", + " 1.0\n", " 0.0\n", - " 0.250000\n", - " 0.250000\n", - " 2.0\n", - " 2.0\n", - " 5.0\n", " 3.0\n", - " 0.250000\n", - " 0.250000\n", - " 1.142857\n", - " 0.888889\n", - " 1.333333\n", - " 1.333333\n", - " 0.857143\n", - " 0.666667\n", - " 0.333333\n", - " 0.333333\n", - " 1.732868\n", - " 1.732868\n", - " 1.0\n", - " 1.000000\n", - " 2.0\n", - " 2.0\n", + " 4.0\n", " 3.0\n", - " 0.0\n", - " 0.285714\n", - " 0.285714\n", + " 4.0\n", " 1.0\n", - " 2.0\n", + " 0.0\n", " 1.0\n", + " 0.0\n", " 3.0\n", - " 0.142857\n", - " 0.285714\n", - " 1.000000\n", - " 1.000000\n", - " 1.166667\n", - " 1.400000\n", - " 0.857143\n", - " 0.714286\n", - " 0.166667\n", - " 0.400000\n", - " 1.747868\n", - " 1.549826\n", - " 0.5\n", - " 1.000000\n", - " 1.0\n", - " 2.0\n", - " 1.0\n", " 4.0\n", + " 4.0\n", + " 4.0\n", + " 3.0\n", + " 6.0\n", + " 6.0\n", + " 6.0\n", + " 3.0\n", + " 4.0\n", + " 1.475076\n", + " 1.386294\n", + " 1.906155\n", + " 2.043192\n", + " 1.906155\n", + " 2.043192\n", + " 1.153742\n", + " 1.386294\n", + " 1.213008\n", + " 1.427061\n", " 1.0\n", " 1.0\n", " 1.0\n", - " 2.0\n", - " 1.0\n", - " 1.0\n", - " \n", - " \n", - " e6w6fah\n", - " 9.0\n", - " 0.0\n", - " 1.000000\n", - " 0.0\n", - " 1.0\n", - " 0.000000\n", - " 0.9\n", - " 9.000000\n", - " 0.1\n", - " 1.000000\n", - " 0.000000\n", - " 0.000000\n", " 1.0\n", - " 8.0\n", " 1.0\n", - " 0.0\n", - " 0.125000\n", - " 1.000000\n", " 1.0\n", - " 0.0\n", - " 2.0\n", " 1.0\n", - " 0.125000\n", - " 0.000000\n", - " 0.888889\n", - " 0.8\n", - " 1.000000\n", - " 8.000000\n", - " 0.888889\n", - " 0.1\n", - " 0.000000\n", - " 1.000000\n", - " 2.079442\n", - " 0.000000\n", - " 1.000000\n", - " 0.000000\n", " 1.0\n", - " 8.0\n", " 1.0\n", - " 0.0\n", - " 0.125000\n", - " 1.000000\n", " 1.0\n", - " 0.0\n", + " 3.0\n", + " 4.0\n", " 2.0\n", - " 1.0\n", - " 0.125000\n", - " 0.000000\n", - " 0.888889\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 4.0\n", + " 4.0\n", + " 4.0\n", + " 4.0\n", + " 1.400000\n", + " 1.600000\n", + " 1.142857\n", + " 1.125000\n", + " 1.142857\n", + " 1.125000\n", + " 1.750000\n", + " 1.600000\n", + " 2.000000\n", + " 1.800000\n", + " 1.400000\n", + " 1.600000\n", " 0.888889\n", - " 1.000000\n", - " 8.000000\n", + " 0.9\n", " 0.888889\n", + " 0.9\n", + " 1.400000\n", + " 1.600000\n", + " 1.600000\n", + " 1.800000\n", + " 0.142857\n", + " 0.125000\n", + " 0.125000\n", " 0.111111\n", - " 0.000000\n", + " 0.125000\n", + " 0.111111\n", + " 0.142857\n", + " 0.125000\n", + " 0.250000\n", + " 0.222222\n", + " 0.428571\n", + " 0.500000\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.571429\n", + " 0.500000\n", + " 0.500000\n", + " 0.444444\n", + " 0.200000\n", + " 0.200000\n", + " 0.142857\n", + " 0.125000\n", + " 0.142857\n", + " 0.125000\n", + " 0.250000\n", + " 0.200000\n", + " 0.500000\n", + " 0.400000\n", " 1.000000\n", - " 2.079442\n", - " 0.000000\n", " 1.000000\n", - " 0.000000\n", - " 0.0\n", + " 0.777778\n", + " 0.8\n", + " 0.777778\n", + " 0.8\n", + " 0.800000\n", + " 1.000000\n", + " 0.800000\n", + " 1.000000\n", + " \n", + " \n", + " e6989ii\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", " 0.0\n", " 0.0\n", + " 1.0\n", + " 1.0\n", " 0.0\n", + " 1.0\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.500000\n", + " 0.500000\n", + " 1.000000\n", + " 1.000000\n", + " 0.750000\n", + " 1.000000\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 3.0\n", + " 4.0\n", " 0.0\n", " 0.0\n", - " 1.0\n", - " 28.0\n", " 0.0\n", " 0.0\n", + " 5.0\n", + " 6.0\n", " 0.0\n", " 0.0\n", - " 0.000000\n", + " 1.0\n", " 0.0\n", " 1.0\n", - " NaN\n", - " 0.000000\n", - " 0.000000\n", - " 0.000000\n", - " 0.000000\n", - " NaN\n", - " NaN\n", + " 1.0\n", " 0.0\n", " 0.0\n", " 0.0\n", " 0.0\n", - " 0.000000\n", - " 0.000000\n", " 0.0\n", " 0.0\n", + " 7.0\n", + " 8.0\n", + " 0.693147\n", + " 0.693147\n", + " 1.945910\n", + " 2.079442\n", + " 1.906155\n", + " 2.043192\n", + " 0.693147\n", + " 0.693147\n", + " 0.682908\n", + " 0.693147\n", " 1.0\n", " 1.0\n", - " NaN\n", - " NaN\n", - " 0.000000\n", - " 0.000000\n", - " 0.000000\n", - " 0.000000\n", - " 0.000000\n", - " 0.000000\n", - " 0.000000\n", - " 0.000000\n", - " NaN\n", - " NaN\n", - " NaN\n", - " NaN\n", " 0.0\n", " 0.0\n", " 0.0\n", " 0.0\n", - " 0.000000\n", - " 0.000000\n", " 0.0\n", " 0.0\n", " 1.0\n", " 1.0\n", - " NaN\n", - " NaN\n", - " 0.000000\n", - " 0.000000\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 4.0\n", + " 4.0\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.142857\n", + " 1.125000\n", + " 1.000000\n", + " 1.000000\n", + " 3.500000\n", + " 4.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.777778\n", + " 0.8\n", + " 0.888889\n", + " 0.9\n", + " 1.000000\n", + " 1.000000\n", + " 3.500000\n", + " 4.000000\n", + " 0.500000\n", + " 0.500000\n", + " 0.142857\n", + " 0.125000\n", + " 0.125000\n", + " 0.111111\n", + " 0.500000\n", + " 0.500000\n", + " 0.428571\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.142857\n", + " 0.125000\n", + " 0.250000\n", + " 0.222222\n", + " 0.500000\n", + " 0.500000\n", + " 0.571429\n", + " 0.500000\n", " 0.000000\n", " 0.000000\n", " 0.000000\n", " 0.000000\n", + " 0.142857\n", + " 0.125000\n", " 0.000000\n", " 0.000000\n", - " NaN\n", - " NaN\n", - " NaN\n", - " NaN\n", - " 0.0\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.777778\n", + " 0.8\n", + " 0.777778\n", + " 0.8\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " \n", + " \n", + " e69lgse\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 0.333333\n", + " 1.000000\n", + " 0.333333\n", + " 1.000000\n", + " 0.333333\n", + " 1.000000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 1.000000\n", + " 1.0\n", + " 3.0\n", + " 1.0\n", + " 3.0\n", + " 1.0\n", + " 3.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", " 0.0\n", + " 1.0\n", " 0.0\n", + " 1.0\n", " 0.0\n", + " 2.0\n", + " 0.0\n", + " 2.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 4.0\n", + " 3.0\n", + " 6.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 1.242453\n", + " 1.255482\n", + " 1.242453\n", + " 1.464816\n", + " 1.242453\n", + " 1.464816\n", + " 1.560710\n", + " 1.906155\n", + " 1.560710\n", + " 1.889159\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 1.500000\n", + " 2.000000\n", + " 1.500000\n", + " 1.800000\n", + " 1.500000\n", + " 1.800000\n", + " 1.200000\n", + " 1.142857\n", + " 1.200000\n", + " 1.285714\n", + " 0.857143\n", + " 1.142857\n", + " 0.666667\n", + " 0.9\n", + " 0.666667\n", + " 0.9\n", + " 0.857143\n", + " 1.142857\n", + " 0.857143\n", + " 1.285714\n", + " 0.166667\n", + " 0.375000\n", + " 0.166667\n", + " 0.333333\n", + " 0.166667\n", + " 0.333333\n", + " 0.166667\n", + " 0.125000\n", + " 0.166667\n", + " 0.222222\n", + " 0.500000\n", + " 0.375000\n", + " 0.500000\n", + " 0.333333\n", + " 0.500000\n", + " 0.333333\n", + " 0.333333\n", + " 0.250000\n", + " 0.333333\n", + " 0.222222\n", + " 0.250000\n", + " 0.500000\n", + " 0.250000\n", + " 0.400000\n", + " 0.250000\n", + " 0.400000\n", + " 0.200000\n", + " 0.142857\n", + " 0.200000\n", + " 0.285714\n", + " 0.571429\n", + " 0.571429\n", + " 0.444444\n", + " 0.5\n", + " 0.444444\n", + " 0.5\n", + " 0.714286\n", + " 1.000000\n", + " 0.714286\n", + " 1.000000\n", + " \n", + " \n", + " e5kwkg2\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 0.500000\n", + " 0.666667\n", + " 0.500000\n", + " 0.666667\n", + " 0.500000\n", + " 0.666667\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", " 0.0\n", " 0.0\n", " 0.0\n", " 0.0\n", " 0.0\n", " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 3.0\n", + " 6.0\n", + " 1.0\n", + " 4.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.560710\n", + " 1.676988\n", + " 1.560710\n", + " 1.676988\n", + " 1.560710\n", + " 1.676988\n", + " 1.791759\n", + " 2.197225\n", + " 1.791759\n", + " 2.197225\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 2.0\n", + " 3.0\n", + " 2.0\n", + " 3.0\n", + " 2.0\n", + " 3.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.200000\n", + " 1.500000\n", + " 1.200000\n", + " 1.500000\n", + " 1.200000\n", + " 1.500000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.666667\n", + " 0.900000\n", + " 0.666667\n", + " 0.9\n", + " 0.666667\n", + " 0.9\n", + " 0.666667\n", + " 0.900000\n", + " 0.666667\n", + " 0.900000\n", + " 0.166667\n", + " 0.222222\n", + " 0.166667\n", + " 0.222222\n", + " 0.166667\n", + " 0.222222\n", + " 0.166667\n", + " 0.111111\n", + " 0.166667\n", + " 0.111111\n", + " 0.333333\n", + " 0.333333\n", + " 0.333333\n", + " 0.333333\n", + " 0.333333\n", + " 0.333333\n", + " 0.166667\n", + " 0.111111\n", + " 0.166667\n", + " 0.111111\n", + " 0.200000\n", + " 0.333333\n", + " 0.200000\n", + " 0.333333\n", + " 0.200000\n", + " 0.333333\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.555556\n", + " 0.600000\n", + " 0.555556\n", + " 0.6\n", + " 0.555556\n", + " 0.6\n", + " 0.666667\n", + " 0.900000\n", + " 0.666667\n", + " 0.900000\n", " \n", " \n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", + " e6mehe7\n", + " 0.0\n", + " 2.0\n", + " 0.0\n", + " 2.0\n", + " 0.0\n", + " 2.0\n", + " 3.0\n", + " 1.0\n", + " 3.0\n", + " 3.0\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.666667\n", + " 0.500000\n", + " 0.666667\n", + " 0.333333\n", + " 0.333333\n", + " 0.666667\n", + " 0.666667\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 2.0\n", + " 0.0\n", + " 2.0\n", + " 0.0\n", + " 1.0\n", + " 3.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 7.0\n", + " 3.0\n", + " 3.0\n", + " 2.0\n", + " 4.0\n", + " 1.332179\n", + " 1.213008\n", + " 1.560710\n", + " 1.676988\n", + " 1.560710\n", + " 1.676988\n", + " 0.950271\n", + " 1.667462\n", + " 1.011404\n", + " 1.676988\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 4.0\n", + " 2.0\n", + " 3.0\n", + " 2.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 1.250000\n", + " 2.000000\n", + " 1.200000\n", + " 1.500000\n", + " 1.200000\n", + " 1.500000\n", + " 1.666667\n", + " 1.333333\n", + " 2.000000\n", + " 1.500000\n", + " 0.833333\n", + " 1.333333\n", + " 0.666667\n", + " 0.9\n", + " 0.666667\n", + " 0.9\n", + " 0.833333\n", + " 1.333333\n", + " 1.000000\n", + " 1.500000\n", + " 0.200000\n", + " 0.250000\n", + " 0.166667\n", + " 0.222222\n", + " 0.166667\n", + " 0.222222\n", + " 0.200000\n", + " 0.125000\n", + " 0.333333\n", + " 0.222222\n", + " 0.400000\n", + " 0.500000\n", + " 0.333333\n", + " 0.333333\n", + " 0.333333\n", + " 0.333333\n", + " 0.600000\n", + " 0.375000\n", + " 0.500000\n", + " 0.333333\n", + " 0.250000\n", + " 0.500000\n", + " 0.200000\n", + " 0.333333\n", + " 0.200000\n", + " 0.333333\n", + " 0.333333\n", + " 0.166667\n", + " 0.666667\n", + " 0.333333\n", + " 0.666667\n", + " 0.666667\n", + " 0.555556\n", + " 0.6\n", + " 0.555556\n", + " 0.6\n", + " 0.500000\n", + " 1.000000\n", + " 0.500000\n", + " 1.000000\n", + " \n", + " \n", + " e6m0hsd\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.750000\n", + " 0.600000\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 3.0\n", + " 3.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 6.0\n", + " 7.0\n", + " 1.039721\n", + " 1.039721\n", + " 1.906155\n", + " 2.043192\n", + " 1.906155\n", + " 2.043192\n", + " 1.039721\n", + " 1.039721\n", + " 0.974315\n", + " 0.936888\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 4.0\n", + " 5.0\n", + " 1.333333\n", + " 1.333333\n", + " 1.142857\n", + " 1.125000\n", + " 1.142857\n", + " 1.125000\n", + " 1.333333\n", + " 1.333333\n", + " 2.666667\n", + " 3.000000\n", + " 1.333333\n", + " 1.333333\n", + " 0.888889\n", + " 0.9\n", + " 0.888889\n", + " 0.9\n", + " 1.333333\n", + " 1.333333\n", + " 2.666667\n", + " 3.000000\n", + " 0.250000\n", + " 0.250000\n", + " 0.125000\n", + " 0.111111\n", + " 0.125000\n", + " 0.111111\n", + " 0.250000\n", + " 0.250000\n", + " 0.375000\n", + " 0.333333\n", + " 0.500000\n", + " 0.500000\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.555556\n", + " 0.333333\n", + " 0.333333\n", + " 0.142857\n", + " 0.125000\n", + " 0.142857\n", + " 0.125000\n", + " 0.333333\n", + " 0.333333\n", + " 0.666667\n", + " 0.666667\n", + " 1.000000\n", + " 1.000000\n", + " 0.777778\n", + " 0.8\n", + " 0.777778\n", + " 0.8\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " \n", + " \n", + " e64r385\n", + " 3.0\n", + " 2.0\n", + " 3.0\n", + " 2.0\n", + " 3.0\n", + " 2.0\n", + " 1.0\n", + " 3.0\n", + " 1.0\n", + " 3.0\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.500000\n", + " 1.000000\n", + " 0.500000\n", + " 1.000000\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 5.0\n", + " 2.0\n", + " 3.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 1.549826\n", + " 1.735126\n", + " 1.549826\n", + " 1.735126\n", + " 1.549826\n", + " 1.735126\n", + " 1.747868\n", + " 1.889159\n", + " 1.747868\n", + " 1.889159\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 1.400000\n", + " 1.500000\n", + " 1.400000\n", + " 1.500000\n", + " 1.400000\n", + " 1.500000\n", + " 1.166667\n", + " 1.285714\n", + " 1.166667\n", + " 1.285714\n", + " 1.000000\n", + " 1.125000\n", + " 0.777778\n", + " 0.9\n", + " 0.777778\n", + " 0.9\n", + " 1.000000\n", + " 1.125000\n", + " 1.000000\n", + " 1.125000\n", + " 0.285714\n", + " 0.222222\n", + " 0.285714\n", + " 0.222222\n", + " 0.285714\n", + " 0.222222\n", + " 0.142857\n", + " 0.222222\n", + " 0.142857\n", + " 0.222222\n", + " 0.285714\n", + " 0.222222\n", + " 0.285714\n", + " 0.222222\n", + " 0.285714\n", + " 0.222222\n", + " 0.285714\n", + " 0.222222\n", + " 0.285714\n", + " 0.222222\n", + " 0.400000\n", + " 0.500000\n", + " 0.400000\n", + " 0.500000\n", + " 0.400000\n", + " 0.500000\n", + " 0.166667\n", + " 0.285714\n", + " 0.166667\n", + " 0.285714\n", + " 0.714286\n", + " 0.750000\n", + " 0.555556\n", + " 0.6\n", + " 0.555556\n", + " 0.6\n", + " 0.857143\n", + " 0.875000\n", + " 0.857143\n", + " 0.875000\n", + " \n", + " \n", + " e5surbt\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 3.0\n", + " 2.0\n", + " 3.0\n", + " 2.0\n", + " 1.000000\n", + " 0.200000\n", + " 1.000000\n", + " 0.200000\n", + " 1.000000\n", + " 0.200000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 3.0\n", + " 4.0\n", + " 0.0\n", + " 10.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.386294\n", + " 1.303092\n", + " 1.386294\n", + " 1.303092\n", + " 1.386294\n", + " 1.303092\n", + " 1.386294\n", + " 2.197225\n", + " 1.386294\n", + " 2.197225\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 5.0\n", + " 1.0\n", + " 5.0\n", + " 1.0\n", + " 5.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.000000\n", + " 1.800000\n", + " 1.000000\n", + " 1.800000\n", + " 1.000000\n", + " 1.800000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.444444\n", + " 0.900000\n", + " 0.444444\n", + " 0.9\n", + " 0.444444\n", + " 0.9\n", + " 0.444444\n", + " 0.900000\n", + " 0.444444\n", + " 0.900000\n", + " 0.250000\n", + " 0.111111\n", + " 0.250000\n", + " 0.111111\n", + " 0.250000\n", + " 0.111111\n", + " 0.250000\n", + " 0.111111\n", + " 0.250000\n", + " 0.111111\n", + " 0.250000\n", + " 0.555556\n", + " 0.250000\n", + " 0.555556\n", + " 0.250000\n", + " 0.555556\n", + " 0.250000\n", + " 0.111111\n", + " 0.250000\n", + " 0.111111\n", + " 0.000000\n", + " 0.200000\n", + " 0.000000\n", + " 0.200000\n", + " 0.000000\n", + " 0.200000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.444444\n", + " 0.500000\n", + " 0.444444\n", + " 0.5\n", + " 0.444444\n", + " 0.5\n", + " 0.444444\n", + " 0.900000\n", + " 0.444444\n", + " 0.900000\n", + " \n", + " \n", + " e58gxii\n", + " 4.0\n", + " 4.0\n", + " 6.0\n", + " 2.0\n", + " 6.0\n", + " 2.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.666667\n", + " 0.500000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.333333\n", + " 0.333333\n", + " 0.333333\n", + " 0.666667\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 2.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 4.0\n", + " 7.0\n", + " 3.0\n", + " 3.0\n", + " 2.0\n", + " 4.0\n", + " 1.277034\n", + " 1.213008\n", + " 1.549826\n", + " 1.735126\n", + " 1.549826\n", + " 1.735126\n", + " 1.475076\n", + " 1.667462\n", + " 1.475076\n", + " 1.676988\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 3.0\n", + " 4.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 1.750000\n", + " 2.000000\n", + " 1.400000\n", + " 1.500000\n", + " 1.400000\n", + " 1.500000\n", + " 1.400000\n", + " 1.333333\n", + " 1.400000\n", + " 1.500000\n", + " 1.166667\n", + " 1.333333\n", + " 0.777778\n", + " 0.9\n", + " 0.777778\n", + " 0.9\n", + " 1.166667\n", + " 1.333333\n", + " 1.166667\n", + " 1.500000\n", + " 0.285714\n", + " 0.250000\n", + " 0.285714\n", + " 0.222222\n", + " 0.285714\n", + " 0.222222\n", + " 0.142857\n", + " 0.125000\n", + " 0.142857\n", + " 0.222222\n", + " 0.428571\n", + " 0.500000\n", + " 0.285714\n", + " 0.222222\n", + " 0.285714\n", + " 0.222222\n", + " 0.428571\n", + " 0.375000\n", + " 0.428571\n", + " 0.333333\n", + " 0.500000\n", + " 0.500000\n", + " 0.400000\n", + " 0.500000\n", + " 0.400000\n", + " 0.500000\n", + " 0.200000\n", + " 0.166667\n", + " 0.200000\n", + " 0.333333\n", + " 0.666667\n", + " 0.666667\n", + " 0.555556\n", + " 0.6\n", + " 0.555556\n", + " 0.6\n", + " 0.833333\n", + " 1.000000\n", + " 0.833333\n", + " 1.000000\n", + " \n", + " \n", + " e64vc8y\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 6.0\n", + " 2.0\n", + " 6.0\n", + " 2.0\n", + " 1.000000\n", + " 0.166667\n", + " 1.000000\n", + " 0.166667\n", + " 1.000000\n", + " 0.166667\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 3.0\n", + " 1.0\n", + " 3.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 3.0\n", + " 0.0\n", + " 15.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.098612\n", + " 1.002718\n", + " 1.098612\n", + " 1.002718\n", + " 1.098612\n", + " 1.002718\n", + " 1.098612\n", + " 2.197225\n", + " 1.098612\n", + " 2.197225\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 6.0\n", + " 1.0\n", + " 6.0\n", + " 1.0\n", + " 6.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.000000\n", + " 2.250000\n", + " 1.000000\n", + " 2.250000\n", + " 1.000000\n", + " 2.250000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.333333\n", + " 0.900000\n", + " 0.333333\n", + " 0.9\n", + " 0.333333\n", + " 0.9\n", + " 0.333333\n", + " 0.900000\n", + " 0.333333\n", + " 0.900000\n", + " 0.333333\n", + " 0.111111\n", + " 0.333333\n", + " 0.111111\n", + " 0.333333\n", + " 0.111111\n", + " 0.333333\n", + " 0.111111\n", + " 0.333333\n", + " 0.111111\n", + " 0.333333\n", + " 0.666667\n", + " 0.333333\n", + " 0.666667\n", + " 0.333333\n", + " 0.666667\n", + " 0.333333\n", + " 0.111111\n", + " 0.333333\n", + " 0.111111\n", + " 0.000000\n", + " 0.250000\n", + " 0.000000\n", + " 0.250000\n", + " 0.000000\n", + " 0.250000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.333333\n", + " 0.400000\n", + " 0.333333\n", + " 0.4\n", + " 0.333333\n", + " 0.4\n", + " 0.333333\n", + " 0.900000\n", + " 0.333333\n", + " 0.900000\n", + " \n", + " \n", + " e57504g\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 6.0\n", + " 1.0\n", + " 6.0\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.500000\n", + " 1.000000\n", + " 0.500000\n", + " 1.000000\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 5.0\n", + " 5.0\n", + " 5.0\n", + " 5.0\n", + " 1.0\n", + " 1.0\n", + " 4.0\n", + " 6.0\n", + " 2.0\n", + " 3.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 1.549826\n", + " 1.735126\n", + " 1.549826\n", + " 1.735126\n", + " 1.549826\n", + " 1.735126\n", + " 1.747868\n", + " 1.889159\n", + " 1.747868\n", + " 1.889159\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 1.400000\n", + " 1.500000\n", + " 1.400000\n", + " 1.500000\n", + " 1.400000\n", + " 1.500000\n", + " 1.166667\n", + " 1.285714\n", + " 1.166667\n", + " 1.285714\n", + " 1.000000\n", + " 1.125000\n", + " 0.777778\n", + " 0.9\n", + " 0.777778\n", + " 0.9\n", + " 1.000000\n", + " 1.125000\n", + " 1.000000\n", + " 1.125000\n", + " 0.285714\n", + " 0.222222\n", + " 0.285714\n", + " 0.222222\n", + " 0.285714\n", + " 0.222222\n", + " 0.142857\n", + " 0.222222\n", + " 0.142857\n", + " 0.222222\n", + " 0.285714\n", + " 0.222222\n", + " 0.285714\n", + " 0.222222\n", + " 0.285714\n", + " 0.222222\n", + " 0.285714\n", + " 0.222222\n", + " 0.285714\n", + " 0.222222\n", + " 0.400000\n", + " 0.500000\n", + " 0.400000\n", + " 0.500000\n", + " 0.400000\n", + " 0.500000\n", + " 0.166667\n", + " 0.285714\n", + " 0.166667\n", + " 0.285714\n", + " 0.714286\n", + " 0.750000\n", + " 0.555556\n", + " 0.6\n", + " 0.555556\n", + " 0.6\n", + " 0.857143\n", + " 0.875000\n", + " 0.857143\n", + " 0.875000\n", + " \n", + " \n", + " e5borjq\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 2.0\n", + " 0.0\n", + " 2.0\n", + " 0.0\n", + " 0.666667\n", + " 0.666667\n", + " 0.666667\n", + " 0.666667\n", + " 0.666667\n", + " 0.666667\n", + " 1.000000\n", + " 0.500000\n", + " 1.000000\n", + " 0.500000\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 3.0\n", + " 4.0\n", + " 3.0\n", + " 4.0\n", + " 3.0\n", + " 4.0\n", + " 1.0\n", + " 4.0\n", + " 1.0\n", + " 4.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 5.0\n", + " 4.0\n", + " 5.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 1.277034\n", + " 1.522955\n", + " 1.277034\n", + " 1.522955\n", + " 1.277034\n", + " 1.522955\n", + " 1.945910\n", + " 2.043192\n", + " 1.945910\n", + " 2.043192\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.750000\n", + " 1.800000\n", + " 1.750000\n", + " 1.800000\n", + " 1.750000\n", + " 1.800000\n", + " 1.000000\n", + " 1.125000\n", + " 1.000000\n", + " 1.125000\n", + " 0.875000\n", + " 1.125000\n", + " 0.777778\n", + " 0.9\n", + " 0.777778\n", + " 0.9\n", + " 0.875000\n", + " 1.125000\n", + " 0.875000\n", + " 1.125000\n", + " 0.285714\n", + " 0.222222\n", + " 0.285714\n", + " 0.222222\n", + " 0.285714\n", + " 0.222222\n", + " 0.142857\n", + " 0.111111\n", + " 0.142857\n", + " 0.111111\n", + " 0.428571\n", + " 0.333333\n", + " 0.428571\n", + " 0.333333\n", + " 0.428571\n", + " 0.333333\n", + " 0.142857\n", + " 0.222222\n", + " 0.142857\n", + " 0.222222\n", + " 0.500000\n", + " 0.600000\n", + " 0.500000\n", + " 0.600000\n", + " 0.500000\n", + " 0.600000\n", + " 0.000000\n", + " 0.125000\n", + " 0.000000\n", + " 0.125000\n", + " 0.500000\n", + " 0.625000\n", + " 0.444444\n", + " 0.5\n", + " 0.444444\n", + " 0.5\n", + " 0.875000\n", + " 1.000000\n", + " 0.875000\n", + " 1.000000\n", + " \n", + " \n", + " e64n9zv\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 2.0\n", + " 2.0\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 1.000000\n", + " 0.750000\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 3.0\n", + " 3.0\n", + " 0.0\n", + " 1.0\n", + " 2.0\n", + " 3.0\n", + " 2.0\n", + " 3.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 6.0\n", + " 7.0\n", + " 1.039721\n", + " 1.039721\n", + " 1.906155\n", + " 2.043192\n", + " 1.906155\n", + " 2.043192\n", + " 1.039721\n", + " 1.039721\n", + " 1.082196\n", + " 1.060857\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 3.0\n", + " 4.0\n", + " 1.333333\n", + " 1.333333\n", + " 1.142857\n", + " 1.125000\n", + " 1.142857\n", + " 1.125000\n", + " 1.333333\n", + " 1.333333\n", + " 2.666667\n", + " 3.000000\n", + " 1.333333\n", + " 1.333333\n", + " 0.888889\n", + " 0.9\n", + " 0.888889\n", + " 0.9\n", + " 1.333333\n", + " 1.333333\n", + " 2.666667\n", + " 3.000000\n", + " 0.250000\n", + " 0.250000\n", + " 0.125000\n", + " 0.111111\n", + " 0.125000\n", + " 0.111111\n", + " 0.250000\n", + " 0.250000\n", + " 0.375000\n", + " 0.333333\n", + " 0.500000\n", + " 0.500000\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.500000\n", + " 0.500000\n", + " 0.375000\n", + " 0.444444\n", + " 0.333333\n", + " 0.333333\n", + " 0.142857\n", + " 0.125000\n", + " 0.142857\n", + " 0.125000\n", + " 0.333333\n", + " 0.333333\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.777778\n", + " 0.8\n", + " 0.777778\n", + " 0.8\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " \n", + " \n", + " e582ud3\n", + " 5.0\n", + " 1.0\n", + " 5.0\n", + " 1.0\n", + " 5.0\n", + " 1.0\n", + " 6.0\n", + " 2.0\n", + " 6.0\n", + " 2.0\n", + " 0.500000\n", + " 0.333333\n", + " 0.500000\n", + " 0.333333\n", + " 0.500000\n", + " 0.333333\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 4.0\n", + " 1.0\n", + " 4.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 3.0\n", + " 1.0\n", + " 16.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.636514\n", + " 0.848686\n", + " 0.636514\n", + " 0.848686\n", + " 0.636514\n", + " 0.848686\n", + " 1.098612\n", + " 2.197225\n", + " 1.098612\n", + " 2.197225\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 2.0\n", + " 6.0\n", + " 2.0\n", + " 6.0\n", + " 2.0\n", + " 6.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.500000\n", + " 3.000000\n", + " 1.500000\n", + " 3.000000\n", + " 1.500000\n", + " 3.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.333333\n", + " 0.900000\n", + " 0.333333\n", + " 0.9\n", + " 0.333333\n", + " 0.9\n", + " 0.333333\n", + " 0.900000\n", + " 0.333333\n", + " 0.900000\n", + " 0.333333\n", + " 0.222222\n", + " 0.333333\n", + " 0.222222\n", + " 0.333333\n", + " 0.222222\n", + " 0.333333\n", + " 0.111111\n", + " 0.333333\n", + " 0.111111\n", + " 0.666667\n", + " 0.666667\n", + " 0.666667\n", + " 0.666667\n", + " 0.666667\n", + " 0.666667\n", + " 0.333333\n", + " 0.111111\n", + " 0.333333\n", + " 0.111111\n", + " 0.500000\n", + " 0.666667\n", + " 0.500000\n", + " 0.666667\n", + " 0.500000\n", + " 0.666667\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.222222\n", + " 0.300000\n", + " 0.222222\n", + " 0.3\n", + " 0.222222\n", + " 0.3\n", + " 0.333333\n", + " 0.900000\n", + " 0.333333\n", + " 0.900000\n", + " \n", + " \n", + " e64i9cf\n", + " 0.0\n", + " 2.0\n", + " 0.0\n", + " 3.0\n", + " 0.0\n", + " 3.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.333333\n", + " 0.666667\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 0.0\n", + " 2.0\n", + " 0.0\n", + " 2.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 2.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 7.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 4.0\n", + " 1.039721\n", + " 0.955700\n", + " 1.332179\n", + " 1.427061\n", + " 1.332179\n", + " 1.427061\n", + " 1.039721\n", + " 1.747868\n", + " 0.950271\n", + " 1.676988\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 4.0\n", + " 2.0\n", + " 4.0\n", + " 2.0\n", + " 4.0\n", + " 2.0\n", + " 2.0\n", + " 3.0\n", + " 3.0\n", + " 1.333333\n", + " 2.333333\n", + " 1.250000\n", + " 1.800000\n", + " 1.250000\n", + " 1.800000\n", + " 1.333333\n", + " 1.166667\n", + " 1.666667\n", + " 1.500000\n", + " 0.666667\n", + " 1.166667\n", + " 0.555556\n", + " 0.9\n", + " 0.555556\n", + " 0.9\n", + " 0.666667\n", + " 1.166667\n", + " 0.833333\n", + " 1.500000\n", + " 0.250000\n", + " 0.285714\n", + " 0.200000\n", + " 0.222222\n", + " 0.200000\n", + " 0.222222\n", + " 0.250000\n", + " 0.142857\n", + " 0.200000\n", + " 0.222222\n", + " 0.500000\n", + " 0.571429\n", + " 0.400000\n", + " 0.444444\n", + " 0.400000\n", + " 0.444444\n", + " 0.500000\n", + " 0.285714\n", + " 0.600000\n", + " 0.333333\n", + " 0.333333\n", + " 0.666667\n", + " 0.250000\n", + " 0.400000\n", + " 0.250000\n", + " 0.400000\n", + " 0.333333\n", + " 0.166667\n", + " 0.333333\n", + " 0.333333\n", + " 0.500000\n", + " 0.500000\n", + " 0.444444\n", + " 0.5\n", + " 0.444444\n", + " 0.5\n", + " 0.500000\n", + " 1.000000\n", + " 0.500000\n", + " 1.000000\n", + " \n", + " \n", + " e6q9204\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 3.0\n", + " 0.666667\n", + " 0.666667\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.500000\n", + " 0.333333\n", + " 0.666667\n", + " 0.500000\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 4.0\n", + " 4.0\n", + " 4.0\n", + " 1.0\n", + " 3.0\n", + " 4.0\n", + " 4.0\n", + " 1.011404\n", + " 1.277034\n", + " 1.732868\n", + " 1.889159\n", + " 1.732868\n", + " 1.889159\n", + " 1.560710\n", + " 1.475076\n", + " 1.494175\n", + " 1.427061\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 3.0\n", + " 3.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 3.0\n", + " 3.0\n", + " 4.0\n", + " 2.000000\n", + " 1.750000\n", + " 1.333333\n", + " 1.285714\n", + " 1.333333\n", + " 1.285714\n", + " 1.200000\n", + " 1.400000\n", + " 1.600000\n", + " 1.800000\n", + " 1.200000\n", + " 1.166667\n", + " 0.888889\n", + " 0.9\n", + " 0.888889\n", + " 0.9\n", + " 1.200000\n", + " 1.166667\n", + " 1.600000\n", + " 1.500000\n", + " 0.333333\n", + " 0.285714\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.166667\n", + " 0.142857\n", + " 0.250000\n", + " 0.222222\n", + " 0.500000\n", + " 0.428571\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.333333\n", + " 0.428571\n", + " 0.375000\n", + " 0.444444\n", + " 0.666667\n", + " 0.500000\n", + " 0.333333\n", + " 0.285714\n", + " 0.333333\n", + " 0.285714\n", + " 0.200000\n", + " 0.200000\n", + " 0.400000\n", + " 0.400000\n", + " 0.600000\n", + " 0.666667\n", + " 0.666667\n", + " 0.7\n", + " 0.666667\n", + " 0.7\n", + " 1.000000\n", + " 0.833333\n", + " 1.000000\n", + " 0.833333\n", + " \n", + " \n", + " e5modd7\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 6.0\n", + " 8.0\n", + " 8.0\n", + " 8.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.039721\n", + " 1.273028\n", + " 1.039721\n", + " 1.273028\n", + " 1.039721\n", + " 1.273028\n", + " 2.079442\n", + " 2.197225\n", + " 2.079442\n", + " 2.197225\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 4.0\n", + " 4.0\n", + " 4.0\n", + " 4.0\n", + " 4.0\n", + " 4.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.666667\n", + " 2.250000\n", + " 2.666667\n", + " 2.250000\n", + " 2.666667\n", + " 2.250000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.888889\n", + " 0.900000\n", + " 0.888889\n", + " 0.9\n", + " 0.888889\n", + " 0.9\n", + " 0.888889\n", + " 0.900000\n", + " 0.888889\n", + " 0.900000\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.125000\n", + " 0.111111\n", + " 0.125000\n", + " 0.111111\n", + " 0.500000\n", + " 0.444444\n", + " 0.500000\n", + " 0.444444\n", + " 0.500000\n", + " 0.444444\n", + " 0.125000\n", + " 0.111111\n", + " 0.125000\n", + " 0.111111\n", + " 1.000000\n", + " 0.750000\n", + " 1.000000\n", + " 0.750000\n", + " 1.000000\n", + " 0.750000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.333333\n", + " 0.400000\n", + " 0.333333\n", + " 0.4\n", + " 0.333333\n", + " 0.4\n", + " 0.888889\n", + " 0.900000\n", + " 0.888889\n", + " 0.900000\n", + " \n", + " \n", + " e5xhbyd\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.666667\n", + " 1.000000\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 3.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 3.0\n", + " 3.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 5.0\n", + " 6.0\n", + " 1.329661\n", + " 1.329661\n", + " 1.732868\n", + " 1.889159\n", + " 1.732868\n", + " 1.889159\n", + " 1.329661\n", + " 1.329661\n", + " 1.320888\n", + " 1.310784\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 3.0\n", + " 3.0\n", + " 1.500000\n", + " 1.500000\n", + " 1.333333\n", + " 1.285714\n", + " 1.333333\n", + " 1.285714\n", + " 1.500000\n", + " 1.500000\n", + " 2.000000\n", + " 2.250000\n", + " 1.500000\n", + " 1.500000\n", + " 0.888889\n", + " 0.9\n", + " 0.888889\n", + " 0.9\n", + " 1.500000\n", + " 1.500000\n", + " 2.000000\n", + " 2.250000\n", + " 0.333333\n", + " 0.333333\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.333333\n", + " 0.333333\n", + " 0.250000\n", + " 0.333333\n", + " 0.333333\n", + " 0.333333\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.333333\n", + " 0.333333\n", + " 0.375000\n", + " 0.333333\n", + " 0.500000\n", + " 0.500000\n", + " 0.333333\n", + " 0.285714\n", + " 0.333333\n", + " 0.285714\n", + " 0.500000\n", + " 0.500000\n", + " 0.750000\n", + " 0.750000\n", + " 1.000000\n", + " 1.000000\n", + " 0.666667\n", + " 0.7\n", + " 0.666667\n", + " 0.7\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " \n", + " \n", + " e5oaf7h\n", + " 1.0\n", + " 0.0\n", + " 2.0\n", + " 3.0\n", + " 2.0\n", + " 3.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 0.333333\n", + " 0.333333\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.500000\n", + " 0.500000\n", + " 0.750000\n", + " 0.600000\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 3.0\n", + " 3.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 3.0\n", + " 3.0\n", + " 1.0\n", + " 1.0\n", + " 5.0\n", + " 6.0\n", + " 0.562335\n", + " 0.562335\n", + " 1.732868\n", + " 1.889159\n", + " 1.732868\n", + " 1.889159\n", + " 1.039721\n", + " 1.039721\n", + " 0.974315\n", + " 0.936888\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 3.0\n", + " 3.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 4.0\n", + " 5.0\n", + " 2.000000\n", + " 2.000000\n", + " 1.333333\n", + " 1.285714\n", + " 1.333333\n", + " 1.285714\n", + " 1.333333\n", + " 1.333333\n", + " 2.666667\n", + " 3.000000\n", + " 1.333333\n", + " 1.333333\n", + " 0.888889\n", + " 0.9\n", + " 0.888889\n", + " 0.9\n", + " 1.333333\n", + " 1.333333\n", + " 2.666667\n", + " 3.000000\n", + " 0.250000\n", + " 0.250000\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.250000\n", + " 0.375000\n", + " 0.333333\n", + " 0.750000\n", + " 0.750000\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.555556\n", + " 0.500000\n", + " 0.500000\n", + " 0.333333\n", + " 0.285714\n", + " 0.333333\n", + " 0.285714\n", + " 0.333333\n", + " 0.333333\n", + " 0.666667\n", + " 0.666667\n", + " 0.666667\n", + " 0.666667\n", + " 0.666667\n", + " 0.7\n", + " 0.666667\n", + " 0.7\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " \n", + " \n", + " e6nir3u\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.500000\n", + " 0.500000\n", + " 1.000000\n", + " 1.000000\n", + " 0.750000\n", + " 1.000000\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 3.0\n", + " 4.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 6.0\n", + " 7.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 7.0\n", + " 8.0\n", + " 0.693147\n", + " 0.693147\n", + " 1.945910\n", + " 2.079442\n", + " 1.906155\n", + " 2.043192\n", + " 0.693147\n", + " 0.693147\n", + " 0.682908\n", + " 0.693147\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 4.0\n", + " 4.0\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.142857\n", + " 1.125000\n", + " 1.000000\n", + " 1.000000\n", + " 3.500000\n", + " 4.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.777778\n", + " 0.8\n", + " 0.888889\n", + " 0.9\n", + " 1.000000\n", + " 1.000000\n", + " 3.500000\n", + " 4.000000\n", + " 0.500000\n", + " 0.500000\n", + " 0.142857\n", + " 0.125000\n", + " 0.125000\n", + " 0.111111\n", + " 0.500000\n", + " 0.500000\n", + " 0.428571\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.142857\n", + " 0.125000\n", + " 0.250000\n", + " 0.222222\n", + " 0.500000\n", + " 0.500000\n", + " 0.571429\n", + " 0.500000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.142857\n", + " 0.125000\n", + " 0.000000\n", + " 0.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.777778\n", + " 0.8\n", + " 0.777778\n", + " 0.8\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " \n", + " \n", + " e6c3xdn\n", + " 2.0\n", + " 0.0\n", + " 2.0\n", + " 0.0\n", + " 2.0\n", + " 0.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 6.0\n", + " 8.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.906155\n", + " 2.043192\n", + " 1.906155\n", + " 2.043192\n", + " 1.906155\n", + " 2.043192\n", + " 2.079442\n", + " 2.197225\n", + " 2.079442\n", + " 2.197225\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.142857\n", + " 1.125000\n", + " 1.142857\n", + " 1.125000\n", + " 1.142857\n", + " 1.125000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.888889\n", + " 0.900000\n", + " 0.888889\n", + " 0.9\n", + " 0.888889\n", + " 0.9\n", + " 0.888889\n", + " 0.900000\n", + " 0.888889\n", + " 0.900000\n", + " 0.125000\n", + " 0.111111\n", + " 0.125000\n", + " 0.111111\n", + " 0.125000\n", + " 0.111111\n", + " 0.125000\n", + " 0.111111\n", + " 0.125000\n", + " 0.111111\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.125000\n", + " 0.111111\n", + " 0.125000\n", + " 0.111111\n", + " 0.142857\n", + " 0.125000\n", + " 0.142857\n", + " 0.125000\n", + " 0.142857\n", + " 0.125000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.777778\n", + " 0.800000\n", + " 0.777778\n", + " 0.8\n", + " 0.777778\n", + " 0.8\n", + " 0.888889\n", + " 0.900000\n", + " 0.888889\n", + " 0.900000\n", + " \n", + " \n", + " e5d3zaa\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.500000\n", + " 1.000000\n", + " 0.666667\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 4.0\n", + " 2.0\n", + " 3.0\n", + " 0.0\n", + " 1.0\n", + " 3.0\n", + " 3.0\n", + " 1.054920\n", + " 1.351784\n", + " 1.549826\n", + " 1.735126\n", + " 1.549826\n", + " 1.735126\n", + " 1.609438\n", + " 1.747868\n", + " 1.549826\n", + " 1.676988\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 3.0\n", + " 1.666667\n", + " 1.750000\n", + " 1.400000\n", + " 1.500000\n", + " 1.400000\n", + " 1.500000\n", + " 1.000000\n", + " 1.166667\n", + " 1.400000\n", + " 1.500000\n", + " 0.833333\n", + " 1.000000\n", + " 0.777778\n", + " 0.9\n", + " 0.777778\n", + " 0.9\n", + " 0.833333\n", + " 1.000000\n", + " 1.166667\n", + " 1.285714\n", + " 0.400000\n", + " 0.285714\n", + " 0.285714\n", + " 0.222222\n", + " 0.285714\n", + " 0.222222\n", + " 0.200000\n", + " 0.142857\n", + " 0.285714\n", + " 0.222222\n", + " 0.400000\n", + " 0.285714\n", + " 0.285714\n", + " 0.222222\n", + " 0.285714\n", + " 0.222222\n", + " 0.200000\n", + " 0.285714\n", + " 0.285714\n", + " 0.333333\n", + " 0.666667\n", + " 0.750000\n", + " 0.400000\n", + " 0.500000\n", + " 0.400000\n", + " 0.500000\n", + " 0.000000\n", + " 0.166667\n", + " 0.400000\n", + " 0.333333\n", + " 0.500000\n", + " 0.571429\n", + " 0.555556\n", + " 0.6\n", + " 0.555556\n", + " 0.6\n", + " 0.833333\n", + " 0.857143\n", + " 0.833333\n", + " 0.857143\n", + " \n", + " \n", + " e5gnjv9\n", + " 0.0\n", + " 3.0\n", + " 0.0\n", + " 3.0\n", + " 0.0\n", + " 3.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.000000\n", + " 0.125000\n", + " 0.000000\n", + " 0.125000\n", + " 0.000000\n", + " 0.125000\n", + " 0.000000\n", + " 0.500000\n", + " 0.000000\n", + " 0.500000\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 2.0\n", + " 0.0\n", + " 2.0\n", + " 0.0\n", + " 2.0\n", + " 0.0\n", + " 6.0\n", + " 7.0\n", + " 6.0\n", + " 7.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 28.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.000000\n", + " 0.348832\n", + " 0.000000\n", + " 0.348832\n", + " 0.000000\n", + " 0.348832\n", + " 0.000000\n", + " 2.043192\n", + " 0.000000\n", + " 2.043192\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 8.0\n", + " 1.0\n", + " 8.0\n", + " 1.0\n", + " 8.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.000000\n", + " 4.500000\n", + " 1.000000\n", + " 4.500000\n", + " 1.000000\n", + " 4.500000\n", + " 1.000000\n", + " 1.125000\n", + " 1.000000\n", + " 1.125000\n", + " 0.125000\n", + " 1.000000\n", + " 0.111111\n", + " 0.9\n", + " 0.111111\n", + " 0.9\n", + " 0.125000\n", + " 1.000000\n", + " 0.125000\n", + " 1.000000\n", + " 0.000000\n", + " 0.111111\n", + " 0.000000\n", + " 0.111111\n", + " 0.000000\n", + " 0.111111\n", + " 0.000000\n", + " 0.111111\n", + " 0.000000\n", + " 0.111111\n", + " 1.000000\n", + " 0.888889\n", + " 1.000000\n", + " 0.888889\n", + " 1.000000\n", + " 0.888889\n", + " 1.000000\n", + " 0.222222\n", + " 1.000000\n", + " 0.222222\n", + " 0.000000\n", + " 0.500000\n", + " 0.000000\n", + " 0.500000\n", + " 0.000000\n", + " 0.500000\n", + " 0.000000\n", + " 0.125000\n", + " 0.000000\n", + " 0.125000\n", + " 0.125000\n", + " 0.222222\n", + " 0.111111\n", + " 0.2\n", + " 0.111111\n", + " 0.2\n", + " 0.125000\n", + " 0.888889\n", + " 0.125000\n", + " 0.888889\n", + " \n", + " \n", + " e69gw2t\n", + " 2.0\n", + " 1.0\n", + " 4.0\n", + " 1.0\n", + " 4.0\n", + " 1.0\n", + " 0.0\n", + " 2.0\n", + " 0.0\n", + " 2.0\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.500000\n", + " 1.000000\n", + " 0.666667\n", + " 1.000000\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 3.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 3.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 3.0\n", + " 1.0\n", + " 2.0\n", + " 4.0\n", + " 5.0\n", + " 1.054920\n", + " 1.351784\n", + " 1.549826\n", + " 1.735126\n", + " 1.549826\n", + " 1.735126\n", + " 1.332179\n", + " 1.549826\n", + " 1.277034\n", + " 1.464816\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 3.0\n", + " 3.0\n", + " 1.666667\n", + " 1.750000\n", + " 1.400000\n", + " 1.500000\n", + " 1.400000\n", + " 1.500000\n", + " 1.250000\n", + " 1.400000\n", + " 1.750000\n", + " 1.800000\n", + " 1.000000\n", + " 1.400000\n", + " 0.777778\n", + " 0.9\n", + " 0.777778\n", + " 0.9\n", + " 1.000000\n", + " 1.400000\n", + " 1.400000\n", + " 1.800000\n", + " 0.400000\n", + " 0.285714\n", + " 0.285714\n", + " 0.222222\n", + " 0.285714\n", + " 0.222222\n", + " 0.200000\n", + " 0.285714\n", + " 0.285714\n", + " 0.333333\n", + " 0.400000\n", + " 0.285714\n", + " 0.285714\n", + " 0.222222\n", + " 0.285714\n", + " 0.222222\n", + " 0.400000\n", + " 0.285714\n", + " 0.428571\n", + " 0.333333\n", + " 0.666667\n", + " 0.750000\n", + " 0.400000\n", + " 0.500000\n", + " 0.400000\n", + " 0.500000\n", + " 0.250000\n", + " 0.400000\n", + " 0.500000\n", + " 0.400000\n", + " 0.600000\n", + " 0.800000\n", + " 0.555556\n", + " 0.6\n", + " 0.555556\n", + " 0.6\n", + " 0.800000\n", + " 1.000000\n", + " 0.800000\n", + " 1.000000\n", + " \n", + " \n", + " e5syrih\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 0.0\n", + " 3.0\n", + " 0.0\n", + " 3.0\n", + " 0.500000\n", + " 0.500000\n", + " 0.666667\n", + " 0.666667\n", + " 0.666667\n", + " 0.666667\n", + " 0.500000\n", + " 1.000000\n", + " 0.500000\n", + " 1.000000\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 3.0\n", + " 1.0\n", + " 3.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 4.0\n", + " 6.0\n", + " 8.0\n", + " 8.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.039721\n", + " 1.273028\n", + " 1.494175\n", + " 1.676988\n", + " 1.494175\n", + " 1.676988\n", + " 1.906155\n", + " 1.889159\n", + " 1.906155\n", + " 1.889159\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 4.0\n", + " 4.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.666667\n", + " 2.250000\n", + " 1.600000\n", + " 1.500000\n", + " 1.600000\n", + " 1.500000\n", + " 1.142857\n", + " 1.285714\n", + " 1.142857\n", + " 1.285714\n", + " 1.142857\n", + " 1.285714\n", + " 0.888889\n", + " 0.9\n", + " 0.888889\n", + " 0.9\n", + " 1.142857\n", + " 1.285714\n", + " 1.142857\n", + " 1.285714\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.125000\n", + " 0.222222\n", + " 0.125000\n", + " 0.222222\n", + " 0.500000\n", + " 0.444444\n", + " 0.375000\n", + " 0.333333\n", + " 0.375000\n", + " 0.333333\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 1.000000\n", + " 0.750000\n", + " 0.400000\n", + " 0.333333\n", + " 0.400000\n", + " 0.333333\n", + " 0.142857\n", + " 0.285714\n", + " 0.142857\n", + " 0.285714\n", + " 0.428571\n", + " 0.571429\n", + " 0.555556\n", + " 0.6\n", + " 0.555556\n", + " 0.6\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " \n", + " \n", + " e5sa2yf\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.800000\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 4.0\n", + " 4.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 7.0\n", + " 8.0\n", + " 0.693147\n", + " 0.693147\n", + " 2.079442\n", + " 2.197225\n", + " 2.079442\n", + " 2.197225\n", + " 0.693147\n", + " 0.693147\n", + " 0.693147\n", + " 0.686962\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 4.0\n", + " 5.0\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 4.000000\n", + " 4.500000\n", + " 1.000000\n", + " 1.000000\n", + " 0.888889\n", + " 0.9\n", + " 0.888889\n", + " 0.9\n", + " 1.000000\n", + " 1.000000\n", + " 4.000000\n", + " 4.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.125000\n", + " 0.111111\n", + " 0.125000\n", + " 0.111111\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.444444\n", + " 0.500000\n", + " 0.500000\n", + " 0.125000\n", + " 0.111111\n", + " 0.125000\n", + " 0.111111\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.555556\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.888889\n", + " 0.9\n", + " 0.888889\n", + " 0.9\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " \n", + " \n", + " e6ai7z5\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 3.0\n", + " 0.0\n", + " 3.0\n", + " 0.0\n", + " 0.500000\n", + " 0.666667\n", + " 1.000000\n", + " 0.333333\n", + " 1.000000\n", + " 0.333333\n", + " 0.250000\n", + " 0.250000\n", + " 0.250000\n", + " 0.200000\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 1.0\n", + " 4.0\n", + " 1.0\n", + " 4.0\n", + " 6.0\n", + " 6.0\n", + " 2.0\n", + " 2.0\n", + " 1.560710\n", + " 1.494175\n", + " 1.791759\n", + " 1.831020\n", + " 1.791759\n", + " 1.831020\n", + " 0.867563\n", + " 1.386294\n", + " 0.867563\n", + " 1.303092\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 3.0\n", + " 1.0\n", + " 3.0\n", + " 1.0\n", + " 3.0\n", + " 4.0\n", + " 4.0\n", + " 4.0\n", + " 5.0\n", + " 1.200000\n", + " 1.600000\n", + " 1.000000\n", + " 1.285714\n", + " 1.000000\n", + " 1.285714\n", + " 2.000000\n", + " 1.600000\n", + " 2.000000\n", + " 1.800000\n", + " 1.200000\n", + " 1.600000\n", + " 0.666667\n", + " 0.9\n", + " 0.666667\n", + " 0.9\n", + " 1.200000\n", + " 1.600000\n", + " 1.200000\n", + " 1.800000\n", + " 0.166667\n", + " 0.250000\n", + " 0.166667\n", + " 0.111111\n", + " 0.166667\n", + " 0.111111\n", + " 0.166667\n", + " 0.125000\n", + " 0.166667\n", + " 0.111111\n", + " 0.333333\n", + " 0.375000\n", + " 0.166667\n", + " 0.333333\n", + " 0.166667\n", + " 0.333333\n", + " 0.666667\n", + " 0.500000\n", + " 0.666667\n", + " 0.555556\n", + " 0.200000\n", + " 0.400000\n", + " 0.000000\n", + " 0.142857\n", + " 0.000000\n", + " 0.142857\n", + " 0.333333\n", + " 0.200000\n", + " 0.333333\n", + " 0.200000\n", + " 1.000000\n", + " 1.000000\n", + " 0.666667\n", + " 0.7\n", + " 0.666667\n", + " 0.7\n", + " 0.600000\n", + " 1.000000\n", + " 0.600000\n", + " 1.000000\n", + " \n", + " \n", + " ...\n", " ...\n", " ...\n", " ...\n", @@ -2241,2506 +5794,12967 @@ " ...\n", " ...\n", " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " \n", + " \n", + " e5smhzk\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 1.000000\n", + " 0.500000\n", + " 1.000000\n", + " 0.500000\n", + " 1.000000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.750000\n", + " 1.000000\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 3.0\n", + " 4.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 2.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 5.0\n", + " 7.0\n", + " 1.098612\n", + " 1.039721\n", + " 1.945910\n", + " 2.043192\n", + " 1.945910\n", + " 2.043192\n", + " 0.636514\n", + " 1.039721\n", + " 0.682908\n", + " 0.964963\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 4.0\n", + " 4.0\n", + " 1.000000\n", + " 1.333333\n", + " 1.000000\n", + " 1.125000\n", + " 1.000000\n", + " 1.125000\n", + " 1.500000\n", + " 1.333333\n", + " 3.500000\n", + " 3.000000\n", + " 1.000000\n", + " 1.333333\n", + " 0.777778\n", + " 0.9\n", + " 0.777778\n", + " 0.9\n", + " 1.000000\n", + " 1.333333\n", + " 2.333333\n", + " 3.000000\n", + " 0.333333\n", + " 0.250000\n", + " 0.142857\n", + " 0.111111\n", + " 0.142857\n", + " 0.111111\n", + " 0.333333\n", + " 0.250000\n", + " 0.428571\n", + " 0.444444\n", + " 0.333333\n", + " 0.500000\n", + " 0.142857\n", + " 0.222222\n", + " 0.142857\n", + " 0.222222\n", + " 0.666667\n", + " 0.500000\n", + " 0.571429\n", + " 0.444444\n", + " 0.000000\n", + " 0.333333\n", + " 0.000000\n", + " 0.125000\n", + " 0.000000\n", + " 0.125000\n", + " 0.500000\n", + " 0.333333\n", + " 1.000000\n", + " 0.666667\n", + " 1.000000\n", + " 1.000000\n", + " 0.777778\n", + " 0.8\n", + " 0.777778\n", + " 0.8\n", + " 0.666667\n", + " 1.000000\n", + " 0.666667\n", + " 1.000000\n", + " \n", + " \n", + " e5v91s0\n", + " 0.0\n", + " 2.0\n", + " 0.0\n", + " 2.0\n", + " 0.0\n", + " 2.0\n", + " 4.0\n", + " 2.0\n", + " 4.0\n", + " 2.0\n", + " 0.500000\n", + " 0.400000\n", + " 0.500000\n", + " 0.400000\n", + " 0.500000\n", + " 0.400000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 3.0\n", + " 1.0\n", + " 3.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 4.0\n", + " 1.0\n", + " 11.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.039721\n", + " 1.149060\n", + " 1.039721\n", + " 1.149060\n", + " 1.039721\n", + " 1.149060\n", + " 1.386294\n", + " 2.197225\n", + " 1.386294\n", + " 2.197225\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 2.0\n", + " 5.0\n", + " 2.0\n", + " 5.0\n", + " 2.0\n", + " 5.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.333333\n", + " 2.250000\n", + " 1.333333\n", + " 2.250000\n", + " 1.333333\n", + " 2.250000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.444444\n", + " 0.900000\n", + " 0.444444\n", + " 0.9\n", + " 0.444444\n", + " 0.9\n", + " 0.444444\n", + " 0.900000\n", + " 0.444444\n", + " 0.900000\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.111111\n", + " 0.250000\n", + " 0.111111\n", + " 0.500000\n", + " 0.555556\n", + " 0.500000\n", + " 0.555556\n", + " 0.500000\n", + " 0.555556\n", + " 0.250000\n", + " 0.111111\n", + " 0.250000\n", + " 0.111111\n", + " 0.333333\n", + " 0.500000\n", + " 0.333333\n", + " 0.500000\n", + " 0.333333\n", + " 0.500000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.333333\n", + " 0.400000\n", + " 0.333333\n", + " 0.4\n", + " 0.333333\n", + " 0.4\n", + " 0.444444\n", + " 0.900000\n", + " 0.444444\n", + " 0.900000\n", + " \n", + " \n", + " e6n6di6\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 0.500000\n", + " 0.500000\n", + " 0.666667\n", + " 0.666667\n", + " 0.666667\n", + " 0.666667\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 5.0\n", + " 6.0\n", + " 5.0\n", + " 6.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 5.0\n", + " 7.0\n", + " 7.0\n", + " 7.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.213008\n", + " 1.427061\n", + " 1.494175\n", + " 1.676988\n", + " 1.494175\n", + " 1.676988\n", + " 1.906155\n", + " 2.043192\n", + " 1.906155\n", + " 2.043192\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 4.0\n", + " 4.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.000000\n", + " 1.800000\n", + " 1.600000\n", + " 1.500000\n", + " 1.600000\n", + " 1.500000\n", + " 1.142857\n", + " 1.125000\n", + " 1.142857\n", + " 1.125000\n", + " 1.000000\n", + " 1.000000\n", + " 0.888889\n", + " 0.9\n", + " 0.888889\n", + " 0.9\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.125000\n", + " 0.111111\n", + " 0.125000\n", + " 0.111111\n", + " 0.500000\n", + " 0.444444\n", + " 0.375000\n", + " 0.333333\n", + " 0.375000\n", + " 0.333333\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.500000\n", + " 0.400000\n", + " 0.400000\n", + " 0.333333\n", + " 0.400000\n", + " 0.333333\n", + " 0.142857\n", + " 0.125000\n", + " 0.142857\n", + " 0.125000\n", + " 0.500000\n", + " 0.555556\n", + " 0.555556\n", + " 0.6\n", + " 0.555556\n", + " 0.6\n", + " 0.875000\n", + " 0.888889\n", + " 0.875000\n", + " 0.888889\n", + " \n", + " \n", + " e6iqq30\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 5.0\n", + " 1.0\n", + " 5.0\n", + " 1.0\n", + " 1.000000\n", + " 0.166667\n", + " 1.000000\n", + " 0.166667\n", + " 1.000000\n", + " 0.166667\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 4.0\n", + " 0.0\n", + " 4.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 2.0\n", + " 0.0\n", + " 15.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 1.098612\n", + " 1.002718\n", + " 1.098612\n", + " 1.002718\n", + " 1.098612\n", + " 1.002718\n", + " 1.098612\n", + " 2.197225\n", + " 1.098612\n", + " 2.197225\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 6.0\n", + " 1.0\n", + " 6.0\n", + " 1.0\n", + " 6.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.000000\n", + " 2.250000\n", + " 1.000000\n", + " 2.250000\n", + " 1.000000\n", + " 2.250000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.333333\n", + " 1.000000\n", + " 0.333333\n", + " 0.9\n", + " 0.333333\n", + " 0.9\n", + " 0.333333\n", + " 1.000000\n", + " 0.333333\n", + " 1.000000\n", + " 0.333333\n", + " 0.111111\n", + " 0.333333\n", + " 0.111111\n", + " 0.333333\n", + " 0.111111\n", + " 0.333333\n", + " 0.111111\n", + " 0.333333\n", + " 0.111111\n", + " 0.333333\n", + " 0.666667\n", + " 0.333333\n", + " 0.666667\n", + " 0.333333\n", + " 0.666667\n", + " 0.333333\n", + " 0.111111\n", + " 0.333333\n", + " 0.111111\n", + " 0.000000\n", + " 0.250000\n", + " 0.000000\n", + " 0.250000\n", + " 0.000000\n", + " 0.250000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.333333\n", + " 0.444444\n", + " 0.333333\n", + " 0.4\n", + " 0.333333\n", + " 0.4\n", + " 0.333333\n", + " 1.000000\n", + " 0.333333\n", + " 1.000000\n", + " \n", + " \n", + " e5bfad7\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.000000\n", + " 0.500000\n", + " 1.000000\n", + " 0.666667\n", + " 1.000000\n", + " 0.666667\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 2.0\n", + " 0.0\n", + " 2.0\n", + " 0.0\n", + " 0.0\n", + " 2.0\n", + " 3.0\n", + " 4.0\n", + " 2.0\n", + " 8.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 2.0\n", + " 1.329661\n", + " 1.273028\n", + " 1.329661\n", + " 1.522955\n", + " 1.329661\n", + " 1.522955\n", + " 1.560710\n", + " 2.043192\n", + " 1.560710\n", + " 2.043192\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 2.0\n", + " 4.0\n", + " 2.0\n", + " 3.0\n", + " 2.0\n", + " 3.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 1.500000\n", + " 2.250000\n", + " 1.500000\n", + " 1.800000\n", + " 1.500000\n", + " 1.800000\n", + " 1.200000\n", + " 1.125000\n", + " 1.200000\n", + " 1.125000\n", + " 0.750000\n", + " 1.125000\n", + " 0.666667\n", + " 0.9\n", + " 0.666667\n", + " 0.9\n", + " 0.750000\n", + " 1.125000\n", + " 0.750000\n", + " 1.125000\n", + " 0.333333\n", + " 0.222222\n", + " 0.333333\n", + " 0.222222\n", + " 0.333333\n", + " 0.222222\n", + " 0.166667\n", + " 0.111111\n", + " 0.166667\n", + " 0.111111\n", + " 0.333333\n", + " 0.444444\n", + " 0.333333\n", + " 0.333333\n", + " 0.333333\n", + " 0.333333\n", + " 0.333333\n", + " 0.222222\n", + " 0.333333\n", + " 0.222222\n", + " 0.500000\n", + " 0.750000\n", + " 0.500000\n", + " 0.600000\n", + " 0.500000\n", + " 0.600000\n", + " 0.200000\n", + " 0.125000\n", + " 0.200000\n", + " 0.125000\n", + " 0.500000\n", + " 0.500000\n", + " 0.444444\n", + " 0.5\n", + " 0.444444\n", + " 0.5\n", + " 0.625000\n", + " 1.000000\n", + " 0.625000\n", + " 1.000000\n", + " \n", + " \n", + " e6x5he5\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 0.0\n", + " 4.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 1.000000\n", + " 0.250000\n", + " 1.000000\n", + " 0.250000\n", + " 0.500000\n", + " 0.500000\n", + " 0.000000\n", + " 0.250000\n", + " 0.000000\n", + " 0.250000\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 3.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 4.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 6.0\n", + " 6.0\n", + " 6.0\n", + " 0.0\n", + " 5.0\n", + " 1.386294\n", + " 1.386294\n", + " 1.386294\n", + " 1.386294\n", + " 1.332179\n", + " 1.427061\n", + " 0.000000\n", + " 1.386294\n", + " 0.000000\n", + " 1.386294\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 4.0\n", + " 1.0\n", + " 4.0\n", + " 2.0\n", + " 4.0\n", + " 4.0\n", + " 4.0\n", + " 4.0\n", + " 4.0\n", + " 1.000000\n", + " 1.600000\n", + " 1.000000\n", + " 1.600000\n", + " 1.250000\n", + " 1.800000\n", + " 4.000000\n", + " 1.600000\n", + " 4.000000\n", + " 1.600000\n", + " 0.800000\n", + " 1.600000\n", + " 0.444444\n", + " 0.8\n", + " 0.555556\n", + " 0.9\n", + " 0.800000\n", + " 1.600000\n", + " 0.800000\n", + " 1.600000\n", + " 0.250000\n", + " 0.125000\n", + " 0.250000\n", + " 0.125000\n", + " 0.200000\n", + " 0.222222\n", + " 0.000000\n", + " 0.125000\n", + " 0.000000\n", + " 0.125000\n", + " 0.250000\n", + " 0.500000\n", + " 0.250000\n", + " 0.500000\n", + " 0.400000\n", + " 0.444444\n", + " 1.000000\n", + " 0.500000\n", + " 1.000000\n", + " 0.500000\n", + " 0.000000\n", + " 0.200000\n", + " 0.000000\n", + " 0.200000\n", + " 0.250000\n", + " 0.400000\n", + " 1.000000\n", + " 0.200000\n", + " 1.000000\n", + " 0.200000\n", + " 0.800000\n", + " 1.000000\n", + " 0.444444\n", + " 0.5\n", + " 0.444444\n", + " 0.5\n", + " 0.200000\n", + " 1.000000\n", + " 0.200000\n", + " 1.000000\n", + " \n", + " \n", + " e6l9uyf\n", + " 0.0\n", + " 3.0\n", + " 0.0\n", + " 4.0\n", + " 0.0\n", + " 4.0\n", + " 4.0\n", + " 1.0\n", + " 4.0\n", + " 1.0\n", + " 0.500000\n", + " 0.400000\n", + " 0.500000\n", + " 0.400000\n", + " 0.500000\n", + " 0.400000\n", + " 1.000000\n", + " 0.500000\n", + " 1.000000\n", + " 0.500000\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 0.0\n", + " 3.0\n", + " 0.0\n", + " 3.0\n", + " 0.0\n", + " 2.0\n", + " 3.0\n", + " 2.0\n", + " 3.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 4.0\n", + " 1.0\n", + " 11.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 1.039721\n", + " 1.149060\n", + " 1.039721\n", + " 1.149060\n", + " 1.039721\n", + " 1.149060\n", + " 1.386294\n", + " 2.043192\n", + " 1.386294\n", + " 2.043192\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 2.0\n", + " 5.0\n", + " 2.0\n", + " 5.0\n", + " 2.0\n", + " 5.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.333333\n", + " 2.250000\n", + " 1.333333\n", + " 2.250000\n", + " 1.333333\n", + " 2.250000\n", + " 1.000000\n", + " 1.125000\n", + " 1.000000\n", + " 1.125000\n", + " 0.500000\n", + " 1.000000\n", + " 0.444444\n", + " 0.9\n", + " 0.444444\n", + " 0.9\n", + " 0.500000\n", + " 1.000000\n", + " 0.500000\n", + " 1.000000\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.111111\n", + " 0.250000\n", + " 0.111111\n", + " 0.500000\n", + " 0.555556\n", + " 0.500000\n", + " 0.555556\n", + " 0.500000\n", + " 0.555556\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.333333\n", + " 0.500000\n", + " 0.333333\n", + " 0.500000\n", + " 0.333333\n", + " 0.500000\n", + " 0.000000\n", + " 0.125000\n", + " 0.000000\n", + " 0.125000\n", + " 0.375000\n", + " 0.444444\n", + " 0.333333\n", + " 0.4\n", + " 0.333333\n", + " 0.4\n", + " 0.500000\n", + " 0.888889\n", + " 0.500000\n", + " 0.888889\n", + " \n", + " \n", + " e57hyr1\n", + " 1.0\n", + " 5.0\n", + " 1.0\n", + " 5.0\n", + " 1.0\n", + " 5.0\n", + " 2.0\n", + " 3.0\n", + " 2.0\n", + " 3.0\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 4.0\n", + " 0.0\n", + " 4.0\n", + " 0.0\n", + " 4.0\n", + " 0.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 1.0\n", + " 3.0\n", + " 1.0\n", + " 7.0\n", + " 0.0\n", + " 3.0\n", + " 2.0\n", + " 2.0\n", + " 1.332179\n", + " 1.427061\n", + " 1.332179\n", + " 1.427061\n", + " 1.332179\n", + " 1.427061\n", + " 1.609438\n", + " 1.735126\n", + " 1.609438\n", + " 1.735126\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 4.0\n", + " 2.0\n", + " 4.0\n", + " 2.0\n", + " 4.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.250000\n", + " 1.800000\n", + " 1.250000\n", + " 1.800000\n", + " 1.250000\n", + " 1.800000\n", + " 1.000000\n", + " 1.500000\n", + " 1.000000\n", + " 1.500000\n", + " 0.833333\n", + " 1.285714\n", + " 0.555556\n", + " 0.9\n", + " 0.555556\n", + " 0.9\n", + " 0.833333\n", + " 1.285714\n", + " 0.833333\n", + " 1.285714\n", + " 0.200000\n", + " 0.222222\n", + " 0.200000\n", + " 0.222222\n", + " 0.200000\n", + " 0.222222\n", + " 0.200000\n", + " 0.222222\n", + " 0.200000\n", + " 0.222222\n", + " 0.400000\n", + " 0.444444\n", + " 0.400000\n", + " 0.444444\n", + " 0.400000\n", + " 0.444444\n", + " 0.200000\n", + " 0.222222\n", + " 0.200000\n", + " 0.222222\n", + " 0.250000\n", + " 0.400000\n", + " 0.250000\n", + " 0.400000\n", + " 0.250000\n", + " 0.400000\n", + " 0.000000\n", + " 0.500000\n", + " 0.000000\n", + " 0.500000\n", + " 0.666667\n", + " 0.714286\n", + " 0.444444\n", + " 0.5\n", + " 0.444444\n", + " 0.5\n", + " 0.833333\n", + " 0.857143\n", + " 0.833333\n", + " 0.857143\n", + " \n", + " \n", + " e5b8sj7\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 0.500000\n", + " 0.750000\n", + " 0.666667\n", + " 1.000000\n", + " 0.666667\n", + " 1.000000\n", + " 1.000000\n", + " 0.500000\n", + " 1.000000\n", + " 0.500000\n", + " 2.0\n", + " 3.0\n", + " 2.0\n", + " 3.0\n", + " 2.0\n", + " 3.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 4.0\n", + " 7.0\n", + " 10.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 0.636514\n", + " 1.060857\n", + " 1.011404\n", + " 1.310784\n", + " 1.011404\n", + " 1.310784\n", + " 1.791759\n", + " 2.043192\n", + " 1.791759\n", + " 2.043192\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 4.0\n", + " 4.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 3.000000\n", + " 3.000000\n", + " 2.000000\n", + " 2.250000\n", + " 2.000000\n", + " 2.250000\n", + " 1.000000\n", + " 1.125000\n", + " 1.000000\n", + " 1.125000\n", + " 0.750000\n", + " 1.125000\n", + " 0.666667\n", + " 0.9\n", + " 0.666667\n", + " 0.9\n", + " 0.750000\n", + " 1.125000\n", + " 0.750000\n", + " 1.125000\n", + " 0.333333\n", + " 0.333333\n", + " 0.333333\n", + " 0.333333\n", + " 0.333333\n", + " 0.333333\n", + " 0.166667\n", + " 0.111111\n", + " 0.166667\n", + " 0.111111\n", + " 0.666667\n", + " 0.444444\n", + " 0.500000\n", + " 0.333333\n", + " 0.500000\n", + " 0.333333\n", + " 0.166667\n", + " 0.222222\n", + " 0.166667\n", + " 0.222222\n", + " 1.000000\n", + " 1.000000\n", + " 0.666667\n", + " 0.750000\n", + " 0.666667\n", + " 0.750000\n", + " 0.000000\n", + " 0.125000\n", + " 0.000000\n", + " 0.125000\n", + " 0.250000\n", + " 0.375000\n", + " 0.333333\n", + " 0.4\n", + " 0.333333\n", + " 0.4\n", + " 0.750000\n", + " 1.000000\n", + " 0.750000\n", + " 1.000000\n", + " \n", + " \n", + " e6nlep7\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " NaN\n", + " 0.000000\n", + " NaN\n", + " 0.000000\n", + " NaN\n", + " 0.000000\n", + " NaN\n", + " 1.000000\n", + " NaN\n", + " 1.000000\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 36.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " NaN\n", + " 0.000000\n", + " NaN\n", + " 0.000000\n", + " NaN\n", + " 0.000000\n", + " NaN\n", + " 2.197225\n", + " NaN\n", + " 2.197225\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 9.0\n", + " 0.0\n", + " 9.0\n", + " 0.0\n", + " 9.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.000000\n", + " 9.000000\n", + " 0.000000\n", + " 9.000000\n", + " 0.000000\n", + " 9.000000\n", + " 0.000000\n", + " 1.000000\n", + " 0.000000\n", + " 1.000000\n", + " 0.000000\n", + " 0.900000\n", + " 0.000000\n", + " 0.9\n", + " 0.000000\n", + " 0.9\n", + " 0.000000\n", + " 0.900000\n", + " 0.000000\n", + " 0.900000\n", + " NaN\n", + " 0.000000\n", + " NaN\n", + " 0.000000\n", + " NaN\n", + " 0.000000\n", + " NaN\n", + " 0.111111\n", + " NaN\n", + " 0.111111\n", + " 0.000000\n", + " 1.000000\n", + " 0.000000\n", + " 1.000000\n", + " 0.000000\n", + " 1.000000\n", + " 0.000000\n", + " 0.111111\n", + " 0.000000\n", + " 0.111111\n", + " 0.000000\n", + " 1.000000\n", + " 0.000000\n", + " 1.000000\n", + " 0.000000\n", + " 1.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.100000\n", + " 0.000000\n", + " 0.1\n", + " 0.000000\n", + " 0.1\n", + " 0.000000\n", + " 0.900000\n", + " 0.000000\n", + " 0.900000\n", + " \n", + " \n", + " e6ltazd\n", + " 4.0\n", + " 0.0\n", + " 4.0\n", + " 0.0\n", + " 4.0\n", + " 0.0\n", + " 1.0\n", + " 2.0\n", + " 0.0\n", + " 5.0\n", + " 0.250000\n", + " 0.250000\n", + " 0.250000\n", + " 0.250000\n", + " 0.250000\n", + " 0.250000\n", + " 1.000000\n", + " 0.500000\n", + " 0.666667\n", + " 1.000000\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 3.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 4.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 4.0\n", + " 6.0\n", + " 6.0\n", + " 0.0\n", + " 1.0\n", + " 4.0\n", + " 4.0\n", + " 0.500402\n", + " 0.867563\n", + " 1.386294\n", + " 1.581094\n", + " 1.386294\n", + " 1.581094\n", + " 1.609438\n", + " 1.560710\n", + " 1.494175\n", + " 1.464816\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 4.0\n", + " 4.0\n", + " 4.0\n", + " 4.0\n", + " 4.0\n", + " 4.0\n", + " 1.0\n", + " 2.0\n", + " 3.0\n", + " 3.0\n", + " 2.500000\n", + " 2.000000\n", + " 1.600000\n", + " 1.500000\n", + " 1.600000\n", + " 1.500000\n", + " 1.000000\n", + " 1.200000\n", + " 1.600000\n", + " 1.800000\n", + " 1.000000\n", + " 1.000000\n", + " 0.888889\n", + " 0.9\n", + " 0.888889\n", + " 0.9\n", + " 1.000000\n", + " 1.000000\n", + " 1.600000\n", + " 1.500000\n", + " 0.200000\n", + " 0.166667\n", + " 0.125000\n", + " 0.111111\n", + " 0.125000\n", + " 0.111111\n", + " 0.200000\n", + " 0.166667\n", + " 0.250000\n", + " 0.333333\n", + " 0.800000\n", + " 0.666667\n", + " 0.500000\n", + " 0.444444\n", + " 0.500000\n", + " 0.444444\n", + " 0.200000\n", + " 0.333333\n", + " 0.375000\n", + " 0.333333\n", + " 0.500000\n", + " 0.333333\n", + " 0.200000\n", + " 0.166667\n", + " 0.200000\n", + " 0.166667\n", + " 0.000000\n", + " 0.200000\n", + " 0.400000\n", + " 0.400000\n", + " 0.400000\n", + " 0.500000\n", + " 0.555556\n", + " 0.6\n", + " 0.555556\n", + " 0.6\n", + " 1.000000\n", + " 0.833333\n", + " 1.000000\n", + " 0.833333\n", + " \n", + " \n", + " e57a6qq\n", + " 1.0\n", + " 0.0\n", + " 4.0\n", + " 5.0\n", + " 4.0\n", + " 5.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.666667\n", + " 0.666667\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.500000\n", + " 0.500000\n", + " 0.666667\n", + " 1.000000\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 3.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 2.0\n", + " 2.0\n", + " 3.0\n", + " 3.0\n", + " 4.0\n", + " 4.0\n", + " 1.0\n", + " 1.0\n", + " 4.0\n", + " 5.0\n", + " 1.011404\n", + " 1.011404\n", + " 1.732868\n", + " 1.889159\n", + " 1.732868\n", + " 1.889159\n", + " 1.560710\n", + " 1.560710\n", + " 1.494175\n", + " 1.464816\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 3.0\n", + " 3.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 3.0\n", + " 3.0\n", + " 2.000000\n", + " 2.000000\n", + " 1.333333\n", + " 1.285714\n", + " 1.333333\n", + " 1.285714\n", + " 1.200000\n", + " 1.200000\n", + " 1.600000\n", + " 1.800000\n", + " 1.200000\n", + " 1.200000\n", + " 0.888889\n", + " 0.9\n", + " 0.888889\n", + " 0.9\n", + " 1.200000\n", + " 1.200000\n", + " 1.600000\n", + " 1.800000\n", + " 0.333333\n", + " 0.333333\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.166667\n", + " 0.166667\n", + " 0.250000\n", + " 0.333333\n", + " 0.500000\n", + " 0.500000\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.333333\n", + " 0.333333\n", + " 0.375000\n", + " 0.333333\n", + " 0.666667\n", + " 0.666667\n", + " 0.333333\n", + " 0.285714\n", + " 0.333333\n", + " 0.285714\n", + " 0.200000\n", + " 0.200000\n", + " 0.400000\n", + " 0.400000\n", + " 0.600000\n", + " 0.600000\n", + " 0.666667\n", + " 0.7\n", + " 0.666667\n", + " 0.7\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " \n", + " \n", + " e5qc7eb\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 0.0\n", + " 2.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 0.666667\n", + " 1.000000\n", + " 0.666667\n", + " 0.666667\n", + " 0.666667\n", + " 0.666667\n", + " 1.000000\n", + " 0.500000\n", + " 0.500000\n", + " 1.000000\n", + " 2.0\n", + " 3.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 0.0\n", + " 3.0\n", + " 4.0\n", + " 3.0\n", + " 4.0\n", + " 0.0\n", + " 1.0\n", + " 2.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 4.0\n", + " 4.0\n", + " 4.0\n", + " 6.0\n", + " 0.0\n", + " 1.0\n", + " 2.0\n", + " 3.0\n", + " 1.011404\n", + " 1.004242\n", + " 1.277034\n", + " 1.522955\n", + " 1.277034\n", + " 1.522955\n", + " 1.791759\n", + " 1.747868\n", + " 1.747868\n", + " 1.735126\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.000000\n", + " 2.333333\n", + " 1.750000\n", + " 1.800000\n", + " 1.750000\n", + " 1.800000\n", + " 1.000000\n", + " 1.166667\n", + " 1.166667\n", + " 1.500000\n", + " 1.000000\n", + " 1.166667\n", + " 0.777778\n", + " 0.9\n", + " 0.777778\n", + " 0.9\n", + " 1.000000\n", + " 1.166667\n", + " 1.166667\n", + " 1.500000\n", + " 0.333333\n", + " 0.428571\n", + " 0.285714\n", + " 0.222222\n", + " 0.285714\n", + " 0.222222\n", + " 0.166667\n", + " 0.142857\n", + " 0.142857\n", + " 0.222222\n", + " 0.500000\n", + " 0.428571\n", + " 0.428571\n", + " 0.333333\n", + " 0.428571\n", + " 0.333333\n", + " 0.166667\n", + " 0.285714\n", + " 0.285714\n", + " 0.222222\n", + " 0.666667\n", + " 0.666667\n", + " 0.500000\n", + " 0.600000\n", + " 0.500000\n", + " 0.600000\n", + " 0.000000\n", + " 0.166667\n", + " 0.166667\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.444444\n", + " 0.5\n", + " 0.444444\n", + " 0.5\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " \n", + " \n", + " e6hqt5y\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 3.0\n", + " 1.0\n", + " 3.0\n", + " 1.0\n", + " 0.250000\n", + " 1.000000\n", + " 0.250000\n", + " 1.000000\n", + " 0.250000\n", + " 1.000000\n", + " 1.000000\n", + " 0.500000\n", + " 1.000000\n", + " 0.500000\n", + " 1.0\n", + " 4.0\n", + " 1.0\n", + " 4.0\n", + " 1.0\n", + " 4.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 4.0\n", + " 1.0\n", + " 4.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 5.0\n", + " 6.0\n", + " 12.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.500402\n", + " 0.964963\n", + " 0.500402\n", + " 0.964963\n", + " 0.500402\n", + " 0.964963\n", + " 1.609438\n", + " 2.043192\n", + " 1.609438\n", + " 2.043192\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 4.0\n", + " 4.0\n", + " 4.0\n", + " 4.0\n", + " 4.0\n", + " 4.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 2.500000\n", + " 3.000000\n", + " 2.500000\n", + " 3.000000\n", + " 2.500000\n", + " 3.000000\n", + " 1.000000\n", + " 1.125000\n", + " 1.000000\n", + " 1.125000\n", + " 0.625000\n", + " 1.000000\n", + " 0.555556\n", + " 0.9\n", + " 0.555556\n", + " 0.9\n", + " 0.625000\n", + " 1.000000\n", + " 0.625000\n", + " 1.000000\n", + " 0.200000\n", + " 0.444444\n", + " 0.200000\n", + " 0.444444\n", + " 0.200000\n", + " 0.444444\n", + " 0.200000\n", + " 0.111111\n", + " 0.200000\n", + " 0.111111\n", + " 0.800000\n", + " 0.444444\n", + " 0.800000\n", + " 0.444444\n", + " 0.800000\n", + " 0.444444\n", + " 0.200000\n", + " 0.222222\n", + " 0.200000\n", + " 0.222222\n", + " 0.500000\n", + " 0.666667\n", + " 0.500000\n", + " 0.666667\n", + " 0.500000\n", + " 0.666667\n", + " 0.000000\n", + " 0.125000\n", + " 0.000000\n", + " 0.125000\n", + " 0.250000\n", + " 0.333333\n", + " 0.222222\n", + " 0.3\n", + " 0.222222\n", + " 0.3\n", + " 0.625000\n", + " 0.888889\n", + " 0.625000\n", + " 0.888889\n", + " \n", + " \n", + " e5ua84v\n", + " 3.0\n", + " 4.0\n", + " 4.0\n", + " 5.0\n", + " 4.0\n", + " 5.0\n", + " 3.0\n", + " 4.0\n", + " 3.0\n", + " 4.0\n", + " 0.500000\n", + " 0.500000\n", + " 0.666667\n", + " 0.666667\n", + " 0.666667\n", + " 0.666667\n", + " 1.000000\n", + " 0.666667\n", + " 1.000000\n", + " 0.666667\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 3.0\n", + " 3.0\n", + " 2.0\n", + " 5.0\n", + " 7.0\n", + " 7.0\n", + " 2.0\n", + " 4.0\n", + " 3.0\n", + " 3.0\n", + " 1.213008\n", + " 1.427061\n", + " 1.494175\n", + " 1.676988\n", + " 1.494175\n", + " 1.676988\n", + " 1.732868\n", + " 1.676988\n", + " 1.732868\n", + " 1.676988\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 4.0\n", + " 4.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 2.0\n", + " 3.0\n", + " 2.0\n", + " 3.0\n", + " 2.000000\n", + " 1.800000\n", + " 1.600000\n", + " 1.500000\n", + " 1.600000\n", + " 1.500000\n", + " 1.333333\n", + " 1.500000\n", + " 1.333333\n", + " 1.500000\n", + " 1.333333\n", + " 1.285714\n", + " 0.888889\n", + " 0.9\n", + " 0.888889\n", + " 0.9\n", + " 1.333333\n", + " 1.285714\n", + " 1.333333\n", + " 1.285714\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.500000\n", + " 0.444444\n", + " 0.375000\n", + " 0.333333\n", + " 0.375000\n", + " 0.333333\n", + " 0.250000\n", + " 0.333333\n", + " 0.250000\n", + " 0.333333\n", + " 0.500000\n", + " 0.400000\n", + " 0.400000\n", + " 0.333333\n", + " 0.400000\n", + " 0.333333\n", + " 0.333333\n", + " 0.333333\n", + " 0.333333\n", + " 0.333333\n", + " 0.666667\n", + " 0.714286\n", + " 0.555556\n", + " 0.6\n", + " 0.555556\n", + " 0.6\n", + " 1.000000\n", + " 0.857143\n", + " 1.000000\n", + " 0.857143\n", + " \n", + " \n", + " e65m7kq\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 0.333333\n", + " 0.750000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 1.000000\n", + " 0.500000\n", + " 1.000000\n", + " 0.500000\n", + " 1.0\n", + " 3.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 4.0\n", + " 3.0\n", + " 9.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.950271\n", + " 1.214890\n", + " 1.332179\n", + " 1.427061\n", + " 1.332179\n", + " 1.427061\n", + " 1.609438\n", + " 2.043192\n", + " 1.609438\n", + " 2.043192\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 3.0\n", + " 4.0\n", + " 2.0\n", + " 4.0\n", + " 2.0\n", + " 4.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.666667\n", + " 2.250000\n", + " 1.250000\n", + " 1.800000\n", + " 1.250000\n", + " 1.800000\n", + " 1.000000\n", + " 1.125000\n", + " 1.000000\n", + " 1.125000\n", + " 0.625000\n", + " 1.000000\n", + " 0.555556\n", + " 0.9\n", + " 0.555556\n", + " 0.9\n", + " 0.625000\n", + " 1.000000\n", + " 0.625000\n", + " 1.000000\n", + " 0.200000\n", + " 0.333333\n", + " 0.200000\n", + " 0.222222\n", + " 0.200000\n", + " 0.222222\n", + " 0.200000\n", + " 0.111111\n", + " 0.200000\n", + " 0.111111\n", + " 0.600000\n", + " 0.444444\n", + " 0.400000\n", + " 0.444444\n", + " 0.400000\n", + " 0.444444\n", + " 0.200000\n", + " 0.222222\n", + " 0.200000\n", + " 0.222222\n", + " 0.333333\n", + " 0.500000\n", + " 0.250000\n", + " 0.400000\n", + " 0.250000\n", + " 0.400000\n", + " 0.000000\n", + " 0.125000\n", + " 0.000000\n", + " 0.125000\n", + " 0.375000\n", + " 0.444444\n", + " 0.444444\n", + " 0.5\n", + " 0.444444\n", + " 0.5\n", + " 0.625000\n", + " 0.888889\n", + " 0.625000\n", + " 0.888889\n", + " \n", + " \n", + " e5ggtru\n", + " 3.0\n", + " 4.0\n", + " 4.0\n", + " 5.0\n", + " 4.0\n", + " 5.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 0.400000\n", + " 0.400000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 1.000000\n", + " 0.500000\n", + " 1.000000\n", + " 0.500000\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 4.0\n", + " 8.0\n", + " 11.0\n", + " 11.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.900256\n", + " 1.149060\n", + " 1.213008\n", + " 1.427061\n", + " 1.213008\n", + " 1.427061\n", + " 2.079442\n", + " 2.043192\n", + " 2.079442\n", + " 2.043192\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 5.0\n", + " 5.0\n", + " 4.0\n", + " 4.0\n", + " 4.0\n", + " 4.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 2.666667\n", + " 2.250000\n", + " 2.000000\n", + " 1.800000\n", + " 2.000000\n", + " 1.800000\n", + " 1.000000\n", + " 1.125000\n", + " 1.000000\n", + " 1.125000\n", + " 1.000000\n", + " 1.000000\n", + " 0.888889\n", + " 0.9\n", + " 0.888889\n", + " 0.9\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.125000\n", + " 0.111111\n", + " 0.125000\n", + " 0.111111\n", + " 0.625000\n", + " 0.555556\n", + " 0.500000\n", + " 0.444444\n", + " 0.500000\n", + " 0.444444\n", + " 0.125000\n", + " 0.222222\n", + " 0.125000\n", + " 0.222222\n", + " 0.666667\n", + " 0.500000\n", + " 0.500000\n", + " 0.400000\n", + " 0.500000\n", + " 0.400000\n", + " 0.000000\n", + " 0.125000\n", + " 0.000000\n", + " 0.125000\n", + " 0.375000\n", + " 0.444444\n", + " 0.444444\n", + " 0.5\n", + " 0.444444\n", + " 0.5\n", + " 1.000000\n", + " 0.888889\n", + " 1.000000\n", + " 0.888889\n", + " \n", + " \n", + " e5pmmig\n", + " 2.0\n", + " 3.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 2.0\n", + " 3.0\n", + " 0.0\n", + " 3.0\n", + " 1.000000\n", + " 1.000000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 1.000000\n", + " 0.666667\n", + " 0.666667\n", + " 1.000000\n", + " 2.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 3.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 3.0\n", + " 3.0\n", + " 2.0\n", + " 4.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 4.0\n", + " 4.0\n", + " 4.0\n", + " 1.329661\n", + " 1.549826\n", + " 1.906155\n", + " 2.043192\n", + " 1.906155\n", + " 2.043192\n", + " 1.329661\n", + " 1.277034\n", + " 1.320888\n", + " 1.310784\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 1.500000\n", + " 1.400000\n", + " 1.142857\n", + " 1.125000\n", + " 1.142857\n", + " 1.125000\n", + " 1.500000\n", + " 1.750000\n", + " 2.000000\n", + " 2.250000\n", + " 1.500000\n", + " 1.400000\n", + " 0.888889\n", + " 0.9\n", + " 0.888889\n", + " 0.9\n", + " 1.500000\n", + " 1.400000\n", + " 2.000000\n", + " 1.800000\n", + " 0.333333\n", + " 0.285714\n", + " 0.125000\n", + " 0.111111\n", + " 0.125000\n", + " 0.111111\n", + " 0.333333\n", + " 0.285714\n", + " 0.250000\n", + " 0.333333\n", + " 0.333333\n", + " 0.285714\n", + " 0.250000\n", + " 0.222222\n", + " 0.250000\n", + " 0.222222\n", + " 0.333333\n", + " 0.428571\n", + " 0.375000\n", + " 0.333333\n", + " 0.500000\n", + " 0.400000\n", + " 0.142857\n", + " 0.125000\n", + " 0.142857\n", + " 0.125000\n", + " 0.500000\n", + " 0.500000\n", + " 0.750000\n", + " 0.750000\n", + " 1.000000\n", + " 1.000000\n", + " 0.777778\n", + " 0.8\n", + " 0.777778\n", + " 0.8\n", + " 1.000000\n", + " 0.800000\n", + " 1.000000\n", + " 0.800000\n", + " \n", + " \n", + " e64l6vq\n", + " 0.0\n", + " 2.0\n", + " 0.0\n", + " 5.0\n", + " 0.0\n", + " 5.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.500000\n", + " 0.666667\n", + " 0.500000\n", + " 0.666667\n", + " 0.500000\n", + " 0.666667\n", + " 0.500000\n", + " 0.500000\n", + " 0.333333\n", + " 0.666667\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 0.0\n", + " 4.0\n", + " 0.0\n", + " 4.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 2.0\n", + " 0.0\n", + " 2.0\n", + " 1.0\n", + " 4.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 4.0\n", + " 1.332179\n", + " 1.277034\n", + " 1.560710\n", + " 1.676988\n", + " 1.560710\n", + " 1.676988\n", + " 1.332179\n", + " 1.747868\n", + " 1.242453\n", + " 1.676988\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 3.0\n", + " 2.0\n", + " 3.0\n", + " 2.0\n", + " 3.0\n", + " 2.0\n", + " 2.0\n", + " 3.0\n", + " 3.0\n", + " 1.250000\n", + " 1.750000\n", + " 1.200000\n", + " 1.500000\n", + " 1.200000\n", + " 1.500000\n", + " 1.250000\n", + " 1.166667\n", + " 1.500000\n", + " 1.500000\n", + " 0.833333\n", + " 1.166667\n", + " 0.666667\n", + " 0.9\n", + " 0.666667\n", + " 0.9\n", + " 0.833333\n", + " 1.166667\n", + " 1.000000\n", + " 1.500000\n", + " 0.200000\n", + " 0.285714\n", + " 0.166667\n", + " 0.222222\n", + " 0.166667\n", + " 0.222222\n", + " 0.200000\n", + " 0.142857\n", + " 0.166667\n", + " 0.222222\n", + " 0.400000\n", + " 0.428571\n", + " 0.333333\n", + " 0.333333\n", + " 0.333333\n", + " 0.333333\n", + " 0.400000\n", + " 0.285714\n", + " 0.500000\n", + " 0.333333\n", + " 0.250000\n", + " 0.500000\n", + " 0.200000\n", + " 0.333333\n", + " 0.200000\n", + " 0.333333\n", + " 0.250000\n", + " 0.166667\n", + " 0.250000\n", + " 0.333333\n", + " 0.666667\n", + " 0.666667\n", + " 0.555556\n", + " 0.6\n", + " 0.555556\n", + " 0.6\n", + " 0.666667\n", + " 1.000000\n", + " 0.666667\n", + " 1.000000\n", + " \n", + " \n", + " e6fjx0d\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 0.0\n", + " 2.0\n", + " 1.000000\n", + " 0.500000\n", + " 1.000000\n", + " 0.500000\n", + " 1.000000\n", + " 0.500000\n", + " 1.000000\n", + " 0.500000\n", + " 0.750000\n", + " 1.000000\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 3.0\n", + " 4.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 6.0\n", + " 6.0\n", + " 0.693147\n", + " 1.039721\n", + " 1.945910\n", + " 2.043192\n", + " 1.945910\n", + " 2.043192\n", + " 0.693147\n", + " 1.039721\n", + " 0.682908\n", + " 0.964963\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 4.0\n", + " 4.0\n", + " 1.000000\n", + " 1.333333\n", + " 1.000000\n", + " 1.125000\n", + " 1.000000\n", + " 1.125000\n", + " 1.000000\n", + " 1.333333\n", + " 3.500000\n", + " 3.000000\n", + " 0.666667\n", + " 1.000000\n", + " 0.777778\n", + " 0.9\n", + " 0.777778\n", + " 0.9\n", + " 0.666667\n", + " 1.000000\n", + " 2.333333\n", + " 2.250000\n", + " 0.500000\n", + " 0.250000\n", + " 0.142857\n", + " 0.111111\n", + " 0.142857\n", + " 0.111111\n", + " 0.500000\n", + " 0.250000\n", + " 0.428571\n", + " 0.444444\n", + " 0.500000\n", + " 0.500000\n", + " 0.142857\n", + " 0.222222\n", + " 0.142857\n", + " 0.222222\n", + " 0.500000\n", + " 0.500000\n", + " 0.571429\n", + " 0.444444\n", + " 0.000000\n", + " 0.333333\n", + " 0.000000\n", + " 0.125000\n", + " 0.000000\n", + " 0.125000\n", + " 0.000000\n", + " 0.333333\n", + " 1.000000\n", + " 0.666667\n", + " 0.666667\n", + " 0.750000\n", + " 0.777778\n", + " 0.8\n", + " 0.777778\n", + " 0.8\n", + " 0.666667\n", + " 0.750000\n", + " 0.666667\n", + " 0.750000\n", + " \n", + " \n", + " e5h3xyy\n", + " 0.0\n", + " 5.0\n", + " 0.0\n", + " 5.0\n", + " 0.0\n", + " 5.0\n", + " 4.0\n", + " 1.0\n", + " 4.0\n", + " 1.0\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 1.000000\n", + " 0.500000\n", + " 1.000000\n", + " 0.500000\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 4.0\n", + " 0.0\n", + " 4.0\n", + " 0.0\n", + " 4.0\n", + " 0.0\n", + " 2.0\n", + " 5.0\n", + " 2.0\n", + " 5.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 4.0\n", + " 1.0\n", + " 7.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.332179\n", + " 1.427061\n", + " 1.332179\n", + " 1.427061\n", + " 1.332179\n", + " 1.427061\n", + " 1.609438\n", + " 2.043192\n", + " 1.609438\n", + " 2.043192\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 4.0\n", + " 2.0\n", + " 4.0\n", + " 2.0\n", + " 4.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.250000\n", + " 1.800000\n", + " 1.250000\n", + " 1.800000\n", + " 1.250000\n", + " 1.800000\n", + " 1.000000\n", + " 1.125000\n", + " 1.000000\n", + " 1.125000\n", + " 0.625000\n", + " 1.000000\n", + " 0.555556\n", + " 0.9\n", + " 0.555556\n", + " 0.9\n", + " 0.625000\n", + " 1.000000\n", + " 0.625000\n", + " 1.000000\n", + " 0.200000\n", + " 0.222222\n", + " 0.200000\n", + " 0.222222\n", + " 0.200000\n", + " 0.222222\n", + " 0.200000\n", + " 0.111111\n", + " 0.200000\n", + " 0.111111\n", + " 0.400000\n", + " 0.444444\n", + " 0.400000\n", + " 0.444444\n", + " 0.400000\n", + " 0.444444\n", + " 0.200000\n", + " 0.222222\n", + " 0.200000\n", + " 0.222222\n", + " 0.250000\n", + " 0.400000\n", + " 0.250000\n", + " 0.400000\n", + " 0.250000\n", + " 0.400000\n", + " 0.000000\n", + " 0.125000\n", + " 0.000000\n", + " 0.125000\n", + " 0.500000\n", + " 0.555556\n", + " 0.444444\n", + " 0.5\n", + " 0.444444\n", + " 0.5\n", + " 0.625000\n", + " 0.888889\n", + " 0.625000\n", + " 0.888889\n", + " \n", + " \n", + " e589ri5\n", + " 4.0\n", + " 2.0\n", + " 4.0\n", + " 2.0\n", + " 4.0\n", + " 2.0\n", + " 6.0\n", + " 2.0\n", + " 6.0\n", + " 2.0\n", + " 1.000000\n", + " 0.166667\n", + " 1.000000\n", + " 0.166667\n", + " 1.000000\n", + " 0.166667\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 4.0\n", + " 1.0\n", + " 4.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 3.0\n", + " 0.0\n", + " 15.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.098612\n", + " 1.002718\n", + " 1.098612\n", + " 1.002718\n", + " 1.098612\n", + " 1.002718\n", + " 1.098612\n", + " 2.197225\n", + " 1.098612\n", + " 2.197225\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 6.0\n", + " 1.0\n", + " 6.0\n", + " 1.0\n", + " 6.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.000000\n", + " 2.250000\n", + " 1.000000\n", + " 2.250000\n", + " 1.000000\n", + " 2.250000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.333333\n", + " 0.900000\n", + " 0.333333\n", + " 0.9\n", + " 0.333333\n", + " 0.9\n", + " 0.333333\n", + " 0.900000\n", + " 0.333333\n", + " 0.900000\n", + " 0.333333\n", + " 0.111111\n", + " 0.333333\n", + " 0.111111\n", + " 0.333333\n", + " 0.111111\n", + " 0.333333\n", + " 0.111111\n", + " 0.333333\n", + " 0.111111\n", + " 0.333333\n", + " 0.666667\n", + " 0.333333\n", + " 0.666667\n", + " 0.333333\n", + " 0.666667\n", + " 0.333333\n", + " 0.111111\n", + " 0.333333\n", + " 0.111111\n", + " 0.000000\n", + " 0.250000\n", + " 0.000000\n", + " 0.250000\n", + " 0.000000\n", + " 0.250000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.333333\n", + " 0.400000\n", + " 0.333333\n", + " 0.4\n", + " 0.333333\n", + " 0.4\n", + " 0.333333\n", + " 0.900000\n", + " 0.333333\n", + " 0.900000\n", + " \n", + " \n", + " e5beuqa\n", + " 0.0\n", + " 0.0\n", + " 2.0\n", + " 0.0\n", + " 2.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.250000\n", + " 0.500000\n", + " 0.333333\n", + " 0.666667\n", + " 0.333333\n", + " 0.666667\n", + " 0.333333\n", + " 0.500000\n", + " 0.333333\n", + " 0.500000\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 3.0\n", + " 3.0\n", + " 1.0\n", + " 4.0\n", + " 6.0\n", + " 7.0\n", + " 3.0\n", + " 7.0\n", + " 3.0\n", + " 3.0\n", + " 1.153742\n", + " 1.427061\n", + " 1.475076\n", + " 1.676988\n", + " 1.475076\n", + " 1.676988\n", + " 1.475076\n", + " 1.427061\n", + " 1.475076\n", + " 1.427061\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 4.0\n", + " 4.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 3.0\n", + " 4.0\n", + " 3.0\n", + " 4.0\n", + " 1.750000\n", + " 1.800000\n", + " 1.400000\n", + " 1.500000\n", + " 1.400000\n", + " 1.500000\n", + " 1.400000\n", + " 1.800000\n", + " 1.400000\n", + " 1.800000\n", + " 1.400000\n", + " 1.500000\n", + " 0.777778\n", + " 0.9\n", + " 0.777778\n", + " 0.9\n", + " 1.400000\n", + " 1.500000\n", + " 1.400000\n", + " 1.500000\n", + " 0.142857\n", + " 0.222222\n", + " 0.142857\n", + " 0.222222\n", + " 0.142857\n", + " 0.222222\n", + " 0.142857\n", + " 0.222222\n", + " 0.142857\n", + " 0.222222\n", + " 0.571429\n", + " 0.444444\n", + " 0.428571\n", + " 0.333333\n", + " 0.428571\n", + " 0.333333\n", + " 0.428571\n", + " 0.444444\n", + " 0.428571\n", + " 0.444444\n", + " 0.250000\n", + " 0.400000\n", + " 0.200000\n", + " 0.333333\n", + " 0.200000\n", + " 0.333333\n", + " 0.200000\n", + " 0.400000\n", + " 0.200000\n", + " 0.400000\n", + " 0.800000\n", + " 0.833333\n", + " 0.555556\n", + " 0.6\n", + " 0.555556\n", + " 0.6\n", + " 1.000000\n", + " 0.833333\n", + " 1.000000\n", + " 0.833333\n", + " \n", + " \n", + " e5lqoj1\n", + " 4.0\n", + " 1.0\n", + " 4.0\n", + " 1.0\n", + " 4.0\n", + " 1.0\n", + " 5.0\n", + " 1.0\n", + " 5.0\n", + " 6.0\n", + " 1.000000\n", + " 0.200000\n", + " 1.000000\n", + " 0.200000\n", + " 1.000000\n", + " 0.200000\n", + " 0.500000\n", + " 0.333333\n", + " 1.000000\n", + " 0.666667\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 4.0\n", + " 5.0\n", + " 4.0\n", + " 5.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 2.0\n", + " 0.0\n", + " 10.0\n", + " 1.0\n", + " 3.0\n", + " 2.0\n", + " 2.0\n", + " 1.098612\n", + " 1.073543\n", + " 1.386294\n", + " 1.303092\n", + " 1.386294\n", + " 1.303092\n", + " 0.636514\n", + " 1.667462\n", + " 0.693147\n", + " 1.676988\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 5.0\n", + " 1.0\n", + " 5.0\n", + " 1.0\n", + " 5.0\n", + " 2.0\n", + " 3.0\n", + " 2.0\n", + " 3.0\n", + " 1.000000\n", + " 2.000000\n", + " 1.000000\n", + " 1.800000\n", + " 1.000000\n", + " 1.800000\n", + " 1.500000\n", + " 1.333333\n", + " 2.000000\n", + " 1.500000\n", + " 0.500000\n", + " 1.142857\n", + " 0.444444\n", + " 0.9\n", + " 0.444444\n", + " 0.9\n", + " 0.500000\n", + " 1.142857\n", + " 0.666667\n", + " 1.285714\n", + " 0.333333\n", + " 0.125000\n", + " 0.250000\n", + " 0.111111\n", + " 0.250000\n", + " 0.111111\n", + " 0.333333\n", + " 0.125000\n", + " 0.500000\n", + " 0.222222\n", + " 0.333333\n", + " 0.625000\n", + " 0.250000\n", + " 0.555556\n", + " 0.250000\n", + " 0.555556\n", + " 0.666667\n", + " 0.375000\n", + " 0.500000\n", + " 0.333333\n", + " 0.000000\n", + " 0.250000\n", + " 0.000000\n", + " 0.200000\n", + " 0.000000\n", + " 0.200000\n", + " 0.500000\n", + " 0.166667\n", + " 1.000000\n", + " 0.333333\n", + " 0.500000\n", + " 0.571429\n", + " 0.444444\n", + " 0.5\n", + " 0.444444\n", + " 0.5\n", + " 0.333333\n", + " 0.857143\n", + " 0.333333\n", + " 0.857143\n", + " \n", + " \n", + " e5kvch1\n", + " 1.0\n", + " 4.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 4.0\n", + " 1.0\n", + " 3.0\n", + " 0.500000\n", + " 0.666667\n", + " 1.000000\n", + " 0.333333\n", + " 1.000000\n", + " 0.333333\n", + " 1.000000\n", + " 1.000000\n", + " 0.500000\n", + " 1.000000\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 3.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 1.0\n", + " 3.0\n", + " 1.0\n", + " 4.0\n", + " 0.0\n", + " 2.0\n", + " 3.0\n", + " 3.0\n", + " 1.332179\n", + " 1.494175\n", + " 1.791759\n", + " 1.831020\n", + " 1.791759\n", + " 1.831020\n", + " 1.609438\n", + " 1.732868\n", + " 1.560710\n", + " 1.735126\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 3.0\n", + " 1.0\n", + " 3.0\n", + " 1.0\n", + " 3.0\n", + " 1.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 1.250000\n", + " 1.600000\n", + " 1.000000\n", + " 1.285714\n", + " 1.000000\n", + " 1.285714\n", + " 1.000000\n", + " 1.333333\n", + " 1.200000\n", + " 1.500000\n", + " 0.833333\n", + " 1.142857\n", + " 0.666667\n", + " 0.9\n", + " 0.666667\n", + " 0.9\n", + " 0.833333\n", + " 1.142857\n", + " 1.000000\n", + " 1.285714\n", + " 0.200000\n", + " 0.250000\n", + " 0.166667\n", + " 0.111111\n", + " 0.166667\n", + " 0.111111\n", + " 0.200000\n", + " 0.250000\n", + " 0.166667\n", + " 0.222222\n", + " 0.400000\n", + " 0.375000\n", + " 0.166667\n", + " 0.333333\n", + " 0.166667\n", + " 0.333333\n", + " 0.200000\n", + " 0.250000\n", + " 0.333333\n", + " 0.222222\n", + " 0.250000\n", + " 0.400000\n", + " 0.000000\n", + " 0.142857\n", + " 0.000000\n", + " 0.142857\n", + " 0.000000\n", + " 0.333333\n", + " 0.200000\n", + " 0.500000\n", + " 0.666667\n", + " 0.714286\n", + " 0.666667\n", + " 0.7\n", + " 0.666667\n", + " 0.7\n", + " 0.833333\n", + " 0.857143\n", + " 0.833333\n", + " 0.857143\n", " \n", " \n", - " e65ca8k\n", + " e6srvwm\n", " 2.0\n", - " 0.0\n", - " 0.222222\n", " 1.0\n", " 2.0\n", - " 0.111111\n", - " 0.9\n", - " 1.125000\n", - " 0.8\n", - " 0.125000\n", - " 2.043192\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.000000\n", + " 0.666667\n", + " 1.000000\n", + " 0.666667\n", + " 1.000000\n", + " 0.666667\n", + " 1.000000\n", " 0.500000\n", - " 8.0\n", + " 1.000000\n", + " 0.500000\n", + " 2.0\n", + " 2.0\n", " 2.0\n", + " 2.0\n", + " 2.0\n", + " 2.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", " 0.0\n", " 0.0\n", - " 0.888889\n", - " 0.222222\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", " 1.0\n", " 1.0\n", " 1.0\n", + " 1.0\n", + " 5.0\n", " 2.0\n", - " 0.111111\n", - " 0.111111\n", - " 4.500000\n", - " 0.9\n", - " 4.500000\n", + " 5.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.329661\n", + " 1.522955\n", + " 1.329661\n", + " 1.522955\n", + " 1.329661\n", + " 1.522955\n", + " 1.791759\n", + " 2.043192\n", + " 1.791759\n", + " 2.043192\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 2.0\n", + " 3.0\n", + " 2.0\n", + " 3.0\n", + " 2.0\n", + " 3.0\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " 1.500000\n", + " 1.800000\n", + " 1.500000\n", + " 1.800000\n", + " 1.500000\n", + " 1.800000\n", + " 1.000000\n", " 1.125000\n", " 1.000000\n", - " 0.8\n", + " 1.125000\n", + " 0.750000\n", + " 1.000000\n", + " 0.666667\n", + " 0.9\n", + " 0.666667\n", + " 0.9\n", + " 0.750000\n", + " 1.000000\n", + " 0.750000\n", + " 1.000000\n", + " 0.333333\n", + " 0.222222\n", + " 0.333333\n", + " 0.222222\n", + " 0.333333\n", + " 0.222222\n", + " 0.166667\n", + " 0.111111\n", + " 0.166667\n", + " 0.111111\n", + " 0.333333\n", + " 0.333333\n", + " 0.333333\n", + " 0.333333\n", + " 0.333333\n", + " 0.333333\n", + " 0.166667\n", + " 0.222222\n", + " 0.166667\n", + " 0.222222\n", + " 0.500000\n", + " 0.600000\n", " 0.500000\n", + " 0.600000\n", + " 0.500000\n", + " 0.600000\n", + " 0.000000\n", " 0.125000\n", - " 0.348832\n", - " 2.043192\n", + " 0.000000\n", " 0.125000\n", " 0.500000\n", + " 0.555556\n", + " 0.444444\n", + " 0.5\n", + " 0.444444\n", + " 0.5\n", + " 0.750000\n", + " 0.888889\n", + " 0.750000\n", + " 0.888889\n", + " \n", + " \n", + " e5o65mk\n", " 1.0\n", - " 2.0\n", - " 0.0\n", - " 0.0\n", - " 0.500000\n", - " 1.000000\n", " 1.0\n", - " 0.0\n", " 1.0\n", " 1.0\n", - " 0.500000\n", - " 0.000000\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.0\n", + " 1.0\n", + " 1.000000\n", " 1.000000\n", " 1.000000\n", " 1.000000\n", - " 2.000000\n", " 1.000000\n", " 0.500000\n", - " 0.000000\n", " 1.000000\n", - " 0.693147\n", - " 0.000000\n", " 1.000000\n", - " 0.000000\n", + " 0.750000\n", + " 1.000000\n", " 1.0\n", - " 7.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 3.0\n", + " 4.0\n", + " 0.0\n", + " 0.0\n", " 0.0\n", " 0.0\n", " 0.0\n", " 0.0\n", - " 1.0\n", - " 1.0\n", " 0.0\n", " 0.0\n", " 1.0\n", + " 0.0\n", " 1.0\n", - " 0.142857\n", " 1.0\n", - " 2.0\n", - " 0.142857\n", - " 0.777778\n", - " 1.000000\n", - " 0.777778\n", - " 0.000000\n", - " 1.945910\n", - " 1.000000\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 5.0\n", " 7.0\n", + " 0.693147\n", + " 0.693147\n", + " 1.945910\n", + " 2.079442\n", + " 1.945910\n", + " 2.043192\n", + " 0.693147\n", + " 0.693147\n", + " 0.682908\n", + " 0.693147\n", " 1.0\n", " 1.0\n", - " 1.0\n", - " 1.000000\n", - " 0.142857\n", " 0.0\n", - " 1.0\n", " 0.0\n", - " 2.0\n", - " 0.000000\n", - " 0.142857\n", - " 3.500000\n", - " 0.777778\n", - " 7.000000\n", - " 1.000000\n", - " 0.500000\n", - " 0.777778\n", - " 1.000000\n", - " 0.000000\n", - " 0.000000\n", - " 1.945910\n", " 0.0\n", - " 1.000000\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", " 1.0\n", " 1.0\n", " 1.0\n", + " 2.0\n", + " 1.0\n", " 1.0\n", + " 4.0\n", + " 4.0\n", " 1.000000\n", " 1.000000\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.000000\n", - " 0.000000\n", - " 0.500000\n", - " 0.500000\n", " 1.000000\n", " 1.000000\n", + " 1.000000\n", + " 1.125000\n", + " 1.000000\n", + " 1.000000\n", + " 3.500000\n", + " 4.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.777778\n", + " 0.8\n", + " 0.777778\n", + " 0.9\n", + " 1.000000\n", + " 1.000000\n", + " 3.500000\n", + " 4.000000\n", + " 0.500000\n", + " 0.500000\n", + " 0.142857\n", + " 0.125000\n", + " 0.142857\n", + " 0.111111\n", + " 0.500000\n", + " 0.500000\n", + " 0.428571\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", + " 0.142857\n", + " 0.125000\n", + " 0.142857\n", + " 0.222222\n", " 0.500000\n", " 0.500000\n", + " 0.571429\n", + " 0.500000\n", " 0.000000\n", " 0.000000\n", " 0.000000\n", " 0.000000\n", - " 0.0\n", " 0.000000\n", - " 1.0\n", - " 6.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", + " 0.125000\n", + " 0.000000\n", + " 0.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.777778\n", + " 0.8\n", + " 0.777778\n", + " 0.8\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", " \n", " \n", - " e6cdkpy\n", - " 4.0\n", - " 0.0\n", - " 0.444444\n", - " 2.0\n", + " e647cm8\n", + " 1.0\n", + " 1.0\n", " 1.0\n", - " 0.222222\n", - " 0.9\n", - " 2.250000\n", - " 0.4\n", - " 0.750000\n", - " 1.273028\n", - " 0.500000\n", " 1.0\n", - " 4.0\n", " 1.0\n", - " 0.0\n", - " 0.111111\n", - " 0.444444\n", " 1.0\n", " 2.0\n", + " 1.0\n", " 2.0\n", " 1.0\n", - " 0.111111\n", - " 0.222222\n", - " 0.900000\n", - " 0.9\n", - " 1.000000\n", - " 2.250000\n", - " 0.900000\n", - " 0.4\n", - " 0.000000\n", + " 0.333333\n", + " 0.750000\n", + " 0.333333\n", + " 0.750000\n", + " 0.333333\n", " 0.750000\n", - " 2.197225\n", - " 1.273028\n", " 1.000000\n", - " 0.500000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", " 1.0\n", - " 4.0\n", + " 3.0\n", + " 1.0\n", + " 3.0\n", + " 1.0\n", + " 3.0\n", " 1.0\n", - " 0.0\n", - " 0.111111\n", - " 0.444444\n", " 1.0\n", - " 2.0\n", - " 2.0\n", " 1.0\n", - " 0.111111\n", - " 0.222222\n", - " 0.900000\n", - " 0.900000\n", - " 1.000000\n", - " 2.250000\n", - " 0.900000\n", - " 0.400000\n", - " 0.000000\n", - " 0.750000\n", - " 2.197225\n", - " 1.273028\n", - " 1.000000\n", - " 0.500000\n", - " 0.0\n", - " 0.0\n", " 1.0\n", - " 5.0\n", " 0.0\n", " 0.0\n", - " 1.0\n", - " 8.0\n", " 0.0\n", " 0.0\n", - " 2.0\n", " 0.0\n", - " 0.400000\n", - " 2.0\n", + " 0.0\n", " 1.0\n", - " 0.400000\n", - " 0.555556\n", - " 1.666667\n", - " 0.333333\n", - " 0.666667\n", - " 1.054920\n", - " 1.000000\n", + " 0.0\n", " 1.0\n", - " 2.0\n", - " 2.0\n", " 0.0\n", - " 0.200000\n", - " 0.400000\n", + " 0.0\n", " 1.0\n", - " 2.0\n", + " 1.0\n", + " 4.0\n", " 3.0\n", + " 9.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", " 1.0\n", - " 0.200000\n", - " 0.400000\n", - " 0.555556\n", - " 0.555556\n", - " 1.000000\n", - " 1.666667\n", - " 0.555556\n", - " 0.333333\n", - " 0.000000\n", - " 0.666667\n", + " 0.950271\n", + " 1.214890\n", + " 0.950271\n", + " 1.214890\n", + " 0.950271\n", + " 1.214890\n", " 1.609438\n", - " 1.054920\n", - " 1.0\n", - " 1.000000\n", - " 1.0\n", - " 2.0\n", - " 2.0\n", + " 2.197225\n", + " 1.609438\n", + " 2.197225\n", " 0.0\n", - " 0.200000\n", - " 0.400000\n", " 1.0\n", - " 2.0\n", - " 3.0\n", " 1.0\n", - " 0.200000\n", - " 0.400000\n", - " 0.555556\n", - " 0.555556\n", - " 1.000000\n", - " 1.666667\n", - " 0.555556\n", - " 0.333333\n", - " 0.000000\n", - " 0.666667\n", - " 1.609438\n", - " 1.054920\n", " 1.0\n", - " 1.000000\n", - " 0.0\n", - " 0.0\n", " 1.0\n", " 1.0\n", " 0.0\n", " 0.0\n", - " 1.0\n", - " 2.0\n", " 0.0\n", - " 0.0\n", - " \n", - " \n", - " e5wc4tj\n", " 1.0\n", - " 0.0\n", - " 0.111111\n", + " 3.0\n", + " 4.0\n", + " 3.0\n", + " 4.0\n", + " 3.0\n", + " 4.0\n", " 1.0\n", " 1.0\n", - " 0.111111\n", - " 0.9\n", + " 1.0\n", + " 1.0\n", + " 1.666667\n", + " 2.250000\n", + " 1.666667\n", + " 2.250000\n", + " 1.666667\n", + " 2.250000\n", + " 1.000000\n", " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.555556\n", + " 1.000000\n", + " 0.555556\n", " 0.9\n", - " 0.000000\n", - " 2.197225\n", + " 0.555556\n", + " 0.9\n", + " 0.555556\n", " 1.000000\n", - " 5.0\n", - " 1.0\n", - " 1.0\n", - " 0.0\n", " 0.555556\n", + " 1.000000\n", + " 0.200000\n", + " 0.333333\n", + " 0.200000\n", + " 0.333333\n", + " 0.200000\n", + " 0.333333\n", + " 0.200000\n", " 0.111111\n", - " 4.0\n", - " 1.0\n", - " 0.0\n", - " 1.0\n", + " 0.200000\n", + " 0.111111\n", + " 0.600000\n", + " 0.444444\n", + " 0.600000\n", + " 0.444444\n", + " 0.600000\n", + " 0.444444\n", + " 0.200000\n", + " 0.111111\n", + " 0.200000\n", + " 0.111111\n", + " 0.333333\n", + " 0.500000\n", + " 0.333333\n", + " 0.500000\n", + " 0.333333\n", + " 0.500000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.333333\n", " 0.444444\n", - " 0.111111\n", - " 4.500000\n", - " 0.9\n", - " 4.500000\n", - " 1.000000\n", - " 1.000000\n", - " 0.9\n", + " 0.333333\n", + " 0.4\n", + " 0.333333\n", + " 0.4\n", + " 0.555556\n", " 1.000000\n", - " 0.000000\n", - " 0.686962\n", - " 2.197225\n", - " 0.800000\n", + " 0.555556\n", " 1.000000\n", + " \n", + " \n", + " e58n526\n", " 1.0\n", " 1.0\n", - " 0.0\n", - " 0.0\n", - " 0.500000\n", - " 0.500000\n", " 1.0\n", " 1.0\n", " 1.0\n", " 1.0\n", - " 0.500000\n", - " 0.500000\n", - " 1.000000\n", - " 1.000000\n", - " 1.000000\n", - " 1.000000\n", - " 1.000000\n", - " 1.000000\n", + " 1.0\n", + " 2.0\n", + " 1.0\n", + " 2.0\n", + " NaN\n", " 0.000000\n", + " NaN\n", " 0.000000\n", - " 0.693147\n", - " 0.693147\n", + " NaN\n", + " 0.000000\n", + " NaN\n", " 1.000000\n", + " NaN\n", " 1.000000\n", - " 1.0\n", - " 8.0\n", " 0.0\n", " 0.0\n", - " 1.0\n", - " 1.0\n", " 0.0\n", " 0.0\n", " 0.0\n", " 0.0\n", - " 1.0\n", " 0.0\n", - " 0.125000\n", " 1.0\n", - " 1.0\n", - " 0.125000\n", - " 0.888889\n", - " 1.000000\n", - " 0.888889\n", - " 0.000000\n", - " 2.079442\n", - " 1.000000\n", - " 4.0\n", + " 0.0\n", " 1.0\n", " 0.0\n", " 0.0\n", - " 0.500000\n", - " 0.125000\n", - " 4.0\n", - " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", " 1.0\n", + " 0.0\n", " 1.0\n", - " 0.500000\n", - " 0.125000\n", - " 4.000000\n", - " 0.888889\n", - " 4.000000\n", - " 1.000000\n", - " 1.000000\n", - " 0.888889\n", - " 1.000000\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 36.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " NaN\n", " 0.000000\n", - " 0.693147\n", - " 2.079442\n", - " 1.0\n", - " 1.000000\n", - " 1.0\n", - " 1.0\n", + " NaN\n", + " 0.000000\n", + " NaN\n", + " 0.000000\n", + " NaN\n", + " 2.197225\n", + " NaN\n", + " 2.197225\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", " 0.0\n", " 0.0\n", - " 0.500000\n", - " 0.500000\n", - " 1.0\n", " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 9.0\n", + " 0.0\n", + " 9.0\n", + " 0.0\n", + " 9.0\n", + " 0.0\n", " 1.0\n", + " 0.0\n", " 1.0\n", - " 0.500000\n", - " 0.500000\n", + " 0.000000\n", + " 9.000000\n", + " 0.000000\n", + " 9.000000\n", + " 0.000000\n", + " 9.000000\n", + " 0.000000\n", " 1.000000\n", + " 0.000000\n", " 1.000000\n", + " 0.000000\n", + " 0.900000\n", + " 0.000000\n", + " 0.9\n", + " 0.000000\n", + " 0.9\n", + " 0.000000\n", + " 0.900000\n", + " 0.000000\n", + " 0.900000\n", + " NaN\n", + " 0.000000\n", + " NaN\n", + " 0.000000\n", + " NaN\n", + " 0.000000\n", + " NaN\n", + " 0.111111\n", + " NaN\n", + " 0.111111\n", + " 0.000000\n", " 1.000000\n", + " 0.000000\n", " 1.000000\n", + " 0.000000\n", " 1.000000\n", + " 0.000000\n", + " 0.111111\n", + " 0.000000\n", + " 0.111111\n", + " 0.000000\n", " 1.000000\n", " 0.000000\n", + " 1.000000\n", " 0.000000\n", - " 0.693147\n", - " 0.693147\n", - " 1.0\n", " 1.000000\n", - " 1.0\n", - " 7.0\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.100000\n", + " 0.000000\n", + " 0.1\n", + " 0.000000\n", + " 0.1\n", + " 0.000000\n", + " 0.900000\n", + " 0.000000\n", + " 0.900000\n", + " \n", + " \n", + " e69r2kg\n", " 0.0\n", " 0.0\n", + " 4.0\n", " 1.0\n", - " 1.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " \n", - " \n", - " e6ua0sb\n", " 4.0\n", - " 2.0\n", - " 0.444444\n", - " 2.0\n", + " 1.0\n", + " 1.0\n", " 0.0\n", - " 0.222222\n", - " 0.9\n", - " 1.800000\n", - " 0.5\n", - " 0.400000\n", - " 1.427061\n", - " 0.500000\n", - " 3.0\n", - " 4.0\n", - " 2.0\n", - " 2.0\n", - " 0.333333\n", - " 0.444444\n", - " 2.0\n", - " 2.0\n", " 1.0\n", " 0.0\n", - " 0.222222\n", - " 0.222222\n", - " 1.800000\n", - " 0.9\n", - " 1.800000\n", - " 1.800000\n", - " 1.000000\n", - " 0.5\n", - " 0.600000\n", - " 0.400000\n", - " 1.522955\n", - " 1.427061\n", " 0.666667\n", + " 0.666667\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 1.000000\n", + " 0.500000\n", + " 0.500000\n", + " 0.500000\n", " 0.500000\n", " 2.0\n", - " 4.0\n", " 2.0\n", - " 0.0\n", - " 0.285714\n", - " 0.571429\n", " 2.0\n", - " 1.0\n", - " 4.0\n", - " 1.0\n", - " 0.285714\n", - " 0.142857\n", - " 1.400000\n", - " 1.400000\n", - " 1.400000\n", - " 1.750000\n", - " 1.000000\n", - " 0.800000\n", - " 0.400000\n", - " 0.250000\n", - " 1.549826\n", - " 1.153742\n", - " 1.000000\n", - " 0.250000\n", - " 1.0\n", - " 3.0\n", - " 1.0\n", - " 4.0\n", - " 1.0\n", + " 2.0\n", + " 2.0\n", " 2.0\n", " 1.0\n", - " 6.0\n", " 1.0\n", - " 2.0\n", - " 4.0\n", " 1.0\n", - " 0.571429\n", " 1.0\n", - " 0.0\n", - " 0.142857\n", - " 0.777778\n", - " 1.750000\n", - " 0.444444\n", - " 0.250000\n", - " 1.153742\n", - " 0.250000\n", " 2.0\n", - " 4.0\n", - " 2.0\n", - " 1.0\n", - " 0.285714\n", - " 0.571429\n", " 2.0\n", - " 1.0\n", - " 4.0\n", " 0.0\n", - " 0.285714\n", - " 0.142857\n", - " 1.400000\n", - " 0.777778\n", - " 1.400000\n", - " 1.750000\n", - " 1.000000\n", - " 0.444444\n", - " 0.400000\n", - " 0.250000\n", - " 1.549826\n", - " 1.153742\n", - " 1.0\n", - " 0.250000\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", " 2.0\n", - " 4.0\n", " 2.0\n", - " 1.0\n", - " 0.285714\n", - " 0.571429\n", " 2.0\n", - " 1.0\n", - " 4.0\n", - " 0.0\n", - " 0.285714\n", - " 0.142857\n", - " 1.400000\n", - " 1.400000\n", - " 1.400000\n", - " 1.750000\n", - " 1.000000\n", - " 0.800000\n", - " 0.400000\n", - " 0.250000\n", - " 1.549826\n", - " 1.153742\n", - " 1.0\n", - " 0.250000\n", - " 1.0\n", " 2.0\n", " 1.0\n", + " 2.0\n", + " 4.0\n", + " 5.0\n", " 4.0\n", + " 5.0\n", " 1.0\n", - " 2.0\n", " 1.0\n", - " 6.0\n", " 1.0\n", " 2.0\n", - " \n", - " \n", - " e5ua84v\n", - " 3.0\n", + " 1.277034\n", + " 1.522955\n", + " 1.549826\n", + " 1.735126\n", + " 1.549826\n", + " 1.735126\n", + " 1.747868\n", + " 2.043192\n", + " 1.747868\n", + " 2.043192\n", " 1.0\n", - " 0.333333\n", - " 2.0\n", - " 5.0\n", - " 0.222222\n", - " 0.9\n", - " 1.500000\n", - " 0.6\n", - " 0.333333\n", - " 1.676988\n", - " 0.666667\n", - " 3.0\n", - " 3.0\n", " 1.0\n", " 1.0\n", - " 0.333333\n", - " 0.333333\n", - " 2.0\n", - " 2.0\n", - " 4.0\n", - " 5.0\n", - " 0.222222\n", - " 0.222222\n", - " 1.285714\n", - " 0.9\n", - " 1.500000\n", - " 1.500000\n", - " 0.857143\n", - " 0.6\n", - " 0.333333\n", - " 0.333333\n", - " 1.676988\n", - " 1.676988\n", - " 0.666667\n", - " 0.666667\n", - " 3.0\n", - " 4.0\n", " 1.0\n", " 1.0\n", - " 0.333333\n", - " 0.444444\n", - " 2.0\n", - " 2.0\n", - " 4.0\n", - " 4.0\n", - " 0.222222\n", - " 0.222222\n", - " 1.285714\n", - " 1.285714\n", - " 1.500000\n", - " 1.800000\n", - " 0.857143\n", - " 0.714286\n", - " 0.333333\n", - " 0.400000\n", - " 1.676988\n", - " 1.427061\n", - " 0.666667\n", - " 0.500000\n", " 1.0\n", - " 3.0\n", " 1.0\n", - " 5.0\n", " 1.0\n", - " 3.0\n", " 1.0\n", - " 7.0\n", " 1.0\n", - " 4.0\n", " 3.0\n", - " 0.0\n", - " 0.375000\n", + " 3.0\n", " 2.0\n", - " 4.0\n", - " 0.250000\n", - " 0.888889\n", - " 1.600000\n", - " 0.555556\n", - " 0.400000\n", - " 1.494175\n", - " 0.666667\n", " 2.0\n", - " 3.0\n", - " 0.0\n", - " 0.0\n", - " 0.250000\n", - " 0.375000\n", " 2.0\n", " 2.0\n", - " 3.0\n", - " 4.0\n", - " 0.250000\n", - " 0.250000\n", - " 1.333333\n", - " 0.888889\n", - " 1.333333\n", - " 1.600000\n", - " 1.000000\n", - " 0.555556\n", - " 0.333333\n", - " 0.400000\n", - " 1.732868\n", - " 1.494175\n", - " 1.0\n", - " 0.666667\n", " 2.0\n", - " 4.0\n", - " 0.0\n", - " 0.0\n", - " 0.250000\n", - " 0.500000\n", " 2.0\n", " 2.0\n", - " 3.0\n", - " 3.0\n", - " 0.250000\n", - " 0.250000\n", - " 1.333333\n", - " 1.333333\n", - " 1.333333\n", - " 2.000000\n", - " 1.000000\n", - " 0.666667\n", + " 2.0\n", + " 1.750000\n", + " 1.800000\n", + " 1.400000\n", + " 1.500000\n", + " 1.400000\n", + " 1.500000\n", + " 1.166667\n", + " 1.125000\n", + " 1.166667\n", + " 1.125000\n", + " 0.875000\n", + " 1.125000\n", + " 0.777778\n", + " 0.9\n", + " 0.777778\n", + " 0.9\n", + " 0.875000\n", + " 1.125000\n", + " 0.875000\n", + " 1.125000\n", + " 0.285714\n", + " 0.222222\n", + " 0.285714\n", + " 0.222222\n", + " 0.285714\n", + " 0.222222\n", + " 0.142857\n", + " 0.111111\n", + " 0.142857\n", + " 0.111111\n", + " 0.428571\n", " 0.333333\n", + " 0.285714\n", + " 0.222222\n", + " 0.285714\n", + " 0.222222\n", + " 0.285714\n", + " 0.222222\n", + " 0.285714\n", + " 0.222222\n", " 0.500000\n", - " 1.732868\n", - " 1.213008\n", - " 1.0\n", + " 0.600000\n", + " 0.400000\n", " 0.500000\n", - " 1.0\n", - " 3.0\n", - " 1.0\n", - " 2.0\n", - " 1.0\n", - " 3.0\n", - " 1.0\n", - " 7.0\n", - " 1.0\n", - " 2.0\n", + " 0.400000\n", + " 0.500000\n", + " 0.166667\n", + " 0.125000\n", + " 0.166667\n", + " 0.125000\n", + " 0.500000\n", + " 0.625000\n", + " 0.555556\n", + " 0.6\n", + " 0.555556\n", + " 0.6\n", + " 0.750000\n", + " 1.000000\n", + " 0.750000\n", + " 1.000000\n", " \n", " \n", "\n", "

10000 rows × 140 columns

\n", "" - ], - "text/plain": [ - " max[indegree over c->c responses] \\\n", - "e5hm9mp 3.0 \n", - "e5ytz1d 3.0 \n", - "e6ls80j 4.0 \n", - "e5mhgl5 2.0 \n", - "e6w6fah 9.0 \n", - "... ... \n", - "e65ca8k 2.0 \n", - "e6cdkpy 4.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 4.0 \n", - "e5ua84v 3.0 \n", + ], + "text/plain": [ + " 2nd-argmax[indegree over C->C mid-thread responses] \\\n", + "e6p7yrp 0.0 \n", + "e5ywqyk 1.0 \n", + "e5qv9rj 0.0 \n", + "e6jhojf 0.0 \n", + "e6989ii 1.0 \n", + "e69lgse 2.0 \n", + "e5kwkg2 1.0 \n", + "e6mehe7 0.0 \n", + "e6m0hsd 1.0 \n", + "e64r385 3.0 \n", + "e5surbt 1.0 \n", + "e58gxii 4.0 \n", + "e64vc8y 2.0 \n", + "e57504g 1.0 \n", + "e5borjq 0.0 \n", + "e64n9zv 1.0 \n", + "e582ud3 5.0 \n", + "e64i9cf 0.0 \n", + "e6q9204 1.0 \n", + "e5modd7 0.0 \n", + "e5xhbyd 1.0 \n", + "e5oaf7h 1.0 \n", + "e6nir3u 1.0 \n", + "e6c3xdn 2.0 \n", + "e5d3zaa 1.0 \n", + "e5gnjv9 0.0 \n", + "e69gw2t 2.0 \n", + "e5syrih 1.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 1.0 \n", + "... ... \n", + "e5smhzk 1.0 \n", + "e5v91s0 0.0 \n", + "e6n6di6 0.0 \n", + "e6iqq30 1.0 \n", + "e5bfad7 1.0 \n", + "e6x5he5 2.0 \n", + "e6l9uyf 0.0 \n", + "e57hyr1 1.0 \n", + "e5b8sj7 1.0 \n", + "e6nlep7 1.0 \n", + "e6ltazd 4.0 \n", + "e57a6qq 1.0 \n", + "e5qc7eb 2.0 \n", + "e6hqt5y 2.0 \n", + "e5ua84v 3.0 \n", + "e65m7kq 2.0 \n", + "e5ggtru 3.0 \n", + "e5pmmig 2.0 \n", + "e64l6vq 0.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 0.0 \n", + "e589ri5 4.0 \n", + "e5beuqa 0.0 \n", + "e5lqoj1 4.0 \n", + "e5kvch1 1.0 \n", + "e6srvwm 2.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 1.0 \n", + "e58n526 1.0 \n", + "e69r2kg 0.0 \n", "\n", - " argmax[indegree over c->c responses] \\\n", - "e5hm9mp 1.0 \n", - "e5ytz1d 0.0 \n", - "e6ls80j 0.0 \n", - "e5mhgl5 1.0 \n", - "e6w6fah 0.0 \n", - "... ... \n", - "e65ca8k 0.0 \n", - "e6cdkpy 0.0 \n", - "e5wc4tj 0.0 \n", - "e6ua0sb 2.0 \n", - "e5ua84v 1.0 \n", + " 2nd-argmax[indegree over C->C responses] \\\n", + "e6p7yrp 1.0 \n", + "e5ywqyk 1.0 \n", + "e5qv9rj 3.0 \n", + "e6jhojf 1.0 \n", + "e6989ii 1.0 \n", + "e69lgse 2.0 \n", + "e5kwkg2 1.0 \n", + "e6mehe7 2.0 \n", + "e6m0hsd 0.0 \n", + "e64r385 2.0 \n", + "e5surbt 1.0 \n", + "e58gxii 4.0 \n", + "e64vc8y 1.0 \n", + "e57504g 1.0 \n", + "e5borjq 0.0 \n", + "e64n9zv 0.0 \n", + "e582ud3 1.0 \n", + "e64i9cf 2.0 \n", + "e6q9204 2.0 \n", + "e5modd7 1.0 \n", + "e5xhbyd 1.0 \n", + "e5oaf7h 0.0 \n", + "e6nir3u 1.0 \n", + "e6c3xdn 0.0 \n", + "e5d3zaa 1.0 \n", + "e5gnjv9 3.0 \n", + "e69gw2t 1.0 \n", + "e5syrih 2.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 1.0 \n", + "... ... \n", + "e5smhzk 1.0 \n", + "e5v91s0 2.0 \n", + "e6n6di6 1.0 \n", + "e6iqq30 1.0 \n", + "e5bfad7 1.0 \n", + "e6x5he5 1.0 \n", + "e6l9uyf 3.0 \n", + "e57hyr1 5.0 \n", + "e5b8sj7 0.0 \n", + "e6nlep7 1.0 \n", + "e6ltazd 0.0 \n", + "e57a6qq 0.0 \n", + "e5qc7eb 2.0 \n", + "e6hqt5y 1.0 \n", + "e5ua84v 4.0 \n", + "e65m7kq 2.0 \n", + "e5ggtru 4.0 \n", + "e5pmmig 3.0 \n", + "e64l6vq 2.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 5.0 \n", + "e589ri5 2.0 \n", + "e5beuqa 0.0 \n", + "e5lqoj1 1.0 \n", + "e5kvch1 4.0 \n", + "e6srvwm 1.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 1.0 \n", + "e58n526 1.0 \n", + "e69r2kg 0.0 \n", "\n", - " norm.max[indegree over c->c responses] \\\n", - "e5hm9mp 0.333333 \n", - "e5ytz1d 0.333333 \n", - "e6ls80j 0.444444 \n", - "e5mhgl5 0.222222 \n", - "e6w6fah 1.000000 \n", - "... ... \n", - "e65ca8k 0.222222 \n", - "e6cdkpy 0.444444 \n", - "e5wc4tj 0.111111 \n", - "e6ua0sb 0.444444 \n", - "e5ua84v 0.333333 \n", + " 2nd-argmax[indegree over C->c mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", + "e5ywqyk 1.0 \n", + "e5qv9rj 0.0 \n", + "e6jhojf 0.0 \n", + "e6989ii 1.0 \n", + "e69lgse 2.0 \n", + "e5kwkg2 1.0 \n", + "e6mehe7 0.0 \n", + "e6m0hsd 1.0 \n", + "e64r385 3.0 \n", + "e5surbt 1.0 \n", + "e58gxii 6.0 \n", + "e64vc8y 2.0 \n", + "e57504g 1.0 \n", + "e5borjq 0.0 \n", + "e64n9zv 0.0 \n", + "e582ud3 5.0 \n", + "e64i9cf 0.0 \n", + "e6q9204 1.0 \n", + "e5modd7 0.0 \n", + "e5xhbyd 1.0 \n", + "e5oaf7h 2.0 \n", + "e6nir3u 1.0 \n", + "e6c3xdn 2.0 \n", + "e5d3zaa 1.0 \n", + "e5gnjv9 0.0 \n", + "e69gw2t 4.0 \n", + "e5syrih 1.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 1.0 \n", + "... ... \n", + "e5smhzk 2.0 \n", + "e5v91s0 0.0 \n", + "e6n6di6 0.0 \n", + "e6iqq30 1.0 \n", + "e5bfad7 1.0 \n", + "e6x5he5 2.0 \n", + "e6l9uyf 0.0 \n", + "e57hyr1 1.0 \n", + "e5b8sj7 1.0 \n", + "e6nlep7 1.0 \n", + "e6ltazd 4.0 \n", + "e57a6qq 4.0 \n", + "e5qc7eb 2.0 \n", + "e6hqt5y 2.0 \n", + "e5ua84v 4.0 \n", + "e65m7kq 2.0 \n", + "e5ggtru 4.0 \n", + "e5pmmig 1.0 \n", + "e64l6vq 0.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 0.0 \n", + "e589ri5 4.0 \n", + "e5beuqa 2.0 \n", + "e5lqoj1 4.0 \n", + "e5kvch1 2.0 \n", + "e6srvwm 2.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 1.0 \n", + "e58n526 1.0 \n", + "e69r2kg 4.0 \n", "\n", - " 2nd-largest[indegree over c->c responses] \\\n", - "e5hm9mp 1.0 \n", - "e5ytz1d 3.0 \n", - "e6ls80j 3.0 \n", - "e5mhgl5 2.0 \n", - "e6w6fah 0.0 \n", - "... ... \n", - "e65ca8k 1.0 \n", - "e6cdkpy 2.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 2.0 \n", - "e5ua84v 2.0 \n", + " 2nd-argmax[indegree over C->c responses] \\\n", + "e6p7yrp 1.0 \n", + "e5ywqyk 0.0 \n", + "e5qv9rj 3.0 \n", + "e6jhojf 0.0 \n", + "e6989ii 1.0 \n", + "e69lgse 2.0 \n", + "e5kwkg2 1.0 \n", + "e6mehe7 2.0 \n", + "e6m0hsd 0.0 \n", + "e64r385 2.0 \n", + "e5surbt 1.0 \n", + "e58gxii 2.0 \n", + "e64vc8y 1.0 \n", + "e57504g 1.0 \n", + "e5borjq 0.0 \n", + "e64n9zv 0.0 \n", + "e582ud3 1.0 \n", + "e64i9cf 3.0 \n", + "e6q9204 2.0 \n", + "e5modd7 1.0 \n", + "e5xhbyd 2.0 \n", + "e5oaf7h 3.0 \n", + "e6nir3u 1.0 \n", + "e6c3xdn 0.0 \n", + "e5d3zaa 1.0 \n", + "e5gnjv9 3.0 \n", + "e69gw2t 1.0 \n", + "e5syrih 2.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 1.0 \n", + "... ... \n", + "e5smhzk 1.0 \n", + "e5v91s0 2.0 \n", + "e6n6di6 1.0 \n", + "e6iqq30 1.0 \n", + "e5bfad7 1.0 \n", + "e6x5he5 1.0 \n", + "e6l9uyf 4.0 \n", + "e57hyr1 5.0 \n", + "e5b8sj7 1.0 \n", + "e6nlep7 1.0 \n", + "e6ltazd 0.0 \n", + "e57a6qq 5.0 \n", + "e5qc7eb 0.0 \n", + "e6hqt5y 1.0 \n", + "e5ua84v 5.0 \n", + "e65m7kq 2.0 \n", + "e5ggtru 5.0 \n", + "e5pmmig 0.0 \n", + "e64l6vq 5.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 5.0 \n", + "e589ri5 2.0 \n", + "e5beuqa 0.0 \n", + "e5lqoj1 1.0 \n", + "e5kvch1 2.0 \n", + "e6srvwm 1.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 1.0 \n", + "e58n526 1.0 \n", + "e69r2kg 1.0 \n", + "\n", + " 2nd-argmax[indegree over c->c mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", + "e5ywqyk 1.0 \n", + "e5qv9rj 0.0 \n", + "e6jhojf 0.0 \n", + "e6989ii 0.0 \n", + "e69lgse 2.0 \n", + "e5kwkg2 1.0 \n", + "e6mehe7 0.0 \n", + "e6m0hsd 1.0 \n", + "e64r385 3.0 \n", + "e5surbt 1.0 \n", + "e58gxii 6.0 \n", + "e64vc8y 2.0 \n", + "e57504g 1.0 \n", + "e5borjq 0.0 \n", + "e64n9zv 0.0 \n", + "e582ud3 5.0 \n", + "e64i9cf 0.0 \n", + "e6q9204 1.0 \n", + "e5modd7 0.0 \n", + "e5xhbyd 1.0 \n", + "e5oaf7h 2.0 \n", + "e6nir3u 0.0 \n", + "e6c3xdn 2.0 \n", + "e5d3zaa 1.0 \n", + "e5gnjv9 0.0 \n", + "e69gw2t 4.0 \n", + "e5syrih 1.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 1.0 \n", + "... ... \n", + "e5smhzk 2.0 \n", + "e5v91s0 0.0 \n", + "e6n6di6 0.0 \n", + "e6iqq30 1.0 \n", + "e5bfad7 1.0 \n", + "e6x5he5 0.0 \n", + "e6l9uyf 0.0 \n", + "e57hyr1 1.0 \n", + "e5b8sj7 1.0 \n", + "e6nlep7 1.0 \n", + "e6ltazd 4.0 \n", + "e57a6qq 4.0 \n", + "e5qc7eb 2.0 \n", + "e6hqt5y 2.0 \n", + "e5ua84v 4.0 \n", + "e65m7kq 2.0 \n", + "e5ggtru 4.0 \n", + "e5pmmig 1.0 \n", + "e64l6vq 0.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 0.0 \n", + "e589ri5 4.0 \n", + "e5beuqa 2.0 \n", + "e5lqoj1 4.0 \n", + "e5kvch1 2.0 \n", + "e6srvwm 2.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 1.0 \n", + "e58n526 1.0 \n", + "e69r2kg 4.0 \n", "\n", " 2nd-argmax[indegree over c->c responses] \\\n", - "e5hm9mp 0.0 \n", - "e5ytz1d 2.0 \n", - "e6ls80j 2.0 \n", - "e5mhgl5 4.0 \n", - "e6w6fah 1.0 \n", + "e6p7yrp 1.0 \n", + "e5ywqyk 0.0 \n", + "e5qv9rj 3.0 \n", + "e6jhojf 0.0 \n", + "e6989ii 0.0 \n", + "e69lgse 2.0 \n", + "e5kwkg2 1.0 \n", + "e6mehe7 2.0 \n", + "e6m0hsd 0.0 \n", + "e64r385 2.0 \n", + "e5surbt 1.0 \n", + "e58gxii 2.0 \n", + "e64vc8y 1.0 \n", + "e57504g 1.0 \n", + "e5borjq 0.0 \n", + "e64n9zv 0.0 \n", + "e582ud3 1.0 \n", + "e64i9cf 3.0 \n", + "e6q9204 2.0 \n", + "e5modd7 1.0 \n", + "e5xhbyd 2.0 \n", + "e5oaf7h 3.0 \n", + "e6nir3u 0.0 \n", + "e6c3xdn 0.0 \n", + "e5d3zaa 1.0 \n", + "e5gnjv9 3.0 \n", + "e69gw2t 1.0 \n", + "e5syrih 2.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 1.0 \n", "... ... \n", - "e65ca8k 2.0 \n", - "e6cdkpy 1.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 0.0 \n", + "e5smhzk 1.0 \n", + "e5v91s0 2.0 \n", + "e6n6di6 1.0 \n", + "e6iqq30 1.0 \n", + "e5bfad7 1.0 \n", + "e6x5he5 4.0 \n", + "e6l9uyf 4.0 \n", + "e57hyr1 5.0 \n", + "e5b8sj7 1.0 \n", + "e6nlep7 1.0 \n", + "e6ltazd 0.0 \n", + "e57a6qq 5.0 \n", + "e5qc7eb 0.0 \n", + "e6hqt5y 1.0 \n", "e5ua84v 5.0 \n", + "e65m7kq 2.0 \n", + "e5ggtru 5.0 \n", + "e5pmmig 0.0 \n", + "e64l6vq 5.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 5.0 \n", + "e589ri5 2.0 \n", + "e5beuqa 0.0 \n", + "e5lqoj1 1.0 \n", + "e5kvch1 2.0 \n", + "e6srvwm 1.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 1.0 \n", + "e58n526 1.0 \n", + "e69r2kg 1.0 \n", "\n", - " norm.2nd-largest[indegree over c->c responses] \\\n", - "e5hm9mp 0.111111 \n", - "e5ytz1d 0.333333 \n", - "e6ls80j 0.333333 \n", - "e5mhgl5 0.222222 \n", - "e6w6fah 0.000000 \n", - "... ... \n", - "e65ca8k 0.111111 \n", - "e6cdkpy 0.222222 \n", - "e5wc4tj 0.111111 \n", - "e6ua0sb 0.222222 \n", - "e5ua84v 0.222222 \n", + " 2nd-argmax[outdegree over C->C mid-thread responses] \\\n", + "e6p7yrp 2.0 \n", + "e5ywqyk 2.0 \n", + "e5qv9rj 3.0 \n", + "e6jhojf 2.0 \n", + "e6989ii 1.0 \n", + "e69lgse 1.0 \n", + "e5kwkg2 2.0 \n", + "e6mehe7 3.0 \n", + "e6m0hsd 1.0 \n", + "e64r385 1.0 \n", + "e5surbt 3.0 \n", + "e58gxii 0.0 \n", + "e64vc8y 6.0 \n", + "e57504g 1.0 \n", + "e5borjq 2.0 \n", + "e64n9zv 1.0 \n", + "e582ud3 6.0 \n", + "e64i9cf 2.0 \n", + "e6q9204 1.0 \n", + "e5modd7 2.0 \n", + "e5xhbyd 1.0 \n", + "e5oaf7h 1.0 \n", + "e6nir3u 1.0 \n", + "e6c3xdn 2.0 \n", + "e5d3zaa 1.0 \n", + "e5gnjv9 0.0 \n", + "e69gw2t 0.0 \n", + "e5syrih 0.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 3.0 \n", + "... ... \n", + "e5smhzk 2.0 \n", + "e5v91s0 4.0 \n", + "e6n6di6 2.0 \n", + "e6iqq30 5.0 \n", + "e5bfad7 1.0 \n", + "e6x5he5 0.0 \n", + "e6l9uyf 4.0 \n", + "e57hyr1 2.0 \n", + "e5b8sj7 1.0 \n", + "e6nlep7 1.0 \n", + "e6ltazd 1.0 \n", + "e57a6qq 0.0 \n", + "e5qc7eb 1.0 \n", + "e6hqt5y 3.0 \n", + "e5ua84v 3.0 \n", + "e65m7kq 2.0 \n", + "e5ggtru 1.0 \n", + "e5pmmig 2.0 \n", + "e64l6vq 0.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 4.0 \n", + "e589ri5 6.0 \n", + "e5beuqa 0.0 \n", + "e5lqoj1 5.0 \n", + "e5kvch1 2.0 \n", + "e6srvwm 1.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 2.0 \n", + "e58n526 1.0 \n", + "e69r2kg 1.0 \n", "\n", - " mean[indegree over c->c responses] \\\n", - "e5hm9mp 0.9 \n", - "e5ytz1d 0.9 \n", - "e6ls80j 0.9 \n", - "e5mhgl5 0.9 \n", - "e6w6fah 0.9 \n", - "... ... \n", - "e65ca8k 0.9 \n", - "e6cdkpy 0.9 \n", - "e5wc4tj 0.9 \n", - "e6ua0sb 0.9 \n", - "e5ua84v 0.9 \n", + " 2nd-argmax[outdegree over C->C responses] \\\n", + "e6p7yrp 1.0 \n", + "e5ywqyk 1.0 \n", + "e5qv9rj 2.0 \n", + "e6jhojf 1.0 \n", + "e6989ii 1.0 \n", + "e69lgse 1.0 \n", + "e5kwkg2 2.0 \n", + "e6mehe7 1.0 \n", + "e6m0hsd 0.0 \n", + "e64r385 3.0 \n", + "e5surbt 2.0 \n", + "e58gxii 1.0 \n", + "e64vc8y 2.0 \n", + "e57504g 6.0 \n", + "e5borjq 0.0 \n", + "e64n9zv 0.0 \n", + "e582ud3 2.0 \n", + "e64i9cf 1.0 \n", + "e6q9204 2.0 \n", + "e5modd7 2.0 \n", + "e5xhbyd 1.0 \n", + "e5oaf7h 0.0 \n", + "e6nir3u 1.0 \n", + "e6c3xdn 2.0 \n", + "e5d3zaa 2.0 \n", + "e5gnjv9 1.0 \n", + "e69gw2t 2.0 \n", + "e5syrih 3.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 0.0 \n", + "... ... \n", + "e5smhzk 1.0 \n", + "e5v91s0 2.0 \n", + "e6n6di6 1.0 \n", + "e6iqq30 1.0 \n", + "e5bfad7 1.0 \n", + "e6x5he5 1.0 \n", + "e6l9uyf 1.0 \n", + "e57hyr1 3.0 \n", + "e5b8sj7 0.0 \n", + "e6nlep7 2.0 \n", + "e6ltazd 2.0 \n", + "e57a6qq 1.0 \n", + "e5qc7eb 0.0 \n", + "e6hqt5y 1.0 \n", + "e5ua84v 4.0 \n", + "e65m7kq 1.0 \n", + "e5ggtru 2.0 \n", + "e5pmmig 3.0 \n", + "e64l6vq 1.0 \n", + "e6fjx0d 2.0 \n", + "e5h3xyy 1.0 \n", + "e589ri5 2.0 \n", + "e5beuqa 1.0 \n", + "e5lqoj1 1.0 \n", + "e5kvch1 4.0 \n", + "e6srvwm 2.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 1.0 \n", + "e58n526 2.0 \n", + "e69r2kg 0.0 \n", "\n", - " mean-nonzero[indegree over c->c responses] \\\n", - "e5hm9mp 1.285714 \n", - "e5ytz1d 2.250000 \n", - "e6ls80j 2.250000 \n", - "e5mhgl5 1.285714 \n", - "e6w6fah 9.000000 \n", - "... ... \n", - "e65ca8k 1.125000 \n", - "e6cdkpy 2.250000 \n", - "e5wc4tj 1.000000 \n", - "e6ua0sb 1.800000 \n", - "e5ua84v 1.500000 \n", + " 2nd-argmax[outdegree over C->c mid-thread responses] \\\n", + "e6p7yrp 2.0 \n", + "e5ywqyk 3.0 \n", + "e5qv9rj 3.0 \n", + "e6jhojf 2.0 \n", + "e6989ii 0.0 \n", + "e69lgse 1.0 \n", + "e5kwkg2 2.0 \n", + "e6mehe7 3.0 \n", + "e6m0hsd 1.0 \n", + "e64r385 1.0 \n", + "e5surbt 3.0 \n", + "e58gxii 0.0 \n", + "e64vc8y 6.0 \n", + "e57504g 1.0 \n", + "e5borjq 2.0 \n", + "e64n9zv 2.0 \n", + "e582ud3 6.0 \n", + "e64i9cf 2.0 \n", + "e6q9204 2.0 \n", + "e5modd7 2.0 \n", + "e5xhbyd 0.0 \n", + "e5oaf7h 1.0 \n", + "e6nir3u 0.0 \n", + "e6c3xdn 2.0 \n", + "e5d3zaa 1.0 \n", + "e5gnjv9 0.0 \n", + "e69gw2t 0.0 \n", + "e5syrih 0.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 3.0 \n", + "... ... \n", + "e5smhzk 2.0 \n", + "e5v91s0 4.0 \n", + "e6n6di6 2.0 \n", + "e6iqq30 5.0 \n", + "e5bfad7 1.0 \n", + "e6x5he5 0.0 \n", + "e6l9uyf 4.0 \n", + "e57hyr1 2.0 \n", + "e5b8sj7 1.0 \n", + "e6nlep7 1.0 \n", + "e6ltazd 0.0 \n", + "e57a6qq 0.0 \n", + "e5qc7eb 0.0 \n", + "e6hqt5y 3.0 \n", + "e5ua84v 3.0 \n", + "e65m7kq 2.0 \n", + "e5ggtru 1.0 \n", + "e5pmmig 0.0 \n", + "e64l6vq 0.0 \n", + "e6fjx0d 0.0 \n", + "e5h3xyy 4.0 \n", + "e589ri5 6.0 \n", + "e5beuqa 0.0 \n", + "e5lqoj1 5.0 \n", + "e5kvch1 1.0 \n", + "e6srvwm 1.0 \n", + "e5o65mk 0.0 \n", + "e647cm8 2.0 \n", + "e58n526 1.0 \n", + "e69r2kg 1.0 \n", "\n", - " prop-nonzero[indegree over c->c responses] \\\n", - "e5hm9mp 0.7 \n", - "e5ytz1d 0.4 \n", - "e6ls80j 0.4 \n", - "e5mhgl5 0.7 \n", - "e6w6fah 0.1 \n", - "... ... \n", - "e65ca8k 0.8 \n", - "e6cdkpy 0.4 \n", - "e5wc4tj 0.9 \n", - "e6ua0sb 0.5 \n", - "e5ua84v 0.6 \n", + " 2nd-argmax[outdegree over C->c responses] \\\n", + "e6p7yrp 3.0 \n", + "e5ywqyk 3.0 \n", + "e5qv9rj 2.0 \n", + "e6jhojf 2.0 \n", + "e6989ii 1.0 \n", + "e69lgse 2.0 \n", + "e5kwkg2 2.0 \n", + "e6mehe7 3.0 \n", + "e6m0hsd 0.0 \n", + "e64r385 3.0 \n", + "e5surbt 2.0 \n", + "e58gxii 1.0 \n", + "e64vc8y 2.0 \n", + "e57504g 6.0 \n", + "e5borjq 0.0 \n", + "e64n9zv 2.0 \n", + "e582ud3 2.0 \n", + "e64i9cf 2.0 \n", + "e6q9204 3.0 \n", + "e5modd7 2.0 \n", + "e5xhbyd 1.0 \n", + "e5oaf7h 0.0 \n", + "e6nir3u 1.0 \n", + "e6c3xdn 2.0 \n", + "e5d3zaa 2.0 \n", + "e5gnjv9 1.0 \n", + "e69gw2t 2.0 \n", + "e5syrih 3.0 \n", + "e5sa2yf 0.0 \n", + "e6ai7z5 0.0 \n", + "... ... \n", + "e5smhzk 2.0 \n", + "e5v91s0 2.0 \n", + "e6n6di6 1.0 \n", + "e6iqq30 1.0 \n", + "e5bfad7 1.0 \n", + "e6x5he5 1.0 \n", + "e6l9uyf 1.0 \n", + "e57hyr1 3.0 \n", + "e5b8sj7 0.0 \n", + "e6nlep7 2.0 \n", + "e6ltazd 5.0 \n", + "e57a6qq 1.0 \n", + "e5qc7eb 1.0 \n", + "e6hqt5y 1.0 \n", + "e5ua84v 4.0 \n", + "e65m7kq 1.0 \n", + "e5ggtru 2.0 \n", + "e5pmmig 3.0 \n", + "e64l6vq 1.0 \n", + "e6fjx0d 2.0 \n", + "e5h3xyy 1.0 \n", + "e589ri5 2.0 \n", + "e5beuqa 1.0 \n", + "e5lqoj1 6.0 \n", + "e5kvch1 3.0 \n", + "e6srvwm 2.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 1.0 \n", + "e58n526 2.0 \n", + "e69r2kg 0.0 \n", "\n", - " prop-multiple[indegree over c->c responses] \\\n", - "e5hm9mp 0.142857 \n", - "e5ytz1d 0.750000 \n", - "e6ls80j 0.500000 \n", - "e5mhgl5 0.285714 \n", - "e6w6fah 1.000000 \n", - "... ... \n", - "e65ca8k 0.125000 \n", - "e6cdkpy 0.750000 \n", - "e5wc4tj 0.000000 \n", - "e6ua0sb 0.400000 \n", - "e5ua84v 0.333333 \n", + " 2nd-largest / max[indegree over C->C mid-thread responses] \\\n", + "e6p7yrp 0.333333 \n", + "e5ywqyk 0.500000 \n", + "e5qv9rj 0.333333 \n", + "e6jhojf 0.333333 \n", + "e6989ii 1.000000 \n", + "e69lgse 0.333333 \n", + "e5kwkg2 0.500000 \n", + "e6mehe7 0.500000 \n", + "e6m0hsd 0.500000 \n", + "e64r385 1.000000 \n", + "e5surbt 1.000000 \n", + "e58gxii 0.666667 \n", + "e64vc8y 1.000000 \n", + "e57504g 1.000000 \n", + "e5borjq 0.666667 \n", + "e64n9zv 0.500000 \n", + "e582ud3 0.500000 \n", + "e64i9cf 0.500000 \n", + "e6q9204 0.666667 \n", + "e5modd7 0.500000 \n", + "e5xhbyd 1.000000 \n", + "e5oaf7h 0.333333 \n", + "e6nir3u 1.000000 \n", + "e6c3xdn 0.500000 \n", + "e5d3zaa 1.000000 \n", + "e5gnjv9 0.000000 \n", + "e69gw2t 1.000000 \n", + "e5syrih 0.500000 \n", + "e5sa2yf 1.000000 \n", + "e6ai7z5 0.500000 \n", + "... ... \n", + "e5smhzk 1.000000 \n", + "e5v91s0 0.500000 \n", + "e6n6di6 0.500000 \n", + "e6iqq30 1.000000 \n", + "e5bfad7 1.000000 \n", + "e6x5he5 1.000000 \n", + "e6l9uyf 0.500000 \n", + "e57hyr1 0.500000 \n", + "e5b8sj7 0.500000 \n", + "e6nlep7 NaN \n", + "e6ltazd 0.250000 \n", + "e57a6qq 0.666667 \n", + "e5qc7eb 0.666667 \n", + "e6hqt5y 0.250000 \n", + "e5ua84v 0.500000 \n", + "e65m7kq 0.333333 \n", + "e5ggtru 0.400000 \n", + "e5pmmig 1.000000 \n", + "e64l6vq 0.500000 \n", + "e6fjx0d 1.000000 \n", + "e5h3xyy 0.500000 \n", + "e589ri5 1.000000 \n", + "e5beuqa 0.250000 \n", + "e5lqoj1 1.000000 \n", + "e5kvch1 0.500000 \n", + "e6srvwm 1.000000 \n", + "e5o65mk 1.000000 \n", + "e647cm8 0.333333 \n", + "e58n526 NaN \n", + "e69r2kg 0.666667 \n", "\n", - " entropy[indegree over c->c responses] \\\n", - "e5hm9mp 1.831020 \n", - "e5ytz1d 1.310784 \n", - "e6ls80j 1.214890 \n", - "e5mhgl5 1.889159 \n", - "e6w6fah 0.000000 \n", - "... ... \n", - "e65ca8k 2.043192 \n", - "e6cdkpy 1.273028 \n", - "e5wc4tj 2.197225 \n", - "e6ua0sb 1.427061 \n", - "e5ua84v 1.676988 \n", + " 2nd-largest / max[indegree over C->C responses] \\\n", + "e6p7yrp 0.200000 \n", + "e5ywqyk 1.000000 \n", + "e5qv9rj 1.000000 \n", + "e6jhojf 0.250000 \n", + "e6989ii 1.000000 \n", + "e69lgse 1.000000 \n", + "e5kwkg2 0.666667 \n", + "e6mehe7 0.500000 \n", + "e6m0hsd 0.500000 \n", + "e64r385 1.000000 \n", + "e5surbt 0.200000 \n", + "e58gxii 0.500000 \n", + "e64vc8y 0.166667 \n", + "e57504g 1.000000 \n", + "e5borjq 0.666667 \n", + "e64n9zv 0.500000 \n", + "e582ud3 0.333333 \n", + "e64i9cf 0.500000 \n", + "e6q9204 0.666667 \n", + "e5modd7 0.500000 \n", + "e5xhbyd 1.000000 \n", + "e5oaf7h 0.333333 \n", + "e6nir3u 1.000000 \n", + "e6c3xdn 0.500000 \n", + "e5d3zaa 1.000000 \n", + "e5gnjv9 0.125000 \n", + "e69gw2t 1.000000 \n", + "e5syrih 0.500000 \n", + "e5sa2yf 1.000000 \n", + "e6ai7z5 0.666667 \n", + "... ... \n", + "e5smhzk 0.500000 \n", + "e5v91s0 0.400000 \n", + "e6n6di6 0.500000 \n", + "e6iqq30 0.166667 \n", + "e5bfad7 0.500000 \n", + "e6x5he5 0.250000 \n", + "e6l9uyf 0.400000 \n", + "e57hyr1 0.500000 \n", + "e5b8sj7 0.750000 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 0.250000 \n", + "e57a6qq 0.666667 \n", + "e5qc7eb 1.000000 \n", + "e6hqt5y 1.000000 \n", + "e5ua84v 0.500000 \n", + "e65m7kq 0.750000 \n", + "e5ggtru 0.400000 \n", + "e5pmmig 1.000000 \n", + "e64l6vq 0.666667 \n", + "e6fjx0d 0.500000 \n", + "e5h3xyy 0.500000 \n", + "e589ri5 0.166667 \n", + "e5beuqa 0.500000 \n", + "e5lqoj1 0.200000 \n", + "e5kvch1 0.666667 \n", + "e6srvwm 0.666667 \n", + "e5o65mk 1.000000 \n", + "e647cm8 0.750000 \n", + "e58n526 0.000000 \n", + "e69r2kg 0.666667 \n", "\n", - " 2nd-largest / max[indegree over c->c responses] \\\n", - "e5hm9mp 0.333333 \n", - "e5ytz1d 1.000000 \n", - "e6ls80j 0.750000 \n", - "e5mhgl5 1.000000 \n", - "e6w6fah 0.000000 \n", + " 2nd-largest / max[indegree over C->c mid-thread responses] \\\n", + "e6p7yrp 1.000000 \n", + "e5ywqyk 0.500000 \n", + "e5qv9rj 0.333333 \n", + "e6jhojf 0.500000 \n", + "e6989ii 1.000000 \n", + "e69lgse 0.333333 \n", + "e5kwkg2 0.500000 \n", + "e6mehe7 0.500000 \n", + "e6m0hsd 0.500000 \n", + "e64r385 1.000000 \n", + "e5surbt 1.000000 \n", + "e58gxii 1.000000 \n", + "e64vc8y 1.000000 \n", + "e57504g 1.000000 \n", + "e5borjq 0.666667 \n", + "e64n9zv 0.500000 \n", + "e582ud3 0.500000 \n", + "e64i9cf 0.500000 \n", + "e6q9204 1.000000 \n", + "e5modd7 0.500000 \n", + "e5xhbyd 1.000000 \n", + "e5oaf7h 1.000000 \n", + "e6nir3u 1.000000 \n", + "e6c3xdn 0.500000 \n", + "e5d3zaa 1.000000 \n", + "e5gnjv9 0.000000 \n", + "e69gw2t 1.000000 \n", + "e5syrih 0.666667 \n", + "e5sa2yf 1.000000 \n", + "e6ai7z5 1.000000 \n", + "... ... \n", + "e5smhzk 1.000000 \n", + "e5v91s0 0.500000 \n", + "e6n6di6 0.666667 \n", + "e6iqq30 1.000000 \n", + "e5bfad7 1.000000 \n", + "e6x5he5 1.000000 \n", + "e6l9uyf 0.500000 \n", + "e57hyr1 0.500000 \n", + "e5b8sj7 0.666667 \n", + "e6nlep7 NaN \n", + "e6ltazd 0.250000 \n", + "e57a6qq 1.000000 \n", + "e5qc7eb 0.666667 \n", + "e6hqt5y 0.250000 \n", + "e5ua84v 0.666667 \n", + "e65m7kq 0.500000 \n", + "e5ggtru 0.500000 \n", + "e5pmmig 0.500000 \n", + "e64l6vq 0.500000 \n", + "e6fjx0d 1.000000 \n", + "e5h3xyy 0.500000 \n", + "e589ri5 1.000000 \n", + "e5beuqa 0.333333 \n", + "e5lqoj1 1.000000 \n", + "e5kvch1 1.000000 \n", + "e6srvwm 1.000000 \n", + "e5o65mk 1.000000 \n", + "e647cm8 0.333333 \n", + "e58n526 NaN \n", + "e69r2kg 1.000000 \n", + "\n", + " 2nd-largest / max[indegree over C->c responses] \\\n", + "e6p7yrp 0.333333 \n", + "e5ywqyk 0.500000 \n", + "e5qv9rj 1.000000 \n", + "e6jhojf 0.500000 \n", + "e6989ii 1.000000 \n", + "e69lgse 1.000000 \n", + "e5kwkg2 0.666667 \n", + "e6mehe7 0.666667 \n", + "e6m0hsd 0.500000 \n", + "e64r385 1.000000 \n", + "e5surbt 0.200000 \n", + "e58gxii 1.000000 \n", + "e64vc8y 0.166667 \n", + "e57504g 1.000000 \n", + "e5borjq 0.666667 \n", + "e64n9zv 0.500000 \n", + "e582ud3 0.333333 \n", + "e64i9cf 0.500000 \n", + "e6q9204 1.000000 \n", + "e5modd7 0.500000 \n", + "e5xhbyd 1.000000 \n", + "e5oaf7h 1.000000 \n", + "e6nir3u 1.000000 \n", + "e6c3xdn 0.500000 \n", + "e5d3zaa 1.000000 \n", + "e5gnjv9 0.125000 \n", + "e69gw2t 1.000000 \n", + "e5syrih 0.666667 \n", + "e5sa2yf 1.000000 \n", + "e6ai7z5 0.333333 \n", "... ... \n", - "e65ca8k 0.500000 \n", - "e6cdkpy 0.500000 \n", - "e5wc4tj 1.000000 \n", - "e6ua0sb 0.500000 \n", + "e5smhzk 0.500000 \n", + "e5v91s0 0.400000 \n", + "e6n6di6 0.666667 \n", + "e6iqq30 0.166667 \n", + "e5bfad7 0.666667 \n", + "e6x5he5 0.250000 \n", + "e6l9uyf 0.400000 \n", + "e57hyr1 0.500000 \n", + "e5b8sj7 1.000000 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 0.250000 \n", + "e57a6qq 1.000000 \n", + "e5qc7eb 0.666667 \n", + "e6hqt5y 1.000000 \n", "e5ua84v 0.666667 \n", + "e65m7kq 0.500000 \n", + "e5ggtru 0.500000 \n", + "e5pmmig 0.500000 \n", + "e64l6vq 0.666667 \n", + "e6fjx0d 0.500000 \n", + "e5h3xyy 0.500000 \n", + "e589ri5 0.166667 \n", + "e5beuqa 0.666667 \n", + "e5lqoj1 0.200000 \n", + "e5kvch1 0.333333 \n", + "e6srvwm 0.666667 \n", + "e5o65mk 1.000000 \n", + "e647cm8 0.750000 \n", + "e58n526 0.000000 \n", + "e69r2kg 1.000000 \n", "\n", - " max[outdegree over C->c responses] \\\n", - "e5hm9mp 2.0 \n", - "e5ytz1d 1.0 \n", - "e6ls80j 3.0 \n", - "e5mhgl5 2.0 \n", - "e6w6fah 1.0 \n", - "... ... \n", - "e65ca8k 8.0 \n", - "e6cdkpy 1.0 \n", - "e5wc4tj 5.0 \n", - "e6ua0sb 3.0 \n", - "e5ua84v 3.0 \n", + " 2nd-largest / max[indegree over c->c mid-thread responses] \\\n", + "e6p7yrp 1.000000 \n", + "e5ywqyk 0.500000 \n", + "e5qv9rj 0.333333 \n", + "e6jhojf 0.500000 \n", + "e6989ii 0.500000 \n", + "e69lgse 0.333333 \n", + "e5kwkg2 0.500000 \n", + "e6mehe7 0.500000 \n", + "e6m0hsd 0.500000 \n", + "e64r385 1.000000 \n", + "e5surbt 1.000000 \n", + "e58gxii 1.000000 \n", + "e64vc8y 1.000000 \n", + "e57504g 1.000000 \n", + "e5borjq 0.666667 \n", + "e64n9zv 0.500000 \n", + "e582ud3 0.500000 \n", + "e64i9cf 0.500000 \n", + "e6q9204 1.000000 \n", + "e5modd7 0.500000 \n", + "e5xhbyd 1.000000 \n", + "e5oaf7h 1.000000 \n", + "e6nir3u 0.500000 \n", + "e6c3xdn 0.500000 \n", + "e5d3zaa 1.000000 \n", + "e5gnjv9 0.000000 \n", + "e69gw2t 1.000000 \n", + "e5syrih 0.666667 \n", + "e5sa2yf 1.000000 \n", + "e6ai7z5 1.000000 \n", + "... ... \n", + "e5smhzk 1.000000 \n", + "e5v91s0 0.500000 \n", + "e6n6di6 0.666667 \n", + "e6iqq30 1.000000 \n", + "e5bfad7 1.000000 \n", + "e6x5he5 0.500000 \n", + "e6l9uyf 0.500000 \n", + "e57hyr1 0.500000 \n", + "e5b8sj7 0.666667 \n", + "e6nlep7 NaN \n", + "e6ltazd 0.250000 \n", + "e57a6qq 1.000000 \n", + "e5qc7eb 0.666667 \n", + "e6hqt5y 0.250000 \n", + "e5ua84v 0.666667 \n", + "e65m7kq 0.500000 \n", + "e5ggtru 0.500000 \n", + "e5pmmig 0.500000 \n", + "e64l6vq 0.500000 \n", + "e6fjx0d 1.000000 \n", + "e5h3xyy 0.500000 \n", + "e589ri5 1.000000 \n", + "e5beuqa 0.333333 \n", + "e5lqoj1 1.000000 \n", + "e5kvch1 1.000000 \n", + "e6srvwm 1.000000 \n", + "e5o65mk 1.000000 \n", + "e647cm8 0.333333 \n", + "e58n526 NaN \n", + "e69r2kg 1.000000 \n", "\n", - " max[indegree over C->c responses] \\\n", - "e5hm9mp 3.0 \n", - "e5ytz1d 3.0 \n", - "e6ls80j 4.0 \n", - "e5mhgl5 2.0 \n", - "e6w6fah 8.0 \n", - "... ... \n", - "e65ca8k 2.0 \n", - "e6cdkpy 4.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 4.0 \n", - "e5ua84v 3.0 \n", + " 2nd-largest / max[indegree over c->c responses] \\\n", + "e6p7yrp 0.333333 \n", + "e5ywqyk 0.500000 \n", + "e5qv9rj 1.000000 \n", + "e6jhojf 0.500000 \n", + "e6989ii 0.500000 \n", + "e69lgse 1.000000 \n", + "e5kwkg2 0.666667 \n", + "e6mehe7 0.666667 \n", + "e6m0hsd 0.500000 \n", + "e64r385 1.000000 \n", + "e5surbt 0.200000 \n", + "e58gxii 1.000000 \n", + "e64vc8y 0.166667 \n", + "e57504g 1.000000 \n", + "e5borjq 0.666667 \n", + "e64n9zv 0.500000 \n", + "e582ud3 0.333333 \n", + "e64i9cf 0.500000 \n", + "e6q9204 1.000000 \n", + "e5modd7 0.500000 \n", + "e5xhbyd 1.000000 \n", + "e5oaf7h 1.000000 \n", + "e6nir3u 0.500000 \n", + "e6c3xdn 0.500000 \n", + "e5d3zaa 1.000000 \n", + "e5gnjv9 0.125000 \n", + "e69gw2t 1.000000 \n", + "e5syrih 0.666667 \n", + "e5sa2yf 1.000000 \n", + "e6ai7z5 0.333333 \n", + "... ... \n", + "e5smhzk 0.500000 \n", + "e5v91s0 0.400000 \n", + "e6n6di6 0.666667 \n", + "e6iqq30 0.166667 \n", + "e5bfad7 0.666667 \n", + "e6x5he5 0.500000 \n", + "e6l9uyf 0.400000 \n", + "e57hyr1 0.500000 \n", + "e5b8sj7 1.000000 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 0.250000 \n", + "e57a6qq 1.000000 \n", + "e5qc7eb 0.666667 \n", + "e6hqt5y 1.000000 \n", + "e5ua84v 0.666667 \n", + "e65m7kq 0.500000 \n", + "e5ggtru 0.500000 \n", + "e5pmmig 0.500000 \n", + "e64l6vq 0.666667 \n", + "e6fjx0d 0.500000 \n", + "e5h3xyy 0.500000 \n", + "e589ri5 0.166667 \n", + "e5beuqa 0.666667 \n", + "e5lqoj1 0.200000 \n", + "e5kvch1 0.333333 \n", + "e6srvwm 0.666667 \n", + "e5o65mk 0.500000 \n", + "e647cm8 0.750000 \n", + "e58n526 0.000000 \n", + "e69r2kg 1.000000 \n", "\n", - " argmax[outdegree over C->c responses] \\\n", - "e5hm9mp 0.0 \n", - "e5ytz1d 0.0 \n", - "e6ls80j 3.0 \n", - "e5mhgl5 4.0 \n", - "e6w6fah 1.0 \n", - "... ... \n", - "e65ca8k 0.0 \n", - "e6cdkpy 1.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 2.0 \n", - "e5ua84v 1.0 \n", + " 2nd-largest / max[outdegree over C->C mid-thread responses] \\\n", + "e6p7yrp 0.333333 \n", + "e5ywqyk 0.500000 \n", + "e5qv9rj 1.000000 \n", + "e6jhojf 0.250000 \n", + "e6989ii 1.000000 \n", + "e69lgse 0.500000 \n", + "e5kwkg2 1.000000 \n", + "e6mehe7 0.333333 \n", + "e6m0hsd 0.500000 \n", + "e64r385 0.500000 \n", + "e5surbt 1.000000 \n", + "e58gxii 0.333333 \n", + "e64vc8y 1.000000 \n", + "e57504g 0.500000 \n", + "e5borjq 1.000000 \n", + "e64n9zv 0.500000 \n", + "e582ud3 1.000000 \n", + "e64i9cf 0.500000 \n", + "e6q9204 0.500000 \n", + "e5modd7 1.000000 \n", + "e5xhbyd 1.000000 \n", + "e5oaf7h 0.500000 \n", + "e6nir3u 1.000000 \n", + "e6c3xdn 1.000000 \n", + "e5d3zaa 1.000000 \n", + "e5gnjv9 0.000000 \n", + "e69gw2t 0.500000 \n", + "e5syrih 0.500000 \n", + "e5sa2yf 1.000000 \n", + "e6ai7z5 0.250000 \n", + "... ... \n", + "e5smhzk 0.500000 \n", + "e5v91s0 1.000000 \n", + "e6n6di6 0.500000 \n", + "e6iqq30 1.000000 \n", + "e5bfad7 0.500000 \n", + "e6x5he5 0.000000 \n", + "e6l9uyf 1.000000 \n", + "e57hyr1 1.000000 \n", + "e5b8sj7 1.000000 \n", + "e6nlep7 NaN \n", + "e6ltazd 1.000000 \n", + "e57a6qq 0.500000 \n", + "e5qc7eb 1.000000 \n", + "e6hqt5y 1.000000 \n", + "e5ua84v 1.000000 \n", + "e65m7kq 1.000000 \n", + "e5ggtru 1.000000 \n", + "e5pmmig 1.000000 \n", + "e64l6vq 0.500000 \n", + "e6fjx0d 1.000000 \n", + "e5h3xyy 1.000000 \n", + "e589ri5 1.000000 \n", + "e5beuqa 0.333333 \n", + "e5lqoj1 0.500000 \n", + "e5kvch1 1.000000 \n", + "e6srvwm 1.000000 \n", + "e5o65mk 1.000000 \n", + "e647cm8 1.000000 \n", + "e58n526 NaN \n", + "e69r2kg 0.500000 \n", "\n", - " argmax[indegree over C->c responses] \\\n", - "e5hm9mp 1.0 \n", - "e5ytz1d 0.0 \n", - "e6ls80j 0.0 \n", - "e5mhgl5 1.0 \n", - "e6w6fah 0.0 \n", - "... ... \n", - "e65ca8k 0.0 \n", - "e6cdkpy 0.0 \n", - "e5wc4tj 0.0 \n", - "e6ua0sb 2.0 \n", - "e5ua84v 1.0 \n", + " 2nd-largest / max[outdegree over C->C responses] \\\n", + "e6p7yrp 0.333333 \n", + "e5ywqyk 0.500000 \n", + "e5qv9rj 1.000000 \n", + "e6jhojf 0.250000 \n", + "e6989ii 1.000000 \n", + "e69lgse 0.500000 \n", + "e5kwkg2 1.000000 \n", + "e6mehe7 0.333333 \n", + "e6m0hsd 0.500000 \n", + "e64r385 1.000000 \n", + "e5surbt 1.000000 \n", + "e58gxii 0.333333 \n", + "e64vc8y 1.000000 \n", + "e57504g 1.000000 \n", + "e5borjq 0.500000 \n", + "e64n9zv 0.500000 \n", + "e582ud3 1.000000 \n", + "e64i9cf 0.500000 \n", + "e6q9204 0.333333 \n", + "e5modd7 1.000000 \n", + "e5xhbyd 1.000000 \n", + "e5oaf7h 0.500000 \n", + "e6nir3u 1.000000 \n", + "e6c3xdn 1.000000 \n", + "e5d3zaa 0.500000 \n", + "e5gnjv9 0.500000 \n", + "e69gw2t 1.000000 \n", + "e5syrih 1.000000 \n", + "e5sa2yf 1.000000 \n", + "e6ai7z5 0.250000 \n", + "... ... \n", + "e5smhzk 0.500000 \n", + "e5v91s0 1.000000 \n", + "e6n6di6 0.500000 \n", + "e6iqq30 1.000000 \n", + "e5bfad7 0.500000 \n", + "e6x5he5 0.250000 \n", + "e6l9uyf 0.500000 \n", + "e57hyr1 1.000000 \n", + "e5b8sj7 0.500000 \n", + "e6nlep7 1.000000 \n", + "e6ltazd 0.500000 \n", + "e57a6qq 0.500000 \n", + "e5qc7eb 0.500000 \n", + "e6hqt5y 0.500000 \n", + "e5ua84v 0.666667 \n", + "e65m7kq 0.500000 \n", + "e5ggtru 0.500000 \n", + "e5pmmig 0.666667 \n", + "e64l6vq 0.500000 \n", + "e6fjx0d 0.500000 \n", + "e5h3xyy 0.500000 \n", + "e589ri5 1.000000 \n", + "e5beuqa 0.500000 \n", + "e5lqoj1 0.333333 \n", + "e5kvch1 1.000000 \n", + "e6srvwm 0.500000 \n", + "e5o65mk 1.000000 \n", + "e647cm8 1.000000 \n", + "e58n526 1.000000 \n", + "e69r2kg 0.500000 \n", "\n", - " norm.max[outdegree over C->c responses] \\\n", - "e5hm9mp 0.222222 \n", - "e5ytz1d 0.111111 \n", - "e6ls80j 0.333333 \n", - "e5mhgl5 0.222222 \n", - "e6w6fah 0.125000 \n", - "... ... \n", - "e65ca8k 0.888889 \n", - "e6cdkpy 0.111111 \n", - "e5wc4tj 0.555556 \n", - "e6ua0sb 0.333333 \n", - "e5ua84v 0.333333 \n", + " 2nd-largest / max[outdegree over C->c mid-thread responses] \\\n", + "e6p7yrp 0.333333 \n", + "e5ywqyk 0.750000 \n", + "e5qv9rj 1.000000 \n", + "e6jhojf 0.500000 \n", + "e6989ii 0.750000 \n", + "e69lgse 0.500000 \n", + "e5kwkg2 1.000000 \n", + "e6mehe7 0.666667 \n", + "e6m0hsd 0.750000 \n", + "e64r385 0.500000 \n", + "e5surbt 1.000000 \n", + "e58gxii 0.333333 \n", + "e64vc8y 1.000000 \n", + "e57504g 0.500000 \n", + "e5borjq 1.000000 \n", + "e64n9zv 1.000000 \n", + "e582ud3 1.000000 \n", + "e64i9cf 0.333333 \n", + "e6q9204 0.666667 \n", + "e5modd7 1.000000 \n", + "e5xhbyd 0.666667 \n", + "e5oaf7h 0.750000 \n", + "e6nir3u 0.750000 \n", + "e6c3xdn 1.000000 \n", + "e5d3zaa 1.000000 \n", + "e5gnjv9 0.000000 \n", + "e69gw2t 0.666667 \n", + "e5syrih 0.500000 \n", + "e5sa2yf 1.000000 \n", + "e6ai7z5 0.250000 \n", + "... ... \n", + "e5smhzk 0.750000 \n", + "e5v91s0 1.000000 \n", + "e6n6di6 0.500000 \n", + "e6iqq30 1.000000 \n", + "e5bfad7 0.500000 \n", + "e6x5he5 0.000000 \n", + "e6l9uyf 1.000000 \n", + "e57hyr1 1.000000 \n", + "e5b8sj7 1.000000 \n", + "e6nlep7 NaN \n", + "e6ltazd 0.666667 \n", + "e57a6qq 0.666667 \n", + "e5qc7eb 0.500000 \n", + "e6hqt5y 1.000000 \n", + "e5ua84v 1.000000 \n", + "e65m7kq 1.000000 \n", + "e5ggtru 1.000000 \n", + "e5pmmig 0.666667 \n", + "e64l6vq 0.333333 \n", + "e6fjx0d 0.750000 \n", + "e5h3xyy 1.000000 \n", + "e589ri5 1.000000 \n", + "e5beuqa 0.333333 \n", + "e5lqoj1 1.000000 \n", + "e5kvch1 0.500000 \n", + "e6srvwm 1.000000 \n", + "e5o65mk 0.750000 \n", + "e647cm8 1.000000 \n", + "e58n526 NaN \n", + "e69r2kg 0.500000 \n", "\n", - " norm.max[indegree over C->c responses] \\\n", - "e5hm9mp 0.333333 \n", - "e5ytz1d 0.333333 \n", - "e6ls80j 0.444444 \n", - "e5mhgl5 0.222222 \n", - "e6w6fah 1.000000 \n", - "... ... \n", - "e65ca8k 0.222222 \n", - "e6cdkpy 0.444444 \n", - "e5wc4tj 0.111111 \n", - "e6ua0sb 0.444444 \n", - "e5ua84v 0.333333 \n", + " 2nd-largest / max[outdegree over C->c responses] \\\n", + "e6p7yrp 0.666667 \n", + "e5ywqyk 0.750000 \n", + "e5qv9rj 1.000000 \n", + "e6jhojf 0.500000 \n", + "e6989ii 1.000000 \n", + "e69lgse 1.000000 \n", + "e5kwkg2 1.000000 \n", + "e6mehe7 0.666667 \n", + "e6m0hsd 0.600000 \n", + "e64r385 1.000000 \n", + "e5surbt 1.000000 \n", + "e58gxii 0.666667 \n", + "e64vc8y 1.000000 \n", + "e57504g 1.000000 \n", + "e5borjq 0.500000 \n", + "e64n9zv 0.750000 \n", + "e582ud3 1.000000 \n", + "e64i9cf 0.666667 \n", + "e6q9204 0.500000 \n", + "e5modd7 1.000000 \n", + "e5xhbyd 1.000000 \n", + "e5oaf7h 0.600000 \n", + "e6nir3u 1.000000 \n", + "e6c3xdn 1.000000 \n", + "e5d3zaa 0.666667 \n", + "e5gnjv9 0.500000 \n", + "e69gw2t 1.000000 \n", + "e5syrih 1.000000 \n", + "e5sa2yf 0.800000 \n", + "e6ai7z5 0.200000 \n", + "... ... \n", + "e5smhzk 1.000000 \n", + "e5v91s0 1.000000 \n", + "e6n6di6 0.500000 \n", + "e6iqq30 1.000000 \n", + "e5bfad7 0.500000 \n", + "e6x5he5 0.250000 \n", + "e6l9uyf 0.500000 \n", + "e57hyr1 1.000000 \n", + "e5b8sj7 0.500000 \n", + "e6nlep7 1.000000 \n", + "e6ltazd 1.000000 \n", + "e57a6qq 1.000000 \n", + "e5qc7eb 1.000000 \n", + "e6hqt5y 0.500000 \n", + "e5ua84v 0.666667 \n", + "e65m7kq 0.500000 \n", + "e5ggtru 0.500000 \n", + "e5pmmig 1.000000 \n", + "e64l6vq 0.666667 \n", + "e6fjx0d 1.000000 \n", + "e5h3xyy 0.500000 \n", + "e589ri5 1.000000 \n", + "e5beuqa 0.500000 \n", + "e5lqoj1 0.666667 \n", + "e5kvch1 1.000000 \n", + "e6srvwm 0.500000 \n", + "e5o65mk 1.000000 \n", + "e647cm8 1.000000 \n", + "e58n526 1.000000 \n", + "e69r2kg 0.500000 \n", "\n", - " 2nd-largest[outdegree over C->c responses] \\\n", - "e5hm9mp 2.0 \n", - "e5ytz1d 1.0 \n", - "e6ls80j 2.0 \n", - "e5mhgl5 2.0 \n", - "e6w6fah 1.0 \n", - "... ... \n", - "e65ca8k 1.0 \n", - "e6cdkpy 1.0 \n", - "e5wc4tj 4.0 \n", - "e6ua0sb 2.0 \n", - "e5ua84v 2.0 \n", + " 2nd-largest[indegree over C->C mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", + "e5ywqyk 1.0 \n", + "e5qv9rj 1.0 \n", + "e6jhojf 1.0 \n", + "e6989ii 1.0 \n", + "e69lgse 1.0 \n", + "e5kwkg2 1.0 \n", + "e6mehe7 1.0 \n", + "e6m0hsd 1.0 \n", + "e64r385 2.0 \n", + "e5surbt 1.0 \n", + "e58gxii 2.0 \n", + "e64vc8y 1.0 \n", + "e57504g 2.0 \n", + "e5borjq 2.0 \n", + "e64n9zv 1.0 \n", + "e582ud3 1.0 \n", + "e64i9cf 1.0 \n", + "e6q9204 2.0 \n", + "e5modd7 2.0 \n", + "e5xhbyd 2.0 \n", + "e5oaf7h 1.0 \n", + "e6nir3u 1.0 \n", + "e6c3xdn 1.0 \n", + "e5d3zaa 2.0 \n", + "e5gnjv9 0.0 \n", + "e69gw2t 2.0 \n", + "e5syrih 2.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 1.0 \n", + "... ... \n", + "e5smhzk 1.0 \n", + "e5v91s0 1.0 \n", + "e6n6di6 2.0 \n", + "e6iqq30 1.0 \n", + "e5bfad7 2.0 \n", + "e6x5he5 1.0 \n", + "e6l9uyf 1.0 \n", + "e57hyr1 1.0 \n", + "e5b8sj7 2.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 1.0 \n", + "e57a6qq 2.0 \n", + "e5qc7eb 2.0 \n", + "e6hqt5y 1.0 \n", + "e5ua84v 2.0 \n", + "e65m7kq 1.0 \n", + "e5ggtru 2.0 \n", + "e5pmmig 2.0 \n", + "e64l6vq 1.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 1.0 \n", + "e589ri5 1.0 \n", + "e5beuqa 1.0 \n", + "e5lqoj1 1.0 \n", + "e5kvch1 1.0 \n", + "e6srvwm 2.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 1.0 \n", + "e58n526 0.0 \n", + "e69r2kg 2.0 \n", "\n", - " 2nd-largest[indegree over C->c responses] \\\n", - "e5hm9mp 1.0 \n", - "e5ytz1d 3.0 \n", - "e6ls80j 3.0 \n", - "e5mhgl5 2.0 \n", - "e6w6fah 0.0 \n", + " 2nd-largest[indegree over C->C responses] \\\n", + "e6p7yrp 1.0 \n", + "e5ywqyk 2.0 \n", + "e5qv9rj 3.0 \n", + "e6jhojf 1.0 \n", + "e6989ii 1.0 \n", + "e69lgse 3.0 \n", + "e5kwkg2 2.0 \n", + "e6mehe7 2.0 \n", + "e6m0hsd 1.0 \n", + "e64r385 2.0 \n", + "e5surbt 1.0 \n", + "e58gxii 2.0 \n", + "e64vc8y 1.0 \n", + "e57504g 2.0 \n", + "e5borjq 2.0 \n", + "e64n9zv 1.0 \n", + "e582ud3 2.0 \n", + "e64i9cf 2.0 \n", + "e6q9204 2.0 \n", + "e5modd7 2.0 \n", + "e5xhbyd 2.0 \n", + "e5oaf7h 1.0 \n", + "e6nir3u 1.0 \n", + "e6c3xdn 1.0 \n", + "e5d3zaa 2.0 \n", + "e5gnjv9 1.0 \n", + "e69gw2t 2.0 \n", + "e5syrih 2.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 2.0 \n", "... ... \n", - "e65ca8k 1.0 \n", - "e6cdkpy 2.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 2.0 \n", + "e5smhzk 1.0 \n", + "e5v91s0 2.0 \n", + "e6n6di6 2.0 \n", + "e6iqq30 1.0 \n", + "e5bfad7 2.0 \n", + "e6x5he5 1.0 \n", + "e6l9uyf 2.0 \n", + "e57hyr1 2.0 \n", + "e5b8sj7 3.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 1.0 \n", + "e57a6qq 2.0 \n", + "e5qc7eb 3.0 \n", + "e6hqt5y 4.0 \n", "e5ua84v 2.0 \n", + "e65m7kq 3.0 \n", + "e5ggtru 2.0 \n", + "e5pmmig 2.0 \n", + "e64l6vq 2.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 2.0 \n", + "e589ri5 1.0 \n", + "e5beuqa 2.0 \n", + "e5lqoj1 1.0 \n", + "e5kvch1 2.0 \n", + "e6srvwm 2.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 3.0 \n", + "e58n526 0.0 \n", + "e69r2kg 2.0 \n", "\n", - " 2nd-argmax[outdegree over C->c responses] \\\n", - "e5hm9mp 2.0 \n", - "e5ytz1d 1.0 \n", - "e6ls80j 2.0 \n", - "e5mhgl5 6.0 \n", - "e6w6fah 2.0 \n", - "... ... \n", - "e65ca8k 1.0 \n", - "e6cdkpy 2.0 \n", - "e5wc4tj 0.0 \n", - "e6ua0sb 1.0 \n", - "e5ua84v 4.0 \n", - "\n", - " 2nd-argmax[indegree over C->c responses] \\\n", - "e5hm9mp 0.0 \n", - "e5ytz1d 2.0 \n", - "e6ls80j 2.0 \n", - "e5mhgl5 4.0 \n", - "e6w6fah 1.0 \n", - "... ... \n", - "e65ca8k 2.0 \n", - "e6cdkpy 1.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 0.0 \n", - "e5ua84v 5.0 \n", - "\n", - " norm.2nd-largest[outdegree over C->c responses] \\\n", - "e5hm9mp 0.222222 \n", - "e5ytz1d 0.111111 \n", - "e6ls80j 0.222222 \n", - "e5mhgl5 0.222222 \n", - "e6w6fah 0.125000 \n", - "... ... \n", - "e65ca8k 0.111111 \n", - "e6cdkpy 0.111111 \n", - "e5wc4tj 0.444444 \n", - "e6ua0sb 0.222222 \n", - "e5ua84v 0.222222 \n", + " 2nd-largest[indegree over C->c mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", + "e5ywqyk 1.0 \n", + "e5qv9rj 1.0 \n", + "e6jhojf 1.0 \n", + "e6989ii 1.0 \n", + "e69lgse 1.0 \n", + "e5kwkg2 1.0 \n", + "e6mehe7 1.0 \n", + "e6m0hsd 1.0 \n", + "e64r385 2.0 \n", + "e5surbt 1.0 \n", + "e58gxii 2.0 \n", + "e64vc8y 1.0 \n", + "e57504g 2.0 \n", + "e5borjq 2.0 \n", + "e64n9zv 1.0 \n", + "e582ud3 1.0 \n", + "e64i9cf 1.0 \n", + "e6q9204 2.0 \n", + "e5modd7 2.0 \n", + "e5xhbyd 2.0 \n", + "e5oaf7h 2.0 \n", + "e6nir3u 1.0 \n", + "e6c3xdn 1.0 \n", + "e5d3zaa 2.0 \n", + "e5gnjv9 0.0 \n", + "e69gw2t 2.0 \n", + "e5syrih 2.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 1.0 \n", + "... ... \n", + "e5smhzk 1.0 \n", + "e5v91s0 1.0 \n", + "e6n6di6 2.0 \n", + "e6iqq30 1.0 \n", + "e5bfad7 2.0 \n", + "e6x5he5 1.0 \n", + "e6l9uyf 1.0 \n", + "e57hyr1 1.0 \n", + "e5b8sj7 2.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 1.0 \n", + "e57a6qq 2.0 \n", + "e5qc7eb 2.0 \n", + "e6hqt5y 1.0 \n", + "e5ua84v 2.0 \n", + "e65m7kq 1.0 \n", + "e5ggtru 2.0 \n", + "e5pmmig 1.0 \n", + "e64l6vq 1.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 1.0 \n", + "e589ri5 1.0 \n", + "e5beuqa 1.0 \n", + "e5lqoj1 1.0 \n", + "e5kvch1 1.0 \n", + "e6srvwm 2.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 1.0 \n", + "e58n526 0.0 \n", + "e69r2kg 2.0 \n", "\n", - " norm.2nd-largest[indegree over C->c responses] \\\n", - "e5hm9mp 0.111111 \n", - "e5ytz1d 0.333333 \n", - "e6ls80j 0.333333 \n", - "e5mhgl5 0.222222 \n", - "e6w6fah 0.000000 \n", - "... ... \n", - "e65ca8k 0.111111 \n", - "e6cdkpy 0.222222 \n", - "e5wc4tj 0.111111 \n", - "e6ua0sb 0.222222 \n", - "e5ua84v 0.222222 \n", + " 2nd-largest[indegree over C->c responses] \\\n", + "e6p7yrp 1.0 \n", + "e5ywqyk 1.0 \n", + "e5qv9rj 3.0 \n", + "e6jhojf 1.0 \n", + "e6989ii 1.0 \n", + "e69lgse 3.0 \n", + "e5kwkg2 2.0 \n", + "e6mehe7 2.0 \n", + "e6m0hsd 1.0 \n", + "e64r385 2.0 \n", + "e5surbt 1.0 \n", + "e58gxii 2.0 \n", + "e64vc8y 1.0 \n", + "e57504g 2.0 \n", + "e5borjq 2.0 \n", + "e64n9zv 1.0 \n", + "e582ud3 2.0 \n", + "e64i9cf 2.0 \n", + "e6q9204 2.0 \n", + "e5modd7 2.0 \n", + "e5xhbyd 2.0 \n", + "e5oaf7h 2.0 \n", + "e6nir3u 1.0 \n", + "e6c3xdn 1.0 \n", + "e5d3zaa 2.0 \n", + "e5gnjv9 1.0 \n", + "e69gw2t 2.0 \n", + "e5syrih 2.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 1.0 \n", + "... ... \n", + "e5smhzk 1.0 \n", + "e5v91s0 2.0 \n", + "e6n6di6 2.0 \n", + "e6iqq30 1.0 \n", + "e5bfad7 2.0 \n", + "e6x5he5 1.0 \n", + "e6l9uyf 2.0 \n", + "e57hyr1 2.0 \n", + "e5b8sj7 3.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 1.0 \n", + "e57a6qq 2.0 \n", + "e5qc7eb 2.0 \n", + "e6hqt5y 4.0 \n", + "e5ua84v 2.0 \n", + "e65m7kq 2.0 \n", + "e5ggtru 2.0 \n", + "e5pmmig 1.0 \n", + "e64l6vq 2.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 2.0 \n", + "e589ri5 1.0 \n", + "e5beuqa 2.0 \n", + "e5lqoj1 1.0 \n", + "e5kvch1 1.0 \n", + "e6srvwm 2.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 3.0 \n", + "e58n526 0.0 \n", + "e69r2kg 2.0 \n", "\n", - " mean[outdegree over C->c responses] \\\n", - "e5hm9mp 1.800000 \n", - "e5ytz1d 1.000000 \n", - "e6ls80j 1.285714 \n", - "e5mhgl5 1.125000 \n", - "e6w6fah 0.888889 \n", - "... ... \n", - "e65ca8k 4.500000 \n", - "e6cdkpy 0.900000 \n", - "e5wc4tj 4.500000 \n", - "e6ua0sb 1.800000 \n", - "e5ua84v 1.285714 \n", + " 2nd-largest[indegree over c->c mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", + "e5ywqyk 1.0 \n", + "e5qv9rj 1.0 \n", + "e6jhojf 1.0 \n", + "e6989ii 1.0 \n", + "e69lgse 1.0 \n", + "e5kwkg2 1.0 \n", + "e6mehe7 1.0 \n", + "e6m0hsd 1.0 \n", + "e64r385 2.0 \n", + "e5surbt 1.0 \n", + "e58gxii 2.0 \n", + "e64vc8y 1.0 \n", + "e57504g 2.0 \n", + "e5borjq 2.0 \n", + "e64n9zv 1.0 \n", + "e582ud3 1.0 \n", + "e64i9cf 1.0 \n", + "e6q9204 2.0 \n", + "e5modd7 2.0 \n", + "e5xhbyd 2.0 \n", + "e5oaf7h 2.0 \n", + "e6nir3u 1.0 \n", + "e6c3xdn 1.0 \n", + "e5d3zaa 2.0 \n", + "e5gnjv9 0.0 \n", + "e69gw2t 2.0 \n", + "e5syrih 2.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 1.0 \n", + "... ... \n", + "e5smhzk 1.0 \n", + "e5v91s0 1.0 \n", + "e6n6di6 2.0 \n", + "e6iqq30 1.0 \n", + "e5bfad7 2.0 \n", + "e6x5he5 1.0 \n", + "e6l9uyf 1.0 \n", + "e57hyr1 1.0 \n", + "e5b8sj7 2.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 1.0 \n", + "e57a6qq 2.0 \n", + "e5qc7eb 2.0 \n", + "e6hqt5y 1.0 \n", + "e5ua84v 2.0 \n", + "e65m7kq 1.0 \n", + "e5ggtru 2.0 \n", + "e5pmmig 1.0 \n", + "e64l6vq 1.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 1.0 \n", + "e589ri5 1.0 \n", + "e5beuqa 1.0 \n", + "e5lqoj1 1.0 \n", + "e5kvch1 1.0 \n", + "e6srvwm 2.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 1.0 \n", + "e58n526 0.0 \n", + "e69r2kg 2.0 \n", "\n", - " mean[indegree over C->c responses] \\\n", - "e5hm9mp 0.9 \n", - "e5ytz1d 0.9 \n", - "e6ls80j 0.9 \n", - "e5mhgl5 0.9 \n", - "e6w6fah 0.8 \n", - "... ... \n", - "e65ca8k 0.9 \n", - "e6cdkpy 0.9 \n", - "e5wc4tj 0.9 \n", - "e6ua0sb 0.9 \n", - "e5ua84v 0.9 \n", + " 2nd-largest[indegree over c->c responses] \\\n", + "e6p7yrp 1.0 \n", + "e5ywqyk 1.0 \n", + "e5qv9rj 3.0 \n", + "e6jhojf 1.0 \n", + "e6989ii 1.0 \n", + "e69lgse 3.0 \n", + "e5kwkg2 2.0 \n", + "e6mehe7 2.0 \n", + "e6m0hsd 1.0 \n", + "e64r385 2.0 \n", + "e5surbt 1.0 \n", + "e58gxii 2.0 \n", + "e64vc8y 1.0 \n", + "e57504g 2.0 \n", + "e5borjq 2.0 \n", + "e64n9zv 1.0 \n", + "e582ud3 2.0 \n", + "e64i9cf 2.0 \n", + "e6q9204 2.0 \n", + "e5modd7 2.0 \n", + "e5xhbyd 2.0 \n", + "e5oaf7h 2.0 \n", + "e6nir3u 1.0 \n", + "e6c3xdn 1.0 \n", + "e5d3zaa 2.0 \n", + "e5gnjv9 1.0 \n", + "e69gw2t 2.0 \n", + "e5syrih 2.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 1.0 \n", + "... ... \n", + "e5smhzk 1.0 \n", + "e5v91s0 2.0 \n", + "e6n6di6 2.0 \n", + "e6iqq30 1.0 \n", + "e5bfad7 2.0 \n", + "e6x5he5 2.0 \n", + "e6l9uyf 2.0 \n", + "e57hyr1 2.0 \n", + "e5b8sj7 3.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 1.0 \n", + "e57a6qq 2.0 \n", + "e5qc7eb 2.0 \n", + "e6hqt5y 4.0 \n", + "e5ua84v 2.0 \n", + "e65m7kq 2.0 \n", + "e5ggtru 2.0 \n", + "e5pmmig 1.0 \n", + "e64l6vq 2.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 2.0 \n", + "e589ri5 1.0 \n", + "e5beuqa 2.0 \n", + "e5lqoj1 1.0 \n", + "e5kvch1 1.0 \n", + "e6srvwm 2.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 3.0 \n", + "e58n526 0.0 \n", + "e69r2kg 2.0 \n", "\n", - " mean-nonzero[outdegree over C->c responses] \\\n", - "e5hm9mp 1.800000 \n", - "e5ytz1d 1.000000 \n", - "e6ls80j 1.500000 \n", - "e5mhgl5 1.285714 \n", - "e6w6fah 1.000000 \n", - "... ... \n", - "e65ca8k 4.500000 \n", - "e6cdkpy 1.000000 \n", - "e5wc4tj 4.500000 \n", - "e6ua0sb 1.800000 \n", - "e5ua84v 1.500000 \n", + " 2nd-largest[outdegree over C->C mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", + "e5ywqyk 1.0 \n", + "e5qv9rj 1.0 \n", + "e6jhojf 1.0 \n", + "e6989ii 1.0 \n", + "e69lgse 1.0 \n", + "e5kwkg2 1.0 \n", + "e6mehe7 1.0 \n", + "e6m0hsd 1.0 \n", + "e64r385 1.0 \n", + "e5surbt 1.0 \n", + "e58gxii 1.0 \n", + "e64vc8y 1.0 \n", + "e57504g 1.0 \n", + "e5borjq 1.0 \n", + "e64n9zv 1.0 \n", + "e582ud3 1.0 \n", + "e64i9cf 1.0 \n", + "e6q9204 1.0 \n", + "e5modd7 1.0 \n", + "e5xhbyd 2.0 \n", + "e5oaf7h 1.0 \n", + "e6nir3u 1.0 \n", + "e6c3xdn 1.0 \n", + "e5d3zaa 1.0 \n", + "e5gnjv9 0.0 \n", + "e69gw2t 1.0 \n", + "e5syrih 1.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 1.0 \n", + "... ... \n", + "e5smhzk 1.0 \n", + "e5v91s0 1.0 \n", + "e6n6di6 1.0 \n", + "e6iqq30 1.0 \n", + "e5bfad7 1.0 \n", + "e6x5he5 0.0 \n", + "e6l9uyf 1.0 \n", + "e57hyr1 1.0 \n", + "e5b8sj7 1.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 1.0 \n", + "e57a6qq 1.0 \n", + "e5qc7eb 1.0 \n", + "e6hqt5y 1.0 \n", + "e5ua84v 2.0 \n", + "e65m7kq 1.0 \n", + "e5ggtru 1.0 \n", + "e5pmmig 2.0 \n", + "e64l6vq 1.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 1.0 \n", + "e589ri5 1.0 \n", + "e5beuqa 1.0 \n", + "e5lqoj1 1.0 \n", + "e5kvch1 1.0 \n", + "e6srvwm 1.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 1.0 \n", + "e58n526 0.0 \n", + "e69r2kg 1.0 \n", "\n", - " mean-nonzero[indegree over C->c responses] \\\n", - "e5hm9mp 1.285714 \n", - "e5ytz1d 2.250000 \n", - "e6ls80j 2.250000 \n", - "e5mhgl5 1.285714 \n", - "e6w6fah 8.000000 \n", + " 2nd-largest[outdegree over C->C responses] \\\n", + "e6p7yrp 1.0 \n", + "e5ywqyk 1.0 \n", + "e5qv9rj 1.0 \n", + "e6jhojf 1.0 \n", + "e6989ii 1.0 \n", + "e69lgse 1.0 \n", + "e5kwkg2 1.0 \n", + "e6mehe7 1.0 \n", + "e6m0hsd 1.0 \n", + "e64r385 2.0 \n", + "e5surbt 1.0 \n", + "e58gxii 1.0 \n", + "e64vc8y 1.0 \n", + "e57504g 2.0 \n", + "e5borjq 1.0 \n", + "e64n9zv 1.0 \n", + "e582ud3 1.0 \n", + "e64i9cf 1.0 \n", + "e6q9204 1.0 \n", + "e5modd7 1.0 \n", + "e5xhbyd 2.0 \n", + "e5oaf7h 1.0 \n", + "e6nir3u 1.0 \n", + "e6c3xdn 1.0 \n", + "e5d3zaa 1.0 \n", + "e5gnjv9 1.0 \n", + "e69gw2t 2.0 \n", + "e5syrih 2.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 1.0 \n", "... ... \n", - "e65ca8k 1.125000 \n", - "e6cdkpy 2.250000 \n", - "e5wc4tj 1.000000 \n", - "e6ua0sb 1.800000 \n", - "e5ua84v 1.500000 \n", + "e5smhzk 1.0 \n", + "e5v91s0 1.0 \n", + "e6n6di6 1.0 \n", + "e6iqq30 1.0 \n", + "e5bfad7 1.0 \n", + "e6x5he5 1.0 \n", + "e6l9uyf 1.0 \n", + "e57hyr1 2.0 \n", + "e5b8sj7 1.0 \n", + "e6nlep7 1.0 \n", + "e6ltazd 1.0 \n", + "e57a6qq 1.0 \n", + "e5qc7eb 1.0 \n", + "e6hqt5y 1.0 \n", + "e5ua84v 2.0 \n", + "e65m7kq 1.0 \n", + "e5ggtru 1.0 \n", + "e5pmmig 2.0 \n", + "e64l6vq 1.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 1.0 \n", + "e589ri5 1.0 \n", + "e5beuqa 2.0 \n", + "e5lqoj1 1.0 \n", + "e5kvch1 2.0 \n", + "e6srvwm 1.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 1.0 \n", + "e58n526 1.0 \n", + "e69r2kg 1.0 \n", "\n", - " prop-nonzero[outdegree over C->c responses] \\\n", - "e5hm9mp 1.000000 \n", - "e5ytz1d 1.000000 \n", - "e6ls80j 0.857143 \n", - "e5mhgl5 0.875000 \n", - "e6w6fah 0.888889 \n", - "... ... \n", - "e65ca8k 1.000000 \n", - "e6cdkpy 0.900000 \n", - "e5wc4tj 1.000000 \n", - "e6ua0sb 1.000000 \n", - "e5ua84v 0.857143 \n", + " 2nd-largest[outdegree over C->c mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", + "e5ywqyk 3.0 \n", + "e5qv9rj 1.0 \n", + "e6jhojf 2.0 \n", + "e6989ii 3.0 \n", + "e69lgse 1.0 \n", + "e5kwkg2 1.0 \n", + "e6mehe7 2.0 \n", + "e6m0hsd 3.0 \n", + "e64r385 1.0 \n", + "e5surbt 1.0 \n", + "e58gxii 1.0 \n", + "e64vc8y 1.0 \n", + "e57504g 1.0 \n", + "e5borjq 1.0 \n", + "e64n9zv 3.0 \n", + "e582ud3 1.0 \n", + "e64i9cf 1.0 \n", + "e6q9204 2.0 \n", + "e5modd7 1.0 \n", + "e5xhbyd 2.0 \n", + "e5oaf7h 3.0 \n", + "e6nir3u 3.0 \n", + "e6c3xdn 1.0 \n", + "e5d3zaa 2.0 \n", + "e5gnjv9 0.0 \n", + "e69gw2t 2.0 \n", + "e5syrih 1.0 \n", + "e5sa2yf 4.0 \n", + "e6ai7z5 1.0 \n", + "... ... \n", + "e5smhzk 3.0 \n", + "e5v91s0 1.0 \n", + "e6n6di6 1.0 \n", + "e6iqq30 1.0 \n", + "e5bfad7 1.0 \n", + "e6x5he5 0.0 \n", + "e6l9uyf 1.0 \n", + "e57hyr1 1.0 \n", + "e5b8sj7 1.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 2.0 \n", + "e57a6qq 2.0 \n", + "e5qc7eb 1.0 \n", + "e6hqt5y 1.0 \n", + "e5ua84v 2.0 \n", + "e65m7kq 1.0 \n", + "e5ggtru 1.0 \n", + "e5pmmig 2.0 \n", + "e64l6vq 1.0 \n", + "e6fjx0d 3.0 \n", + "e5h3xyy 1.0 \n", + "e589ri5 1.0 \n", + "e5beuqa 1.0 \n", + "e5lqoj1 2.0 \n", + "e5kvch1 1.0 \n", + "e6srvwm 1.0 \n", + "e5o65mk 3.0 \n", + "e647cm8 1.0 \n", + "e58n526 0.0 \n", + "e69r2kg 1.0 \n", "\n", - " prop-nonzero[indegree over C->c responses] \\\n", - "e5hm9mp 0.7 \n", - "e5ytz1d 0.4 \n", - "e6ls80j 0.4 \n", - "e5mhgl5 0.7 \n", - "e6w6fah 0.1 \n", + " 2nd-largest[outdegree over C->c responses] \\\n", + "e6p7yrp 2.0 \n", + "e5ywqyk 3.0 \n", + "e5qv9rj 1.0 \n", + "e6jhojf 2.0 \n", + "e6989ii 4.0 \n", + "e69lgse 2.0 \n", + "e5kwkg2 1.0 \n", + "e6mehe7 2.0 \n", + "e6m0hsd 3.0 \n", + "e64r385 2.0 \n", + "e5surbt 1.0 \n", + "e58gxii 2.0 \n", + "e64vc8y 1.0 \n", + "e57504g 2.0 \n", + "e5borjq 1.0 \n", + "e64n9zv 3.0 \n", + "e582ud3 1.0 \n", + "e64i9cf 2.0 \n", + "e6q9204 2.0 \n", + "e5modd7 1.0 \n", + "e5xhbyd 3.0 \n", + "e5oaf7h 3.0 \n", + "e6nir3u 4.0 \n", + "e6c3xdn 1.0 \n", + "e5d3zaa 2.0 \n", + "e5gnjv9 1.0 \n", + "e69gw2t 3.0 \n", + "e5syrih 2.0 \n", + "e5sa2yf 4.0 \n", + "e6ai7z5 1.0 \n", "... ... \n", - "e65ca8k 0.8 \n", - "e6cdkpy 0.4 \n", - "e5wc4tj 0.9 \n", - "e6ua0sb 0.5 \n", - "e5ua84v 0.6 \n", - "\n", - " prop-multiple[outdegree over C->c responses] \\\n", - "e5hm9mp 0.800000 \n", - "e5ytz1d 0.000000 \n", - "e6ls80j 0.333333 \n", - "e5mhgl5 0.285714 \n", - "e6w6fah 0.000000 \n", - "... ... \n", - "e65ca8k 0.500000 \n", - "e6cdkpy 0.000000 \n", - "e5wc4tj 1.000000 \n", - "e6ua0sb 0.600000 \n", - "e5ua84v 0.333333 \n", - "\n", - " prop-multiple[indegree over C->c responses] \\\n", - "e5hm9mp 0.142857 \n", - "e5ytz1d 0.750000 \n", - "e6ls80j 0.500000 \n", - "e5mhgl5 0.285714 \n", - "e6w6fah 1.000000 \n", - "... ... \n", - "e65ca8k 0.125000 \n", - "e6cdkpy 0.750000 \n", - "e5wc4tj 0.000000 \n", - "e6ua0sb 0.400000 \n", - "e5ua84v 0.333333 \n", - "\n", - " entropy[outdegree over C->c responses] \\\n", - "e5hm9mp 1.581094 \n", - "e5ytz1d 2.197225 \n", - "e6ls80j 1.676988 \n", - "e5mhgl5 1.889159 \n", - "e6w6fah 2.079442 \n", - "... ... \n", - "e65ca8k 0.348832 \n", - "e6cdkpy 2.197225 \n", - "e5wc4tj 0.686962 \n", - "e6ua0sb 1.522955 \n", - "e5ua84v 1.676988 \n", - "\n", - " entropy[indegree over C->c responses] \\\n", - "e5hm9mp 1.831020 \n", - "e5ytz1d 1.310784 \n", - "e6ls80j 1.214890 \n", - "e5mhgl5 1.889159 \n", - "e6w6fah 0.000000 \n", - "... ... \n", - "e65ca8k 2.043192 \n", - "e6cdkpy 1.273028 \n", - "e5wc4tj 2.197225 \n", - "e6ua0sb 1.427061 \n", - "e5ua84v 1.676988 \n", - "\n", - " 2nd-largest / max[outdegree over C->c responses] \\\n", - "e5hm9mp 1.000000 \n", - "e5ytz1d 1.000000 \n", - "e6ls80j 0.666667 \n", - "e5mhgl5 1.000000 \n", - "e6w6fah 1.000000 \n", - "... ... \n", - "e65ca8k 0.125000 \n", - "e6cdkpy 1.000000 \n", - "e5wc4tj 0.800000 \n", - "e6ua0sb 0.666667 \n", - "e5ua84v 0.666667 \n", + "e5smhzk 4.0 \n", + "e5v91s0 1.0 \n", + "e6n6di6 1.0 \n", + "e6iqq30 1.0 \n", + "e5bfad7 1.0 \n", + "e6x5he5 1.0 \n", + "e6l9uyf 1.0 \n", + "e57hyr1 2.0 \n", + "e5b8sj7 1.0 \n", + "e6nlep7 1.0 \n", + "e6ltazd 3.0 \n", + "e57a6qq 3.0 \n", + "e5qc7eb 2.0 \n", + "e6hqt5y 1.0 \n", + "e5ua84v 2.0 \n", + "e65m7kq 1.0 \n", + "e5ggtru 1.0 \n", + "e5pmmig 3.0 \n", + "e64l6vq 2.0 \n", + "e6fjx0d 4.0 \n", + "e5h3xyy 1.0 \n", + "e589ri5 1.0 \n", + "e5beuqa 2.0 \n", + "e5lqoj1 2.0 \n", + "e5kvch1 2.0 \n", + "e6srvwm 1.0 \n", + "e5o65mk 4.0 \n", + "e647cm8 1.0 \n", + "e58n526 1.0 \n", + "e69r2kg 1.0 \n", "\n", - " 2nd-largest / max[indegree over C->c responses] \\\n", - "e5hm9mp 0.333333 \n", - "e5ytz1d 1.000000 \n", - "e6ls80j 0.750000 \n", - "e5mhgl5 1.000000 \n", - "e6w6fah 0.000000 \n", + " argmax[indegree over C->C mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", + "e5ywqyk 0.0 \n", + "e5qv9rj 2.0 \n", + "e6jhojf 1.0 \n", + "e6989ii 0.0 \n", + "e69lgse 1.0 \n", + "e5kwkg2 0.0 \n", + "e6mehe7 1.0 \n", + "e6m0hsd 0.0 \n", + "e64r385 1.0 \n", + "e5surbt 0.0 \n", + "e58gxii 1.0 \n", + "e64vc8y 0.0 \n", + "e57504g 0.0 \n", + "e5borjq 3.0 \n", + "e64n9zv 0.0 \n", + "e582ud3 0.0 \n", + "e64i9cf 2.0 \n", + "e6q9204 0.0 \n", + "e5modd7 1.0 \n", + "e5xhbyd 0.0 \n", + "e5oaf7h 0.0 \n", + "e6nir3u 0.0 \n", + "e6c3xdn 0.0 \n", + "e5d3zaa 0.0 \n", + "e5gnjv9 2.0 \n", + "e69gw2t 0.0 \n", + "e5syrih 0.0 \n", + "e5sa2yf 0.0 \n", + "e6ai7z5 0.0 \n", "... ... \n", - "e65ca8k 0.500000 \n", - "e6cdkpy 0.500000 \n", - "e5wc4tj 1.000000 \n", - "e6ua0sb 0.500000 \n", - "e5ua84v 0.666667 \n", - "\n", - " max[outdegree over C->C responses] \\\n", - "e5hm9mp 2.0 \n", - "e5ytz1d 1.0 \n", - "e6ls80j 3.0 \n", - "e5mhgl5 2.0 \n", - "e6w6fah 1.0 \n", - "... ... \n", - "e65ca8k 1.0 \n", - "e6cdkpy 1.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 2.0 \n", - "e5ua84v 3.0 \n", - "\n", - " max[indegree over C->C responses] \\\n", - "e5hm9mp 3.0 \n", - "e5ytz1d 3.0 \n", - "e6ls80j 4.0 \n", - "e5mhgl5 2.0 \n", - "e6w6fah 8.0 \n", - "... ... \n", - "e65ca8k 2.0 \n", - "e6cdkpy 4.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 4.0 \n", - "e5ua84v 4.0 \n", - "\n", - " argmax[outdegree over C->C responses] \\\n", - "e5hm9mp 0.0 \n", - "e5ytz1d 0.0 \n", - "e6ls80j 3.0 \n", - "e5mhgl5 4.0 \n", - "e6w6fah 1.0 \n", - "... ... \n", - "e65ca8k 0.0 \n", - "e6cdkpy 1.0 \n", - "e5wc4tj 0.0 \n", - "e6ua0sb 2.0 \n", - "e5ua84v 1.0 \n", + "e5smhzk 0.0 \n", + "e5v91s0 1.0 \n", + "e6n6di6 1.0 \n", + "e6iqq30 0.0 \n", + "e5bfad7 0.0 \n", + "e6x5he5 0.0 \n", + "e6l9uyf 2.0 \n", + "e57hyr1 4.0 \n", + "e5b8sj7 0.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 0.0 \n", + "e57a6qq 0.0 \n", + "e5qc7eb 1.0 \n", + "e6hqt5y 0.0 \n", + "e5ua84v 0.0 \n", + "e65m7kq 1.0 \n", + "e5ggtru 0.0 \n", + "e5pmmig 0.0 \n", + "e64l6vq 2.0 \n", + "e6fjx0d 0.0 \n", + "e5h3xyy 4.0 \n", + "e589ri5 1.0 \n", + "e5beuqa 1.0 \n", + "e5lqoj1 0.0 \n", + "e5kvch1 3.0 \n", + "e6srvwm 0.0 \n", + "e5o65mk 0.0 \n", + "e647cm8 0.0 \n", + "e58n526 0.0 \n", + "e69r2kg 2.0 \n", "\n", " argmax[indegree over C->C responses] \\\n", - "e5hm9mp 1.0 \n", - "e5ytz1d 0.0 \n", - "e6ls80j 0.0 \n", - "e5mhgl5 1.0 \n", - "e6w6fah 0.0 \n", + "e6p7yrp 0.0 \n", + "e5ywqyk 0.0 \n", + "e5qv9rj 0.0 \n", + "e6jhojf 0.0 \n", + "e6989ii 0.0 \n", + "e69lgse 0.0 \n", + "e5kwkg2 0.0 \n", + "e6mehe7 0.0 \n", + "e6m0hsd 1.0 \n", + "e64r385 0.0 \n", + "e5surbt 0.0 \n", + "e58gxii 0.0 \n", + "e64vc8y 0.0 \n", + "e57504g 0.0 \n", + "e5borjq 4.0 \n", + "e64n9zv 1.0 \n", + "e582ud3 0.0 \n", + "e64i9cf 0.0 \n", + "e6q9204 1.0 \n", + "e5modd7 2.0 \n", + "e5xhbyd 0.0 \n", + "e5oaf7h 1.0 \n", + "e6nir3u 0.0 \n", + "e6c3xdn 1.0 \n", + "e5d3zaa 0.0 \n", + "e5gnjv9 0.0 \n", + "e69gw2t 0.0 \n", + "e5syrih 1.0 \n", + "e5sa2yf 0.0 \n", + "e6ai7z5 0.0 \n", "... ... \n", - "e65ca8k 0.0 \n", - "e6cdkpy 0.0 \n", - "e5wc4tj 0.0 \n", - "e6ua0sb 0.0 \n", + "e5smhzk 0.0 \n", + "e5v91s0 0.0 \n", + "e6n6di6 2.0 \n", + "e6iqq30 0.0 \n", + "e5bfad7 0.0 \n", + "e6x5he5 0.0 \n", + "e6l9uyf 0.0 \n", + "e57hyr1 0.0 \n", + "e5b8sj7 1.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 1.0 \n", + "e57a6qq 1.0 \n", + "e5qc7eb 0.0 \n", + "e6hqt5y 0.0 \n", "e5ua84v 1.0 \n", + "e65m7kq 0.0 \n", + "e5ggtru 1.0 \n", + "e5pmmig 1.0 \n", + "e64l6vq 0.0 \n", + "e6fjx0d 0.0 \n", + "e5h3xyy 0.0 \n", + "e589ri5 0.0 \n", + "e5beuqa 2.0 \n", + "e5lqoj1 0.0 \n", + "e5kvch1 0.0 \n", + "e6srvwm 0.0 \n", + "e5o65mk 0.0 \n", + "e647cm8 0.0 \n", + "e58n526 0.0 \n", + "e69r2kg 2.0 \n", "\n", - " norm.max[outdegree over C->C responses] \\\n", - "e5hm9mp 0.250000 \n", - "e5ytz1d 0.111111 \n", - "e6ls80j 0.333333 \n", - "e5mhgl5 0.250000 \n", - "e6w6fah 0.125000 \n", - "... ... \n", - "e65ca8k 0.500000 \n", - "e6cdkpy 0.111111 \n", - "e5wc4tj 0.500000 \n", - "e6ua0sb 0.285714 \n", - "e5ua84v 0.333333 \n", - "\n", - " norm.max[indegree over C->C responses] \\\n", - "e5hm9mp 0.375000 \n", - "e5ytz1d 0.333333 \n", - "e6ls80j 0.444444 \n", - "e5mhgl5 0.250000 \n", - "e6w6fah 1.000000 \n", - "... ... \n", - "e65ca8k 1.000000 \n", - "e6cdkpy 0.444444 \n", - "e5wc4tj 0.500000 \n", - "e6ua0sb 0.571429 \n", - "e5ua84v 0.444444 \n", - "\n", - " 2nd-largest[outdegree over C->C responses] \\\n", - "e5hm9mp 2.0 \n", - "e5ytz1d 1.0 \n", - "e6ls80j 2.0 \n", - "e5mhgl5 1.0 \n", - "e6w6fah 1.0 \n", - "... ... \n", - "e65ca8k 1.0 \n", - "e6cdkpy 1.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 2.0 \n", - "e5ua84v 2.0 \n", - "\n", - " 2nd-largest[indegree over C->C responses] \\\n", - "e5hm9mp 2.0 \n", - "e5ytz1d 3.0 \n", - "e6ls80j 3.0 \n", - "e5mhgl5 2.0 \n", - "e6w6fah 0.0 \n", - "... ... \n", - "e65ca8k 0.0 \n", - "e6cdkpy 2.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 1.0 \n", - "e5ua84v 2.0 \n", - "\n", - " 2nd-argmax[outdegree over C->C responses] \\\n", - "e5hm9mp 2.0 \n", - "e5ytz1d 1.0 \n", - "e6ls80j 2.0 \n", - "e5mhgl5 1.0 \n", - "e6w6fah 2.0 \n", - "... ... \n", - "e65ca8k 1.0 \n", - "e6cdkpy 2.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 4.0 \n", - "e5ua84v 4.0 \n", + " argmax[indegree over C->c mid-thread responses] \\\n", + "e6p7yrp 0.0 \n", + "e5ywqyk 0.0 \n", + "e5qv9rj 2.0 \n", + "e6jhojf 3.0 \n", + "e6989ii 0.0 \n", + "e69lgse 1.0 \n", + "e5kwkg2 0.0 \n", + "e6mehe7 1.0 \n", + "e6m0hsd 0.0 \n", + "e64r385 1.0 \n", + "e5surbt 0.0 \n", + "e58gxii 1.0 \n", + "e64vc8y 0.0 \n", + "e57504g 0.0 \n", + "e5borjq 3.0 \n", + "e64n9zv 2.0 \n", + "e582ud3 0.0 \n", + "e64i9cf 2.0 \n", + "e6q9204 0.0 \n", + "e5modd7 1.0 \n", + "e5xhbyd 0.0 \n", + "e5oaf7h 0.0 \n", + "e6nir3u 0.0 \n", + "e6c3xdn 0.0 \n", + "e5d3zaa 0.0 \n", + "e5gnjv9 2.0 \n", + "e69gw2t 0.0 \n", + "e5syrih 0.0 \n", + "e5sa2yf 0.0 \n", + "e6ai7z5 0.0 \n", + "... ... \n", + "e5smhzk 0.0 \n", + "e5v91s0 1.0 \n", + "e6n6di6 5.0 \n", + "e6iqq30 0.0 \n", + "e5bfad7 0.0 \n", + "e6x5he5 0.0 \n", + "e6l9uyf 3.0 \n", + "e57hyr1 4.0 \n", + "e5b8sj7 0.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 0.0 \n", + "e57a6qq 1.0 \n", + "e5qc7eb 3.0 \n", + "e6hqt5y 0.0 \n", + "e5ua84v 0.0 \n", + "e65m7kq 1.0 \n", + "e5ggtru 0.0 \n", + "e5pmmig 0.0 \n", + "e64l6vq 4.0 \n", + "e6fjx0d 0.0 \n", + "e5h3xyy 4.0 \n", + "e589ri5 1.0 \n", + "e5beuqa 1.0 \n", + "e5lqoj1 0.0 \n", + "e5kvch1 1.0 \n", + "e6srvwm 0.0 \n", + "e5o65mk 0.0 \n", + "e647cm8 0.0 \n", + "e58n526 0.0 \n", + "e69r2kg 0.0 \n", "\n", - " 2nd-argmax[indegree over C->C responses] \\\n", - "e5hm9mp 0.0 \n", - "e5ytz1d 2.0 \n", - "e6ls80j 2.0 \n", - "e5mhgl5 4.0 \n", - "e6w6fah 1.0 \n", - "... ... \n", - "e65ca8k 1.0 \n", - "e6cdkpy 1.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 1.0 \n", - "e5ua84v 4.0 \n", + " argmax[indegree over C->c responses] \\\n", + "e6p7yrp 0.0 \n", + "e5ywqyk 1.0 \n", + "e5qv9rj 0.0 \n", + "e6jhojf 4.0 \n", + "e6989ii 0.0 \n", + "e69lgse 0.0 \n", + "e5kwkg2 0.0 \n", + "e6mehe7 0.0 \n", + "e6m0hsd 1.0 \n", + "e64r385 0.0 \n", + "e5surbt 0.0 \n", + "e58gxii 0.0 \n", + "e64vc8y 0.0 \n", + "e57504g 0.0 \n", + "e5borjq 4.0 \n", + "e64n9zv 3.0 \n", + "e582ud3 0.0 \n", + "e64i9cf 0.0 \n", + "e6q9204 1.0 \n", + "e5modd7 2.0 \n", + "e5xhbyd 1.0 \n", + "e5oaf7h 1.0 \n", + "e6nir3u 0.0 \n", + "e6c3xdn 1.0 \n", + "e5d3zaa 0.0 \n", + "e5gnjv9 0.0 \n", + "e69gw2t 0.0 \n", + "e5syrih 1.0 \n", + "e5sa2yf 0.0 \n", + "e6ai7z5 0.0 \n", + "... ... \n", + "e5smhzk 0.0 \n", + "e5v91s0 0.0 \n", + "e6n6di6 6.0 \n", + "e6iqq30 0.0 \n", + "e5bfad7 0.0 \n", + "e6x5he5 0.0 \n", + "e6l9uyf 0.0 \n", + "e57hyr1 0.0 \n", + "e5b8sj7 0.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 1.0 \n", + "e57a6qq 2.0 \n", + "e5qc7eb 4.0 \n", + "e6hqt5y 0.0 \n", + "e5ua84v 1.0 \n", + "e65m7kq 0.0 \n", + "e5ggtru 1.0 \n", + "e5pmmig 1.0 \n", + "e64l6vq 0.0 \n", + "e6fjx0d 0.0 \n", + "e5h3xyy 0.0 \n", + "e589ri5 0.0 \n", + "e5beuqa 2.0 \n", + "e5lqoj1 0.0 \n", + "e5kvch1 0.0 \n", + "e6srvwm 0.0 \n", + "e5o65mk 0.0 \n", + "e647cm8 0.0 \n", + "e58n526 0.0 \n", + "e69r2kg 0.0 \n", "\n", - " norm.2nd-largest[outdegree over C->C responses] \\\n", - "e5hm9mp 0.250000 \n", - "e5ytz1d 0.111111 \n", - "e6ls80j 0.222222 \n", - "e5mhgl5 0.125000 \n", - "e6w6fah 0.125000 \n", + " argmax[indegree over c->c mid-thread responses] \\\n", + "e6p7yrp 0.0 \n", + "e5ywqyk 0.0 \n", + "e5qv9rj 2.0 \n", + "e6jhojf 3.0 \n", + "e6989ii 5.0 \n", + "e69lgse 1.0 \n", + "e5kwkg2 0.0 \n", + "e6mehe7 1.0 \n", + "e6m0hsd 0.0 \n", + "e64r385 1.0 \n", + "e5surbt 0.0 \n", + "e58gxii 1.0 \n", + "e64vc8y 0.0 \n", + "e57504g 0.0 \n", + "e5borjq 3.0 \n", + "e64n9zv 2.0 \n", + "e582ud3 0.0 \n", + "e64i9cf 2.0 \n", + "e6q9204 0.0 \n", + "e5modd7 1.0 \n", + "e5xhbyd 0.0 \n", + "e5oaf7h 0.0 \n", + "e6nir3u 6.0 \n", + "e6c3xdn 0.0 \n", + "e5d3zaa 0.0 \n", + "e5gnjv9 2.0 \n", + "e69gw2t 0.0 \n", + "e5syrih 0.0 \n", + "e5sa2yf 0.0 \n", + "e6ai7z5 0.0 \n", "... ... \n", - "e65ca8k 0.500000 \n", - "e6cdkpy 0.111111 \n", - "e5wc4tj 0.500000 \n", - "e6ua0sb 0.285714 \n", - "e5ua84v 0.222222 \n", - "\n", - " norm.2nd-largest[indegree over C->C responses] \\\n", - "e5hm9mp 0.250000 \n", - "e5ytz1d 0.333333 \n", - "e6ls80j 0.333333 \n", - "e5mhgl5 0.250000 \n", - "e6w6fah 0.000000 \n", - "... ... \n", - "e65ca8k 0.000000 \n", - "e6cdkpy 0.222222 \n", - "e5wc4tj 0.500000 \n", - "e6ua0sb 0.142857 \n", - "e5ua84v 0.222222 \n", + "e5smhzk 0.0 \n", + "e5v91s0 1.0 \n", + "e6n6di6 5.0 \n", + "e6iqq30 0.0 \n", + "e5bfad7 0.0 \n", + "e6x5he5 3.0 \n", + "e6l9uyf 3.0 \n", + "e57hyr1 4.0 \n", + "e5b8sj7 0.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 0.0 \n", + "e57a6qq 1.0 \n", + "e5qc7eb 3.0 \n", + "e6hqt5y 0.0 \n", + "e5ua84v 0.0 \n", + "e65m7kq 1.0 \n", + "e5ggtru 0.0 \n", + "e5pmmig 0.0 \n", + "e64l6vq 4.0 \n", + "e6fjx0d 0.0 \n", + "e5h3xyy 4.0 \n", + "e589ri5 1.0 \n", + "e5beuqa 1.0 \n", + "e5lqoj1 0.0 \n", + "e5kvch1 1.0 \n", + "e6srvwm 0.0 \n", + "e5o65mk 0.0 \n", + "e647cm8 0.0 \n", + "e58n526 0.0 \n", + "e69r2kg 0.0 \n", "\n", - " mean[outdegree over C->C responses] \\\n", - "e5hm9mp 1.600000 \n", - "e5ytz1d 1.000000 \n", - "e6ls80j 1.285714 \n", - "e5mhgl5 1.000000 \n", - "e6w6fah 0.888889 \n", - "... ... \n", - "e65ca8k 1.000000 \n", - "e6cdkpy 0.900000 \n", - "e5wc4tj 1.000000 \n", - "e6ua0sb 1.400000 \n", - "e5ua84v 1.285714 \n", + " argmax[indegree over c->c responses] \\\n", + "e6p7yrp 0.0 \n", + "e5ywqyk 1.0 \n", + "e5qv9rj 0.0 \n", + "e6jhojf 4.0 \n", + "e6989ii 6.0 \n", + "e69lgse 0.0 \n", + "e5kwkg2 0.0 \n", + "e6mehe7 0.0 \n", + "e6m0hsd 1.0 \n", + "e64r385 0.0 \n", + "e5surbt 0.0 \n", + "e58gxii 0.0 \n", + "e64vc8y 0.0 \n", + "e57504g 0.0 \n", + "e5borjq 4.0 \n", + "e64n9zv 3.0 \n", + "e582ud3 0.0 \n", + "e64i9cf 0.0 \n", + "e6q9204 1.0 \n", + "e5modd7 2.0 \n", + "e5xhbyd 1.0 \n", + "e5oaf7h 1.0 \n", + "e6nir3u 7.0 \n", + "e6c3xdn 1.0 \n", + "e5d3zaa 0.0 \n", + "e5gnjv9 0.0 \n", + "e69gw2t 0.0 \n", + "e5syrih 1.0 \n", + "e5sa2yf 0.0 \n", + "e6ai7z5 0.0 \n", + "... ... \n", + "e5smhzk 0.0 \n", + "e5v91s0 0.0 \n", + "e6n6di6 6.0 \n", + "e6iqq30 0.0 \n", + "e5bfad7 0.0 \n", + "e6x5he5 0.0 \n", + "e6l9uyf 0.0 \n", + "e57hyr1 0.0 \n", + "e5b8sj7 0.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 1.0 \n", + "e57a6qq 2.0 \n", + "e5qc7eb 4.0 \n", + "e6hqt5y 0.0 \n", + "e5ua84v 1.0 \n", + "e65m7kq 0.0 \n", + "e5ggtru 1.0 \n", + "e5pmmig 1.0 \n", + "e64l6vq 0.0 \n", + "e6fjx0d 0.0 \n", + "e5h3xyy 0.0 \n", + "e589ri5 0.0 \n", + "e5beuqa 2.0 \n", + "e5lqoj1 0.0 \n", + "e5kvch1 0.0 \n", + "e6srvwm 0.0 \n", + "e5o65mk 0.0 \n", + "e647cm8 0.0 \n", + "e58n526 0.0 \n", + "e69r2kg 0.0 \n", "\n", - " mean[indegree over C->C responses] \\\n", - "e5hm9mp 1.600000 \n", - "e5ytz1d 1.000000 \n", - "e6ls80j 1.285714 \n", - "e5mhgl5 1.000000 \n", - "e6w6fah 0.888889 \n", - "... ... \n", - "e65ca8k 1.000000 \n", - "e6cdkpy 0.900000 \n", - "e5wc4tj 1.000000 \n", - "e6ua0sb 1.400000 \n", - "e5ua84v 1.285714 \n", + " argmax[outdegree over C->C mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", + "e5ywqyk 1.0 \n", + "e5qv9rj 2.0 \n", + "e6jhojf 1.0 \n", + "e6989ii 0.0 \n", + "e69lgse 2.0 \n", + "e5kwkg2 1.0 \n", + "e6mehe7 2.0 \n", + "e6m0hsd 0.0 \n", + "e64r385 2.0 \n", + "e5surbt 1.0 \n", + "e58gxii 1.0 \n", + "e64vc8y 3.0 \n", + "e57504g 5.0 \n", + "e5borjq 1.0 \n", + "e64n9zv 0.0 \n", + "e582ud3 4.0 \n", + "e64i9cf 1.0 \n", + "e6q9204 0.0 \n", + "e5modd7 1.0 \n", + "e5xhbyd 0.0 \n", + "e5oaf7h 0.0 \n", + "e6nir3u 0.0 \n", + "e6c3xdn 1.0 \n", + "e5d3zaa 0.0 \n", + "e5gnjv9 6.0 \n", + "e69gw2t 2.0 \n", + "e5syrih 3.0 \n", + "e5sa2yf 0.0 \n", + "e6ai7z5 0.0 \n", + "... ... \n", + "e5smhzk 1.0 \n", + "e5v91s0 3.0 \n", + "e6n6di6 1.0 \n", + "e6iqq30 4.0 \n", + "e5bfad7 2.0 \n", + "e6x5he5 1.0 \n", + "e6l9uyf 2.0 \n", + "e57hyr1 1.0 \n", + "e5b8sj7 0.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 0.0 \n", + "e57a6qq 1.0 \n", + "e5qc7eb 0.0 \n", + "e6hqt5y 1.0 \n", + "e5ua84v 0.0 \n", + "e65m7kq 1.0 \n", + "e5ggtru 0.0 \n", + "e5pmmig 0.0 \n", + "e64l6vq 1.0 \n", + "e6fjx0d 0.0 \n", + "e5h3xyy 2.0 \n", + "e589ri5 4.0 \n", + "e5beuqa 1.0 \n", + "e5lqoj1 4.0 \n", + "e5kvch1 1.0 \n", + "e6srvwm 0.0 \n", + "e5o65mk 0.0 \n", + "e647cm8 1.0 \n", + "e58n526 0.0 \n", + "e69r2kg 2.0 \n", "\n", - " mean-nonzero[outdegree over C->C responses] \\\n", - "e5hm9mp 1.600000 \n", - "e5ytz1d 1.000000 \n", - "e6ls80j 1.500000 \n", - "e5mhgl5 1.142857 \n", - "e6w6fah 1.000000 \n", - "... ... \n", - "e65ca8k 1.000000 \n", - "e6cdkpy 1.000000 \n", - "e5wc4tj 1.000000 \n", - "e6ua0sb 1.400000 \n", - "e5ua84v 1.500000 \n", + " argmax[outdegree over C->C responses] \\\n", + "e6p7yrp 0.0 \n", + "e5ywqyk 0.0 \n", + "e5qv9rj 1.0 \n", + "e6jhojf 0.0 \n", + "e6989ii 0.0 \n", + "e69lgse 0.0 \n", + "e5kwkg2 1.0 \n", + "e6mehe7 0.0 \n", + "e6m0hsd 1.0 \n", + "e64r385 2.0 \n", + "e5surbt 1.0 \n", + "e58gxii 0.0 \n", + "e64vc8y 1.0 \n", + "e57504g 5.0 \n", + "e5borjq 4.0 \n", + "e64n9zv 1.0 \n", + "e582ud3 1.0 \n", + "e64i9cf 0.0 \n", + "e6q9204 1.0 \n", + "e5modd7 1.0 \n", + "e5xhbyd 0.0 \n", + "e5oaf7h 1.0 \n", + "e6nir3u 0.0 \n", + "e6c3xdn 1.0 \n", + "e5d3zaa 1.0 \n", + "e5gnjv9 7.0 \n", + "e69gw2t 1.0 \n", + "e5syrih 1.0 \n", + "e5sa2yf 0.0 \n", + "e6ai7z5 1.0 \n", + "... ... \n", + "e5smhzk 0.0 \n", + "e5v91s0 1.0 \n", + "e6n6di6 2.0 \n", + "e6iqq30 0.0 \n", + "e5bfad7 0.0 \n", + "e6x5he5 0.0 \n", + "e6l9uyf 3.0 \n", + "e57hyr1 2.0 \n", + "e5b8sj7 1.0 \n", + "e6nlep7 1.0 \n", + "e6ltazd 1.0 \n", + "e57a6qq 0.0 \n", + "e5qc7eb 1.0 \n", + "e6hqt5y 4.0 \n", + "e5ua84v 1.0 \n", + "e65m7kq 2.0 \n", + "e5ggtru 1.0 \n", + "e5pmmig 1.0 \n", + "e64l6vq 0.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 5.0 \n", + "e589ri5 1.0 \n", + "e5beuqa 2.0 \n", + "e5lqoj1 5.0 \n", + "e5kvch1 2.0 \n", + "e6srvwm 1.0 \n", + "e5o65mk 0.0 \n", + "e647cm8 0.0 \n", + "e58n526 1.0 \n", + "e69r2kg 2.0 \n", "\n", - " mean-nonzero[indegree over C->C responses] \\\n", - "e5hm9mp 1.600000 \n", - "e5ytz1d 2.250000 \n", - "e6ls80j 2.250000 \n", - "e5mhgl5 1.333333 \n", - "e6w6fah 8.000000 \n", - "... ... \n", - "e65ca8k 2.000000 \n", - "e6cdkpy 2.250000 \n", - "e5wc4tj 1.000000 \n", - "e6ua0sb 1.750000 \n", - "e5ua84v 1.800000 \n", + " argmax[outdegree over C->c mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", + "e5ywqyk 1.0 \n", + "e5qv9rj 2.0 \n", + "e6jhojf 1.0 \n", + "e6989ii 1.0 \n", + "e69lgse 2.0 \n", + "e5kwkg2 1.0 \n", + "e6mehe7 2.0 \n", + "e6m0hsd 0.0 \n", + "e64r385 2.0 \n", + "e5surbt 1.0 \n", + "e58gxii 1.0 \n", + "e64vc8y 3.0 \n", + "e57504g 5.0 \n", + "e5borjq 1.0 \n", + "e64n9zv 0.0 \n", + "e582ud3 4.0 \n", + "e64i9cf 1.0 \n", + "e6q9204 0.0 \n", + "e5modd7 1.0 \n", + "e5xhbyd 1.0 \n", + "e5oaf7h 0.0 \n", + "e6nir3u 1.0 \n", + "e6c3xdn 1.0 \n", + "e5d3zaa 0.0 \n", + "e5gnjv9 6.0 \n", + "e69gw2t 2.0 \n", + "e5syrih 3.0 \n", + "e5sa2yf 0.0 \n", + "e6ai7z5 0.0 \n", + "... ... \n", + "e5smhzk 1.0 \n", + "e5v91s0 3.0 \n", + "e6n6di6 1.0 \n", + "e6iqq30 4.0 \n", + "e5bfad7 2.0 \n", + "e6x5he5 1.0 \n", + "e6l9uyf 2.0 \n", + "e57hyr1 1.0 \n", + "e5b8sj7 0.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 4.0 \n", + "e57a6qq 1.0 \n", + "e5qc7eb 2.0 \n", + "e6hqt5y 1.0 \n", + "e5ua84v 0.0 \n", + "e65m7kq 1.0 \n", + "e5ggtru 0.0 \n", + "e5pmmig 2.0 \n", + "e64l6vq 1.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 2.0 \n", + "e589ri5 4.0 \n", + "e5beuqa 1.0 \n", + "e5lqoj1 4.0 \n", + "e5kvch1 2.0 \n", + "e6srvwm 0.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 1.0 \n", + "e58n526 0.0 \n", + "e69r2kg 2.0 \n", "\n", - " prop-nonzero[outdegree over C->C responses] \\\n", - "e5hm9mp 1.000000 \n", - "e5ytz1d 1.000000 \n", - "e6ls80j 0.857143 \n", - "e5mhgl5 0.875000 \n", - "e6w6fah 0.888889 \n", - "... ... \n", - "e65ca8k 1.000000 \n", - "e6cdkpy 0.900000 \n", - "e5wc4tj 1.000000 \n", - "e6ua0sb 1.000000 \n", - "e5ua84v 0.857143 \n", + " argmax[outdegree over C->c responses] \\\n", + "e6p7yrp 0.0 \n", + "e5ywqyk 0.0 \n", + "e5qv9rj 1.0 \n", + "e6jhojf 0.0 \n", + "e6989ii 0.0 \n", + "e69lgse 0.0 \n", + "e5kwkg2 1.0 \n", + "e6mehe7 0.0 \n", + "e6m0hsd 1.0 \n", + "e64r385 2.0 \n", + "e5surbt 1.0 \n", + "e58gxii 0.0 \n", + "e64vc8y 1.0 \n", + "e57504g 5.0 \n", + "e5borjq 4.0 \n", + "e64n9zv 1.0 \n", + "e582ud3 1.0 \n", + "e64i9cf 0.0 \n", + "e6q9204 1.0 \n", + "e5modd7 1.0 \n", + "e5xhbyd 0.0 \n", + "e5oaf7h 1.0 \n", + "e6nir3u 0.0 \n", + "e6c3xdn 1.0 \n", + "e5d3zaa 1.0 \n", + "e5gnjv9 7.0 \n", + "e69gw2t 1.0 \n", + "e5syrih 1.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 1.0 \n", + "... ... \n", + "e5smhzk 0.0 \n", + "e5v91s0 1.0 \n", + "e6n6di6 2.0 \n", + "e6iqq30 0.0 \n", + "e5bfad7 0.0 \n", + "e6x5he5 0.0 \n", + "e6l9uyf 3.0 \n", + "e57hyr1 2.0 \n", + "e5b8sj7 1.0 \n", + "e6nlep7 1.0 \n", + "e6ltazd 1.0 \n", + "e57a6qq 0.0 \n", + "e5qc7eb 0.0 \n", + "e6hqt5y 4.0 \n", + "e5ua84v 1.0 \n", + "e65m7kq 2.0 \n", + "e5ggtru 1.0 \n", + "e5pmmig 1.0 \n", + "e64l6vq 0.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 5.0 \n", + "e589ri5 1.0 \n", + "e5beuqa 2.0 \n", + "e5lqoj1 5.0 \n", + "e5kvch1 2.0 \n", + "e6srvwm 1.0 \n", + "e5o65mk 0.0 \n", + "e647cm8 0.0 \n", + "e58n526 1.0 \n", + "e69r2kg 2.0 \n", "\n", - " prop-nonzero[indegree over C->C responses] \\\n", - "e5hm9mp 1.000000 \n", - "e5ytz1d 0.444444 \n", - "e6ls80j 0.571429 \n", - "e5mhgl5 0.750000 \n", - "e6w6fah 0.111111 \n", - "... ... \n", - "e65ca8k 0.500000 \n", - "e6cdkpy 0.400000 \n", - "e5wc4tj 1.000000 \n", - "e6ua0sb 0.800000 \n", - "e5ua84v 0.714286 \n", + " count[dyadic interaction motif over mid-thread] \\\n", + "e6p7yrp 2.0 \n", + "e5ywqyk 1.0 \n", + "e5qv9rj 0.0 \n", + "e6jhojf 3.0 \n", + "e6989ii 1.0 \n", + "e69lgse 1.0 \n", + "e5kwkg2 0.0 \n", + "e6mehe7 1.0 \n", + "e6m0hsd 2.0 \n", + "e64r385 2.0 \n", + "e5surbt 0.0 \n", + "e58gxii 2.0 \n", + "e64vc8y 0.0 \n", + "e57504g 1.0 \n", + "e5borjq 1.0 \n", + "e64n9zv 2.0 \n", + "e582ud3 0.0 \n", + "e64i9cf 1.0 \n", + "e6q9204 2.0 \n", + "e5modd7 0.0 \n", + "e5xhbyd 3.0 \n", + "e5oaf7h 1.0 \n", + "e6nir3u 1.0 \n", + "e6c3xdn 0.0 \n", + "e5d3zaa 1.0 \n", + "e5gnjv9 0.0 \n", + "e69gw2t 2.0 \n", + "e5syrih 1.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 2.0 \n", + "... ... \n", + "e5smhzk 1.0 \n", + "e5v91s0 0.0 \n", + "e6n6di6 1.0 \n", + "e6iqq30 0.0 \n", + "e5bfad7 0.0 \n", + "e6x5he5 0.0 \n", + "e6l9uyf 0.0 \n", + "e57hyr1 2.0 \n", + "e5b8sj7 1.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 1.0 \n", + "e57a6qq 2.0 \n", + "e5qc7eb 1.0 \n", + "e6hqt5y 0.0 \n", + "e5ua84v 3.0 \n", + "e65m7kq 1.0 \n", + "e5ggtru 0.0 \n", + "e5pmmig 3.0 \n", + "e64l6vq 1.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 1.0 \n", + "e589ri5 0.0 \n", + "e5beuqa 3.0 \n", + "e5lqoj1 1.0 \n", + "e5kvch1 2.0 \n", + "e6srvwm 1.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 0.0 \n", + "e58n526 0.0 \n", + "e69r2kg 1.0 \n", + "\n", + " count[dyadic interaction motif] \\\n", + "e6p7yrp 3.0 \n", + "e5ywqyk 2.0 \n", + "e5qv9rj 0.0 \n", + "e6jhojf 4.0 \n", + "e6989ii 1.0 \n", + "e69lgse 1.0 \n", + "e5kwkg2 0.0 \n", + "e6mehe7 3.0 \n", + "e6m0hsd 2.0 \n", + "e64r385 2.0 \n", + "e5surbt 0.0 \n", + "e58gxii 3.0 \n", + "e64vc8y 0.0 \n", + "e57504g 1.0 \n", + "e5borjq 2.0 \n", + "e64n9zv 2.0 \n", + "e582ud3 0.0 \n", + "e64i9cf 2.0 \n", + "e6q9204 2.0 \n", + "e5modd7 0.0 \n", + "e5xhbyd 3.0 \n", + "e5oaf7h 1.0 \n", + "e6nir3u 1.0 \n", + "e6c3xdn 0.0 \n", + "e5d3zaa 1.0 \n", + "e5gnjv9 0.0 \n", + "e69gw2t 3.0 \n", + "e5syrih 2.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 2.0 \n", + "... ... \n", + "e5smhzk 2.0 \n", + "e5v91s0 0.0 \n", + "e6n6di6 1.0 \n", + "e6iqq30 1.0 \n", + "e5bfad7 2.0 \n", + "e6x5he5 4.0 \n", + "e6l9uyf 0.0 \n", + "e57hyr1 2.0 \n", + "e5b8sj7 2.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 1.0 \n", + "e57a6qq 2.0 \n", + "e5qc7eb 1.0 \n", + "e6hqt5y 0.0 \n", + "e5ua84v 3.0 \n", + "e65m7kq 1.0 \n", + "e5ggtru 0.0 \n", + "e5pmmig 3.0 \n", + "e64l6vq 2.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 1.0 \n", + "e589ri5 0.0 \n", + "e5beuqa 3.0 \n", + "e5lqoj1 1.0 \n", + "e5kvch1 2.0 \n", + "e6srvwm 1.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 1.0 \n", + "e58n526 0.0 \n", + "e69r2kg 2.0 \n", "\n", - " prop-multiple[outdegree over C->C responses] \\\n", - "e5hm9mp 0.600000 \n", - "e5ytz1d 0.000000 \n", - "e6ls80j 0.333333 \n", - "e5mhgl5 0.142857 \n", - "e6w6fah 0.000000 \n", - "... ... \n", - "e65ca8k 0.000000 \n", - "e6cdkpy 0.000000 \n", - "e5wc4tj 0.000000 \n", - "e6ua0sb 0.400000 \n", - "e5ua84v 0.333333 \n", + " count[external reciprocity motif over mid-thread] \\\n", + "e6p7yrp 2.0 \n", + "e5ywqyk 1.0 \n", + "e5qv9rj 5.0 \n", + "e6jhojf 4.0 \n", + "e6989ii 0.0 \n", + "e69lgse 2.0 \n", + "e5kwkg2 3.0 \n", + "e6mehe7 1.0 \n", + "e6m0hsd 0.0 \n", + "e64r385 2.0 \n", + "e5surbt 3.0 \n", + "e58gxii 3.0 \n", + "e64vc8y 1.0 \n", + "e57504g 4.0 \n", + "e5borjq 1.0 \n", + "e64n9zv 1.0 \n", + "e582ud3 0.0 \n", + "e64i9cf 0.0 \n", + "e6q9204 2.0 \n", + "e5modd7 6.0 \n", + "e5xhbyd 1.0 \n", + "e5oaf7h 1.0 \n", + "e6nir3u 0.0 \n", + "e6c3xdn 6.0 \n", + "e5d3zaa 2.0 \n", + "e5gnjv9 0.0 \n", + "e69gw2t 1.0 \n", + "e5syrih 4.0 \n", + "e5sa2yf 0.0 \n", + "e6ai7z5 1.0 \n", + "... ... \n", + "e5smhzk 0.0 \n", + "e5v91s0 1.0 \n", + "e6n6di6 5.0 \n", + "e6iqq30 0.0 \n", + "e5bfad7 3.0 \n", + "e6x5he5 0.0 \n", + "e6l9uyf 1.0 \n", + "e57hyr1 1.0 \n", + "e5b8sj7 2.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 0.0 \n", + "e57a6qq 3.0 \n", + "e5qc7eb 4.0 \n", + "e6hqt5y 0.0 \n", + "e5ua84v 2.0 \n", + "e65m7kq 2.0 \n", + "e5ggtru 4.0 \n", + "e5pmmig 2.0 \n", + "e64l6vq 0.0 \n", + "e6fjx0d 0.0 \n", + "e5h3xyy 1.0 \n", + "e589ri5 1.0 \n", + "e5beuqa 1.0 \n", + "e5lqoj1 0.0 \n", + "e5kvch1 1.0 \n", + "e6srvwm 1.0 \n", + "e5o65mk 0.0 \n", + "e647cm8 1.0 \n", + "e58n526 0.0 \n", + "e69r2kg 4.0 \n", "\n", - " prop-multiple[indegree over C->C responses] \\\n", - "e5hm9mp 0.400000 \n", - "e5ytz1d 0.750000 \n", - "e6ls80j 0.500000 \n", - "e5mhgl5 0.333333 \n", - "e6w6fah 1.000000 \n", - "... ... \n", - "e65ca8k 1.000000 \n", - "e6cdkpy 0.750000 \n", - "e5wc4tj 0.000000 \n", - "e6ua0sb 0.250000 \n", - "e5ua84v 0.400000 \n", + " count[external reciprocity motif] \\\n", + "e6p7yrp 2.0 \n", + "e5ywqyk 2.0 \n", + "e5qv9rj 6.0 \n", + "e6jhojf 4.0 \n", + "e6989ii 0.0 \n", + "e69lgse 4.0 \n", + "e5kwkg2 6.0 \n", + "e6mehe7 2.0 \n", + "e6m0hsd 1.0 \n", + "e64r385 5.0 \n", + "e5surbt 4.0 \n", + "e58gxii 3.0 \n", + "e64vc8y 3.0 \n", + "e57504g 6.0 \n", + "e5borjq 5.0 \n", + "e64n9zv 1.0 \n", + "e582ud3 3.0 \n", + "e64i9cf 1.0 \n", + "e6q9204 4.0 \n", + "e5modd7 8.0 \n", + "e5xhbyd 2.0 \n", + "e5oaf7h 2.0 \n", + "e6nir3u 0.0 \n", + "e6c3xdn 8.0 \n", + "e5d3zaa 4.0 \n", + "e5gnjv9 1.0 \n", + "e69gw2t 2.0 \n", + "e5syrih 6.0 \n", + "e5sa2yf 0.0 \n", + "e6ai7z5 4.0 \n", + "... ... \n", + "e5smhzk 0.0 \n", + "e5v91s0 4.0 \n", + "e6n6di6 7.0 \n", + "e6iqq30 2.0 \n", + "e5bfad7 4.0 \n", + "e6x5he5 0.0 \n", + "e6l9uyf 4.0 \n", + "e57hyr1 3.0 \n", + "e5b8sj7 4.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 4.0 \n", + "e57a6qq 3.0 \n", + "e5qc7eb 4.0 \n", + "e6hqt5y 5.0 \n", + "e5ua84v 5.0 \n", + "e65m7kq 4.0 \n", + "e5ggtru 8.0 \n", + "e5pmmig 4.0 \n", + "e64l6vq 2.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 4.0 \n", + "e589ri5 3.0 \n", + "e5beuqa 4.0 \n", + "e5lqoj1 2.0 \n", + "e5kvch1 3.0 \n", + "e6srvwm 5.0 \n", + "e5o65mk 0.0 \n", + "e647cm8 4.0 \n", + "e58n526 0.0 \n", + "e69r2kg 5.0 \n", + "\n", + " count[incoming triads over mid-thread] count[incoming triads] \\\n", + "e6p7yrp 3.0 10.0 \n", + "e5ywqyk 1.0 2.0 \n", + "e5qv9rj 3.0 6.0 \n", + "e6jhojf 3.0 6.0 \n", + "e6989ii 0.0 0.0 \n", + "e69lgse 3.0 6.0 \n", + "e5kwkg2 1.0 4.0 \n", + "e6mehe7 1.0 7.0 \n", + "e6m0hsd 1.0 1.0 \n", + "e64r385 2.0 3.0 \n", + "e5surbt 0.0 10.0 \n", + "e58gxii 4.0 7.0 \n", + "e64vc8y 0.0 15.0 \n", + "e57504g 2.0 3.0 \n", + "e5borjq 4.0 5.0 \n", + "e64n9zv 1.0 1.0 \n", + "e582ud3 1.0 16.0 \n", + "e64i9cf 1.0 7.0 \n", + "e6q9204 4.0 4.0 \n", + "e5modd7 8.0 8.0 \n", + "e5xhbyd 2.0 2.0 \n", + "e5oaf7h 3.0 3.0 \n", + "e6nir3u 0.0 0.0 \n", + "e6c3xdn 1.0 1.0 \n", + "e5d3zaa 2.0 3.0 \n", + "e5gnjv9 0.0 28.0 \n", + "e69gw2t 2.0 3.0 \n", + "e5syrih 8.0 8.0 \n", + "e5sa2yf 0.0 0.0 \n", + "e6ai7z5 1.0 4.0 \n", + "... ... ... \n", + "e5smhzk 0.0 1.0 \n", + "e5v91s0 1.0 11.0 \n", + "e6n6di6 7.0 7.0 \n", + "e6iqq30 0.0 15.0 \n", + "e5bfad7 2.0 8.0 \n", + "e6x5he5 0.0 6.0 \n", + "e6l9uyf 1.0 11.0 \n", + "e57hyr1 1.0 7.0 \n", + "e5b8sj7 7.0 10.0 \n", + "e6nlep7 0.0 36.0 \n", + "e6ltazd 6.0 6.0 \n", + "e57a6qq 4.0 4.0 \n", + "e5qc7eb 4.0 6.0 \n", + "e6hqt5y 6.0 12.0 \n", + "e5ua84v 7.0 7.0 \n", + "e65m7kq 3.0 9.0 \n", + "e5ggtru 11.0 11.0 \n", + "e5pmmig 2.0 2.0 \n", + "e64l6vq 1.0 4.0 \n", + "e6fjx0d 0.0 1.0 \n", + "e5h3xyy 1.0 7.0 \n", + "e589ri5 0.0 15.0 \n", + "e5beuqa 6.0 7.0 \n", + "e5lqoj1 0.0 10.0 \n", + "e5kvch1 1.0 4.0 \n", + "e6srvwm 2.0 5.0 \n", + "e5o65mk 0.0 0.0 \n", + "e647cm8 3.0 9.0 \n", + "e58n526 0.0 36.0 \n", + "e69r2kg 4.0 5.0 \n", + "\n", + " count[outgoing triads over mid-thread] count[outgoing triads] \\\n", + "e6p7yrp 3.0 3.0 \n", + "e5ywqyk 1.0 1.0 \n", + "e5qv9rj 0.0 0.0 \n", + "e6jhojf 6.0 6.0 \n", + "e6989ii 0.0 0.0 \n", + "e69lgse 1.0 1.0 \n", + "e5kwkg2 0.0 0.0 \n", + "e6mehe7 3.0 3.0 \n", + "e6m0hsd 1.0 1.0 \n", + "e64r385 1.0 2.0 \n", + "e5surbt 0.0 0.0 \n", + "e58gxii 3.0 3.0 \n", + "e64vc8y 0.0 0.0 \n", + "e57504g 1.0 2.0 \n", + "e5borjq 0.0 1.0 \n", + "e64n9zv 1.0 1.0 \n", + "e582ud3 0.0 0.0 \n", + "e64i9cf 1.0 1.0 \n", + "e6q9204 1.0 3.0 \n", + "e5modd7 0.0 0.0 \n", + "e5xhbyd 2.0 2.0 \n", + "e5oaf7h 1.0 1.0 \n", + "e6nir3u 0.0 0.0 \n", + "e6c3xdn 0.0 0.0 \n", + "e5d3zaa 0.0 1.0 \n", + "e5gnjv9 0.0 1.0 \n", + "e69gw2t 1.0 2.0 \n", + "e5syrih 1.0 2.0 \n", + "e5sa2yf 0.0 0.0 \n", + "e6ai7z5 6.0 6.0 \n", + "... ... ... \n", + "e5smhzk 1.0 1.0 \n", + "e5v91s0 0.0 0.0 \n", + "e6n6di6 1.0 1.0 \n", + "e6iqq30 0.0 0.0 \n", + "e5bfad7 1.0 1.0 \n", + "e6x5he5 6.0 6.0 \n", + "e6l9uyf 0.0 1.0 \n", + "e57hyr1 0.0 3.0 \n", + "e5b8sj7 0.0 1.0 \n", + "e6nlep7 0.0 0.0 \n", + "e6ltazd 0.0 1.0 \n", + "e57a6qq 1.0 1.0 \n", + "e5qc7eb 0.0 1.0 \n", + "e6hqt5y 0.0 1.0 \n", + "e5ua84v 2.0 4.0 \n", + "e65m7kq 0.0 1.0 \n", + "e5ggtru 0.0 1.0 \n", + "e5pmmig 2.0 4.0 \n", + "e64l6vq 1.0 1.0 \n", + "e6fjx0d 0.0 1.0 \n", + "e5h3xyy 0.0 1.0 \n", + "e589ri5 0.0 0.0 \n", + "e5beuqa 3.0 7.0 \n", + "e5lqoj1 1.0 3.0 \n", + "e5kvch1 0.0 2.0 \n", + "e6srvwm 0.0 1.0 \n", + "e5o65mk 0.0 0.0 \n", + "e647cm8 0.0 0.0 \n", + "e58n526 0.0 0.0 \n", + "e69r2kg 1.0 1.0 \n", + "\n", + " count[reciprocity motif over mid-thread] count[reciprocity motif] \\\n", + "e6p7yrp 2.0 4.0 \n", + "e5ywqyk 5.0 6.0 \n", + "e5qv9rj 0.0 0.0 \n", + "e6jhojf 3.0 4.0 \n", + "e6989ii 7.0 8.0 \n", + "e69lgse 1.0 2.0 \n", + "e5kwkg2 0.0 0.0 \n", + "e6mehe7 2.0 4.0 \n", + "e6m0hsd 6.0 7.0 \n", + "e64r385 2.0 2.0 \n", + "e5surbt 0.0 0.0 \n", + "e58gxii 2.0 4.0 \n", + "e64vc8y 0.0 0.0 \n", + "e57504g 1.0 1.0 \n", + "e5borjq 1.0 2.0 \n", + "e64n9zv 6.0 7.0 \n", + "e582ud3 0.0 0.0 \n", + "e64i9cf 2.0 4.0 \n", + "e6q9204 4.0 4.0 \n", + "e5modd7 0.0 0.0 \n", + "e5xhbyd 5.0 6.0 \n", + "e5oaf7h 5.0 6.0 \n", + "e6nir3u 7.0 8.0 \n", + "e6c3xdn 0.0 0.0 \n", + "e5d3zaa 3.0 3.0 \n", + "e5gnjv9 0.0 0.0 \n", + "e69gw2t 4.0 5.0 \n", + "e5syrih 1.0 2.0 \n", + "e5sa2yf 7.0 8.0 \n", + "e6ai7z5 2.0 2.0 \n", + "... ... ... \n", + "e5smhzk 5.0 7.0 \n", + "e5v91s0 0.0 0.0 \n", + "e6n6di6 1.0 1.0 \n", + "e6iqq30 0.0 1.0 \n", + "e5bfad7 0.0 2.0 \n", + "e6x5he5 0.0 5.0 \n", + "e6l9uyf 0.0 0.0 \n", + "e57hyr1 2.0 2.0 \n", + "e5b8sj7 1.0 2.0 \n", + "e6nlep7 0.0 0.0 \n", + "e6ltazd 4.0 4.0 \n", + "e57a6qq 4.0 5.0 \n", + "e5qc7eb 2.0 3.0 \n", + "e6hqt5y 0.0 0.0 \n", + "e5ua84v 3.0 3.0 \n", + "e65m7kq 1.0 1.0 \n", + "e5ggtru 0.0 0.0 \n", + "e5pmmig 4.0 4.0 \n", + "e64l6vq 2.0 4.0 \n", + "e6fjx0d 6.0 6.0 \n", + "e5h3xyy 1.0 1.0 \n", + "e589ri5 0.0 0.0 \n", + "e5beuqa 3.0 3.0 \n", + "e5lqoj1 2.0 2.0 \n", + "e5kvch1 3.0 3.0 \n", + "e6srvwm 1.0 1.0 \n", + "e5o65mk 5.0 7.0 \n", + "e647cm8 0.0 1.0 \n", + "e58n526 0.0 0.0 \n", + "e69r2kg 1.0 2.0 \n", "\n", - " entropy[outdegree over C->C responses] \\\n", - "e5hm9mp 1.559581 \n", - "e5ytz1d 2.197225 \n", - "e6ls80j 1.676988 \n", - "e5mhgl5 1.906155 \n", - "e6w6fah 2.079442 \n", - "... ... \n", - "e65ca8k 0.693147 \n", - "e6cdkpy 2.197225 \n", - "e5wc4tj 0.693147 \n", - "e6ua0sb 1.549826 \n", - "e5ua84v 1.676988 \n", + " entropy[indegree over C->C mid-thread responses] \\\n", + "e6p7yrp 1.242453 \n", + "e5ywqyk 1.039721 \n", + "e5qv9rj 1.242453 \n", + "e6jhojf 1.475076 \n", + "e6989ii 0.693147 \n", + "e69lgse 1.242453 \n", + "e5kwkg2 1.560710 \n", + "e6mehe7 1.332179 \n", + "e6m0hsd 1.039721 \n", + "e64r385 1.549826 \n", + "e5surbt 1.386294 \n", + "e58gxii 1.277034 \n", + "e64vc8y 1.098612 \n", + "e57504g 1.549826 \n", + "e5borjq 1.277034 \n", + "e64n9zv 1.039721 \n", + "e582ud3 0.636514 \n", + "e64i9cf 1.039721 \n", + "e6q9204 1.011404 \n", + "e5modd7 1.039721 \n", + "e5xhbyd 1.329661 \n", + "e5oaf7h 0.562335 \n", + "e6nir3u 0.693147 \n", + "e6c3xdn 1.906155 \n", + "e5d3zaa 1.054920 \n", + "e5gnjv9 0.000000 \n", + "e69gw2t 1.054920 \n", + "e5syrih 1.039721 \n", + "e5sa2yf 0.693147 \n", + "e6ai7z5 1.560710 \n", + "... ... \n", + "e5smhzk 1.098612 \n", + "e5v91s0 1.039721 \n", + "e6n6di6 1.213008 \n", + "e6iqq30 1.098612 \n", + "e5bfad7 1.329661 \n", + "e6x5he5 1.386294 \n", + "e6l9uyf 1.039721 \n", + "e57hyr1 1.332179 \n", + "e5b8sj7 0.636514 \n", + "e6nlep7 NaN \n", + "e6ltazd 0.500402 \n", + "e57a6qq 1.011404 \n", + "e5qc7eb 1.011404 \n", + "e6hqt5y 0.500402 \n", + "e5ua84v 1.213008 \n", + "e65m7kq 0.950271 \n", + "e5ggtru 0.900256 \n", + "e5pmmig 1.329661 \n", + "e64l6vq 1.332179 \n", + "e6fjx0d 0.693147 \n", + "e5h3xyy 1.332179 \n", + "e589ri5 1.098612 \n", + "e5beuqa 1.153742 \n", + "e5lqoj1 1.098612 \n", + "e5kvch1 1.332179 \n", + "e6srvwm 1.329661 \n", + "e5o65mk 0.693147 \n", + "e647cm8 0.950271 \n", + "e58n526 NaN \n", + "e69r2kg 1.277034 \n", "\n", " entropy[indegree over C->C responses] \\\n", - "e5hm9mp 1.494175 \n", - "e5ytz1d 1.310784 \n", - "e6ls80j 1.214890 \n", - "e5mhgl5 1.732868 \n", - "e6w6fah 0.000000 \n", + "e6p7yrp 1.073543 \n", + "e5ywqyk 1.054920 \n", + "e5qv9rj 1.464816 \n", + "e6jhojf 1.386294 \n", + "e6989ii 0.693147 \n", + "e69lgse 1.255482 \n", + "e5kwkg2 1.676988 \n", + "e6mehe7 1.213008 \n", + "e6m0hsd 1.039721 \n", + "e64r385 1.735126 \n", + "e5surbt 1.303092 \n", + "e58gxii 1.213008 \n", + "e64vc8y 1.002718 \n", + "e57504g 1.735126 \n", + "e5borjq 1.522955 \n", + "e64n9zv 1.039721 \n", + "e582ud3 0.848686 \n", + "e64i9cf 0.955700 \n", + "e6q9204 1.277034 \n", + "e5modd7 1.273028 \n", + "e5xhbyd 1.329661 \n", + "e5oaf7h 0.562335 \n", + "e6nir3u 0.693147 \n", + "e6c3xdn 2.043192 \n", + "e5d3zaa 1.351784 \n", + "e5gnjv9 0.348832 \n", + "e69gw2t 1.351784 \n", + "e5syrih 1.273028 \n", + "e5sa2yf 0.693147 \n", + "e6ai7z5 1.494175 \n", "... ... \n", - "e65ca8k 0.000000 \n", - "e6cdkpy 1.273028 \n", - "e5wc4tj 0.693147 \n", - "e6ua0sb 1.153742 \n", + "e5smhzk 1.039721 \n", + "e5v91s0 1.149060 \n", + "e6n6di6 1.427061 \n", + "e6iqq30 1.002718 \n", + "e5bfad7 1.273028 \n", + "e6x5he5 1.386294 \n", + "e6l9uyf 1.149060 \n", + "e57hyr1 1.427061 \n", + "e5b8sj7 1.060857 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 0.867563 \n", + "e57a6qq 1.011404 \n", + "e5qc7eb 1.004242 \n", + "e6hqt5y 0.964963 \n", "e5ua84v 1.427061 \n", + "e65m7kq 1.214890 \n", + "e5ggtru 1.149060 \n", + "e5pmmig 1.549826 \n", + "e64l6vq 1.277034 \n", + "e6fjx0d 1.039721 \n", + "e5h3xyy 1.427061 \n", + "e589ri5 1.002718 \n", + "e5beuqa 1.427061 \n", + "e5lqoj1 1.073543 \n", + "e5kvch1 1.494175 \n", + "e6srvwm 1.522955 \n", + "e5o65mk 0.693147 \n", + "e647cm8 1.214890 \n", + "e58n526 0.000000 \n", + "e69r2kg 1.522955 \n", "\n", - " 2nd-largest / max[outdegree over C->C responses] \\\n", - "e5hm9mp 1.000000 \n", - "e5ytz1d 1.000000 \n", - "e6ls80j 0.666667 \n", - "e5mhgl5 0.500000 \n", - "e6w6fah 1.000000 \n", + " entropy[indegree over C->c mid-thread responses] \\\n", + "e6p7yrp 1.791759 \n", + "e5ywqyk 1.906155 \n", + "e5qv9rj 1.242453 \n", + "e6jhojf 1.906155 \n", + "e6989ii 1.945910 \n", + "e69lgse 1.242453 \n", + "e5kwkg2 1.560710 \n", + "e6mehe7 1.560710 \n", + "e6m0hsd 1.906155 \n", + "e64r385 1.549826 \n", + "e5surbt 1.386294 \n", + "e58gxii 1.549826 \n", + "e64vc8y 1.098612 \n", + "e57504g 1.549826 \n", + "e5borjq 1.277034 \n", + "e64n9zv 1.906155 \n", + "e582ud3 0.636514 \n", + "e64i9cf 1.332179 \n", + "e6q9204 1.732868 \n", + "e5modd7 1.039721 \n", + "e5xhbyd 1.732868 \n", + "e5oaf7h 1.732868 \n", + "e6nir3u 1.945910 \n", + "e6c3xdn 1.906155 \n", + "e5d3zaa 1.549826 \n", + "e5gnjv9 0.000000 \n", + "e69gw2t 1.549826 \n", + "e5syrih 1.494175 \n", + "e5sa2yf 2.079442 \n", + "e6ai7z5 1.791759 \n", "... ... \n", - "e65ca8k 1.000000 \n", - "e6cdkpy 1.000000 \n", - "e5wc4tj 1.000000 \n", - "e6ua0sb 1.000000 \n", - "e5ua84v 0.666667 \n", + "e5smhzk 1.945910 \n", + "e5v91s0 1.039721 \n", + "e6n6di6 1.494175 \n", + "e6iqq30 1.098612 \n", + "e5bfad7 1.329661 \n", + "e6x5he5 1.386294 \n", + "e6l9uyf 1.039721 \n", + "e57hyr1 1.332179 \n", + "e5b8sj7 1.011404 \n", + "e6nlep7 NaN \n", + "e6ltazd 1.386294 \n", + "e57a6qq 1.732868 \n", + "e5qc7eb 1.277034 \n", + "e6hqt5y 0.500402 \n", + "e5ua84v 1.494175 \n", + "e65m7kq 1.332179 \n", + "e5ggtru 1.213008 \n", + "e5pmmig 1.906155 \n", + "e64l6vq 1.560710 \n", + "e6fjx0d 1.945910 \n", + "e5h3xyy 1.332179 \n", + "e589ri5 1.098612 \n", + "e5beuqa 1.475076 \n", + "e5lqoj1 1.386294 \n", + "e5kvch1 1.791759 \n", + "e6srvwm 1.329661 \n", + "e5o65mk 1.945910 \n", + "e647cm8 0.950271 \n", + "e58n526 NaN \n", + "e69r2kg 1.549826 \n", "\n", - " 2nd-largest / max[indegree over C->C responses] \\\n", - "e5hm9mp 0.666667 \n", - "e5ytz1d 1.000000 \n", - "e6ls80j 0.750000 \n", - "e5mhgl5 1.000000 \n", - "e6w6fah 0.000000 \n", - "... ... \n", - "e65ca8k 0.000000 \n", - "e6cdkpy 0.500000 \n", - "e5wc4tj 1.000000 \n", - "e6ua0sb 0.250000 \n", - "e5ua84v 0.500000 \n", + " entropy[indegree over C->c responses] \\\n", + "e6p7yrp 1.831020 \n", + "e5ywqyk 2.043192 \n", + "e5qv9rj 1.464816 \n", + "e6jhojf 2.043192 \n", + "e6989ii 2.079442 \n", + "e69lgse 1.464816 \n", + "e5kwkg2 1.676988 \n", + "e6mehe7 1.676988 \n", + "e6m0hsd 2.043192 \n", + "e64r385 1.735126 \n", + "e5surbt 1.303092 \n", + "e58gxii 1.735126 \n", + "e64vc8y 1.002718 \n", + "e57504g 1.735126 \n", + "e5borjq 1.522955 \n", + "e64n9zv 2.043192 \n", + "e582ud3 0.848686 \n", + "e64i9cf 1.427061 \n", + "e6q9204 1.889159 \n", + "e5modd7 1.273028 \n", + "e5xhbyd 1.889159 \n", + "e5oaf7h 1.889159 \n", + "e6nir3u 2.079442 \n", + "e6c3xdn 2.043192 \n", + "e5d3zaa 1.735126 \n", + "e5gnjv9 0.348832 \n", + "e69gw2t 1.735126 \n", + "e5syrih 1.676988 \n", + "e5sa2yf 2.197225 \n", + "e6ai7z5 1.831020 \n", + "... ... \n", + "e5smhzk 2.043192 \n", + "e5v91s0 1.149060 \n", + "e6n6di6 1.676988 \n", + "e6iqq30 1.002718 \n", + "e5bfad7 1.522955 \n", + "e6x5he5 1.386294 \n", + "e6l9uyf 1.149060 \n", + "e57hyr1 1.427061 \n", + "e5b8sj7 1.310784 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 1.581094 \n", + "e57a6qq 1.889159 \n", + "e5qc7eb 1.522955 \n", + "e6hqt5y 0.964963 \n", + "e5ua84v 1.676988 \n", + "e65m7kq 1.427061 \n", + "e5ggtru 1.427061 \n", + "e5pmmig 2.043192 \n", + "e64l6vq 1.676988 \n", + "e6fjx0d 2.043192 \n", + "e5h3xyy 1.427061 \n", + "e589ri5 1.002718 \n", + "e5beuqa 1.676988 \n", + "e5lqoj1 1.303092 \n", + "e5kvch1 1.831020 \n", + "e6srvwm 1.522955 \n", + "e5o65mk 2.079442 \n", + "e647cm8 1.214890 \n", + "e58n526 0.000000 \n", + "e69r2kg 1.735126 \n", "\n", - " is-present[reciprocity motif] count[reciprocity motif] \\\n", - "e5hm9mp 1.0 4.0 \n", - "e5ytz1d 1.0 1.0 \n", - "e6ls80j 1.0 1.0 \n", - "e5mhgl5 1.0 2.0 \n", - "e6w6fah 0.0 0.0 \n", - "... ... ... \n", - "e65ca8k 1.0 7.0 \n", - "e6cdkpy 0.0 0.0 \n", - "e5wc4tj 1.0 8.0 \n", - "e6ua0sb 1.0 3.0 \n", - "e5ua84v 1.0 3.0 \n", + " entropy[indegree over c->c mid-thread responses] \\\n", + "e6p7yrp 1.791759 \n", + "e5ywqyk 1.906155 \n", + "e5qv9rj 1.242453 \n", + "e6jhojf 1.906155 \n", + "e6989ii 1.906155 \n", + "e69lgse 1.242453 \n", + "e5kwkg2 1.560710 \n", + "e6mehe7 1.560710 \n", + "e6m0hsd 1.906155 \n", + "e64r385 1.549826 \n", + "e5surbt 1.386294 \n", + "e58gxii 1.549826 \n", + "e64vc8y 1.098612 \n", + "e57504g 1.549826 \n", + "e5borjq 1.277034 \n", + "e64n9zv 1.906155 \n", + "e582ud3 0.636514 \n", + "e64i9cf 1.332179 \n", + "e6q9204 1.732868 \n", + "e5modd7 1.039721 \n", + "e5xhbyd 1.732868 \n", + "e5oaf7h 1.732868 \n", + "e6nir3u 1.906155 \n", + "e6c3xdn 1.906155 \n", + "e5d3zaa 1.549826 \n", + "e5gnjv9 0.000000 \n", + "e69gw2t 1.549826 \n", + "e5syrih 1.494175 \n", + "e5sa2yf 2.079442 \n", + "e6ai7z5 1.791759 \n", + "... ... \n", + "e5smhzk 1.945910 \n", + "e5v91s0 1.039721 \n", + "e6n6di6 1.494175 \n", + "e6iqq30 1.098612 \n", + "e5bfad7 1.329661 \n", + "e6x5he5 1.332179 \n", + "e6l9uyf 1.039721 \n", + "e57hyr1 1.332179 \n", + "e5b8sj7 1.011404 \n", + "e6nlep7 NaN \n", + "e6ltazd 1.386294 \n", + "e57a6qq 1.732868 \n", + "e5qc7eb 1.277034 \n", + "e6hqt5y 0.500402 \n", + "e5ua84v 1.494175 \n", + "e65m7kq 1.332179 \n", + "e5ggtru 1.213008 \n", + "e5pmmig 1.906155 \n", + "e64l6vq 1.560710 \n", + "e6fjx0d 1.945910 \n", + "e5h3xyy 1.332179 \n", + "e589ri5 1.098612 \n", + "e5beuqa 1.475076 \n", + "e5lqoj1 1.386294 \n", + "e5kvch1 1.791759 \n", + "e6srvwm 1.329661 \n", + "e5o65mk 1.945910 \n", + "e647cm8 0.950271 \n", + "e58n526 NaN \n", + "e69r2kg 1.549826 \n", "\n", - " is-present[external reciprocity motif] \\\n", - "e5hm9mp 1.0 \n", - "e5ytz1d 1.0 \n", - "e6ls80j 1.0 \n", - "e5mhgl5 1.0 \n", - "e6w6fah 0.0 \n", + " entropy[indegree over c->c responses] \\\n", + "e6p7yrp 1.831020 \n", + "e5ywqyk 2.043192 \n", + "e5qv9rj 1.464816 \n", + "e6jhojf 2.043192 \n", + "e6989ii 2.043192 \n", + "e69lgse 1.464816 \n", + "e5kwkg2 1.676988 \n", + "e6mehe7 1.676988 \n", + "e6m0hsd 2.043192 \n", + "e64r385 1.735126 \n", + "e5surbt 1.303092 \n", + "e58gxii 1.735126 \n", + "e64vc8y 1.002718 \n", + "e57504g 1.735126 \n", + "e5borjq 1.522955 \n", + "e64n9zv 2.043192 \n", + "e582ud3 0.848686 \n", + "e64i9cf 1.427061 \n", + "e6q9204 1.889159 \n", + "e5modd7 1.273028 \n", + "e5xhbyd 1.889159 \n", + "e5oaf7h 1.889159 \n", + "e6nir3u 2.043192 \n", + "e6c3xdn 2.043192 \n", + "e5d3zaa 1.735126 \n", + "e5gnjv9 0.348832 \n", + "e69gw2t 1.735126 \n", + "e5syrih 1.676988 \n", + "e5sa2yf 2.197225 \n", + "e6ai7z5 1.831020 \n", + "... ... \n", + "e5smhzk 2.043192 \n", + "e5v91s0 1.149060 \n", + "e6n6di6 1.676988 \n", + "e6iqq30 1.002718 \n", + "e5bfad7 1.522955 \n", + "e6x5he5 1.427061 \n", + "e6l9uyf 1.149060 \n", + "e57hyr1 1.427061 \n", + "e5b8sj7 1.310784 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 1.581094 \n", + "e57a6qq 1.889159 \n", + "e5qc7eb 1.522955 \n", + "e6hqt5y 0.964963 \n", + "e5ua84v 1.676988 \n", + "e65m7kq 1.427061 \n", + "e5ggtru 1.427061 \n", + "e5pmmig 2.043192 \n", + "e64l6vq 1.676988 \n", + "e6fjx0d 2.043192 \n", + "e5h3xyy 1.427061 \n", + "e589ri5 1.002718 \n", + "e5beuqa 1.676988 \n", + "e5lqoj1 1.303092 \n", + "e5kvch1 1.831020 \n", + "e6srvwm 1.522955 \n", + "e5o65mk 2.043192 \n", + "e647cm8 1.214890 \n", + "e58n526 0.000000 \n", + "e69r2kg 1.735126 \n", + "\n", + " entropy[outdegree over C->C mid-thread responses] \\\n", + "e6p7yrp 1.242453 \n", + "e5ywqyk 1.039721 \n", + "e5qv9rj 1.791759 \n", + "e6jhojf 1.153742 \n", + "e6989ii 0.693147 \n", + "e69lgse 1.560710 \n", + "e5kwkg2 1.791759 \n", + "e6mehe7 0.950271 \n", + "e6m0hsd 1.039721 \n", + "e64r385 1.747868 \n", + "e5surbt 1.386294 \n", + "e58gxii 1.475076 \n", + "e64vc8y 1.098612 \n", + "e57504g 1.747868 \n", + "e5borjq 1.945910 \n", + "e64n9zv 1.039721 \n", + "e582ud3 1.098612 \n", + "e64i9cf 1.039721 \n", + "e6q9204 1.560710 \n", + "e5modd7 2.079442 \n", + "e5xhbyd 1.329661 \n", + "e5oaf7h 1.039721 \n", + "e6nir3u 0.693147 \n", + "e6c3xdn 2.079442 \n", + "e5d3zaa 1.609438 \n", + "e5gnjv9 0.000000 \n", + "e69gw2t 1.332179 \n", + "e5syrih 1.906155 \n", + "e5sa2yf 0.693147 \n", + "e6ai7z5 0.867563 \n", + "... ... \n", + "e5smhzk 0.636514 \n", + "e5v91s0 1.386294 \n", + "e6n6di6 1.906155 \n", + "e6iqq30 1.098612 \n", + "e5bfad7 1.560710 \n", + "e6x5he5 0.000000 \n", + "e6l9uyf 1.386294 \n", + "e57hyr1 1.609438 \n", + "e5b8sj7 1.791759 \n", + "e6nlep7 NaN \n", + "e6ltazd 1.609438 \n", + "e57a6qq 1.560710 \n", + "e5qc7eb 1.791759 \n", + "e6hqt5y 1.609438 \n", + "e5ua84v 1.732868 \n", + "e65m7kq 1.609438 \n", + "e5ggtru 2.079442 \n", + "e5pmmig 1.329661 \n", + "e64l6vq 1.332179 \n", + "e6fjx0d 0.693147 \n", + "e5h3xyy 1.609438 \n", + "e589ri5 1.098612 \n", + "e5beuqa 1.475076 \n", + "e5lqoj1 0.636514 \n", + "e5kvch1 1.609438 \n", + "e6srvwm 1.791759 \n", + "e5o65mk 0.693147 \n", + "e647cm8 1.609438 \n", + "e58n526 NaN \n", + "e69r2kg 1.747868 \n", + "\n", + " entropy[outdegree over C->C responses] \\\n", + "e6p7yrp 1.667462 \n", + "e5ywqyk 1.332179 \n", + "e5qv9rj 2.197225 \n", + "e6jhojf 1.386294 \n", + "e6989ii 0.693147 \n", + "e69lgse 1.906155 \n", + "e5kwkg2 2.197225 \n", + "e6mehe7 1.667462 \n", + "e6m0hsd 1.039721 \n", + "e64r385 1.889159 \n", + "e5surbt 2.197225 \n", + "e58gxii 1.667462 \n", + "e64vc8y 2.197225 \n", + "e57504g 1.889159 \n", + "e5borjq 2.043192 \n", + "e64n9zv 1.039721 \n", + "e582ud3 2.197225 \n", + "e64i9cf 1.747868 \n", + "e6q9204 1.475076 \n", + "e5modd7 2.197225 \n", + "e5xhbyd 1.329661 \n", + "e5oaf7h 1.039721 \n", + "e6nir3u 0.693147 \n", + "e6c3xdn 2.197225 \n", + "e5d3zaa 1.747868 \n", + "e5gnjv9 2.043192 \n", + "e69gw2t 1.549826 \n", + "e5syrih 1.889159 \n", + "e5sa2yf 0.693147 \n", + "e6ai7z5 1.386294 \n", "... ... \n", - "e65ca8k 0.0 \n", - "e6cdkpy 1.0 \n", - "e5wc4tj 0.0 \n", - "e6ua0sb 1.0 \n", - "e5ua84v 1.0 \n", + "e5smhzk 1.039721 \n", + "e5v91s0 2.197225 \n", + "e6n6di6 2.043192 \n", + "e6iqq30 2.197225 \n", + "e5bfad7 2.043192 \n", + "e6x5he5 1.386294 \n", + "e6l9uyf 2.043192 \n", + "e57hyr1 1.735126 \n", + "e5b8sj7 2.043192 \n", + "e6nlep7 2.197225 \n", + "e6ltazd 1.560710 \n", + "e57a6qq 1.560710 \n", + "e5qc7eb 1.747868 \n", + "e6hqt5y 2.043192 \n", + "e5ua84v 1.676988 \n", + "e65m7kq 2.043192 \n", + "e5ggtru 2.043192 \n", + "e5pmmig 1.277034 \n", + "e64l6vq 1.747868 \n", + "e6fjx0d 1.039721 \n", + "e5h3xyy 2.043192 \n", + "e589ri5 2.197225 \n", + "e5beuqa 1.427061 \n", + "e5lqoj1 1.667462 \n", + "e5kvch1 1.732868 \n", + "e6srvwm 2.043192 \n", + "e5o65mk 0.693147 \n", + "e647cm8 2.197225 \n", + "e58n526 2.197225 \n", + "e69r2kg 2.043192 \n", "\n", - " count[external reciprocity motif] \\\n", - "e5hm9mp 4.0 \n", - "e5ytz1d 5.0 \n", - "e6ls80j 4.0 \n", - "e5mhgl5 6.0 \n", - "e6w6fah 0.0 \n", - "... ... \n", - "e65ca8k 0.0 \n", - "e6cdkpy 5.0 \n", - "e5wc4tj 0.0 \n", - "e6ua0sb 4.0 \n", - "e5ua84v 5.0 \n", + " entropy[outdegree over C->c mid-thread responses] \\\n", + "e6p7yrp 1.242453 \n", + "e5ywqyk 0.974315 \n", + "e5qv9rj 1.791759 \n", + "e6jhojf 1.213008 \n", + "e6989ii 0.682908 \n", + "e69lgse 1.560710 \n", + "e5kwkg2 1.791759 \n", + "e6mehe7 1.011404 \n", + "e6m0hsd 0.974315 \n", + "e64r385 1.747868 \n", + "e5surbt 1.386294 \n", + "e58gxii 1.475076 \n", + "e64vc8y 1.098612 \n", + "e57504g 1.747868 \n", + "e5borjq 1.945910 \n", + "e64n9zv 1.082196 \n", + "e582ud3 1.098612 \n", + "e64i9cf 0.950271 \n", + "e6q9204 1.494175 \n", + "e5modd7 2.079442 \n", + "e5xhbyd 1.320888 \n", + "e5oaf7h 0.974315 \n", + "e6nir3u 0.682908 \n", + "e6c3xdn 2.079442 \n", + "e5d3zaa 1.549826 \n", + "e5gnjv9 0.000000 \n", + "e69gw2t 1.277034 \n", + "e5syrih 1.906155 \n", + "e5sa2yf 0.693147 \n", + "e6ai7z5 0.867563 \n", + "... ... \n", + "e5smhzk 0.682908 \n", + "e5v91s0 1.386294 \n", + "e6n6di6 1.906155 \n", + "e6iqq30 1.098612 \n", + "e5bfad7 1.560710 \n", + "e6x5he5 0.000000 \n", + "e6l9uyf 1.386294 \n", + "e57hyr1 1.609438 \n", + "e5b8sj7 1.791759 \n", + "e6nlep7 NaN \n", + "e6ltazd 1.494175 \n", + "e57a6qq 1.494175 \n", + "e5qc7eb 1.747868 \n", + "e6hqt5y 1.609438 \n", + "e5ua84v 1.732868 \n", + "e65m7kq 1.609438 \n", + "e5ggtru 2.079442 \n", + "e5pmmig 1.320888 \n", + "e64l6vq 1.242453 \n", + "e6fjx0d 0.682908 \n", + "e5h3xyy 1.609438 \n", + "e589ri5 1.098612 \n", + "e5beuqa 1.475076 \n", + "e5lqoj1 0.693147 \n", + "e5kvch1 1.560710 \n", + "e6srvwm 1.791759 \n", + "e5o65mk 0.682908 \n", + "e647cm8 1.609438 \n", + "e58n526 NaN \n", + "e69r2kg 1.747868 \n", + "\n", + " entropy[outdegree over C->c responses] \\\n", + "e6p7yrp 1.676988 \n", + "e5ywqyk 1.214890 \n", + "e5qv9rj 2.197225 \n", + "e6jhojf 1.427061 \n", + "e6989ii 0.693147 \n", + "e69lgse 1.889159 \n", + "e5kwkg2 2.197225 \n", + "e6mehe7 1.676988 \n", + "e6m0hsd 0.936888 \n", + "e64r385 1.889159 \n", + "e5surbt 2.197225 \n", + "e58gxii 1.676988 \n", + "e64vc8y 2.197225 \n", + "e57504g 1.889159 \n", + "e5borjq 2.043192 \n", + "e64n9zv 1.060857 \n", + "e582ud3 2.197225 \n", + "e64i9cf 1.676988 \n", + "e6q9204 1.427061 \n", + "e5modd7 2.197225 \n", + "e5xhbyd 1.310784 \n", + "e5oaf7h 0.936888 \n", + "e6nir3u 0.693147 \n", + "e6c3xdn 2.197225 \n", + "e5d3zaa 1.676988 \n", + "e5gnjv9 2.043192 \n", + "e69gw2t 1.464816 \n", + "e5syrih 1.889159 \n", + "e5sa2yf 0.686962 \n", + "e6ai7z5 1.303092 \n", + "... ... \n", + "e5smhzk 0.964963 \n", + "e5v91s0 2.197225 \n", + "e6n6di6 2.043192 \n", + "e6iqq30 2.197225 \n", + "e5bfad7 2.043192 \n", + "e6x5he5 1.386294 \n", + "e6l9uyf 2.043192 \n", + "e57hyr1 1.735126 \n", + "e5b8sj7 2.043192 \n", + "e6nlep7 2.197225 \n", + "e6ltazd 1.464816 \n", + "e57a6qq 1.464816 \n", + "e5qc7eb 1.735126 \n", + "e6hqt5y 2.043192 \n", + "e5ua84v 1.676988 \n", + "e65m7kq 2.043192 \n", + "e5ggtru 2.043192 \n", + "e5pmmig 1.310784 \n", + "e64l6vq 1.676988 \n", + "e6fjx0d 0.964963 \n", + "e5h3xyy 2.043192 \n", + "e589ri5 2.197225 \n", + "e5beuqa 1.427061 \n", + "e5lqoj1 1.676988 \n", + "e5kvch1 1.735126 \n", + "e6srvwm 2.043192 \n", + "e5o65mk 0.693147 \n", + "e647cm8 2.197225 \n", + "e58n526 2.197225 \n", + "e69r2kg 2.043192 \n", + "\n", + " is-present[dyadic interaction motif over mid-thread] \\\n", + "e6p7yrp 1.0 \n", + "e5ywqyk 1.0 \n", + "e5qv9rj 0.0 \n", + "e6jhojf 1.0 \n", + "e6989ii 1.0 \n", + "e69lgse 1.0 \n", + "e5kwkg2 0.0 \n", + "e6mehe7 1.0 \n", + "e6m0hsd 1.0 \n", + "e64r385 1.0 \n", + "e5surbt 0.0 \n", + "e58gxii 1.0 \n", + "e64vc8y 0.0 \n", + "e57504g 1.0 \n", + "e5borjq 1.0 \n", + "e64n9zv 1.0 \n", + "e582ud3 0.0 \n", + "e64i9cf 1.0 \n", + "e6q9204 1.0 \n", + "e5modd7 0.0 \n", + "e5xhbyd 1.0 \n", + "e5oaf7h 1.0 \n", + "e6nir3u 1.0 \n", + "e6c3xdn 0.0 \n", + "e5d3zaa 1.0 \n", + "e5gnjv9 0.0 \n", + "e69gw2t 1.0 \n", + "e5syrih 1.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 1.0 \n", + "... ... \n", + "e5smhzk 1.0 \n", + "e5v91s0 0.0 \n", + "e6n6di6 1.0 \n", + "e6iqq30 0.0 \n", + "e5bfad7 0.0 \n", + "e6x5he5 0.0 \n", + "e6l9uyf 0.0 \n", + "e57hyr1 1.0 \n", + "e5b8sj7 1.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 1.0 \n", + "e57a6qq 1.0 \n", + "e5qc7eb 1.0 \n", + "e6hqt5y 0.0 \n", + "e5ua84v 1.0 \n", + "e65m7kq 1.0 \n", + "e5ggtru 0.0 \n", + "e5pmmig 1.0 \n", + "e64l6vq 1.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 1.0 \n", + "e589ri5 0.0 \n", + "e5beuqa 1.0 \n", + "e5lqoj1 1.0 \n", + "e5kvch1 1.0 \n", + "e6srvwm 1.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 0.0 \n", + "e58n526 0.0 \n", + "e69r2kg 1.0 \n", "\n", " is-present[dyadic interaction motif] \\\n", - "e5hm9mp 1.0 \n", - "e5ytz1d 1.0 \n", - "e6ls80j 1.0 \n", - "e5mhgl5 1.0 \n", - "e6w6fah 0.0 \n", + "e6p7yrp 1.0 \n", + "e5ywqyk 1.0 \n", + "e5qv9rj 0.0 \n", + "e6jhojf 1.0 \n", + "e6989ii 1.0 \n", + "e69lgse 1.0 \n", + "e5kwkg2 0.0 \n", + "e6mehe7 1.0 \n", + "e6m0hsd 1.0 \n", + "e64r385 1.0 \n", + "e5surbt 0.0 \n", + "e58gxii 1.0 \n", + "e64vc8y 0.0 \n", + "e57504g 1.0 \n", + "e5borjq 1.0 \n", + "e64n9zv 1.0 \n", + "e582ud3 0.0 \n", + "e64i9cf 1.0 \n", + "e6q9204 1.0 \n", + "e5modd7 0.0 \n", + "e5xhbyd 1.0 \n", + "e5oaf7h 1.0 \n", + "e6nir3u 1.0 \n", + "e6c3xdn 0.0 \n", + "e5d3zaa 1.0 \n", + "e5gnjv9 0.0 \n", + "e69gw2t 1.0 \n", + "e5syrih 1.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 1.0 \n", "... ... \n", - "e65ca8k 0.0 \n", - "e6cdkpy 0.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 1.0 \n", + "e5smhzk 1.0 \n", + "e5v91s0 0.0 \n", + "e6n6di6 1.0 \n", + "e6iqq30 1.0 \n", + "e5bfad7 1.0 \n", + "e6x5he5 1.0 \n", + "e6l9uyf 0.0 \n", + "e57hyr1 1.0 \n", + "e5b8sj7 1.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 1.0 \n", + "e57a6qq 1.0 \n", + "e5qc7eb 1.0 \n", + "e6hqt5y 0.0 \n", "e5ua84v 1.0 \n", + "e65m7kq 1.0 \n", + "e5ggtru 0.0 \n", + "e5pmmig 1.0 \n", + "e64l6vq 1.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 1.0 \n", + "e589ri5 0.0 \n", + "e5beuqa 1.0 \n", + "e5lqoj1 1.0 \n", + "e5kvch1 1.0 \n", + "e6srvwm 1.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 1.0 \n", + "e58n526 0.0 \n", + "e69r2kg 1.0 \n", "\n", - " count[dyadic interaction motif] is-present[incoming triads] \\\n", - "e5hm9mp 3.0 1.0 \n", - "e5ytz1d 1.0 1.0 \n", - "e6ls80j 1.0 1.0 \n", - "e5mhgl5 1.0 1.0 \n", - "e6w6fah 0.0 1.0 \n", - "... ... ... \n", - "e65ca8k 0.0 1.0 \n", - "e6cdkpy 0.0 1.0 \n", - "e5wc4tj 1.0 0.0 \n", - "e6ua0sb 2.0 1.0 \n", - "e5ua84v 3.0 1.0 \n", - "\n", - " count[incoming triads] is-present[outgoing triads] \\\n", - "e5hm9mp 4.0 1.0 \n", - "e5ytz1d 7.0 0.0 \n", - "e6ls80j 9.0 1.0 \n", - "e5mhgl5 2.0 1.0 \n", - "e6w6fah 28.0 0.0 \n", - "... ... ... \n", - "e65ca8k 1.0 0.0 \n", - "e6cdkpy 8.0 0.0 \n", - "e5wc4tj 0.0 0.0 \n", - "e6ua0sb 6.0 1.0 \n", - "e5ua84v 7.0 1.0 \n", - "\n", - " count[outgoing triads] max[indegree over c->c mid-thread responses] \\\n", - "e5hm9mp 3.0 3.0 \n", - "e5ytz1d 0.0 3.0 \n", - "e6ls80j 4.0 3.0 \n", - "e5mhgl5 1.0 2.0 \n", - "e6w6fah 0.0 0.0 \n", - "... ... ... \n", - "e65ca8k 0.0 1.0 \n", - "e6cdkpy 0.0 2.0 \n", - "e5wc4tj 0.0 1.0 \n", - "e6ua0sb 2.0 4.0 \n", - "e5ua84v 4.0 3.0 \n", + " is-present[external reciprocity motif over mid-thread] \\\n", + "e6p7yrp 1.0 \n", + "e5ywqyk 1.0 \n", + "e5qv9rj 1.0 \n", + "e6jhojf 1.0 \n", + "e6989ii 0.0 \n", + "e69lgse 1.0 \n", + "e5kwkg2 1.0 \n", + "e6mehe7 1.0 \n", + "e6m0hsd 0.0 \n", + "e64r385 1.0 \n", + "e5surbt 1.0 \n", + "e58gxii 1.0 \n", + "e64vc8y 1.0 \n", + "e57504g 1.0 \n", + "e5borjq 1.0 \n", + "e64n9zv 1.0 \n", + "e582ud3 0.0 \n", + "e64i9cf 0.0 \n", + "e6q9204 1.0 \n", + "e5modd7 1.0 \n", + "e5xhbyd 1.0 \n", + "e5oaf7h 1.0 \n", + "e6nir3u 0.0 \n", + "e6c3xdn 1.0 \n", + "e5d3zaa 1.0 \n", + "e5gnjv9 0.0 \n", + "e69gw2t 1.0 \n", + "e5syrih 1.0 \n", + "e5sa2yf 0.0 \n", + "e6ai7z5 1.0 \n", + "... ... \n", + "e5smhzk 0.0 \n", + "e5v91s0 1.0 \n", + "e6n6di6 1.0 \n", + "e6iqq30 0.0 \n", + "e5bfad7 1.0 \n", + "e6x5he5 0.0 \n", + "e6l9uyf 1.0 \n", + "e57hyr1 1.0 \n", + "e5b8sj7 1.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 0.0 \n", + "e57a6qq 1.0 \n", + "e5qc7eb 1.0 \n", + "e6hqt5y 0.0 \n", + "e5ua84v 1.0 \n", + "e65m7kq 1.0 \n", + "e5ggtru 1.0 \n", + "e5pmmig 1.0 \n", + "e64l6vq 0.0 \n", + "e6fjx0d 0.0 \n", + "e5h3xyy 1.0 \n", + "e589ri5 1.0 \n", + "e5beuqa 1.0 \n", + "e5lqoj1 0.0 \n", + "e5kvch1 1.0 \n", + "e6srvwm 1.0 \n", + "e5o65mk 0.0 \n", + "e647cm8 1.0 \n", + "e58n526 0.0 \n", + "e69r2kg 1.0 \n", "\n", - " argmax[indegree over c->c mid-thread responses] \\\n", - "e5hm9mp 0.0 \n", - "e5ytz1d 1.0 \n", - "e6ls80j 1.0 \n", - "e5mhgl5 0.0 \n", - "e6w6fah 0.0 \n", - "... ... \n", - "e65ca8k 1.0 \n", - "e6cdkpy 0.0 \n", - "e5wc4tj 0.0 \n", - "e6ua0sb 1.0 \n", - "e5ua84v 0.0 \n", + " is-present[external reciprocity motif] \\\n", + "e6p7yrp 1.0 \n", + "e5ywqyk 1.0 \n", + "e5qv9rj 1.0 \n", + "e6jhojf 1.0 \n", + "e6989ii 0.0 \n", + "e69lgse 1.0 \n", + "e5kwkg2 1.0 \n", + "e6mehe7 1.0 \n", + "e6m0hsd 1.0 \n", + "e64r385 1.0 \n", + "e5surbt 1.0 \n", + "e58gxii 1.0 \n", + "e64vc8y 1.0 \n", + "e57504g 1.0 \n", + "e5borjq 1.0 \n", + "e64n9zv 1.0 \n", + "e582ud3 1.0 \n", + "e64i9cf 1.0 \n", + "e6q9204 1.0 \n", + "e5modd7 1.0 \n", + "e5xhbyd 1.0 \n", + "e5oaf7h 1.0 \n", + "e6nir3u 0.0 \n", + "e6c3xdn 1.0 \n", + "e5d3zaa 1.0 \n", + "e5gnjv9 1.0 \n", + "e69gw2t 1.0 \n", + "e5syrih 1.0 \n", + "e5sa2yf 0.0 \n", + "e6ai7z5 1.0 \n", + "... ... \n", + "e5smhzk 0.0 \n", + "e5v91s0 1.0 \n", + "e6n6di6 1.0 \n", + "e6iqq30 1.0 \n", + "e5bfad7 1.0 \n", + "e6x5he5 0.0 \n", + "e6l9uyf 1.0 \n", + "e57hyr1 1.0 \n", + "e5b8sj7 1.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 1.0 \n", + "e57a6qq 1.0 \n", + "e5qc7eb 1.0 \n", + "e6hqt5y 1.0 \n", + "e5ua84v 1.0 \n", + "e65m7kq 1.0 \n", + "e5ggtru 1.0 \n", + "e5pmmig 1.0 \n", + "e64l6vq 1.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 1.0 \n", + "e589ri5 1.0 \n", + "e5beuqa 1.0 \n", + "e5lqoj1 1.0 \n", + "e5kvch1 1.0 \n", + "e6srvwm 1.0 \n", + "e5o65mk 0.0 \n", + "e647cm8 1.0 \n", + "e58n526 0.0 \n", + "e69r2kg 1.0 \n", "\n", - " norm.max[indegree over c->c mid-thread responses] \\\n", - "e5hm9mp 0.375000 \n", - "e5ytz1d 0.500000 \n", - "e6ls80j 0.600000 \n", - "e5mhgl5 0.250000 \n", - "e6w6fah 0.000000 \n", - "... ... \n", - "e65ca8k 0.142857 \n", - "e6cdkpy 0.400000 \n", - "e5wc4tj 0.125000 \n", - "e6ua0sb 0.571429 \n", - "e5ua84v 0.375000 \n", + " is-present[incoming triads over mid-thread] \\\n", + "e6p7yrp 1.0 \n", + "e5ywqyk 1.0 \n", + "e5qv9rj 1.0 \n", + "e6jhojf 1.0 \n", + "e6989ii 0.0 \n", + "e69lgse 1.0 \n", + "e5kwkg2 1.0 \n", + "e6mehe7 1.0 \n", + "e6m0hsd 1.0 \n", + "e64r385 1.0 \n", + "e5surbt 0.0 \n", + "e58gxii 1.0 \n", + "e64vc8y 0.0 \n", + "e57504g 1.0 \n", + "e5borjq 1.0 \n", + "e64n9zv 1.0 \n", + "e582ud3 1.0 \n", + "e64i9cf 1.0 \n", + "e6q9204 1.0 \n", + "e5modd7 1.0 \n", + "e5xhbyd 1.0 \n", + "e5oaf7h 1.0 \n", + "e6nir3u 0.0 \n", + "e6c3xdn 1.0 \n", + "e5d3zaa 1.0 \n", + "e5gnjv9 0.0 \n", + "e69gw2t 1.0 \n", + "e5syrih 1.0 \n", + "e5sa2yf 0.0 \n", + "e6ai7z5 1.0 \n", + "... ... \n", + "e5smhzk 0.0 \n", + "e5v91s0 1.0 \n", + "e6n6di6 1.0 \n", + "e6iqq30 0.0 \n", + "e5bfad7 1.0 \n", + "e6x5he5 0.0 \n", + "e6l9uyf 1.0 \n", + "e57hyr1 1.0 \n", + "e5b8sj7 1.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 1.0 \n", + "e57a6qq 1.0 \n", + "e5qc7eb 1.0 \n", + "e6hqt5y 1.0 \n", + "e5ua84v 1.0 \n", + "e65m7kq 1.0 \n", + "e5ggtru 1.0 \n", + "e5pmmig 1.0 \n", + "e64l6vq 1.0 \n", + "e6fjx0d 0.0 \n", + "e5h3xyy 1.0 \n", + "e589ri5 0.0 \n", + "e5beuqa 1.0 \n", + "e5lqoj1 0.0 \n", + "e5kvch1 1.0 \n", + "e6srvwm 1.0 \n", + "e5o65mk 0.0 \n", + "e647cm8 1.0 \n", + "e58n526 0.0 \n", + "e69r2kg 1.0 \n", + "\n", + " is-present[incoming triads] \\\n", + "e6p7yrp 1.0 \n", + "e5ywqyk 1.0 \n", + "e5qv9rj 1.0 \n", + "e6jhojf 1.0 \n", + "e6989ii 0.0 \n", + "e69lgse 1.0 \n", + "e5kwkg2 1.0 \n", + "e6mehe7 1.0 \n", + "e6m0hsd 1.0 \n", + "e64r385 1.0 \n", + "e5surbt 1.0 \n", + "e58gxii 1.0 \n", + "e64vc8y 1.0 \n", + "e57504g 1.0 \n", + "e5borjq 1.0 \n", + "e64n9zv 1.0 \n", + "e582ud3 1.0 \n", + "e64i9cf 1.0 \n", + "e6q9204 1.0 \n", + "e5modd7 1.0 \n", + "e5xhbyd 1.0 \n", + "e5oaf7h 1.0 \n", + "e6nir3u 0.0 \n", + "e6c3xdn 1.0 \n", + "e5d3zaa 1.0 \n", + "e5gnjv9 1.0 \n", + "e69gw2t 1.0 \n", + "e5syrih 1.0 \n", + "e5sa2yf 0.0 \n", + "e6ai7z5 1.0 \n", + "... ... \n", + "e5smhzk 1.0 \n", + "e5v91s0 1.0 \n", + "e6n6di6 1.0 \n", + "e6iqq30 1.0 \n", + "e5bfad7 1.0 \n", + "e6x5he5 1.0 \n", + "e6l9uyf 1.0 \n", + "e57hyr1 1.0 \n", + "e5b8sj7 1.0 \n", + "e6nlep7 1.0 \n", + "e6ltazd 1.0 \n", + "e57a6qq 1.0 \n", + "e5qc7eb 1.0 \n", + "e6hqt5y 1.0 \n", + "e5ua84v 1.0 \n", + "e65m7kq 1.0 \n", + "e5ggtru 1.0 \n", + "e5pmmig 1.0 \n", + "e64l6vq 1.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 1.0 \n", + "e589ri5 1.0 \n", + "e5beuqa 1.0 \n", + "e5lqoj1 1.0 \n", + "e5kvch1 1.0 \n", + "e6srvwm 1.0 \n", + "e5o65mk 0.0 \n", + "e647cm8 1.0 \n", + "e58n526 1.0 \n", + "e69r2kg 1.0 \n", "\n", - " 2nd-largest[indegree over c->c mid-thread responses] \\\n", - "e5hm9mp 1.0 \n", - "e5ytz1d 2.0 \n", - "e6ls80j 1.0 \n", - "e5mhgl5 2.0 \n", - "e6w6fah 0.0 \n", - "... ... \n", - "e65ca8k 1.0 \n", - "e6cdkpy 2.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 1.0 \n", - "e5ua84v 2.0 \n", + " is-present[outgoing triads over mid-thread] \\\n", + "e6p7yrp 1.0 \n", + "e5ywqyk 1.0 \n", + "e5qv9rj 0.0 \n", + "e6jhojf 1.0 \n", + "e6989ii 0.0 \n", + "e69lgse 1.0 \n", + "e5kwkg2 0.0 \n", + "e6mehe7 1.0 \n", + "e6m0hsd 1.0 \n", + "e64r385 1.0 \n", + "e5surbt 0.0 \n", + "e58gxii 1.0 \n", + "e64vc8y 0.0 \n", + "e57504g 1.0 \n", + "e5borjq 0.0 \n", + "e64n9zv 1.0 \n", + "e582ud3 0.0 \n", + "e64i9cf 1.0 \n", + "e6q9204 1.0 \n", + "e5modd7 0.0 \n", + "e5xhbyd 1.0 \n", + "e5oaf7h 1.0 \n", + "e6nir3u 0.0 \n", + "e6c3xdn 0.0 \n", + "e5d3zaa 0.0 \n", + "e5gnjv9 0.0 \n", + "e69gw2t 1.0 \n", + "e5syrih 1.0 \n", + "e5sa2yf 0.0 \n", + "e6ai7z5 1.0 \n", + "... ... \n", + "e5smhzk 1.0 \n", + "e5v91s0 0.0 \n", + "e6n6di6 1.0 \n", + "e6iqq30 0.0 \n", + "e5bfad7 1.0 \n", + "e6x5he5 1.0 \n", + "e6l9uyf 0.0 \n", + "e57hyr1 0.0 \n", + "e5b8sj7 0.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 0.0 \n", + "e57a6qq 1.0 \n", + "e5qc7eb 0.0 \n", + "e6hqt5y 0.0 \n", + "e5ua84v 1.0 \n", + "e65m7kq 0.0 \n", + "e5ggtru 0.0 \n", + "e5pmmig 1.0 \n", + "e64l6vq 1.0 \n", + "e6fjx0d 0.0 \n", + "e5h3xyy 0.0 \n", + "e589ri5 0.0 \n", + "e5beuqa 1.0 \n", + "e5lqoj1 1.0 \n", + "e5kvch1 0.0 \n", + "e6srvwm 0.0 \n", + "e5o65mk 0.0 \n", + "e647cm8 0.0 \n", + "e58n526 0.0 \n", + "e69r2kg 1.0 \n", + "\n", + " is-present[outgoing triads] \\\n", + "e6p7yrp 1.0 \n", + "e5ywqyk 1.0 \n", + "e5qv9rj 0.0 \n", + "e6jhojf 1.0 \n", + "e6989ii 0.0 \n", + "e69lgse 1.0 \n", + "e5kwkg2 0.0 \n", + "e6mehe7 1.0 \n", + "e6m0hsd 1.0 \n", + "e64r385 1.0 \n", + "e5surbt 0.0 \n", + "e58gxii 1.0 \n", + "e64vc8y 0.0 \n", + "e57504g 1.0 \n", + "e5borjq 1.0 \n", + "e64n9zv 1.0 \n", + "e582ud3 0.0 \n", + "e64i9cf 1.0 \n", + "e6q9204 1.0 \n", + "e5modd7 0.0 \n", + "e5xhbyd 1.0 \n", + "e5oaf7h 1.0 \n", + "e6nir3u 0.0 \n", + "e6c3xdn 0.0 \n", + "e5d3zaa 1.0 \n", + "e5gnjv9 1.0 \n", + "e69gw2t 1.0 \n", + "e5syrih 1.0 \n", + "e5sa2yf 0.0 \n", + "e6ai7z5 1.0 \n", + "... ... \n", + "e5smhzk 1.0 \n", + "e5v91s0 0.0 \n", + "e6n6di6 1.0 \n", + "e6iqq30 0.0 \n", + "e5bfad7 1.0 \n", + "e6x5he5 1.0 \n", + "e6l9uyf 1.0 \n", + "e57hyr1 1.0 \n", + "e5b8sj7 1.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 1.0 \n", + "e57a6qq 1.0 \n", + "e5qc7eb 1.0 \n", + "e6hqt5y 1.0 \n", + "e5ua84v 1.0 \n", + "e65m7kq 1.0 \n", + "e5ggtru 1.0 \n", + "e5pmmig 1.0 \n", + "e64l6vq 1.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 1.0 \n", + "e589ri5 0.0 \n", + "e5beuqa 1.0 \n", + "e5lqoj1 1.0 \n", + "e5kvch1 1.0 \n", + "e6srvwm 1.0 \n", + "e5o65mk 0.0 \n", + "e647cm8 0.0 \n", + "e58n526 0.0 \n", + "e69r2kg 1.0 \n", "\n", - " 2nd-argmax[indegree over c->c mid-thread responses] \\\n", - "e5hm9mp 1.0 \n", - "e5ytz1d 0.0 \n", - "e6ls80j 4.0 \n", - "e5mhgl5 3.0 \n", - "e6w6fah 1.0 \n", - "... ... \n", - "e65ca8k 2.0 \n", - "e6cdkpy 1.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 0.0 \n", - "e5ua84v 4.0 \n", + " is-present[reciprocity motif over mid-thread] \\\n", + "e6p7yrp 1.0 \n", + "e5ywqyk 1.0 \n", + "e5qv9rj 0.0 \n", + "e6jhojf 1.0 \n", + "e6989ii 1.0 \n", + "e69lgse 1.0 \n", + "e5kwkg2 0.0 \n", + "e6mehe7 1.0 \n", + "e6m0hsd 1.0 \n", + "e64r385 1.0 \n", + "e5surbt 0.0 \n", + "e58gxii 1.0 \n", + "e64vc8y 0.0 \n", + "e57504g 1.0 \n", + "e5borjq 1.0 \n", + "e64n9zv 1.0 \n", + "e582ud3 0.0 \n", + "e64i9cf 1.0 \n", + "e6q9204 1.0 \n", + "e5modd7 0.0 \n", + "e5xhbyd 1.0 \n", + "e5oaf7h 1.0 \n", + "e6nir3u 1.0 \n", + "e6c3xdn 0.0 \n", + "e5d3zaa 1.0 \n", + "e5gnjv9 0.0 \n", + "e69gw2t 1.0 \n", + "e5syrih 1.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 1.0 \n", + "... ... \n", + "e5smhzk 1.0 \n", + "e5v91s0 0.0 \n", + "e6n6di6 1.0 \n", + "e6iqq30 0.0 \n", + "e5bfad7 0.0 \n", + "e6x5he5 0.0 \n", + "e6l9uyf 0.0 \n", + "e57hyr1 1.0 \n", + "e5b8sj7 1.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 1.0 \n", + "e57a6qq 1.0 \n", + "e5qc7eb 1.0 \n", + "e6hqt5y 0.0 \n", + "e5ua84v 1.0 \n", + "e65m7kq 1.0 \n", + "e5ggtru 0.0 \n", + "e5pmmig 1.0 \n", + "e64l6vq 1.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 1.0 \n", + "e589ri5 0.0 \n", + "e5beuqa 1.0 \n", + "e5lqoj1 1.0 \n", + "e5kvch1 1.0 \n", + "e6srvwm 1.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 0.0 \n", + "e58n526 0.0 \n", + "e69r2kg 1.0 \n", + "\n", + " is-present[reciprocity motif] \\\n", + "e6p7yrp 1.0 \n", + "e5ywqyk 1.0 \n", + "e5qv9rj 0.0 \n", + "e6jhojf 1.0 \n", + "e6989ii 1.0 \n", + "e69lgse 1.0 \n", + "e5kwkg2 0.0 \n", + "e6mehe7 1.0 \n", + "e6m0hsd 1.0 \n", + "e64r385 1.0 \n", + "e5surbt 0.0 \n", + "e58gxii 1.0 \n", + "e64vc8y 0.0 \n", + "e57504g 1.0 \n", + "e5borjq 1.0 \n", + "e64n9zv 1.0 \n", + "e582ud3 0.0 \n", + "e64i9cf 1.0 \n", + "e6q9204 1.0 \n", + "e5modd7 0.0 \n", + "e5xhbyd 1.0 \n", + "e5oaf7h 1.0 \n", + "e6nir3u 1.0 \n", + "e6c3xdn 0.0 \n", + "e5d3zaa 1.0 \n", + "e5gnjv9 0.0 \n", + "e69gw2t 1.0 \n", + "e5syrih 1.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 1.0 \n", + "... ... \n", + "e5smhzk 1.0 \n", + "e5v91s0 0.0 \n", + "e6n6di6 1.0 \n", + "e6iqq30 1.0 \n", + "e5bfad7 1.0 \n", + "e6x5he5 1.0 \n", + "e6l9uyf 0.0 \n", + "e57hyr1 1.0 \n", + "e5b8sj7 1.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 1.0 \n", + "e57a6qq 1.0 \n", + "e5qc7eb 1.0 \n", + "e6hqt5y 0.0 \n", + "e5ua84v 1.0 \n", + "e65m7kq 1.0 \n", + "e5ggtru 0.0 \n", + "e5pmmig 1.0 \n", + "e64l6vq 1.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 1.0 \n", + "e589ri5 0.0 \n", + "e5beuqa 1.0 \n", + "e5lqoj1 1.0 \n", + "e5kvch1 1.0 \n", + "e6srvwm 1.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 1.0 \n", + "e58n526 0.0 \n", + "e69r2kg 1.0 \n", "\n", - " norm.2nd-largest[indegree over c->c mid-thread responses] \\\n", - "e5hm9mp 0.125000 \n", - "e5ytz1d 0.333333 \n", - "e6ls80j 0.200000 \n", - "e5mhgl5 0.250000 \n", - "e6w6fah NaN \n", - "... ... \n", - "e65ca8k 0.142857 \n", - "e6cdkpy 0.400000 \n", - "e5wc4tj 0.125000 \n", - "e6ua0sb 0.142857 \n", - "e5ua84v 0.250000 \n", + " max[indegree over C->C mid-thread responses] \\\n", + "e6p7yrp 3.0 \n", + "e5ywqyk 2.0 \n", + "e5qv9rj 3.0 \n", + "e6jhojf 3.0 \n", + "e6989ii 1.0 \n", + "e69lgse 3.0 \n", + "e5kwkg2 2.0 \n", + "e6mehe7 2.0 \n", + "e6m0hsd 2.0 \n", + "e64r385 2.0 \n", + "e5surbt 1.0 \n", + "e58gxii 3.0 \n", + "e64vc8y 1.0 \n", + "e57504g 2.0 \n", + "e5borjq 3.0 \n", + "e64n9zv 2.0 \n", + "e582ud3 2.0 \n", + "e64i9cf 2.0 \n", + "e6q9204 3.0 \n", + "e5modd7 4.0 \n", + "e5xhbyd 2.0 \n", + "e5oaf7h 3.0 \n", + "e6nir3u 1.0 \n", + "e6c3xdn 2.0 \n", + "e5d3zaa 2.0 \n", + "e5gnjv9 1.0 \n", + "e69gw2t 2.0 \n", + "e5syrih 4.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 2.0 \n", + "... ... \n", + "e5smhzk 1.0 \n", + "e5v91s0 2.0 \n", + "e6n6di6 4.0 \n", + "e6iqq30 1.0 \n", + "e5bfad7 2.0 \n", + "e6x5he5 1.0 \n", + "e6l9uyf 2.0 \n", + "e57hyr1 2.0 \n", + "e5b8sj7 4.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 4.0 \n", + "e57a6qq 3.0 \n", + "e5qc7eb 3.0 \n", + "e6hqt5y 4.0 \n", + "e5ua84v 4.0 \n", + "e65m7kq 3.0 \n", + "e5ggtru 5.0 \n", + "e5pmmig 2.0 \n", + "e64l6vq 2.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 2.0 \n", + "e589ri5 1.0 \n", + "e5beuqa 4.0 \n", + "e5lqoj1 1.0 \n", + "e5kvch1 2.0 \n", + "e6srvwm 2.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 3.0 \n", + "e58n526 0.0 \n", + "e69r2kg 3.0 \n", "\n", - " mean[indegree over c->c mid-thread responses] \\\n", - "e5hm9mp 0.888889 \n", - "e5ytz1d 0.666667 \n", - "e6ls80j 0.555556 \n", - "e5mhgl5 0.888889 \n", - "e6w6fah 0.000000 \n", - "... ... \n", - "e65ca8k 0.777778 \n", - "e6cdkpy 0.555556 \n", - "e5wc4tj 0.888889 \n", - "e6ua0sb 0.777778 \n", - "e5ua84v 0.888889 \n", + " max[indegree over C->C responses] \\\n", + "e6p7yrp 5.0 \n", + "e5ywqyk 2.0 \n", + "e5qv9rj 3.0 \n", + "e6jhojf 4.0 \n", + "e6989ii 1.0 \n", + "e69lgse 3.0 \n", + "e5kwkg2 3.0 \n", + "e6mehe7 4.0 \n", + "e6m0hsd 2.0 \n", + "e64r385 2.0 \n", + "e5surbt 5.0 \n", + "e58gxii 4.0 \n", + "e64vc8y 6.0 \n", + "e57504g 2.0 \n", + "e5borjq 3.0 \n", + "e64n9zv 2.0 \n", + "e582ud3 6.0 \n", + "e64i9cf 4.0 \n", + "e6q9204 3.0 \n", + "e5modd7 4.0 \n", + "e5xhbyd 2.0 \n", + "e5oaf7h 3.0 \n", + "e6nir3u 1.0 \n", + "e6c3xdn 2.0 \n", + "e5d3zaa 2.0 \n", + "e5gnjv9 8.0 \n", + "e69gw2t 2.0 \n", + "e5syrih 4.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 3.0 \n", + "... ... \n", + "e5smhzk 2.0 \n", + "e5v91s0 5.0 \n", + "e6n6di6 4.0 \n", + "e6iqq30 6.0 \n", + "e5bfad7 4.0 \n", + "e6x5he5 4.0 \n", + "e6l9uyf 5.0 \n", + "e57hyr1 4.0 \n", + "e5b8sj7 4.0 \n", + "e6nlep7 9.0 \n", + "e6ltazd 4.0 \n", + "e57a6qq 3.0 \n", + "e5qc7eb 3.0 \n", + "e6hqt5y 4.0 \n", + "e5ua84v 4.0 \n", + "e65m7kq 4.0 \n", + "e5ggtru 5.0 \n", + "e5pmmig 2.0 \n", + "e64l6vq 3.0 \n", + "e6fjx0d 2.0 \n", + "e5h3xyy 4.0 \n", + "e589ri5 6.0 \n", + "e5beuqa 4.0 \n", + "e5lqoj1 5.0 \n", + "e5kvch1 3.0 \n", + "e6srvwm 3.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 4.0 \n", + "e58n526 9.0 \n", + "e69r2kg 3.0 \n", "\n", - " mean-nonzero[indegree over c->c mid-thread responses] \\\n", - "e5hm9mp 1.333333 \n", - "e5ytz1d 2.000000 \n", - "e6ls80j 1.666667 \n", - "e5mhgl5 1.333333 \n", - "e6w6fah 0.000000 \n", - "... ... \n", - "e65ca8k 1.000000 \n", - "e6cdkpy 1.666667 \n", - "e5wc4tj 1.000000 \n", - "e6ua0sb 1.750000 \n", - "e5ua84v 1.600000 \n", + " max[indegree over C->c mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", + "e5ywqyk 2.0 \n", + "e5qv9rj 3.0 \n", + "e6jhojf 2.0 \n", + "e6989ii 1.0 \n", + "e69lgse 3.0 \n", + "e5kwkg2 2.0 \n", + "e6mehe7 2.0 \n", + "e6m0hsd 2.0 \n", + "e64r385 2.0 \n", + "e5surbt 1.0 \n", + "e58gxii 2.0 \n", + "e64vc8y 1.0 \n", + "e57504g 2.0 \n", + "e5borjq 3.0 \n", + "e64n9zv 2.0 \n", + "e582ud3 2.0 \n", + "e64i9cf 2.0 \n", + "e6q9204 2.0 \n", + "e5modd7 4.0 \n", + "e5xhbyd 2.0 \n", + "e5oaf7h 2.0 \n", + "e6nir3u 1.0 \n", + "e6c3xdn 2.0 \n", + "e5d3zaa 2.0 \n", + "e5gnjv9 1.0 \n", + "e69gw2t 2.0 \n", + "e5syrih 3.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 1.0 \n", + "... ... \n", + "e5smhzk 1.0 \n", + "e5v91s0 2.0 \n", + "e6n6di6 3.0 \n", + "e6iqq30 1.0 \n", + "e5bfad7 2.0 \n", + "e6x5he5 1.0 \n", + "e6l9uyf 2.0 \n", + "e57hyr1 2.0 \n", + "e5b8sj7 3.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 4.0 \n", + "e57a6qq 2.0 \n", + "e5qc7eb 3.0 \n", + "e6hqt5y 4.0 \n", + "e5ua84v 3.0 \n", + "e65m7kq 2.0 \n", + "e5ggtru 4.0 \n", + "e5pmmig 2.0 \n", + "e64l6vq 2.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 2.0 \n", + "e589ri5 1.0 \n", + "e5beuqa 3.0 \n", + "e5lqoj1 1.0 \n", + "e5kvch1 1.0 \n", + "e6srvwm 2.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 3.0 \n", + "e58n526 0.0 \n", + "e69r2kg 2.0 \n", "\n", - " prop-nonzero[indegree over c->c mid-thread responses] \\\n", - "e5hm9mp 0.666667 \n", - "e5ytz1d 0.333333 \n", - "e6ls80j 0.333333 \n", - "e5mhgl5 0.666667 \n", - "e6w6fah 0.000000 \n", - "... ... \n", - "e65ca8k 0.777778 \n", - "e6cdkpy 0.333333 \n", - "e5wc4tj 0.888889 \n", - "e6ua0sb 0.444444 \n", - "e5ua84v 0.555556 \n", + " max[indegree over C->c responses] \\\n", + "e6p7yrp 3.0 \n", + "e5ywqyk 2.0 \n", + "e5qv9rj 3.0 \n", + "e6jhojf 2.0 \n", + "e6989ii 1.0 \n", + "e69lgse 3.0 \n", + "e5kwkg2 3.0 \n", + "e6mehe7 3.0 \n", + "e6m0hsd 2.0 \n", + "e64r385 2.0 \n", + "e5surbt 5.0 \n", + "e58gxii 2.0 \n", + "e64vc8y 6.0 \n", + "e57504g 2.0 \n", + "e5borjq 3.0 \n", + "e64n9zv 2.0 \n", + "e582ud3 6.0 \n", + "e64i9cf 4.0 \n", + "e6q9204 2.0 \n", + "e5modd7 4.0 \n", + "e5xhbyd 2.0 \n", + "e5oaf7h 2.0 \n", + "e6nir3u 1.0 \n", + "e6c3xdn 2.0 \n", + "e5d3zaa 2.0 \n", + "e5gnjv9 8.0 \n", + "e69gw2t 2.0 \n", + "e5syrih 3.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 3.0 \n", + "... ... \n", + "e5smhzk 2.0 \n", + "e5v91s0 5.0 \n", + "e6n6di6 3.0 \n", + "e6iqq30 6.0 \n", + "e5bfad7 3.0 \n", + "e6x5he5 4.0 \n", + "e6l9uyf 5.0 \n", + "e57hyr1 4.0 \n", + "e5b8sj7 3.0 \n", + "e6nlep7 9.0 \n", + "e6ltazd 4.0 \n", + "e57a6qq 2.0 \n", + "e5qc7eb 3.0 \n", + "e6hqt5y 4.0 \n", + "e5ua84v 3.0 \n", + "e65m7kq 4.0 \n", + "e5ggtru 4.0 \n", + "e5pmmig 2.0 \n", + "e64l6vq 3.0 \n", + "e6fjx0d 2.0 \n", + "e5h3xyy 4.0 \n", + "e589ri5 6.0 \n", + "e5beuqa 3.0 \n", + "e5lqoj1 5.0 \n", + "e5kvch1 3.0 \n", + "e6srvwm 3.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 4.0 \n", + "e58n526 9.0 \n", + "e69r2kg 2.0 \n", + "\n", + " max[indegree over c->c mid-thread responses] \\\n", + "e6p7yrp 1.0 \n", + "e5ywqyk 2.0 \n", + "e5qv9rj 3.0 \n", + "e6jhojf 2.0 \n", + "e6989ii 2.0 \n", + "e69lgse 3.0 \n", + "e5kwkg2 2.0 \n", + "e6mehe7 2.0 \n", + "e6m0hsd 2.0 \n", + "e64r385 2.0 \n", + "e5surbt 1.0 \n", + "e58gxii 2.0 \n", + "e64vc8y 1.0 \n", + "e57504g 2.0 \n", + "e5borjq 3.0 \n", + "e64n9zv 2.0 \n", + "e582ud3 2.0 \n", + "e64i9cf 2.0 \n", + "e6q9204 2.0 \n", + "e5modd7 4.0 \n", + "e5xhbyd 2.0 \n", + "e5oaf7h 2.0 \n", + "e6nir3u 2.0 \n", + "e6c3xdn 2.0 \n", + "e5d3zaa 2.0 \n", + "e5gnjv9 1.0 \n", + "e69gw2t 2.0 \n", + "e5syrih 3.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 1.0 \n", + "... ... \n", + "e5smhzk 1.0 \n", + "e5v91s0 2.0 \n", + "e6n6di6 3.0 \n", + "e6iqq30 1.0 \n", + "e5bfad7 2.0 \n", + "e6x5he5 2.0 \n", + "e6l9uyf 2.0 \n", + "e57hyr1 2.0 \n", + "e5b8sj7 3.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 4.0 \n", + "e57a6qq 2.0 \n", + "e5qc7eb 3.0 \n", + "e6hqt5y 4.0 \n", + "e5ua84v 3.0 \n", + "e65m7kq 2.0 \n", + "e5ggtru 4.0 \n", + "e5pmmig 2.0 \n", + "e64l6vq 2.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 2.0 \n", + "e589ri5 1.0 \n", + "e5beuqa 3.0 \n", + "e5lqoj1 1.0 \n", + "e5kvch1 1.0 \n", + "e6srvwm 2.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 3.0 \n", + "e58n526 0.0 \n", + "e69r2kg 2.0 \n", "\n", - " prop-multiple[indegree over c->c mid-thread responses] \\\n", - "e5hm9mp 0.166667 \n", - "e5ytz1d 0.666667 \n", - "e6ls80j 0.333333 \n", - "e5mhgl5 0.333333 \n", - "e6w6fah 0.000000 \n", - "... ... \n", - "e65ca8k 0.000000 \n", - "e6cdkpy 0.666667 \n", - "e5wc4tj 0.000000 \n", - "e6ua0sb 0.250000 \n", - "e5ua84v 0.400000 \n", + " max[indegree over c->c responses] \\\n", + "e6p7yrp 3.0 \n", + "e5ywqyk 2.0 \n", + "e5qv9rj 3.0 \n", + "e6jhojf 2.0 \n", + "e6989ii 2.0 \n", + "e69lgse 3.0 \n", + "e5kwkg2 3.0 \n", + "e6mehe7 3.0 \n", + "e6m0hsd 2.0 \n", + "e64r385 2.0 \n", + "e5surbt 5.0 \n", + "e58gxii 2.0 \n", + "e64vc8y 6.0 \n", + "e57504g 2.0 \n", + "e5borjq 3.0 \n", + "e64n9zv 2.0 \n", + "e582ud3 6.0 \n", + "e64i9cf 4.0 \n", + "e6q9204 2.0 \n", + "e5modd7 4.0 \n", + "e5xhbyd 2.0 \n", + "e5oaf7h 2.0 \n", + "e6nir3u 2.0 \n", + "e6c3xdn 2.0 \n", + "e5d3zaa 2.0 \n", + "e5gnjv9 8.0 \n", + "e69gw2t 2.0 \n", + "e5syrih 3.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 3.0 \n", + "... ... \n", + "e5smhzk 2.0 \n", + "e5v91s0 5.0 \n", + "e6n6di6 3.0 \n", + "e6iqq30 6.0 \n", + "e5bfad7 3.0 \n", + "e6x5he5 4.0 \n", + "e6l9uyf 5.0 \n", + "e57hyr1 4.0 \n", + "e5b8sj7 3.0 \n", + "e6nlep7 9.0 \n", + "e6ltazd 4.0 \n", + "e57a6qq 2.0 \n", + "e5qc7eb 3.0 \n", + "e6hqt5y 4.0 \n", + "e5ua84v 3.0 \n", + "e65m7kq 4.0 \n", + "e5ggtru 4.0 \n", + "e5pmmig 2.0 \n", + "e64l6vq 3.0 \n", + "e6fjx0d 2.0 \n", + "e5h3xyy 4.0 \n", + "e589ri5 6.0 \n", + "e5beuqa 3.0 \n", + "e5lqoj1 5.0 \n", + "e5kvch1 3.0 \n", + "e6srvwm 3.0 \n", + "e5o65mk 2.0 \n", + "e647cm8 4.0 \n", + "e58n526 9.0 \n", + "e69r2kg 2.0 \n", "\n", - " entropy[indegree over c->c mid-thread responses] \\\n", - "e5hm9mp 1.667462 \n", - "e5ytz1d 1.011404 \n", - "e6ls80j 0.950271 \n", - "e5mhgl5 1.732868 \n", - "e6w6fah NaN \n", - "... ... \n", - "e65ca8k 1.945910 \n", - "e6cdkpy 1.054920 \n", - "e5wc4tj 2.079442 \n", - "e6ua0sb 1.153742 \n", - "e5ua84v 1.494175 \n", + " max[outdegree over C->C mid-thread responses] \\\n", + "e6p7yrp 3.0 \n", + "e5ywqyk 2.0 \n", + "e5qv9rj 1.0 \n", + "e6jhojf 4.0 \n", + "e6989ii 1.0 \n", + "e69lgse 2.0 \n", + "e5kwkg2 1.0 \n", + "e6mehe7 3.0 \n", + "e6m0hsd 2.0 \n", + "e64r385 2.0 \n", + "e5surbt 1.0 \n", + "e58gxii 3.0 \n", + "e64vc8y 1.0 \n", + "e57504g 2.0 \n", + "e5borjq 1.0 \n", + "e64n9zv 2.0 \n", + "e582ud3 1.0 \n", + "e64i9cf 2.0 \n", + "e6q9204 2.0 \n", + "e5modd7 1.0 \n", + "e5xhbyd 2.0 \n", + "e5oaf7h 2.0 \n", + "e6nir3u 1.0 \n", + "e6c3xdn 1.0 \n", + "e5d3zaa 1.0 \n", + "e5gnjv9 1.0 \n", + "e69gw2t 2.0 \n", + "e5syrih 2.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 4.0 \n", + "... ... \n", + "e5smhzk 2.0 \n", + "e5v91s0 1.0 \n", + "e6n6di6 2.0 \n", + "e6iqq30 1.0 \n", + "e5bfad7 2.0 \n", + "e6x5he5 4.0 \n", + "e6l9uyf 1.0 \n", + "e57hyr1 1.0 \n", + "e5b8sj7 1.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 1.0 \n", + "e57a6qq 2.0 \n", + "e5qc7eb 1.0 \n", + "e6hqt5y 1.0 \n", + "e5ua84v 2.0 \n", + "e65m7kq 1.0 \n", + "e5ggtru 1.0 \n", + "e5pmmig 2.0 \n", + "e64l6vq 2.0 \n", + "e6fjx0d 1.0 \n", + "e5h3xyy 1.0 \n", + "e589ri5 1.0 \n", + "e5beuqa 3.0 \n", + "e5lqoj1 2.0 \n", + "e5kvch1 1.0 \n", + "e6srvwm 1.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 1.0 \n", + "e58n526 0.0 \n", + "e69r2kg 2.0 \n", "\n", - " 2nd-largest / max[indegree over c->c mid-thread responses] \\\n", - "e5hm9mp 0.333333 \n", - "e5ytz1d 0.666667 \n", - "e6ls80j 0.333333 \n", - "e5mhgl5 1.000000 \n", - "e6w6fah NaN \n", - "... ... \n", - "e65ca8k 1.000000 \n", - "e6cdkpy 1.000000 \n", - "e5wc4tj 1.000000 \n", - "e6ua0sb 0.250000 \n", - "e5ua84v 0.666667 \n", + " max[outdegree over C->C responses] \\\n", + "e6p7yrp 3.0 \n", + "e5ywqyk 2.0 \n", + "e5qv9rj 1.0 \n", + "e6jhojf 4.0 \n", + "e6989ii 1.0 \n", + "e69lgse 2.0 \n", + "e5kwkg2 1.0 \n", + "e6mehe7 3.0 \n", + "e6m0hsd 2.0 \n", + "e64r385 2.0 \n", + "e5surbt 1.0 \n", + "e58gxii 3.0 \n", + "e64vc8y 1.0 \n", + "e57504g 2.0 \n", + "e5borjq 2.0 \n", + "e64n9zv 2.0 \n", + "e582ud3 1.0 \n", + "e64i9cf 2.0 \n", + "e6q9204 3.0 \n", + "e5modd7 1.0 \n", + "e5xhbyd 2.0 \n", + "e5oaf7h 2.0 \n", + "e6nir3u 1.0 \n", + "e6c3xdn 1.0 \n", + "e5d3zaa 2.0 \n", + "e5gnjv9 2.0 \n", + "e69gw2t 2.0 \n", + "e5syrih 2.0 \n", + "e5sa2yf 1.0 \n", + "e6ai7z5 4.0 \n", + "... ... \n", + "e5smhzk 2.0 \n", + "e5v91s0 1.0 \n", + "e6n6di6 2.0 \n", + "e6iqq30 1.0 \n", + "e5bfad7 2.0 \n", + "e6x5he5 4.0 \n", + "e6l9uyf 2.0 \n", + "e57hyr1 2.0 \n", + "e5b8sj7 2.0 \n", + "e6nlep7 1.0 \n", + "e6ltazd 2.0 \n", + "e57a6qq 2.0 \n", + "e5qc7eb 2.0 \n", + "e6hqt5y 2.0 \n", + "e5ua84v 3.0 \n", + "e65m7kq 2.0 \n", + "e5ggtru 2.0 \n", + "e5pmmig 3.0 \n", + "e64l6vq 2.0 \n", + "e6fjx0d 2.0 \n", + "e5h3xyy 2.0 \n", + "e589ri5 1.0 \n", + "e5beuqa 4.0 \n", + "e5lqoj1 3.0 \n", + "e5kvch1 2.0 \n", + "e6srvwm 2.0 \n", + "e5o65mk 1.0 \n", + "e647cm8 1.0 \n", + "e58n526 1.0 \n", + "e69r2kg 2.0 \n", "\n", " max[outdegree over C->c mid-thread responses] \\\n", - "e5hm9mp 2.0 \n", - "e5ytz1d 1.0 \n", - "e6ls80j 2.0 \n", - "e5mhgl5 2.0 \n", - "e6w6fah 0.0 \n", + "e6p7yrp 3.0 \n", + "e5ywqyk 4.0 \n", + "e5qv9rj 1.0 \n", + "e6jhojf 4.0 \n", + "e6989ii 4.0 \n", + "e69lgse 2.0 \n", + "e5kwkg2 1.0 \n", + "e6mehe7 3.0 \n", + "e6m0hsd 4.0 \n", + "e64r385 2.0 \n", + "e5surbt 1.0 \n", + "e58gxii 3.0 \n", + "e64vc8y 1.0 \n", + "e57504g 2.0 \n", + "e5borjq 1.0 \n", + "e64n9zv 3.0 \n", + "e582ud3 1.0 \n", + "e64i9cf 3.0 \n", + "e6q9204 3.0 \n", + "e5modd7 1.0 \n", + "e5xhbyd 3.0 \n", + "e5oaf7h 4.0 \n", + "e6nir3u 4.0 \n", + "e6c3xdn 1.0 \n", + "e5d3zaa 2.0 \n", + "e5gnjv9 1.0 \n", + "e69gw2t 3.0 \n", + "e5syrih 2.0 \n", + "e5sa2yf 4.0 \n", + "e6ai7z5 4.0 \n", "... ... \n", - "e65ca8k 7.0 \n", - "e6cdkpy 1.0 \n", - "e5wc4tj 4.0 \n", - "e6ua0sb 2.0 \n", + "e5smhzk 4.0 \n", + "e5v91s0 1.0 \n", + "e6n6di6 2.0 \n", + "e6iqq30 1.0 \n", + "e5bfad7 2.0 \n", + "e6x5he5 4.0 \n", + "e6l9uyf 1.0 \n", + "e57hyr1 1.0 \n", + "e5b8sj7 1.0 \n", + "e6nlep7 0.0 \n", + "e6ltazd 3.0 \n", + "e57a6qq 3.0 \n", + "e5qc7eb 2.0 \n", + "e6hqt5y 1.0 \n", "e5ua84v 2.0 \n", + "e65m7kq 1.0 \n", + "e5ggtru 1.0 \n", + "e5pmmig 3.0 \n", + "e64l6vq 3.0 \n", + "e6fjx0d 4.0 \n", + "e5h3xyy 1.0 \n", + "e589ri5 1.0 \n", + "e5beuqa 3.0 \n", + "e5lqoj1 2.0 \n", + "e5kvch1 2.0 \n", + "e6srvwm 1.0 \n", + "e5o65mk 4.0 \n", + "e647cm8 1.0 \n", + "e58n526 0.0 \n", + "e69r2kg 2.0 \n", "\n", - " max[indegree over C->c mid-thread responses] \\\n", - "e5hm9mp 3.0 \n", - "e5ytz1d 3.0 \n", - "e6ls80j 3.0 \n", - "e5mhgl5 2.0 \n", - "e6w6fah 0.0 \n", - "... ... \n", - "e65ca8k 1.0 \n", - "e6cdkpy 2.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 4.0 \n", - "e5ua84v 3.0 \n", + " max[outdegree over C->c responses] \\\n", + "e6p7yrp 3.0 \n", + "e5ywqyk 4.0 \n", + "e5qv9rj 1.0 \n", + "e6jhojf 4.0 \n", + "e6989ii 4.0 \n", + "e69lgse 2.0 \n", + "e5kwkg2 1.0 \n", + "e6mehe7 3.0 \n", + "e6m0hsd 5.0 \n", + "e64r385 2.0 \n", + "e5surbt 1.0 \n", + "e58gxii 3.0 \n", + "e64vc8y 1.0 \n", + "e57504g 2.0 \n", + "e5borjq 2.0 \n", + "e64n9zv 4.0 \n", + "e582ud3 1.0 \n", + "e64i9cf 3.0 \n", + "e6q9204 4.0 \n", + "e5modd7 1.0 \n", + "e5xhbyd 3.0 \n", + "e5oaf7h 5.0 \n", + "e6nir3u 4.0 \n", + "e6c3xdn 1.0 \n", + "e5d3zaa 3.0 \n", + "e5gnjv9 2.0 \n", + "e69gw2t 3.0 \n", + "e5syrih 2.0 \n", + "e5sa2yf 5.0 \n", + "e6ai7z5 5.0 \n", + "... ... \n", + "e5smhzk 4.0 \n", + "e5v91s0 1.0 \n", + "e6n6di6 2.0 \n", + "e6iqq30 1.0 \n", + "e5bfad7 2.0 \n", + "e6x5he5 4.0 \n", + "e6l9uyf 2.0 \n", + "e57hyr1 2.0 \n", + "e5b8sj7 2.0 \n", + "e6nlep7 1.0 \n", + "e6ltazd 3.0 \n", + "e57a6qq 3.0 \n", + "e5qc7eb 2.0 \n", + "e6hqt5y 2.0 \n", + "e5ua84v 3.0 \n", + "e65m7kq 2.0 \n", + "e5ggtru 2.0 \n", + "e5pmmig 3.0 \n", + "e64l6vq 3.0 \n", + "e6fjx0d 4.0 \n", + "e5h3xyy 2.0 \n", + "e589ri5 1.0 \n", + "e5beuqa 4.0 \n", + "e5lqoj1 3.0 \n", + "e5kvch1 2.0 \n", + "e6srvwm 2.0 \n", + "e5o65mk 4.0 \n", + "e647cm8 1.0 \n", + "e58n526 1.0 \n", + "e69r2kg 2.0 \n", "\n", - " argmax[outdegree over C->c mid-thread responses] \\\n", - "e5hm9mp 1.0 \n", - "e5ytz1d 3.0 \n", - "e6ls80j 2.0 \n", - "e5mhgl5 3.0 \n", - "e6w6fah 0.0 \n", - "... ... \n", - "e65ca8k 1.0 \n", - "e6cdkpy 2.0 \n", - "e5wc4tj 0.0 \n", - "e6ua0sb 2.0 \n", - "e5ua84v 0.0 \n", + " mean-nonzero[indegree over C->C mid-thread responses] \\\n", + "e6p7yrp 1.500000 \n", + "e5ywqyk 1.333333 \n", + "e5qv9rj 1.500000 \n", + "e6jhojf 1.400000 \n", + "e6989ii 1.000000 \n", + "e69lgse 1.500000 \n", + "e5kwkg2 1.200000 \n", + "e6mehe7 1.250000 \n", + "e6m0hsd 1.333333 \n", + "e64r385 1.400000 \n", + "e5surbt 1.000000 \n", + "e58gxii 1.750000 \n", + "e64vc8y 1.000000 \n", + "e57504g 1.400000 \n", + "e5borjq 1.750000 \n", + "e64n9zv 1.333333 \n", + "e582ud3 1.500000 \n", + "e64i9cf 1.333333 \n", + "e6q9204 2.000000 \n", + "e5modd7 2.666667 \n", + "e5xhbyd 1.500000 \n", + "e5oaf7h 2.000000 \n", + "e6nir3u 1.000000 \n", + "e6c3xdn 1.142857 \n", + "e5d3zaa 1.666667 \n", + "e5gnjv9 1.000000 \n", + "e69gw2t 1.666667 \n", + "e5syrih 2.666667 \n", + "e5sa2yf 1.000000 \n", + "e6ai7z5 1.200000 \n", + "... ... \n", + "e5smhzk 1.000000 \n", + "e5v91s0 1.333333 \n", + "e6n6di6 2.000000 \n", + "e6iqq30 1.000000 \n", + "e5bfad7 1.500000 \n", + "e6x5he5 1.000000 \n", + "e6l9uyf 1.333333 \n", + "e57hyr1 1.250000 \n", + "e5b8sj7 3.000000 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 2.500000 \n", + "e57a6qq 2.000000 \n", + "e5qc7eb 2.000000 \n", + "e6hqt5y 2.500000 \n", + "e5ua84v 2.000000 \n", + "e65m7kq 1.666667 \n", + "e5ggtru 2.666667 \n", + "e5pmmig 1.500000 \n", + "e64l6vq 1.250000 \n", + "e6fjx0d 1.000000 \n", + "e5h3xyy 1.250000 \n", + "e589ri5 1.000000 \n", + "e5beuqa 1.750000 \n", + "e5lqoj1 1.000000 \n", + "e5kvch1 1.250000 \n", + "e6srvwm 1.500000 \n", + "e5o65mk 1.000000 \n", + "e647cm8 1.666667 \n", + "e58n526 0.000000 \n", + "e69r2kg 1.750000 \n", "\n", - " argmax[indegree over C->c mid-thread responses] \\\n", - "e5hm9mp 0.0 \n", - "e5ytz1d 1.0 \n", - "e6ls80j 1.0 \n", - "e5mhgl5 0.0 \n", - "e6w6fah 0.0 \n", - "... ... \n", - "e65ca8k 1.0 \n", - "e6cdkpy 0.0 \n", - "e5wc4tj 0.0 \n", - "e6ua0sb 1.0 \n", - "e5ua84v 0.0 \n", + " mean-nonzero[indegree over C->C responses] \\\n", + "e6p7yrp 2.000000 \n", + "e5ywqyk 1.666667 \n", + "e5qv9rj 1.800000 \n", + "e6jhojf 1.600000 \n", + "e6989ii 1.000000 \n", + "e69lgse 2.000000 \n", + "e5kwkg2 1.500000 \n", + "e6mehe7 2.000000 \n", + "e6m0hsd 1.333333 \n", + "e64r385 1.500000 \n", + "e5surbt 1.800000 \n", + "e58gxii 2.000000 \n", + "e64vc8y 2.250000 \n", + "e57504g 1.500000 \n", + "e5borjq 1.800000 \n", + "e64n9zv 1.333333 \n", + "e582ud3 3.000000 \n", + "e64i9cf 2.333333 \n", + "e6q9204 1.750000 \n", + "e5modd7 2.250000 \n", + "e5xhbyd 1.500000 \n", + "e5oaf7h 2.000000 \n", + "e6nir3u 1.000000 \n", + "e6c3xdn 1.125000 \n", + "e5d3zaa 1.750000 \n", + "e5gnjv9 4.500000 \n", + "e69gw2t 1.750000 \n", + "e5syrih 2.250000 \n", + "e5sa2yf 1.000000 \n", + "e6ai7z5 1.600000 \n", + "... ... \n", + "e5smhzk 1.333333 \n", + "e5v91s0 2.250000 \n", + "e6n6di6 1.800000 \n", + "e6iqq30 2.250000 \n", + "e5bfad7 2.250000 \n", + "e6x5he5 1.600000 \n", + "e6l9uyf 2.250000 \n", + "e57hyr1 1.800000 \n", + "e5b8sj7 3.000000 \n", + "e6nlep7 9.000000 \n", + "e6ltazd 2.000000 \n", + "e57a6qq 2.000000 \n", + "e5qc7eb 2.333333 \n", + "e6hqt5y 3.000000 \n", + "e5ua84v 1.800000 \n", + "e65m7kq 2.250000 \n", + "e5ggtru 2.250000 \n", + "e5pmmig 1.400000 \n", + "e64l6vq 1.750000 \n", + "e6fjx0d 1.333333 \n", + "e5h3xyy 1.800000 \n", + "e589ri5 2.250000 \n", + "e5beuqa 1.800000 \n", + "e5lqoj1 2.000000 \n", + "e5kvch1 1.600000 \n", + "e6srvwm 1.800000 \n", + "e5o65mk 1.000000 \n", + "e647cm8 2.250000 \n", + "e58n526 9.000000 \n", + "e69r2kg 1.800000 \n", "\n", - " norm.max[outdegree over C->c mid-thread responses] \\\n", - "e5hm9mp 0.250000 \n", - "e5ytz1d 0.166667 \n", - "e6ls80j 0.400000 \n", - "e5mhgl5 0.250000 \n", - "e6w6fah 0.000000 \n", - "... ... \n", - "e65ca8k 1.000000 \n", - "e6cdkpy 0.200000 \n", - "e5wc4tj 0.500000 \n", - "e6ua0sb 0.285714 \n", - "e5ua84v 0.250000 \n", + " mean-nonzero[indegree over C->c mid-thread responses] \\\n", + "e6p7yrp 1.000000 \n", + "e5ywqyk 1.142857 \n", + "e5qv9rj 1.500000 \n", + "e6jhojf 1.142857 \n", + "e6989ii 1.000000 \n", + "e69lgse 1.500000 \n", + "e5kwkg2 1.200000 \n", + "e6mehe7 1.200000 \n", + "e6m0hsd 1.142857 \n", + "e64r385 1.400000 \n", + "e5surbt 1.000000 \n", + "e58gxii 1.400000 \n", + "e64vc8y 1.000000 \n", + "e57504g 1.400000 \n", + "e5borjq 1.750000 \n", + "e64n9zv 1.142857 \n", + "e582ud3 1.500000 \n", + "e64i9cf 1.250000 \n", + "e6q9204 1.333333 \n", + "e5modd7 2.666667 \n", + "e5xhbyd 1.333333 \n", + "e5oaf7h 1.333333 \n", + "e6nir3u 1.000000 \n", + "e6c3xdn 1.142857 \n", + "e5d3zaa 1.400000 \n", + "e5gnjv9 1.000000 \n", + "e69gw2t 1.400000 \n", + "e5syrih 1.600000 \n", + "e5sa2yf 1.000000 \n", + "e6ai7z5 1.000000 \n", + "... ... \n", + "e5smhzk 1.000000 \n", + "e5v91s0 1.333333 \n", + "e6n6di6 1.600000 \n", + "e6iqq30 1.000000 \n", + "e5bfad7 1.500000 \n", + "e6x5he5 1.000000 \n", + "e6l9uyf 1.333333 \n", + "e57hyr1 1.250000 \n", + "e5b8sj7 2.000000 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 1.600000 \n", + "e57a6qq 1.333333 \n", + "e5qc7eb 1.750000 \n", + "e6hqt5y 2.500000 \n", + "e5ua84v 1.600000 \n", + "e65m7kq 1.250000 \n", + "e5ggtru 2.000000 \n", + "e5pmmig 1.142857 \n", + "e64l6vq 1.200000 \n", + "e6fjx0d 1.000000 \n", + "e5h3xyy 1.250000 \n", + "e589ri5 1.000000 \n", + "e5beuqa 1.400000 \n", + "e5lqoj1 1.000000 \n", + "e5kvch1 1.000000 \n", + "e6srvwm 1.500000 \n", + "e5o65mk 1.000000 \n", + "e647cm8 1.666667 \n", + "e58n526 0.000000 \n", + "e69r2kg 1.400000 \n", "\n", - " norm.max[indegree over C->c mid-thread responses] \\\n", - "e5hm9mp 0.375000 \n", - "e5ytz1d 0.500000 \n", - "e6ls80j 0.600000 \n", - "e5mhgl5 0.250000 \n", - "e6w6fah 0.000000 \n", - "... ... \n", - "e65ca8k 0.142857 \n", - "e6cdkpy 0.400000 \n", - "e5wc4tj 0.125000 \n", - "e6ua0sb 0.571429 \n", - "e5ua84v 0.375000 \n", + " mean-nonzero[indegree over C->c responses] \\\n", + "e6p7yrp 1.285714 \n", + "e5ywqyk 1.125000 \n", + "e5qv9rj 1.800000 \n", + "e6jhojf 1.125000 \n", + "e6989ii 1.000000 \n", + "e69lgse 1.800000 \n", + "e5kwkg2 1.500000 \n", + "e6mehe7 1.500000 \n", + "e6m0hsd 1.125000 \n", + "e64r385 1.500000 \n", + "e5surbt 1.800000 \n", + "e58gxii 1.500000 \n", + "e64vc8y 2.250000 \n", + "e57504g 1.500000 \n", + "e5borjq 1.800000 \n", + "e64n9zv 1.125000 \n", + "e582ud3 3.000000 \n", + "e64i9cf 1.800000 \n", + "e6q9204 1.285714 \n", + "e5modd7 2.250000 \n", + "e5xhbyd 1.285714 \n", + "e5oaf7h 1.285714 \n", + "e6nir3u 1.000000 \n", + "e6c3xdn 1.125000 \n", + "e5d3zaa 1.500000 \n", + "e5gnjv9 4.500000 \n", + "e69gw2t 1.500000 \n", + "e5syrih 1.500000 \n", + "e5sa2yf 1.000000 \n", + "e6ai7z5 1.285714 \n", + "... ... \n", + "e5smhzk 1.125000 \n", + "e5v91s0 2.250000 \n", + "e6n6di6 1.500000 \n", + "e6iqq30 2.250000 \n", + "e5bfad7 1.800000 \n", + "e6x5he5 1.600000 \n", + "e6l9uyf 2.250000 \n", + "e57hyr1 1.800000 \n", + "e5b8sj7 2.250000 \n", + "e6nlep7 9.000000 \n", + "e6ltazd 1.500000 \n", + "e57a6qq 1.285714 \n", + "e5qc7eb 1.800000 \n", + "e6hqt5y 3.000000 \n", + "e5ua84v 1.500000 \n", + "e65m7kq 1.800000 \n", + "e5ggtru 1.800000 \n", + "e5pmmig 1.125000 \n", + "e64l6vq 1.500000 \n", + "e6fjx0d 1.125000 \n", + "e5h3xyy 1.800000 \n", + "e589ri5 2.250000 \n", + "e5beuqa 1.500000 \n", + "e5lqoj1 1.800000 \n", + "e5kvch1 1.285714 \n", + "e6srvwm 1.800000 \n", + "e5o65mk 1.000000 \n", + "e647cm8 2.250000 \n", + "e58n526 9.000000 \n", + "e69r2kg 1.500000 \n", "\n", - " 2nd-largest[outdegree over C->c mid-thread responses] \\\n", - "e5hm9mp 2.0 \n", - "e5ytz1d 1.0 \n", - "e6ls80j 1.0 \n", - "e5mhgl5 2.0 \n", - "e6w6fah 0.0 \n", + " mean-nonzero[indegree over c->c mid-thread responses] \\\n", + "e6p7yrp 1.000000 \n", + "e5ywqyk 1.142857 \n", + "e5qv9rj 1.500000 \n", + "e6jhojf 1.142857 \n", + "e6989ii 1.142857 \n", + "e69lgse 1.500000 \n", + "e5kwkg2 1.200000 \n", + "e6mehe7 1.200000 \n", + "e6m0hsd 1.142857 \n", + "e64r385 1.400000 \n", + "e5surbt 1.000000 \n", + "e58gxii 1.400000 \n", + "e64vc8y 1.000000 \n", + "e57504g 1.400000 \n", + "e5borjq 1.750000 \n", + "e64n9zv 1.142857 \n", + "e582ud3 1.500000 \n", + "e64i9cf 1.250000 \n", + "e6q9204 1.333333 \n", + "e5modd7 2.666667 \n", + "e5xhbyd 1.333333 \n", + "e5oaf7h 1.333333 \n", + "e6nir3u 1.142857 \n", + "e6c3xdn 1.142857 \n", + "e5d3zaa 1.400000 \n", + "e5gnjv9 1.000000 \n", + "e69gw2t 1.400000 \n", + "e5syrih 1.600000 \n", + "e5sa2yf 1.000000 \n", + "e6ai7z5 1.000000 \n", "... ... \n", - "e65ca8k 0.0 \n", - "e6cdkpy 1.0 \n", - "e5wc4tj 4.0 \n", - "e6ua0sb 2.0 \n", - "e5ua84v 2.0 \n", + "e5smhzk 1.000000 \n", + "e5v91s0 1.333333 \n", + "e6n6di6 1.600000 \n", + "e6iqq30 1.000000 \n", + "e5bfad7 1.500000 \n", + "e6x5he5 1.250000 \n", + "e6l9uyf 1.333333 \n", + "e57hyr1 1.250000 \n", + "e5b8sj7 2.000000 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 1.600000 \n", + "e57a6qq 1.333333 \n", + "e5qc7eb 1.750000 \n", + "e6hqt5y 2.500000 \n", + "e5ua84v 1.600000 \n", + "e65m7kq 1.250000 \n", + "e5ggtru 2.000000 \n", + "e5pmmig 1.142857 \n", + "e64l6vq 1.200000 \n", + "e6fjx0d 1.000000 \n", + "e5h3xyy 1.250000 \n", + "e589ri5 1.000000 \n", + "e5beuqa 1.400000 \n", + "e5lqoj1 1.000000 \n", + "e5kvch1 1.000000 \n", + "e6srvwm 1.500000 \n", + "e5o65mk 1.000000 \n", + "e647cm8 1.666667 \n", + "e58n526 0.000000 \n", + "e69r2kg 1.400000 \n", "\n", - " 2nd-largest[indegree over C->c mid-thread responses] \\\n", - "e5hm9mp 1.0 \n", - "e5ytz1d 2.0 \n", - "e6ls80j 1.0 \n", - "e5mhgl5 2.0 \n", - "e6w6fah 0.0 \n", - "... ... \n", - "e65ca8k 1.0 \n", - "e6cdkpy 2.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 1.0 \n", - "e5ua84v 2.0 \n", + " mean-nonzero[indegree over c->c responses] \\\n", + "e6p7yrp 1.285714 \n", + "e5ywqyk 1.125000 \n", + "e5qv9rj 1.800000 \n", + "e6jhojf 1.125000 \n", + "e6989ii 1.125000 \n", + "e69lgse 1.800000 \n", + "e5kwkg2 1.500000 \n", + "e6mehe7 1.500000 \n", + "e6m0hsd 1.125000 \n", + "e64r385 1.500000 \n", + "e5surbt 1.800000 \n", + "e58gxii 1.500000 \n", + "e64vc8y 2.250000 \n", + "e57504g 1.500000 \n", + "e5borjq 1.800000 \n", + "e64n9zv 1.125000 \n", + "e582ud3 3.000000 \n", + "e64i9cf 1.800000 \n", + "e6q9204 1.285714 \n", + "e5modd7 2.250000 \n", + "e5xhbyd 1.285714 \n", + "e5oaf7h 1.285714 \n", + "e6nir3u 1.125000 \n", + "e6c3xdn 1.125000 \n", + "e5d3zaa 1.500000 \n", + "e5gnjv9 4.500000 \n", + "e69gw2t 1.500000 \n", + "e5syrih 1.500000 \n", + "e5sa2yf 1.000000 \n", + "e6ai7z5 1.285714 \n", + "... ... \n", + "e5smhzk 1.125000 \n", + "e5v91s0 2.250000 \n", + "e6n6di6 1.500000 \n", + "e6iqq30 2.250000 \n", + "e5bfad7 1.800000 \n", + "e6x5he5 1.800000 \n", + "e6l9uyf 2.250000 \n", + "e57hyr1 1.800000 \n", + "e5b8sj7 2.250000 \n", + "e6nlep7 9.000000 \n", + "e6ltazd 1.500000 \n", + "e57a6qq 1.285714 \n", + "e5qc7eb 1.800000 \n", + "e6hqt5y 3.000000 \n", + "e5ua84v 1.500000 \n", + "e65m7kq 1.800000 \n", + "e5ggtru 1.800000 \n", + "e5pmmig 1.125000 \n", + "e64l6vq 1.500000 \n", + "e6fjx0d 1.125000 \n", + "e5h3xyy 1.800000 \n", + "e589ri5 2.250000 \n", + "e5beuqa 1.500000 \n", + "e5lqoj1 1.800000 \n", + "e5kvch1 1.285714 \n", + "e6srvwm 1.800000 \n", + "e5o65mk 1.125000 \n", + "e647cm8 2.250000 \n", + "e58n526 9.000000 \n", + "e69r2kg 1.500000 \n", "\n", - " 2nd-argmax[outdegree over C->c mid-thread responses] \\\n", - "e5hm9mp 2.0 \n", - "e5ytz1d 4.0 \n", - "e6ls80j 1.0 \n", - "e5mhgl5 5.0 \n", - "e6w6fah 1.0 \n", - "... ... \n", - "e65ca8k 0.0 \n", - "e6cdkpy 3.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 4.0 \n", - "e5ua84v 3.0 \n", + " mean-nonzero[outdegree over C->C mid-thread responses] \\\n", + "e6p7yrp 1.500000 \n", + "e5ywqyk 1.333333 \n", + "e5qv9rj 1.000000 \n", + "e6jhojf 1.750000 \n", + "e6989ii 1.000000 \n", + "e69lgse 1.200000 \n", + "e5kwkg2 1.000000 \n", + "e6mehe7 1.666667 \n", + "e6m0hsd 1.333333 \n", + "e64r385 1.166667 \n", + "e5surbt 1.000000 \n", + "e58gxii 1.400000 \n", + "e64vc8y 1.000000 \n", + "e57504g 1.166667 \n", + "e5borjq 1.000000 \n", + "e64n9zv 1.333333 \n", + "e582ud3 1.000000 \n", + "e64i9cf 1.333333 \n", + "e6q9204 1.200000 \n", + "e5modd7 1.000000 \n", + "e5xhbyd 1.500000 \n", + "e5oaf7h 1.333333 \n", + "e6nir3u 1.000000 \n", + "e6c3xdn 1.000000 \n", + "e5d3zaa 1.000000 \n", + "e5gnjv9 1.000000 \n", + "e69gw2t 1.250000 \n", + "e5syrih 1.142857 \n", + "e5sa2yf 1.000000 \n", + "e6ai7z5 2.000000 \n", + "... ... \n", + "e5smhzk 1.500000 \n", + "e5v91s0 1.000000 \n", + "e6n6di6 1.142857 \n", + "e6iqq30 1.000000 \n", + "e5bfad7 1.200000 \n", + "e6x5he5 4.000000 \n", + "e6l9uyf 1.000000 \n", + "e57hyr1 1.000000 \n", + "e5b8sj7 1.000000 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 1.000000 \n", + "e57a6qq 1.200000 \n", + "e5qc7eb 1.000000 \n", + "e6hqt5y 1.000000 \n", + "e5ua84v 1.333333 \n", + "e65m7kq 1.000000 \n", + "e5ggtru 1.000000 \n", + "e5pmmig 1.500000 \n", + "e64l6vq 1.250000 \n", + "e6fjx0d 1.000000 \n", + "e5h3xyy 1.000000 \n", + "e589ri5 1.000000 \n", + "e5beuqa 1.400000 \n", + "e5lqoj1 1.500000 \n", + "e5kvch1 1.000000 \n", + "e6srvwm 1.000000 \n", + "e5o65mk 1.000000 \n", + "e647cm8 1.000000 \n", + "e58n526 0.000000 \n", + "e69r2kg 1.166667 \n", "\n", - " 2nd-argmax[indegree over C->c mid-thread responses] \\\n", - "e5hm9mp 1.0 \n", - "e5ytz1d 0.0 \n", - "e6ls80j 4.0 \n", - "e5mhgl5 3.0 \n", - "e6w6fah 1.0 \n", - "... ... \n", - "e65ca8k 2.0 \n", - "e6cdkpy 1.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 0.0 \n", - "e5ua84v 4.0 \n", + " mean-nonzero[outdegree over C->C responses] \\\n", + "e6p7yrp 1.333333 \n", + "e5ywqyk 1.250000 \n", + "e5qv9rj 1.000000 \n", + "e6jhojf 1.600000 \n", + "e6989ii 1.000000 \n", + "e69lgse 1.142857 \n", + "e5kwkg2 1.000000 \n", + "e6mehe7 1.333333 \n", + "e6m0hsd 1.333333 \n", + "e64r385 1.285714 \n", + "e5surbt 1.000000 \n", + "e58gxii 1.333333 \n", + "e64vc8y 1.000000 \n", + "e57504g 1.285714 \n", + "e5borjq 1.125000 \n", + "e64n9zv 1.333333 \n", + "e582ud3 1.000000 \n", + "e64i9cf 1.166667 \n", + "e6q9204 1.400000 \n", + "e5modd7 1.000000 \n", + "e5xhbyd 1.500000 \n", + "e5oaf7h 1.333333 \n", + "e6nir3u 1.000000 \n", + "e6c3xdn 1.000000 \n", + "e5d3zaa 1.166667 \n", + "e5gnjv9 1.125000 \n", + "e69gw2t 1.400000 \n", + "e5syrih 1.285714 \n", + "e5sa2yf 1.000000 \n", + "e6ai7z5 1.600000 \n", + "... ... \n", + "e5smhzk 1.333333 \n", + "e5v91s0 1.000000 \n", + "e6n6di6 1.125000 \n", + "e6iqq30 1.000000 \n", + "e5bfad7 1.125000 \n", + "e6x5he5 1.600000 \n", + "e6l9uyf 1.125000 \n", + "e57hyr1 1.500000 \n", + "e5b8sj7 1.125000 \n", + "e6nlep7 1.000000 \n", + "e6ltazd 1.200000 \n", + "e57a6qq 1.200000 \n", + "e5qc7eb 1.166667 \n", + "e6hqt5y 1.125000 \n", + "e5ua84v 1.500000 \n", + "e65m7kq 1.125000 \n", + "e5ggtru 1.125000 \n", + "e5pmmig 1.750000 \n", + "e64l6vq 1.166667 \n", + "e6fjx0d 1.333333 \n", + "e5h3xyy 1.125000 \n", + "e589ri5 1.000000 \n", + "e5beuqa 1.800000 \n", + "e5lqoj1 1.333333 \n", + "e5kvch1 1.333333 \n", + "e6srvwm 1.125000 \n", + "e5o65mk 1.000000 \n", + "e647cm8 1.000000 \n", + "e58n526 1.000000 \n", + "e69r2kg 1.125000 \n", "\n", - " norm.2nd-largest[outdegree over C->c mid-thread responses] \\\n", - "e5hm9mp 0.250000 \n", - "e5ytz1d 0.166667 \n", - "e6ls80j 0.200000 \n", - "e5mhgl5 0.250000 \n", - "e6w6fah NaN \n", - "... ... \n", - "e65ca8k 0.000000 \n", - "e6cdkpy 0.200000 \n", - "e5wc4tj 0.500000 \n", - "e6ua0sb 0.285714 \n", - "e5ua84v 0.250000 \n", + " mean-nonzero[outdegree over C->c mid-thread responses] \\\n", + "e6p7yrp 1.500000 \n", + "e5ywqyk 2.666667 \n", + "e5qv9rj 1.000000 \n", + "e6jhojf 2.000000 \n", + "e6989ii 3.500000 \n", + "e69lgse 1.200000 \n", + "e5kwkg2 1.000000 \n", + "e6mehe7 2.000000 \n", + "e6m0hsd 2.666667 \n", + "e64r385 1.166667 \n", + "e5surbt 1.000000 \n", + "e58gxii 1.400000 \n", + "e64vc8y 1.000000 \n", + "e57504g 1.166667 \n", + "e5borjq 1.000000 \n", + "e64n9zv 2.666667 \n", + "e582ud3 1.000000 \n", + "e64i9cf 1.666667 \n", + "e6q9204 1.600000 \n", + "e5modd7 1.000000 \n", + "e5xhbyd 2.000000 \n", + "e5oaf7h 2.666667 \n", + "e6nir3u 3.500000 \n", + "e6c3xdn 1.000000 \n", + "e5d3zaa 1.400000 \n", + "e5gnjv9 1.000000 \n", + "e69gw2t 1.750000 \n", + "e5syrih 1.142857 \n", + "e5sa2yf 4.000000 \n", + "e6ai7z5 2.000000 \n", + "... ... \n", + "e5smhzk 3.500000 \n", + "e5v91s0 1.000000 \n", + "e6n6di6 1.142857 \n", + "e6iqq30 1.000000 \n", + "e5bfad7 1.200000 \n", + "e6x5he5 4.000000 \n", + "e6l9uyf 1.000000 \n", + "e57hyr1 1.000000 \n", + "e5b8sj7 1.000000 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 1.600000 \n", + "e57a6qq 1.600000 \n", + "e5qc7eb 1.166667 \n", + "e6hqt5y 1.000000 \n", + "e5ua84v 1.333333 \n", + "e65m7kq 1.000000 \n", + "e5ggtru 1.000000 \n", + "e5pmmig 2.000000 \n", + "e64l6vq 1.500000 \n", + "e6fjx0d 3.500000 \n", + "e5h3xyy 1.000000 \n", + "e589ri5 1.000000 \n", + "e5beuqa 1.400000 \n", + "e5lqoj1 2.000000 \n", + "e5kvch1 1.200000 \n", + "e6srvwm 1.000000 \n", + "e5o65mk 3.500000 \n", + "e647cm8 1.000000 \n", + "e58n526 0.000000 \n", + "e69r2kg 1.166667 \n", "\n", - " norm.2nd-largest[indegree over C->c mid-thread responses] \\\n", - "e5hm9mp 0.125000 \n", - "e5ytz1d 0.333333 \n", - "e6ls80j 0.200000 \n", - "e5mhgl5 0.250000 \n", - "e6w6fah NaN \n", - "... ... \n", - "e65ca8k 0.142857 \n", - "e6cdkpy 0.400000 \n", - "e5wc4tj 0.125000 \n", - "e6ua0sb 0.142857 \n", - "e5ua84v 0.250000 \n", + " mean-nonzero[outdegree over C->c responses] \\\n", + "e6p7yrp 1.500000 \n", + "e5ywqyk 2.250000 \n", + "e5qv9rj 1.000000 \n", + "e6jhojf 1.800000 \n", + "e6989ii 4.000000 \n", + "e69lgse 1.285714 \n", + "e5kwkg2 1.000000 \n", + "e6mehe7 1.500000 \n", + "e6m0hsd 3.000000 \n", + "e64r385 1.285714 \n", + "e5surbt 1.000000 \n", + "e58gxii 1.500000 \n", + "e64vc8y 1.000000 \n", + "e57504g 1.285714 \n", + "e5borjq 1.125000 \n", + "e64n9zv 3.000000 \n", + "e582ud3 1.000000 \n", + "e64i9cf 1.500000 \n", + "e6q9204 1.800000 \n", + "e5modd7 1.000000 \n", + "e5xhbyd 2.250000 \n", + "e5oaf7h 3.000000 \n", + "e6nir3u 4.000000 \n", + "e6c3xdn 1.000000 \n", + "e5d3zaa 1.500000 \n", + "e5gnjv9 1.125000 \n", + "e69gw2t 1.800000 \n", + "e5syrih 1.285714 \n", + "e5sa2yf 4.500000 \n", + "e6ai7z5 1.800000 \n", + "... ... \n", + "e5smhzk 3.000000 \n", + "e5v91s0 1.000000 \n", + "e6n6di6 1.125000 \n", + "e6iqq30 1.000000 \n", + "e5bfad7 1.125000 \n", + "e6x5he5 1.600000 \n", + "e6l9uyf 1.125000 \n", + "e57hyr1 1.500000 \n", + "e5b8sj7 1.125000 \n", + "e6nlep7 1.000000 \n", + "e6ltazd 1.800000 \n", + "e57a6qq 1.800000 \n", + "e5qc7eb 1.500000 \n", + "e6hqt5y 1.125000 \n", + "e5ua84v 1.500000 \n", + "e65m7kq 1.125000 \n", + "e5ggtru 1.125000 \n", + "e5pmmig 2.250000 \n", + "e64l6vq 1.500000 \n", + "e6fjx0d 3.000000 \n", + "e5h3xyy 1.125000 \n", + "e589ri5 1.000000 \n", + "e5beuqa 1.800000 \n", + "e5lqoj1 1.500000 \n", + "e5kvch1 1.500000 \n", + "e6srvwm 1.125000 \n", + "e5o65mk 4.000000 \n", + "e647cm8 1.000000 \n", + "e58n526 1.000000 \n", + "e69r2kg 1.125000 \n", "\n", - " mean[outdegree over C->c mid-thread responses] \\\n", - "e5hm9mp 1.600000 \n", - "e5ytz1d 0.666667 \n", - "e6ls80j 0.833333 \n", - "e5mhgl5 1.142857 \n", - "e6w6fah 0.000000 \n", - "... ... \n", - "e65ca8k 3.500000 \n", - "e6cdkpy 0.555556 \n", - "e5wc4tj 4.000000 \n", - "e6ua0sb 1.400000 \n", - "e5ua84v 1.333333 \n", + " mean[indegree over C->C mid-thread responses] \\\n", + "e6p7yrp 1.000000 \n", + "e5ywqyk 1.000000 \n", + "e5qv9rj 0.666667 \n", + "e6jhojf 1.400000 \n", + "e6989ii 1.000000 \n", + "e69lgse 0.857143 \n", + "e5kwkg2 0.666667 \n", + "e6mehe7 0.833333 \n", + "e6m0hsd 1.333333 \n", + "e64r385 1.000000 \n", + "e5surbt 0.444444 \n", + "e58gxii 1.166667 \n", + "e64vc8y 0.333333 \n", + "e57504g 1.000000 \n", + "e5borjq 0.875000 \n", + "e64n9zv 1.333333 \n", + "e582ud3 0.333333 \n", + "e64i9cf 0.666667 \n", + "e6q9204 1.200000 \n", + "e5modd7 0.888889 \n", + "e5xhbyd 1.500000 \n", + "e5oaf7h 1.333333 \n", + "e6nir3u 1.000000 \n", + "e6c3xdn 0.888889 \n", + "e5d3zaa 0.833333 \n", + "e5gnjv9 0.125000 \n", + "e69gw2t 1.000000 \n", + "e5syrih 1.142857 \n", + "e5sa2yf 1.000000 \n", + "e6ai7z5 1.200000 \n", + "... ... \n", + "e5smhzk 1.000000 \n", + "e5v91s0 0.444444 \n", + "e6n6di6 1.000000 \n", + "e6iqq30 0.333333 \n", + "e5bfad7 0.750000 \n", + "e6x5he5 0.800000 \n", + "e6l9uyf 0.500000 \n", + "e57hyr1 0.833333 \n", + "e5b8sj7 0.750000 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 1.000000 \n", + "e57a6qq 1.200000 \n", + "e5qc7eb 1.000000 \n", + "e6hqt5y 0.625000 \n", + "e5ua84v 1.333333 \n", + "e65m7kq 0.625000 \n", + "e5ggtru 1.000000 \n", + "e5pmmig 1.500000 \n", + "e64l6vq 0.833333 \n", + "e6fjx0d 0.666667 \n", + "e5h3xyy 0.625000 \n", + "e589ri5 0.333333 \n", + "e5beuqa 1.400000 \n", + "e5lqoj1 0.500000 \n", + "e5kvch1 0.833333 \n", + "e6srvwm 0.750000 \n", + "e5o65mk 1.000000 \n", + "e647cm8 0.555556 \n", + "e58n526 0.000000 \n", + "e69r2kg 0.875000 \n", + "\n", + " mean[indegree over C->C responses] \\\n", + "e6p7yrp 1.333333 \n", + "e5ywqyk 1.250000 \n", + "e5qv9rj 0.900000 \n", + "e6jhojf 1.600000 \n", + "e6989ii 1.000000 \n", + "e69lgse 1.142857 \n", + "e5kwkg2 0.900000 \n", + "e6mehe7 1.333333 \n", + "e6m0hsd 1.333333 \n", + "e64r385 1.125000 \n", + "e5surbt 0.900000 \n", + "e58gxii 1.333333 \n", + "e64vc8y 0.900000 \n", + "e57504g 1.125000 \n", + "e5borjq 1.125000 \n", + "e64n9zv 1.333333 \n", + "e582ud3 0.900000 \n", + "e64i9cf 1.166667 \n", + "e6q9204 1.166667 \n", + "e5modd7 0.900000 \n", + "e5xhbyd 1.500000 \n", + "e5oaf7h 1.333333 \n", + "e6nir3u 1.000000 \n", + "e6c3xdn 0.900000 \n", + "e5d3zaa 1.000000 \n", + "e5gnjv9 1.000000 \n", + "e69gw2t 1.400000 \n", + "e5syrih 1.285714 \n", + "e5sa2yf 1.000000 \n", + "e6ai7z5 1.600000 \n", + "... ... \n", + "e5smhzk 1.333333 \n", + "e5v91s0 0.900000 \n", + "e6n6di6 1.000000 \n", + "e6iqq30 1.000000 \n", + "e5bfad7 1.125000 \n", + "e6x5he5 1.600000 \n", + "e6l9uyf 1.000000 \n", + "e57hyr1 1.285714 \n", + "e5b8sj7 1.125000 \n", + "e6nlep7 0.900000 \n", + "e6ltazd 1.000000 \n", + "e57a6qq 1.200000 \n", + "e5qc7eb 1.166667 \n", + "e6hqt5y 1.000000 \n", + "e5ua84v 1.285714 \n", + "e65m7kq 1.000000 \n", + "e5ggtru 1.000000 \n", + "e5pmmig 1.400000 \n", + "e64l6vq 1.166667 \n", + "e6fjx0d 1.000000 \n", + "e5h3xyy 1.000000 \n", + "e589ri5 0.900000 \n", + "e5beuqa 1.500000 \n", + "e5lqoj1 1.142857 \n", + "e5kvch1 1.142857 \n", + "e6srvwm 1.000000 \n", + "e5o65mk 1.000000 \n", + "e647cm8 1.000000 \n", + "e58n526 0.900000 \n", + "e69r2kg 1.125000 \n", "\n", " mean[indegree over C->c mid-thread responses] \\\n", - "e5hm9mp 0.888889 \n", - "e5ytz1d 0.666667 \n", - "e6ls80j 0.555556 \n", - "e5mhgl5 0.888889 \n", - "e6w6fah 0.000000 \n", + "e6p7yrp 0.666667 \n", + "e5ywqyk 0.888889 \n", + "e5qv9rj 0.666667 \n", + "e6jhojf 0.888889 \n", + "e6989ii 0.777778 \n", + "e69lgse 0.666667 \n", + "e5kwkg2 0.666667 \n", + "e6mehe7 0.666667 \n", + "e6m0hsd 0.888889 \n", + "e64r385 0.777778 \n", + "e5surbt 0.444444 \n", + "e58gxii 0.777778 \n", + "e64vc8y 0.333333 \n", + "e57504g 0.777778 \n", + "e5borjq 0.777778 \n", + "e64n9zv 0.888889 \n", + "e582ud3 0.333333 \n", + "e64i9cf 0.555556 \n", + "e6q9204 0.888889 \n", + "e5modd7 0.888889 \n", + "e5xhbyd 0.888889 \n", + "e5oaf7h 0.888889 \n", + "e6nir3u 0.777778 \n", + "e6c3xdn 0.888889 \n", + "e5d3zaa 0.777778 \n", + "e5gnjv9 0.111111 \n", + "e69gw2t 0.777778 \n", + "e5syrih 0.888889 \n", + "e5sa2yf 0.888889 \n", + "e6ai7z5 0.666667 \n", "... ... \n", - "e65ca8k 0.777778 \n", - "e6cdkpy 0.555556 \n", - "e5wc4tj 0.888889 \n", - "e6ua0sb 0.777778 \n", + "e5smhzk 0.777778 \n", + "e5v91s0 0.444444 \n", + "e6n6di6 0.888889 \n", + "e6iqq30 0.333333 \n", + "e5bfad7 0.666667 \n", + "e6x5he5 0.444444 \n", + "e6l9uyf 0.444444 \n", + "e57hyr1 0.555556 \n", + "e5b8sj7 0.666667 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 0.888889 \n", + "e57a6qq 0.888889 \n", + "e5qc7eb 0.777778 \n", + "e6hqt5y 0.555556 \n", "e5ua84v 0.888889 \n", + "e65m7kq 0.555556 \n", + "e5ggtru 0.888889 \n", + "e5pmmig 0.888889 \n", + "e64l6vq 0.666667 \n", + "e6fjx0d 0.777778 \n", + "e5h3xyy 0.555556 \n", + "e589ri5 0.333333 \n", + "e5beuqa 0.777778 \n", + "e5lqoj1 0.444444 \n", + "e5kvch1 0.666667 \n", + "e6srvwm 0.666667 \n", + "e5o65mk 0.777778 \n", + "e647cm8 0.555556 \n", + "e58n526 0.000000 \n", + "e69r2kg 0.777778 \n", "\n", - " mean-nonzero[outdegree over C->c mid-thread responses] \\\n", - "e5hm9mp 2.000000 \n", - "e5ytz1d 1.000000 \n", - "e6ls80j 1.250000 \n", - "e5mhgl5 1.333333 \n", - "e6w6fah 0.000000 \n", - "... ... \n", - "e65ca8k 7.000000 \n", - "e6cdkpy 1.000000 \n", - "e5wc4tj 4.000000 \n", - "e6ua0sb 1.400000 \n", - "e5ua84v 1.333333 \n", + " mean[indegree over C->c responses] \\\n", + "e6p7yrp 0.9 \n", + "e5ywqyk 0.9 \n", + "e5qv9rj 0.9 \n", + "e6jhojf 0.9 \n", + "e6989ii 0.8 \n", + "e69lgse 0.9 \n", + "e5kwkg2 0.9 \n", + "e6mehe7 0.9 \n", + "e6m0hsd 0.9 \n", + "e64r385 0.9 \n", + "e5surbt 0.9 \n", + "e58gxii 0.9 \n", + "e64vc8y 0.9 \n", + "e57504g 0.9 \n", + "e5borjq 0.9 \n", + "e64n9zv 0.9 \n", + "e582ud3 0.9 \n", + "e64i9cf 0.9 \n", + "e6q9204 0.9 \n", + "e5modd7 0.9 \n", + "e5xhbyd 0.9 \n", + "e5oaf7h 0.9 \n", + "e6nir3u 0.8 \n", + "e6c3xdn 0.9 \n", + "e5d3zaa 0.9 \n", + "e5gnjv9 0.9 \n", + "e69gw2t 0.9 \n", + "e5syrih 0.9 \n", + "e5sa2yf 0.9 \n", + "e6ai7z5 0.9 \n", + "... ... \n", + "e5smhzk 0.9 \n", + "e5v91s0 0.9 \n", + "e6n6di6 0.9 \n", + "e6iqq30 0.9 \n", + "e5bfad7 0.9 \n", + "e6x5he5 0.8 \n", + "e6l9uyf 0.9 \n", + "e57hyr1 0.9 \n", + "e5b8sj7 0.9 \n", + "e6nlep7 0.9 \n", + "e6ltazd 0.9 \n", + "e57a6qq 0.9 \n", + "e5qc7eb 0.9 \n", + "e6hqt5y 0.9 \n", + "e5ua84v 0.9 \n", + "e65m7kq 0.9 \n", + "e5ggtru 0.9 \n", + "e5pmmig 0.9 \n", + "e64l6vq 0.9 \n", + "e6fjx0d 0.9 \n", + "e5h3xyy 0.9 \n", + "e589ri5 0.9 \n", + "e5beuqa 0.9 \n", + "e5lqoj1 0.9 \n", + "e5kvch1 0.9 \n", + "e6srvwm 0.9 \n", + "e5o65mk 0.8 \n", + "e647cm8 0.9 \n", + "e58n526 0.9 \n", + "e69r2kg 0.9 \n", "\n", - " mean-nonzero[indegree over C->c mid-thread responses] \\\n", - "e5hm9mp 1.333333 \n", - "e5ytz1d 2.000000 \n", - "e6ls80j 1.666667 \n", - "e5mhgl5 1.333333 \n", - "e6w6fah 0.000000 \n", - "... ... \n", - "e65ca8k 1.000000 \n", - "e6cdkpy 1.666667 \n", - "e5wc4tj 1.000000 \n", - "e6ua0sb 1.750000 \n", - "e5ua84v 1.600000 \n", + " mean[indegree over c->c mid-thread responses] \\\n", + "e6p7yrp 0.666667 \n", + "e5ywqyk 0.888889 \n", + "e5qv9rj 0.666667 \n", + "e6jhojf 0.888889 \n", + "e6989ii 0.888889 \n", + "e69lgse 0.666667 \n", + "e5kwkg2 0.666667 \n", + "e6mehe7 0.666667 \n", + "e6m0hsd 0.888889 \n", + "e64r385 0.777778 \n", + "e5surbt 0.444444 \n", + "e58gxii 0.777778 \n", + "e64vc8y 0.333333 \n", + "e57504g 0.777778 \n", + "e5borjq 0.777778 \n", + "e64n9zv 0.888889 \n", + "e582ud3 0.333333 \n", + "e64i9cf 0.555556 \n", + "e6q9204 0.888889 \n", + "e5modd7 0.888889 \n", + "e5xhbyd 0.888889 \n", + "e5oaf7h 0.888889 \n", + "e6nir3u 0.888889 \n", + "e6c3xdn 0.888889 \n", + "e5d3zaa 0.777778 \n", + "e5gnjv9 0.111111 \n", + "e69gw2t 0.777778 \n", + "e5syrih 0.888889 \n", + "e5sa2yf 0.888889 \n", + "e6ai7z5 0.666667 \n", + "... ... \n", + "e5smhzk 0.777778 \n", + "e5v91s0 0.444444 \n", + "e6n6di6 0.888889 \n", + "e6iqq30 0.333333 \n", + "e5bfad7 0.666667 \n", + "e6x5he5 0.555556 \n", + "e6l9uyf 0.444444 \n", + "e57hyr1 0.555556 \n", + "e5b8sj7 0.666667 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 0.888889 \n", + "e57a6qq 0.888889 \n", + "e5qc7eb 0.777778 \n", + "e6hqt5y 0.555556 \n", + "e5ua84v 0.888889 \n", + "e65m7kq 0.555556 \n", + "e5ggtru 0.888889 \n", + "e5pmmig 0.888889 \n", + "e64l6vq 0.666667 \n", + "e6fjx0d 0.777778 \n", + "e5h3xyy 0.555556 \n", + "e589ri5 0.333333 \n", + "e5beuqa 0.777778 \n", + "e5lqoj1 0.444444 \n", + "e5kvch1 0.666667 \n", + "e6srvwm 0.666667 \n", + "e5o65mk 0.777778 \n", + "e647cm8 0.555556 \n", + "e58n526 0.000000 \n", + "e69r2kg 0.777778 \n", "\n", - " prop-nonzero[outdegree over C->c mid-thread responses] \\\n", - "e5hm9mp 0.800000 \n", - "e5ytz1d 0.666667 \n", - "e6ls80j 0.666667 \n", - "e5mhgl5 0.857143 \n", - "e6w6fah 0.000000 \n", - "... ... \n", - "e65ca8k 0.500000 \n", - "e6cdkpy 0.555556 \n", - "e5wc4tj 1.000000 \n", - "e6ua0sb 1.000000 \n", - "e5ua84v 1.000000 \n", + " mean[indegree over c->c responses] \\\n", + "e6p7yrp 0.9 \n", + "e5ywqyk 0.9 \n", + "e5qv9rj 0.9 \n", + "e6jhojf 0.9 \n", + "e6989ii 0.9 \n", + "e69lgse 0.9 \n", + "e5kwkg2 0.9 \n", + "e6mehe7 0.9 \n", + "e6m0hsd 0.9 \n", + "e64r385 0.9 \n", + "e5surbt 0.9 \n", + "e58gxii 0.9 \n", + "e64vc8y 0.9 \n", + "e57504g 0.9 \n", + "e5borjq 0.9 \n", + "e64n9zv 0.9 \n", + "e582ud3 0.9 \n", + "e64i9cf 0.9 \n", + "e6q9204 0.9 \n", + "e5modd7 0.9 \n", + "e5xhbyd 0.9 \n", + "e5oaf7h 0.9 \n", + "e6nir3u 0.9 \n", + "e6c3xdn 0.9 \n", + "e5d3zaa 0.9 \n", + "e5gnjv9 0.9 \n", + "e69gw2t 0.9 \n", + "e5syrih 0.9 \n", + "e5sa2yf 0.9 \n", + "e6ai7z5 0.9 \n", + "... ... \n", + "e5smhzk 0.9 \n", + "e5v91s0 0.9 \n", + "e6n6di6 0.9 \n", + "e6iqq30 0.9 \n", + "e5bfad7 0.9 \n", + "e6x5he5 0.9 \n", + "e6l9uyf 0.9 \n", + "e57hyr1 0.9 \n", + "e5b8sj7 0.9 \n", + "e6nlep7 0.9 \n", + "e6ltazd 0.9 \n", + "e57a6qq 0.9 \n", + "e5qc7eb 0.9 \n", + "e6hqt5y 0.9 \n", + "e5ua84v 0.9 \n", + "e65m7kq 0.9 \n", + "e5ggtru 0.9 \n", + "e5pmmig 0.9 \n", + "e64l6vq 0.9 \n", + "e6fjx0d 0.9 \n", + "e5h3xyy 0.9 \n", + "e589ri5 0.9 \n", + "e5beuqa 0.9 \n", + "e5lqoj1 0.9 \n", + "e5kvch1 0.9 \n", + "e6srvwm 0.9 \n", + "e5o65mk 0.9 \n", + "e647cm8 0.9 \n", + "e58n526 0.9 \n", + "e69r2kg 0.9 \n", "\n", - " prop-nonzero[indegree over C->c mid-thread responses] \\\n", - "e5hm9mp 0.666667 \n", - "e5ytz1d 0.333333 \n", - "e6ls80j 0.333333 \n", - "e5mhgl5 0.666667 \n", - "e6w6fah 0.000000 \n", - "... ... \n", - "e65ca8k 0.777778 \n", - "e6cdkpy 0.333333 \n", - "e5wc4tj 0.888889 \n", - "e6ua0sb 0.444444 \n", - "e5ua84v 0.555556 \n", + " mean[outdegree over C->C mid-thread responses] \\\n", + "e6p7yrp 1.000000 \n", + "e5ywqyk 1.000000 \n", + "e5qv9rj 0.666667 \n", + "e6jhojf 1.400000 \n", + "e6989ii 1.000000 \n", + "e69lgse 0.857143 \n", + "e5kwkg2 0.666667 \n", + "e6mehe7 0.833333 \n", + "e6m0hsd 1.333333 \n", + "e64r385 1.000000 \n", + "e5surbt 0.444444 \n", + "e58gxii 1.166667 \n", + "e64vc8y 0.333333 \n", + "e57504g 1.000000 \n", + "e5borjq 0.875000 \n", + "e64n9zv 1.333333 \n", + "e582ud3 0.333333 \n", + "e64i9cf 0.666667 \n", + "e6q9204 1.200000 \n", + "e5modd7 0.888889 \n", + "e5xhbyd 1.500000 \n", + "e5oaf7h 1.333333 \n", + "e6nir3u 1.000000 \n", + "e6c3xdn 0.888889 \n", + "e5d3zaa 0.833333 \n", + "e5gnjv9 0.125000 \n", + "e69gw2t 1.000000 \n", + "e5syrih 1.142857 \n", + "e5sa2yf 1.000000 \n", + "e6ai7z5 1.200000 \n", + "... ... \n", + "e5smhzk 1.000000 \n", + "e5v91s0 0.444444 \n", + "e6n6di6 1.000000 \n", + "e6iqq30 0.333333 \n", + "e5bfad7 0.750000 \n", + "e6x5he5 0.800000 \n", + "e6l9uyf 0.500000 \n", + "e57hyr1 0.833333 \n", + "e5b8sj7 0.750000 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 1.000000 \n", + "e57a6qq 1.200000 \n", + "e5qc7eb 1.000000 \n", + "e6hqt5y 0.625000 \n", + "e5ua84v 1.333333 \n", + "e65m7kq 0.625000 \n", + "e5ggtru 1.000000 \n", + "e5pmmig 1.500000 \n", + "e64l6vq 0.833333 \n", + "e6fjx0d 0.666667 \n", + "e5h3xyy 0.625000 \n", + "e589ri5 0.333333 \n", + "e5beuqa 1.400000 \n", + "e5lqoj1 0.500000 \n", + "e5kvch1 0.833333 \n", + "e6srvwm 0.750000 \n", + "e5o65mk 1.000000 \n", + "e647cm8 0.555556 \n", + "e58n526 0.000000 \n", + "e69r2kg 0.875000 \n", + "\n", + " mean[outdegree over C->C responses] \\\n", + "e6p7yrp 1.333333 \n", + "e5ywqyk 1.250000 \n", + "e5qv9rj 0.900000 \n", + "e6jhojf 1.600000 \n", + "e6989ii 1.000000 \n", + "e69lgse 1.142857 \n", + "e5kwkg2 0.900000 \n", + "e6mehe7 1.333333 \n", + "e6m0hsd 1.333333 \n", + "e64r385 1.125000 \n", + "e5surbt 0.900000 \n", + "e58gxii 1.333333 \n", + "e64vc8y 0.900000 \n", + "e57504g 1.125000 \n", + "e5borjq 1.125000 \n", + "e64n9zv 1.333333 \n", + "e582ud3 0.900000 \n", + "e64i9cf 1.166667 \n", + "e6q9204 1.166667 \n", + "e5modd7 0.900000 \n", + "e5xhbyd 1.500000 \n", + "e5oaf7h 1.333333 \n", + "e6nir3u 1.000000 \n", + "e6c3xdn 0.900000 \n", + "e5d3zaa 1.000000 \n", + "e5gnjv9 1.000000 \n", + "e69gw2t 1.400000 \n", + "e5syrih 1.285714 \n", + "e5sa2yf 1.000000 \n", + "e6ai7z5 1.600000 \n", + "... ... \n", + "e5smhzk 1.333333 \n", + "e5v91s0 0.900000 \n", + "e6n6di6 1.000000 \n", + "e6iqq30 1.000000 \n", + "e5bfad7 1.125000 \n", + "e6x5he5 1.600000 \n", + "e6l9uyf 1.000000 \n", + "e57hyr1 1.285714 \n", + "e5b8sj7 1.125000 \n", + "e6nlep7 0.900000 \n", + "e6ltazd 1.000000 \n", + "e57a6qq 1.200000 \n", + "e5qc7eb 1.166667 \n", + "e6hqt5y 1.000000 \n", + "e5ua84v 1.285714 \n", + "e65m7kq 1.000000 \n", + "e5ggtru 1.000000 \n", + "e5pmmig 1.400000 \n", + "e64l6vq 1.166667 \n", + "e6fjx0d 1.000000 \n", + "e5h3xyy 1.000000 \n", + "e589ri5 0.900000 \n", + "e5beuqa 1.500000 \n", + "e5lqoj1 1.142857 \n", + "e5kvch1 1.142857 \n", + "e6srvwm 1.000000 \n", + "e5o65mk 1.000000 \n", + "e647cm8 1.000000 \n", + "e58n526 0.900000 \n", + "e69r2kg 1.125000 \n", + "\n", + " mean[outdegree over C->c mid-thread responses] \\\n", + "e6p7yrp 1.000000 \n", + "e5ywqyk 2.000000 \n", + "e5qv9rj 0.666667 \n", + "e6jhojf 1.600000 \n", + "e6989ii 3.500000 \n", + "e69lgse 0.857143 \n", + "e5kwkg2 0.666667 \n", + "e6mehe7 1.000000 \n", + "e6m0hsd 2.666667 \n", + "e64r385 1.000000 \n", + "e5surbt 0.444444 \n", + "e58gxii 1.166667 \n", + "e64vc8y 0.333333 \n", + "e57504g 1.000000 \n", + "e5borjq 0.875000 \n", + "e64n9zv 2.666667 \n", + "e582ud3 0.333333 \n", + "e64i9cf 0.833333 \n", + "e6q9204 1.600000 \n", + "e5modd7 0.888889 \n", + "e5xhbyd 2.000000 \n", + "e5oaf7h 2.666667 \n", + "e6nir3u 3.500000 \n", + "e6c3xdn 0.888889 \n", + "e5d3zaa 1.166667 \n", + "e5gnjv9 0.125000 \n", + "e69gw2t 1.400000 \n", + "e5syrih 1.142857 \n", + "e5sa2yf 4.000000 \n", + "e6ai7z5 1.200000 \n", + "... ... \n", + "e5smhzk 2.333333 \n", + "e5v91s0 0.444444 \n", + "e6n6di6 1.000000 \n", + "e6iqq30 0.333333 \n", + "e5bfad7 0.750000 \n", + "e6x5he5 0.800000 \n", + "e6l9uyf 0.500000 \n", + "e57hyr1 0.833333 \n", + "e5b8sj7 0.750000 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 1.600000 \n", + "e57a6qq 1.600000 \n", + "e5qc7eb 1.166667 \n", + "e6hqt5y 0.625000 \n", + "e5ua84v 1.333333 \n", + "e65m7kq 0.625000 \n", + "e5ggtru 1.000000 \n", + "e5pmmig 2.000000 \n", + "e64l6vq 1.000000 \n", + "e6fjx0d 2.333333 \n", + "e5h3xyy 0.625000 \n", + "e589ri5 0.333333 \n", + "e5beuqa 1.400000 \n", + "e5lqoj1 0.666667 \n", + "e5kvch1 1.000000 \n", + "e6srvwm 0.750000 \n", + "e5o65mk 3.500000 \n", + "e647cm8 0.555556 \n", + "e58n526 0.000000 \n", + "e69r2kg 0.875000 \n", + "\n", + " mean[outdegree over C->c responses] \\\n", + "e6p7yrp 1.500000 \n", + "e5ywqyk 2.250000 \n", + "e5qv9rj 0.900000 \n", + "e6jhojf 1.800000 \n", + "e6989ii 4.000000 \n", + "e69lgse 1.285714 \n", + "e5kwkg2 0.900000 \n", + "e6mehe7 1.500000 \n", + "e6m0hsd 3.000000 \n", + "e64r385 1.125000 \n", + "e5surbt 0.900000 \n", + "e58gxii 1.500000 \n", + "e64vc8y 0.900000 \n", + "e57504g 1.125000 \n", + "e5borjq 1.125000 \n", + "e64n9zv 3.000000 \n", + "e582ud3 0.900000 \n", + "e64i9cf 1.500000 \n", + "e6q9204 1.500000 \n", + "e5modd7 0.900000 \n", + "e5xhbyd 2.250000 \n", + "e5oaf7h 3.000000 \n", + "e6nir3u 4.000000 \n", + "e6c3xdn 0.900000 \n", + "e5d3zaa 1.285714 \n", + "e5gnjv9 1.000000 \n", + "e69gw2t 1.800000 \n", + "e5syrih 1.285714 \n", + "e5sa2yf 4.500000 \n", + "e6ai7z5 1.800000 \n", + "... ... \n", + "e5smhzk 3.000000 \n", + "e5v91s0 0.900000 \n", + "e6n6di6 1.000000 \n", + "e6iqq30 1.000000 \n", + "e5bfad7 1.125000 \n", + "e6x5he5 1.600000 \n", + "e6l9uyf 1.000000 \n", + "e57hyr1 1.285714 \n", + "e5b8sj7 1.125000 \n", + "e6nlep7 0.900000 \n", + "e6ltazd 1.500000 \n", + "e57a6qq 1.800000 \n", + "e5qc7eb 1.500000 \n", + "e6hqt5y 1.000000 \n", + "e5ua84v 1.285714 \n", + "e65m7kq 1.000000 \n", + "e5ggtru 1.000000 \n", + "e5pmmig 1.800000 \n", + "e64l6vq 1.500000 \n", + "e6fjx0d 2.250000 \n", + "e5h3xyy 1.000000 \n", + "e589ri5 0.900000 \n", + "e5beuqa 1.500000 \n", + "e5lqoj1 1.285714 \n", + "e5kvch1 1.285714 \n", + "e6srvwm 1.000000 \n", + "e5o65mk 4.000000 \n", + "e647cm8 1.000000 \n", + "e58n526 0.900000 \n", + "e69r2kg 1.125000 \n", + "\n", + " norm.2nd-largest[indegree over C->C mid-thread responses] \\\n", + "e6p7yrp 0.166667 \n", + "e5ywqyk 0.250000 \n", + "e5qv9rj 0.166667 \n", + "e6jhojf 0.142857 \n", + "e6989ii 0.500000 \n", + "e69lgse 0.166667 \n", + "e5kwkg2 0.166667 \n", + "e6mehe7 0.200000 \n", + "e6m0hsd 0.250000 \n", + "e64r385 0.285714 \n", + "e5surbt 0.250000 \n", + "e58gxii 0.285714 \n", + "e64vc8y 0.333333 \n", + "e57504g 0.285714 \n", + "e5borjq 0.285714 \n", + "e64n9zv 0.250000 \n", + "e582ud3 0.333333 \n", + "e64i9cf 0.250000 \n", + "e6q9204 0.333333 \n", + "e5modd7 0.250000 \n", + "e5xhbyd 0.333333 \n", + "e5oaf7h 0.250000 \n", + "e6nir3u 0.500000 \n", + "e6c3xdn 0.125000 \n", + "e5d3zaa 0.400000 \n", + "e5gnjv9 0.000000 \n", + "e69gw2t 0.400000 \n", + "e5syrih 0.250000 \n", + "e5sa2yf 0.500000 \n", + "e6ai7z5 0.166667 \n", + "... ... \n", + "e5smhzk 0.333333 \n", + "e5v91s0 0.250000 \n", + "e6n6di6 0.250000 \n", + "e6iqq30 0.333333 \n", + "e5bfad7 0.333333 \n", + "e6x5he5 0.250000 \n", + "e6l9uyf 0.250000 \n", + "e57hyr1 0.200000 \n", + "e5b8sj7 0.333333 \n", + "e6nlep7 NaN \n", + "e6ltazd 0.200000 \n", + "e57a6qq 0.333333 \n", + "e5qc7eb 0.333333 \n", + "e6hqt5y 0.200000 \n", + "e5ua84v 0.250000 \n", + "e65m7kq 0.200000 \n", + "e5ggtru 0.250000 \n", + "e5pmmig 0.333333 \n", + "e64l6vq 0.200000 \n", + "e6fjx0d 0.500000 \n", + "e5h3xyy 0.200000 \n", + "e589ri5 0.333333 \n", + "e5beuqa 0.142857 \n", + "e5lqoj1 0.333333 \n", + "e5kvch1 0.200000 \n", + "e6srvwm 0.333333 \n", + "e5o65mk 0.500000 \n", + "e647cm8 0.200000 \n", + "e58n526 NaN \n", + "e69r2kg 0.285714 \n", "\n", - " prop-multiple[outdegree over C->c mid-thread responses] \\\n", - "e5hm9mp 1.000000 \n", - "e5ytz1d 0.000000 \n", - "e6ls80j 0.250000 \n", - "e5mhgl5 0.333333 \n", - "e6w6fah 0.000000 \n", - "... ... \n", - "e65ca8k 1.000000 \n", - "e6cdkpy 0.000000 \n", - "e5wc4tj 1.000000 \n", - "e6ua0sb 0.400000 \n", - "e5ua84v 0.333333 \n", + " norm.2nd-largest[indegree over C->C responses] \\\n", + "e6p7yrp 0.125000 \n", + "e5ywqyk 0.400000 \n", + "e5qv9rj 0.333333 \n", + "e6jhojf 0.125000 \n", + "e6989ii 0.500000 \n", + "e69lgse 0.375000 \n", + "e5kwkg2 0.222222 \n", + "e6mehe7 0.250000 \n", + "e6m0hsd 0.250000 \n", + "e64r385 0.222222 \n", + "e5surbt 0.111111 \n", + "e58gxii 0.250000 \n", + "e64vc8y 0.111111 \n", + "e57504g 0.222222 \n", + "e5borjq 0.222222 \n", + "e64n9zv 0.250000 \n", + "e582ud3 0.222222 \n", + "e64i9cf 0.285714 \n", + "e6q9204 0.285714 \n", + "e5modd7 0.222222 \n", + "e5xhbyd 0.333333 \n", + "e5oaf7h 0.250000 \n", + "e6nir3u 0.500000 \n", + "e6c3xdn 0.111111 \n", + "e5d3zaa 0.285714 \n", + "e5gnjv9 0.111111 \n", + "e69gw2t 0.285714 \n", + "e5syrih 0.222222 \n", + "e5sa2yf 0.500000 \n", + "e6ai7z5 0.250000 \n", + "... ... \n", + "e5smhzk 0.250000 \n", + "e5v91s0 0.222222 \n", + "e6n6di6 0.222222 \n", + "e6iqq30 0.111111 \n", + "e5bfad7 0.222222 \n", + "e6x5he5 0.125000 \n", + "e6l9uyf 0.222222 \n", + "e57hyr1 0.222222 \n", + "e5b8sj7 0.333333 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 0.166667 \n", + "e57a6qq 0.333333 \n", + "e5qc7eb 0.428571 \n", + "e6hqt5y 0.444444 \n", + "e5ua84v 0.222222 \n", + "e65m7kq 0.333333 \n", + "e5ggtru 0.222222 \n", + "e5pmmig 0.285714 \n", + "e64l6vq 0.285714 \n", + "e6fjx0d 0.250000 \n", + "e5h3xyy 0.222222 \n", + "e589ri5 0.111111 \n", + "e5beuqa 0.222222 \n", + "e5lqoj1 0.125000 \n", + "e5kvch1 0.250000 \n", + "e6srvwm 0.222222 \n", + "e5o65mk 0.500000 \n", + "e647cm8 0.333333 \n", + "e58n526 0.000000 \n", + "e69r2kg 0.222222 \n", "\n", - " prop-multiple[indegree over C->c mid-thread responses] \\\n", - "e5hm9mp 0.166667 \n", - "e5ytz1d 0.666667 \n", - "e6ls80j 0.333333 \n", - "e5mhgl5 0.333333 \n", - "e6w6fah 0.000000 \n", - "... ... \n", - "e65ca8k 0.000000 \n", - "e6cdkpy 0.666667 \n", - "e5wc4tj 0.000000 \n", - "e6ua0sb 0.250000 \n", - "e5ua84v 0.400000 \n", + " norm.2nd-largest[indegree over C->c mid-thread responses] \\\n", + "e6p7yrp 0.166667 \n", + "e5ywqyk 0.125000 \n", + "e5qv9rj 0.166667 \n", + "e6jhojf 0.125000 \n", + "e6989ii 0.142857 \n", + "e69lgse 0.166667 \n", + "e5kwkg2 0.166667 \n", + "e6mehe7 0.166667 \n", + "e6m0hsd 0.125000 \n", + "e64r385 0.285714 \n", + "e5surbt 0.250000 \n", + "e58gxii 0.285714 \n", + "e64vc8y 0.333333 \n", + "e57504g 0.285714 \n", + "e5borjq 0.285714 \n", + "e64n9zv 0.125000 \n", + "e582ud3 0.333333 \n", + "e64i9cf 0.200000 \n", + "e6q9204 0.250000 \n", + "e5modd7 0.250000 \n", + "e5xhbyd 0.250000 \n", + "e5oaf7h 0.250000 \n", + "e6nir3u 0.142857 \n", + "e6c3xdn 0.125000 \n", + "e5d3zaa 0.285714 \n", + "e5gnjv9 0.000000 \n", + "e69gw2t 0.285714 \n", + "e5syrih 0.250000 \n", + "e5sa2yf 0.125000 \n", + "e6ai7z5 0.166667 \n", + "... ... \n", + "e5smhzk 0.142857 \n", + "e5v91s0 0.250000 \n", + "e6n6di6 0.250000 \n", + "e6iqq30 0.333333 \n", + "e5bfad7 0.333333 \n", + "e6x5he5 0.250000 \n", + "e6l9uyf 0.250000 \n", + "e57hyr1 0.200000 \n", + "e5b8sj7 0.333333 \n", + "e6nlep7 NaN \n", + "e6ltazd 0.125000 \n", + "e57a6qq 0.250000 \n", + "e5qc7eb 0.285714 \n", + "e6hqt5y 0.200000 \n", + "e5ua84v 0.250000 \n", + "e65m7kq 0.200000 \n", + "e5ggtru 0.250000 \n", + "e5pmmig 0.125000 \n", + "e64l6vq 0.166667 \n", + "e6fjx0d 0.142857 \n", + "e5h3xyy 0.200000 \n", + "e589ri5 0.333333 \n", + "e5beuqa 0.142857 \n", + "e5lqoj1 0.250000 \n", + "e5kvch1 0.166667 \n", + "e6srvwm 0.333333 \n", + "e5o65mk 0.142857 \n", + "e647cm8 0.200000 \n", + "e58n526 NaN \n", + "e69r2kg 0.285714 \n", "\n", - " entropy[outdegree over C->c mid-thread responses] \\\n", - "e5hm9mp 1.386294 \n", - "e5ytz1d 1.791759 \n", - "e6ls80j 1.332179 \n", - "e5mhgl5 1.732868 \n", - "e6w6fah NaN \n", - "... ... \n", - "e65ca8k 0.000000 \n", - "e6cdkpy 1.609438 \n", - "e5wc4tj 0.693147 \n", - "e6ua0sb 1.549826 \n", - "e5ua84v 1.732868 \n", + " norm.2nd-largest[indegree over C->c responses] \\\n", + "e6p7yrp 0.111111 \n", + "e5ywqyk 0.111111 \n", + "e5qv9rj 0.333333 \n", + "e6jhojf 0.111111 \n", + "e6989ii 0.125000 \n", + "e69lgse 0.333333 \n", + "e5kwkg2 0.222222 \n", + "e6mehe7 0.222222 \n", + "e6m0hsd 0.111111 \n", + "e64r385 0.222222 \n", + "e5surbt 0.111111 \n", + "e58gxii 0.222222 \n", + "e64vc8y 0.111111 \n", + "e57504g 0.222222 \n", + "e5borjq 0.222222 \n", + "e64n9zv 0.111111 \n", + "e582ud3 0.222222 \n", + "e64i9cf 0.222222 \n", + "e6q9204 0.222222 \n", + "e5modd7 0.222222 \n", + "e5xhbyd 0.222222 \n", + "e5oaf7h 0.222222 \n", + "e6nir3u 0.125000 \n", + "e6c3xdn 0.111111 \n", + "e5d3zaa 0.222222 \n", + "e5gnjv9 0.111111 \n", + "e69gw2t 0.222222 \n", + "e5syrih 0.222222 \n", + "e5sa2yf 0.111111 \n", + "e6ai7z5 0.111111 \n", + "... ... \n", + "e5smhzk 0.111111 \n", + "e5v91s0 0.222222 \n", + "e6n6di6 0.222222 \n", + "e6iqq30 0.111111 \n", + "e5bfad7 0.222222 \n", + "e6x5he5 0.125000 \n", + "e6l9uyf 0.222222 \n", + "e57hyr1 0.222222 \n", + "e5b8sj7 0.333333 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 0.111111 \n", + "e57a6qq 0.222222 \n", + "e5qc7eb 0.222222 \n", + "e6hqt5y 0.444444 \n", + "e5ua84v 0.222222 \n", + "e65m7kq 0.222222 \n", + "e5ggtru 0.222222 \n", + "e5pmmig 0.111111 \n", + "e64l6vq 0.222222 \n", + "e6fjx0d 0.111111 \n", + "e5h3xyy 0.222222 \n", + "e589ri5 0.111111 \n", + "e5beuqa 0.222222 \n", + "e5lqoj1 0.111111 \n", + "e5kvch1 0.111111 \n", + "e6srvwm 0.222222 \n", + "e5o65mk 0.125000 \n", + "e647cm8 0.333333 \n", + "e58n526 0.000000 \n", + "e69r2kg 0.222222 \n", "\n", - " entropy[indegree over C->c mid-thread responses] \\\n", - "e5hm9mp 1.667462 \n", - "e5ytz1d 1.011404 \n", - "e6ls80j 0.950271 \n", - "e5mhgl5 1.732868 \n", - "e6w6fah NaN \n", - "... ... \n", - "e65ca8k 1.945910 \n", - "e6cdkpy 1.054920 \n", - "e5wc4tj 2.079442 \n", - "e6ua0sb 1.153742 \n", - "e5ua84v 1.494175 \n", + " norm.2nd-largest[indegree over c->c mid-thread responses] \\\n", + "e6p7yrp 0.166667 \n", + "e5ywqyk 0.125000 \n", + "e5qv9rj 0.166667 \n", + "e6jhojf 0.125000 \n", + "e6989ii 0.125000 \n", + "e69lgse 0.166667 \n", + "e5kwkg2 0.166667 \n", + "e6mehe7 0.166667 \n", + "e6m0hsd 0.125000 \n", + "e64r385 0.285714 \n", + "e5surbt 0.250000 \n", + "e58gxii 0.285714 \n", + "e64vc8y 0.333333 \n", + "e57504g 0.285714 \n", + "e5borjq 0.285714 \n", + "e64n9zv 0.125000 \n", + "e582ud3 0.333333 \n", + "e64i9cf 0.200000 \n", + "e6q9204 0.250000 \n", + "e5modd7 0.250000 \n", + "e5xhbyd 0.250000 \n", + "e5oaf7h 0.250000 \n", + "e6nir3u 0.125000 \n", + "e6c3xdn 0.125000 \n", + "e5d3zaa 0.285714 \n", + "e5gnjv9 0.000000 \n", + "e69gw2t 0.285714 \n", + "e5syrih 0.250000 \n", + "e5sa2yf 0.125000 \n", + "e6ai7z5 0.166667 \n", + "... ... \n", + "e5smhzk 0.142857 \n", + "e5v91s0 0.250000 \n", + "e6n6di6 0.250000 \n", + "e6iqq30 0.333333 \n", + "e5bfad7 0.333333 \n", + "e6x5he5 0.200000 \n", + "e6l9uyf 0.250000 \n", + "e57hyr1 0.200000 \n", + "e5b8sj7 0.333333 \n", + "e6nlep7 NaN \n", + "e6ltazd 0.125000 \n", + "e57a6qq 0.250000 \n", + "e5qc7eb 0.285714 \n", + "e6hqt5y 0.200000 \n", + "e5ua84v 0.250000 \n", + "e65m7kq 0.200000 \n", + "e5ggtru 0.250000 \n", + "e5pmmig 0.125000 \n", + "e64l6vq 0.166667 \n", + "e6fjx0d 0.142857 \n", + "e5h3xyy 0.200000 \n", + "e589ri5 0.333333 \n", + "e5beuqa 0.142857 \n", + "e5lqoj1 0.250000 \n", + "e5kvch1 0.166667 \n", + "e6srvwm 0.333333 \n", + "e5o65mk 0.142857 \n", + "e647cm8 0.200000 \n", + "e58n526 NaN \n", + "e69r2kg 0.285714 \n", "\n", - " 2nd-largest / max[outdegree over C->c mid-thread responses] \\\n", - "e5hm9mp 1.0 \n", - "e5ytz1d 1.0 \n", - "e6ls80j 0.5 \n", - "e5mhgl5 1.0 \n", - "e6w6fah NaN \n", - "... ... \n", - "e65ca8k 0.0 \n", - "e6cdkpy 1.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 1.0 \n", - "e5ua84v 1.0 \n", + " norm.2nd-largest[indegree over c->c responses] \\\n", + "e6p7yrp 0.111111 \n", + "e5ywqyk 0.111111 \n", + "e5qv9rj 0.333333 \n", + "e6jhojf 0.111111 \n", + "e6989ii 0.111111 \n", + "e69lgse 0.333333 \n", + "e5kwkg2 0.222222 \n", + "e6mehe7 0.222222 \n", + "e6m0hsd 0.111111 \n", + "e64r385 0.222222 \n", + "e5surbt 0.111111 \n", + "e58gxii 0.222222 \n", + "e64vc8y 0.111111 \n", + "e57504g 0.222222 \n", + "e5borjq 0.222222 \n", + "e64n9zv 0.111111 \n", + "e582ud3 0.222222 \n", + "e64i9cf 0.222222 \n", + "e6q9204 0.222222 \n", + "e5modd7 0.222222 \n", + "e5xhbyd 0.222222 \n", + "e5oaf7h 0.222222 \n", + "e6nir3u 0.111111 \n", + "e6c3xdn 0.111111 \n", + "e5d3zaa 0.222222 \n", + "e5gnjv9 0.111111 \n", + "e69gw2t 0.222222 \n", + "e5syrih 0.222222 \n", + "e5sa2yf 0.111111 \n", + "e6ai7z5 0.111111 \n", + "... ... \n", + "e5smhzk 0.111111 \n", + "e5v91s0 0.222222 \n", + "e6n6di6 0.222222 \n", + "e6iqq30 0.111111 \n", + "e5bfad7 0.222222 \n", + "e6x5he5 0.222222 \n", + "e6l9uyf 0.222222 \n", + "e57hyr1 0.222222 \n", + "e5b8sj7 0.333333 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 0.111111 \n", + "e57a6qq 0.222222 \n", + "e5qc7eb 0.222222 \n", + "e6hqt5y 0.444444 \n", + "e5ua84v 0.222222 \n", + "e65m7kq 0.222222 \n", + "e5ggtru 0.222222 \n", + "e5pmmig 0.111111 \n", + "e64l6vq 0.222222 \n", + "e6fjx0d 0.111111 \n", + "e5h3xyy 0.222222 \n", + "e589ri5 0.111111 \n", + "e5beuqa 0.222222 \n", + "e5lqoj1 0.111111 \n", + "e5kvch1 0.111111 \n", + "e6srvwm 0.222222 \n", + "e5o65mk 0.111111 \n", + "e647cm8 0.333333 \n", + "e58n526 0.000000 \n", + "e69r2kg 0.222222 \n", "\n", - " 2nd-largest / max[indegree over C->c mid-thread responses] \\\n", - "e5hm9mp 0.333333 \n", - "e5ytz1d 0.666667 \n", - "e6ls80j 0.333333 \n", - "e5mhgl5 1.000000 \n", - "e6w6fah NaN \n", + " norm.2nd-largest[outdegree over C->C mid-thread responses] \\\n", + "e6p7yrp 0.166667 \n", + "e5ywqyk 0.250000 \n", + "e5qv9rj 0.166667 \n", + "e6jhojf 0.142857 \n", + "e6989ii 0.500000 \n", + "e69lgse 0.166667 \n", + "e5kwkg2 0.166667 \n", + "e6mehe7 0.200000 \n", + "e6m0hsd 0.250000 \n", + "e64r385 0.142857 \n", + "e5surbt 0.250000 \n", + "e58gxii 0.142857 \n", + "e64vc8y 0.333333 \n", + "e57504g 0.142857 \n", + "e5borjq 0.142857 \n", + "e64n9zv 0.250000 \n", + "e582ud3 0.333333 \n", + "e64i9cf 0.250000 \n", + "e6q9204 0.166667 \n", + "e5modd7 0.125000 \n", + "e5xhbyd 0.333333 \n", + "e5oaf7h 0.250000 \n", + "e6nir3u 0.500000 \n", + "e6c3xdn 0.125000 \n", + "e5d3zaa 0.200000 \n", + "e5gnjv9 0.000000 \n", + "e69gw2t 0.200000 \n", + "e5syrih 0.125000 \n", + "e5sa2yf 0.500000 \n", + "e6ai7z5 0.166667 \n", "... ... \n", - "e65ca8k 1.000000 \n", - "e6cdkpy 1.000000 \n", - "e5wc4tj 1.000000 \n", - "e6ua0sb 0.250000 \n", - "e5ua84v 0.666667 \n", - "\n", - " max[outdegree over C->C mid-thread responses] \\\n", - "e5hm9mp 2.0 \n", - "e5ytz1d 1.0 \n", - "e6ls80j 2.0 \n", - "e5mhgl5 2.0 \n", - "e6w6fah 0.0 \n", - "... ... \n", - "e65ca8k 1.0 \n", - "e6cdkpy 1.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 2.0 \n", - "e5ua84v 2.0 \n", + "e5smhzk 0.333333 \n", + "e5v91s0 0.250000 \n", + "e6n6di6 0.125000 \n", + "e6iqq30 0.333333 \n", + "e5bfad7 0.166667 \n", + "e6x5he5 0.000000 \n", + "e6l9uyf 0.250000 \n", + "e57hyr1 0.200000 \n", + "e5b8sj7 0.166667 \n", + "e6nlep7 NaN \n", + "e6ltazd 0.200000 \n", + "e57a6qq 0.166667 \n", + "e5qc7eb 0.166667 \n", + "e6hqt5y 0.200000 \n", + "e5ua84v 0.250000 \n", + "e65m7kq 0.200000 \n", + "e5ggtru 0.125000 \n", + "e5pmmig 0.333333 \n", + "e64l6vq 0.200000 \n", + "e6fjx0d 0.500000 \n", + "e5h3xyy 0.200000 \n", + "e589ri5 0.333333 \n", + "e5beuqa 0.142857 \n", + "e5lqoj1 0.333333 \n", + "e5kvch1 0.200000 \n", + "e6srvwm 0.166667 \n", + "e5o65mk 0.500000 \n", + "e647cm8 0.200000 \n", + "e58n526 NaN \n", + "e69r2kg 0.142857 \n", "\n", - " max[indegree over C->C mid-thread responses] \\\n", - "e5hm9mp 3.0 \n", - "e5ytz1d 3.0 \n", - "e6ls80j 3.0 \n", - "e5mhgl5 2.0 \n", - "e6w6fah 0.0 \n", - "... ... \n", - "e65ca8k 1.0 \n", - "e6cdkpy 2.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 4.0 \n", - "e5ua84v 4.0 \n", + " norm.2nd-largest[outdegree over C->C responses] \\\n", + "e6p7yrp 0.125000 \n", + "e5ywqyk 0.200000 \n", + "e5qv9rj 0.111111 \n", + "e6jhojf 0.125000 \n", + "e6989ii 0.500000 \n", + "e69lgse 0.125000 \n", + "e5kwkg2 0.111111 \n", + "e6mehe7 0.125000 \n", + "e6m0hsd 0.250000 \n", + "e64r385 0.222222 \n", + "e5surbt 0.111111 \n", + "e58gxii 0.125000 \n", + "e64vc8y 0.111111 \n", + "e57504g 0.222222 \n", + "e5borjq 0.111111 \n", + "e64n9zv 0.250000 \n", + "e582ud3 0.111111 \n", + "e64i9cf 0.142857 \n", + "e6q9204 0.142857 \n", + "e5modd7 0.111111 \n", + "e5xhbyd 0.333333 \n", + "e5oaf7h 0.250000 \n", + "e6nir3u 0.500000 \n", + "e6c3xdn 0.111111 \n", + "e5d3zaa 0.142857 \n", + "e5gnjv9 0.111111 \n", + "e69gw2t 0.285714 \n", + "e5syrih 0.222222 \n", + "e5sa2yf 0.500000 \n", + "e6ai7z5 0.125000 \n", + "... ... \n", + "e5smhzk 0.250000 \n", + "e5v91s0 0.111111 \n", + "e6n6di6 0.111111 \n", + "e6iqq30 0.111111 \n", + "e5bfad7 0.111111 \n", + "e6x5he5 0.125000 \n", + "e6l9uyf 0.111111 \n", + "e57hyr1 0.222222 \n", + "e5b8sj7 0.111111 \n", + "e6nlep7 0.111111 \n", + "e6ltazd 0.166667 \n", + "e57a6qq 0.166667 \n", + "e5qc7eb 0.142857 \n", + "e6hqt5y 0.111111 \n", + "e5ua84v 0.222222 \n", + "e65m7kq 0.111111 \n", + "e5ggtru 0.111111 \n", + "e5pmmig 0.285714 \n", + "e64l6vq 0.142857 \n", + "e6fjx0d 0.250000 \n", + "e5h3xyy 0.111111 \n", + "e589ri5 0.111111 \n", + "e5beuqa 0.222222 \n", + "e5lqoj1 0.125000 \n", + "e5kvch1 0.250000 \n", + "e6srvwm 0.111111 \n", + "e5o65mk 0.500000 \n", + "e647cm8 0.111111 \n", + "e58n526 0.111111 \n", + "e69r2kg 0.111111 \n", "\n", - " argmax[outdegree over C->C mid-thread responses] \\\n", - "e5hm9mp 1.0 \n", - "e5ytz1d 3.0 \n", - "e6ls80j 2.0 \n", - "e5mhgl5 3.0 \n", - "e6w6fah 0.0 \n", - "... ... \n", - "e65ca8k 1.0 \n", - "e6cdkpy 2.0 \n", - "e5wc4tj 0.0 \n", - "e6ua0sb 2.0 \n", - "e5ua84v 0.0 \n", + " norm.2nd-largest[outdegree over C->c mid-thread responses] \\\n", + "e6p7yrp 0.166667 \n", + "e5ywqyk 0.375000 \n", + "e5qv9rj 0.166667 \n", + "e6jhojf 0.250000 \n", + "e6989ii 0.428571 \n", + "e69lgse 0.166667 \n", + "e5kwkg2 0.166667 \n", + "e6mehe7 0.333333 \n", + "e6m0hsd 0.375000 \n", + "e64r385 0.142857 \n", + "e5surbt 0.250000 \n", + "e58gxii 0.142857 \n", + "e64vc8y 0.333333 \n", + "e57504g 0.142857 \n", + "e5borjq 0.142857 \n", + "e64n9zv 0.375000 \n", + "e582ud3 0.333333 \n", + "e64i9cf 0.200000 \n", + "e6q9204 0.250000 \n", + "e5modd7 0.125000 \n", + "e5xhbyd 0.250000 \n", + "e5oaf7h 0.375000 \n", + "e6nir3u 0.428571 \n", + "e6c3xdn 0.125000 \n", + "e5d3zaa 0.285714 \n", + "e5gnjv9 0.000000 \n", + "e69gw2t 0.285714 \n", + "e5syrih 0.125000 \n", + "e5sa2yf 0.500000 \n", + "e6ai7z5 0.166667 \n", + "... ... \n", + "e5smhzk 0.428571 \n", + "e5v91s0 0.250000 \n", + "e6n6di6 0.125000 \n", + "e6iqq30 0.333333 \n", + "e5bfad7 0.166667 \n", + "e6x5he5 0.000000 \n", + "e6l9uyf 0.250000 \n", + "e57hyr1 0.200000 \n", + "e5b8sj7 0.166667 \n", + "e6nlep7 NaN \n", + "e6ltazd 0.250000 \n", + "e57a6qq 0.250000 \n", + "e5qc7eb 0.142857 \n", + "e6hqt5y 0.200000 \n", + "e5ua84v 0.250000 \n", + "e65m7kq 0.200000 \n", + "e5ggtru 0.125000 \n", + "e5pmmig 0.250000 \n", + "e64l6vq 0.166667 \n", + "e6fjx0d 0.428571 \n", + "e5h3xyy 0.200000 \n", + "e589ri5 0.333333 \n", + "e5beuqa 0.142857 \n", + "e5lqoj1 0.500000 \n", + "e5kvch1 0.166667 \n", + "e6srvwm 0.166667 \n", + "e5o65mk 0.428571 \n", + "e647cm8 0.200000 \n", + "e58n526 NaN \n", + "e69r2kg 0.142857 \n", "\n", - " argmax[indegree over C->C mid-thread responses] \\\n", - "e5hm9mp 0.0 \n", - "e5ytz1d 1.0 \n", - "e6ls80j 1.0 \n", - "e5mhgl5 0.0 \n", - "e6w6fah 0.0 \n", + " norm.2nd-largest[outdegree over C->c responses] \\\n", + "e6p7yrp 0.222222 \n", + "e5ywqyk 0.333333 \n", + "e5qv9rj 0.111111 \n", + "e6jhojf 0.222222 \n", + "e6989ii 0.500000 \n", + "e69lgse 0.222222 \n", + "e5kwkg2 0.111111 \n", + "e6mehe7 0.222222 \n", + "e6m0hsd 0.333333 \n", + "e64r385 0.222222 \n", + "e5surbt 0.111111 \n", + "e58gxii 0.222222 \n", + "e64vc8y 0.111111 \n", + "e57504g 0.222222 \n", + "e5borjq 0.111111 \n", + "e64n9zv 0.333333 \n", + "e582ud3 0.111111 \n", + "e64i9cf 0.222222 \n", + "e6q9204 0.222222 \n", + "e5modd7 0.111111 \n", + "e5xhbyd 0.333333 \n", + "e5oaf7h 0.333333 \n", + "e6nir3u 0.500000 \n", + "e6c3xdn 0.111111 \n", + "e5d3zaa 0.222222 \n", + "e5gnjv9 0.111111 \n", + "e69gw2t 0.333333 \n", + "e5syrih 0.222222 \n", + "e5sa2yf 0.444444 \n", + "e6ai7z5 0.111111 \n", "... ... \n", - "e65ca8k 1.0 \n", - "e6cdkpy 0.0 \n", - "e5wc4tj 0.0 \n", - "e6ua0sb 1.0 \n", - "e5ua84v 0.0 \n", - "\n", - " norm.max[outdegree over C->C mid-thread responses] \\\n", - "e5hm9mp 0.285714 \n", - "e5ytz1d 0.166667 \n", - "e6ls80j 0.400000 \n", - "e5mhgl5 0.285714 \n", - "e6w6fah 0.000000 \n", - "... ... \n", - "e65ca8k 1.000000 \n", - "e6cdkpy 0.200000 \n", - "e5wc4tj 0.500000 \n", - "e6ua0sb 0.285714 \n", - "e5ua84v 0.250000 \n", + "e5smhzk 0.444444 \n", + "e5v91s0 0.111111 \n", + "e6n6di6 0.111111 \n", + "e6iqq30 0.111111 \n", + "e5bfad7 0.111111 \n", + "e6x5he5 0.125000 \n", + "e6l9uyf 0.111111 \n", + "e57hyr1 0.222222 \n", + "e5b8sj7 0.111111 \n", + "e6nlep7 0.111111 \n", + "e6ltazd 0.333333 \n", + "e57a6qq 0.333333 \n", + "e5qc7eb 0.222222 \n", + "e6hqt5y 0.111111 \n", + "e5ua84v 0.222222 \n", + "e65m7kq 0.111111 \n", + "e5ggtru 0.111111 \n", + "e5pmmig 0.333333 \n", + "e64l6vq 0.222222 \n", + "e6fjx0d 0.444444 \n", + "e5h3xyy 0.111111 \n", + "e589ri5 0.111111 \n", + "e5beuqa 0.222222 \n", + "e5lqoj1 0.222222 \n", + "e5kvch1 0.222222 \n", + "e6srvwm 0.111111 \n", + "e5o65mk 0.500000 \n", + "e647cm8 0.111111 \n", + "e58n526 0.111111 \n", + "e69r2kg 0.111111 \n", "\n", " norm.max[indegree over C->C mid-thread responses] \\\n", - "e5hm9mp 0.428571 \n", - "e5ytz1d 0.500000 \n", - "e6ls80j 0.600000 \n", - "e5mhgl5 0.285714 \n", - "e6w6fah 0.000000 \n", + "e6p7yrp 0.500000 \n", + "e5ywqyk 0.500000 \n", + "e5qv9rj 0.500000 \n", + "e6jhojf 0.428571 \n", + "e6989ii 0.500000 \n", + "e69lgse 0.500000 \n", + "e5kwkg2 0.333333 \n", + "e6mehe7 0.400000 \n", + "e6m0hsd 0.500000 \n", + "e64r385 0.285714 \n", + "e5surbt 0.250000 \n", + "e58gxii 0.428571 \n", + "e64vc8y 0.333333 \n", + "e57504g 0.285714 \n", + "e5borjq 0.428571 \n", + "e64n9zv 0.500000 \n", + "e582ud3 0.666667 \n", + "e64i9cf 0.500000 \n", + "e6q9204 0.500000 \n", + "e5modd7 0.500000 \n", + "e5xhbyd 0.333333 \n", + "e5oaf7h 0.750000 \n", + "e6nir3u 0.500000 \n", + "e6c3xdn 0.250000 \n", + "e5d3zaa 0.400000 \n", + "e5gnjv9 1.000000 \n", + "e69gw2t 0.400000 \n", + "e5syrih 0.500000 \n", + "e5sa2yf 0.500000 \n", + "e6ai7z5 0.333333 \n", "... ... \n", - "e65ca8k 1.000000 \n", - "e6cdkpy 0.400000 \n", - "e5wc4tj 0.500000 \n", - "e6ua0sb 0.571429 \n", + "e5smhzk 0.333333 \n", + "e5v91s0 0.500000 \n", + "e6n6di6 0.500000 \n", + "e6iqq30 0.333333 \n", + "e5bfad7 0.333333 \n", + "e6x5he5 0.250000 \n", + "e6l9uyf 0.500000 \n", + "e57hyr1 0.400000 \n", + "e5b8sj7 0.666667 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 0.800000 \n", + "e57a6qq 0.500000 \n", + "e5qc7eb 0.500000 \n", + "e6hqt5y 0.800000 \n", "e5ua84v 0.500000 \n", + "e65m7kq 0.600000 \n", + "e5ggtru 0.625000 \n", + "e5pmmig 0.333333 \n", + "e64l6vq 0.400000 \n", + "e6fjx0d 0.500000 \n", + "e5h3xyy 0.400000 \n", + "e589ri5 0.333333 \n", + "e5beuqa 0.571429 \n", + "e5lqoj1 0.333333 \n", + "e5kvch1 0.400000 \n", + "e6srvwm 0.333333 \n", + "e5o65mk 0.500000 \n", + "e647cm8 0.600000 \n", + "e58n526 0.000000 \n", + "e69r2kg 0.428571 \n", "\n", - " 2nd-largest[outdegree over C->C mid-thread responses] \\\n", - "e5hm9mp 2.0 \n", - "e5ytz1d 1.0 \n", - "e6ls80j 1.0 \n", - "e5mhgl5 1.0 \n", - "e6w6fah 0.0 \n", - "... ... \n", - "e65ca8k 0.0 \n", - "e6cdkpy 1.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 2.0 \n", - "e5ua84v 2.0 \n", + " norm.max[indegree over C->C responses] \\\n", + "e6p7yrp 0.625000 \n", + "e5ywqyk 0.400000 \n", + "e5qv9rj 0.333333 \n", + "e6jhojf 0.500000 \n", + "e6989ii 0.500000 \n", + "e69lgse 0.375000 \n", + "e5kwkg2 0.333333 \n", + "e6mehe7 0.500000 \n", + "e6m0hsd 0.500000 \n", + "e64r385 0.222222 \n", + "e5surbt 0.555556 \n", + "e58gxii 0.500000 \n", + "e64vc8y 0.666667 \n", + "e57504g 0.222222 \n", + "e5borjq 0.333333 \n", + "e64n9zv 0.500000 \n", + "e582ud3 0.666667 \n", + "e64i9cf 0.571429 \n", + "e6q9204 0.428571 \n", + "e5modd7 0.444444 \n", + "e5xhbyd 0.333333 \n", + "e5oaf7h 0.750000 \n", + "e6nir3u 0.500000 \n", + "e6c3xdn 0.222222 \n", + "e5d3zaa 0.285714 \n", + "e5gnjv9 0.888889 \n", + "e69gw2t 0.285714 \n", + "e5syrih 0.444444 \n", + "e5sa2yf 0.500000 \n", + "e6ai7z5 0.375000 \n", + "... ... \n", + "e5smhzk 0.500000 \n", + "e5v91s0 0.555556 \n", + "e6n6di6 0.444444 \n", + "e6iqq30 0.666667 \n", + "e5bfad7 0.444444 \n", + "e6x5he5 0.500000 \n", + "e6l9uyf 0.555556 \n", + "e57hyr1 0.444444 \n", + "e5b8sj7 0.444444 \n", + "e6nlep7 1.000000 \n", + "e6ltazd 0.666667 \n", + "e57a6qq 0.500000 \n", + "e5qc7eb 0.428571 \n", + "e6hqt5y 0.444444 \n", + "e5ua84v 0.444444 \n", + "e65m7kq 0.444444 \n", + "e5ggtru 0.555556 \n", + "e5pmmig 0.285714 \n", + "e64l6vq 0.428571 \n", + "e6fjx0d 0.500000 \n", + "e5h3xyy 0.444444 \n", + "e589ri5 0.666667 \n", + "e5beuqa 0.444444 \n", + "e5lqoj1 0.625000 \n", + "e5kvch1 0.375000 \n", + "e6srvwm 0.333333 \n", + "e5o65mk 0.500000 \n", + "e647cm8 0.444444 \n", + "e58n526 1.000000 \n", + "e69r2kg 0.333333 \n", "\n", - " 2nd-largest[indegree over C->C mid-thread responses] \\\n", - "e5hm9mp 1.0 \n", - "e5ytz1d 2.0 \n", - "e6ls80j 1.0 \n", - "e5mhgl5 2.0 \n", - "e6w6fah 0.0 \n", - "... ... \n", - "e65ca8k 0.0 \n", - "e6cdkpy 2.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 1.0 \n", - "e5ua84v 2.0 \n", + " norm.max[indegree over C->c mid-thread responses] \\\n", + "e6p7yrp 0.166667 \n", + "e5ywqyk 0.250000 \n", + "e5qv9rj 0.500000 \n", + "e6jhojf 0.250000 \n", + "e6989ii 0.142857 \n", + "e69lgse 0.500000 \n", + "e5kwkg2 0.333333 \n", + "e6mehe7 0.333333 \n", + "e6m0hsd 0.250000 \n", + "e64r385 0.285714 \n", + "e5surbt 0.250000 \n", + "e58gxii 0.285714 \n", + "e64vc8y 0.333333 \n", + "e57504g 0.285714 \n", + "e5borjq 0.428571 \n", + "e64n9zv 0.250000 \n", + "e582ud3 0.666667 \n", + "e64i9cf 0.400000 \n", + "e6q9204 0.250000 \n", + "e5modd7 0.500000 \n", + "e5xhbyd 0.250000 \n", + "e5oaf7h 0.250000 \n", + "e6nir3u 0.142857 \n", + "e6c3xdn 0.250000 \n", + "e5d3zaa 0.285714 \n", + "e5gnjv9 1.000000 \n", + "e69gw2t 0.285714 \n", + "e5syrih 0.375000 \n", + "e5sa2yf 0.125000 \n", + "e6ai7z5 0.166667 \n", + "... ... \n", + "e5smhzk 0.142857 \n", + "e5v91s0 0.500000 \n", + "e6n6di6 0.375000 \n", + "e6iqq30 0.333333 \n", + "e5bfad7 0.333333 \n", + "e6x5he5 0.250000 \n", + "e6l9uyf 0.500000 \n", + "e57hyr1 0.400000 \n", + "e5b8sj7 0.500000 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 0.500000 \n", + "e57a6qq 0.250000 \n", + "e5qc7eb 0.428571 \n", + "e6hqt5y 0.800000 \n", + "e5ua84v 0.375000 \n", + "e65m7kq 0.400000 \n", + "e5ggtru 0.500000 \n", + "e5pmmig 0.250000 \n", + "e64l6vq 0.333333 \n", + "e6fjx0d 0.142857 \n", + "e5h3xyy 0.400000 \n", + "e589ri5 0.333333 \n", + "e5beuqa 0.428571 \n", + "e5lqoj1 0.250000 \n", + "e5kvch1 0.166667 \n", + "e6srvwm 0.333333 \n", + "e5o65mk 0.142857 \n", + "e647cm8 0.600000 \n", + "e58n526 0.000000 \n", + "e69r2kg 0.285714 \n", "\n", - " 2nd-argmax[outdegree over C->C mid-thread responses] \\\n", - "e5hm9mp 2.0 \n", - "e5ytz1d 4.0 \n", - "e6ls80j 1.0 \n", - "e5mhgl5 1.0 \n", - "e6w6fah 1.0 \n", - "... ... \n", - "e65ca8k 0.0 \n", - "e6cdkpy 3.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 4.0 \n", - "e5ua84v 3.0 \n", + " norm.max[indegree over C->c responses] \\\n", + "e6p7yrp 0.333333 \n", + "e5ywqyk 0.222222 \n", + "e5qv9rj 0.333333 \n", + "e6jhojf 0.222222 \n", + "e6989ii 0.125000 \n", + "e69lgse 0.333333 \n", + "e5kwkg2 0.333333 \n", + "e6mehe7 0.333333 \n", + "e6m0hsd 0.222222 \n", + "e64r385 0.222222 \n", + "e5surbt 0.555556 \n", + "e58gxii 0.222222 \n", + "e64vc8y 0.666667 \n", + "e57504g 0.222222 \n", + "e5borjq 0.333333 \n", + "e64n9zv 0.222222 \n", + "e582ud3 0.666667 \n", + "e64i9cf 0.444444 \n", + "e6q9204 0.222222 \n", + "e5modd7 0.444444 \n", + "e5xhbyd 0.222222 \n", + "e5oaf7h 0.222222 \n", + "e6nir3u 0.125000 \n", + "e6c3xdn 0.222222 \n", + "e5d3zaa 0.222222 \n", + "e5gnjv9 0.888889 \n", + "e69gw2t 0.222222 \n", + "e5syrih 0.333333 \n", + "e5sa2yf 0.111111 \n", + "e6ai7z5 0.333333 \n", + "... ... \n", + "e5smhzk 0.222222 \n", + "e5v91s0 0.555556 \n", + "e6n6di6 0.333333 \n", + "e6iqq30 0.666667 \n", + "e5bfad7 0.333333 \n", + "e6x5he5 0.500000 \n", + "e6l9uyf 0.555556 \n", + "e57hyr1 0.444444 \n", + "e5b8sj7 0.333333 \n", + "e6nlep7 1.000000 \n", + "e6ltazd 0.444444 \n", + "e57a6qq 0.222222 \n", + "e5qc7eb 0.333333 \n", + "e6hqt5y 0.444444 \n", + "e5ua84v 0.333333 \n", + "e65m7kq 0.444444 \n", + "e5ggtru 0.444444 \n", + "e5pmmig 0.222222 \n", + "e64l6vq 0.333333 \n", + "e6fjx0d 0.222222 \n", + "e5h3xyy 0.444444 \n", + "e589ri5 0.666667 \n", + "e5beuqa 0.333333 \n", + "e5lqoj1 0.555556 \n", + "e5kvch1 0.333333 \n", + "e6srvwm 0.333333 \n", + "e5o65mk 0.125000 \n", + "e647cm8 0.444444 \n", + "e58n526 1.000000 \n", + "e69r2kg 0.222222 \n", "\n", - " 2nd-argmax[indegree over C->C mid-thread responses] \\\n", - "e5hm9mp 1.0 \n", - "e5ytz1d 0.0 \n", - "e6ls80j 4.0 \n", - "e5mhgl5 3.0 \n", - "e6w6fah 1.0 \n", - "... ... \n", - "e65ca8k 0.0 \n", - "e6cdkpy 1.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 0.0 \n", - "e5ua84v 3.0 \n", + " norm.max[indegree over c->c mid-thread responses] \\\n", + "e6p7yrp 0.166667 \n", + "e5ywqyk 0.250000 \n", + "e5qv9rj 0.500000 \n", + "e6jhojf 0.250000 \n", + "e6989ii 0.250000 \n", + "e69lgse 0.500000 \n", + "e5kwkg2 0.333333 \n", + "e6mehe7 0.333333 \n", + "e6m0hsd 0.250000 \n", + "e64r385 0.285714 \n", + "e5surbt 0.250000 \n", + "e58gxii 0.285714 \n", + "e64vc8y 0.333333 \n", + "e57504g 0.285714 \n", + "e5borjq 0.428571 \n", + "e64n9zv 0.250000 \n", + "e582ud3 0.666667 \n", + "e64i9cf 0.400000 \n", + "e6q9204 0.250000 \n", + "e5modd7 0.500000 \n", + "e5xhbyd 0.250000 \n", + "e5oaf7h 0.250000 \n", + "e6nir3u 0.250000 \n", + "e6c3xdn 0.250000 \n", + "e5d3zaa 0.285714 \n", + "e5gnjv9 1.000000 \n", + "e69gw2t 0.285714 \n", + "e5syrih 0.375000 \n", + "e5sa2yf 0.125000 \n", + "e6ai7z5 0.166667 \n", + "... ... \n", + "e5smhzk 0.142857 \n", + "e5v91s0 0.500000 \n", + "e6n6di6 0.375000 \n", + "e6iqq30 0.333333 \n", + "e5bfad7 0.333333 \n", + "e6x5he5 0.400000 \n", + "e6l9uyf 0.500000 \n", + "e57hyr1 0.400000 \n", + "e5b8sj7 0.500000 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 0.500000 \n", + "e57a6qq 0.250000 \n", + "e5qc7eb 0.428571 \n", + "e6hqt5y 0.800000 \n", + "e5ua84v 0.375000 \n", + "e65m7kq 0.400000 \n", + "e5ggtru 0.500000 \n", + "e5pmmig 0.250000 \n", + "e64l6vq 0.333333 \n", + "e6fjx0d 0.142857 \n", + "e5h3xyy 0.400000 \n", + "e589ri5 0.333333 \n", + "e5beuqa 0.428571 \n", + "e5lqoj1 0.250000 \n", + "e5kvch1 0.166667 \n", + "e6srvwm 0.333333 \n", + "e5o65mk 0.142857 \n", + "e647cm8 0.600000 \n", + "e58n526 0.000000 \n", + "e69r2kg 0.285714 \n", "\n", - " norm.2nd-largest[outdegree over C->C mid-thread responses] \\\n", - "e5hm9mp 0.285714 \n", - "e5ytz1d 0.166667 \n", - "e6ls80j 0.200000 \n", - "e5mhgl5 0.142857 \n", - "e6w6fah NaN \n", - "... ... \n", - "e65ca8k 0.000000 \n", - "e6cdkpy 0.200000 \n", - "e5wc4tj 0.500000 \n", - "e6ua0sb 0.285714 \n", - "e5ua84v 0.250000 \n", + " norm.max[indegree over c->c responses] \\\n", + "e6p7yrp 0.333333 \n", + "e5ywqyk 0.222222 \n", + "e5qv9rj 0.333333 \n", + "e6jhojf 0.222222 \n", + "e6989ii 0.222222 \n", + "e69lgse 0.333333 \n", + "e5kwkg2 0.333333 \n", + "e6mehe7 0.333333 \n", + "e6m0hsd 0.222222 \n", + "e64r385 0.222222 \n", + "e5surbt 0.555556 \n", + "e58gxii 0.222222 \n", + "e64vc8y 0.666667 \n", + "e57504g 0.222222 \n", + "e5borjq 0.333333 \n", + "e64n9zv 0.222222 \n", + "e582ud3 0.666667 \n", + "e64i9cf 0.444444 \n", + "e6q9204 0.222222 \n", + "e5modd7 0.444444 \n", + "e5xhbyd 0.222222 \n", + "e5oaf7h 0.222222 \n", + "e6nir3u 0.222222 \n", + "e6c3xdn 0.222222 \n", + "e5d3zaa 0.222222 \n", + "e5gnjv9 0.888889 \n", + "e69gw2t 0.222222 \n", + "e5syrih 0.333333 \n", + "e5sa2yf 0.111111 \n", + "e6ai7z5 0.333333 \n", + "... ... \n", + "e5smhzk 0.222222 \n", + "e5v91s0 0.555556 \n", + "e6n6di6 0.333333 \n", + "e6iqq30 0.666667 \n", + "e5bfad7 0.333333 \n", + "e6x5he5 0.444444 \n", + "e6l9uyf 0.555556 \n", + "e57hyr1 0.444444 \n", + "e5b8sj7 0.333333 \n", + "e6nlep7 1.000000 \n", + "e6ltazd 0.444444 \n", + "e57a6qq 0.222222 \n", + "e5qc7eb 0.333333 \n", + "e6hqt5y 0.444444 \n", + "e5ua84v 0.333333 \n", + "e65m7kq 0.444444 \n", + "e5ggtru 0.444444 \n", + "e5pmmig 0.222222 \n", + "e64l6vq 0.333333 \n", + "e6fjx0d 0.222222 \n", + "e5h3xyy 0.444444 \n", + "e589ri5 0.666667 \n", + "e5beuqa 0.333333 \n", + "e5lqoj1 0.555556 \n", + "e5kvch1 0.333333 \n", + "e6srvwm 0.333333 \n", + "e5o65mk 0.222222 \n", + "e647cm8 0.444444 \n", + "e58n526 1.000000 \n", + "e69r2kg 0.222222 \n", "\n", - " norm.2nd-largest[indegree over C->C mid-thread responses] \\\n", - "e5hm9mp 0.142857 \n", - "e5ytz1d 0.333333 \n", - "e6ls80j 0.200000 \n", - "e5mhgl5 0.285714 \n", - "e6w6fah NaN \n", - "... ... \n", - "e65ca8k 0.000000 \n", - "e6cdkpy 0.400000 \n", - "e5wc4tj 0.500000 \n", - "e6ua0sb 0.142857 \n", - "e5ua84v 0.250000 \n", + " norm.max[outdegree over C->C mid-thread responses] \\\n", + "e6p7yrp 0.500000 \n", + "e5ywqyk 0.500000 \n", + "e5qv9rj 0.166667 \n", + "e6jhojf 0.571429 \n", + "e6989ii 0.500000 \n", + "e69lgse 0.333333 \n", + "e5kwkg2 0.166667 \n", + "e6mehe7 0.600000 \n", + "e6m0hsd 0.500000 \n", + "e64r385 0.285714 \n", + "e5surbt 0.250000 \n", + "e58gxii 0.428571 \n", + "e64vc8y 0.333333 \n", + "e57504g 0.285714 \n", + "e5borjq 0.142857 \n", + "e64n9zv 0.500000 \n", + "e582ud3 0.333333 \n", + "e64i9cf 0.500000 \n", + "e6q9204 0.333333 \n", + "e5modd7 0.125000 \n", + "e5xhbyd 0.333333 \n", + "e5oaf7h 0.500000 \n", + "e6nir3u 0.500000 \n", + "e6c3xdn 0.125000 \n", + "e5d3zaa 0.200000 \n", + "e5gnjv9 1.000000 \n", + "e69gw2t 0.400000 \n", + "e5syrih 0.250000 \n", + "e5sa2yf 0.500000 \n", + "e6ai7z5 0.666667 \n", + "... ... \n", + "e5smhzk 0.666667 \n", + "e5v91s0 0.250000 \n", + "e6n6di6 0.250000 \n", + "e6iqq30 0.333333 \n", + "e5bfad7 0.333333 \n", + "e6x5he5 1.000000 \n", + "e6l9uyf 0.250000 \n", + "e57hyr1 0.200000 \n", + "e5b8sj7 0.166667 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 0.200000 \n", + "e57a6qq 0.333333 \n", + "e5qc7eb 0.166667 \n", + "e6hqt5y 0.200000 \n", + "e5ua84v 0.250000 \n", + "e65m7kq 0.200000 \n", + "e5ggtru 0.125000 \n", + "e5pmmig 0.333333 \n", + "e64l6vq 0.400000 \n", + "e6fjx0d 0.500000 \n", + "e5h3xyy 0.200000 \n", + "e589ri5 0.333333 \n", + "e5beuqa 0.428571 \n", + "e5lqoj1 0.666667 \n", + "e5kvch1 0.200000 \n", + "e6srvwm 0.166667 \n", + "e5o65mk 0.500000 \n", + "e647cm8 0.200000 \n", + "e58n526 0.000000 \n", + "e69r2kg 0.285714 \n", "\n", - " mean[outdegree over C->C mid-thread responses] \\\n", - "e5hm9mp 1.400000 \n", - "e5ytz1d 0.666667 \n", - "e6ls80j 0.833333 \n", - "e5mhgl5 1.000000 \n", - "e6w6fah 0.000000 \n", - "... ... \n", - "e65ca8k 0.500000 \n", - "e6cdkpy 0.555556 \n", - "e5wc4tj 1.000000 \n", - "e6ua0sb 1.400000 \n", - "e5ua84v 1.333333 \n", + " norm.max[outdegree over C->C responses] \\\n", + "e6p7yrp 0.375000 \n", + "e5ywqyk 0.400000 \n", + "e5qv9rj 0.111111 \n", + "e6jhojf 0.500000 \n", + "e6989ii 0.500000 \n", + "e69lgse 0.250000 \n", + "e5kwkg2 0.111111 \n", + "e6mehe7 0.375000 \n", + "e6m0hsd 0.500000 \n", + "e64r385 0.222222 \n", + "e5surbt 0.111111 \n", + "e58gxii 0.375000 \n", + "e64vc8y 0.111111 \n", + "e57504g 0.222222 \n", + "e5borjq 0.222222 \n", + "e64n9zv 0.500000 \n", + "e582ud3 0.111111 \n", + "e64i9cf 0.285714 \n", + "e6q9204 0.428571 \n", + "e5modd7 0.111111 \n", + "e5xhbyd 0.333333 \n", + "e5oaf7h 0.500000 \n", + "e6nir3u 0.500000 \n", + "e6c3xdn 0.111111 \n", + "e5d3zaa 0.285714 \n", + "e5gnjv9 0.222222 \n", + "e69gw2t 0.285714 \n", + "e5syrih 0.222222 \n", + "e5sa2yf 0.500000 \n", + "e6ai7z5 0.500000 \n", + "... ... \n", + "e5smhzk 0.500000 \n", + "e5v91s0 0.111111 \n", + "e6n6di6 0.222222 \n", + "e6iqq30 0.111111 \n", + "e5bfad7 0.222222 \n", + "e6x5he5 0.500000 \n", + "e6l9uyf 0.222222 \n", + "e57hyr1 0.222222 \n", + "e5b8sj7 0.222222 \n", + "e6nlep7 0.111111 \n", + "e6ltazd 0.333333 \n", + "e57a6qq 0.333333 \n", + "e5qc7eb 0.285714 \n", + "e6hqt5y 0.222222 \n", + "e5ua84v 0.333333 \n", + "e65m7kq 0.222222 \n", + "e5ggtru 0.222222 \n", + "e5pmmig 0.428571 \n", + "e64l6vq 0.285714 \n", + "e6fjx0d 0.500000 \n", + "e5h3xyy 0.222222 \n", + "e589ri5 0.111111 \n", + "e5beuqa 0.444444 \n", + "e5lqoj1 0.375000 \n", + "e5kvch1 0.250000 \n", + "e6srvwm 0.222222 \n", + "e5o65mk 0.500000 \n", + "e647cm8 0.111111 \n", + "e58n526 0.111111 \n", + "e69r2kg 0.222222 \n", "\n", - " mean[indegree over C->C mid-thread responses] \\\n", - "e5hm9mp 1.400000 \n", - "e5ytz1d 0.666667 \n", - "e6ls80j 0.833333 \n", - "e5mhgl5 1.000000 \n", - "e6w6fah 0.000000 \n", - "... ... \n", - "e65ca8k 0.500000 \n", - "e6cdkpy 0.555556 \n", - "e5wc4tj 1.000000 \n", - "e6ua0sb 1.400000 \n", - "e5ua84v 1.333333 \n", + " norm.max[outdegree over C->c mid-thread responses] \\\n", + "e6p7yrp 0.500000 \n", + "e5ywqyk 0.500000 \n", + "e5qv9rj 0.166667 \n", + "e6jhojf 0.500000 \n", + "e6989ii 0.571429 \n", + "e69lgse 0.333333 \n", + "e5kwkg2 0.166667 \n", + "e6mehe7 0.500000 \n", + "e6m0hsd 0.500000 \n", + "e64r385 0.285714 \n", + "e5surbt 0.250000 \n", + "e58gxii 0.428571 \n", + "e64vc8y 0.333333 \n", + "e57504g 0.285714 \n", + "e5borjq 0.142857 \n", + "e64n9zv 0.375000 \n", + "e582ud3 0.333333 \n", + "e64i9cf 0.600000 \n", + "e6q9204 0.375000 \n", + "e5modd7 0.125000 \n", + "e5xhbyd 0.375000 \n", + "e5oaf7h 0.500000 \n", + "e6nir3u 0.571429 \n", + "e6c3xdn 0.125000 \n", + "e5d3zaa 0.285714 \n", + "e5gnjv9 1.000000 \n", + "e69gw2t 0.428571 \n", + "e5syrih 0.250000 \n", + "e5sa2yf 0.500000 \n", + "e6ai7z5 0.666667 \n", + "... ... \n", + "e5smhzk 0.571429 \n", + "e5v91s0 0.250000 \n", + "e6n6di6 0.250000 \n", + "e6iqq30 0.333333 \n", + "e5bfad7 0.333333 \n", + "e6x5he5 1.000000 \n", + "e6l9uyf 0.250000 \n", + "e57hyr1 0.200000 \n", + "e5b8sj7 0.166667 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 0.375000 \n", + "e57a6qq 0.375000 \n", + "e5qc7eb 0.285714 \n", + "e6hqt5y 0.200000 \n", + "e5ua84v 0.250000 \n", + "e65m7kq 0.200000 \n", + "e5ggtru 0.125000 \n", + "e5pmmig 0.375000 \n", + "e64l6vq 0.500000 \n", + "e6fjx0d 0.571429 \n", + "e5h3xyy 0.200000 \n", + "e589ri5 0.333333 \n", + "e5beuqa 0.428571 \n", + "e5lqoj1 0.500000 \n", + "e5kvch1 0.333333 \n", + "e6srvwm 0.166667 \n", + "e5o65mk 0.571429 \n", + "e647cm8 0.200000 \n", + "e58n526 0.000000 \n", + "e69r2kg 0.285714 \n", "\n", - " mean-nonzero[outdegree over C->C mid-thread responses] \\\n", - "e5hm9mp 1.750000 \n", - "e5ytz1d 1.000000 \n", - "e6ls80j 1.250000 \n", - "e5mhgl5 1.166667 \n", - "e6w6fah 0.000000 \n", + " norm.max[outdegree over C->c responses] \\\n", + "e6p7yrp 0.333333 \n", + "e5ywqyk 0.444444 \n", + "e5qv9rj 0.111111 \n", + "e6jhojf 0.444444 \n", + "e6989ii 0.500000 \n", + "e69lgse 0.222222 \n", + "e5kwkg2 0.111111 \n", + "e6mehe7 0.333333 \n", + "e6m0hsd 0.555556 \n", + "e64r385 0.222222 \n", + "e5surbt 0.111111 \n", + "e58gxii 0.333333 \n", + "e64vc8y 0.111111 \n", + "e57504g 0.222222 \n", + "e5borjq 0.222222 \n", + "e64n9zv 0.444444 \n", + "e582ud3 0.111111 \n", + "e64i9cf 0.333333 \n", + "e6q9204 0.444444 \n", + "e5modd7 0.111111 \n", + "e5xhbyd 0.333333 \n", + "e5oaf7h 0.555556 \n", + "e6nir3u 0.500000 \n", + "e6c3xdn 0.111111 \n", + "e5d3zaa 0.333333 \n", + "e5gnjv9 0.222222 \n", + "e69gw2t 0.333333 \n", + "e5syrih 0.222222 \n", + "e5sa2yf 0.555556 \n", + "e6ai7z5 0.555556 \n", + "... ... \n", + "e5smhzk 0.444444 \n", + "e5v91s0 0.111111 \n", + "e6n6di6 0.222222 \n", + "e6iqq30 0.111111 \n", + "e5bfad7 0.222222 \n", + "e6x5he5 0.500000 \n", + "e6l9uyf 0.222222 \n", + "e57hyr1 0.222222 \n", + "e5b8sj7 0.222222 \n", + "e6nlep7 0.111111 \n", + "e6ltazd 0.333333 \n", + "e57a6qq 0.333333 \n", + "e5qc7eb 0.222222 \n", + "e6hqt5y 0.222222 \n", + "e5ua84v 0.333333 \n", + "e65m7kq 0.222222 \n", + "e5ggtru 0.222222 \n", + "e5pmmig 0.333333 \n", + "e64l6vq 0.333333 \n", + "e6fjx0d 0.444444 \n", + "e5h3xyy 0.222222 \n", + "e589ri5 0.111111 \n", + "e5beuqa 0.444444 \n", + "e5lqoj1 0.333333 \n", + "e5kvch1 0.222222 \n", + "e6srvwm 0.222222 \n", + "e5o65mk 0.500000 \n", + "e647cm8 0.111111 \n", + "e58n526 0.111111 \n", + "e69r2kg 0.222222 \n", + "\n", + " prop-multiple[indegree over C->C mid-thread responses] \\\n", + "e6p7yrp 0.250000 \n", + "e5ywqyk 0.333333 \n", + "e5qv9rj 0.250000 \n", + "e6jhojf 0.200000 \n", + "e6989ii 0.000000 \n", + "e69lgse 0.250000 \n", + "e5kwkg2 0.200000 \n", + "e6mehe7 0.250000 \n", + "e6m0hsd 0.333333 \n", + "e64r385 0.400000 \n", + "e5surbt 0.000000 \n", + "e58gxii 0.500000 \n", + "e64vc8y 0.000000 \n", + "e57504g 0.400000 \n", + "e5borjq 0.500000 \n", + "e64n9zv 0.333333 \n", + "e582ud3 0.500000 \n", + "e64i9cf 0.333333 \n", + "e6q9204 0.666667 \n", + "e5modd7 1.000000 \n", + "e5xhbyd 0.500000 \n", + "e5oaf7h 0.500000 \n", + "e6nir3u 0.000000 \n", + "e6c3xdn 0.142857 \n", + "e5d3zaa 0.666667 \n", + "e5gnjv9 0.000000 \n", + "e69gw2t 0.666667 \n", + "e5syrih 1.000000 \n", + "e5sa2yf 0.000000 \n", + "e6ai7z5 0.200000 \n", "... ... \n", - "e65ca8k 1.000000 \n", - "e6cdkpy 1.000000 \n", - "e5wc4tj 1.000000 \n", - "e6ua0sb 1.400000 \n", - "e5ua84v 1.333333 \n", + "e5smhzk 0.000000 \n", + "e5v91s0 0.333333 \n", + "e6n6di6 0.500000 \n", + "e6iqq30 0.000000 \n", + "e5bfad7 0.500000 \n", + "e6x5he5 0.000000 \n", + "e6l9uyf 0.333333 \n", + "e57hyr1 0.250000 \n", + "e5b8sj7 1.000000 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 0.500000 \n", + "e57a6qq 0.666667 \n", + "e5qc7eb 0.666667 \n", + "e6hqt5y 0.500000 \n", + "e5ua84v 0.500000 \n", + "e65m7kq 0.333333 \n", + "e5ggtru 0.666667 \n", + "e5pmmig 0.500000 \n", + "e64l6vq 0.250000 \n", + "e6fjx0d 0.000000 \n", + "e5h3xyy 0.250000 \n", + "e589ri5 0.000000 \n", + "e5beuqa 0.250000 \n", + "e5lqoj1 0.000000 \n", + "e5kvch1 0.250000 \n", + "e6srvwm 0.500000 \n", + "e5o65mk 0.000000 \n", + "e647cm8 0.333333 \n", + "e58n526 0.000000 \n", + "e69r2kg 0.500000 \n", "\n", - " mean-nonzero[indegree over C->C mid-thread responses] \\\n", - "e5hm9mp 1.400000 \n", - "e5ytz1d 2.000000 \n", - "e6ls80j 1.666667 \n", - "e5mhgl5 1.400000 \n", - "e6w6fah 0.000000 \n", - "... ... \n", - "e65ca8k 1.000000 \n", - "e6cdkpy 1.666667 \n", - "e5wc4tj 1.000000 \n", - "e6ua0sb 1.750000 \n", - "e5ua84v 2.000000 \n", + " prop-multiple[indegree over C->C responses] \\\n", + "e6p7yrp 0.250000 \n", + "e5ywqyk 0.666667 \n", + "e5qv9rj 0.400000 \n", + "e6jhojf 0.200000 \n", + "e6989ii 0.000000 \n", + "e69lgse 0.500000 \n", + "e5kwkg2 0.333333 \n", + "e6mehe7 0.500000 \n", + "e6m0hsd 0.333333 \n", + "e64r385 0.500000 \n", + "e5surbt 0.200000 \n", + "e58gxii 0.500000 \n", + "e64vc8y 0.250000 \n", + "e57504g 0.500000 \n", + "e5borjq 0.600000 \n", + "e64n9zv 0.333333 \n", + "e582ud3 0.666667 \n", + "e64i9cf 0.666667 \n", + "e6q9204 0.500000 \n", + "e5modd7 0.750000 \n", + "e5xhbyd 0.500000 \n", + "e5oaf7h 0.500000 \n", + "e6nir3u 0.000000 \n", + "e6c3xdn 0.125000 \n", + "e5d3zaa 0.750000 \n", + "e5gnjv9 0.500000 \n", + "e69gw2t 0.750000 \n", + "e5syrih 0.750000 \n", + "e5sa2yf 0.000000 \n", + "e6ai7z5 0.400000 \n", + "... ... \n", + "e5smhzk 0.333333 \n", + "e5v91s0 0.500000 \n", + "e6n6di6 0.400000 \n", + "e6iqq30 0.250000 \n", + "e5bfad7 0.750000 \n", + "e6x5he5 0.200000 \n", + "e6l9uyf 0.500000 \n", + "e57hyr1 0.400000 \n", + "e5b8sj7 1.000000 \n", + "e6nlep7 1.000000 \n", + "e6ltazd 0.333333 \n", + "e57a6qq 0.666667 \n", + "e5qc7eb 0.666667 \n", + "e6hqt5y 0.666667 \n", + "e5ua84v 0.400000 \n", + "e65m7kq 0.500000 \n", + "e5ggtru 0.500000 \n", + "e5pmmig 0.400000 \n", + "e64l6vq 0.500000 \n", + "e6fjx0d 0.333333 \n", + "e5h3xyy 0.400000 \n", + "e589ri5 0.250000 \n", + "e5beuqa 0.400000 \n", + "e5lqoj1 0.250000 \n", + "e5kvch1 0.400000 \n", + "e6srvwm 0.600000 \n", + "e5o65mk 0.000000 \n", + "e647cm8 0.500000 \n", + "e58n526 1.000000 \n", + "e69r2kg 0.600000 \n", "\n", - " prop-nonzero[outdegree over C->C mid-thread responses] \\\n", - "e5hm9mp 0.800000 \n", - "e5ytz1d 0.666667 \n", - "e6ls80j 0.666667 \n", - "e5mhgl5 0.857143 \n", - "e6w6fah 0.000000 \n", + " prop-multiple[indegree over C->c mid-thread responses] \\\n", + "e6p7yrp 0.000000 \n", + "e5ywqyk 0.142857 \n", + "e5qv9rj 0.250000 \n", + "e6jhojf 0.142857 \n", + "e6989ii 0.000000 \n", + "e69lgse 0.250000 \n", + "e5kwkg2 0.200000 \n", + "e6mehe7 0.200000 \n", + "e6m0hsd 0.142857 \n", + "e64r385 0.400000 \n", + "e5surbt 0.000000 \n", + "e58gxii 0.400000 \n", + "e64vc8y 0.000000 \n", + "e57504g 0.400000 \n", + "e5borjq 0.500000 \n", + "e64n9zv 0.142857 \n", + "e582ud3 0.500000 \n", + "e64i9cf 0.250000 \n", + "e6q9204 0.333333 \n", + "e5modd7 1.000000 \n", + "e5xhbyd 0.333333 \n", + "e5oaf7h 0.333333 \n", + "e6nir3u 0.000000 \n", + "e6c3xdn 0.142857 \n", + "e5d3zaa 0.400000 \n", + "e5gnjv9 0.000000 \n", + "e69gw2t 0.400000 \n", + "e5syrih 0.400000 \n", + "e5sa2yf 0.000000 \n", + "e6ai7z5 0.000000 \n", "... ... \n", - "e65ca8k 0.500000 \n", - "e6cdkpy 0.555556 \n", - "e5wc4tj 1.000000 \n", - "e6ua0sb 1.000000 \n", - "e5ua84v 1.000000 \n", - "\n", - " prop-nonzero[indegree over C->C mid-thread responses] \\\n", - "e5hm9mp 1.000000 \n", - "e5ytz1d 0.333333 \n", - "e6ls80j 0.500000 \n", - "e5mhgl5 0.714286 \n", - "e6w6fah 0.000000 \n", - "... ... \n", - "e65ca8k 0.500000 \n", - "e6cdkpy 0.333333 \n", - "e5wc4tj 1.000000 \n", - "e6ua0sb 0.800000 \n", - "e5ua84v 0.666667 \n", + "e5smhzk 0.000000 \n", + "e5v91s0 0.333333 \n", + "e6n6di6 0.400000 \n", + "e6iqq30 0.000000 \n", + "e5bfad7 0.500000 \n", + "e6x5he5 0.000000 \n", + "e6l9uyf 0.333333 \n", + "e57hyr1 0.250000 \n", + "e5b8sj7 0.666667 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 0.200000 \n", + "e57a6qq 0.333333 \n", + "e5qc7eb 0.500000 \n", + "e6hqt5y 0.500000 \n", + "e5ua84v 0.400000 \n", + "e65m7kq 0.250000 \n", + "e5ggtru 0.500000 \n", + "e5pmmig 0.142857 \n", + "e64l6vq 0.200000 \n", + "e6fjx0d 0.000000 \n", + "e5h3xyy 0.250000 \n", + "e589ri5 0.000000 \n", + "e5beuqa 0.200000 \n", + "e5lqoj1 0.000000 \n", + "e5kvch1 0.000000 \n", + "e6srvwm 0.500000 \n", + "e5o65mk 0.000000 \n", + "e647cm8 0.333333 \n", + "e58n526 0.000000 \n", + "e69r2kg 0.400000 \n", "\n", - " prop-multiple[outdegree over C->C mid-thread responses] \\\n", - "e5hm9mp 0.750000 \n", - "e5ytz1d 0.000000 \n", - "e6ls80j 0.250000 \n", - "e5mhgl5 0.166667 \n", - "e6w6fah 0.000000 \n", - "... ... \n", - "e65ca8k 0.000000 \n", - "e6cdkpy 0.000000 \n", - "e5wc4tj 0.000000 \n", - "e6ua0sb 0.400000 \n", - "e5ua84v 0.333333 \n", + " prop-multiple[indegree over C->c responses] \\\n", + "e6p7yrp 0.142857 \n", + "e5ywqyk 0.125000 \n", + "e5qv9rj 0.400000 \n", + "e6jhojf 0.125000 \n", + "e6989ii 0.000000 \n", + "e69lgse 0.400000 \n", + "e5kwkg2 0.333333 \n", + "e6mehe7 0.333333 \n", + "e6m0hsd 0.125000 \n", + "e64r385 0.500000 \n", + "e5surbt 0.200000 \n", + "e58gxii 0.500000 \n", + "e64vc8y 0.250000 \n", + "e57504g 0.500000 \n", + "e5borjq 0.600000 \n", + "e64n9zv 0.125000 \n", + "e582ud3 0.666667 \n", + "e64i9cf 0.400000 \n", + "e6q9204 0.285714 \n", + "e5modd7 0.750000 \n", + "e5xhbyd 0.285714 \n", + "e5oaf7h 0.285714 \n", + "e6nir3u 0.000000 \n", + "e6c3xdn 0.125000 \n", + "e5d3zaa 0.500000 \n", + "e5gnjv9 0.500000 \n", + "e69gw2t 0.500000 \n", + "e5syrih 0.333333 \n", + "e5sa2yf 0.000000 \n", + "e6ai7z5 0.142857 \n", + "... ... \n", + "e5smhzk 0.125000 \n", + "e5v91s0 0.500000 \n", + "e6n6di6 0.333333 \n", + "e6iqq30 0.250000 \n", + "e5bfad7 0.600000 \n", + "e6x5he5 0.200000 \n", + "e6l9uyf 0.500000 \n", + "e57hyr1 0.400000 \n", + "e5b8sj7 0.750000 \n", + "e6nlep7 1.000000 \n", + "e6ltazd 0.166667 \n", + "e57a6qq 0.285714 \n", + "e5qc7eb 0.600000 \n", + "e6hqt5y 0.666667 \n", + "e5ua84v 0.333333 \n", + "e65m7kq 0.400000 \n", + "e5ggtru 0.400000 \n", + "e5pmmig 0.125000 \n", + "e64l6vq 0.333333 \n", + "e6fjx0d 0.125000 \n", + "e5h3xyy 0.400000 \n", + "e589ri5 0.250000 \n", + "e5beuqa 0.333333 \n", + "e5lqoj1 0.200000 \n", + "e5kvch1 0.142857 \n", + "e6srvwm 0.600000 \n", + "e5o65mk 0.000000 \n", + "e647cm8 0.500000 \n", + "e58n526 1.000000 \n", + "e69r2kg 0.500000 \n", "\n", - " prop-multiple[indegree over C->C mid-thread responses] \\\n", - "e5hm9mp 0.200000 \n", - "e5ytz1d 0.666667 \n", - "e6ls80j 0.333333 \n", - "e5mhgl5 0.400000 \n", - "e6w6fah 0.000000 \n", + " prop-multiple[indegree over c->c mid-thread responses] \\\n", + "e6p7yrp 0.000000 \n", + "e5ywqyk 0.142857 \n", + "e5qv9rj 0.250000 \n", + "e6jhojf 0.142857 \n", + "e6989ii 0.142857 \n", + "e69lgse 0.250000 \n", + "e5kwkg2 0.200000 \n", + "e6mehe7 0.200000 \n", + "e6m0hsd 0.142857 \n", + "e64r385 0.400000 \n", + "e5surbt 0.000000 \n", + "e58gxii 0.400000 \n", + "e64vc8y 0.000000 \n", + "e57504g 0.400000 \n", + "e5borjq 0.500000 \n", + "e64n9zv 0.142857 \n", + "e582ud3 0.500000 \n", + "e64i9cf 0.250000 \n", + "e6q9204 0.333333 \n", + "e5modd7 1.000000 \n", + "e5xhbyd 0.333333 \n", + "e5oaf7h 0.333333 \n", + "e6nir3u 0.142857 \n", + "e6c3xdn 0.142857 \n", + "e5d3zaa 0.400000 \n", + "e5gnjv9 0.000000 \n", + "e69gw2t 0.400000 \n", + "e5syrih 0.400000 \n", + "e5sa2yf 0.000000 \n", + "e6ai7z5 0.000000 \n", "... ... \n", - "e65ca8k 0.000000 \n", - "e6cdkpy 0.666667 \n", - "e5wc4tj 0.000000 \n", - "e6ua0sb 0.250000 \n", - "e5ua84v 0.500000 \n", + "e5smhzk 0.000000 \n", + "e5v91s0 0.333333 \n", + "e6n6di6 0.400000 \n", + "e6iqq30 0.000000 \n", + "e5bfad7 0.500000 \n", + "e6x5he5 0.250000 \n", + "e6l9uyf 0.333333 \n", + "e57hyr1 0.250000 \n", + "e5b8sj7 0.666667 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 0.200000 \n", + "e57a6qq 0.333333 \n", + "e5qc7eb 0.500000 \n", + "e6hqt5y 0.500000 \n", + "e5ua84v 0.400000 \n", + "e65m7kq 0.250000 \n", + "e5ggtru 0.500000 \n", + "e5pmmig 0.142857 \n", + "e64l6vq 0.200000 \n", + "e6fjx0d 0.000000 \n", + "e5h3xyy 0.250000 \n", + "e589ri5 0.000000 \n", + "e5beuqa 0.200000 \n", + "e5lqoj1 0.000000 \n", + "e5kvch1 0.000000 \n", + "e6srvwm 0.500000 \n", + "e5o65mk 0.000000 \n", + "e647cm8 0.333333 \n", + "e58n526 0.000000 \n", + "e69r2kg 0.400000 \n", "\n", - " entropy[outdegree over C->C mid-thread responses] \\\n", - "e5hm9mp 1.351784 \n", - "e5ytz1d 1.791759 \n", - "e6ls80j 1.332179 \n", - "e5mhgl5 1.747868 \n", - "e6w6fah NaN \n", - "... ... \n", - "e65ca8k 0.000000 \n", - "e6cdkpy 1.609438 \n", - "e5wc4tj 0.693147 \n", - "e6ua0sb 1.549826 \n", - "e5ua84v 1.732868 \n", + " prop-multiple[indegree over c->c responses] \\\n", + "e6p7yrp 0.142857 \n", + "e5ywqyk 0.125000 \n", + "e5qv9rj 0.400000 \n", + "e6jhojf 0.125000 \n", + "e6989ii 0.125000 \n", + "e69lgse 0.400000 \n", + "e5kwkg2 0.333333 \n", + "e6mehe7 0.333333 \n", + "e6m0hsd 0.125000 \n", + "e64r385 0.500000 \n", + "e5surbt 0.200000 \n", + "e58gxii 0.500000 \n", + "e64vc8y 0.250000 \n", + "e57504g 0.500000 \n", + "e5borjq 0.600000 \n", + "e64n9zv 0.125000 \n", + "e582ud3 0.666667 \n", + "e64i9cf 0.400000 \n", + "e6q9204 0.285714 \n", + "e5modd7 0.750000 \n", + "e5xhbyd 0.285714 \n", + "e5oaf7h 0.285714 \n", + "e6nir3u 0.125000 \n", + "e6c3xdn 0.125000 \n", + "e5d3zaa 0.500000 \n", + "e5gnjv9 0.500000 \n", + "e69gw2t 0.500000 \n", + "e5syrih 0.333333 \n", + "e5sa2yf 0.000000 \n", + "e6ai7z5 0.142857 \n", + "... ... \n", + "e5smhzk 0.125000 \n", + "e5v91s0 0.500000 \n", + "e6n6di6 0.333333 \n", + "e6iqq30 0.250000 \n", + "e5bfad7 0.600000 \n", + "e6x5he5 0.400000 \n", + "e6l9uyf 0.500000 \n", + "e57hyr1 0.400000 \n", + "e5b8sj7 0.750000 \n", + "e6nlep7 1.000000 \n", + "e6ltazd 0.166667 \n", + "e57a6qq 0.285714 \n", + "e5qc7eb 0.600000 \n", + "e6hqt5y 0.666667 \n", + "e5ua84v 0.333333 \n", + "e65m7kq 0.400000 \n", + "e5ggtru 0.400000 \n", + "e5pmmig 0.125000 \n", + "e64l6vq 0.333333 \n", + "e6fjx0d 0.125000 \n", + "e5h3xyy 0.400000 \n", + "e589ri5 0.250000 \n", + "e5beuqa 0.333333 \n", + "e5lqoj1 0.200000 \n", + "e5kvch1 0.142857 \n", + "e6srvwm 0.600000 \n", + "e5o65mk 0.125000 \n", + "e647cm8 0.500000 \n", + "e58n526 1.000000 \n", + "e69r2kg 0.500000 \n", "\n", - " entropy[indegree over C->C mid-thread responses] \\\n", - "e5hm9mp 1.475076 \n", - "e5ytz1d 1.011404 \n", - "e6ls80j 0.950271 \n", - "e5mhgl5 1.549826 \n", - "e6w6fah NaN \n", - "... ... \n", - "e65ca8k 0.000000 \n", - "e6cdkpy 1.054920 \n", - "e5wc4tj 0.693147 \n", - "e6ua0sb 1.153742 \n", - "e5ua84v 1.213008 \n", + " prop-multiple[outdegree over C->C mid-thread responses] \\\n", + "e6p7yrp 0.250000 \n", + "e5ywqyk 0.333333 \n", + "e5qv9rj 0.000000 \n", + "e6jhojf 0.250000 \n", + "e6989ii 0.000000 \n", + "e69lgse 0.200000 \n", + "e5kwkg2 0.000000 \n", + "e6mehe7 0.333333 \n", + "e6m0hsd 0.333333 \n", + "e64r385 0.166667 \n", + "e5surbt 0.000000 \n", + "e58gxii 0.200000 \n", + "e64vc8y 0.000000 \n", + "e57504g 0.166667 \n", + "e5borjq 0.000000 \n", + "e64n9zv 0.333333 \n", + "e582ud3 0.000000 \n", + "e64i9cf 0.333333 \n", + "e6q9204 0.200000 \n", + "e5modd7 0.000000 \n", + "e5xhbyd 0.500000 \n", + "e5oaf7h 0.333333 \n", + "e6nir3u 0.000000 \n", + "e6c3xdn 0.000000 \n", + "e5d3zaa 0.000000 \n", + "e5gnjv9 0.000000 \n", + "e69gw2t 0.250000 \n", + "e5syrih 0.142857 \n", + "e5sa2yf 0.000000 \n", + "e6ai7z5 0.333333 \n", + "... ... \n", + "e5smhzk 0.500000 \n", + "e5v91s0 0.000000 \n", + "e6n6di6 0.142857 \n", + "e6iqq30 0.000000 \n", + "e5bfad7 0.200000 \n", + "e6x5he5 1.000000 \n", + "e6l9uyf 0.000000 \n", + "e57hyr1 0.000000 \n", + "e5b8sj7 0.000000 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 0.000000 \n", + "e57a6qq 0.200000 \n", + "e5qc7eb 0.000000 \n", + "e6hqt5y 0.000000 \n", + "e5ua84v 0.333333 \n", + "e65m7kq 0.000000 \n", + "e5ggtru 0.000000 \n", + "e5pmmig 0.500000 \n", + "e64l6vq 0.250000 \n", + "e6fjx0d 0.000000 \n", + "e5h3xyy 0.000000 \n", + "e589ri5 0.000000 \n", + "e5beuqa 0.200000 \n", + "e5lqoj1 0.500000 \n", + "e5kvch1 0.000000 \n", + "e6srvwm 0.000000 \n", + "e5o65mk 0.000000 \n", + "e647cm8 0.000000 \n", + "e58n526 0.000000 \n", + "e69r2kg 0.166667 \n", "\n", - " 2nd-largest / max[outdegree over C->C mid-thread responses] \\\n", - "e5hm9mp 1.0 \n", - "e5ytz1d 1.0 \n", - "e6ls80j 0.5 \n", - "e5mhgl5 0.5 \n", - "e6w6fah NaN \n", - "... ... \n", - "e65ca8k 0.0 \n", - "e6cdkpy 1.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 1.0 \n", - "e5ua84v 1.0 \n", + " prop-multiple[outdegree over C->C responses] \\\n", + "e6p7yrp 0.166667 \n", + "e5ywqyk 0.250000 \n", + "e5qv9rj 0.000000 \n", + "e6jhojf 0.200000 \n", + "e6989ii 0.000000 \n", + "e69lgse 0.142857 \n", + "e5kwkg2 0.000000 \n", + "e6mehe7 0.166667 \n", + "e6m0hsd 0.333333 \n", + "e64r385 0.285714 \n", + "e5surbt 0.000000 \n", + "e58gxii 0.166667 \n", + "e64vc8y 0.000000 \n", + "e57504g 0.285714 \n", + "e5borjq 0.125000 \n", + "e64n9zv 0.333333 \n", + "e582ud3 0.000000 \n", + "e64i9cf 0.166667 \n", + "e6q9204 0.200000 \n", + "e5modd7 0.000000 \n", + "e5xhbyd 0.500000 \n", + "e5oaf7h 0.333333 \n", + "e6nir3u 0.000000 \n", + "e6c3xdn 0.000000 \n", + "e5d3zaa 0.166667 \n", + "e5gnjv9 0.125000 \n", + "e69gw2t 0.400000 \n", + "e5syrih 0.285714 \n", + "e5sa2yf 0.000000 \n", + "e6ai7z5 0.200000 \n", + "... ... \n", + "e5smhzk 0.333333 \n", + "e5v91s0 0.000000 \n", + "e6n6di6 0.125000 \n", + "e6iqq30 0.000000 \n", + "e5bfad7 0.125000 \n", + "e6x5he5 0.200000 \n", + "e6l9uyf 0.125000 \n", + "e57hyr1 0.500000 \n", + "e5b8sj7 0.125000 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 0.200000 \n", + "e57a6qq 0.200000 \n", + "e5qc7eb 0.166667 \n", + "e6hqt5y 0.125000 \n", + "e5ua84v 0.333333 \n", + "e65m7kq 0.125000 \n", + "e5ggtru 0.125000 \n", + "e5pmmig 0.500000 \n", + "e64l6vq 0.166667 \n", + "e6fjx0d 0.333333 \n", + "e5h3xyy 0.125000 \n", + "e589ri5 0.000000 \n", + "e5beuqa 0.400000 \n", + "e5lqoj1 0.166667 \n", + "e5kvch1 0.333333 \n", + "e6srvwm 0.125000 \n", + "e5o65mk 0.000000 \n", + "e647cm8 0.000000 \n", + "e58n526 0.000000 \n", + "e69r2kg 0.125000 \n", "\n", - " 2nd-largest / max[indegree over C->C mid-thread responses] \\\n", - "e5hm9mp 0.333333 \n", - "e5ytz1d 0.666667 \n", - "e6ls80j 0.333333 \n", - "e5mhgl5 1.000000 \n", - "e6w6fah NaN \n", - "... ... \n", - "e65ca8k 0.000000 \n", - "e6cdkpy 1.000000 \n", - "e5wc4tj 1.000000 \n", - "e6ua0sb 0.250000 \n", - "e5ua84v 0.500000 \n", + " prop-multiple[outdegree over C->c mid-thread responses] \\\n", + "e6p7yrp 0.250000 \n", + "e5ywqyk 0.666667 \n", + "e5qv9rj 0.000000 \n", + "e6jhojf 0.500000 \n", + "e6989ii 1.000000 \n", + "e69lgse 0.200000 \n", + "e5kwkg2 0.000000 \n", + "e6mehe7 0.666667 \n", + "e6m0hsd 0.666667 \n", + "e64r385 0.166667 \n", + "e5surbt 0.000000 \n", + "e58gxii 0.200000 \n", + "e64vc8y 0.000000 \n", + "e57504g 0.166667 \n", + "e5borjq 0.000000 \n", + "e64n9zv 1.000000 \n", + "e582ud3 0.000000 \n", + "e64i9cf 0.333333 \n", + "e6q9204 0.400000 \n", + "e5modd7 0.000000 \n", + "e5xhbyd 0.750000 \n", + "e5oaf7h 0.666667 \n", + "e6nir3u 1.000000 \n", + "e6c3xdn 0.000000 \n", + "e5d3zaa 0.400000 \n", + "e5gnjv9 0.000000 \n", + "e69gw2t 0.500000 \n", + "e5syrih 0.142857 \n", + "e5sa2yf 1.000000 \n", + "e6ai7z5 0.333333 \n", + "... ... \n", + "e5smhzk 1.000000 \n", + "e5v91s0 0.000000 \n", + "e6n6di6 0.142857 \n", + "e6iqq30 0.000000 \n", + "e5bfad7 0.200000 \n", + "e6x5he5 1.000000 \n", + "e6l9uyf 0.000000 \n", + "e57hyr1 0.000000 \n", + "e5b8sj7 0.000000 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 0.400000 \n", + "e57a6qq 0.400000 \n", + "e5qc7eb 0.166667 \n", + "e6hqt5y 0.000000 \n", + "e5ua84v 0.333333 \n", + "e65m7kq 0.000000 \n", + "e5ggtru 0.000000 \n", + "e5pmmig 0.750000 \n", + "e64l6vq 0.250000 \n", + "e6fjx0d 1.000000 \n", + "e5h3xyy 0.000000 \n", + "e589ri5 0.000000 \n", + "e5beuqa 0.200000 \n", + "e5lqoj1 1.000000 \n", + "e5kvch1 0.200000 \n", + "e6srvwm 0.000000 \n", + "e5o65mk 1.000000 \n", + "e647cm8 0.000000 \n", + "e58n526 0.000000 \n", + "e69r2kg 0.166667 \n", "\n", - " is-present[reciprocity motif over mid-thread] \\\n", - "e5hm9mp 1.0 \n", - "e5ytz1d 0.0 \n", - "e6ls80j 1.0 \n", - "e5mhgl5 1.0 \n", - "e6w6fah 0.0 \n", - "... ... \n", - "e65ca8k 1.0 \n", - "e6cdkpy 0.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 1.0 \n", - "e5ua84v 1.0 \n", + " prop-multiple[outdegree over C->c responses] \\\n", + "e6p7yrp 0.333333 \n", + "e5ywqyk 0.500000 \n", + "e5qv9rj 0.000000 \n", + "e6jhojf 0.400000 \n", + "e6989ii 1.000000 \n", + "e69lgse 0.285714 \n", + "e5kwkg2 0.000000 \n", + "e6mehe7 0.333333 \n", + "e6m0hsd 0.666667 \n", + "e64r385 0.285714 \n", + "e5surbt 0.000000 \n", + "e58gxii 0.333333 \n", + "e64vc8y 0.000000 \n", + "e57504g 0.285714 \n", + "e5borjq 0.125000 \n", + "e64n9zv 1.000000 \n", + "e582ud3 0.000000 \n", + "e64i9cf 0.333333 \n", + "e6q9204 0.400000 \n", + "e5modd7 0.000000 \n", + "e5xhbyd 0.750000 \n", + "e5oaf7h 0.666667 \n", + "e6nir3u 1.000000 \n", + "e6c3xdn 0.000000 \n", + "e5d3zaa 0.333333 \n", + "e5gnjv9 0.125000 \n", + "e69gw2t 0.400000 \n", + "e5syrih 0.285714 \n", + "e5sa2yf 1.000000 \n", + "e6ai7z5 0.200000 \n", + "... ... \n", + "e5smhzk 0.666667 \n", + "e5v91s0 0.000000 \n", + "e6n6di6 0.125000 \n", + "e6iqq30 0.000000 \n", + "e5bfad7 0.125000 \n", + "e6x5he5 0.200000 \n", + "e6l9uyf 0.125000 \n", + "e57hyr1 0.500000 \n", + "e5b8sj7 0.125000 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 0.400000 \n", + "e57a6qq 0.400000 \n", + "e5qc7eb 0.500000 \n", + "e6hqt5y 0.125000 \n", + "e5ua84v 0.333333 \n", + "e65m7kq 0.125000 \n", + "e5ggtru 0.125000 \n", + "e5pmmig 0.750000 \n", + "e64l6vq 0.333333 \n", + "e6fjx0d 0.666667 \n", + "e5h3xyy 0.125000 \n", + "e589ri5 0.000000 \n", + "e5beuqa 0.400000 \n", + "e5lqoj1 0.333333 \n", + "e5kvch1 0.500000 \n", + "e6srvwm 0.125000 \n", + "e5o65mk 1.000000 \n", + "e647cm8 0.000000 \n", + "e58n526 0.000000 \n", + "e69r2kg 0.125000 \n", "\n", - " count[reciprocity motif over mid-thread] \\\n", - "e5hm9mp 3.0 \n", - "e5ytz1d 0.0 \n", - "e6ls80j 1.0 \n", - "e5mhgl5 2.0 \n", - "e6w6fah 0.0 \n", - "... ... \n", - "e65ca8k 6.0 \n", - "e6cdkpy 0.0 \n", - "e5wc4tj 7.0 \n", - "e6ua0sb 2.0 \n", - "e5ua84v 3.0 \n", + " prop-nonzero[indegree over C->C mid-thread responses] \\\n", + "e6p7yrp 0.666667 \n", + "e5ywqyk 0.750000 \n", + "e5qv9rj 0.444444 \n", + "e6jhojf 1.000000 \n", + "e6989ii 1.000000 \n", + "e69lgse 0.571429 \n", + "e5kwkg2 0.555556 \n", + "e6mehe7 0.666667 \n", + "e6m0hsd 1.000000 \n", + "e64r385 0.714286 \n", + "e5surbt 0.444444 \n", + "e58gxii 0.666667 \n", + "e64vc8y 0.333333 \n", + "e57504g 0.714286 \n", + "e5borjq 0.500000 \n", + "e64n9zv 1.000000 \n", + "e582ud3 0.222222 \n", + "e64i9cf 0.500000 \n", + "e6q9204 0.600000 \n", + "e5modd7 0.333333 \n", + "e5xhbyd 1.000000 \n", + "e5oaf7h 0.666667 \n", + "e6nir3u 1.000000 \n", + "e6c3xdn 0.777778 \n", + "e5d3zaa 0.500000 \n", + "e5gnjv9 0.125000 \n", + "e69gw2t 0.600000 \n", + "e5syrih 0.428571 \n", + "e5sa2yf 1.000000 \n", + "e6ai7z5 1.000000 \n", + "... ... \n", + "e5smhzk 1.000000 \n", + "e5v91s0 0.333333 \n", + "e6n6di6 0.500000 \n", + "e6iqq30 0.333333 \n", + "e5bfad7 0.500000 \n", + "e6x5he5 0.800000 \n", + "e6l9uyf 0.375000 \n", + "e57hyr1 0.666667 \n", + "e5b8sj7 0.250000 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 0.400000 \n", + "e57a6qq 0.600000 \n", + "e5qc7eb 0.500000 \n", + "e6hqt5y 0.250000 \n", + "e5ua84v 0.666667 \n", + "e65m7kq 0.375000 \n", + "e5ggtru 0.375000 \n", + "e5pmmig 1.000000 \n", + "e64l6vq 0.666667 \n", + "e6fjx0d 0.666667 \n", + "e5h3xyy 0.500000 \n", + "e589ri5 0.333333 \n", + "e5beuqa 0.800000 \n", + "e5lqoj1 0.500000 \n", + "e5kvch1 0.666667 \n", + "e6srvwm 0.500000 \n", + "e5o65mk 1.000000 \n", + "e647cm8 0.333333 \n", + "e58n526 0.000000 \n", + "e69r2kg 0.500000 \n", "\n", - " is-present[external reciprocity motif over mid-thread] \\\n", - "e5hm9mp 1.0 \n", - "e5ytz1d 0.0 \n", - "e6ls80j 1.0 \n", - "e5mhgl5 1.0 \n", - "e6w6fah 0.0 \n", - "... ... \n", - "e65ca8k 0.0 \n", - "e6cdkpy 1.0 \n", - "e5wc4tj 0.0 \n", - "e6ua0sb 1.0 \n", - "e5ua84v 1.0 \n", + " prop-nonzero[indegree over C->C responses] \\\n", + "e6p7yrp 0.666667 \n", + "e5ywqyk 0.750000 \n", + "e5qv9rj 0.500000 \n", + "e6jhojf 1.000000 \n", + "e6989ii 1.000000 \n", + "e69lgse 0.571429 \n", + "e5kwkg2 0.600000 \n", + "e6mehe7 0.666667 \n", + "e6m0hsd 1.000000 \n", + "e64r385 0.750000 \n", + "e5surbt 0.500000 \n", + "e58gxii 0.666667 \n", + "e64vc8y 0.400000 \n", + "e57504g 0.750000 \n", + "e5borjq 0.625000 \n", + "e64n9zv 1.000000 \n", + "e582ud3 0.300000 \n", + "e64i9cf 0.500000 \n", + "e6q9204 0.666667 \n", + "e5modd7 0.400000 \n", + "e5xhbyd 1.000000 \n", + "e5oaf7h 0.666667 \n", + "e6nir3u 1.000000 \n", + "e6c3xdn 0.800000 \n", + "e5d3zaa 0.571429 \n", + "e5gnjv9 0.222222 \n", + "e69gw2t 0.800000 \n", + "e5syrih 0.571429 \n", + "e5sa2yf 1.000000 \n", + "e6ai7z5 1.000000 \n", + "... ... \n", + "e5smhzk 1.000000 \n", + "e5v91s0 0.400000 \n", + "e6n6di6 0.555556 \n", + "e6iqq30 0.444444 \n", + "e5bfad7 0.500000 \n", + "e6x5he5 1.000000 \n", + "e6l9uyf 0.444444 \n", + "e57hyr1 0.714286 \n", + "e5b8sj7 0.375000 \n", + "e6nlep7 0.100000 \n", + "e6ltazd 0.500000 \n", + "e57a6qq 0.600000 \n", + "e5qc7eb 0.500000 \n", + "e6hqt5y 0.333333 \n", + "e5ua84v 0.714286 \n", + "e65m7kq 0.444444 \n", + "e5ggtru 0.444444 \n", + "e5pmmig 1.000000 \n", + "e64l6vq 0.666667 \n", + "e6fjx0d 0.750000 \n", + "e5h3xyy 0.555556 \n", + "e589ri5 0.400000 \n", + "e5beuqa 0.833333 \n", + "e5lqoj1 0.571429 \n", + "e5kvch1 0.714286 \n", + "e6srvwm 0.555556 \n", + "e5o65mk 1.000000 \n", + "e647cm8 0.444444 \n", + "e58n526 0.100000 \n", + "e69r2kg 0.625000 \n", "\n", - " count[external reciprocity motif over mid-thread] \\\n", - "e5hm9mp 2.0 \n", - "e5ytz1d 0.0 \n", - "e6ls80j 1.0 \n", - "e5mhgl5 4.0 \n", - "e6w6fah 0.0 \n", - "... ... \n", - "e65ca8k 0.0 \n", - "e6cdkpy 1.0 \n", - "e5wc4tj 0.0 \n", - "e6ua0sb 4.0 \n", - "e5ua84v 2.0 \n", + " prop-nonzero[indegree over C->c mid-thread responses] \\\n", + "e6p7yrp 0.666667 \n", + "e5ywqyk 0.777778 \n", + "e5qv9rj 0.444444 \n", + "e6jhojf 0.777778 \n", + "e6989ii 0.777778 \n", + "e69lgse 0.444444 \n", + "e5kwkg2 0.555556 \n", + "e6mehe7 0.555556 \n", + "e6m0hsd 0.777778 \n", + "e64r385 0.555556 \n", + "e5surbt 0.444444 \n", + "e58gxii 0.555556 \n", + "e64vc8y 0.333333 \n", + "e57504g 0.555556 \n", + "e5borjq 0.444444 \n", + "e64n9zv 0.777778 \n", + "e582ud3 0.222222 \n", + "e64i9cf 0.444444 \n", + "e6q9204 0.666667 \n", + "e5modd7 0.333333 \n", + "e5xhbyd 0.666667 \n", + "e5oaf7h 0.666667 \n", + "e6nir3u 0.777778 \n", + "e6c3xdn 0.777778 \n", + "e5d3zaa 0.555556 \n", + "e5gnjv9 0.111111 \n", + "e69gw2t 0.555556 \n", + "e5syrih 0.555556 \n", + "e5sa2yf 0.888889 \n", + "e6ai7z5 0.666667 \n", + "... ... \n", + "e5smhzk 0.777778 \n", + "e5v91s0 0.333333 \n", + "e6n6di6 0.555556 \n", + "e6iqq30 0.333333 \n", + "e5bfad7 0.444444 \n", + "e6x5he5 0.444444 \n", + "e6l9uyf 0.333333 \n", + "e57hyr1 0.444444 \n", + "e5b8sj7 0.333333 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 0.555556 \n", + "e57a6qq 0.666667 \n", + "e5qc7eb 0.444444 \n", + "e6hqt5y 0.222222 \n", + "e5ua84v 0.555556 \n", + "e65m7kq 0.444444 \n", + "e5ggtru 0.444444 \n", + "e5pmmig 0.777778 \n", + "e64l6vq 0.555556 \n", + "e6fjx0d 0.777778 \n", + "e5h3xyy 0.444444 \n", + "e589ri5 0.333333 \n", + "e5beuqa 0.555556 \n", + "e5lqoj1 0.444444 \n", + "e5kvch1 0.666667 \n", + "e6srvwm 0.444444 \n", + "e5o65mk 0.777778 \n", + "e647cm8 0.333333 \n", + "e58n526 0.000000 \n", + "e69r2kg 0.555556 \n", "\n", - " is-present[dyadic interaction motif over mid-thread] \\\n", - "e5hm9mp 1.0 \n", - "e5ytz1d 0.0 \n", - "e6ls80j 1.0 \n", - "e5mhgl5 1.0 \n", - "e6w6fah 0.0 \n", - "... ... \n", - "e65ca8k 0.0 \n", - "e6cdkpy 0.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 1.0 \n", - "e5ua84v 1.0 \n", + " prop-nonzero[indegree over C->c responses] \\\n", + "e6p7yrp 0.7 \n", + "e5ywqyk 0.8 \n", + "e5qv9rj 0.5 \n", + "e6jhojf 0.8 \n", + "e6989ii 0.8 \n", + "e69lgse 0.5 \n", + "e5kwkg2 0.6 \n", + "e6mehe7 0.6 \n", + "e6m0hsd 0.8 \n", + "e64r385 0.6 \n", + "e5surbt 0.5 \n", + "e58gxii 0.6 \n", + "e64vc8y 0.4 \n", + "e57504g 0.6 \n", + "e5borjq 0.5 \n", + "e64n9zv 0.8 \n", + "e582ud3 0.3 \n", + "e64i9cf 0.5 \n", + "e6q9204 0.7 \n", + "e5modd7 0.4 \n", + "e5xhbyd 0.7 \n", + "e5oaf7h 0.7 \n", + "e6nir3u 0.8 \n", + "e6c3xdn 0.8 \n", + "e5d3zaa 0.6 \n", + "e5gnjv9 0.2 \n", + "e69gw2t 0.6 \n", + "e5syrih 0.6 \n", + "e5sa2yf 0.9 \n", + "e6ai7z5 0.7 \n", + "... ... \n", + "e5smhzk 0.8 \n", + "e5v91s0 0.4 \n", + "e6n6di6 0.6 \n", + "e6iqq30 0.4 \n", + "e5bfad7 0.5 \n", + "e6x5he5 0.5 \n", + "e6l9uyf 0.4 \n", + "e57hyr1 0.5 \n", + "e5b8sj7 0.4 \n", + "e6nlep7 0.1 \n", + "e6ltazd 0.6 \n", + "e57a6qq 0.7 \n", + "e5qc7eb 0.5 \n", + "e6hqt5y 0.3 \n", + "e5ua84v 0.6 \n", + "e65m7kq 0.5 \n", + "e5ggtru 0.5 \n", + "e5pmmig 0.8 \n", + "e64l6vq 0.6 \n", + "e6fjx0d 0.8 \n", + "e5h3xyy 0.5 \n", + "e589ri5 0.4 \n", + "e5beuqa 0.6 \n", + "e5lqoj1 0.5 \n", + "e5kvch1 0.7 \n", + "e6srvwm 0.5 \n", + "e5o65mk 0.8 \n", + "e647cm8 0.4 \n", + "e58n526 0.1 \n", + "e69r2kg 0.6 \n", "\n", - " count[dyadic interaction motif over mid-thread] \\\n", - "e5hm9mp 2.0 \n", - "e5ytz1d 0.0 \n", - "e6ls80j 1.0 \n", - "e5mhgl5 1.0 \n", - "e6w6fah 0.0 \n", - "... ... \n", - "e65ca8k 0.0 \n", - "e6cdkpy 0.0 \n", - "e5wc4tj 1.0 \n", - "e6ua0sb 2.0 \n", - "e5ua84v 3.0 \n", + " prop-nonzero[indegree over c->c mid-thread responses] \\\n", + "e6p7yrp 0.666667 \n", + "e5ywqyk 0.777778 \n", + "e5qv9rj 0.444444 \n", + "e6jhojf 0.777778 \n", + "e6989ii 0.777778 \n", + "e69lgse 0.444444 \n", + "e5kwkg2 0.555556 \n", + "e6mehe7 0.555556 \n", + "e6m0hsd 0.777778 \n", + "e64r385 0.555556 \n", + "e5surbt 0.444444 \n", + "e58gxii 0.555556 \n", + "e64vc8y 0.333333 \n", + "e57504g 0.555556 \n", + "e5borjq 0.444444 \n", + "e64n9zv 0.777778 \n", + "e582ud3 0.222222 \n", + "e64i9cf 0.444444 \n", + "e6q9204 0.666667 \n", + "e5modd7 0.333333 \n", + "e5xhbyd 0.666667 \n", + "e5oaf7h 0.666667 \n", + "e6nir3u 0.777778 \n", + "e6c3xdn 0.777778 \n", + "e5d3zaa 0.555556 \n", + "e5gnjv9 0.111111 \n", + "e69gw2t 0.555556 \n", + "e5syrih 0.555556 \n", + "e5sa2yf 0.888889 \n", + "e6ai7z5 0.666667 \n", + "... ... \n", + "e5smhzk 0.777778 \n", + "e5v91s0 0.333333 \n", + "e6n6di6 0.555556 \n", + "e6iqq30 0.333333 \n", + "e5bfad7 0.444444 \n", + "e6x5he5 0.444444 \n", + "e6l9uyf 0.333333 \n", + "e57hyr1 0.444444 \n", + "e5b8sj7 0.333333 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 0.555556 \n", + "e57a6qq 0.666667 \n", + "e5qc7eb 0.444444 \n", + "e6hqt5y 0.222222 \n", + "e5ua84v 0.555556 \n", + "e65m7kq 0.444444 \n", + "e5ggtru 0.444444 \n", + "e5pmmig 0.777778 \n", + "e64l6vq 0.555556 \n", + "e6fjx0d 0.777778 \n", + "e5h3xyy 0.444444 \n", + "e589ri5 0.333333 \n", + "e5beuqa 0.555556 \n", + "e5lqoj1 0.444444 \n", + "e5kvch1 0.666667 \n", + "e6srvwm 0.444444 \n", + "e5o65mk 0.777778 \n", + "e647cm8 0.333333 \n", + "e58n526 0.000000 \n", + "e69r2kg 0.555556 \n", "\n", - " is-present[incoming triads over mid-thread] \\\n", - "e5hm9mp 1.0 \n", - "e5ytz1d 1.0 \n", - "e6ls80j 1.0 \n", - "e5mhgl5 1.0 \n", - "e6w6fah 0.0 \n", - "... ... \n", - "e65ca8k 0.0 \n", - "e6cdkpy 1.0 \n", - "e5wc4tj 0.0 \n", - "e6ua0sb 1.0 \n", - "e5ua84v 1.0 \n", + " prop-nonzero[indegree over c->c responses] \\\n", + "e6p7yrp 0.7 \n", + "e5ywqyk 0.8 \n", + "e5qv9rj 0.5 \n", + "e6jhojf 0.8 \n", + "e6989ii 0.8 \n", + "e69lgse 0.5 \n", + "e5kwkg2 0.6 \n", + "e6mehe7 0.6 \n", + "e6m0hsd 0.8 \n", + "e64r385 0.6 \n", + "e5surbt 0.5 \n", + "e58gxii 0.6 \n", + "e64vc8y 0.4 \n", + "e57504g 0.6 \n", + "e5borjq 0.5 \n", + "e64n9zv 0.8 \n", + "e582ud3 0.3 \n", + "e64i9cf 0.5 \n", + "e6q9204 0.7 \n", + "e5modd7 0.4 \n", + "e5xhbyd 0.7 \n", + "e5oaf7h 0.7 \n", + "e6nir3u 0.8 \n", + "e6c3xdn 0.8 \n", + "e5d3zaa 0.6 \n", + "e5gnjv9 0.2 \n", + "e69gw2t 0.6 \n", + "e5syrih 0.6 \n", + "e5sa2yf 0.9 \n", + "e6ai7z5 0.7 \n", + "... ... \n", + "e5smhzk 0.8 \n", + "e5v91s0 0.4 \n", + "e6n6di6 0.6 \n", + "e6iqq30 0.4 \n", + "e5bfad7 0.5 \n", + "e6x5he5 0.5 \n", + "e6l9uyf 0.4 \n", + "e57hyr1 0.5 \n", + "e5b8sj7 0.4 \n", + "e6nlep7 0.1 \n", + "e6ltazd 0.6 \n", + "e57a6qq 0.7 \n", + "e5qc7eb 0.5 \n", + "e6hqt5y 0.3 \n", + "e5ua84v 0.6 \n", + "e65m7kq 0.5 \n", + "e5ggtru 0.5 \n", + "e5pmmig 0.8 \n", + "e64l6vq 0.6 \n", + "e6fjx0d 0.8 \n", + "e5h3xyy 0.5 \n", + "e589ri5 0.4 \n", + "e5beuqa 0.6 \n", + "e5lqoj1 0.5 \n", + "e5kvch1 0.7 \n", + "e6srvwm 0.5 \n", + "e5o65mk 0.8 \n", + "e647cm8 0.4 \n", + "e58n526 0.1 \n", + "e69r2kg 0.6 \n", "\n", - " count[incoming triads over mid-thread] \\\n", - "e5hm9mp 3.0 \n", - "e5ytz1d 4.0 \n", - "e6ls80j 3.0 \n", - "e5mhgl5 2.0 \n", - "e6w6fah 0.0 \n", - "... ... \n", - "e65ca8k 0.0 \n", - "e6cdkpy 2.0 \n", - "e5wc4tj 0.0 \n", - "e6ua0sb 6.0 \n", - "e5ua84v 7.0 \n", + " prop-nonzero[outdegree over C->C mid-thread responses] \\\n", + "e6p7yrp 0.666667 \n", + "e5ywqyk 0.750000 \n", + "e5qv9rj 0.666667 \n", + "e6jhojf 0.800000 \n", + "e6989ii 1.000000 \n", + "e69lgse 0.714286 \n", + "e5kwkg2 0.666667 \n", + "e6mehe7 0.500000 \n", + "e6m0hsd 1.000000 \n", + "e64r385 0.857143 \n", + "e5surbt 0.444444 \n", + "e58gxii 0.833333 \n", + "e64vc8y 0.333333 \n", + "e57504g 0.857143 \n", + "e5borjq 0.875000 \n", + "e64n9zv 1.000000 \n", + "e582ud3 0.333333 \n", + "e64i9cf 0.500000 \n", + "e6q9204 1.000000 \n", + "e5modd7 0.888889 \n", + "e5xhbyd 1.000000 \n", + "e5oaf7h 1.000000 \n", + "e6nir3u 1.000000 \n", + "e6c3xdn 0.888889 \n", + "e5d3zaa 0.833333 \n", + "e5gnjv9 0.125000 \n", + "e69gw2t 0.800000 \n", + "e5syrih 1.000000 \n", + "e5sa2yf 1.000000 \n", + "e6ai7z5 0.600000 \n", + "... ... \n", + "e5smhzk 0.666667 \n", + "e5v91s0 0.444444 \n", + "e6n6di6 0.875000 \n", + "e6iqq30 0.333333 \n", + "e5bfad7 0.625000 \n", + "e6x5he5 0.200000 \n", + "e6l9uyf 0.500000 \n", + "e57hyr1 0.833333 \n", + "e5b8sj7 0.750000 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 1.000000 \n", + "e57a6qq 1.000000 \n", + "e5qc7eb 1.000000 \n", + "e6hqt5y 0.625000 \n", + "e5ua84v 1.000000 \n", + "e65m7kq 0.625000 \n", + "e5ggtru 1.000000 \n", + "e5pmmig 1.000000 \n", + "e64l6vq 0.666667 \n", + "e6fjx0d 0.666667 \n", + "e5h3xyy 0.625000 \n", + "e589ri5 0.333333 \n", + "e5beuqa 1.000000 \n", + "e5lqoj1 0.333333 \n", + "e5kvch1 0.833333 \n", + "e6srvwm 0.750000 \n", + "e5o65mk 1.000000 \n", + "e647cm8 0.555556 \n", + "e58n526 0.000000 \n", + "e69r2kg 0.750000 \n", "\n", - " is-present[outgoing triads over mid-thread] \\\n", - "e5hm9mp 1.0 \n", - "e5ytz1d 0.0 \n", - "e6ls80j 1.0 \n", - "e5mhgl5 1.0 \n", - "e6w6fah 0.0 \n", + " prop-nonzero[outdegree over C->C responses] \\\n", + "e6p7yrp 1.000000 \n", + "e5ywqyk 1.000000 \n", + "e5qv9rj 0.900000 \n", + "e6jhojf 1.000000 \n", + "e6989ii 1.000000 \n", + "e69lgse 1.000000 \n", + "e5kwkg2 0.900000 \n", + "e6mehe7 1.000000 \n", + "e6m0hsd 1.000000 \n", + "e64r385 0.875000 \n", + "e5surbt 0.900000 \n", + "e58gxii 1.000000 \n", + "e64vc8y 0.900000 \n", + "e57504g 0.875000 \n", + "e5borjq 1.000000 \n", + "e64n9zv 1.000000 \n", + "e582ud3 0.900000 \n", + "e64i9cf 1.000000 \n", + "e6q9204 0.833333 \n", + "e5modd7 0.900000 \n", + "e5xhbyd 1.000000 \n", + "e5oaf7h 1.000000 \n", + "e6nir3u 1.000000 \n", + "e6c3xdn 0.900000 \n", + "e5d3zaa 0.857143 \n", + "e5gnjv9 0.888889 \n", + "e69gw2t 1.000000 \n", + "e5syrih 1.000000 \n", + "e5sa2yf 1.000000 \n", + "e6ai7z5 1.000000 \n", "... ... \n", - "e65ca8k 0.0 \n", - "e6cdkpy 0.0 \n", - "e5wc4tj 0.0 \n", - "e6ua0sb 1.0 \n", - "e5ua84v 1.0 \n", + "e5smhzk 1.000000 \n", + "e5v91s0 0.900000 \n", + "e6n6di6 0.888889 \n", + "e6iqq30 1.000000 \n", + "e5bfad7 1.000000 \n", + "e6x5he5 1.000000 \n", + "e6l9uyf 0.888889 \n", + "e57hyr1 0.857143 \n", + "e5b8sj7 1.000000 \n", + "e6nlep7 0.900000 \n", + "e6ltazd 0.833333 \n", + "e57a6qq 1.000000 \n", + "e5qc7eb 1.000000 \n", + "e6hqt5y 0.888889 \n", + "e5ua84v 0.857143 \n", + "e65m7kq 0.888889 \n", + "e5ggtru 0.888889 \n", + "e5pmmig 0.800000 \n", + "e64l6vq 1.000000 \n", + "e6fjx0d 0.750000 \n", + "e5h3xyy 0.888889 \n", + "e589ri5 0.900000 \n", + "e5beuqa 0.833333 \n", + "e5lqoj1 0.857143 \n", + "e5kvch1 0.857143 \n", + "e6srvwm 0.888889 \n", + "e5o65mk 1.000000 \n", + "e647cm8 1.000000 \n", + "e58n526 0.900000 \n", + "e69r2kg 1.000000 \n", "\n", - " count[outgoing triads over mid-thread] \n", - "e5hm9mp 3.0 \n", - "e5ytz1d 0.0 \n", - "e6ls80j 1.0 \n", - "e5mhgl5 1.0 \n", - "e6w6fah 0.0 \n", - "... ... \n", - "e65ca8k 0.0 \n", - "e6cdkpy 0.0 \n", - "e5wc4tj 0.0 \n", - "e6ua0sb 2.0 \n", - "e5ua84v 2.0 \n", + " prop-nonzero[outdegree over C->c mid-thread responses] \\\n", + "e6p7yrp 0.666667 \n", + "e5ywqyk 0.750000 \n", + "e5qv9rj 0.666667 \n", + "e6jhojf 0.800000 \n", + "e6989ii 1.000000 \n", + "e69lgse 0.714286 \n", + "e5kwkg2 0.666667 \n", + "e6mehe7 0.500000 \n", + "e6m0hsd 1.000000 \n", + "e64r385 0.857143 \n", + "e5surbt 0.444444 \n", + "e58gxii 0.833333 \n", + "e64vc8y 0.333333 \n", + "e57504g 0.857143 \n", + "e5borjq 0.875000 \n", + "e64n9zv 1.000000 \n", + "e582ud3 0.333333 \n", + "e64i9cf 0.500000 \n", + "e6q9204 1.000000 \n", + "e5modd7 0.888889 \n", + "e5xhbyd 1.000000 \n", + "e5oaf7h 1.000000 \n", + "e6nir3u 1.000000 \n", + "e6c3xdn 0.888889 \n", + "e5d3zaa 0.833333 \n", + "e5gnjv9 0.125000 \n", + "e69gw2t 0.800000 \n", + "e5syrih 1.000000 \n", + "e5sa2yf 1.000000 \n", + "e6ai7z5 0.600000 \n", + "... ... \n", + "e5smhzk 0.666667 \n", + "e5v91s0 0.444444 \n", + "e6n6di6 0.875000 \n", + "e6iqq30 0.333333 \n", + "e5bfad7 0.625000 \n", + "e6x5he5 0.200000 \n", + "e6l9uyf 0.500000 \n", + "e57hyr1 0.833333 \n", + "e5b8sj7 0.750000 \n", + "e6nlep7 0.000000 \n", + "e6ltazd 1.000000 \n", + "e57a6qq 1.000000 \n", + "e5qc7eb 1.000000 \n", + "e6hqt5y 0.625000 \n", + "e5ua84v 1.000000 \n", + "e65m7kq 0.625000 \n", + "e5ggtru 1.000000 \n", + "e5pmmig 1.000000 \n", + "e64l6vq 0.666667 \n", + "e6fjx0d 0.666667 \n", + "e5h3xyy 0.625000 \n", + "e589ri5 0.333333 \n", + "e5beuqa 1.000000 \n", + "e5lqoj1 0.333333 \n", + "e5kvch1 0.833333 \n", + "e6srvwm 0.750000 \n", + "e5o65mk 1.000000 \n", + "e647cm8 0.555556 \n", + "e58n526 0.000000 \n", + "e69r2kg 0.750000 \n", + "\n", + " prop-nonzero[outdegree over C->c responses] \n", + "e6p7yrp 1.000000 \n", + "e5ywqyk 1.000000 \n", + "e5qv9rj 0.900000 \n", + "e6jhojf 1.000000 \n", + "e6989ii 1.000000 \n", + "e69lgse 1.000000 \n", + "e5kwkg2 0.900000 \n", + "e6mehe7 1.000000 \n", + "e6m0hsd 1.000000 \n", + "e64r385 0.875000 \n", + "e5surbt 0.900000 \n", + "e58gxii 1.000000 \n", + "e64vc8y 0.900000 \n", + "e57504g 0.875000 \n", + "e5borjq 1.000000 \n", + "e64n9zv 1.000000 \n", + "e582ud3 0.900000 \n", + "e64i9cf 1.000000 \n", + "e6q9204 0.833333 \n", + "e5modd7 0.900000 \n", + "e5xhbyd 1.000000 \n", + "e5oaf7h 1.000000 \n", + "e6nir3u 1.000000 \n", + "e6c3xdn 0.900000 \n", + "e5d3zaa 0.857143 \n", + "e5gnjv9 0.888889 \n", + "e69gw2t 1.000000 \n", + "e5syrih 1.000000 \n", + "e5sa2yf 1.000000 \n", + "e6ai7z5 1.000000 \n", + "... ... \n", + "e5smhzk 1.000000 \n", + "e5v91s0 0.900000 \n", + "e6n6di6 0.888889 \n", + "e6iqq30 1.000000 \n", + "e5bfad7 1.000000 \n", + "e6x5he5 1.000000 \n", + "e6l9uyf 0.888889 \n", + "e57hyr1 0.857143 \n", + "e5b8sj7 1.000000 \n", + "e6nlep7 0.900000 \n", + "e6ltazd 0.833333 \n", + "e57a6qq 1.000000 \n", + "e5qc7eb 1.000000 \n", + "e6hqt5y 0.888889 \n", + "e5ua84v 0.857143 \n", + "e65m7kq 0.888889 \n", + "e5ggtru 0.888889 \n", + "e5pmmig 0.800000 \n", + "e64l6vq 1.000000 \n", + "e6fjx0d 0.750000 \n", + "e5h3xyy 0.888889 \n", + "e589ri5 0.900000 \n", + "e5beuqa 0.833333 \n", + "e5lqoj1 0.857143 \n", + "e5kvch1 0.857143 \n", + "e6srvwm 0.888889 \n", + "e5o65mk 1.000000 \n", + "e647cm8 1.000000 \n", + "e58n526 0.900000 \n", + "e69r2kg 1.000000 \n", "\n", "[10000 rows x 140 columns]" ] }, - "execution_count": 21, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "threads_corpus.get_vector_matrix(\"hyperconvo\").to_dataframe()" + "threads_corpus.get_vector_matrix('hyperconvo').to_dataframe()" ] }, { @@ -4752,16 +18766,16 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 28, "metadata": {}, "outputs": [], "source": [ - "df = threads_corpus.get_vector_matrix(\"hyperconvo\").to_dataframe()" + "df = threads_corpus.get_vector_matrix('hyperconvo').to_dataframe()" ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 40, "metadata": {}, "outputs": [], "source": [ @@ -4771,7 +18785,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 43, "metadata": {}, "outputs": [], "source": [ @@ -4780,25 +18794,25 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['max[indegree over c->c responses]',\n", - " 'argmax[indegree over c->c responses]',\n", - " 'norm.max[indegree over c->c responses]',\n", - " '2nd-largest[indegree over c->c responses]',\n", + "['2nd-argmax[indegree over C->C mid-thread responses]',\n", + " '2nd-argmax[indegree over C->C responses]',\n", + " '2nd-argmax[indegree over C->c mid-thread responses]',\n", + " '2nd-argmax[indegree over C->c responses]',\n", + " '2nd-argmax[indegree over c->c mid-thread responses]',\n", " '2nd-argmax[indegree over c->c responses]',\n", - " 'norm.2nd-largest[indegree over c->c responses]',\n", - " 'mean[indegree over c->c responses]',\n", - " 'mean-nonzero[indegree over c->c responses]',\n", - " 'prop-nonzero[indegree over c->c responses]',\n", - " 'prop-multiple[indegree over c->c responses]']" + " '2nd-argmax[outdegree over C->C mid-thread responses]',\n", + " '2nd-argmax[outdegree over C->C responses]',\n", + " '2nd-argmax[outdegree over C->c mid-thread responses]',\n", + " '2nd-argmax[outdegree over C->c responses]']" ] }, - "execution_count": 25, + "execution_count": 44, "metadata": {}, "output_type": "execute_result" } @@ -4816,38 +18830,38 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 45, "metadata": {}, "outputs": [], "source": [ - "C_C_indegree_feats = [x for x in feat_names if \"indegree over C->C responses\" in x]\n", - "C_C_mid_outdegree_feats = [x for x in feat_names if \"outdegree over C->C mid-thread responses\" in x]\n", - "motif_count_feats = [x for x in feat_names if (\"count\" in x) and (\"mid\" not in x)]" + "C_C_indegree_feats = [x for x in feat_names if 'indegree over C->C responses' in x]\n", + "C_C_mid_outdegree_feats = [x for x in feat_names if 'outdegree over C->C mid-thread responses' in x]\n", + "motif_count_feats = [x for x in feat_names if ('count' in x) and ('mid' not in x)]" ] }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['max[indegree over C->C responses]',\n", - " 'argmax[indegree over C->C responses]',\n", - " 'norm.max[indegree over C->C responses]',\n", + "['2nd-argmax[indegree over C->C responses]',\n", + " '2nd-largest / max[indegree over C->C responses]',\n", " '2nd-largest[indegree over C->C responses]',\n", - " '2nd-argmax[indegree over C->C responses]',\n", - " 'norm.2nd-largest[indegree over C->C responses]',\n", - " 'mean[indegree over C->C responses]',\n", + " 'argmax[indegree over C->C responses]',\n", + " 'entropy[indegree over C->C responses]',\n", + " 'max[indegree over C->C responses]',\n", " 'mean-nonzero[indegree over C->C responses]',\n", - " 'prop-nonzero[indegree over C->C responses]',\n", + " 'mean[indegree over C->C responses]',\n", + " 'norm.2nd-largest[indegree over C->C responses]',\n", + " 'norm.max[indegree over C->C responses]',\n", " 'prop-multiple[indegree over C->C responses]',\n", - " 'entropy[indegree over C->C responses]',\n", - " '2nd-largest / max[indegree over C->C responses]']" + " 'prop-nonzero[indegree over C->C responses]']" ] }, - "execution_count": 27, + "execution_count": 48, "metadata": {}, "output_type": "execute_result" } @@ -4858,20 +18872,20 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['count[reciprocity motif]',\n", + "['count[dyadic interaction motif]',\n", " 'count[external reciprocity motif]',\n", - " 'count[dyadic interaction motif]',\n", " 'count[incoming triads]',\n", - " 'count[outgoing triads]']" + " 'count[outgoing triads]',\n", + " 'count[reciprocity motif]']" ] }, - "execution_count": 28, + "execution_count": 49, "metadata": {}, "output_type": "execute_result" } @@ -4893,7 +18907,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 51, "metadata": { "scrolled": true }, @@ -5004,7 +19018,7 @@ "prop-nonzero[indegree over C->C responses] 0.666667 1.000000" ] }, - "execution_count": 29, + "execution_count": 51, "metadata": {}, "output_type": "execute_result" } @@ -5022,7 +19036,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 52, "metadata": {}, "outputs": [ { @@ -5131,7 +19145,7 @@ "prop-nonzero[outdegree over C->C mid-thread res... 0.833333 1.000000" ] }, - "execution_count": 30, + "execution_count": 52, "metadata": {}, "output_type": "execute_result" } @@ -5149,7 +19163,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 53, "metadata": {}, "outputs": [ { @@ -5216,7 +19230,7 @@ "count[reciprocity motif] 3.0 8.0" ] }, - "execution_count": 31, + "execution_count": 53, "metadata": {}, "output_type": "execute_result" } @@ -5234,7 +19248,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 54, "metadata": {}, "outputs": [], "source": [ @@ -5247,7 +19261,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 55, "metadata": {}, "outputs": [], "source": [ @@ -5257,20 +19271,20 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 56, "metadata": {}, "outputs": [], "source": [ - "svd = TruncatedSVD(\n", - " n_components=7, algorithm=\"arpack\"\n", - ") # deals with an issue where the randomized alg hangs\n", + "svd = TruncatedSVD(n_components=7, algorithm='arpack') # deals with an issue where the randomized alg hangs\n", "svd.fit(feat_mtx)\n", - "U, s, V = svd.transform(feat_mtx) / svd.singular_values_, svd.singular_values_, svd.components_.T" + "U, s, V = svd.transform(feat_mtx) / svd.singular_values_, \\\n", + " svd.singular_values_, \\\n", + " svd.components_.T" ] }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 58, "metadata": {}, "outputs": [], "source": [ @@ -5289,7 +19303,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 59, "metadata": {}, "outputs": [ { @@ -5368,7 +19382,7 @@ "6 -0.605281 0.017527" ] }, - "execution_count": 36, + "execution_count": 59, "metadata": {}, "output_type": "execute_result" } @@ -5386,7 +19400,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 60, "metadata": {}, "outputs": [ { @@ -5418,17 +19432,37 @@ " 5\n", " 6\n", " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " 2nd-argmax[indegree over C->C responses]\n", + " 0.139340\n", + " 0.113322\n", + " 0.106261\n", + " -0.316196\n", + " 0.261848\n", + " 0.887307\n", + " -0.024356\n", + " \n", + " \n", + " 2nd-largest / max[indegree over C->C responses]\n", + " -0.189063\n", + " -0.433123\n", + " -0.472973\n", + " -0.252028\n", + " 0.338874\n", + " 0.598865\n", + " 0.126351\n", + " \n", " \n", - " max[indegree over C->C responses]\n", - " 0.574040\n", - " 0.331249\n", - " 0.451891\n", - " 0.298591\n", - " -0.098847\n", - " -0.345627\n", - " -0.371700\n", + " 2nd-largest[indegree over C->C responses]\n", + " 0.264775\n", + " -0.595095\n", + " -0.177363\n", + " -0.032607\n", + " 0.369844\n", + " 0.636419\n", + " 0.037712\n", " \n", " \n", " argmax[indegree over C->C responses]\n", @@ -5441,44 +19475,34 @@ " 0.001900\n", " \n", " \n", - " norm.max[indegree over C->C responses]\n", - " 0.136265\n", - " 0.633611\n", - " -0.054505\n", - " 0.660700\n", - " 0.089491\n", - " -0.360409\n", - " -0.050698\n", - " \n", - " \n", - " 2nd-largest[indegree over C->C responses]\n", - " 0.264775\n", - " -0.595095\n", - " -0.177363\n", - " -0.032607\n", - " 0.369844\n", - " 0.636419\n", - " 0.037712\n", + " entropy[indegree over C->C responses]\n", + " -0.001602\n", + " -0.493754\n", + " 0.383985\n", + " -0.657503\n", + " -0.376240\n", + " 0.178189\n", + " 0.056053\n", " \n", " \n", - " 2nd-argmax[indegree over C->C responses]\n", - " 0.139340\n", - " 0.113322\n", - " 0.106261\n", - " -0.316196\n", - " 0.261848\n", - " 0.887307\n", - " -0.024356\n", + " max[indegree over C->C responses]\n", + " 0.574040\n", + " 0.331249\n", + " 0.451891\n", + " 0.298591\n", + " -0.098847\n", + " -0.345627\n", + " -0.371700\n", " \n", " \n", - " norm.2nd-largest[indegree over C->C responses]\n", - " -0.206815\n", - " -0.210187\n", - " -0.667660\n", - " 0.126509\n", - " 0.418324\n", - " 0.523214\n", - " 0.050272\n", + " mean-nonzero[indegree over C->C responses]\n", + " 0.561474\n", + " 0.246293\n", + " 0.073209\n", + " 0.492266\n", + " 0.272666\n", + " -0.249315\n", + " -0.489793\n", " \n", " \n", " mean[indegree over C->C responses]\n", @@ -5491,24 +19515,24 @@ " -0.522766\n", " \n", " \n", - " mean-nonzero[indegree over C->C responses]\n", - " 0.561474\n", - " 0.246293\n", - " 0.073209\n", - " 0.492266\n", - " 0.272666\n", - " -0.249315\n", - " -0.489793\n", + " norm.2nd-largest[indegree over C->C responses]\n", + " -0.206815\n", + " -0.210187\n", + " -0.667660\n", + " 0.126509\n", + " 0.418324\n", + " 0.523214\n", + " 0.050272\n", " \n", " \n", - " prop-nonzero[indegree over C->C responses]\n", - " -0.945359\n", - " -0.101535\n", - " 0.238357\n", - " -0.078078\n", - " -0.107471\n", - " 0.146344\n", - " -0.010486\n", + " norm.max[indegree over C->C responses]\n", + " 0.136265\n", + " 0.633611\n", + " -0.054505\n", + " 0.660700\n", + " 0.089491\n", + " -0.360409\n", + " -0.050698\n", " \n", " \n", " prop-multiple[indegree over C->C responses]\n", @@ -5521,24 +19545,14 @@ " -0.415719\n", " \n", " \n", - " entropy[indegree over C->C responses]\n", - " -0.001602\n", - " -0.493754\n", - " 0.383985\n", - " -0.657503\n", - " -0.376240\n", - " 0.178189\n", - " 0.056053\n", - " \n", - " \n", - " 2nd-largest / max[indegree over C->C responses]\n", - " -0.189063\n", - " -0.433123\n", - " -0.472973\n", - " -0.252028\n", - " 0.338874\n", - " 0.598865\n", - " 0.126351\n", + " prop-nonzero[indegree over C->C responses]\n", + " -0.945359\n", + " -0.101535\n", + " 0.238357\n", + " -0.078078\n", + " -0.107471\n", + " 0.146344\n", + " -0.010486\n", " \n", " \n", "\n", @@ -5546,49 +19560,49 @@ ], "text/plain": [ " 0 1 2 \\\n", - "max[indegree over C->C responses] 0.574040 0.331249 0.451891 \n", - "argmax[indegree over C->C responses] 0.021994 -0.548696 -0.072024 \n", - "norm.max[indegree over C->C responses] 0.136265 0.633611 -0.054505 \n", - "2nd-largest[indegree over C->C responses] 0.264775 -0.595095 -0.177363 \n", "2nd-argmax[indegree over C->C responses] 0.139340 0.113322 0.106261 \n", - "norm.2nd-largest[indegree over C->C responses] -0.206815 -0.210187 -0.667660 \n", - "mean[indegree over C->C responses] -0.303707 -0.230767 0.639219 \n", + "2nd-largest / max[indegree over C->C responses] -0.189063 -0.433123 -0.472973 \n", + "2nd-largest[indegree over C->C responses] 0.264775 -0.595095 -0.177363 \n", + "argmax[indegree over C->C responses] 0.021994 -0.548696 -0.072024 \n", + "entropy[indegree over C->C responses] -0.001602 -0.493754 0.383985 \n", + "max[indegree over C->C responses] 0.574040 0.331249 0.451891 \n", "mean-nonzero[indegree over C->C responses] 0.561474 0.246293 0.073209 \n", - "prop-nonzero[indegree over C->C responses] -0.945359 -0.101535 0.238357 \n", + "mean[indegree over C->C responses] -0.303707 -0.230767 0.639219 \n", + "norm.2nd-largest[indegree over C->C responses] -0.206815 -0.210187 -0.667660 \n", + "norm.max[indegree over C->C responses] 0.136265 0.633611 -0.054505 \n", "prop-multiple[indegree over C->C responses] 0.355365 -0.438412 -0.063833 \n", - "entropy[indegree over C->C responses] -0.001602 -0.493754 0.383985 \n", - "2nd-largest / max[indegree over C->C responses] -0.189063 -0.433123 -0.472973 \n", + "prop-nonzero[indegree over C->C responses] -0.945359 -0.101535 0.238357 \n", "\n", " 3 4 5 \\\n", - "max[indegree over C->C responses] 0.298591 -0.098847 -0.345627 \n", - "argmax[indegree over C->C responses] 0.348774 -0.487366 -0.578004 \n", - "norm.max[indegree over C->C responses] 0.660700 0.089491 -0.360409 \n", - "2nd-largest[indegree over C->C responses] -0.032607 0.369844 0.636419 \n", "2nd-argmax[indegree over C->C responses] -0.316196 0.261848 0.887307 \n", - "norm.2nd-largest[indegree over C->C responses] 0.126509 0.418324 0.523214 \n", - "mean[indegree over C->C responses] 0.266533 0.317526 -0.027597 \n", + "2nd-largest / max[indegree over C->C responses] -0.252028 0.338874 0.598865 \n", + "2nd-largest[indegree over C->C responses] -0.032607 0.369844 0.636419 \n", + "argmax[indegree over C->C responses] 0.348774 -0.487366 -0.578004 \n", + "entropy[indegree over C->C responses] -0.657503 -0.376240 0.178189 \n", + "max[indegree over C->C responses] 0.298591 -0.098847 -0.345627 \n", "mean-nonzero[indegree over C->C responses] 0.492266 0.272666 -0.249315 \n", - "prop-nonzero[indegree over C->C responses] -0.078078 -0.107471 0.146344 \n", + "mean[indegree over C->C responses] 0.266533 0.317526 -0.027597 \n", + "norm.2nd-largest[indegree over C->C responses] 0.126509 0.418324 0.523214 \n", + "norm.max[indegree over C->C responses] 0.660700 0.089491 -0.360409 \n", "prop-multiple[indegree over C->C responses] 0.156168 0.692934 -0.008221 \n", - "entropy[indegree over C->C responses] -0.657503 -0.376240 0.178189 \n", - "2nd-largest / max[indegree over C->C responses] -0.252028 0.338874 0.598865 \n", + "prop-nonzero[indegree over C->C responses] -0.078078 -0.107471 0.146344 \n", "\n", " 6 \n", - "max[indegree over C->C responses] -0.371700 \n", - "argmax[indegree over C->C responses] 0.001900 \n", - "norm.max[indegree over C->C responses] -0.050698 \n", - "2nd-largest[indegree over C->C responses] 0.037712 \n", "2nd-argmax[indegree over C->C responses] -0.024356 \n", - "norm.2nd-largest[indegree over C->C responses] 0.050272 \n", - "mean[indegree over C->C responses] -0.522766 \n", + "2nd-largest / max[indegree over C->C responses] 0.126351 \n", + "2nd-largest[indegree over C->C responses] 0.037712 \n", + "argmax[indegree over C->C responses] 0.001900 \n", + "entropy[indegree over C->C responses] 0.056053 \n", + "max[indegree over C->C responses] -0.371700 \n", "mean-nonzero[indegree over C->C responses] -0.489793 \n", - "prop-nonzero[indegree over C->C responses] -0.010486 \n", + "mean[indegree over C->C responses] -0.522766 \n", + "norm.2nd-largest[indegree over C->C responses] 0.050272 \n", + "norm.max[indegree over C->C responses] -0.050698 \n", "prop-multiple[indegree over C->C responses] -0.415719 \n", - "entropy[indegree over C->C responses] 0.056053 \n", - "2nd-largest / max[indegree over C->C responses] 0.126351 " + "prop-nonzero[indegree over C->C responses] -0.010486 " ] }, - "execution_count": 37, + "execution_count": 60, "metadata": {}, "output_type": "execute_result" } @@ -5606,18 +19620,16 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 62, "metadata": {}, "outputs": [], "source": [ - "subreddits = [\n", - " convo.meta[\"original_convo_meta\"][\"subreddit\"] for convo in threads_corpus.iter_conversations()\n", - "]" + "subreddits = [convo.meta['original_convo_meta']['subreddit'] for convo in threads_corpus.iter_conversations()]" ] }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 63, "metadata": {}, "outputs": [ { @@ -5626,7 +19638,7 @@ "10000" ] }, - "execution_count": 39, + "execution_count": 63, "metadata": {}, "output_type": "execute_result" } @@ -5637,28 +19649,29 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 64, "metadata": {}, "outputs": [], "source": [ - "U_df[\"subreddit\"] = subreddits" + "U_df['subreddit'] = subreddits" ] }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 65, "metadata": {}, "outputs": [], "source": [ - "subreddit_means = U_df.groupby(\"subreddit\").mean()\n", + "subreddit_means = U_df.groupby('subreddit').mean()\n", "subreddit_df = pd.DataFrame(\n", - " data=Normalizer().fit_transform(subreddit_means.values), index=subreddit_means.index\n", - ")" + " data=Normalizer().fit_transform(subreddit_means.values),\n", + " index = subreddit_means.index\n", + " )" ] }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 66, "metadata": {}, "outputs": [ { @@ -5774,7 +19787,7 @@ "AskReddit -0.316899 " ] }, - "execution_count": 42, + "execution_count": 66, "metadata": {}, "output_type": "execute_result" } @@ -5792,37 +19805,40 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 67, "metadata": {}, "outputs": [], "source": [ "tsne = TSNE(random_state=2018)\n", - "tsne_df = pd.DataFrame(data=tsne.fit_transform(subreddit_df.values), index=subreddit_df.index)" + "tsne_df = pd.DataFrame(data=tsne.fit_transform(subreddit_df.values),\n", + " index=subreddit_df.index)" ] }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 68, "metadata": { "scrolled": false }, "outputs": [ { "data": { - "image/png": "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5Thw4ABBQUEUK1YMa2trrTB3fHz8Y48rNjb2serMWVhYULJkSe21i4uLVsvNwcGB0NBQGjVqRFBQENOmTSMhIUHvPG5ublhbW+d5fH5yipzf//rBGnP52bhxI2+//TZFihTB2tqa999/n8TERO7evatd9/3XnNf53nvvPc6dO8fu3buB7FlFPz8/7X15UM7MYl6epB6f+Hdynqd2ttUv8ePbfSqLI76T56mFEEIIkSdJcCNeqPzqv6UoY7rPP8jMjn4kJycTFBTEuHHjch2fU2j7fnfu3KFRo0Y0atSIBQsWULBgQeLj42nUqBHp6elP/Rryqgmn7qs5GR4eTu/evVm7di2//PILX375JRs2bKBatWr5Hv+sasGdO3eOZs2a0b17d77++mscHBzYsWMHXbp0IT09HQsLi8fqx9nZmXr16vHzzz9TrVo1fv75Z7p3755ve3Nz83z3PUk9PvHvBZZ1oYGPM3vPXufK7VQKWWcvPZVl8kIIIYTIjwSL4oV5VP03gLCVMdTx9WXZ0qW4ublhZPTob9njx4+TmJjI2LFjtXpu+/fv12uTk10155m5vHh7e2t15qpXrw7kXWfucfj6+uLr68tnn31GQECAFmT9Wzkzeve/9vb2fuRxBw4cICsri0mTJmFgkL2wYPHixXptvL299Wrr5XU+gA4dOjB48GCCg4M5c+YM7733Xr7nLV++PJs2bSIsLCzXvvvr8eXMAItn43HKAAkhhBBC5JBlqOKFeVT9NwUkJKUS0Kw9169fJzg4mH379hEXF8e6dev44IMP8gz2ihUrhomJCTNmzODMmTOsWLGCUaNG6bUpXrw4Op2OVatWcfXqVW12637315nbsWMHhw8fpmPHjnnWmcvP2bNn+eyzz9i1axfnz59n/fr1nDp16rECu4eJiopi/PjxnDx5km+//ZZff/2VPn36PPI4Dw8P7t27p92befPm8d133+m1yZkFnThxIqdOneKbb75h7dq1ufpq1aoVt2/fpnv37tStW5fChQvne97PPvuMffv20aNHD/7880+OHz/OzJkzqVGjBkOHDtXq8c2dO5e4uDgOHjzIjBkzmDt37pPfHCGEEEII8VRIsChemEfVf8uhLOyJiooiMzOThg0bUq5cOfr27YudnZ02O3a/ggULEhERwa+//oqPjw9jx45l4sSJem2KFClCWFgYn376KU5OTvTq1SvPc4eHh1OpUiWaNWtGQEAASql868zlxcLCguPHj9O6dWu8vLz48MMP6dmzJx999NFjHZ+fAQMGsH//fnx9ffnqq6+YPHkyjRo1euRxFSpUYPLkyYwbN46yZcuyYMECxowZo9emWrVqzJo1i2nTplGhQgXWr1/Pl19+masva2trgoKCOHz4MB06dHjoeb28vFi/fj2HDx+mSpUqBAQE8Pvvv2tZYUeNGsXQoUMZM2YM3t7eBAYGsnr1atzd3Z/grgghhBBCiKdJp+5/uOolc+vWLWxtbUlKSsLGxuZFD0c8ZbviEgmelXt544MWdqsmS+fu4+bmRt++fenbt++LHsp/VqdOHSpWrMjUqVNf9FCEEEII8ZKT2OD5k5nFV0xoaCg6nQ6dToeJiQkeHh6MHDmSjIwMIPsZvClTplCuXDnMzMywt7encePGREVF6fUTERGBnZ3dQ8/TokULAO18+X2NGDGCc+fOodPpiI6O1uvnt99+o06dOtja2mJlZUX58uUZOXIk169ff2T9Nx1S/+11cufOHTp16oSVlRUuLi5MmjRJb/+8efPw9/fH2toaZ2dn2rdvr2WFVUrh4eGRa4Y4OjoanU7H6dOniYiIyPf7UwghhBBCPDkJFl9BgYGBJCQkcOrUKQYMGMCIESOYMGECSinee+89Ro4cSZ8+fYiNjSUyMhJXV1fq1KnD8uXL/9X5EhIStK+pU6diY2Ojty2nAP2DvvjiC9q1a0flypVZs2YNR48eZdKkSRw+fJh58+ZhaKBjeFB2opgHA8ac18ODfCRb4xNYsGCBXvmJ+7/KlCnzQsc2aNAgtm7dyu+//8769euJjIzk4MGD2v579+4xatQoDh8+zPLlyzl37hyhoaFA9h8sOnfuTHh4uF6f4eHhvPXWW3h4eNCuXTu978uFCxdiZGREjRo1nudlCiGEEEK8NiQb6ivI1NQUZ2dnALp3786yZctYsWIFJUqUYMmSJaxYsYKgoCCt/Q8//EBiYiJdu3alQYMGWFpaPtH5cs4FYGtri06n09sGcO3aNb3Xe/fuZfTo0UydOlUv8YqbmxsNGjTg5s2bwD/138JWxuglu3G2NWN4kI/Uf8vDuXPn8t33zjvv5KqRmONxn7N8WjKzlFamwcogg9mzZzN//nyt3uLcuXMpWrSo1r5z587av0uUKMH06dOpXLkyycnJWFlZERoayrBhw9i7dy9VqlTh3r17/Pzzz9pso7m5uVaiIy4ujp49ezJ69GgaNGjwHK9aCCGEEOL1IcHia8Dc3JzExER+/vlnvLy89ALFHAMGDGDp0qVs2LBBW176LOXMcPXo0SPP/fcvgZX6b0+PtbU11tbWAERGRlK3bl1u3Ljx0CXHz8Laowl6fwBIv3KG9PR0UuzctDYODg4UKVKEadOmMWLECOLi4hgxYgSHDx/mxo0bWq3J+Ph4fHx8KFy4ME2bNmXOnDlUqVKFlStXkpaWxrvvvotOp2PZsmW0aNGCpKQkmjVrRtOmTRk0aNBzvW4hhBBCiNeJLEN9BWRmKXbFJfJ79N9cvZ1GTkoipRQbN25k3bp11KtXj5MnT+ZbkiFn+8mTJ5/LmE+dOkWJEiUeezYrp/5b84pFCCjp+NoFirt27cLQ0JCmTZs+lf7uf6YUshPFPOuEN2PGjMHQ0JAJEyY8tN3aowl0n38wz7IoXyw7ytqjCbm237lzh0aNGmFjY8OCBQvYt28fy5YtAyA9PV1r17VrVxYtWkRKSgrh4eG0a9cOCwsLbX9mZibt2rXDxsaGH3744d9eqhBCCCGEQGYWX3oPztBcO3mVOzFbMLewJCszg6ysLNq3b8+IESNYtWoVL0ty25dlHC+L2bNn88knnzB79mwuXrz40JqEL6s5c+YwePBg5syZk++MXWaWImxlDA+++0Z2LmBgRNrFk4StLEYDH2duJd3kr7/+ArL/uJCYmMjYsWNxdXUFYP/+/bn6b9KkCZaWlsycOZO1a9eybds2vf39+vXjyJEj7N+/HzMzs/9+0UIIIYQQbzCZWXyJ5TdDY+Zaniy7otRp2oqUlBTmzp2LpaUlXl5exMbG5tlXznYvLy8g+xnDpKQkLXtpZGQkOp1Oe5YwLxEREfkuK32Ql5cXZ86c4d69e4/V/nWWnJzML7/8Qvfu3WnatCkRERHavpz7vm7dOnx9fTE3N6devXpcuXKFNWvW4O3tjY2NDe3bt+fu3bt59h8aGsrWrVuZNm2algH0/ucaDxw4gL+/PxYWFlSvXp0TJ07oHf/777/j5+eHmZkZJUqUICwsTMuum2Pr1q2kpKQwcuRIbt26xc6dO/X2Hz58mLp162JjY82eEUEkRPQhLeEUABlJV7i2YjwAV38fy76x7Rny1UQtsy9AYmIiOp2OEiVK4Ofnx8yZMxk1apTW/8yZMylZsiTm5uakpqYyZMgQPD09CQgI0Nps2rSJ//3vf3z33XdcvHiRd955BxsbG+zt7WnevPlDn/UUQgghhBC5SbD4kspvhgZAZ2KGzsiEPy+nozMw1La/9957nDp1ipUrV+Y6ZtKkSTg6OmrJPhwcHLC2tqZs2bLPZPzt27cnOTmZ//3vf3nuf1hQ+rpZvHgxpUuXplSpUnTs2JE5c+bkmnkdMWIE33zzDTt37uTChQu0bduWqVOn8vPPP7N69WrWr1/PjBkz8ux/2rRpBAQE0K1bNy0TaM7sHGRnpZ00aRL79+/HyMhIL5HM9u3b6dSpE3369CEmJobvv/+eiIgIvv76a71zzJ49m+DgYIyNjQkODmb27Nl6+zt06EDRokUZP281LiFTsan2LjrD7O/N6xtmojIzcOowDnPPamTeucH3k0ZTs2ZN7Y8XEyZM4Msvv8TJyYno6GiGDBmiJa7ZvHkzffr0YcCAARw9epSPP/6YjIwMatWqpTeGY8eOkZmZyTvvvIO/vz8rV67k9u3btG/fHisrKwIDA/WWtAohhBBCiIeTYPEltffs9Tyf+brfnbQM9p69rr1+7733aNmyJSEhIcyePZtz587x559/8tFHH7FixQp+/PFHLROqgYEBSimOHj1KdHQ0p0+fBsg16/RvVa1alcGDBzNgwAAGDx7Mrl27OH/+PJs2beLdd99l7ty5T+U8r4LZs2fTsWNHILvsSVJSElu3btVr89VXX1GjRg18fX3p0qULW7duZebMmfj6+lKrVi3atGnDli1b8uzf1tYWExMTLCwscHZ2xtnZGUPDf/6I8PXXX1O7dm18fHz49NNP2blzJ6mp2d9bYWFhfPrpp4SEhFCiRAkaNGjAqFGj+P7777Xjb926xZIlS7Rr6NixI4sXLyY5OVlrEx8fT/369fErXxZjhyJYlq6JSaESAGTcuoppEW/MCpeiUKsvKT5wGesPnmbQoEFMnTpVG+PIkSP566+/WLVqFbdv36ZBgwYopfjtt98IDQ2lR48eeHl5ERgYiE6nIy4uTu8+9O7dG6UU8+bNo1SpUmRlZaGU4ttvvyU8PJz4+HgiIyP/xTsohBBCCPFmkmDxJXXl9sMDRQBUJl99MQBbW1sKFCjAsGHD+OWXX/j888/p2rUrnp6e1KpVi/PnzxMZGUloaKi2BPLatWskJyfj6+uLr68v3bp1A7IDzhzx8fEUK1YMCwsLWrZsSWJiot7p4+LiaN68OU5OTloNv927d2v7x40bh4ODA4sXL+att97Czc2NwMBAUlJSCAkJ0drdvHmTjz76CCcnJ8zMzChbtiyrVq36t7fuhbs/IdGiDbvZu3cvwcHBABgZGdGuXbtcM3Ply5fX/u3k5ISFhQUlSpTQ25ZToP5J3d+3i0t2KZKcvg4fPszIkSP16jHmzFDmLHtduHAhJUuWpEKFCgBUrFiR4sWL88svv2j99u/fn65du/LlR+3Iil5Gxo1/kthYVwoiadcvXJo/iJvbF2Bz9yJV3B0ee4yxsbHUqFGDtLQ0/vrrL0aMGIGfnx9nzpzJ83oPHz7M6dOnsba21q7JwcGB1NTUXAGmEEIIIYTInwSLL6lC1nkn5yjQtB+FWn0JQPLRzViZm7F3716mTZvG5MmTiYiIYODAgQD8+uuvJCUlsXbt2lyFydu0aQPAoUOHUEpps1aHDh0Csus3Hj58mF69ehEdHU3dunX56quvMDEx0ZaQJicn06RJEzZt2kR0dDRffvkl/fr1Iz4+XjuPhYUF169fZ9SoUZw4cYLJkyezdu1a9u3bB0BWVhaNGzcmKiqK+fPnExMTw9ixY/Vmxl4la48mUHPcZoJn7abPomg++nICGRkZuBQujJGREUZGRsycOZPffvuNpKQk7bj7s8bqdLpcWWR1Op1WSuJJPdg3oPWVnJxMWFgY0dHR2teRI0c4deqUliBm9uzZHDt2TBu/kZERMTExzJkzR+t3xIgRHDt2jGZNm1Lg1in+nt2duyezn2u0rtCIIh/9iGWZuty7do7YmT3537ffPPYYcyxcuJDixYtz8+bNPMvD5EhOTqZSpUp61xQdHc3Jkydp3779E98/IYQQQog3lWRDfUlVcXfAxdaMS0mpeT63CGBqW5AFP/4PI0MDSpUqxZEjR5gyZYo2S/hfTJs2jcDAQAYPHgxkJ6zZuXMna9eu1dpUqFBBm20CGDVqFMuWLWPFihX06tVL216jRg0+/fRTrZ+oqCimTJlCgwYN2LhxI3v37iU2NlZ7fu3+GbVXSU5Copz3S2VlknxsM/Z1u2Du7svQZj7U9CwIQIsWLVi4cCGlS5d+Kuc2MTEhMzPziY/z8/PjxIkTeHh45Lk/J7NoZGQkDg7/zAZev36dOnXqcPz4ce0avLy88PLyol+/ftRp0oI/Y7eAV3UAjGwK4lWnFcODvmTrgunMmjWLTz755LHG6O3tTVRUFD/88AOhoaEAtG3bFh8fn3yv6ZdffqFQoULY2Ng87q0QQgghhBAPkJnFl5ShgY7hQdkfhvOrOGhetDQbYy9rrwMCAjh16tS/ChoeFBsbS9WqVfW23Z95ErJncAYOHIi3tzd2dnZYWVkRGxurN7OY13EBAQFadtbo6GiKFi2qBYqvqrwSEqWc3ktWajJWFRpiUtCNucez8PYpQ9myZWndunWupaj/hZubG3v27OHcuXNcu3btsWchhw0bxk8//URYWBjHjh0jNjaWRYsW8eWX2bPXs2fPpkqVKrz11luULVtW+3rrrbeoXLkys2fPJiUlhV69ehEZGcn58+eJiorir5NH6RJUk4XdqlHuwjL6lLrLvLbuFEpPYMuWLfnWA83LoEGDiIiIYObMmZw6dYrJkyezdOlSbQb9QR06dKBAgQI0b96c7du3c/bsWSIjI+ndu7dWqkMIIYQQQjyaBIsvscCyLszs6IetRd6F7e9lZNF9/sE8i5zrdLpcGTefdhmLgQMHsmzZMkaPHs327duJjo6mXLlyT5Rx0tzc/KmO6UXJKyFR8p/rMS9eEQNTSxSQkJSqJSRq3bo1+/fv588//3wq5x84cCCGhob4+PhQsGDBXAF7fho1asSqVatYv349lStXplq1akyZMoXixYuTnp7O/Pnzad26dZ7Htm7dmp9++gkDAwMSExPp1KkTXl5etG3blsaNGzNq5EgCSjri5mDOt19/RtkyPgQGBuLl5ZVvlty8tGjRgmnTpjFx4kTKlCnD999/T3h4OHXq1MmzvYWFBdu2baNYsWK0atUKb29vunTpQmpqqsw0CiGEEEI8AZ16iaun37p1C1tbW5KSkt7YD3mZWYoaYzdz6ZZ+IHLp50/JunuLIl3/h7OtGTuG1OPLLz7n999/JyYmBicnJ4YPH67VRTx16hReXl6Eh4cTGhrKuXPncHd359ChQ1SsWJHIyEjq1q3LjRs3sLOzo3379iQlJbF69WrtnMHBwaxZs0Z7ZrFcuXK0bduWoUOHAtkzjUWLFiU0NFTLcunm5oaPjw9//PGHXj9JSUn88ccfbN26lXr16uktQ30V/R79N30WRT+y3bT3KtK8YpFnPyAhhBBCiNeMxAbPnzyz+JLbe/Z6rkAxR8btqyRumkV6xcZ8NT2OGTNmMGnSJADq1avHN998Q0BAAJmZmQwZMiRX0pSH6d27NzVq1GDixIk0b96cdevW6T2vCODp6cnSpUsJCgpCp9MxdOjQPJc/RkVFMX78eFq0aMGGDRv49ddftSC0du3avPXWW7Ru3ZrJkyfj4eHB8ePH0el0BAYGPvZ4X7T8EhL923ZCCCGEEEK8aLIM9SX3sBIalmXqoTLSSfipPxOHD6ZPnz58+OGHAEyaNAlXV1dq1apF+/btGThwIBYWFo993mrVqjFr1iymTZtGhQoVWL9+vfYcW47Jkydjb29P9erVCQoKolGjRvj5+eXqa8CAAezfvx9fX1+++uorJk+eTKNGjbT9v/32G5UrVyY4OBgfHx8GDx78VJ67fJ5yEhLl93ypDnCxNctVMkIIIYQQQoiXlSxDfcntikskeNbuR7Zb2K0aASUdn8OInoybmxt9+/alb9++L3ooz1xONlRAL9FNTgA5s6MfgWVdnvu4hBBCCCFeBxIbPH8ys/iSkxmrV0dOQiJnW/2lps62ZhIoCiGEEEKIV448s/iSyymh0X3+QXTkPWM1PMgHQ4P8wknxPAWWdaGBjzN7z17nyu1UCllnB/Ly/gghhBBCiFeNLEN9Raw9mkDYyhi98gwutmYMD/KRGSshhBBCCPHak9jg+ZOZxVeEzFgJIYQQQgghnid5ZvEVYmigI6CkI80rFiGgpKMEikK8QLdv36ZDhw5YWlri4uLClClTqFOnjpbMSafTsXz5cr1j7OzsiIiIAODcuXPodDqWLl1K3bp1sbCwoEKFCuzatUtrf/78eYKCgrC3t8fS0pIyZcro1SwVQgghhHiWJFgUQvwnOUFPdHT0ix7Kc9W/f3+ioqJYsWIFGzZsYPv27Rw8ePCJ+/niiy8YOHAg0dHReHl5ERwcTEZGBgA9e/YkLS2Nbdu2ceTIEcaNG4eVldXTvhQhhBBCiDzJMlQhXkF16tShYsWKTJ069UUP5Y2SmaXYe/Y65y9dI2LuXBbMX8Dbb78NQHh4OIULF37iPgcOHEjTpk0BCAsLo0yZMpw+fZrSpUsTHx9P69atKVeuHAAlSpR4ehcjhBBCCPEIEiwK8RpSSpGZmYmRkfyIPy33J5lKv3KGjHv3GHvgHjY+CQSWdcHW1pZSpUo9cb/ly5fX/u3ikp2s6sqVK5QuXZrevXvTvXt31q9fT/369WndurVeeyGEEEKIZ0mWoQrxigkNDWXr1q1MmzYNnU6HTqcjIiICnU7HmjVrqFSpEqampuzYsYO4uDiaN2+Ok5MTVlZWVK5cmY0bN2p9ff7551StWjXXOSpUqMDIkSO11z/++CPe3t6YmZlRunRp/ve//z2Xa31ZrD2aQPf5B/WyEQNcvZ1G9/kHWXs0IdcxOp2OB5NN37t3L1c7Y2NjvWMAsrKyAOjatStnzpzh/fff58iRI/j7+zNjxoz/fD1CCCGEEI9DgkUhXjHTpk0jICCAbt26kZCQQEJCAq6urgB8+umnjB07ltjYWMqXL09ycjJNmjRh06ZNHDp0iMDAQIKCgoiPjwegQ4cO7N27l7i4OK3/Y8eO8eeff9K+fXsAFixYwLBhw/j666+JjY1l9OjRDB06lLlz5z7/i38BMrMUYStj9GqcGtk6g4ERqQmnAAhbGcP1Gzc5efKk1qZgwYIkJPwTRJ46dYq7d+8+8fldXV35+OOPWbp0KQMGDGDWrFn/+lqEEEIIIZ6ErFET4hVja2uLiYkJFhYWODs7A3D8+HEARo4cSYMGDbS2Dg4OVKhQQXs9atQoli1bxooVK+jVqxdlypShQoUK/PzzzwwdOhTIDg6rVq2Kh4cHAMOHD2fSpEm0atUKAHd3d2JiYvj+++8JCQl5Ltf8Iu09ez3XjKKBqQVWZetxc8scDM2sOW9hS+vgaRgYGGizg/Xq1eObb74hICCAzMxMhgwZojeL+Dj69u1L48aN8fLy4saNG2zZsgVvb++ndm1CCCGEEA8jM4tCvAIysxS74hL5PfpvdsUlovJp5+/vr/c6OTmZgQMH4u3tjZ2dHVZWVsTGxmozi5A9u/jzzz8D2c86Lly4kA4dOgBw584d4uLi6NKlC1ZWVtrXV199pTcb+Tq7cjs1z+329bpiUqQ0V34L48ovX1KirJ+2VBdg0qRJuLq6UqtWLdq3b8/AgQOxsLB4onNnZmbSs2dPvL29CQwMxMvL641bAiyEEEKIF0dmFoV4yd2fWCXH9fgb2LveydXW0tJS7/XAgQPZsGEDEydOxMPDA3Nzc9q0aUN6errWJjg4mCFDhnDw4EFSUlK4cOEC7dq1A7KDTYBZs2blerbR0NDwqV3jy6yQtVme2w1MLSgYNEh73aFDOVr9OJUPP/wQgMKFC7Nu3Tq9Y27evKn9283NLdczjXZ2dnrb5PlEIYQQQrxIMrMoXqjIyEh0Op3eh+hXTV7F15+W+xOr/DWzM7f2/Q7APWXI5phLeSZWuV9UVBShoaG0bNmScuXK4ezszLlz5/TaFC1alNq1a7NgwQIWLFhAgwYNKFSoEABOTk4ULlyYM2fO4OHhoffl7u7+TK75ZVPF3QEXWzN0D2xPvxzHnZitZNxIwCb5AtO+7A1A8+bNn/8gxWvhTa1ZKoQQ4uUlwaJ4rTyt4PNJAsCEhAQaN24MwIgRI6hYseJTOfeDiVVcQqZgVbERAEa2hUhLOMFnP23m8pWrWvbMB3l6erJ06VL8/f3p0KED7du3z7Nthw4dWLRoEb/++qu2BDVHWFgYY8aMYfr06Zw8eZIjR47QvHlzihQpku/YXyeGBjqGB/kA5AoYb+1dysXwTzg77zPu3r3D9u3bKVCgwPMfpBBCCCHEMyDBongjxcfH88knn1CiRAlMTU1xdXUlKCiITZs2PXFfzs7OmJqaAtnLPh+3j/wCy5zg88HEKoYWthgYZy+JtKnSCnQGHJ7SBWenQnrPIN5v8uTJ2NvbExMTw7Zt22jUqBF+fn7MmTOHqVOnau3atGlDYmIid+/epUWLFnp9dO3alR9//JHw8HDKlStH7dq1OXz4MCYmJo91na+DwLIuzOzoh7PtP0tSTZxK4tfne/44eIbbSTfYsGED5cqVe4GjFEIIIYR4uiRYFM9cVlYWY8aMwd3dHXNzcypUqMCSJUvybb9jxw5q1aqFubk5rq6u9O7dmzt3/nk+Ly0tjSFDhuDq6oqpqSkeHh7Mnj2bc+fOUbduXQDs7e3R6XSEhoYCUKdOHXr16kXfvn1xcHDA09OTzZs3ExoaSqlSpbh8+TJbt26lbdu2ZGRkaOeqU6cOvXv3ZvDgwTg4OODs7MyIESP0xqvT6Vi2bBkZGRlYWVmRkpJCcHAwDg4OWFpa4u/vz549ex7rXq1cuZKgoCBsbW1p5O/JlaVfafvuX4Zq7FCEAk36YuJUEmMTU8aPH8+GDRuwt7fXm9mbOXMmf/31V/YxxsZcunSJDRs24ODgAPwTsC5ZsgQXFxdSUlKwsrLi5s2bdO3alYIFC2JjY8OPP/5IREQEaWlpTJ48mfPnz2tL5tzd3QkPD9eCzJYtW6LT6XBzc9PG8fvvv+Pn54eZmRklSpQgLCxM7z6/CgLLurBjSD0WdqvGtPcqsrBbNXYMqUdgWZcXPTTxL2RlZTF+/Hg8PDwwNTWlWLFifP311wAMGTIELy8vLCwsKFGiBEOHDtWrkZnzczNv3jzc3NywtbXlvffe4/bt21qbtWvXUrNmTezs7HB0dKRZs2a5kkLt3bsXX19fzMzM8Pf359ChQ3r7MzMz6dKli/a7s1SpUkybNu0Z3hUhhBDiAeollpSUpACVlJT0ooci/oOvvvpKlS5dWq1du1bFxcWp8PBwZWpqqiIjI9WWLVsUoG7cuKGUUur06dPK0tJSTZkyRZ08eVJFRUUpX19fFRoaqvXXtm1b5erqqpYuXari4uLUxo0b1aJFi1RGRob67bffFKBOnDihEhIS1M2bN5VSStWuXVtZWVmpQYMGqVq1aqlChQqpkydPKgsLC9WjRw8VGxurli1bphwdHdXw4cMVoGbNmqUcHR0VoBwcHNTMmTPV3LlzlU6nUxMmTFCA+uOPPxSgDA0N1ZYtW9Rnn32mTExMVK1atdT27dvV/PnzVcmSJZWpqamytbVV1atXV+fOnVPh4eEK0Pvq27evMjQ0VICaPn26mrsyUtm91UnZVG2tjOwLK0AZmFkp24B2yrX/b8rIoagyc/NVzd8LUSVLllQlSpRQgDI3N1ft2rVTt27dUqNGjVJRUVGqatWqKigoSDk5OSl3d/dc527QoIGysLBQEydOVEopVb9+fRUUFKQmTJigzMzM1CeffKIcHR1VYmKiunv3rhowYIAqU6aMSkhIUAkJCeru3bvqypUrClDh4eEqISFBXblyRSml1LZt25SNjY2KiIhQcXFxav369crNzU2NGDHi+X4jCnGfwYMHK3t7exUREaFOnz6ttm/frmbNmqWUUtrPzdmzZ9WKFSuUk5OTGjdunHbs8OHDlZWVlWrVqpU6cuSI2rZtm3J2dlaff/651mbJkiXqt99+U6dOnVKHDh1SQUFBqly5ciozM1MppdTt27dVwYIFVfv27dXRo0fVypUrtZ/hQ4cOKaWUSk9PV8OGDVP79u1TZ86cUfPnz1cWFhbql19+eX43SgghXiISGzx/EiyKpy4jM0vtPH1NLT/0l4o89reysLBQO3fu1GvTpUsXFRwcnCtY7NKli/rwww/12m7fvl0ZGBiolJQUdeLECQWoDRs25HnuB/vLUbt2beXr66sSExOVTqdTo0ePVp9//rkqVaqUysrK0tp9++23ysrKSgGqaNGiytvbW/n7+6vevXsrKysrlZiYqCpXrqyCg4MVoMqXL68ANXPmTJWYmKiaNWumDAwMVGJiorp3756ytbVVAwcOVKdPn1YxMTEqIiJCnT9/Ps+Aq2rVqqpDhw4KUMuWLVMZmVmq2uiNyq5WR+XUYYIytHJUluUbKgNLO2VZrr7CwFD5fbZYDR02TFlZWamaNWsqQH399de5PrjWrl1b9enTR02YMEFVqFBBFS1aVI0cOVINGDBAGRsbqytXrqhu3bqpJk2aqO3btysbGxuVmpqq3nnnHdWpUyellFIlS5ZU33//vVIq+8NyhQoVct3/nLHf7+2331ajR4/W2zZv3jzl4uKS53soxLOS87tp4Y7jysTEVH3//Q+PddyECRNUpUqVtNfDhw9XFhYW6tatW9q2QYMGqapVq+bbx9WrVxWgjhw5opRS6vvvv1eOjo4qJSVFazNz5ky9YDEvPXv2VK1bt36scQshxOtGYoPnT0pniKfqwTIP6VfPc/fuXeq9XR9Dg3/Sg6Snp+Pr65vr+MOHD/Pnn3+yYMECbZtSiqysLM6ePcuRI0cwNDSkdu3aTzy2SpUqcfr0aZRSlC5dmnnz5hEQEKAVUQeoUaOGVi4iNDSU7du3U6ZMGUaPHs306dPZu3cvLi4u3LhxA4CRI0fSokULnJ2dcXBw4NKlS5ibm+Pg4MD169dJSkqiWbNmlCxZEkCvoLqVlRVGRkY4OzsD8Oeff/LRRx9p156TWKV70nvZBxgYYlKgOMYORbl9YAVG1gX4un1Ndi85RlZWFosWLaJo0aL4+Pjw/vvvs2nTJsqXL8/06dPZt28fO3fuxMDAABsbGywsLLC2tiYzM5PixYtTsGBBunbtSvXq1bV74ODgwN27dzEzM+O3334jJSXlX9VWPHz4MFFRUdoSP8heXpeamsrdu3efuPagEP/G/b+b0i6eID09jZmnzCl2NCHXUuJffvmF6dOnExcXR3JyMhkZGdjY2Oi1cXNzw9raWnvt4uLClStXtNenTp1i2LBh7Nmzh2vXrmmJpeLj4ylbtiyxsbGUL19eq8sJEBAQkGvc3377LXPmzCE+Pp6UlBTS09P/cxItIYQQ4nFJsCiempwyD/dXjlP3soNGuxZD+brjW7zlVUjbZ2pqmiv4SE5O5qOPPqJ37965+i9WrBinT59+4nFlZilupdzj0l3FnxduPvZx5cuXZ/v27RgbG2NpaYmNjQ1XrlxBp9NptfD8/f31jjEy+udHysHBgdDQUBo1akSDBg2oX78+bdu2xcUl72fczM3Nc20LLOvCewUu8M2Mb8i8fZUbkeGg02FgaETBggUJLOvC7iV5f3CNj4+nQ4cOhIWFkZqaStmyZfHw8GDSpEl6AVpObcYqVapQpkwZtm/fjouLC506dWLBggVs3LhRC6jt7Owe+/7lSE5OJiwsjFatWuXad/8HZSGelQd/N+mMsxNSXb2dRvf5B5nZ0U8LGHft2qX93DRq1AhbW1sWLVrEpEmT9Po0NjbWe63T6fQyDQcFBVG8eHFmzZpF4cKFycrKomzZsno1Th9l0aJFDBw4kEmTJhEQEIC1tTUTJkx47GeghRBCiP9KEtyIp+LBMg85jB1dwdCYjFtXmXU4BfcSJbU6fa6urrn68fPzIyYmJldNPw8PD0xMTChXrhxZWVls3bo1z3HkZOjMzMwEsj8k1hy3mZiEW2w9cZWwbddBp2PF1n14e3uza9cuvSLoUVFRWtD1qA+D8E+glcPJyYmUlBSuX78OQHh4OLt27aJ69er88ssveHl5sXv37jzHXr58+VyZVHft2sWET3sxuNt7OBYoRJvQj+n2yQDMjHRcu3yRy5cva2Pdt2+f3lhTU1MpXrw4X3zxBdbW1tjb23P+/Pk8z52ja9euHD16lEuXLvHbb7/x4Ycf4unpqb0HOWUhTExMtHt8P2Nj41zb/fz8OHHiRJ7vqYGB/AoSz1Zev5uM7QujMzIl5fxhAMJWxpCZld1i586d2s+Nv78/np6ej/y5eVBiYiInTpzgyy+/5O2338bb21tbjZDD29ubP//8k9TUfzIeP/i7ISoqiurVq9OjRw98fX3x8PD4V7P74uX1qCRqDyYbq1evHocPZ3/fJiUlYWhoyP79+4HspE0ODg5Uq1ZNO37+/Pna/2vT09Pp1asXLi4umJmZUbx4ccaMGfP8LlYI8UqST2riqXiwzEMOA1MLbKq04vrmHzm1YzVLIw9w8OBBZsyYwdy5c3O1HzJkCDt37qRXr15ER0dz6tQpfv/9d3r16gVkz6CFhITQuXNnli9fztmzZ4mMjGTx4sUAFC9eHJ1Ox6pVq1i07SgfzYnSLz9hbo25mx/zZv9AiYAmXLhwgU8++YTjx4/z+++/M2zYMPr37/+v70O5cuUwNjamRYsWREVFcebMGc6cOUOdOnXYuXMnZcuW5eeffwZyB1zDhw9n4cKFAFy4cIEjR47w1VdfUbx4cYZ++SVWFmbUKFeSrNtXMTIyomTJkoSEhHD58mXu3LnDl19+CaDNAhoZGREfH8+iRYtISUkhOjqaZcuW5XnuHB07duTq1asUL16ckydP4ubmxrlz59i5cydffPGF9qHEzc2Ns2fPEh0dzbVr10hLS9O2b9q0iUuXLmkfjocNG8ZPP/1EWFgYx44dIzY2lkWLFmnjFeJZyut3k87IBJuqrbkZGc7to5uIP3eWOUvXM3v2bDw9PbWfm7i4OKZPn6793Dwue3t7HB0d+eGHHzh9+jSbN2/O9Xulffv26HQ6unXrRkxMDH/88QcTJ07Ua+Pp6cn+/ftZt24dJ0+eZOjQoXp/FBKvh7lz52JpacmePXsYP348I0eOZMOGDQC8++67XLlyhTVr1nDgwAH8/Px4++23uX79Ora2tlSsWJHIyEgAjhw5gk6n49ChQ9rjFFu3btUe25g+fTorVqxg8eLFnDhxggULFuhlrRZCiLxIsCieiiu3cweKOexqdcS2ejuSdv9K+0bVCQwMZPXq1bi7u+dqW758ebZu3crJkyepVasWvr6+DBs2jMKFC2ttZs6cSZs2bejRowelS5emW7duWmmNIkWKEBYWxqeffkpwnfIkbvgu1znsG3YHlcUnXTowePBgtm3bRvny5enUqRNKqf8UxBgaGlKiRAkKFSpEYGAgpUuX5ssvv+TKlSusX7+eU6dOac8tPhhwBQQE8OuvvwLQv39/6tWrx40bN7QPrhkZGWzbto1ly5ah0+lYvnw5ycnJzJo1iwsXLvDFF18A/yzttLCwoF+/fvTq1YsDBw6QkJDA0KFDtXNv27aNW7du6ZWwsLe3p3Xr1ly4cIFixYoxePBgvLy8eO+99zh//jxOTk4AtG7dmsDAQOrWrUvBggW1IHfSpEls2LABV1dX7ZnURo0asWrVKtavX0/lypWpVq0aU6ZMoXjx4v/6PgvxuPL73WRb4z1sKrfk5vYFXPyxO1980oUrV67wzjvvaD83FStWZOfOndrPzeMyMDBg0aJFHDhwgLJly9KvXz8mTJig18bKyoqVK1dy5MgRfH19+eKLLxg3bpxem48++ohWrVrRrl07qlatSmJiIj169HiyGyBeOplZil1xifwe/Te3Uu5Rrnx5hg8fjqenJ506dcLf359NmzaxY8cO9u7dy6+//qrNck+cOBE7Ozut/FSdOnW0YDEyMpIGDRrg7e3Njh07ANiwYQMLFiwgOjqa+Ph4PD09qVmzJsWLF6dmzZoEBwcTGRmJTqfj5s2bL+iOCCFeZjp1/xq8l8ytW7ewtbUlKSkpV3IB8XLZFZdI8Ky8l1feb2G3agSUdHzh48lIvs6tXb9geflPrl+9TMGCBalUqRL9+vWjTp06Wu3E+wvU29nZMXXqVEJDQ4mMjKRu3brcuHFD7zm+ESNGsHz5cqKjo7l8+TIff/wxe/bsITExERcXF0JCQhg+fDgGBgakpaXRoUMHNm3axM2bNwkPDyc0NDTXuQcPHsycOXNIS0ujadOmVKtWjREjRmj/Y88557fffkvNmjU5ffo0K1euZOrUqZw7dw7I/kBRsWJFpk6dCmQvd/voo484ceIEaWlpektxN2/ezNtvv83ixYt59913n8bbIcQL87L9bhJvtgeTwF36+VPsCpcg4sfvtOdmmzdvjqOjI5UqVaJ37965nmdPSUlh4MCBjBs3jhUrVtCpUycSExN59913adiwIcePH8fMzIzevXtTpEgRAA4dOkRWVhYNGjTA0dGRwMBAmjVrRsOGDfP9/5kQLyOJDZ4/CRbFU5GZpag5bjP/x96dx/WU/X8Af33a952KaZEWpc0uGUKUaGTLEsqSsUQZ+1gqayJkN6HIEsYeslbIUihKKZoSM5ElKZSW8/ujX/fb9anEVBjv5+PxeXznc++55557S9/7vuec93maVyg0bxEABAA0FKVwZXZ3XlbU+nIs4W94hiV8slzgUEv0s2xa7+2pD0eOHIGcnBwMDAzw8OFDeHp6QllZmXuj/KVCQ0Mxbdo0/PPPP9wcUEK+V9/a3yby46oqCdzTvXMg0VgPqrbjuURLTk5OUFJSgrGxMdavX8/1HFampKQENTU1vH79Gqqqqrh+/Tp69+6NK1eu4P79+/Dz88PkyZMxY8YM5OTkID4+HpaWlnjz5g1Onz6N8+fP4+DBg7C1tYWHhwcFi+S7QbFBw6NhqKROVCzzAJQ/fFVW8d3b0aTBHsYay9cuy2Zty9WFli1bQk5OrspP5aVCais/Px+TJ09GixYt4Obmhnbt2uHYsWNf3L53794hPT0dfn5++PXXXylQJP8J39rfJvJjqirR0ruHsSh6ksyN7Ji19TgEAgHu3bsHoDw52D///IMZM2ZAX18fd+7cQb9+/dCyZUu0bdsWAQEBUFJSgrm5OTZs2IDc3FwcPHgQ+/btw40bN+Dt7Y0OHTrw2qGgoAB5eXlER0fj/fv3OHToEJKSknhlQkJCoKSkhDNnzsDY2BhycnKwt7dHdnY2r9y2bdtgbGwMKSkptGjRAps2beL2DRo0iMs1AABeXl4QCAS4f/8+gPJkO7Kysjh//jwA4M8//4SZmRmkpaWhqqoKW1tbbnoJIeTromCR1Bl7U01sHtEaGor8AExDUYqXmr4htG+mAk1FKaGHwwoCAJqKUmjfTKXB2nTq1CkkJCRU+fnll18+u75Ro0YhLS0NhYWFePLkCUJCQqCq+uXD6Pz9/dGiRQtoaGhg7ty5X1wPId+ab+lvE/kxVZVoSUqrJcDKUPYuDwzAk5RbUFJWxcuXLwEAtra2kJSUxK1bt7Bx40Y4OzujU6dOGD16NFxdXbFgwQKEhITAxsYGe/bsgZSUFFatWoX27dujRYsWePToES9YXL16NTZs2ID+/fujc+fOcHR0hKKiIpYsWSLU3nfv3mHVqlUIDQ3FpUuXkJWVhRkzZnD79+zZg4ULF2Lp0qVISUnBsmXLsGDBAi5xXdeuXXk9otHR0VBTU+O2xcXFobi4GJ06dUJ2djaGDRuGMWPGICUlBVFRURgwYAC+4YFvhPxQaJ1FUqfsTTXR00QDsRmvkJNfiMby5QFZQ7+15xa0330bAoD3Nvdr9SZ86wldfHx8eCnbCfkv+Vb+NpEfU1WJlkQkZSEQl0Jp/gsAQGFWIga4jMO+TStRXFyMf/75B4WFhejWrRtmzpwJxhjOnDmDLl26YN68eXj//j1WrlyJpUuXYu3atZCSkkKXLl0wffp0PH78GPfv3+ctoyEvL4/58+ejuLgYhw4dQrt27RAZGYn9+/cLJVcqLi7Gli1b0Lx5cwCAh4cHFi1axO339vZGQEAAt35us2bNkJycjK1bt8LV1RU2Njbw9PTE8+fl2buTk5OxYMECREVFYcKECYiKikK7du0gIyOD+/fvo6SkBAMGDOD+f9LMzKxufwCEkC9GwSKpc6Iigm8iUURFb0LlZAJAeW+Ct6MJ9SYQ8oP5Vv42kR9PdVMe5CzsUJL7DxhjKHqSjD6Oa5B0OQIjR45EdHQ0mjRpgl27diEpKQn9+vWDt7c3d6y1tTXWrl0LR0dHMMagq6uLtm3bAgDWrl3LS3IGAO7u7jh16hSUlZWxY8cObntWVpZQu2RkZLhAEQA0NTWRk5MDAHj79i3S09MxduxYuLu7c2VKSkqgqKgIADA1NYWKigqio6MhISGBVq1aoW/fvti4cSOA8p5GGxsbAICFhQV69OgBMzMz2NnZoVevXhg0aBCUlZU/5xYTQupJgwWLfn5+mDt3Ljw9PbmMjITUN+pNIIQQ8rW1b6YCJRlxvH5XzNsupW2OF4nnUZyTARFRMTjbdsCN/18OIzc3l1sjsbZkZWXrpL3i4uK87wKBgBsWWrGGY1BQkNCcSFFRUa58ly5dEBUVBUlJSdjY2MDc3BxFRUVISkrC1atXuWGtoqKiOHfuHK5evYqzZ89i/fr1mDdvHm7cuFHlEluEkIbVIHMW4+LisHXrVpibmzfE6QjhqehN6GfZFFbNVSlQJIQQ8k2Q1GoJ9uE93tw8Cjnd8qGXFWsnRkVFcb1vxsbGiImJ4R0bExMDQ0NDLkCrDWNjY8TGxvK2Xb/+6aVlKlNXV0eTJk3w119/QV9fn/epHNxVzFusuA4RERF06dIFK1euRFFREaytrbmyAoEA1tbW8PX1RXx8PCQkJHDkyJHPahchpH7Ue7BYUFAAFxcXBAUF0ZACQshXlZmZCYFAgISEhHo9j5ubG2+NTkLIjy0245VQryIAiErJQbyRLt7ei4JIk5aIzXiFLl264Pbt20hLS+N6FqdPn44LFy5g8eLFSEtLw86dO7FhwwZe0pnamDBhAh48eICZM2ciNTUVe/fuRUhIyGdfj6+vL5YvX45169YhLS0NiYmJCA4OxurVq7kyNjY2SE5Oxr1799C5c2du2549e9C2bVuuF/TGjRtYtmwZbt68iaysLBw+fBjPnz+HsbHxZ7eLEFL36j1YnDx5Mvr06QNbW9tPli0qKsKbN294H0IIqS03NzcIBALuU7H49N27dwEAWlpayM7OhqmpKQAgKioKAoEAr1+/rtN2BAYGftEDGCHkv6mqBDcVpLRMAVYGKW0z5OQXQkVFBSYmJtDQ0ICRkRGA8mU0Dhw4gLCwMJiammLhwoVYtGgR3NzcPqsd2traOHToEI4ePQoLCwts2bIFy5Yt++zrGTduHLZt24bg4GCYmZmha9euCAkJ4fUsmpmZQUlJCZaWlpCTkwNQHiyWlpZyPaZA+XIely5dgoODAwwNDTF//nwEBASgd+/en90uQkjdE7B6zE0cFhaGpUuXIi4uDlJSUrCxsYGlpWW1cxZ9fHzg6+srtJ0W3iSE1IabmxuePXuG4OBgAMDTp08xf/583L17t8okDlFRUbQYNSGk3l1Lf4lhQZ8e7rnPvSMlYSKkBm/evIGioiLFBg2o3noWHz9+DE9PT27tn9qYO3cu8vLyuM/jx4/rq3mEkP8oSUlJaGhoQENDA5aWlpgzZw4eP36M58+f84ahZmZmolu3bgAAZWVlCAQC7i19WVkZ/P39oa+vD0lJSWhra2Pp0qXcORITE9G9e3duAenx48dzSR8A4WGoNjY2mDp1KmbNmgUVFRVoaGjQMiWE/EC+xbV/CSGkNuotWLx16xZycnLQunVriImJQUxMDNHR0Vi3bh3ExMRQWloqdIykpCQUFBR4H0II+VIFBQXYvXs39PX1oarKf1uvpaWFQ4cOAQBSU1ORnZ2NwMBAAOUvrvz8/LBgwQIkJydj7969UFdXB1CeNt7Ozg7KysqIi4vDwYMHcf78eXh4eNTYlp07d0JWVhY3btyAv78/Fi1ahHPnztXDVRNCvjUVa/8CEAoYv9bav4QQUhv1Fiz26NEDiYmJSEhI4D5t27aFi4sLEhISPit7F/n++fj4wNLS8ms341/5+Bq+JImJrq4uLR1Tx0rLGK6lv8SxhL/xPL8I4eHhkJOTg5ycHOTl5XH8+HHs378fIiL8P3eioqJQUSl/i9+4cWNoaGhAUVER+fn5CAwMhL+/P1xdXdG8eXN07twZ48aNAwDs3bsXhYWF2LVrF0xNTdG9e3ds2LABoaGhePbsWbXtNDc3h7e3NwwMDDBq1Ci0bdsWFy5cqL8bQwj5plSs/auhyB9tpaEohc0jWtPav4SQb1K9rbMoLy/PJZGoICsrC1VVVaHt5Nvl5uaGnTt3AgDExMSgoqICc3NzDBs2DG5ubkIP4PVNIBDgyJEjXxSkPXr0CAAgLS2N5s2bw9PTkwsAvkRgYCA+d8pvXFxcna2DRYCIpGz4nkhGdl558ogXac8h18wCqwPXo4thY+Tm5mLTpk3o3bu3ULr46qSkpKCoqAg9evSodr+FhQXv52htbY2ysjKkpqZyPZAf+3jpoMqLXH+vPp7zGRISAi8vrxoTBvn4+ODo0aP1npGWkG8Rrf1LCPneNOyTPvku2dvbIzs7G5mZmTh9+jS6desGT09P9O3bFyUlJV+7ebW2aNEiZGdnIykpCSNGjIC7uztOnz79xfUpKip+dlKURo0aQUZG5ovPSf4nIikbE3ff5gLFCh8EElh8KRcPC2XRrl07bNu2DW/fvkVQUFCt6pWWlq6P5la5yHVZWVm9nKs2nj59Ck9PT+jr60NKSgrq6uqwtrbG5s2b8e7du1rV0alTJ2RnZ0NRUbGeW1u/li9fjnbt2kFeXh6NGzeGk5MTUlNTv3azyH8Urf1LCPmeNGiwGBUVRUPwvkMVCUOaNm2K1q1b4/fff8exY8dw+vRpbnmA169fY9y4cWjUqBEUFBTQvXt33LlzR6iurVu3QktLCzIyMnB2dkZeXh63Ly4uDj179oSamhoUFRXRtWtX3L59m9uvq6sLAOjfvz8EAgH3HQCOHTuG1q1bQ0pKCnp6evD19RUKZOXl5aGhoQE9PT3Mnj0bKioqvDljtb2GCh8PQ83Pz4eLiwtkZWWhqamJNWvWwMbGBl5eXrxrqPxvICsrC/369YOcnBwUFBTg7OzMG8pYMfQ1NDQUurq6UFRUxNChQ5Gfn19tu34EpWUMvieSUVO/rvMv9vD09IRAIICIiAjev38vVEZCQqK8vv+fQy0QCJCSkgJpaelqh4gaGxvjzp07ePv2LbctJiYGIiIiXJr7b91ff/2FVq1a4ezZs1i2bBni4+Nx7do1zJo1C+Hh4Th//nyt6pGQkICGhgYEgm/3YffDhw+fLBMdHY3Jkyfj+vXrOHfuHIqLi9GrVy/ez5gQQgj5EVHPIvki3bt3h4WFBQ4fPgwAGDx4MHJycnD69GncunULrVu3Ro8ePfDq1SvumIcPH+LAgQM4ceIEIiIiEB8fj0mTJnH78/Pz4erqiitXruD69eswMDCAg4MDFxjFxcUBAIKDg5Gdnc19v3z5MkaNGgVPT08kJydj69atCAkJ4WWvrKysrAyHDh1Cbm4uFyzU9hpq8ttvvyEmJgbHjx/HuXPncPnyZV6wW1U7+vXrh1evXiE6Ohrnzp3DX3/9hSFDhvDKpaen4+jRowgPD0d4eDiio6Ph5+dXqzbVlYr1CydMmCC0b/LkybxMovUtKioKYqIiuP67LR6t6IvH64bj2UFvfHieCQBgJcUoKciFfPeJsLBxxJQpU1BQUABHR0ehunR0dCAQCBAeHo7nz58DKA+AZs+ejVmzZmHXrl1IT0/H9evXsX37dkRFRWH8+PGQkJCAq6srkpKSEBkZiSlTpmDkyJHVDkH91kyaNAliYmK4efMmnJ2dYWxsDD09PfTr1w8nT56Eo6MjL3NshdevX0MgECAqKgpA7dap9PPzg7q6OuTl5TF27FgUFv6vJzgpKQkiIiLcvX/16hVEREQwdOhQrsySJUu4Bb1LS0sxduxYNGvWDNLS0jAyMuKSElWoeImzdOlSNGnShAvgN23aBAMDA64XddCgQdwxERERcHNzQ8uWLWFhYYGQkBBkZWXh1q1bX3R/CSGEkP8M9g3Ly8tjAFheXt7XbsoPy9XVlfXr16/KfUOGDGHGxsbs8uXLTEFBgRUWFvL2N2/enG3dupUxxpi3tzcTFRVlT5484fafPn2aiYiIsOzs7CrrLy0tZfLy8uzEiRPcNgDsyJEjvHI9evRgy5Yt420LDQ1lmpqa3HcdHR0mISHBZGVlmZiYGAPAVFRU2IMHDxhjrNbXYGFhUeW9efPmDRMXF2cHDx7k9r9+/ZrJyMgwT09PXjvWrFnDGGPs7NmzTFRUlGVlZXH77927xwCw2NhY7pwyMjLszZs3XJmZM2eyDh06VHnP6ourqyvT0tJiioqK7N27d9z29+/fMyUlJaatrc1cXV0bpC2RkZEMAGvivpX9NDmUabiuZVI65kxUvhGTMenGAHAfaVk51q5dO/bnn38yxhjLyMhgAFh8fDxX36JFi5iGhgYTCATc71dpaSlbsmQJ09HRYeLi4kxbW5stW7aMO/eVK1dYt27dmJSUFFNRUWHu7u4sPz+fd78q/7vp2rUr7/eAMcb69evXYPesshcvXjCBQMCWL19eY7mq7lVubi4DwCIjIxlj//tZ5ObmMsYYCw4OZoqKilz5/fv3M0lJSbZt2zZ2//59Nm/ePCYvL8/9OyorK2Nqamrcv5ujR48yNTU1pqGhwdVha2vL5s2bxxhj7MOHD2zhwoUsLi6O/fXXX2z37t1MRkaG7d+/nyvv6urK5OTk2MiRI1lSUhJLSkpicXFxTFRUlO3du5dlZmay27dvs8DAwGqv/cGDBwwAS0xM/NTtJIQQ0oAoNmh41LNIhHycXbK6HC6MMQgEAty5cwcFBQVQVVXlslDKyckhIyMD6enpXHltbW00bdqU+25lZcUlBQGAZ8+ewd3dHQYGBlBUVISCggIKCgqqXEy9sjt37mDRokW8c7u7uyM7O5s392rmzJlISEjAxYsX0aFDB6xZswb6+vpcHbW5hur89ddfKC4uRvv27bltioqKNQ5LTElJgZaWFrS0tLhtJiYmUFJSQkpKCrdNV1cX8vLy3PevlRildevW0NLS4nqTAeDw4cPQ1tZGq1atuG1lZWVYvnw51/tjYWGBP//8k9tf0Rt14cIFtG3bFjIyMujUqRNvjtidO3fQrVs3yMvLQ0FBAW3atMHNmzd57RGVUYSonDIkNfQh37YfSvOfQ7HDAOjMDofO7HBIapnCcbALYmNjMXDgQGRnZ2Py5MmQkpJC//79sXfvXu7eZmdnc/MHX7x4gYEDB2Lp0qUQFxfHn3/+iUePHmHYsGHcuoydO3dGZGQkhgwZgpcvX6JXr16wsrLi1l188uQJ9uzZw7vmj4fgHz16lBvG3ZAePnwIxpjQ76aamhr3ez979uw6OdfatWsxduxYjB07FkZGRliyZAlMTEy4/QKBAF26dOH1VI4ePRpFRUW4f/8+iouLcfXqVXTt2hVA+bxPX19ftG3bFs2aNYOLiwtGjx6NAwcO8M4rKyuLbdu2oWXLlmjZsiWysrIgKyuLvn37QkdHB61atcLUqVOrbHNZWRm8vLxgbW39XSZjEwgEOHr06Fc7nhBCyH9LvWVDJd+nqrJLSpS+R0RStlBa75SUFDRr1gwFBQXQ1NTkHvgq+5wEMK6urnj58iUCAwOho6MDSUlJWFlZfXLOUUFBAXx9fTFgwAChfVJS/0tRrqamBn19fejr6+PgwYMwMzND27ZtYWJiUmfXUB++pcQoY8aMQXBwMFxcXAAAO3bswOjRo3n3bfny5di9eze2bNkCAwMDXLp0CSNGjECjRo24h34AmDdvHgICAtCoUSNMmDABY8aMQUxMDADAxcUFrVq1wubNmyEqKoqEhASh+6CuIIUXH4DSord4m3IJACAQLf+TJgAgISYCDQVJrvyoUaPw4sULREVFQVxcHL/99luVQbevry/8/f2xcuVKrF+/Hi4uLnj06BG3LuPAgQORmpoKBQUFSEtLIzs7G8OGDYO/vz/69++P/Px8XL58+bMz5dan0jLGZV98/iSvyjKxsbEoKyuDi4sLioqK6uS8KSkpQkOXraysEBkZyX3v2rUr/vjjDwDlcweXLVuGtLQ0REVF4dWrVyguLoa1tTVXfuPGjdixYweysrLw/v17fPjwQWhZHjMzM94Q8549e0JHRwd6enqwt7eHvb09+vfvX2WyqcmTJyMpKQlXrlypi1tACCGEfNcoWCSciuySHz/iFpaUYeLu27x1oC5evIjExERMmzYNP/30E54+fQoxMTFe0pmPZWVl4Z9//kGTJk0AANevX+clBYmJicGmTZvg4OAAAHj8+DFevHjBq0NcXJxLRlKhdevWSE1N5XoJa0NLSwtDhgzB3LlzueQ4tbmG6ujp6UFcXBxxcXHQ1tYGAOTl5SEtLQ1dunSp8hhjY2M8fvwYjx8/5noXk5OT8fr1a17vy6dULG+yfPlyzJkzh9t+9OhR9O/f/4uClsrBRWN5Ka53ecSIEZg7dy63DElMTAymTJmCadOmYdiwYSgqKsKyZctw/vx5WFlZcffmypUr2Lp1Ky9YXLp0Kfd9zpw56NOnDwoLCyElJYWsrCzMnDkTLVq0AAAYGBgItTFp1XAUlZSBFZe/2JDW7wBxVS1ugWtdVVku8cr9+/dx/vx5xMXFoW3btgCAbdu2VVmvm5sbhg0bBgBYtmwZ1q1bh9jYWNjb2/PWZax4iZCeno6SkhIMGDAAOjo6AMqDlW/Fxy+ASt+/AQQCnIiOQ//+/blyenp6AP6XDbZiWZzKvz/FxcV13r6KJFAPHjxAcnIyOnfujPv37yMqKgq5ublc7zMAhIWFYcaMGQgICICVlRXk5eWxcuVK3Lhxg1fnx8vTyMvL4/bt24iKisLZs2excOFC+Pj4IC4ujvcyyMPDA+Hh4bh06RJ++umnWrX/w4cPvMD0v664uFjoxU1d+dHuJSGEfA9oGCoBUHN2yYqEIfN2X0LczVtYtmwZ+vXrh759+2LUqFGwtbWFlZUVnJyccPbsWWRmZuLq1auYN28eb+iglJQUXF1dcefOHVy+fBlTp06Fs7MzNDQ0AJQHBKGhoUhJScGNGzfg4uIitIyBrq4uLly4gKdPnyI3NxcAsHDhQuzatQu+vr64d+8eUlJSEBYWhvnz59d4zZ6enjhx4gRu3rxZ62uojry8PFxdXTFz5kxERkbi3r17GDt2LERERKrNFGlrawszMzO4uLjg9u3biI2NxahRo9C1a1cuoKktKSkprFixgrsn/0ZEUjY6r7iIoVsuwzMsAcOCruNUUjZy3hSiUaNG6NOnD0JCQhAcHIw+ffrwlk14+PAh3r17h549e/KG81Ykiqms8rqDmprlLyEqevp+++03jBs3Dra2tvDz86tyKPDVmCv449BZNB80C2IqTaFiNxnA/xa4VpH930NnamoqxMTE0Lp1a26bvr4+lJWVheqt3C5ZWVkoKCjUOOzXwsICPXr0gJmZGQYPHoygoKA6+TnUhaqWFxGVVoCUjiV2bf8DR2OrH2LdqFEjAEB2dja37XPXRjQ2NhYK5K5fv877bmZmBmVlZSxZsgSWlpaQk5ODjY0NoqOjERUVBRsbG65sTEwMOnXqhEmTJqFVq1bQ19ev1TBxoHydWFtbW/j7++Pu3bvIzMzExYsXAZQHxB4eHjhy5AguXryIZs2aVVuPjY0NPDw84OXlBTU1NdjZ2dU6EdDJkydhbm4OKSkpdOzYEUlJSdwxL1++xLBhw9C0aVPIyMjAzMwM+/bt453742zKAGBpaQkfH58q2/rhwwd4eHhAU1MTUlJS0NHRwfLly7n9Dx48QJcuXSAlJQUTExNedmgAXJKj/fv3o2vXrpCSksKePXtq1dbaZodevHgxRo0aBQUFBYwfPx4AMHv2bBgaGkJGRgZ6enpYsGCB0IuKEydOoF27dpCSkoKamhrvxUdRURFmzJiBpk2bQlZWFh06dKhy1AghhJBPo2CRAABiM14JrVdXoTDjFp5sHInbK13Qy84ekZGRWLduHY4dOwZRUVEIBAKcOnUKXbp0wejRo2FoaIihQ4fi0aNHvOyQ+vr6GDBgABwcHNCrVy+Ym5tj06ZN3P7t27cjNzcXrVu3xsiRIzF16lQ0btyY15aAgACcO3cOWlpa3Dw5Ozs7hIeH4+zZs2jXrh06duyINWvWcL081TExMUGvXr2wcOHCWl9DTVavXg0rKyv07dsXtra2sLa2hrGxMW8obGUCgQDHjh2DsrIyunTpAltbW+jp6WH//v21Ol9ltra20NDQ4D0IVlabhzsbGxv8Mmw0nN0mIHbxADw7sBAlec/waEVfFOS9RsKTPEQkZcPZ2Rk+Pj7YsmUL+vTpw83j27dvHzfH6+TJk7hx4wYGDBgASUlJbuhsRQZbgD+8tiKgrhhe6+Pjg3v37qFPnz64ePEiTExMcOTIEV57mzVrhnGOPyN1vx9+dR8Hxasbsc+9I67M7i40ZPpzfO6wX1FRUZw7dw6nT5+GiYkJ1q9fDyMjI2RkZHxxG+pCTS+AVHpNAmOlGNa3O/btC0NKSgpSU1Oxe/du3L9/H6KiopCWlkbHjh3h5+eHlJQUREdHf/IFzMc8PT2xY8cOBAcHIy0tjZvjXFnFvMU9e/ZwgaG5uTmKiopw7tw5hIWFcWUNDAxw8+ZNnDlzBmlpaViwYAEuXbr0yXsdHh6OdevWISEhAY8ePcKuXbtQVlbGjWqYPHkydu/ejb1790JeXh5Pnz7F06dPq1xuBQB27twJCQkJxMTEYMuWLbW+HzNnzkRAQADi4uLQqFEjODo6ckFQYWEh2rRpg5MnTyIpKQnjx4/HyJEjERsbW+v6P7Zu3TocP34cBw4cQGpqKvbs2cONnCgrK8OAAQMgISGBGzduYMuWLdXOVZ0zZw48PT2RkpICOzu7WrW1ttmhV61aBQsLC8THx2PBggUAyl++hYSEIDk5GYGBgQgKCsKaNWu4Y06ePIn+/fvDwcEB8fHxuHDhAm++uIeHB65du4awsDDcvXsXgwcPhr29PR48ePDF95IQQn5YXzO7zqdQxqOGczT+CdOZHf7Jz9H4J5+ujDDGGCsoKGCKiops27Zt9Xqeisybhw8fZlJSUuzx48eMMcaOHDnCKv6JP3nyhK1cuZLFx8ez9PR0tm7dOiYqKspu3LjB1dOla1cmIiHNFNoPYE3GbWFNxm1hTSdsZwCYVPP2TNqgI+u47Dx7lvOcAWBqamqsqKiIHTp0iAFgTk5O7MGDB0xCQoLt2rWLTZ06lTVp0oSdOnWK3bt3j7m6ujJlZWV27NgxXgZNxhiLj49nAFhGRkaV1zh06FDm6OjIGBPOwMkYY2/fvmXKysrs8OHD3LbKGUhTUlIYAHbz5k1uf0XGy4rstIxVnW1XUVGRBQcHM8YYi4mJYQDYixcvqv15lJSUsKZNm7KAgIBqyzSEqw9f1PhvuenkXUy+dV/WRKs846ucnBxr3749W7lyJXv79i1jjLHk5GRmZWXFpKWlmaWlJTt79myV2VCHDRvGy0LbuHFjZmtry7Zv386WLFnC1NTUmJycHHN2dmbTp0/nZRVmjLE1a9YwAOz06dPctn79+jERERFmamrKbSssLGRubm5MUVGRKSkpsYkTJzJTU1OmoKDAlakqg/Ply5dZ165dmbKyMpOWlmbm5ua8DKqV2175ExwczEpKy9jVhy/Y0fgn7OrDF6xL166sVatW3LGfkzU2LCyMK/Py5UsmLS3Na8fH+vTpw6ZPn859r5xNuYKFhQXz9vbmXUvF7/CUKVNY9+7dWVlZmVDdZ86cYWJiYuzvv//mtp0+fZp3fMW1rV27tto2VtXWz8kO7eTk9Mm6V65cydq0acN9t7KyYi4uLlWWffToERMVFeVdF2PlWbPnzp37yXMRQr5tFBs0PJqzSAAAjeWr7v360nI/ovj4eNy/fx/t27dHXl4eFi1aBADo169fnZ+Ll7AkvwhiDOjfvz8sLS3h7e2N7du388o3bdoUM2bM4L5PmTIFZ86cwYEDB7g38vnviyGm3ATK3cZw5UrynvHqyc4rRMKTNwCAkJAQSEhIcPP4pKWloa+vj5kzZ8LLywt5eXlYuXIl1NXVceHCBfz88884d+4cTp06VeO1vX//HjNnzsSgQYPQrFkzPHnyBHFxcRg4cGC1x8jIyMDd3R3e3t5wcnISGvrbokUL2NraYvz48di8eTPExcUxffp0SEtLf9aC8pXXZXRwcIC0tDTu3buHCxcuoFevXmjcuDFu3LiB58+fw9jYuNb11oec/KpHClQQk1OBSs8JCBxqiX6WTassY2xsjKtXr/K2sUpzGG1sbMAYg5ubG+zt7REcHIzS0lI8e/YMERER8PT0xM8//4zs7GyIiVX/fzdeXl684YlA+ZxbHx8fXmZOSUlJBAcHIzg4mNvm5uaG5s2bc9+ryjDbuXPnGochsmrm9VYMya486uJVVi6sW39ZltSKebwAoKKiAiMjIy7zcWlpKZYtW4YDBw7g77//xocPH1BUVFRlEp7acnNzQ8+ePWFkZAR7e3v07dsXvXr1AvC/bMwVc8g/bl9lHw+L/1RbPyc7dFVD7vfv349169YhPT0dBQUFKCkpgYKCArc/ISEB7u7uVbY1MTERpaWlMDQ05G0vKiqCqqpqlccQQgipHg1DJQCA9s1UoKkoheoemwUANBWl0L6ZSkM267tTMaTK1tYWb9++xeXLl6Gmplan56h4gB0WdB2eYQmITnuOyw+eIyIpGytWrMDOnTt5S28A5Q93ixcvhpmZGVRUVCAnJ4czZ87wliX5UFoGCfXmH59OyPOC8gfnj5OIVFi8eDHGjRuH0tJSzJo1C/b29jh58iQMDAzQvn17LjlOdURFRfHy5UuMGjUKhoaGcHZ2Ru/eveHr61vjcR4eHkhJScHBgwer3L9r1y6oq6ujS5cu6N+/P9zd3SEvL1/tMOGqNG3aFL6+vpgzZw7U1dXh4eEBBQUFXLp0CQ4ODjA0NMT8+fMREBCA3r1717re+tDQL4AkJSWhoaGBpk2bonXr1vj9999x7NgxnD59mgvgPl6WoTZz0wBg69at0NLSgoyMDJydnZGXV3VGV6A8KKgYwi4lJYXOnTvzhj/XVlXzPQHgQ0kZYjILEJFUPpezrhIBrVy5EoGBgZg9ezYiIyORkJAAOzs7XjZoERERocC2pnO1bt0aGRkZWLx4Md6/fw9nZ2cMGjTos9v28b/12rT1S+u+du0aXFxc4ODggPDwcMTHx2PevHm8uj+ey15ZQUEBREVFcevWLSQkJHCflJQUBAYGfnb7CCHkR0c9iwQAICoigLejCSbuvg0BwJvnVBFAejuaQFSk9r0wP5pWrVrh1q1b9XqO2mSstbOzw9y5c+Hm5sbtr3i4W7t2LczMzCArKwsvLy/eA5iEqAgE+Chw+P9eN+WfXbhAUllStMq2Vcw/FQgEcHFxgb+/Px4+fMibO7pmzRpoamoKPfBaWlrytn08n7Kyit6sj2lpafEenD/uSdLU1OT1aj558gQ5OTm8LLpV1fv69Wve9wULFnBzqypERERU296vpeIF0NO8wirnLQpQngyoPl8Ade/eHRYWFjh8+DDGjRsntL9iblqTJk2QmJjIBfCzZs3iyjx8+BAHDhzAiRMn8ObNG4wdOxaTJk3irWNZ2axZs3Do0CHs3LkTOjo68Pf3h52dHR4+fMj1gn9KTfM9K/ieSEZPEw1eIqCKedTVJQK6fv06ly05NzcXaWlpXA90TEwM+vXrhxEjRgAon1OYlpbGy4zcqFEjXsKhN2/efHK+poKCAoYMGYIhQ4Zg0KBBsLe3x6tXr7hszNnZ2VyCqY+TD1XnU239kuzQFa5evQodHR3MmzeP2/bxCyZzc3NcuHABo0ePFjq+VatWKC0tRU5ODn7++edaXQ8hhJDqUc8i4dibamLziNbQUOQHDBXZJf9N0hDy79X2AXbpsuU4ceIErl27xm2v/HBnYWEBPT09pKWl8Y6VlxaHrKQYr3dZRLo802lpwSuud1kkl//gVpHqvvKSJs2bN+cSgFQoLi5GXFzcZy0LUpcuXryI48ePIyMjA1evXsXQoUOhq6v7yYfX71XFCyAAQiMGvvQFUEVWz5evcnEt/SWOJfyNa+kvUdPqLC1atEBmZmaV++bPn49OnTpBV1cXL1++RF5eHg4cOAAAXBKlwsJC7Nq1C5aWlujSpQvWr1+PsLAwBAYGCq2B+vbtW2zevBkrV65E7969YWJigqCgIEhLSwsNza7Jxwm/nmwegzdxx3hlsvMKEZvx6rMSAS1atAgXLlxAUlIS3NzcoKamBicnJwDlyXvOnTuHq1evIiUlBb/++iuePeMPA+/evTtCQ0Nx+fJlJCYmwtXVFaKiVb+8AcqTbu3btw/3799HWloaDh48CA0NDSgpKcHW1haGhoa8DNWVA7SafKqtX5IdunLdWVlZCAsLQ3p6OtatWyeU3Mrb2xv79u2Dt7c3UlJSkJiYiBUrVgAADA0N4eLiglGjRuHw4cPIyMhAbGwsli9fjpMnT9bq+gghhPwPBYuEx95UE1dmd8c+944IHGpZJ9klSd2oKWMtUN4bnJ1XiPdyTeHi4oJ169Zx+2rzICoA0EFPhftvABARl4REEyPkXf8TH148Rn+NPHgv5PeqVZ7H9/z5cxQUFEBWVhYTJ07EzJkzERERgeTkZLi7u+Pdu3cYO3ZsXdyOz1ZcXIzff/8dLVu2RP/+/dGoUSNERUXV25px34K6fgHUqVMn7IlMQJ8ttzAs6DrGzlsF65Y63NIqVWGMVRsg7N+/H9bW1tDQ0MCvv/6KwsJC3tBoANDW1kbTpv+bU2llZYWysjIYGxsLvfBIT09HcXExrK2tuW3i4uJo37690NDsmnxqvufH5Xbs2IGSkhK0adMGXl5eWLJkSZXl/fz84OnpiTZt2uDp06c4ceIE97Jl/vz5aN26fGSAjY0NNDQ0uECywty5c9G1a1f07dsXffr0gZOTE2++5sfk5eXh7++Ptm3bol27dsjMzMSpU6cgIiICERERHDlyBO/fv0f79u0xbtw4LF26tFbXXZu2fm526Aq//PILpk2bBg8PD1haWuLq1atCPfk2NjY4ePAgjh8/DktLS3Tv3p2XiTU4OBijRo3C9OnTYWRkBCcnJ14vJyGEkNqjYahEiKiIAFbNKRHAt+ZzHmAXLVrEW4Jj/vz5+Ouvv2BnZwcZGRmMHz8eTk5OQnO/dFVlMWFEa94i7mq9vfDm3Hq83DMN+261gL+/P5ckA+DP4xs9ejRGjRqFkJAQ+Pn5oaysDCNHjkR+fj7atm2LM2fOVLm2YUOws7ODnZ3dVzn312RvqomeJhpcQqTG8uVDT79kSPnFtJeYF/FEqHf7/YdSJDx5i4ikbKEANCUlpcp1Cyvmpvn6+sLOzg4XLlyAj49Pree9SUpKCi2tU1dqmsepMdxPqNynEgFV6Ny5M29txcpUVFR48zmroqCgwFtKBABcXV2rPa+7u3u1iWCA8l64y5cvV3u8rq5ulddRm7bKy8vzhgq/ffsWvr6+3FqKAKrtcfb394e/vz9v28cJkAYMGIABAwZUeby4uDh8fX0/Oc+ZEELIp1HPIvkuubm5QSAQwM/Pj7f96NGjn5Xd0sbGBgKBQOhTUlJS103+16p7gFXrMw2NB8znldPV1UVRURH3oFfxcJefn49nz55h8eLF2LlzJ++BLyoqCmvXrhXqXf5z7mC8zkhC4fv3iI+PR8+ePcEY4y2WvmDBAmRnZ6OsrIxLZiIlJYV169bh+fPnKCwsxJUrV9CuXbs6vy/k0ypeAHk6WePGiVBeoFh5UXeBQIBt27ahf//+kJGRgYGBAY4fPw6gfBj0b4F7kbmiL8oKC1CYdRcvT60FK3qLt0kX8P7BdYzznI3SMsYtiq6mpobExEQkJycLzSGtSDaydOlSLF26FGJiYlWuZ5mVlYV//vkH6enp0NPTw8iRIyEQCJCQkMAbhurj44MRI0ZAVFQUbdu2haKiIoYOHYpXr15xw59rs1B8Tk4Olnq6IStgAP7eMhYF9yKF2lT6Jgdvji9FTwsdKCgowNnZmddT7+PjA0tLS+zYsQPa2tpcsqPS0lL4+/tDQ0MDjRs3rnVP3vcoPj4e+/btQ3p6Om7fvg0XFxcA9ZMdmhBCSP2hYJF8t6SkpLBixQrk5ub+q3rc3d2RnZ3N+9SU5v9raciMtRXBRT/LprBqrkqJjX4gvr6+cHZ2xt27d+Hg4AAXFxe8evUKsRmv8Ort/3r9JJsaQ7mHOwQSMpA26gxJLXOw5l1w8to9DB06FAcPHsS7d+/QrVs3TJgwAfb29tyxN27cwMGDB8EYw9KlS2FmZlZtJlQpKSkMGDAAHTt2ROfOnZGamoohQ4ZAUVFRqGxGRgZ0dXUhEAiwYMECXLhwATY2Ntzw59osFO/m5oYnTx4jIOQQGjnNRUH8KZS9q9QDz8qQc2gJmkiXIjo6GufOncNff/2FIUOG8OpJT0/H6dOnERERwQ2jHDJkCJ48eYLo6GisWLEC8+fPx40bN77o5/Q9aIjs0IQQQuoXBYvku2VrawsNDQ0sX7682jKHDh1Cy5YtISkpCV1dXQQEBAiVkZGRgYaGBu8DfDqtf0Xvweek9f836iNhCfnvKy1jXDKaopIylNWUjQblwdKwYcOgr6+PZcuWoaCgALGxsULDoAWi4hCRlAUEAoiIS6Lo8V38E+SO/l0tcfToUejo6GDjxo04f/48Zs2ahc6dO3PHBgYGwt7eHtOnT8fSpUuxZs0aqKmpQVJSUqg9mpqaSExMxIcPH3Dw4EGYm5tzmXc/VlZWhmvXrmHo0KHci6SMjAycOXMGYmJi2LlzJ1atWoUePXrA1NSUWxeyQlpaGk6fPo2goCBMc+mLHTOc0WLwTLCSIq6M9PMUlLx8hNNH/0SbNm3QoUMH7Nq1C9HR0bwlOsrKyrBjxw6YmJjg999/h52dHdLT07F27VoYGRlh9OjRMDIyQmSkcM/lf0FFduiCggK8evUK586dg5mZ2dduFiGEkM9EwSL5bomKimLZsmVYv349njx5IrT/1q1bcHZ2xtChQ5GYmAgfHx8sWLCgykW7q1KR1j85ORmBgYEICgrCmjVreGUqp/WPiIhAfHw8Jk2aVBeXVyXKWEs+x8drcj7PL8K6Cw+4NQKrYm5uzv23rKwsFBQUkJOTU+M8PrU+06AzOxw6s8OxYksoAOD27duYMmUKFBQUICcnh+joaDg7O8PJyQkpKSno0KED/P398eLFC+Tn52P69OmQlJTkLVXy4cMH/PPPP1i6dCny8vLw/v17HDx4kDfvNSQkhBtOrauri0aNGnHDn1euXIlGjRqhXbt2tVooPiUlBWJiYmjTpg2A8n9vtwLcIK+giP6tm2Kfe0f8aiEJbS0taGlpcceZmJhASUmJl0RHV1cX8vLy3Hd1dXWYmJhw6zJWbMvJyan2vhJCCCFf27c31o6QapSWMS5Jx/P8IogxoH///rC0tIS3t7dQavzVq1ejR48e3BAwQ0NDJCcnY+XKlbw1CDdt2oRt27Zx33/99VcEBATw0t/r6upixowZCAsL460BV5HWvyJb4/r169GnTx8EBARwPZR1rS4TlpD/rqrW5BQIBHjzvphbk9PeVFNo6OfH2WEFAgHKysrQvpkKVGQlwM+hW6kcyl9aNJXN5xZF/3hZBzk5uc+6hkaNGqFJkybYt28fxowZAwUFhRrLV9f2f0NURABREQHMmirCqrkq4mo5J7qqttRH+wghhJD6RMEi+S5EJGXzMnS+SHsOidL3iEjKxooVK9C9e3fMmDGDd0xKSopQMgVra2usXbsWpaWl3IOsi4sLb32xiqQZ+/fvx7p165Ceno6CggKUlJQIPaxWl9Y/NTW13oJFgDLWkppVtyaniIwiSgteAShfk7PDTzKfXNS9gqiIAG6ddDH7f+9VIBAVA1gZbxi0nkT+JxdFNzY2FpqrV9WC8NLS0ggPD4eDgwPs7Oxw9uxZXm/d56jNQvEtWrRASUkJbt26xSVjSk1N5fV2Vixm//jxY653MTk5Ga9fv/5qa4gSQggh9YWGoZJvXkUPycdrDBaWlGHi7tt4p2IAOzs7zJ0794vqV1RUhL6+PvdRU1Pj0vo7ODggPDwc8fHxmDdvXq3T+hPyNVW3JqeUjjne3ovE+8dJePTwPpych9e4qPvH2jcrf0GhrlA+JFVUQR3sw3tIP0+GXx8ddNFTrNWi6FOnTkVERARWrVqFBw8eYMOGDYiIiKjynLKysjh58iTExMTQu3dvFBQUfO7tAFC7heKNjIxgb2+PX3/9FTdu3MCtW7cwbtw4SEtLc/XY2trCzMwMLi4uuH37NmJjYzFq1Ch07doVbdu2/aK2EUIIId8qChbJN626HpLKfE8kY+my5Thx4gSuXbvGbTc2NkZMTAyvbExMDAwNDT/5gHz16lXo6Ohg3rx5aNu2LQwMDPDo0SOhchVp/Stcv34dIiIivHlQhDS06tbkVOzoDEktU+T8uQg5B31h2blnjYu6VyfCqwv2uXfE1hnD0H+4G3KOrcDQLmbc2nifWhS9Y8eOCAoKQmBgICwsLHD27FnesO+PycnJ4fTp02CMoU+fPnj79u1ntxmo3ULxwcHBaNKkCbp27YoBAwZg/PjxvPUcBQIBjh07BmVlZXTp0gW2trbQ09PjrWtKCCGE/FcIWFUr7n4j3rx5A0VFReTl5X1yrgr5b7qW/hLDgoSHp704uQZlRW+59QX3uXfEZt9pOHjwIAoLC8EYw+3bt9GuXTv4+PhgyJAhuHbtGiZOnIhNmzZxcxZtbGxgaWmJtWvX8uo/fvw4Bg4ciNDQULRr1w4nT56Er68vSktLuSFpPj4+WLVqFaysrLBq1Sq8efMG48aNQ+vWrbFv3776vC2E1Ki6fzcf2+fe8Ycezvz27Vs0bdoUAQEBGDt27NduDiGEkE+g2KDhUc8i+aZV10NSVblFixbxkkW0bt0aBw4cQFhYGExNTbFw4UIsWrSIl9ymOr/88gumTZsGDw8PWFpa4urVq1yinMr09fUxYMAAODg4oFevXjWm9SekoTTkmpzfE1oonhBCCPk81LNIvmnfcg+Jj48Pjh49ioSEhAY9LyG1UTHXFwA/I+r//++PuNRKfHw8xo0bh9TUVEhISKBNmzZYvXo1rf9HCCHfCYoNGh5lQyXftIoekqd5hVXOW6xI1/+j9ZAQ8ikVa3JWziIMlP978XY0+eECReB/C8UTQgghpHYoWCTfNFERAbwdTTBx920IUHUPibejCa0xSEgVaE1OQgghhPwbNAyVfBc+XmcRKJ9z9aP2kBBCCCGE/GgoNmh41LNIvgvUQ0IIIYQQQkjDomCRfDdERQQ/dJp/QgghhBBCGhItnUEIIYQQQgghRAgFi4QQQgghhBBChFCwSAghhBBCCCFECAWLhBBCCCGEEEKEULBICCGEEEIIIUQIBYuEEEIIIYQQQoRQsEgIIYQQQgghRAgFi4QQQgghhBBChFCwSAghhBBCCCFECAWLhBBCCCGEEEKEULBICCGEEEIIIUQIBYuEEEIIIYQQQoRQsEgIIYQQQgghRAgFi4QQQgghhBBChFCwSAghhBBCCCFECAWLhBBCCCGEEEKEULBICCGEEEIIIUQIBYuEEEIIIYQQQoRQsEgIIYQQQgghRAgFi4QQQgghhBBChFCwSAghhBBCCCFECAWLhBBCCCGEEEKEULBICCGEEEIIIUQIBYuEEEIIIYQQQoRQsEgIIYQQQgghRAgFi4QQQgghhBBChFCwSAghhBBCCCFECAWLhBBCCCGEEEKEULBICCGEEEIIIUQIBYuEVCMzMxMCgQAJCQlfuylfpDbtj4qKgkAgwOvXrwEAISEhUFJS+lfnrYs6vgYbGxt4eXl9M/XUlo+PDywtLWss09BtIoQQQsh/AwWL5D/Fzc0NAoEAEyZMENo3efJkCAQCuLm5NXzD6kiLFi0gKSmJp0+f1kv9Q4YMQVpaWq3L6+rqYu3atf+qju/Vx4F2hcOHD2Px4sVfp1HV+BbbRAghhJBvHwWL5D9HS0sLYWFheP/+PbetsLAQe/fuhba29lds2b9z5coVvH//HoMGDcLOnTvr5RzS0tJo3LjxV6+jrn348KHBzqWiogJ5efkGO19tfIttIoQQQsi3j4JF8p/TunVraGlp4fDhw9y2w4cPQ1tbG61ateK2RUREoHPnzlBSUoKqqir69u2L9PT0austLS3FmDFj0KJFC2RlZQEAjh07htatW0NKSgp6enrw9fVFSUkJgKqHgb5+/RoCgQBRUVEA/tc7dfLkSZibm0NKSgodO3ZEUlKS0Pm3b9+O4cOHY+TIkdixY4fQ/tjYWLRq1QpSUlJo27Yt4uPjhcqcOnUKhoaGkJaWRrdu3ZCZmcnbX9UQ0hMnTqBdu3aQkpKCmpoa+vfvD6B8aOOjR48wbdo0CAQCCASCauvYvHkzmjdvDgkJCRgZGSE0NJS3XyAQYNu2bejfvz9kZGRgYGCA48ePC7W/tmxsbODh4QEvLy+oqanBzs4OSUlJ6N27N+Tk5KCuro6RI0fixYsX1dYRGhqKtm3bQl5eHhoaGhg+fDhycnIAlP9su3XrBgBQVlbm9Vh/POQzNzcXo0aNgrKyMmRkZNC7d288ePCA219xv86cOQNjY2PIycnB3t4e2dnZXJmoqCi0b98esrKyUFJSgrW1NR49eiTUXl1dXSgqKmLo0KHIz8/n3Y/KbdLV1cXixYsxbNgwyMrKomnTpti4cSO3nzEGHx8faGtrQ1JSEk2aNMHUqVNr/wMghBBCyH8CBYvkP2nMmDEIDg7mvu/YsQOjR4/mlXn79i1+++033Lx5ExcuXICIiAj69++PsrIyofqKioowePBgJCQk4PLly9DW1sbly5cxatQoeHp6Ijk5GVu3bkVISAiWLl362e2dOXMmAgICEBcXh0aNGsHR0RHFxcXc/vz8fBw8eBAjRoxAz549kZeXh8uXL3P7CwoK0LdvX5iYmODWrVvw8fHBjBkzeOd4/PgxBgwYAEdHRyQkJGDcuHGYM2dOje06efIk+vfvDwcHB8THx+PChQto3749gPIA/KeffsKiRYuQnZ3NC24qO3LkCDw9PTF9+nQkJSXh119/xejRoxEZGckr5+vrC2dnZ9y9excODg5wcXHBq1evPus+VrZz505ISEggJiYGfn5+6N69O1q1aoWbN28iIiICz549g7Ozc7XHFxcXY/Hixbhz5w6OHj2KzMxMLiDU0tLCoUOHAACpqanIzs5GYGBglfW4ubnh5s2bOH78OK5duwbGGBwcHHg/33fv3mHVqlUIDQ3FpUuXkJWVxf38SkpK4OTkhK5du+Lu3bu4du0axo8fzwXnAJCeno6jR48iPDwc4eHhiI6Ohp+fX433Z+XKlbCwsEB8fDzmzJkDT09PnDt3DgBw6NAhrFmzBlu3bsWDBw9w9OhRmJmZffqmE0KqRPOGCSHfLfYNy8vLYwBYXl7e124K+YaVlJaxqw9fsKPxT5jDgKHsl1/6sZycHCYpKckyMzNZZmYmk5KSYs+fP2f9+vVjrq6uVdbz/PlzBoAlJiYyxhjLyMhgANjly5dZjx49WOfOndnr16+58j169GDLli3j1REaGso0NTV5x8fHx3P7c3NzGQAWGRnJGGMsMjKSAWBhYWFcmZcvXzJpaWm2f/9+btsff/zBLC0tue+enp6869i6dStTVVVl79+/57Zt3ryZd/65c+cyExMTXntnz57NALDc3FzGGGPBwcFMUVGR229lZcVcXFyqvF+MMaajo8PWrFnD2/ZxHZ06dWLu7u68MoMHD2YODg7cdwBs/vz53PeCggIGgJ0+fbrac9eka9eurFWrVtz3xYsXs169evHKPH78mAFgqamp3DGenp7V1hkXF8cAsPz8fMbY/352Ffeu8rkr6klLS2MAWExMDLf/xYsXTFpamh04cIAxVn6/ALCHDx9yZTZu3MjU1dUZY+W/DwBYVFRUle3y9vZmMjIy7M2bN9y2mTNnsg4dOlTZJsbKf2729va8eoYMGcJ69+7NGGMsICCAGRoasg8fPlR7Pwj52j71b/Zb8j21lZBvGcUGDY96Fsl3LSIpG51XXMSwoOvwDEtAdNpzXH7wHLeelaBPnz4ICQlBcHAw+vTpAzU1Nd6xDx48wLBhw6CnpwcFBQXo6uoCADfEtMKwYcPw9u1bnD17FoqKitz2O3fuYNGiRZCTk+M+7u7uyM7Oxrt37z7rOqysrLj/VlFRgZGREVJSUrhtO3bswIgRI7jvI0aMwMGDB7mhhikpKdww1qrqrCjToUOHas9blYSEBPTo0eOzruVjKSkpsLa25m2ztrbmXR8AmJubc/8tKysLBQUFbtjnp5SWMVxLf4ljCX/jWvpLMABt2rTh9t+5cweRkZG8n1WLFi0AoNqhx7du3YKjoyO0tbUhLy+Prl27AhD+/ahJSkoKxMTEePddVVVV6OcrIyOD5s2bc981NTW5a1dRUYGbmxvs7Ozg6OiIwMBAoV5cXV1d3pzEysdX5+OfvZWVFdemwYMH4/3799DT04O7uzuOHDnCDa8m5L+mIec0E0LI94aCRfLdikjKxsTdt5GdV8jbXlhShom7b8OihxNCQkKwc+dOjBkzRuh4R0dHvHr1CkFBQbhx4wZu3LgBQPjBwcHBgRv+V1lBQQF8fX2RkJDAfRITE/HgwQNISUlBRKT8nxdjjDum8tDD2kpOTsb169cxa9YsiImJQUxMDB07dsS7d+8QFhb22fV9Dmlp6XqtvzJxcXHed4FAUOWQ4I99/MJgWNB1xGfl4nmlX4uCggJu+G3lz4MHD9ClSxehOt++fQs7OzsoKChgz549iIuLw5EjRwDUz4NlVdde+fcmODgY165dQ6dOnbB//34YGhri+vXrNR5fm3tXHS0tLaSmpmLTpk2QlpbGpEmT0KVLly/6/SUEKB+GOWXKFHh5eUFZWRnq6uoICgrC27dvMXr0aMjLy0NfXx+nT5/mjomOjkb79u0hKSkJTU1NzJkzh3tp4ebmhujoaAQGBnJzpivmYNd0XEVbPp7TDAD37t1D3759oaCgAHl5efz8889IT0/HpUuXIC4uLpSF2svLCz///DP3PSYmBjY2NpCRkYGysjLs7OyQm5tb5f0oKirCjBkz0LRpU8jKyqJDhw7cXHYAePToERwdHaGsrAxZWVm0bNkSp06d+lc/A0II+RIULJLvUmkZg++JZLAaypzKVceHDx9QXFzMPQxUePnyJVJTUzF//nz06NEDxsbG1f6f+sSJE+Hn54dffvkF0dHR3PbWrVsjNTUV+vr6Qh8RERE0atQIAHi9QNWteVj5wT83NxdpaWkwNjYGUJ7YpkuXLrhz5w4v0Pntt9+wfft2AICxsTHu3r2LwsLCKuusKBMbG1vteatibm6OCxcuVLtfQkICpaWlNdZhbGyMmJgY3raYmBiYmJjUeFxtVPfC4ENJGS6m5CAiqfzet27dGvfu3YOurq7Qz0pWVlao3vv37+Ply5fw8/PDzz//jBYtWgj11ElISABAjddvbGyMkpIS7kUE8L/fvc+9/latWmHu3Lm4evUqTE1NsXfv3s86/mMf/+yvX7/O/c4B5S8KHB0dsW7dOkRFReHatWtITEz8V+ckP7adO3dCTU0NsbGxmDJlCiZOnIjBgwejU6dOuH37Nnr16oWRI0fi3bt3+Pvvv+Hg4IB27drhzp072Lx5M7Zv344lS5YAAAIDA2FlZcWN5sjOzoaWltYnj6vcloo5zVu2bMHff/+NLl26QFJSEhcvXsStW7cwZswYlJSUoEuXLtDT0+Ml5iouLsaePXu4F5EVozBMTExw7do1XLlyBY6OjtX+ffDw8MC1a9cQFhaGu3fvYvDgwbC3t+eSX02ePBlFRUW4dOkSEhMTsWLFCsjJydXHj4UQQmok9rUbQMiXiM14JRQgVMYAPM0vxs6TMWivpwJRUVHefmVlZaiqquKPP/6ApqYmsrKyakz2MmXKFJSWlqJv3744ffo0OnfujIULF6Jv377Q1tbGoEGDICIigjt37iApKQlLliyBtLQ0OnbsCD8/PzRr1gw5OTmYP39+lfUvWrQIqqqqUFdXx7x586CmpgYnJycUFxcjNDQUixYtgqmpKe+YcePGYfXq1bh37x6GDx+OefPmwd3dHXPnzkVmZiZWrVrFKz9hwgQEBARg5syZGDduHG7duoWQkJAa77O3tzd69OiB5s2bY+jQoSgpKcGpU6cwe/ZsAOXDHy9duoShQ4dCUlJSaKgvUJ68x9nZGa1atYKtrS1OnDiBw4cP4/z58zWe+1Nq88LA90QyeppoYPLkyQgKCsKwYcMwa9YsqKio4OHDhwgLC8O2bduEfj+0tbUhISGB9evXY8KECUhKShJap1BHRwcCgQDh4eFwcHCAtLS00MOcgYEB+vXrB3d3d2zduhXy8vKYM2cOmjZtin79+tXqOjMyMvDHH3/gl19+QZMmTZCamooHDx5g1KhRtTq+OjExMfD394eTkxPOnTuHgwcP4uTJkwDKM7SWlpaiQ4cOkJGRwe7duyEtLQ0dHZ1/dU7yY7OwsOD+Bs6dOxd+fn5QU1ODu7s7AGDhwoXYvHkz7t69ixMnTkBLSwsbNmyAQCBAixYt8M8//2D27NlYuHAhFBUVISEhARkZGWhoaHDn2LRpU43HVYz4MDAwgL+/P3fc77//DkVFRYSFhXE99YaGhtz+sWPHIjg4GDNnzgRQniW6sLCQS5Ll7++Ptm3bYtOmTdwxLVu2rPI+ZGVlITg4GFlZWWjSpAkAYMaMGYiIiEBwcDCWLVuGrKwsDBw4kEsspaen9y/uPCGEfDnqWSTfpZz86gPFyt5CHAoKCkLbRUREEBYWhlu3bsHU1BTTpk3DypUra6zLy8sLvr6+cHBwwNWrV2FnZ4fw8HCcPXsW7dq1Q8eOHbFmzRreA/WOHTtQUlKCNm3awMvLS+jtdgU/Pz94enqiTZs2ePr0KU6cOAEJCQkcP34cL1++5JarqMzY2BjGxsbYvn075OTkcOLECSQmJqJVq1aYN28eVqxYwSuvra2NQ4cO4ejRo7CwsMCWLVuwbNmyGq/ZxsYGBw8exPHjx2FpaYnu3bvzeicXLVqEzMxMNG/enOtJ/ZiTkxMCAwOxatUqtGzZElu3bkVwcDBsbGxqPPenfOqFAQBk5xUiNuMVmjRpgpiYGJSWlqJXr14wMzODl5cXlJSUuIfHyho1aoSQkBAcPHgQJiYm8PPzEwq+mzZtCl9fX8yZMwfq6urw8PCosg3BwcFo06YN+vbtCysrKzDGcOrUKaGho9WRkZHB/fv3MXDgQBgaGmL8+PGYPHkyfv3111odX53p06fj5s2baNWqFZYsWYLVq1dzPfBKSkoICgqCtbU1zM3Ncf78eZw4cQKqqqr/6pzkx1J5LvGb98W8jLqioqJQVVXlbVNXVwcA5OTkICUlBVZWVrysv9bW1igoKMCTJ0+qPWdtj6s8pxko7xn8+eefq/136ebmhocPH3I98iEhIXB2duZGJnzO/O7ExESUlpbC0NCQN486Ojqam0M9depULFmyBNbW1vD29sbdu3drVTchhNQ1Aas8MeYb8+bNGygqKiIvL6/KB37y47qW/hLDgmoeQgkA+9w7wqr5t/uAGxUVhW7duiE3N1dobUJSs2MJf8MzLOGT5QKHWqKfZdP6b9B3RFdXF15eXpTKn9SbiKRs+J5I5l7oPN07B8pahgjeugH2ppoAqv49FAgEOHLkCHbt2gVFRUXeEkh37tyBpaUlHj16BG1tbdjY2MDS0hJr167lygwYMOCLjhs4cCDk5OSwc+fOaq9p4MCBUFNTw6JFi/DTTz8hKiqKS95V8ULI19e3ymMrn3P//v1wcXHBvXv3hEY1yMnJcT2ljx8/xsmTJ3H27FmEh4cjICAAU6ZMqeGuE/LfR7FBw6OeRfJdat9MBZqKUhBUs18AQFNRCu2bqTRks/41XV1d3gPM11SxWHxNfHx8YGlp2SDt+VhjealPF/qMcoSQulHdXOK3RSWYuPs2N5e4JsbGxty6pBViYmIgLy+Pn376CUDVc6Zrc1xVzM3Ncfny5RqTOI0bNw779+/HH3/8gebNm/OyPH9qfndlrVq1QmlpKXJycoTmUFceUqulpYUJEybg8OHDmD59OoKCgmpVPyGE1CUKFsl3SVREAG/H8gQhHweMFd+9HU0gKlJdONnwHj9+jDFjxqBJkyaQkJCAjo4O1q9f/9n1PH36FFOmTIGenh4kJSWhpaUFR0fHWj+o1NaQIUOQlpZWp3XWpf/qCwNCvme1nUtcWlbzoKZJkybh8ePHmDJlCu7fv49jx47B29sbv/32Gzd0XFdXFzdu3EBmZiZevHiBsrKyWh1XFQ8PD7x58wZDhw7FzZs38eDBA4SGhiI1NZUrU5EhecmSJRg9ejTv+Llz5yIuLg6TJk3C3bt3cf/+fWzevBkvXrwQOpehoSFcXFwwatQoHD58GBkZGYiNjcXy5cu5ecNeXl44c+YMMjIycPv2bURGRvISUBFCSEOhYJF8t+xNNbF5RGtoKPJ7jjQUpbB5RGtuqNO34K+//kLbtm3x4MED7Nu3Dw8fPsSWLVuQmpoKAwODWi9zkJmZiTZt2uDixYtYuXIlEhMTERERgW7dumHy5Ml12mZpaWk0bty4TuusS9/jC4NvRWZmJg1BJfWiNsnHKuYS16Rp06Y4deoUYmNjYWFhgQkTJmDs2LG8JGEzZsyAqKgoTExM0KhRI2RlZdXquKqoqqri4sWLKCgoQNeuXdGmTRsEBQXx5jCKiIjAzc0NpaWlQgmmDA0NcfbsWdy5cwft27eHlZUVjh07BjGxqvMIBgcHY9SoUZg+fTqMjIzg5OSEuLg4aGtrAyjPsjx58mQYGxvD3t4ehoaGvOQ5hBDSUGjOIvnulZYxxGa8Qk5+IRrLl/ckfWsBQu/evZGUlIS0tDTe2oVPnz5F8+bNMWrUKGzevFloDs+2bdswY8YMHDp0CD169ODWfExNTRVa8uH169dQUlJCZmYmmjVrhvj4eG6I6OvXr6GsrIzIyEjY2NhwcyXDw8Mxd+5cpKWlwdLSEtu2beOyroaEhMDLywuvX7/mzuHn54c1a9bg3bt3cHZ2RqNGjRAREVHtkiAN4eO5UUB5j6K3o8k39cKAkB/Bf30u8dixY/H8+XMcP378azeFkB8SxQYNj5bOIN89URHBN53E5tWrVzhz5gyWLl0qtMi9hoYGXFxcsH//fqG3xv7+/vD398fZs2fRvn17vHr1ChEREVi6dGmVawN+SYKcmTNnIjAwEBoaGvj999/h6OiItLS0KjMCHjhwAD4+Pti4cSM6d+6M0NBQrFu37qundLc31URPE41v/oUBIT+C/+pc4ry8PCQmJmLv3r0UKBJCfigULBJSDyr3dj5PvwfGWLXzTYyNjZGbm4vnz59z22bPno3Q0FBER0dza3U9fPgQjDG0aNGiztrp7e2Nnj17AihfpPqnn37CkSNHuLXDKlu7di3Gjh2LsWPHAgCWLFmC8+fPo7CwdsuY1Kdv/YUBIT+KirnET/MKq5y3KED5VIHvbS5xv379EBsbiwkTJnB/Mwkh5EdAwSIhdezjYZFF/5QnSLj16BWcanF8QEAA3r59i5s3b/J67epjxLiVlRX33yoqKjAyMkJKSkqVZVNSUjBhwgSh4yMjI+u8XYSQ71PFXOKJu29DAPACxu95LnFUVNTXbgIhhHwVlOCGkDpUVcp4MWVNAAJsOBxdZcr4lJQUKCsrc4va//zzzygtLcWBAwd45QwMDCAQCHD//v0a21CR8a9ycFlTOnhCSN1yc3ODk5MTb9u1a9cgKiqKPn361Pn56rPuL/E9JR8jhBBSMwoWCakj1aWMF5VWgJSuJfJvn4T34XheyvinT59iz549GDJkCASC8jft7du3x+nTp7Fs2TKsWrWKK6uiogI7Ozts3LgRb9++FTp/RSKaiqAzO/t/gWl1CWiuX7/O/Xdubi7S0tJqHC5748aNao8nhFRv+/btmDJlCi5duoR//vnnu6n7S9mbauLK7O7Y594RgUMtsc+9I67M7k6BIiGEfGcoWCSkjtSUMl6l5wSw0mLcCZqFrfvD8fjxY0RERKBnz55o2rQpli5dyivfqVMnnDp1Cr6+vli7di23fePGjSgtLUX79u1x6NAhPHjwACkpKVi3bh03pFRaWhodO3bEgAEDMHfuXERHR1ebNn7RokW4cOECkpKS4ObmBjU1NaEekQqenp7YsWMHgoODkZaWBm9vb9y7d+/zb1QD8PHx4TLBEvK1FRQUYP/+/Zg4cSL69OmDkJAQ3v6oqCgIBAKcOXMGrVq1grS0NLp3746cnBycPn0axsbGUFBQwPDhw/Hu3bvPqrshfPjwocrtFXOJ+1k2hVVz1e9u6CkhhBAKFgmpMzn51Sd6EVdpCk3XtRBT0sC8KWPRvHlzjB8/Ht26dcO1a9egoiKc7KFz5844efIk5s+fj/Xr1wMA9PT0cPv2bXTr1g3Tp0+HqakpevbsiQsXLmDz5s3csTt27ABQPv/Ry8sLS5YsqbJdfn5+8PT0RJs2bfD06VOcOHECEhIS3P53795xweOQIUOwYMECzJo1C23atMGjR48wceLEz75PhPxoDhw4gBYtWsDIyAgjRozAjh07qpyD7OPjgw0bNuDq1at4/PgxnJ2dsXbtWuzduxcnT57E2bNnub8Fn1v3x8rKyuDv7w99fX1ISkpCW1ube2k1e/ZsGBoaQkZGBnp6eliwYAFvKHvFy5ht27ahWbNmkJIqH276559/wszMDNLS0lBVVYWtrW2VoyAIIYR8PyjBDSF15FOp4MUUG0OtzzTsc+9YbebOzMxM3vcuXbqgoKCAt01TUxMbNmzAhg0bqj2XsbExNDQ0eGs2VvUA2blzZyQlJVVZh5ubG6KionjrLP7+++/4/fffeeVWrFhRbTs+x4cPH3iBKiH/Fdu3b8eIESMAAPb29sjLy0N0dDRsbGx45ZYsWQJra2sA5ev5zZ07F+np6Vyiq0GDBiEyMhKzZ8/+7Lo/NnfuXAQFBWHNmjXo3LkzsrOzufnQ8vLyCAkJQZMmTZCYmAh3d3fIy8tj1qxZ3PEPHz7EoUOHcPjwYYiKiiI7OxvDhg2Dv78/+vfvj/z8fFy+fLleEnMRQghpONSzSEgdqUgZX91AKwHKF4uvq5TxNjY28PDwgIeHBxQVFaGmpoYFCxbwHs7evXuHMWPGQF5eHtra2vjjjz94ddy7dw/du3fnegLGjx/PBac+Pj7YuXMnjh07BoFAAIFAwGUETExMrPY4ACgpKcHUqVOhpKQEVVVVzJ49G66urrwhrhXt9/LygpqaGuzs7AAAq1evhpmZGWRlZaGlpYVJkybx6g4JCYGSkhKOHj0KAwMDSElJwc7ODo8fPxa6R6GhodDV1YWioiKGDh2K/Px8AMCuXbugqqqKoqIiXnknJyeMHDnyC34a5EdXWsZwLf0ljiX8jef5Raj4Z5iamorY2FgMGzYMACAmJoYhQ4Zg+/btQnWYm5tz/62urs717FXelpOTw33/nLort+/8nUwEBgbC398frq6uaN68OTp37oxx48YBAObPn49OnTpBV1cXjo6OmDFjhlDCrQ8fPmDXrl1o1aoVzM3NkZ2djZKSEgwYMAC6urowMzPDpEmTICcn94V3lBBCyLeAgkVC6khFyngAQgFjfaWM37lzJ8TExBAbG4vAwECsXr0a27Zt4/YHBASgbdu2iI+Px6RJkzBx4kSkpqZy+wcNGgRlZWXExcXh4MGDOH/+PDw8PAAAM2bMgLOzM+zt7ZGdnY3s7Gx06tQJb9++hZ2dXbXHAeW9jXv27EFwcDBiYmLw5s0bHD16tMr2S0hIICYmBlu2bAFQns113bp1uHfvHnbu3ImLFy/yejSA8iB46dKl2LVrF2JiYvD69WsMHTqUVyY9PR1Hjx5FeHg4wsPDER0dDT8/PwDA4MGDUVpayltcOycnBydPnsSYMWO+8KdBflQRSdnovOIihgVdh2dYAqLTnuPyg+eISMrG9u3bUVJSgiZNmkBMTAxiYmLYvHkzDh06hLy8PF494uLi3H8LBALe94ptZWVl3Pfa1v1x+0YGHEZRURHEfjKr8nr2798Pa2traGhoQE5ODvPnz0dWVhavjI6ODpdMCwAsLCzQo0cPmJmZYfDgwQgKCkJubu7n30xCCCHfFAoWCalDDZ0yXktLC2vWrIGRkRFcXFwwZcoUrFmzhtvv4OCASZMmQV9fH7Nnz4aamhoiIyNhY2ODP/74A0VFRdi1axdMTU3RvXt3bNiwAaGhoXj27Bnk5OQgLS0NSUlJaGhoQENDAxISEti7dy8KCwurPQ4A1q9fj7lz56J///5o0aIFNmzYACUlJaH2GxgYwN/fH0ZGRjAyMgIAeHl5oVu3btDV1UX37t2xZMkSoV6N4uJibNiwAVZWVmjTpg127tyJq1evIjY2litTVlaGkJAQmJqa4ueff8bIkSNx4cIFAOVJgIYPH47g4GCu/O7du6Gtrf3J4XuEVFbVcjkAUFhShgm74rBtRwgCAgKQkJDAfe7cuYMmTZpg3759X3zekpIS7Nq165N1V9U+gbgkAGD+0SSh5XyuXbsGFxcXODg4IDw8HPHx8Zg3b55QEhtZWVned1FRUZw7dw6nT5+GiYkJ1q9fDyMjI2RkZHzxNRJCCPn6aM4iIXXM3lQTPU00EJvxCjn5hWgsXz70tC56FEvLGFfvm/fF6NChA7fkBgBYWVkhICAApaWlAPjD2gQCATQ0NLhhbCkpKbCwsOA99FlbW6OsrAypqalQV1evsg2fOk5KSgrPnj1D+/btuf2ioqJo06YNr1cEANq0aSNU//nz57F8+XLcv38fb968QUlJCQoLC/Hu3TvIyMgAKB9u165dO+6YFi1aQElJCSkpKdx5dXV1IS8vz5XR1NTkDeFzd3dHu3bt8Pfff6Np06YICQmBm5sb734SUpPqlsup8O5hLF6/fg230WOgoqzE2zdw4EBs374dEyZM+KJzh4eHIzc3F2PHjoWiomKVdbuP/7XK9okrN4FATBKFj+7A94QueppocH+frl69Ch0dHcybN48r/+jRo1q1SSAQwNraGtbW1li4cCF0dHRw5MgR/Pbbb190jYQQQr4+ChYJqQcVKePrUkRSNnxPJHM9BE+z3+BJaTYikrKr7bH81DC2r+3j3onMzEz07dsXEydOxNKlS6GiooIrV65g7Nix+PDhAxcs1sanrr1Vq1awsLDArl270KtXL9y7dw8nT578dxdEfig1LZcDAAV3z0JKxwKpr0phpczfN3DgQPj7++Pu3btfdO7t27fD1tZWKFCsXPfe05erbJ9ATAIKHQYiNyoYD0TFcDhKEVoyJbh37x4MDAyQlZWFsLAwtGvXDidPnsSRI0c+2Z4bN27gwoUL6NWrFxo3bowbN27g+fPn1a7bSggh5PtAw1AJ+Q5UN9TtdWYKJu6+zQ0lu379OgwMDCAqKvrJOo2NjXHnzh1eavuYmBiIiIhwQ0IlJCS4XsraHqeoqAh1dXXExcVx+0tLS3H79u1PtunWrVsoKytDQEAAOnbsCENDwyoXGS8pKcHNmze576mpqXj9+vVnP5iOGzcOISEhCA4Ohq2tLbS0tD7rePJjq265HLU+09B4wHw0HuSNxoN9qizXvn17MMZgbm4OGxsbMMZ4Q7Xd3Nx4mYiB8qRTCQkJAIATJ05U+3Kjom6Fps2rbbui9VAotOuP15f3YLhdJwwZMgQ5OTn45ZdfMG3aNHh4eMDS0hJXr17FggULar4RABQUFHDp0iU4ODjA0NAQ8+fPR0BAAHr37v3JYwkhhHy7KFgk5BtX01C3kvzneHUhCHN2nMGePXuxfv16eHp61qpeFxcXSElJwdXVFUlJSYiMjMSUKVMwcuRIbgiqrq4u7t69i9TUVLx48QLFxcW1Om7KlClYvnw5jh07htTUVHh6eiI3N/eTQzz19fVRXFyM9evX46+//kJoaCiX+KYycXFxTJkyBTdu3MCtW7fg5uaGjh078oa+1sbw4cPx5MkTBAUFUWIb8tk+tVzO55arazWdVyAQgWKnIfhp4g5cup+NR48eYe7cuQAAf39/vHjxAvn5+QgLC4OXlxcvcK0ctFYwNjZGREQEcnJyUFhYiNTUVF7SK0IIId8nChYJ+cbVNNRNtmV3lJV8wN2NkzFx8mR4enpi/PjxtapXRkYGZ86cwatXr9CuXTsMGjQIPXr04K3f6O7uDiMjI7Rt2xaNGjVCTExMrY6bPXs2hg0bhlGjRsHKygpycnKws7PjFu+ujoWFBVavXo0VK1bA1NQUe/bswfLly6ts++zZszF8+HBYW1tDTk4O+/fvr9V1V6aoqIiBAwdCTk6Ot6wHIbXR0MvlfK5vvX2EEEK+fQL2Da+Y++bNGygqKiIvLw8KCgpfuzmEfBXHEv6GZ1iC0Pane+dAorEeVGzLg8PAoZboZ9m0gVtXO2VlZTA2NoazszMWL178r+oKCQkR6un4N3r06IGWLVti3bp1dVIf+bFUDBEHwOv9rwjQ6iML8uf41ttHCCGfg2KDhkc9i4R84771oW5VefToEYKCgpCWlobExERMnDgRGRkZGD58+NduGic3NxdHjhxBVFQUJk+e/LWbQ75TDb1czuf61ttHCCHk20bZUAn5xlUMJXuaV1jlvEUByh/8vqWhZCIiIggJCcGMGTPAGIOpqSnOnz//TWVGbNWqFXJzc7FixQouoQ8hX6I+l8upC996+wghhHy7aBgqId8BGkpGCCGEkB8dxQYNj4ahEvIdoKFkhBBCCCGkodEwVEK+EzSUjBBCCCGENCQKFgn5joiKCGDVXPVrN4MQQgghhPwAaBgqIYQQQgghhBAhFCwSQgghhBBCCBFCwSIhhBBCCCGEECEULBJCCCGEEEIIEULBIiGEEEIIIYQQIRQsEkIIIYQQQggRQsEiIYQQQgghhBAhFCwSQgghhBBCCBFCwSIhhBBCCCGEECEULBJCCCGEEEIIEULBIiGEEEL+EwQCAY4ePfq1m0EIIf8ZFCwS8hWEhIRASUnpazeDEEIIIYSQalGwSL57AoGgxo+Pj0+dnWvIkCFo3749SktLuW3FxcVo06YNXFxcuG2RkZFwcHCAqqoqZGRkYGJigunTp+Pvv/+us7YQQgghhBBSnyhYJN+97Oxs7rN27VooKCjwts2YMaPOzrVp0yZkZWXBz8+P27Z48WJkZ2djw4YNAICtW7fC1tYWGhoaOHToEJKTk7Flyxbk5eUhICDgi8/94cOHf91+QhrKp4YDRkVFQSAQ4PXr1w3WptqcNzMzEwKBAAkJCQ3arrri4+MDS0tL7rubmxucnJy+Wnvqmo2NDaZOnYpZs2ZBRUUFGhoaQi8Es7Oz0bt3b0hLS0NPTw9//vknb//s2bNhaGgIGRkZ6OnpYcGCBSguLm7AqyCEkO8I+4bl5eUxACwvL+9rN4V8J4KDg5mioiJjjLHXr18zERERFhcXxxhjrLS0lCkrK7MOHTpw5UNDQ9lPP/3Efb979y7r1q0bk5KSYioqKszd3Z3l5+fzznHs2DEmISHB7ty5w+Li4piYmBg7efIkY4yxx48fMwkJCebl5VVl+3Jzc3ntjIiIYC1atGCysrLMzs6O/fPPP1xZV1dX1q9fP7ZkyRKmqanJdHV1a9XGiuOWLl3KGjduzBQVFZmvry8rLi5mM2bMYMrKyqxp06Zsx44dvLZ9qt7IyEjWrl07JiMjwxQVFVmnTp1YZmYmt3/Tpk1MT0+PiYuLM0NDQ7Zr1y5e/QDYli1bWJ8+fZi0tDRr0aIFu3r1Knvw4AHr2rUrk5GRYVZWVuzhw4e8444ePcpatWrFJCUlWbNmzZiPjw8rLi5mjDFWVlbGvL29mZaWFpOQkGCamppsypQpVd57UrdycnLYhAkTuHuvrq7OevXqxa5cucIYK/95HzlypNrji4qKWHZ2NisrK2ugFpeLjIxkALh/ix8rKSlh2dnZ3O9YRkYGA8AaNWrE3rx5wytrYWHBvL29/9W5//77b2Zqasp+/vln9vr168+9HCH5+fnsxYsX3PfXr19Xe63fo65duzIFBQXm4+PD0tLS2M6dO5lAIGBnz55ljJX/3qmqqrKgoCCWmprK5s+fz0RFRVlycjJXx+LFi1lMTAzLyMhgx48fZ+rq6mzFihVf65IIIZ+BYoOGR8Ei+U+pHCwyxljr1q3ZypUrGWOMJSQkMBUVFSYhIcEFQePGjWMuLi6MMcYKCgqYpqYmGzBgAEtMTGQXLlxgzZo1Y66urkLnGTVqFLOwsGAmJiZs7Nix3PbVq1czALygr7p2iouLM1tbWxYXF8du3brFjI2N2fDhw7kyrq6uTE5Ojo0cOZIlJSWxpKSkWrXR1dWVycvLs8mTJ7P79++z7du3MwDMzs6OLV26lKWlpbHFixczcXFx9vjx41pde3FxMVNUVGQzZsxgDx8+ZMnJySwkJIQ9evSIMcbY4cOHmbi4ONu4cSNLTU1lAQEBTFRUlF28eJFrFwDWtGlTtn//fpaamsqcnJyYrq4u6969O4uIiGDJycmsY8eOzN7enjvm0qVLTEFBgYWEhLD09HR29uxZpqury3x8fBhjjB08eJApKCiwU6dOsUePHrEbN26wP/74o8Z7T+rGzz//zDp06MAuXrzIMjMz2Y0bN9iyZcvYsWPHGGOfDha/lk8Fix+rCBalpKTYwoULefv+bbD48OFD1qxZM9anTx/27t27WtfzoykpLWNXH75gR+OfsFbtOzHrzp15+9u1a8dmz57NGCv/vZswYQJvf4cOHdjEiROrrX/lypWsTZs2dd/wH1zXrl2Zp6fn124G+Y+h2KDhUbBIvluVHyCuPnzBSkrLhILF3377jfXp04cxxtjatWvZkCFDmIWFBTt9+jRjjDF9fX0uuPjjjz+YsrIyKygo4I4/efIkExERYU+fPuWd+9WrV0xaWpqpq6vzfj8nTpzIFBQUPtn24OBgBoDXi7Zx40amrq7OfXd1dWXq6uqsqKiI21abNrq6ujIdHR1WWlrKlTEyMmI///zz/+5dSQmTlZVl+/btq1W9L1++ZABYVFRUldfTqVMn5u7uzts2ePBg5uDgwH0HwObPn899v3btGgPAtm/fzm3bt28fk5KS4r736NGDLVu2jFdvaGgo09TUZIwxFhAQwAwNDdmHDx+qbBepH7m5uTX+PjBW/vMOCgpiTk5OTFpamunr63OBJGPCgVNtetuLi4vZlClTmKKiIlNRUWGzZs1io0aNYv369ePKlJaWsmXLljFdXV0mJSXFzM3N2cGDB6s979u3b5m9vT3r1KkTy83N5YLD+Ph4xtj/gsWZM2cyOTk59uzZM66uj4PFV69esZEjRzIlJSUmLS3N7O3tWVpaWpXnvnPnDtPQ0GDDhw9nxcXFrKCggMnLy/PayhhjR44cYTIyMlyv5qdGAHh7ezMLCwvue8VIgwpdu3ZlU6ZMYTNnzmTKyspMXV39swLehnY68R/Wcdl5pjM7nOnMDmeSWqZMvcMv7HTi/34vfvnlFzZ69GjGWPnv3c6dO3l1eHl5MRsbG+57WFgY69SpE1NXV2eysrJMUlKSNWrUqGEuqB64uroyAEKfBw8efNV2UbBI6gPFBg2P5iyS71JEUjY6r7iIYUHX4RmWgGFB19F5xUUkPnnNK9e1a1dcuXIFpaWliI6Oho2NDWxsbBAVFYV//vkHDx8+hI2NDQAgJSUFFhYWkJWV5Y63trZGWVkZUlNTefXu27cPAoEAL168wP3797ntjDEIBIJaXYOMjAyaN2/OfdfU1EROTg6vjJmZGSQkJLjvtW1jy5YtISLyv3/e6urqMDMz476LiopCVVWVO9+n6lVRUYGbmxvs7Ozg6OiIwMBAZGdn89plbW3Na7u1tTVSUlJ428zNzXltqrjGytsKCwvx5s0bAMCdO3ewaNEiyMnJcR93d3dkZ2fj3bt3GDx4MN6/fw89PT24u7vjyJEjKCkpEb7ZpE5V/CyOHj2KoqKiasv5+vrC2dkZd+/ehYODA1xcXPDq1atqy7979w6rVq1CaGgoLl26hKysLN6c4xUrVmDPnj0IDg5GTEwM3rx5IzQvcvny5di1axe2bNmCe/fuYdq0aRgxYgSio6OFzvf69Wv07NkTZWVlOHfuXI0ZiocNGwZ9fX0sWrSo2jJubm64efMmjh8/jmvXroExBgcHB6H5cFevXkXXrl0xcOBA7N69G2JiYpCVlcXQoUMRHBzMKxscHIxBgwZBXl4eb9++hZ2dHZSVlREXF4eDBw/i/Pnz8PDwqLZNVdm5cydkZWVx48YN+Pv7Y9GiRTh37txn1dEQIpKyMXH3bWTnFfK2vysBJu6+jYik8r9BAoEAZWVltarz2rVrcHFxgYODA8LDwxEfH4958+Z993PC7e3teXP1s7Oz0axZM16Z7/0aCSFfBwWL5LtT3QPE07xC7Lz2CCVljNvWpUsX5Ofn4/bt27h06RIvWIyOjkaTJk1gYGDwWef/66+/MGvWLGzevBkjR46Em5sb98BsaGiIvLw8XiBVHXFxcd53gUAAxhhvW+Xg7XNUVXdV22r7gAWUP7Reu3YNnTp1wv79+2FoaIjr169/cbsqguqqtlW0q6CgAL6+vkhISOA+iYmJePDgAaSkpKClpYXU1FRs2rQJ0tLSmDRpErp06ULJKupJaRnDtfSXOJn0DHP91mPnzp1QUlKCtbU1fv/9d9y9e5dX3s3NjQuyli1bhoKCAsTGxlZbf3FxMbZs2YK2bduidevW8PDwwIULF7j969evx9y5c9G/f3+0aNECGzZs4AV4RUVFWLZsGXbs2AE7Ozvo6enBzc0NI0aMwNatW3nnevr0Kbp27QpNTU2cOHECMjIyNV67QCCAn58f/vjjD6Snpwvtf/DgAY4fP45t27bh559/hoWFBfbs2YO///5bKKDt378/HB0dsWHDBt7LpXHjxuHMmTPc34+cnBycOnUKY8aMAQDs3bsXhYWF2LVrF0xNTdG9e3ds2LABoaGhePbsWY3tr8zc3Bze3t4wMDDAqFGj0LZtW959/haUljH4nkgGq6GM74lklJYJl/j479L169dhbGwMoDxQ19HRwbx589C2bVsYGBjg0aNHddn0r0JSUhIaGhq8T48ePeDh4QEvLy+oqanBzs6uygROr1+/hkAgQFRUFLft+PHjMDAwgJSUFLp164adO3fyEkO9fPkSw4YNQ9OmTSEjIwMzMzPs27evYS+aENIgKFgk35WaHiAqthUWl3IPEEpKSjA3N8eGDRsgLi6OFi1aoEuXLoiPj0d4eDi6du3KHW9sbIw7d+7g7du33LaYmBiIiIjAyMgIQHkQ4+bmhh49emDUqFFYu3Yt8vPzsXDhQgDAoEGDICEhAX9//yrb/28zP9amjfVZb6tWrTB37lxcvXoVpqam2Lt3L3d8TEwMr86YmBiYmJh8cZsAoHXr1khNTYW+vr7Qp6LnVFpaGo6Ojli3bh2ioqJw7do1JCYm/qvzEmEf9+b/8bgRDLz2YEFgMOzt7REVFYXWrVsjJCSEO6ZyT7KsrCwUFBSEes8rq6m3PS8vD8+ePUP79u25/aKiomjTpg33/eHDh3j37h169uzJ643etWuXUIDXs2dP6OvrY//+/bze+5rY2dmhc+fOWLBggdC+lJQUiImJoUOHDtw2VVVVGBkZCfWw9+vXD0eOHMHly5d529u3b4+WLVti586dAIDdu3dDR0cHXbp04c5R29EPNan8cwGqHtXwtcVmvBJ6IVgZA5CdV4jYDOGe6oMHD2LHjh1IS0uDt7c3YmNjud5XAwMDZGVlISwsDOnp6Vi3bh2OHDlSX5fx1e3cuRMSEhKIiYnBli1banVMRkYGBg0aBCcnJ9y5cwe//vor5s2bxytTWFiINm3a4OTJk0hKSsL48eMxcuTIGl8GEUK+TxQsku/Kpx4gAKCMgfcAYWNjgz179nCBoYqKCoyNjbF//35esOji4gIpKSm4uroiKSkJkZGRmDJlCkaOHMkNmQwMDMS9e/e4XgpFRUVs27YNq1evRmxsLLS0tLBmzRoEBgZi7NixiI6OxqNHjxATE4Nff/0Vixcv/lfXX5s21ke9GRkZmDt3Lq5du4ZHjx7h7NmzePDgAfe2fubMmQgJCcHmzZvx4MEDrF69GocPH/7Xy5YsXLgQu3btgq+vL+7du4eUlBSEhYVh/vz5AICQkBBs374dSUlJ+Ouvv7B7925IS0tDR0fnX52X8FXXm5/zrgxBf8mjXf9xuHr1Ktzc3ODt7c3t/9ze7Nr0ttekoKAAAHDy5Eleb3RycrLQ8gl9+vTBpUuXkJycXOv6AcDPzw/79+9HfHz8Zx1X2datWzF06FD07t0bly5d4u0bN24cF3AHBwdj9OjRtR7aXlv/dpRBQ8jJr/nvfE3lfH19ERYWBnNzc+zatQv79u3jXlz98ssvmDZtGjw8PGBpaYmrV69WGfx/6yp6+Y8l/I3n+UUIDw/nvSAZPHgwgPLg2N/fH0ZGRrV+obh161YYGRlh5cqVMDIywtChQ+Hm5sYr07RpU8yYMQOWlpbQ09PDlClTYG9vjwMHDtT1pRJCvjKxr90AQj7HlzxAdO3aFWvXruXmJgLlAeSdO3d422RkZHDmzBl4enqiXbt2kJGRwcCBA7F69WoAQFpaGubNm4dt27ZBQ0ODO87Ozg6jR4+Gm5sb4uPjMWnSJBgaGmLVqlXo378/3r9/D11dXfTt2xe//fbbv7r+T7WxvuqVkZHB/fv3sXPnTrx8+RKampqYPHkyfv31VwCAk5MTAgMDsWrVKnh6eqJZs2YIDg7m3d8vYWdnh/DwcCxatAgrVqzgeofHjRsHoLzn2M/PD7/99htKS0thZmaGEydOQFVV9V+dl/zPp3rzBSgfDtjTRAMmJiY1rq34bygqKkJdXR1xcXFcT1tpaSlu377NrStoYmICSUlJZGVl8V4EVcXPzw9ycnLo0aMHoqKiat0L3r59ewwYMABz5szhbTc2NkZJSQlu3LiBTp06ASgfqpeamipUt0AgwB9//AERERE4ODjg5MmTXHtHjBiBWbNmYd26dUhOToarqyvvHCEhIXj79i3Xu1gXIwu+RY3lparcrjHcT6hc5d+5ipcLkyZNqrZuf39/odEfXl5eX9bQryAiKRu+J5K5lzcv0p5DrpkFVgeuRxfDxgDKe/KHDRvG63mvrdTUVLRr1463rXKPPlD+b2/ZsmU4cOAA/v77b3z48AFFRUWfHM5NCPn+ULBIvivVPUBUkDOzhZyZLa+ck5OTUO/E2rVrsXbtWqHjzczMcPHixSrrNjQ0xLt376rc98cff/C+29rawtbWttp2urm5Cb2p/bidlYfz1baN1R1XeS5KhczMzFrXq66u/smhWhMnTsTEiROr3f/xz0BXV1dom42NjdA2Ozs72NnZVVmnk5PTf2rB8W9RVb35pe/f4PlRP8iZ94REI11kvZaG38ZgrPf3R79+/eqtLVOmTMHy5cuhr6+PFi1aYP369cjNzeV63uTl5TFjxgxMmzYNZWVl6Ny5M/Ly8hATEwMFBQVe4AUAq1atQmlpKbp3746oqCi0aNGiVu1YunQpWrZsCTGx//1fqIGBAfr16wd3d3ds3boV8vLymDNnDpo2bVrlPREIBNiyZQtERUW5gNHGxgbKysoYMGAAZs6ciV69euGnn37ijnFxcYG3tzdcXV3h4+OD58+f18nIgm9R+2Yq0FSUwtO8wipfVAgAaChKoX0zlYZu2ldV0cv/8T35IJDA4ku52KzdDPammtz2j+e9Vwzfr/x39kvmeK9cuRKBgYFYu3YtzMzMICsrCy8vL0qiQ8h/EA1DJd+VigeI6gZlCQBo/oAPEITUl6p680XEpSHZxBD5cUfxdO8cZO+YjM2rl8Hd3R0bNmyot7bMnj0bw4YNw6hRo2BlZQU5OTnY2dlBSup/L4cWL16MBQsWYPny5TA2Noa9vT1OnjwplBmywpo1a+Ds7Izu3bsjLS2tVu0wNDTEmDFjUFjIvzfBwcFo06YN+vbtCysrKzDGcOrUKaFhnxUEAgE2btyI0aNHo0+fPoiMjAQAjB07Fh8+fOAS21SoGAHw6tUrtGvXDoMGDUKPHj3q9Z5/LaIiAng7lvfIfvz3vuK7t6MJREXqdojut+zfJP2p0KhRIwDgJWGrnOwGAIyMjHDz5k3etri4ON73mJgY9OvXDyNGjICFhQX09PRq/e+HEPJ9EbDPmRDSwN68eQNFRUXk5eVBQUHhazeHfCMq3qwC4P2fZsUjw+YRrXlvVgkhX+5a+ksMC/p01tt97h1h1bxhh/+WlZXB2NgYzs7O/3o+8LckNDQU06ZNwz///FPr5DsV5s6di8uXL+PKlSv11LqG9fGQS6D8haC3o8kP93e+un+LL06uQVnRWzQeUD6Xu+Lfoo2NDSwtLYVG0VhZWUFcXBxbt25FTk4OZs2ahdjYWERGRsLGxgYZGRkwMjLCtGnTMHbsWCQkJGD69Ol48uQJXr9+DUVFRfz222/4888/ERYWBmVlZaxevRoHDhxAt27duGHB1Z2fkH+DYoOGRz2L5Ltjb6qJzSNaQ0ORPyRVQ1GKAkVC6ti31Jv/6NEjBAUFIS0tDYmJiZg4cSIyMjIwfPjwej93Q3j37h3S09Ph5+eHX3/99bMCRcYY0tPTceHCBbRs2bIeW9mw7E01cWV2d+xz74jAoZbY594RV2Z3/yH/zv+bpD+V7dixAyUlJWjTpg28vLywZMkS3v5mzZrhzz//xOHDh2Fubo7Nmzdz2VAlJSUBAPPnz0fr1q1hZ2cHGxsbaGho0JQAQv6jqGeRfLdKyxhiM14hJ78QjeXLH1Z/pCFJhDSUb6U3//Hjxxg6dCiSkpLAGIOpqSn8/Py4hDffOx8fHyxduhRdunTBsWPHICcnV+tjX79+DXV1dbRr1w579uyhjMD/QV+zl3/p0qXYsmULHj9+XKf1EvK5KDZoeBQsEkII+SQaDkjI11VaxtB5xcVPJv25Mrv7v35xumnTJrRr1w6qqqqIiYnBlClT4OHhIdQLSUhDo9ig4VE2VEIIIZ9kb6qJniYa1JtPyFdSkfRn4u7bEKDqXv66Svrz4MEDLFmyBK9evYK2tjamT5+OuXPn/ut6CSHfH+pZJIQQQgj5TlAvP/mRUWzQ8KhnkRBCCCHkO0G9/ISQhkTBIiGEEELId0RURNDgS9UQQn5MtHQGIYQQQgghhBAhFCwSQgghhPyHhISEQElJifvu4+MDS0vLr9YeQsj3i4JFQgghhJCvKCoqCgKBAK9fv66X+mfMmIELFy7US92EkP82mrNICCGEEPId+PDhAyQkJD77ODk5OcjJydVDiwgh/3XUs0gIIYQQ8gkRERHo3LkzlJSUoKqqir59+yI9PR1A1T2DCQkJEAgEyMzMBAA8evQIjo6OUFZWhqysLFq2bIlTp04hMzMT3bp1AwAoKytDIBDAzc0NAGBjYwMPDw94eXlBTU0NdnZ2AIDVq1fDzMwMsrKy0NLSwqRJk1BQUFBt2z8ehhoXF4eePXtCTU0NioqK6Nq1K27fvl13N4sQ8p9BwSIhhBBCyCe8ffsWv/32G27evIkLFy5AREQE/fv3R1lZWa2Onzx5MoqKinDp0iUkJiZixYoVkJOTg5aWFg4dOgQASE1NRXZ2NgIDA7njdu7cCQkJCcTExGDLli0AABEREaxbtw737t3Dzp07cfHiRcyaNavW15Kfnw9XV1dcuXIF169fh4GBARwcHJCfn/8Zd4QQ8iOgYaiEEEIIIR8pLWO8tQyd+g/grWW4Y8cONGrUCMnJybWqLysrCwMHDoSZmRkAQE9Pj9unoqICAGjcuDEvMQ0AGBgYwN/fn7fNy8uL+29dXV0sWbIEEyZMwKZNm2rVlu7du/O+//HHH1BSUkJ0dDT69u1bqzoIIT8GChYJIYQQQiqJSMqG74lkZOcVctuUil9AKeUIsu7fxYsXL7gexaysLMjIyHyyzqlTp2LixIk4e/YsbG1tMXDgQJibm3/yuDZt2ghtO3/+PJYvX4779+/jzZs3KCkpQWFhId69e1ertjx79gzz589HVFQUcnJyUFpainfv3iErK+uTxxJCfiw0DJUQQggh5P9FJGVj4u7bvEARAO6FzMeNlCy4/+6HGzdu4MaNGwDKk86IiJQ/TjHGuPLFxcW848eNG4e//voLI0eORGJiItq2bYv169d/sj2ysrK875mZmejbty/Mzc1x6NAh3Lp1Cxs3buTaUhuurq5ISEhAYGAgrl69ioSEBKiqqtb6eELIj6Neg8Xly5ejXbt2kJeXR+PGjeHk5ITU1NT6PCUhhBBCyBcpLWPwPZEM9vH2929Q8uoJlDoNwfHnqjA0aoHc3Fxuf6NGjQAA2dnZ3LaEhASh+rW0tDBhwgQcPnwY06dPR1BQEABwGU5LS0s/2cZbt26hrKwMAQEB6NixIwwNDfHPP/981nXGxMRg6tSpcHBwQMuWLSEpKYkXL158Vh2EkB9DvQaL0dHRmDx5Mq5fv45z586huLgYvXr1wtu3b+vztIQQQgghny0245VQjyIAiEjJQURaAfl3ziAr8y9s2nsUv/32G7dfX18fWlpa8PHxwYMHD3Dy5EkEBATw6vDy8sKZM2eQkZGB27dvIzIyEsbGxgAAHR0dCAQChIeH4/nz5zVmNtXX10dxcTHWr1+Pv/76C6GhoVzim9oyMDBAaGgoUlJScOPGDbi4uEBaWvqz6iCE/BjqNViMiIiAm5sbWrZsCQsLC4SEhCArKwu3bt2qsnxRURHevHnD+xBCCCGENIScfOFAEQAEAhGo/TILH54+xD/bJ2P1onlYuXIlt19cXBz79u3D/fv3YW5ujhUrVmDJkiW8OkpLSzF58mQYGxvD3t4ehoaGXEKapk2bwtfXF3PmzIG6ujo8PDyqbaOFhQVWr16NFStWwNTUFHv27MHy5cs/6zq3b9+O3NxctG7dGiNHjsTUqVPRuHHjz6qDEPJjELDKA+zr2cOHD2FgYIDExESYmpoK7ffx8YGvr6/Q9ry8PCgoKDREEwkhhBDyg7qW/hLDgq5/stw+946waq7aAC0ihFT25s0bKCoqUmzQgBoswU1ZWRm8vLxgbW1dZaAIAHPnzkVeXh73efz4cUM1jxBCyFcWEhIitGwAIQ2pfTMVaCpKQVDNfgEATUUptG+m0pDNIoSQr6bBgsXJkycjKSkJYWFh1ZaRlJSEgoIC70MIIYQQ0hBERQTwdjQBAKGAseK7t6MJb71FQgj5L2uQYNHDwwPh4eGIjIzETz/91BCnJIQQQgj5bPammtg8ojU0FKV42zUUpbB5RGvYm2p+pZYRQkjDq9dgkTEGDw8PHDlyBBcvXkSzZs3q83SEkHpiY2MDLy+vr90M8hVFRESgc+fOUFJSgqqqKvr27Yv09HQA5eu+CQQChIWFoVOnTpCSkoKpqSmio6O546OioiAQCHDy5EmYm5tDSkoKHTt2RFJSUo3nPXbsGFq3bg0pKSno6enB19cXJSUl9XqthNibauLK7O7Y594RgUMtsc+9I67M7v5VAkX6+0sI+ZrqNVicPHkydu/ejb1790JeXh5Pnz7F06dP8f79+/o8LSHkC7m5uUEgEAh9/P39sXjxYq6crq4u1q5d+/UaShrc27dv8dtvv+HmzZu4cOECRERE0L9/f5SVlXFlZs6cienTpyM+Ph5WVlZwdHTEy5cvefXMnDkTAQEBiIuLQ6NGjeDo6Ci0eHmFy5cvY9SoUfD09ERycjK2bt2KkJAQLF26tF6vlRCgfEiqVXNV9LNsCqvmql9t6Onhw4d5f3+r4+Pj5CnjrQABAABJREFUU+Xf78ofAPjw4QP8/f1hYWEBGRkZqKmpwdraGsHBwbx/i0+fPoWnpyf09fUhJSUFdXV1WFtbY/PmzXj37l29XS8h5BvD6hGAKj/BwcG1Oj4vL48BYHl5efXZTELI/3N1dWX29vYsOzub9ykpKeGV09HRYWvWrPk6jSQNoqS0jF19+IIdjX/Crj58wUpKy3j7nz9/zgCwxMRElpGRwQAwPz8/bn9xcTH76aef2IoVKxhjjEVGRjIALCwsjCvz8uVLJi0tzfbv388YYyw4OJgpKipy+3v06MGWLVvGO29oaCjT1NSs68sl5LuXn5/P+7v9008/sUWLFvG2FRUVMRsbG6asrMw2bNjA4uPjWXp6OtuzZw9r1aoVi4+PZ4wxlp6ezjQ0NFiLFi3Y/v37WXJyMktPT2dHjx5lDg4O7NixY1/3YskPi2KDhlfvw1Cr+ri5udXnaQkh/4KkpCQ0NDR4nx49enDDoGxsbPDo0SNMmzaN97a6IpPlmTNnYGxsDDk5Odjb2yM7O5tX/7Zt22BsbAwpKSm0aNGCW2cMKH/j7eHhAU1NTUhJSUFHR4dbP4wxBh8fH2hra0NSUhJNmjTB1KlTG+am/GAikrLRecVFDAu6Ds+wBAwLuo42M3fBxsEJenp6UFBQgK6uLgAgKyuLO87Kyor7bzExMbRt2xYpKSm8uiuXUVFRgZGRkVCZCnfu3MGiRYsgJyfHfdzd3ZGdnU09G6TB2djYYMqUKfDy8oKysjLU1dURFBSEt2/fYvTo0ZCXl4e+vj5Onz4NoHxdxbFjx6JZs2aQlpaGkZERAgMDeXWWlJRg6tSp3PDu2bNnw9XVFU5OTrzzVh6GWlRUhNmzZ0NLSwuSkpLQ19fH9u3bIScnx/u7LSoqCnl5ed62tWvX4tKlS7hw4QImT54MS0tL6OnpYfjw4bhx4wYMDAwAAJMmTYKYmBhu3rwJZ2dnGBsbQ09PD/369cPJkyfh6OhY7/ebEPJtEPvaDSCEfF8OHz4MCwsLjB8/Hu7u7rx97969w6pVqxAaGgoRERGMGDECM2bMwJ49ewAAe/bswcKFC7Fhwwa0atUK8fHxcHd3h6ysLFxdXbFu3TocP34cBw4cgLa2Nh4/fswtoXPo0CGsWbMGYWFhaNmyJZ4+fYo7d+40+PX/10UkZWPi7tv4eAHeeyHzIabQCAvn+cHJ2gxlZWUwNTXFhw8f6q0tBQUF8PX1xYABA4T2SUlJVXEEIfVr586dmDVrFmJjY7F//35MnDgRR44cQf/+/fH7779jzZo1GDlyJLKysiAuLo6ffvoJBw8ehKqqKq5evYrx48dDU1MTzs7OAIAVK1Zgz549CA4OhrGxMQIDA3H06FF069at2jaMGjUK165dw7p162BhYYGMjAy8ePGiVu3fs2cPbG1t0apVK6F94uLiEBcXx8uXL3H27FksW7YMsrKyVdZT8ZKQEPLfR8EiIT+40jKG2IxXyMkvxPP8IpwJD4ecnBy3v3fv3rzyKioqvDfWlRUXF2PLli1o3rw5gPJMyIsWLeL2e3t7IyAggHv4b9asGTcXzdXVFVlZWTAwMEDnzp0hEAigo6PDHZuVlQUNDQ3Y2tpCXFwc2traaN++fZ3fjx9ZaRmD74lkoUCx9P0blLx6AjV7Dxx/ropZRi1w7WqM0PHXr19Hly5dAJT3mNy6dQseHh5CZbS1tQEAubm5SEtLg7GxcZXtad26NVJTU6Gvr//vL46QL1D57+Ob98Uwt7DA/PnzAZSvDe3n5wc1NTXuxdnChQuxefNm3L17Fx07doSvry9XV7NmzXDt2jUcOHCACxbXr1+PuXPnon///gCADRs24NSpU9W2Jy0tDQcOHMC5c+dga2sLANDT06v19Tx48AA2NjY1lnn48CEYYzAyMuJtV1NTQ2FhIYDynBQrVqyo9XkJId8vChYJ+YFFJGXD90QysvPKHwBepD2HXDMLrA5cjy6GjQEAsrKyGDZsWK3qk5GR4QJFANDU1EROTg6A8gQp6enpGDt2LK9HsqSkBIqKigDKE+z07NkTRkZGsLe3R9++fdGrVy8AwODBg7F27Vro6enB3t4eDg4OcHR0hJgY/RmrK7EZr7jfhcpEpOQgIq2A/DtnkCWngk173yB03XKhchs3boSBgQGMjY2xZs0a5ObmYsyYMbwyixYtgqqqKtTV1TFv3jyoqanxhtxVtnDhQvTt2xfa2toYNGgQREREcOfOHSQlJeH/2Lvv8JzO/4Hj7yd7JxJkEGJGIiExG7FXzFKKRhDEpqjZ1qZKjaK02tpq1x4VqxLEChKjiYRIhIpNSJB5fn/45Xw9khBq+7yu67munHPuc9/3OTT1ee7x+e67717JMwuRm6d/P15NuIeVQ3ECzyTQyM0eXV1dbGxscHd3V++xtbUFUH/v/fzzzyxcuJD4+HgePnxIamoqHh4eACQmJnLt2jWtL710dXWpWLGi1sZRTwoPD0dXV5datWq91DMpytNfBeXd0aNHyczMxM/Pj5SUlJeuRwjxfnkjeRaFEO+erOmGTwcHqRoDJuy7w/lHppQsWRJ7+7xvFa+vr691rNFo1H+cJCUlATBv3jzCw8PVz5kzZzh8+DDweCQpNjaWCRMm8PDhQ9q2bcvnn38OgKOjI1FRUfzyyy8YGxvTp08fatasmetOmuLFXb+fPVAE0Gh0yP/pMFKvnufKgr78OH4EU6dOzVZu8uTJTJ48mfLly3PgwAE2b95M/vz5s5UZMGAAFStW5OrVq2zZsgUDA4Mc2/Xx8WHr1q3s3LmTypUr88knnzBjxgytEWchXofcfj8+SIfey04QeObxWmyNRqP1ey9remZmZiarVq1iyJAhBAQEsHPnTsLDw+nSpct/mrptbGz80vcClC5dmrNnzz6zTMmSJdFoNERFRWmdL168OCVLlvzPfRBCvF/kK3khPkK5TTd80rgtETRwtctxu3gDAwMyMjJeqE1bW1scHBy4cOECfn5+uZazsLCgXbt2tGvXjs8//5xGjRpx+/ZtrK2tMTY2pnnz5jRv3py+fftSpkwZTp8+TYUKFV6oLyJnBc1zXwdo7OSBcbe5AKzo/gleJWzULwLi4uIAcHFx4ciRI89so3r16rnmVuzcuXO2DdB8fHzw8fHJ4xMI8d+9yO/HZwkJCaFatWr06dNHPZeVmxTA0tISW1tbQkND1enbGRkZnDhxQh19fJq7++P1wsHBweo01BfRvn17vv32W8LCwrKtW0xLSyM1NRUbGxsaNGjAnDlz+PLLL3NdtyiE+DjIyKIQH6HcphtmUYCExEccjb2d43UnJyf27dvHv//+m+eNFQDGjRvHpEmT+Omnn4iOjub06dMsWrSIH3/8EYAff/yRlStXcvbsWaKjo/nzzz+xs7PDysqKxYsXs2DBAs6cOcOFCxdYtmwZxsbGMsr0ClUpZo29pRG5bV2hAewtjahSzPpNdkuIN+q//n7MUqpUKY4dO8aOHTuIjo5m1KhRhIaGapX58ssvmTRpEps2bSIqKooBAwZw586dXDeQcXJywt/fn65du7Jx40ZiY2MJCgpizZo1eXq2gQMH4u3tTb169fj55585efIkFy5cYM2aNXzyySecO3cOgF9++YX09HQqVarE6tWriYyMJCoqimXLlnH27Fl0dXXz1J4Q4v0nwaIQH6Hcphvmtdz48eOJi4ujRIkSFChQIM/tduvWjfnz57No0SLc3d2pVasWixcvplixYgCYm5szZcoUKlWqROXKlYmLi+Ovv/5CR0cHKysr5s2bh7e3N+XKlWP37t1s2bIFGxubPLcvnk1XR8OY5q4A2QLGrOMxzV3fWnJyId6E5/1+zEi6w7VVI6nj5qiVOuZpPXv2pFWrVrRr146qVaty69YtrVFGgOHDh+Pr60unTp3w8vLCzMwMHx+fZ+72O3fuXD7//HP69OlDmTJl6N69O8nJyXl6NkNDQ3bt2sWwYcP47bff+OSTT6hcuTI//fQT/fv3x83NDYASJUoQFhZG/fr1+eabbyhfvjyVKlVi9uzZDBkyhAkTJuSpPSHE+0+j/JfVzq/ZvXv3sLS0JDExEQsLi7fdHSE+GIdibuE77/Bzy638/+mG4uPy9MYe8HhEcUxzVxq55X0NqxAvonPnzty9e5eNGze+1X487/fjnaBFPIwJZdmqP6nt7kRERAR16tThzp07WFlZ/ae2MzMzcXFxoW3bthKQCZEDiQ3ePFmzKMRHKGu64dXERzmuy9EAdjLd8KPVyM2eBq52asqAguaP/y7IiKJ4H6Smpua6aVJuMjIy0Gg06OjoPPf3Y/qdBCwdnWldpzK6OhoiIiJeuq8XL15k586d1KpVi5SUFObMmUNsbCzt27d/6TqFEOJVkmmoQnyEZLqheB5dHQ1eJWxo4VEIrxI28ndBvDJr167F3d0dY2NjbGxsqF+/PkOHDmXJkiVs2rQJjUaDRqMhKCgIeDxVs3Tp0piYmFC8eHFGjRqltQvy2LFj8fDwYP78+RQrVkydwnn37l169uyJra0tRkZGuLm5sXXrVgAWL16MlZUVmzdvxtXVFUNDQ+Lj4wkNDaWRT0MiprTh4oy2XF3xNSlXz6ttXZ7blQfRB7kZtgs9XR06d+5MnTp1AMiXLx8ajSbbJk3PoqOjw+LFi6lcuTLe3t6cPn2a3bt355p7VAgh3jQZWRTiI9XIzZ65HSpkm25oJ9MNhRCvSUJCAr6+vkyZMoXPPvuM+/fvs3//fjp16kR8fDz37t1j0aJFAFhbP57ZYG5uzuLFi3FwcOD06dN0794dc3Nzhg0bptZ7/vx51q1bx/r169HV1SUzM5PGjRtz//59li1bRokSJYiIiNDamOXBgwf88MMPzJ8/HxsbGwoWLMiFCxfw9/dn9uzZ7Iu+zsgJk7m+diyFuv+OjqEJHv1+QRP8M8ULFWDWrFkYGxvz6aef0rp1a6KiorCwsHih1BKOjo6EhIS8orcrhBCvngSLQnzEZLqhEOJ1y8hU1N8xdy5GkZ6eTqtWrdSdjLOS2hsbG5OSkoKdnXZKipEjR6o/Ozk5MWTIEFatWqUVLKamprJ06VJ1w62dO3dy9OhRIiMjKV26NPA4T+CT0tLS+OWXXyhfvrx6rm7duurPZcqUoUsTb6ysrOhU7AFNm9alSjFrWrf6A2NjY7WfWUFtwYIF//OaRSGEeNdIsCjERy5ruqEQQrxqT2+WpGRmYFHCE5eybjRt3IiGDRvy+eefky9fvlzrWL16NT/99BMxMTEkJSWRnp6ebWOLokWLau3MHB4eTuHChdVAMScGBgaUK1dO69y1a9cYOXIkQUFBXL9+nYyMDB4+eICDXrL8nhRCfJRkzaIQQgghXrnAMwn0XnZCa5q7RkeXfK3HY9lyNAb5HZk9ezbOzs7ExsbmWMehQ4fw8/OjSZMmbN26lbCwMEaMGEFqaqpWuacTx+dlKqixsXG2fIb+/v6Eh4cza9YsDh48SHh4ODY2NtnaE0KIj4UEi0J8IDQazVvfcv59pigKPXr0wNraGo1GQ3h4+NvukhDvrYxMhXFbInLcTRSNBqPCrlwo0pRjx09gYGDAhg0bMDAwICMjQ6vowYMHKVq0KCNGjKBSpUqUKlWKixcvPrf9cuXKcfnyZaKjo1+o3yEhIfTv358mTZpQtmxZDA0NuXnz5jPvydp59em+CyHEh0CCRSFeoc6dO6s7+enr61OsWDGGDRvGo0fPTvL8oenZsye6urr8+eefL3RfUFAQGo2Gu3fvvrK+3L59m4EDB1K0aFEMDAxwcHCga9eu2ZJpBwYGsnjxYrZu3UpCQoKanPp5Dh06hK6uLk2bNn1lfRbifXc09rbWiGKWlCtRJB5aw6OEc1y6FM/UX5dy48YNXFxccHJy4tSpU0RFRXHz5k3S0tIoVaoU8fHxrFq1ipiYGH766Sc2bNjw3PZr1apFzZo1ad26Nbt27SI2Npbt27cTGBj4zPtKlSrFH3/8QWRkJEeOHMHPz++5o5RFixZFo9GwdetWbty4QVJS0nP7J4QQ7wsJFoV4xRo1akRCQgIXLlxgxowZ/Pbbb4wZM+Ztd+uNefDggbr5xMKFC99qX27fvs0nn3zC7t27+fXXXzl//jyrVq3i/PnzVK5cmQsXLqhlY2JisLe3p1q1atjZ2aGnl7cl3QsWLODLL79k3759XLly5XU9ihDvlev3c/6CTMfAhEeXznB97Vj+/b0nv0yfyPTp02ncuDHdu3fH2dmZSpUqUaBAAUJCQvj000/56quv6NevHx4eHhw8eJBRo0blqQ/r1q2jcuXK+Pr64urqyrBhw547+rdgwQLu3LlDhQoV6NixI/3796dgwYLPvKdQoUKMGzeOr7/+GltbW/r165en/gkhxHtBeYclJiYqgJKYmPi2uyJEnvj7+ystWrTQOteqVSvF09NTURRFuXnzpvLFF18oDg4OirGxseLm5qasWLFCq3ytWrWUL7/8Uhk6dKiSL18+xdbWVhkzZoxWmejoaKVGjRqKoaGh4uLiouzcuVMBlA0bNqhlTp06pdSpU0cxMjJSrK2tle7duyv379/P1teJEycqBQsWVCwtLZVx48YpaWlpypAhQ5R8+fIphQoVUhYuXPhC72Dx4sXKJ598oty9e1cxMTFR4uPjta4/evRIGTZsmFK4cGHFwMBAKVGihDJ//nwlNjZWAbQ+/v7+iqIoyp9//qm4ubmpz1KvXj0lKSnpuX3p1auXYmpqqiQkJGidf/DggVKoUCGlUaNG6rt4st2iRYvm6Vnv37+vmJmZKWfPnlXatWunTJw4Uev63r17FUAJDAxUPDw8FCMjI6VOnTrKtWvXlL/++kspU6aMYm5urvj6+irJycnqfdu3b1e8vb0VS0tLxdraWmnatKly/vx59fqYMWOyvStAWbRokfqOv/zyS6VAgQKKoaGh4u3trRw9ejRbv3bv3q1UrFhRMTY2Vry8vJSzZ8/m6bmFeJ6D528qRYdvfe7n4Pmbb7urQoj3iMQGb56MLArxGp05c4aDBw+qa1oePXpExYoV2bZtG2fOnKFHjx507NiRo0ePat23ZMkSTE1NOXLkCFOmTGH8+PHs2rULgMzMTFq1aoWBgQFHjhzh119/Zfjw4Vr3Jycn4+PjQ758+QgNDeXPP/9k9+7d2b7x/vvvv7ly5Qr79u3jxx9/ZMyYMTRr1ox8+fJx5MgRevXqRc+ePbl8+XKen3nBggV06NABS0tLGjduzOLFi7Wud+rUiZUrV/LTTz8RGRnJb7/9hpmZGY6Ojqxbtw6AqKgoEhISmDVrlpqXrWvXrkRGRhIUFESrVq1QlBxXQ6kyMzNZtWoVfn5+2bbiNzY2pk+fPuzYsYPbt28za9Ysxo8fT+HChUlISCA0NDRPz7pmzRrKlCmDs7MzHTp0YOHChTn2a+zYscyZM4eDBw9y6dIl2rZty8yZM1mxYgXbtm1j586dzJ49Wy2fnJzMoEGDOHbsGHv27EFHR4fPPvuMzMxMAIYMGUJCQoL6mTZtGiYmJlSqVAmAYcOGsW7dOpYsWcKJEycoWbIkPj4+3L59W6tfI0aMYPr06Rw7dgw9PT26du2ap+cW4nmqFLPG3tKI3JLwaAB7y8epeoQQQrzD3na0+izy7YF416VnZCoHz99UNoZdVg6ev6l06uSv6OrqKqampoqhoaECKDo6OsratWtzraNp06bK4MGD1eNatWop1atX1ypTuXJlZfjw4YqiKMqOHTsUPT095d9//1Wvb9++XWtk8ffff1fy5cunNfq2bds2RUdHR7l69aqiKI9H04oWLapkZGSoZZydnZUaNWr87/nS0xVTU1Nl5cqVeXof0dHRir6+vnLjxg1FURRlw4YNSrFixZTMzExFURQlKipKAZRdu3bleH/WiNedO3fUc8ePH1cAJS4uLk99yHL16lUFUGbMmJHj9fXr1yuAcuTIEUVRFGXGjBl5HlHMUq1aNWXmzJmKoihKWlqakj9/fmXv3r3q9SdH8LJMmjRJAZSYmBj1XM+ePRUfH59c27lx44YCKKdPn8527dChQ4qRkZGyevVqRVEUJSkpSdHX11eWL1+ulklNTVUcHByUKVOm5Nqvbdu2KYDy8OHDF3oHQuRm++kritPwrYrTU6OJWee2n77ytrsohHjPSGzw5snIohAvKfBMAtV/+BvfeYcZsCoc33mH+etMAuUqVyM8PJwjR47g7+9Ply5daN26NfB4t7wJEybg7u6OtbU1ZmZm7NixI9tmK0/n/rK3t+f69esAREZG4ujoiIODg3rdy8tLq3xkZCTly5fX2k7e29ubzMxMoqKi1HNly5ZFR+d/vwZsbW3VBNkAurq62NjYqG0/z8KFC/Hx8SF//vwANGnShMTERP7++2/gce4zXV1datWqlaf6AMqXL0+9evVwd3enTZs2zJs3jzt37uT5fuU5I5AvKyoqiqNHj+Lr6wuAnp4e7dq1Y8GCBdnKPvnnaWtri4mJiVaCcFtbW613fO7cOXx9fSlevDgWFhY4OTkBZPt7Eh8fT8uWLRkyZAht27YFHq+9TEtLw9vbWy2nr69PlSpViIyMzLVf9vb2AHn+sxbieRq52TO3QwXsLI20zttZGjG3QwUaudm/pZ4JIYTIq7zt4CCE0JKVP+zpMORhagZn76dx/pEpjcqXZOHChZQvX54FCxYQEBDA1KlTmTVrFjNnzsTd3R1TU1MGDhyYLYeXvr6+1rFGo1GnIL5KObXzsm1nZGSwZMkSrl69qrU5TEZGBgsXLqRevXp5yn32NF1dXXbt2sXBgwfV6ZojRozgyJEjFCtWLNf7ChQogJWVVbYAKUtkZCQajYaSJUu+cJ/g8XTb9PR0raBdURQMDQ2ZM2cOlpaW6vkn32le3nHz5s0pWrQo8+bNw8HBgczMTNzc3LT+niQnJ/Ppp5/i5eXF+PHjX+oZnu4X8Fr+nomPVyM3exq42nE09jbX7z+ioPnjqae6OrlNUBVCCPEukZFFIV7QM/OH/b9xWyLIyFTQ0dHh22+/ZeTIkTx8+JCQkBBatGhBhw4dKF++PMWLF3/hPGAuLi5cunSJhIQE9dzhw4ezlTl58iTJycnquZCQEHR0dHB2dn6h9vLqr7/+4v79+4SFhREeHq5+Vq5cyfr167l79y7u7u5kZmYSHBycYx255SvTaDR4e3szbtw4wsLC1Lxsz6Kjo0Pbtm1ZsWIFV69e1br28OFDfvnlF3x8fLC2fvE1U+np6SxdupTp06drPevJkydxcHBg5cqVL1xnllu3bhEVFcXIkSOpV68eLi4u2UZSFUWhQ4cOZGZm8scff2glFi9RogQGBgaEhISo59LS0ggNDcXV1fWl+yXEy9LV0eBVwoYWHoXwKmEjgaIQQrxHJFgU4gXllj/sSQmJjzga+3gzkTZt2qCrq8vPP/9MqVKl1FGyyMhIevbsybVr116o/fr161O6dGn8/f05efIk+/fvZ8SIEVpl/Pz8MDIywt/fnzNnzrB3716+/PJLOnbsiK2t7Ys9cB4tWLCApk2bUr58edzc3NRP27ZtsbKyYvny5Tg5OeHv70/Xrl3ZuHEjsbGxBAUFsWbNGiDnfGVHjhzh+++/59ixY8THx7N+/Xo1L9vzfP/999jZ2dGgQQO2b9/OpUuX2LdvHz4+PqSlpfHzzz+/1LNu3bqVO3fuEBAQoPWsbm5utG7dOsepqHmVL18+bGxs+P333zl//jx///03gwYN0iozduxYdu/ezW+//UZSUhJXr17l6tWrPHz4EFNTU3r37s3QoUMJDAwkIiKC7t278+DBAwICAl66X0IIIYT4+EiwKMQLyi1/WG7l9PT06NevH1OmTGHw4MFUqFABHx8fateujZ2dHS1btnyh9nV0dNiwYQMPHz6kSpUqdOvWjYkTJ2qVMTExUXf6rFy5Mp9//jn16tVjzpw5L9RWXl27do1t27apazOf7u9nn32mBlBz587l888/p0+fPpQpU4bu3burI6A55SuzsLBg3759NGnShNKlSzNy5Eg1L9vz2NjYcPjwYerUqUPPnj0pUaIEbdu2pUSJEoSGhmqtG3wRCxYsoH79+lpTTbO0bt2aY8eOcerUqZeqW0dHh1WrVnH8+HHc3Nz46quvmDp1qlaZ4OBgkpKSqFatGvb29upn9erVAEyePJnWrVvTsWNHKlSowPnz59mxYwf58uV7qT4JIYQQ4uOkUV7X7g+vwL1797C0tCQxMRELC4u33R0hADgUcwvfeYefW25l90/wKmHzBnokhBBCCPHhk9jgzZORRSFekOQPE0IIIYQQHwMJFoV4Qbo6GsY0f7xRyNMBY9bxmOauH9wmDt9//z1mZmY5fvIyJfR1yK0/ZmZm7N+//6XrjY+Pf2bdT6ewEEIIIYT4EMk0VCFeUuCZBMZtidDa7Mbe0ogxzV0/yPxht2/f5vbt2zleMzY2plChQm+4R3D+/PlcrxUqVOilUnXA491O4+Licr3u5OSklR5ECCGEEK+fxAZvngSLQvwHGZmK5A8TQgghhHgDJDZ48+SrcSH+g6z8YUIIIYQQQnxoZM2iEEIIIYQQQohsJFgUQgghhBBCCJGNBItCCCGEEEIIIbKRYFEIIYQQQgghRDYSLAohhBBCCCGEyEaCRSGEEEIIIYQQ2UiwKIQQQgghhBAiGwkWhRBCCCGEEEJkI8GiEEIIIYQQQohsJFgUQgghhBBCCJGNBItCCCGEEEIIIbKRYFEIIYQQQgghRDYSLAohhBBCCCGEyEaCRSGEEEIIIYQQ2UiwKIQQQgghhBAiGwkWhRBCCCGEEEJkI8GiEEIIIYQQQohsJFgUQgghhBBCCJGNBItCCCGEEEIIIbKRYFEIIYQQQgghRDYSLAohhBBCCCGEyEaCRSGEEEIIIYQQ2UiwKIQQQgghhBAiGwkWhRBCCCGEEEJkI8GiEEIIIYQQQohsJFgUQgghhBBCCJGNBItCCCGEEEIIIbKRYFEIIYQQQgghRDYSLAohhBBCCCGEyEaCRSGEEEIIIYQQ2UiwKIQQQgghhBAiGwkWhRBCCCGEEEJkI8GiEEIIIYQQQohsJFgUQgghhBBCCJGNBItCCCGEEEIIIbKRYFEIIYQQQgghRDYSLAohhBBCCCGEyEaCRSGEEEIIIYQQ2UiwKIQQQgghXoutW7diZWVFRkYGAOHh4Wg0Gr7++mu1TLdu3ejQoQMA69ato2zZshgaGuLk5MT06dPVcnPmzMHNzU093rhxIxqNhl9//VU9V79+fUaOHPm6H0uIj4YEi0IIIYQQ4rWoUaMG9+/fJywsDIDg4GDy589PUFCQWiY4OJjatWtz/Phx2rZtyxdffMHp06cZO3Yso0aNYvHixQDUqlWLiIgIbty4kWNdaWlpHDp0iNq1a7/BJxTiwybBohBCCCGEeKUyMhUOxdwiKDaJUi5u/L13LwBBQUF89dVXhIWFkZSUxL///sv58+epVasWP/74I/Xq1WPUqFGULl2azp07069fP6ZOnQqAm5sb1tbWBAcHq3UNHjxYPT569ChpaWlUq1bt7Ty0EB8gCRaFEEIIIcQrE3gmgeo//I3vvMMMWBXOFeNiTFqwju2nr7B//35atWqFi4sLBw4cIDg4GAcHB0qVKkVkZCTe3t5adXl7e3Pu3DkyMjLQaDTUrFmToKAg7t69S0REBH369CElJYWzZ88SHBxM5cqVMTExeUtPLsSHR4JFIYQQQgjxSgSeSaD3shMkJD5SzxkVKUdi3BkCflxHpkaXMmXKULt2bYKCgggODqZWrVp5rj/rvv379+Pp6YmFhYUaQL5oXUKI55NgUQghhBBC5Ent2rUZOHBgjtcyMhXGbYlAeeq8oWNZlNSH3Du2ER17VzIyFTXoCwoKUtcYuri4MHbsWDZu3KjeGxISQunSpdHV1QX+t27xzz//VO+rXbs2u3fvJiQkRNYrCvGKSbAohBBCCCH+s6Oxt7VGFLPoGpmhX8CJ5H+CUOxdORp7m5o1a3LixAmio6PV0cDBgwejo6NDWFgY0dHRLFmyhDlz5jBkyBC1rnLlypEvXz5WrFihFSxu3LiRlJSUbNNYhRD/jQSLQgghhBBv0dixY/Hw8PjP9XTu3JmWLVs+s8yzRgb/q+v3sweKWYwc3UDJxKiIO9fvP8La2hpXV1fs7OxwdnYGoEKFCqxZs4a1a9fi5ubG6NGjGT9+PJ07d1br0Wg01KhRA41GQ/Xq1YHHAaSFhQWVKlXC1NT0tTybEB8rCRaFEEIIIV7AoUOH0NXVpWnTpm+7K1pmzZqlppl4ndLT0+nXrx+Wlpbkz5+fUaNGoSgKBc2NuPhDMx5EH9IqHz+zHQa2xSk6fCt6Vnb8MX0M9vb2nD17FgMDAyZNmqSW/fzzz5k4cSKpqakEBwczdOhQ1q9fT506dTAxMaF8+fIMHz6ctLQ0zMzMADh48CBly5YlPDwcR0dH+vfvT3JyslrnL7/8QqlSpTAyMsLW1pbPP/9cvbZ27Vrc3d0xNjbGxsaG+vXra90rxMdOgkUhhBBCiBewYMECvvzyS/bt28eVK1dee3upqal5KmdpaYmVldXr7QywZMkS9PT0OHr0KLNmzeLHH39k/vz5VClm/cz7NAD/bOdo8E7WrFlDVFQUy5cvx8nJ6Zn3jRgxgiFDhhAeHk7p0qXx9fUlPT0dgJiYGBo1akTr1q05deoUq1ev5sCBA/Tr1w+AY8eO0b9/f8aPH09UVBSBgYHUrFkTgISEBHx9fenatSuRkZEEBQXRqlUrFOXpVZdCfLwkWBRCCCGEyKOkpCRWr15N7969adq0qdZIXlBQEBqNhj179lCpUiVMTEyoVq0aUVFRWnVMnjwZW1tbzM3NCQgI4NEj7embWdNJJ06ciIODgzpN8/Tp09StW1cdBevRowdJSUnZ7suSnJxMp06dMDMzw97enunTp7/UM2flTNwU/i/3Hqbh6OjIjBkzcHZ2xs/Pjy+//JIZM2agq6NR79HkUpdHvnRKlSpF9erVKVq0KNWrV8fX1/eZ7Q8ZMoSmTZtSunRpxo0bx8WLFzl//jwAkyZNws/Pj4EDB1KqVCmqVavGTz/9xNKlS3n06BHx8fGYmprSrFkzihYtiqenJ/379wceB4vp6em0atUKJycn3N3d6dOnjzpiKYSQYFEIIYQQIs/WrFlDmTJlcHZ2pkOHDixcuDDbSNSIESOYPn06x44dQ09Pj65du2rdP3bsWL7//nuOHTuGvb09v/zyS7Z29uzZQ1RUFLt27WLr1q0kJyfj4+NDvnz5CA0N5c8//2T37t3qCFpOhg4dSnBwMJs2bWLnzp0EBQVx4sSJF3rep3MmRiTc46ZJEXb8c1Ut4+XlpeZCBOhVqzh2lkZa9Vga6zO3QwXGDO5LeHg4zs7O9O/fn507dz63D+XKlVN/tre3B+D69esAnDx5ksWLF2NmZqZ+fHx8yMzMJDY2lgYNGlC0aFGKFy9Ox44dWb58OQ8ePACgfPny1KtXD3d3d9q0acO8efO4c+fOC70fIT50EiwKIYQQQuTiyVG1QzG3mL9gAR06dACgUaNGJCYmEhwcrHXPxIkTqVWrFq6urnz99dccPHhQHT2cOXMmAQEBBAQE4OzszHfffYerq2u2dk1NTZk/fz5ly5albNmyrFixgkePHrF06VLc3NyoW7cuc+bM4Y8//uDatWvZ7k9KSmLBggVMmzZNDYiWLFmiTt/Mi5xyJgI8TM2g97ITBJ5JyHaPRqPBs0g+Dgyvy8runzDrCw8MdRRGNHGhkZs9FSpUIDY2lgkTJvDw4UPatm2rtYYwJ/r6+lr1A2RmZqrP2bNnT8LDw9XPyZMnOXfuHCVKlMDc3JwTJ06wcuVK7O3tGT16NOXLl+fu3bvo6uqya9cutm/fjqurK7Nnz8bZ2ZnY2Ng8vyMhPnQSLAohhBBC5ODpUbXPJ6/l8OEj2HrUBUBPT4927dqxYMECrfueNRIWGRlJ1apVtcp7eXlla9vd3R0DAwP1ODIykvLly2vt9unt7U1mZma2aa7weC1famqqVlvW1tbqlNbnyS1nIkDKlWgAxm2JICNT4fDhw5QqVQpdXV0KFChAQkICujoavErY4Gr6gEcPH6DzxBRVCwsL2rVrx7x581i9ejXr1q3j9u3beerX0ypUqEBERAQlS5bM9sl6f3p6etSvX58pU6Zw6tQp4uLi+Pvvv4HHwae3tzfjxo0jLCwMAwMDNmzY8FJ9EeJDpPe2OyCEEEII8a7JGlV7MlhKOrUTJTMD3zoe+Olo0ACKomBoaMicOXPUcs8aCcurt50CIreciQDp929wa888Uj0a891PMcyePVtdD5k14unl5UVGRgbDhw/Xeh8//vgj9vb2eHp6oqOjw59//omdnd1Lb8wzfPhwPvnkE/r160e3bt0wNTUlIiKCXbt2MWfOHLZu3cqFCxeoWbMm+fLl46+//iIzMxNnZ2eOHDnCnj17aNiwIQULFuTIkSPcuHEDFxeXl+qLEB8iGVkUQgghhHhCTqNqSmYGSf/8Tb46ATh0+Qm3vr9y/EQYJ0+exMHBgZUrV+apbhcXF44cOaJ17vDhw3m67+TJk1ppHUJCQtDR0clxtLBEiRLo6+trtXXnzh2io6Pz1M9n5Uw0LVsXJT2VhKWDmDZmGAMGDKBHjx4ATJ8+HUdHR2rUqEH79u0ZMmQIJiYm6r3m5uZMmTKFSpUqUblyZeLi4vjrr7/Q0Xm5f5KWK1eO4OBgoqOjqVGjBp6enowePRoHBwcArKysWL9+PXXr1sXFxYVff/2VlStXUrZsWSwsLNi3bx9NmjShdOnSjBw5kunTp9O4ceOX6osQHyIZWRRCCCGEeEJOo2oPzx8l81ESZuUbomNoSiLwwNQBrxI2tG7dmgULFjB16tTn1j1gwAA6d+5MpUqV8Pb2Zvny5fzzzz8UL178mff5+fkxZswY/P39GTt2LDdu3ODLL7+kY8eO2NraZitvZmZGQEAAQ4cOxcbGhoIFCzJixIg8B2UFzY1yPG/XfrL6s41PX1Z2/wSvEjbqOQcHB3bs2KF1z927d9Wfu3fvTvfu3XNt98nNgpycnLJtHmRlZZXtXOXKlXPdKKd69eoEBQXleM3FxYXAwMBc+yKEkJFFIYQQQggtOY2qJZ3aiXFRD3QMTbOVa926NceOHePUqVPPrbtdu3aMGjWKYcOGUbFiRS5evEjv3r2fe5+JiQk7duzg9u3bVK5cmc8//5x69eppTX992tSpU6lRowbNmzenfv36VK9enYoVKz63LYAqxayxtzTKNQWGBrC3NHpubkUhxPtNo7zDmUfv3buHpaUliYmJWFhYvO3uCCGEEOIjcCjmFr7znj819OlRtQ9N1rpNQGtKblYAObdDBRq52b/xfomPl8QGb56MLAohPkhPJ6fOi5CQENzd3dHX13/he3MyduxYPDw8nlmmdu3aDBw48D+39SpoNBo2btyY5/JOTk7MnDnztfVHiLdFRtUea+Rmz9wOFbLlTLSzNJJAUYiPhKxZFEKI/zdo0CA8PDzYvn07ZmZmb6TN9evXa+0U+D4JDQ196zs2ig9f7dq18fDweKNfTOjqaBjT3JXey05wc9sMMlOSKdhqJPC/UbUxzV3R1cktnNQWFxdHsWLFCAsLw8PDg6CgIOrUqcOdO3deehfQN6WRmz0NXO04Gnub6/cfUdD8cZCc12cXQrzfJFgUQoj/FxMTQ69evShcuPAba9Pa+v0dmShQoMDb7oIQr03WqFrHXbokp/zvvJ2lEWOau35Uo2pZOROFEB8fmYYqhHjrateuzZdffsnAgQPJly8ftra2zJs3j+TkZLp06YK5uTklS5Zk+/btAGRkZBAQEECxYsUwNjbG2dmZWbNmPbONzMxMJk2apN5Tvnx51q5dCzz+1l+j0XDr1i26du2KRqNh8eLFeWonKCiIKlWqYGpqipWVFd7e3ly8eFGrzB9//IGTkxOWlpZ88cUX3L9/X+vZn5yGeufOHTp16kS+fPkwMTGhcePGnDt3Tr2+ePFirKys2LFjBy4uLpiZmdGoUSMSEhLUMqGhoTRo0ID8+fNjaWlJrVq1OHHihFafzp07R82aNTEyMsLV1ZVdu3ZpXa9WrRrDhw/XOnfjxg309fXZt28fkH0a6t27d+nZsye2trYYGRnh5ubG1q1b1esHDhygRo0aGBsb4+joSP/+/bXSAAjxrmnkZk8TN3sqFc3HrC88WNn9Ew4Mr/tRBYpCiI+bBItCiHfCkiVLyJ8/P0ePHuXLL7+kd+/etGnThmrVqnHixAkaNmxIx44defDgAZmZmRQuXJg///yTiIgIRo8ezbfffsuaNWtyrX/SpEksXbqUX3/9lX/++YevvvqKDh06EBwcjKOjIwkJCVhYWDBz5kwSEhJo167dc9tJT0+nZcuW1KpVi1OnTnHo0CF69OihJuGGx6OVGzduZOvWrWzdupXg4GAmT56cWzfp3Lkzx44dY/PmzRw6dAhFUWjSpAlpaWlqmQcPHjBt2jT++OMP9u3bR3x8PEOGDFGv379/H39/fw4cOMDhw4cpVaoUTZo0UYPUzMxMWrVqhYGBAUeOHOHXX3/NFhj6+fmxatUqrS3qV69ejYODAzVq1MjW78zMTBo3bkxISAjLli0jIiKCyZMno6urq76HRo0a0bp1a06dOsXq1as5cOAA/fr1y/VdCJElPT2dfv36YWlpSf78+Rk1apT6d/OPP/6gUqVKmJubY2dnR/v27bl+/bp67507d/Dz86NAgQIYGxtTqlQpFi1apF6/dOkSbdu2xcrKCmtra1q0aEFcXJx6XaMBa1MDwjfN59NPypDPypJevXqRmpqqlgkMDKR69epYWVlhY2NDs2bNiImJef0vRgghXjflHZaYmKgASmJi4tvuihDiFUvPyFQOnr+pbAy7rHhWqaZ4V6/+v2vp6YqpqanSsWNH9VxCQoICKIcOHcqxvr59+yqtW7dWj/39/ZUWLVooiqIojx49UkxMTJSDBw9q3RMQEKD4+vqqx5aWlsqiRYue2e8n27l165YCKEFBQTmWHTNmjGJiYqLcu3dPPTd06FClatWq6nGtWrWUAQMGKIqiKNHR0QqghISEqNdv3rypGBsbK2vWrFEURVEWLVqkAMr58+fVMj///LNia2uba58zMjIUc3NzZcuWLYqiKMqOHTsUPT095d9//1XLbN++XQGUDRs2KIqiKNevX1f09PSUffv2qWW8vLyU4cOHq8dFixZVZsyYodapo6OjREVF5diHgIAApUePHlrn9u/fr+jo6CgPHz7Mte9C1KpVSzEzM1MGDBignD17Vlm2bJliYmKi/P7774qiKMqCBQuUv/76S4mJiVEOHTqkeHl5KY0bN1bv79u3r+Lh4aGEhoYqsbGxyq5du5TNmzcriqIoqampiouLi9K1a1fl1KlTSkREhNK+fXvF2dlZSUlJURTl8e8SMzMzpV27dsqZM2eUrVu3KgUKFFC+/fZbtY21a9cq69atU86dO6eEhYUpzZs3V9zd3ZWMjAxFURQlNjZWAZSwsDBFURRl7969CqDcuXPnDbxBIT4cEhu8ebJmUQjxxgWeSWDclgg16fXVhHtYORQn8EwCjdzs0dXVxcbGBnd3d/WerKTTWSMGP//8MwsXLiQ+Pp6HDx+Smpqa686j58+f58GDBzRo0EDrfGpqKp6ens/s67Pasba2pnPnzvj4+NCgQQPq169P27Ztsbf/3xQ1JycnzM3N1WN7e3utUY8nRUZGoqenR9WqVdVzNjY2ODs7ExkZqZ4zMTGhRIkSudZ57do1Ro4cSVBQENevXycjI4MHDx4QHx+vtuPo6IiDg4N6j5eXl1ZfChQoQMOGDVm+fDk1atQgNjaWQ4cO8dtvv+XY9/DwcAoXLkzp0qVzvH7y5ElOnTrF8uXL1XOKopCZmUlsbCwuLi453icEgKOjIzNmzECj0eDs7Mzp06eZMWMG3bt3p2vXrmq54sWL89NPP1G5cmWSkpIwMzMjPj4eT09PKlWqBDz+bzLL6tWryczMZP78+eqMgEWLFmFlZUVQUBANGzYEwMDAgIULF2JiYkLZsmUZP348Q4cOZcKECejo6NC6dWut/i5cuJACBQoQERGBm5vba347Qgjx+sg0VCHEG5WVtysrUMzyIB16LztB4JnHa+80Go3WLqFZ/5DLzMxk1apVDBkyhICAAHbu3El4eDhdunTRmhb2pKSkJAC2bdtGeHi4+omIiFDXLeYkL+0sWrSIQ4cOUa1aNVavXk3p0qU5fPh/+dme3ulUo9GQmZmZl1eVq5zqVJ6YLurv7094eDizZs3i4MGDhIeHY2Njk+v7yY2fnx9r164lLS2NFStW4O7urhXAP8nY2PiZdSUlJdGzZ0+t93/y5EnOnTunFfgKAZCRqVChqjfN/bpx72EaVatW1Zre7eXlxblz58jIyOD48eM0b96cIkWKYG5uTq1atQDUL0d69+7NqlWr8PDwYNiwYRw8eFCt5+TJk5w/fx5zc3PMzMwwMzPD2tqaR48eaU0jLV++PCYmJlrtJyUlcenSJeDxGmBfX1+KFy+OhYWFGpBm9eFpWeft7Ozw8PBQ102Hh4f/95f3BrxMaiIhxPtJRhaFEG9MRqbCuC0RWsmdnzZuSwQNXO2eWU9ISAjVqlWjT58+6rlnrQ9ydXXF0NCQ+Ph49R+SeZHXdjw9PfH09OSbb77By8uLFStW8Mknn+S5nSwuLi6kp6dz5MgRqlWrBsCtW7eIiorC1dX1hfr9yy+/0KRJE+DxmqybN29qtXPp0iUSEhLUUdAnA9wsLVq0oEePHgQGBrJixQo6deqUa5vlypXj8uXLREdH5zi6WKFCBSIiIihZsmSen0N8nLJmHkQk3ON8xg1Sr9/jckaCOvPgSY8ePcLHxwcfHx+WL19OgQIFiI+Px8fHR/1ypHHjxly8eJG//vqLXbt2Ua9ePfr27cu0adNISkqiYsWKWiPeWV5kt9/mzZtTtGhR5s2bh4ODA5mZmbi5ueX6BU3WmsmjR49SqFAhrU2vhBDiXSIji0KIN+Zo7O1sI4pPUoCExEccjb39zHpKlSrFsWPH2LFjB9HR0YwaNYrQ0NBcy5ubmzNkyBC++uorlixZQkxMDCdOnGD27NksWbLkpduJjY3lm2++4dChQ1y8eJGdO3dy7ty5l55SWapUKVq0aEH37t05cOAAJ0+epEOHDhQqVIgWLVq8UD1//PEHkZGRHDlyBD8/P62Rv/r161O6dGn8/f05efIk+/fvZ8SIEdnqMTU1pWXLlowaNYrIyEh8fX1zbbNWrVrUrFmT1q1bs2vXLmJjY9m+fTuBgYEADB8+nIMHD9KvXz/Cw8M5d+4cmzZtkg1uhJbcZh7cjYvUmnmQtXHT2bNnuXXrFpMnT6ZGjRqUKVMmx2neBQoUwN/fn2XLljFz5kx+//134PGXGOfOnaNgwYKULFlS62Npaanef/LkSR4+fKgeHz58GDMzMxwdHdUvdEaOHEm9evVwcXHhzp07z3zOK1euAFCkSBFsbCQlhRDi3SXBohDijbl+P/dA8UXK9ezZk1atWtGuXTuqVq3KrVu3tEb/cjJhwgRGjRrFpEmTcHFxoVGjRmzbto1ixYq9dDsmJiacPXuW1q1bU7p0aXr06EHfvn3p2bNnnp4zJ4sWLaJixYo0a9YMLy8vFEXhr7/+yjb19FkWLFjAnTt3qFChAh07dqR///4ULFhQva6jo8OGDRt4+PAhVapUoVu3bkycODHHuvz8/Dh58iQ1atSgSJEiz2x33bp1VK5cGV9fX1xdXRk2bBgZGRnA45HH4OBgoqOjqVGjBp6enowePVpr3aT4uD1r5kHavetcWTyA5p+4YmRkxJQpU2jUqBFFihTBwMCAKVOm0Lx5c2xsbNQR8KxUO6NHj2bTpk2Eh4fTrFkz+vbty6NHj5gxYwZ//PEHiqLQokUL9u/fj0aj4bvvvqN///5cvnwZgBUrVpCcnExAQAAREREsWbKEAQMGkJaWRv78+enSpQtWVlb8/vvvnD9/nt27d9OuXTsA2rRpg4eHB8HBweqzaDQaoqOjAciXLx9jx47N8X2cOXOGxo0bY2Zmhq2tLR07dtSaIXD//n38/PwwNTXF3t6eGTNmZEvFk5KSwpAhQyhUqBCmpqZUrVqVoKAg9XpeUvFkZGQwaNAgdafXYcOGaU17B1i7di3u7u4YGxtjY2ND/fr1JS2OEB+Kt7q9znPIjkdCfFgOnr+pFB2+9bmfg+dvvu2uCiHesKd/Pxg6uinmFT9VDB3dFD0bR0XH1EpBz1AxNTNX6tatqxgaGirR0dHKihUrlMKFCyu6urpKuXLllN9//10BFF1dXeXIkSPKhAkTFBcXF0VXV1fR0dFRqlWrpmzfvl357LPPFHNzc6Vbt25Kp06dlPz58yuAYmtrq3Tv3l39t4e+vr7i6empjB49WrG2tlY0Go1SunRp5dixY+ruqY6OjkqZMmUUQ0NDxd7eXjE1NVUAZc6cOcqwYcMUfX19dTfUhIQExcnJSQGUs2fPKvfv38+2W+qdO3eUAgUKKN98840SGRmpnDhxQmnQoIFSp04d9X1169ZNKVq0qLJ7927l9OnT6vNk7a6cVaZatWrKvn37lPPnzytTp05V35uiPN5dWV9fX6lfv74SGhqqHD9+XHFxcVHat2+v1vHDDz8o+fLlU9atW6dEREQoAQEBirm5ubrb9JUrVxQ9PT3lxx9/VGJjY5VTp04pP//8s3L//v3X+xdGfJQkNnjzJFgUQrwx6RmZyiff71accgkSnYZvVT75freSnpH5trsqhHjDNoZdzjFYLNR7oYJGRynUZ4lSdPhWZWPYZUVRFKVevXrKN998k2t9TZs2VQYPHqwoiqLcu3dP0dfXV/7880/1+t27dxUTExOt4Ion0sdkeTKlzh9//KE4OzsrmZn/+x2VkpKiGBsbKzt27FAURVEcHByUiRMnatVRuXJlpU+fPupx+fLllTFjxqjHTweLEyZMUBo2bKhVx6VLlxRAiYqKytPzXLx4UdHV1dVKkaMo2u8tL6l47O3tlSlTpqjHaWlpSuHChdVg8fjx4wqgxMXFKUK8bhIbvHmywY0Q4o3R1dEwprkrvZedQANa082y9jkc09wVXR1NDneLl7V48WIGDhzI3bt333ZXhMhV3M0HOZ5PvXERlEyuzHs8vdt3ti46msdTLLPW+2VkZPD999+zZs0a/v33X1JTU0lJSVF3ML1w4QJpaWlUqVJFrdfS0hJnZ+cX6uOTu6c+KWv31Hv37nHlyhW8vb21rnt7e3Py5MkXamfv3r2YmZlluxYTE8PDhw+f+zynT58mIyMj24ZTT743eHYqnsTERBISErTS+ejp6VGpUiV1Kmr58uWpV68e7u7u+Pj40LBhQz7//HPy5cuX5+cVQry7JFgUQrxRjdzsmduhglaeRQA7SyPGNHfNttuh+O/atWun7owqxLso8EwCM3dH53hNSX0IGh0c/GdSwNKYVT281C+UsoKpqVOnMmvWLGbOnIm7uzumpqYMHDjwhdPFPJ2GBiAtLU39+VXtnvo8SUlJNG/enB9++CHbNXt7e86fP5+nOnR1dTl+/Di6urpa154MQp+Xiud5dHV12bVrFwcPHmTnzp3Mnj2bESNGcOTIkWeuCRdCvB8kWBRCvHGN3Oxp4GrH0djbXL//iILmRlQpZi0jiq+JsbHxc/MgCvG2PC+ljoFtCVAySX9wl0kDPsW5dPYvlEJCQmjRogUdOnQAHudjjY6OVlPOFC9eHH19fUJDQ9WNmhITE4mOjqZmzZpqPQUKFNDa3OXcuXM8ePC/Ec8KFSqwevVqChYsiIWFRY79dXBwICQkRCtNT0hIiNYo4PNUqFCBdevW4eTkhJ5e9n+q5eV5PD09ycjI4Pr169SoUSPPbT/J0tISe3t7jhw5otabnp7O8ePHqVChglpOo9Hg7e2Nt7c3o0ePpmjRomzYsIFBgwa9VLtCiHeH7IYqhHgrdHU0eJWwoYVHIbxK2Eig+AyBgYFUr15d3Y2wWbNmar7HrGTe69evp06dOpiYmFC+fHkOHTqk3p+142GWsWPH4uHhwcKFCylSpAhmZmb06dOHjIwMpkyZgp2dHQULFsy2Q+rdu3fp1q0bBQoUwMLCgrp1677Q1DohcvK8lDr61oUwda1N2t+zeRB9iNjYWI4ePcqkSZPYtm0b8DhdTNboVmRkJD179uTatWtqHebm5vj7+zN06FD27t3LP//8Q0BAADo6Omg0//vdU7duXebMmUNYWBjHjh2jV69eWiNvfn5+5M+fX909NTY2lqCgIK3dU4cOHcoPP/zA6tWriYqK4uuvvyY8PJwBAwbk+Z307duX27dv4+vrS2hoKDExMezYsYMuXbqQkZGRp+cpXbo0fn5+dOrUifXr1+f43vJiwIABTJ48mY0bN3L27Fn69OmjNaX9yJEjfP/99xw7doz4+HjWr1/PjRs3XjqFkBDi3SLBohBCvOOSk5MZNGgQx44dY8+ePejo6PDZZ5+RmZmplhkxYgRDhgwhPDyc0qVL4+vrS3p6eq51xsTEqHkQV65cyYIFC2jatCmXL18mODiYH374gZEjR3LkyBH1njZt2nD9+nW2b9+ujizUq1eP27efnRdTiGfJS0odmyYDafBpGwYPHoyzszMtW7bUGlUbOXIkFSpUwMfHh9q1a2NnZ0fLli216vjxxx/x8vKiWbNm1K9fH29vb1xcXDAyMlLLTJ8+HUdHR2rUqEH79u0ZMmSIuu4RHq/v27dvH0WKFKFVq1a4uLgQEBDAo0eP1JHG/v37M2jQIAYPHoy7uzuBgYFs3ryZUqVK5fmdZI1OZmRk0LBhQ9zd3Rk4cCBWVlbo6Ojk+XkWLVpEp06dcn1veTF48GA6duyIv78/Xl5emJub89lnn6nXLSws2LdvH02aNKF06dKMHDmS6dOn07hx4zy3IYR4d2mUF5mY/obdu3cPS0tLEhMTc53uIYQQH5qMTOWZU3Rv3rxJgQIFOH36NGZmZhQrVoz58+cTEBAAQEREBGXLliUyMpIyZcpk2+Bm7NixTJ06latXr6obdTRq1IioqChiYmLUf4yWKVOGzp078/XXX3PgwAGaNm3K9evXMTQ0VPtSsmRJhg0bRo8ePd7Q2xEfmkMxt/Cdd/i55VZ2/wSvEq8ugX1ycjKFChVi+vTp6n8777MP7XmEyInEBm+erFkUQoh3SOCZhGyb/1il3cQqcgPxZ09x8+ZNdUQxPj5eXZNVrlw5tby9/eM1XdevX6dMmTI5tuPk5KS1o6OtrS26urpqoJh1LmtXxJMnT5KUlKS1iyLAw4cP1SmxQryMKsWssbc04mrioxzXLWp4vAFWlWLW/6mdsLAwzp49S5UqVUhMTGT8+PEAtGjR4j/V+7Z8aM8jhHg3SbAohBDviMAzCfRediLbP5j/WTwSPYsCjB4xmZbe7mRmZuLm5qa10+OT66qy1iw9OU31aTntgJjTuaw6kpKSsLe3JygoKFtdT66HFOJFvcmUOtOmTSMqKgoDAwMqVqzI/v37yZ8//3+u92350J5HCPHukWBRCCHeAbntCJnx8B7pty+Tv1E/Nt+wYZhzGQ4dDHnj/atQoQJXr15FT08PJyenN96++LC9iZQ6np6eHD9+/D/X86740J5HCPFukmBRCCHeAbntCKljZIaOsQX3T+4g3syaX1bc44+fJr3x/tWvXx8vLy9atmzJlClTKF26NFeuXGHbtm189tlnVKpU6Y33SXxYJKWOEEK8eyRYFEKId0BuO0JqNDrk/3QYd3b/xpUFfflxb0kWz5tL7dq132j/NBoNf/31FyNGjKBLly7cuHEDOzs7atasia2t7Rvti/hwZaXUEUII8W6Q3VCFEOId8LZ2hBRCCCHeFxIbvHmSZ1EIId4BWTtC5jbhTgPYv4IdIYUQQggh8kqCRSGEeAdk7QgJZAsYX/WOkEIIIYQQeSHBohBCvCOydoS0szTSOm9nacTcDhVeyY6QQgghhBB5JRvcCCHEO0R2hBRCCCHEu0KCRSGEeMfIjpBCCCGEeBfINFQhhBBCCCGEENlIsCiEEEIIIYQQIhsJFoUQQgghhBBCZCPBohBCCCGEEEKIbCRYFEIIIYQQQgiRjQSLQgghhBBCPEft2rUZOHDg2+6GEG+UpM4QQgghhBDiOdavX4++vv7b7oYQb5QEi0IIIYQQQjyHtbX12+6CEG+cTEMVQgghhBDvjfv37+Pn54epqSn29vbMmDFDa4roH3/8QaVKlTA3N8fOzo727dtz/fp19f6goCA0Gg07duzA09MTY2Nj6taty/Xr19m+fTsuLi5YWFjQvn17Hjx4oN739DRUJycnvv/+e7p27Yq5uTlFihTh999/1+rrwYMH8fDwwMjIiEqVKrFx40Y0Gg3h4eGv8xUJ8cpIsCiEEEIIId4bgwYNIiQkhM2bN7Nr1y7279/PiRMn1OtpaWlMmDCBkydPsnHjRuLi4ujcuXO2esaOHcucOXM4ePAgly5dom3btsycOZMVK1awbds2du7cyezZs5/Zl+nTp1OpUiXCwsLo06cPvXv3JioqCoB79+7RvHlz3N3dOXHiBBMmTGD48OGv9F0I8brJNFQhhBBCCPHOyshUOBp7m+v3H2GqSWPJkiWsWLGCevXqAbBo0SIcHBzU8l27dlV/Ll68OD/99BOVK1cmKSkJMzMz9dp3332Ht7c3AAEBAXzzzTfExMRQvHhxAD7//HP27t37zACvSZMm9OnTB4Dhw4czY8YM9u7di7OzMytWrECj0TBv3jyMjIxwdXXl33//pXv37q/u5QjxmkmwKIQQQggh3kmBZxIYtyWChMRHAKRev0BaWhoPLIuqZSwtLXF2dlaPjx8/ztixYzl58iR37twhMzMTgPj4eFxdXdVy5cqVU3+2tbXFxMREDRSzzh09evSZ/XuyDo1Gg52dnTrlNSoqinLlymFkZKSWqVKlygs9vxBvm0xDFUIIIYQQ75zAMwn0XnZCDRSfNGLDGQLPJGQ7n5ycjI+PDxYWFixfvpzQ0FA2bNgAQGpqqlbZJ3c21Wg02XY61Wg0aqCZm5e5R4j3iQSLQgghhBDihXXu3BmNRqMGWra2tjRo0ICFCxe+UMA0duxYPDw8tM5lZCqM2xKBAiQeWsPFKZ+SeGQdepZ2oKNHSsI5xm2JYO3addSpU4ewsDB++eUXPvnkE27dusXkyZOpUaMGZcqU0drc5k1ydnbm9OnTpKSkqOdCQ0PfSl+EeFkSLAohhBBCiJfSqFEjEhISiIuLY/v27dSpU4cBAwbQrFkz0tPTX7reo7G31RHFpNO7sKjaiqRTu9AxNMHMrS539i4k9tRR5i9bzc2bNzE1NcXPz09dxzhy5EguXLjA5s2bmTBhwit51hfVvn17MjMz6dGjB5GRkezYsYNp06YBj0cghXgfSLAohBBCCPEGPZ2C4VVzcnJi5syZr63+JxkaGmJnZ0ehQoWoUKEC3377LZs2bWL79u0sXrwYeLxWsEWLFpiZmWFhYUHbtm25du0aAIsXL2bcuHGcPHlSHaVcvHgx1+8/DhQfxZ9GSUvFqnoHlNQHPLocSb663TAoVIbr68ZxNCSYrl27UrZsWezs7Jg5cyaFChVi8+bNuLq6MnnyZDVAe9MsLCzYsmUL4eHheHh4MGLECEaPHg2gtY5RiHeZbHAjhBBCCCFembp161K+fHnWr19P165d1UAxODiY9PR0+vbtS7t27QgKCqJdu3acOXOGwMBAdu/eDTzesCb8yuP8hkmndmLqWguNrh6mLrVIOrWT/E0GUKD5UABWdv+EcnZGjBs3jh49epCZmYmOjg4TJkygX79+ap8URVF/rl27ttYxPJ5S+3R6jbFjxzJ27Fj1OCgoSOt6XFxctmd/On9itWrVOHnypHq8fPly9PX1KVKkyDPfoRDvCgkWhRBCCCHEK1WmTBlOnTrFnj17OH36NLGxsTg6OgKwdOlSypYtS2hoKJUrV8bMzAw9PT3s7OzU+6sUM6KAYQbxUQex6zgVANOydbi6YjiPyjUg494NCpd2R+9OHH6DH08zbdGiBdOmTSMpKYm2bdu++YfOwdKlSylevDiFChXi5MmTDB8+nLZt22JsbPy2uyZEnsg0VCGEEEKINywzM5Nhw4ZhbW2NnZ2d1gjWs6ZtZtmyZQuVK1fGyMiI/Pnz89lnn+Xa1vz587GysmLPnj0AnDlzhsaNG2NmZoatrS0dO3bk5s2bwOPgxsbGRmtTFoCWLVvSoUNHDsXcYlP4vxyKucVTg3NaFEVBo9EQGRmJo6OjGigCuLq6YmVlRWRkZK736+po8FLOomdlh2HBx+ksDGyLo2dRgEexJ7h3dD1nf+mFT8MGJCcns3//fnbu3Mm4ceNYs2YNBQsWzL1zb9DVq1fp0KEDLi4ufPXVV7Rp04bff//9bXdLiDyTYFEIIYQQ4hUJCQnB3d0dfX19WrZsmeO5u3fvMnv2bHR0dDhy5AhTpkxh/Pjx7Nq1i8zMTFq0aMHt27cJDg5m165dXLhwgXbt2qltbNu2jc8++4wmTZoQFhbGnj17cs3fN2XKFL7++mt27txJvXr1uHv3LnXr1sXT05Njx44RGBjItWvX1JG4Nm3akJGRwebNm9U6rl+/ztZt2zhh5IHvvMMMWBWO77zD/HUmgev3sqe1AIiMjKRYsWL/6V0eDlxL+q144qZ+ysUpjz9pNy+Rcfk0m3bv5+GDZG7fvs2uXbv4559/6NatG2vWrKF+/fr/qd1XadiwYcTFxfHo0SNiY2OZMWMGJiYmb7tbQuTZG5mG+vPPPzN16lSuXr1K+fLlmT17tiQlFUIIIcQHZ9CgQXh4eLB9+3bMzMxyPFe7dm0Avv76a6ysrChVqhRz5sxRR/6eN21z4sSJfPHFF4wbN05tt3z58tn64uvry6pVqzh48KD67645c+bg6enJ999/r5ZbuHAhjo6OREdHU7p0adq3b8+iRYto06YNACOn/oLGLD/JNs48uYfnw9QMwi8nE3gmgUZu9ur5v//+m9OnT/PVV19RuHBhLl26xKVLl9TniYiI4O7du7i6ugJgYGBARkaGVt9Pnz7NsWPHCAoKwtIqH6f/TeR2cgp6aQ/o59cCJ71E4HGbK1eupGvXrqxatYqmTZu+0J+XEOLZXnuwuHr1agYNGsSvv/5K1apVmTlzJj4+PkRFRb0zUwSEEEIIIV6FmJgYevXqReHChbXO9ejRk0spxly/mUxySvaUEvb29ly/fv250zYrV65MeHg43bt3f2Y/pk+fzt27dwFwcXFRz588eZK9e/eqgezTfS9dujTdu3encuXK/Pvvv9jZO7B82VJM3erlnO4hPY0RKw7g2tuLmzeuExgYyKRJk2jWrBmdOnVCR0cHd3d3/Pz8mDlzJunp6fTp04datWpRqVIl4PHurbGxsYSHh1O4cGHMzc1ZsGABVapUoWbNmgCUL/e/JpfMrMyCBQuYOnUqK1aswN/fn1mzZlG1alWuXr0KgLGxMZaWls98R0KI53vt01B//PFHunfvTpcuXXB1deXXX3/FxMSEhQsXvu6mhRBCCCFeqZSUFPr370/BggUxMjKievXqhIaGEhcXh0aj4datW3Tt2lVNAZF1rlu3AKqVzE/AiGlcvJUMwE8rtlCuXDmMjIzYv38/t27d0mrrwIED1KhRA2NjYxITE1m2bBnJycnq5ih//PEHlSpVwtzcHDs7O9q3b68moPf09CQpKQmAfPnyodFo6Ny5M0lJSTRv3pzw8HCtz7lz59TAzNPTk/Lly7N06VKWbvmbB9cuYuae89TOh7HHOTGpLcWLF6NRo0bs3buXn376iU2bNqGrq4tGo2HTpk3ky5ePmjVrUr9+fYoXL87q1avVOlq3bk2jRo2oU6cOBQoUYMmSJSxbtozWrVvn2Gbr1q1ZunQpaWlp/P777+oOq/b29upnwIAB/+FPWQiRRaM8vXfwK5SamoqJiQlr165V5+0D+Pv7c/fuXTZt2qRVPiUlRWtB9b1793B0dCQxMRELC4vX1U0hhBBCiDwZMGAAa9euZf78+RQtWpQpU6awefNmzp07R1paGs7OzowfP5527dphbm7OptDzdPCphlUNP0zL1ERjaMLVPwaTdiMOfRtHxn4/heZeZWnQ4PFGLWvWrKF58+bs3buXxo0b89133+Hs7EyTJk1wdnbGy8uLuLg4ChUqRN26dbG3t8fZ2Znr168zaNAgrKysiIiIoH///jx69IgRI0YwbNgwvvrqK4yNjZkyZQrr1q3jzJkz6OnlPsFs7ty5zJw5k5KeXvx95BS27Z6d2H7WFx608Cj0ql+3EFru3buHpaWlxAZv0GsdWbx58yYZGRnY2tpqnbe1tVWnCTxp0qRJWFpaqp8np2AIIYQQQrxNycnJzJ07l6lTp9K4cWNcXV2ZN28exsbGLFy4EDs7OzQaDZaWltjZ2WFkbMLsQzdBo0HH0BRds3zo6Buq9Vl5+7LlVgFcy7pRoUIFHj58yL1793B3d6dNmzb4+PhQrVo1Ro0aRa1atZg/fz5Lly7lm2++YeXKlVy8eBEnJyeSk5MJDg7mp59+Yvv27WquwWrVqgGP945YtWoVlpaW9O3bl9u3b+Pr60toaCgxMTHs2LGDLl26aK0bbN++PZcvX2bX+pWYlWvw3HdT0FySzAvxIXqndkP95ptvSExMVD+XLl16210SQgghxEcsI1NR00WsDzpOWloa3t7e6nV9fX2qVKmSYxqIo7G3SUjMebdQAINCZUhIfMTR2NsYGBhgaWnJ2bNn2bRpEykpKaxfv56qVasSHh5OaGgoPj4+ZGZm4ujoyJ9//smqVasoW7YsHh4ejBw5klq1agGQnq69JnL16tWMHDmS2bNn4+DgQEhICBkZGTRs2BB3d3cGDhyIlZUVOjr/+2ehpaUlrVu3xtzcjOKVapPDakUANIC9pRFVilnn/aUKId4br3WDm/z586Orq5stN9C1a9e0Eq9mMTQ0xNDQMNt5IYQQQog3LfBMAuO2RKgBX+r1WACCoq7jX7Toc++/fj/nQNG6fg+urfxWq9zGjRvx9PQEoEiRItjZ2dGxY0f69++f7f4iRYpQpEgRevToga+vL7169aJAgQLEx8fj4+PDX3/9hYeHB0FBQQB4e3ur6xcBSpUqxfr165/b/3///Rc/Pz+afOZB72Un0ABPrl3KCiDHNHdFVye3cFII8T57rSOLBgYGVKxYUd0KGh4nod2zZw9eXl6vs2khhBBCiJcWeCaB3stOaI0M6lnZg64eQ+asIfBMAgBpaWmEhoaqaSCe9LypmSn/Rqnl7ty5Q3R0tLpzaYUKFYiIiKBkyZLZPgYGBpw9e5Zbt24xefJkatSoQZkyZdTNbbIYGBgAZEtL8Tx37txhw4YNBAUF0bdvXxq52TO3QwXsLLWfx87SiLkdKmilzRBCfFhee+qMQYMG4e/vT6VKlahSpQozZ84kOTmZLl26vO6mhRBCCCFeWEamwrgtETy9A6COgRHmHk24s3chX023ptDgT5k+bSoPHjwgICAgWz1Villjb2lEfC7tJB5cSYH8NpgkF6HzoJHkz59f3RBw+PDhfPLJJ/Tr149u3bphampKREQEu3btYs6cORQpUgQDAwNmz55Nr169OHPmDBMmaG9CU7RoUTQaDVu3bqVJkyYYGxvnmDLjaZ6enty5c4cffvgBZ2dnABq52dPA1Y6jsbe5fv8RBc0fTz2VEUUhPmyvfc1iu3btmDZtGqNHj8bDw4Pw8HACAwOzbXojhBBCCPEueNZaw3y1O2Pi7E306slUqliR8+fPs2PHDvLly5etrK6OhjHNs484qnXV6syDfQuoUrkSV69eZcuWLepoYLly5QgODiY6OpoaNWrg6enJ6NGjcXBwAKBAgQIsXryYP//8E1dXVyZPnsy0adO06i9UqBDjxo3j66+/xtbWln79+uXp+ePi4khMTGTIkCHZnserhA0tPArhVcJGAkUhPgKvNXXGfyXb4wohhBDiTdsU/i8DVoU/t1xe00U8vfYRHm8KM6a5q0zhFOIFSGzw5r32aahCCCGEEO+TvKaByGs5mcIphHhfSbAohBDvmc6dO3P37l02btz4trsixAcpa63h1cRH2dYtwuNdQO1eMF1E1hROIYR4n0iwKIQQ75lZs2bxDq8gEOK9l7XWUNJFCCE+dq99gxshhBCvlqWlJVZWVm+7G69MWlra2+6CENlIugghhJBgUQgh3llr167F3d0dY2NjbGxsqF+/PsnJyXTu3FndXh+gdu3a9O/fn2HDhmFtbY2dnR1jx47Vquvs2bNUr14dIyMjXF1d2b17NxqNRmsq6/DhwyldujQmJiYUL16cUaNGaQVyY8eOxcPDg99++w1HR0dMTExo27YtiYmJapnMzEzGjx9P4cKFMTQ0xMPDg8DAQPV6XFwcGo2G1atXU6tWLYyMjFi+fDkA8+fPx8XFBSMjI8qUKcMvv/zyal+oEC+okZs9B4bXZWX3T5j1hQcru3/CgeF1JVAU4jV5+v9v4u2TaahCCPEOSkhIwNfXlylTpvDZZ59x//599u/fn+v00yVLljBo0CCOHDnCoUOH6Ny5M97e3jRo0ICMjAxatmxJkSJFOHLkCPfv32fw4MHZ6jA3N2fx4sU4ODhw+vRpunfvjrm5OcOGDVPLnD9/njVr1rBlyxbu3btHQEAAffr0UQO+WbNmMX36dH777Tc8PT1ZuHAhn376Kf/88w+lSpVS6/n666+ZPn06np6easA4evRo5syZg6enJ2FhYXTv3h1TU1P8/f1f8dsVIu9kraEQb44ss3gHKe+wxMREBVASExPfdleEEOKNOn78uAIocXFx2a75+/srLVq0UI9r1aqlVK9eXatM5cqVleHDhyuKoijbt29X9PT0lISEBPX6rl27FEDZsGFDrn2YOnWqUrFiRfV4zJgxiq6urnL58mX13Pbt2xUdHR21bgcHB2XixInZ+tKnTx9FURQlNjZWAZSZM2dqlSlRooSyYsUKrXMTJkxQvLy8cu2fEEJ86FJSUl5b3ampqa+t7tdFYoM3T6ahCiHEOyIjU+FQzC02hf/LA7PC1K1XD3d3d9q0acO8efO4c+dOrveWK1dO69je3p7r168DEBUVhaOjI3Z2dur1KlWqZKtj9erVeHt7Y2dnh5mZGSNHjiQ+Pl6rTJEiRShU6H955by8vMjMzCQqKop79+5x5coVvL29te7x9vYmMjJS61ylSpXUn5OTk4mJiSEgIAAzMzP189133xETE5PrMwshxPumdu3a9OvXj379+mFpaUn+/PkZNWqUOprm5OTEhAkT6NSpExYWFvTo0QOAdevWUbZsWQwNDXFycmL69Ola9SYkJNC0aVOMjY0pVqwYK1aswMnJiZkzZ6plNBoNc+fO5dNPP8XU1JSJEyeSkZFBQEAAxYoVw9jYGGdnZ2bNmqVVd9bU0O+//x5bW1usrKwYP3486enpDB06FGtrawoXLsyiRYvUe7KWHKxZs4YaNWpgbGxM5cqViY6OJjQ0lEqVKmFmZkbjxo25ceNGtraefF9PLrN4coZKlrwssxAvT6ahCiHEOyCnpN12db9mjH8y986fYPbs2YwYMYIjR47keL++vr7WsUajITMzM8/tHzp0CD8/P8aNG4ePjw+WlpasWrUq2z9IXhVTU1P156SkJADmzZtH1apVtcrp6uq+lvaFEOJtWbJkCQEBARw9epRjx47Ro0cPihQpQvfu3QGYNm0ao0ePZsyYMQAcP36ctm3bMnbsWNq1a8fBgwfp06cPNjY2dO7cGYBOnTpx8+ZNgoKC0NfXZ9CgQeoXhk8aO3YskydPZubMmejp6ZGZmUnhwoX5888/sbGx4eDBg/To0QN7e3vatm2r3vf3339TuHBh9u3bR0hICAEBARw8eJCaNWty5MgRVq9eTc+ePWnQoAGFCxdW7xszZgwzZ86kSJEidO3alfbt22Nubs6sWbPUde+jR49m7ty5z3xfWcss/v77b3r16sXff/9Ny5Yt87zMQrw8CRaFEOItCzyTQO9lJ7Llc7t2L4U5/+gxt0MvRo8eTdGiRdmwYcML1+/s7MylS5e4du0atra2AISGhmqVOXjwIEWLFmXEiBHquYsXL2arKz4+nitXruDg4ADA4cOH0dHRwdnZGQsLCxwcHAgJCaFWrVrqPSEhITmOZGaxtbXFwcGBCxcu4Ofn98LPJ4QQ77KMTIWjsbe5fv8R9x6m4ejoyIwZM9BoNDg7O3P69GlmzJihBot169bVCnj8/PyoV68eo0aNAqB06dJEREQwdepUOnfuzNmzZ9m9e7c6YgePNwzLaRSuffv2dOnSRevcuHHj1J+LFSvGoUOHWLNmjVawaG1tzU8//aT+vp8yZQoPHjzg22+/BeCbb75h8uTJHDhwgC+++EK9b8iQIfj4+AAwYMAAfH192bNnjzoDJSAggMWLFz/z/ZUrV04NnG1tbenVqxfBwcG0bNmSXbt2ERMTQ1BQkDp7ZuLEiTRo0OCZdYq8k2BRCCHeooxMhXFbIrIFiilXonh08STGTp58+0ciiRX0uHHjBi4uLpw6deqF2mjQoAElSpTA39+fKVOmcP/+fUaOHAk8HoEEKFWqFPHx8axatYrKlSuzbdu2HANTIyMj/P39mTZtGvfu3aN///60bdtW/Z/00KFDGTNmDCVKlMDDw4NFixYRHh6uboCTm3HjxtG/f38sLS1p1KgRKSkpHDt2jDt37jBo0KAXel4hhHhXPD1r5GrCPSwKFmHHP1fVXXW9vLyYPn06GRkZgPY0fYDIyEhatGihdc7b25uZM2eSkZFBVFQUenp6VKhQQb1esmRJ8uXLl60/T9cN8PPPP7Nw4ULi4+N5+PAhqampeHh4aJUpW7YsOjr/W71ma2uLm5ubeqyrq4uNjU220cwnl0hkfVnp7u6udS6nEdDc6shy8+ZNIO/LLMTLkzWLQgjxFh2Nva019TSLjoEJjy6d4drasYRN78ywb75l+vTpNG7c+IXb0NXVZePGjSQlJVG5cmW6deumjiAaGT3OIffpp5/y1Vdf0a9fPzw8PDh48KD6LfaTSpYsSatWrWjSpAkNGzakXLlyWiku+vfvz6BBgxg8eDDu7u4EBgayefPmHL/hflK3bt2YP38+ixYtwt3dnVq1arF48WKKFSv2ws8rhBDvgqxZI0//jn+YmkHvZScIPJOQ431PTtN/1Z6ue9WqVQwZMoSAgAB27txJeHg4Xbp0ITU1VatcTksd8rL84ckyWV9OPn3ueUsmnm4HeKFlFuK/kZFFIYR4i67fzx4oAujnd8S27Xj1eNYXHrTweLyxzNNTdoKCgrLd//TC/jJlynDgwAH1OCQkBHgc/GWZMmUKU6ZM0bpv4MCB2eru3bs3vXv3zrHfOjo6jBkzRp0y9DQnJ6dct0Vv37497du3z/GaEEK8T3KbNQKQciUagHFbImjgasfhw4cpVapUrmu0XVxc1N/ZWUJCQihdujS6uro4OzuTnp5OWFgYFStWBB6nOXrWpmhP1lOtWjX69OmjnnufNhbLyzIL8d/IyKIQQrxFBc2NXmm53GzYsIFdu3YRFxfH7t276dGjB97e3pQoUeI/1Ss+Dlk7G4aHh38Q7QjxuuU2awQg/f4Nbu2ZR/yF83z30zxmz57NgAEDcq1r8ODB7NmzhwkTJhAdHc2SJUuYM2cOQ4YMAR5/GVi/fn169OjB0aNHCQsLo0ePHhgbG6ujebkpVaoUx44dY8eOHURHRzNq1Kj3Kth6cpnFqVOnCAkJybbMQvw3EiwKIcRbVKWYNfaWRuT2vzQNYG9pRJVi1v+pnfv379O3b1/KlClD586dqVy5Mps2bfpPdYp3V+3atXMcFRZCvBm5zRoBMC1bFyU9lYSlg5g2ZhgDBgxQU2TkpEKFCqxZs4ZVq1bh5ubG6NGjGT9+vLoTKsDSpUuxtbWlZs2afPbZZ3Tv3h1zc3N1qUFuevbsSatWrWjXrh1Vq1bl1q1bWqOM77q8LLMQ/41GyW0+0Dvg3r17WFpakpiYiIWFxdvujhBCvBZZ61oArSlLWQHk3A4V1I0QhMiL2rVr4+HhoZVj7b+Ii4ujWLFihIWFZdv44lV6U+0I8bodirmF77zD2c5fXfE1BgWLY13/cXC4svsneJWweeXtX758GUdHR3bv3k29evVeef1vS15ig5CQEKpXr8758+dl9swrICOLQgjxljVys2duhwrYWWp/C2pnaSSBonhhnTt3Jjg4mFmzZqHRaNBoNMTFxXHmzBkaN26MmZkZtra2dOzYUd1REB5vGDFlyhRKliyJoaEhRYoUYeLEiVp1X7hwgTp16mBiYkL58uU5dOiQem3x4sVYWVmxY8cOXFxcMDMzo1GjRiQkJGi1MX78eAoXLoyhoSEeHh4EBgY+83mCg4OpUqUKhoaG2Nvb8/XXX5Oenq5ev3//Pn5+fpiammJvb8+MGTO0RlbHjx+vtWtjFg8Pjxw3cfqQPZ3wXLw+b2rWSJa///6bzZs3Exsby8GDB/niiy9wcnKiZs2ar6T+d5kss3i9JFgUQoh3QCM3ew4Mr8vK7p8w6wsPVnb/hAPD60qgKF7YrFmz8PLyonv37iQkJJCQkIC5uTl169bF09OTY8eOERgYyLVr17TyqGXlSRs1ahQRERGsWLFC3TAiy4gRIxgyZAjh4eGULl0aX19frcDtwYMHTJs2jT/++IN9+/YRHx+vrqvK6tv06dOZNm0ap06dwsfHh08//ZRz587l+Cz//vsvTZo0oXLlypw8eZK5c+eyYMECvvvuO7XMoEGDCAkJYfPmzezatYv9+/dz4sQJ9XrXrl2JjIzUWocVFhbGqVOnsuWbe1mdO3dGo9HQq1evbNf69u2LRqPRmjIoPny6OhrGNHcFyDVgHNPcFV2dV7OuLi0tjW+//ZayZcvy2WefUaBAAYKCgnLcSfRDI8ssXjPlHZaYmKgASmJi4tvuihBCCPHOSs/IVA6ev6lsDLusHDx/U6lZq5YyYMAA9fqECROUhg0bat1z6dIlBVCioqKUe/fuKYaGhsq8efNyrD82NlYBlPnz56vn/vnnHwVQIiMjFUVRlEWLFimAcv78ebXMzz//rNja2qrHDg4OysSJE7Xqrly5stKnTx+tdsLCwhRFUZRvv/1WcXZ2VjIzM7XqNDMzUzIyMpR79+4p+vr6yp9//qlev3v3rmJiYqL1/I0bN1Z69+6tHn/55ZdK7dq1c3zWl+Hv7684OjoqlpaWyoMHD9TzDx8+VKysrJQiRYoo/v7+L11/amrqK+jl4362aNHildQl8mb76SvKJ9/vVooO36p+Pvl+t7L99JW33bX3ksQGb56MLAohhBDvscAzCVT/4W985x1mwKpwfOcdJiz+DnG3ktUyJ0+eZO/evZiZmamfMmXKAI+3yY+MjCQlJeW5a5ueTI5tb/941PvJhNomJiZaU7/s7e3V6/fu3ePKlSt4e3tr1ent7U1kZGSO7UVGRuLl5aW1q6G3tzdJSUlcvnyZCxcukJaWppWE29LSEmdnZ616unfvzsqVK3n06BGpqamsWLGCrl27PvNZX1SFChVwdHRk/fr16rn169dTpEgRPD091XOBgYFUr14dKysrbGxsaNasmVaqgqwdYVevXk2tWrUwMjJi7ty5GBsbs337dq02N2zYgLm5OQ8ePADg0qVLtG3bFisrK6ytrWnRogVxcXGv9DnFi5FZI+J9J8GiEEII8Z7KLel3anomf0deV5N+JyUl0bx5c8LDw7U+586do2bNmhgbG+epvZwSbD+ZHDunJN3KO7CPXvPmzTE0NGTDhg1s2bKFtLQ0Pv/881feTteuXVm0aJF6vHDhwmxTXZOTkxk0aBDHjh1jz5496Ojo8Nlnn2VLMv71118zYMAAIiMjadOmDc2aNWPFihVaZZYvX07Lli0xMTEhLS0NHx8fzM3N2b9/PyEhIeq60acTrIs3S1dHg1cJG1p4FMKrhM0rm3oqxJug97Y7IIQQQogX96yk3xpdfVAy1aTfFSpUYN26dTg5OaGnl/1//aVKlcLY2Jg9e/bQrVu319JfCwsLHBwcCAkJoVatWur5kJAQrZHBJ7m4uLBu3ToURVGD05CQEMzNzSlcuDD58uVDX1+f0NBQihQpAkBiYiLR0dFaG3vo6enh7+/PokWLMDAw4IsvvshzgJyTjEyFo7G3uX7/EQXNjciKhzt06MA333zDxYsX1b6uWrWKoKAg9d7WrVtr1bVw4UIKFChARESE1kY8AwcOpFWrVuqxn58fHTt25MGDB5iYmHDv3j22bdvGhg0bAFi9ejWZmZnMnz9ffVeLFi3CysqKoKAgGjZs+NLPK4T4eEmwKIQQQryHnpX0W8+yICkJUVyKv8jO4+fo27cv8+bNw9fXl2HDhmFtbc358+dZtWoV8+fPx8jIiOHDhzNs2DAMDAzw9vbmxo0b/PPPPwQEBLyyPg8dOpQxY8ZQokQJPDw8WLRoEeHh4SxfvjzH8n369GHmzJl8+eWX9OvXj6ioKMaMGcOgQYPQ0dHB3Nwcf39/hg4dirW1NQULFmTMmDHo6OhkS8jdrVs3XFxcgMdB3MsKPJPAuC0RWu8++UwCpSw1FChQgKZNm7J48WIURaFp06bkz59f6/5z584xevRojhw5ws2bN9URxfj4eK1gsVKlSlr3NWnSBH19fTZv3swXX3zBunXrsLCwoH79+sDjqcbnz5/H3Nxc675Hjx5pTXMVQogXIcGiEEII8R56VtJviyqtuLntR67M70OTX1OIjY0lJCSE4cOH07BhQ1JSUihatCiNGjVCR+fxipRRo0ahp6fH6NGjuXLlCvb29jnu7vlf9O/fn8TERAYPHsz169dxdXVl8+bNlCpVKsfyhQoV4q+//mLo0KGUL18ea2trAgICGDlypFrmxx9/pFevXjRr1gwLCwuGDRvGpUuXsiXkLlWqFNWqVeP27dtUrVr1pfqfNe336dHch6kZhF9OJvBMAl27dqVfv34A/Pzzz9nqaN68OUWLFmXevHk4ODiQmZmJm5tbtqmipqamWscGBgZ8/vnnrFixgi+++IIVK1bQrl07daQ4KSmJihUr5hh4FyhQ4KWeVwghNMq7sJggF3lJvCmEEEJ8jHJL+v2015X0+12VnJxMoUKFmD59utaoqKIolCpVij59+jBo0KAXrjcjU6H6D3/nOJp7c9sMMlOSKd/lO4KH1KKYU1E0Gg0XL15EV1eXli1bYmVlxfTp08mfPz/79u2jRo0aABw4cIAaNWqwYcMGWrZsSVxcHMWKFSMsLAwPDw+tdoKDg2nQoAFhYWGUK1eOgwcPqoHvvHnzGD58OHFxcbn+m6lz587cvXuXjRs3vvDzC/EukNjgzZMNboQQQoj30JtO+v2uCgsLY+XKlcTExHDixAn8/PwAaNGihVrmxo0bzJkzh6tXr750bsVnTfvNkpD4iOPxiURGRhIREYGurq7W9Xz58mFjY8Pvv//O+fPn+fvvv18ocK1ZsyZ2dnb4+flRrFgxrRFSPz8/8ufPT4sWLdi/fz+xsbEEBQXRv39/Ll++/GIPC4wdOzZbsPq0zp0707JlyxeuW+Sudu3aDBw48IXuydpBNzw8/KXbfRV1iA+TBItCCCHEe+hZSb+zjl9l0u932bRp0yhfvjz169cnOTmZ/fv3a60VLFiwIOPHj+f3338nX758L9XGs6b9Pl3OwsIix1EPHR0dVq1axfHjx3Fzc+Orr75i6tSpee6DRqPB19eXkydPqkFxFhMTE/bt20eRIkVo1aoVLi4uBAQE8OjRo5cagRkyZAh79ux54fvepBs3btC7d2+KFCmCoaEhdnZ2+Pj4/Kc1qe+i8+fP06VLFwoXLoyhoSHFihXD19eXY8eOAeDo6EhCQoLWmlchXhVZsyiEEEK8pxq52TO3Q4VsG67YWRoxprnrR5HLzdPTk+PHjz+zzKtYcVPQ3CjXa/mbfvXMck9O+6xfvz4RERG59s/JyemZ/f3hhx/44YcfcrxmZ2fHkiVLcr138eLFuV57WlY+zndZ69atSU1NZcmSJRQvXpxr166xZ88ebt269Vb7lZqaioGBwSup69ixY9SrVw83Nzd+++03ypQpw/3799m0aRODBw8mODgYXV1d7Ozscq1DURQyMjJy3AlZiOeRkUUhhBDiPSZJv9+MD23a7++//65usPOkFi1a0LVr12zTUDMyMhg0aBBWVlbY2NgwbNiwbEFtZmYmkyZNolixYhgbG1O+fHnWrl2rVSY4OJgqVapgaGiIvb09X3/9Nenp6er1tWvX4u7ujrGxMTY2Nupo8dPu3r3L/v37+eGHH6hTpw5FixalSpUqfPPNN3z66acAah5RIyMjXF1d2bVrFxqNRg3eg4KC0Gg03L17V603PDwcjUZDXFwcALdu3cLX15dChQphYmKCu7s7K1eu1OpL7dq16devHwMHDiR//vz4+PgAcObMGRo3boyZmRm2trZ07NiRmzdvqvclJyfTqVMnzMzMsLe3Z/r06Vr1KopC586dKVWqFPv376dp06bqTsJjxoxh06ZNQPYppFnPtX37dipWrIihoSEHDhwgMzOTKVOmULJkSQwNDSlSpAgTJ07M9m6zPK//4uMgwaIQQgjxnpOk36/fhzbtt02bNty6dYu9e/eq527fvk1gYGC2Ka4A06dPZ/HixSxcuJADBw5w+/ZtNcdjlkmTJrF06VJ+/fVX/vnnH7766is6dOhAcHAwAP/++y9NmjShcuXKnDx5krlz57JgwQK+++47ABISEvD19aVr165ERkYSFBREq1atchxpzRr53LhxIykpKdmuZ2Zm0qpVKwwMDDhy5Ai//vorw4cPf+H39OjRIypWrMi2bds4c+YMPXr0oGPHjhw9elSr3JIlSzAwMCAkJIRff/2Vu3fvUrduXTw9PTl27BiBgYFcu3aNtm3bqvcMHTqU4OBgNm3axM6dOwkKCuLEiRPq9fDwcP755x8GDx6s7lr8JCsrq2f2/euvv2by5MlERkZSrlw5vvnmGyZPnsyoUaOIiIhgxYoV2Nra5nhvXvovPhLKOywxMVEBlMTExLfdFSGEEEIIZfvpK8on3+9Wig7fqn4++X63sv30lbfdtRfWokULpWvXrurxb7/9pjg4OCgZGRnKmDFjlPLly6vX7O3tlSlTpqjHaWlpSuHChZUWLVooiqIojx49UkxMTJSDBw9qtREQEKD4+voqiqIo3377reLs7KxkZmaq13/++WfFzMxMycjIUI4fP64ASlxcXI79Tc/IVA6ev6lsDLusHDx/U1mz5k8lX758ipGRkVKtWjXlm2++UU6ePKkoiqLs2LFD0dPTU/7991/1/u3btyuAsmHDBkVRFGXv3r0KoNy5c0ctExYWpgBKbGxsru+tadOmyuDBg9XjWrVqKZ6enlplJkyYoDRs2FDr3KVLlxRAiYqKUu7fv68YGBgoa9asUa/funVLMTY2VgYMGKAoiqKsXr1aAZQTJ07k2hdFUZTY2FgFUMLCwrSea+PGjWqZe/fuKYaGhsq8efPyVMfz+v+2SGzw5snkZSGEEEKIPGrkZk8DVzuOxt7m+v1HFDR/PPX0fRlRzMhU1L5XrvcpU0cN4pdffsHQ0JDly5fzxRdfZBvFSkxMJCEhQWv3VT09PSpVqqSO+p0/f54HDx7QoEEDrXtTU1Px9PQEIDIyEi8vLzSa/70rb29vkpKSuHz5MuXLl6devXq4u7vj4+NDw4YN+fzzz8mXLx+BZxKyrc21t8zH4l3HMb59nsOHD7N9+3amTJnC/PnzSUxMxNHREQcHB7W8l5fXi7+vjAy+//571qxZw7///ktqaiopKSmYmJholatYsaLW8cmTJ9m7d2+O6z5jYmJ4+PAhqampWu/U2toaZ2dn9Vj5j2ttK1WqpP4cGRlJSkoK9erVy9O9z+t/6dKl/1PfxPtDgkUhhBBCiBeQNe33ffN0wKWk5yPpURrfzV1Gj9YN2b9/PzNmzHipupOSkgDYtm0bhQoV0rpmaGiYpzp0dXXZtWsXBw8eZOfOncyePZsRI0YwZekWxgXd5OnQ6WriIwb8GcHcDhUYNaoBo0aNolu3bowZMyZPKUmyguIng7K0tDStMlOnTmXWrFnMnDkTd3d3TE1NGThwIKmpqVrlTE1NtY6TkpJo3rx5jpsR2dvbc/78+ef2LysgO3v2rBpwv4gn+2RsbPxC9z6v/+LjIWsWhRBCCCE+cIFnEui97ITWyJxGzwDjUtX4ce5Cxs74DWdnZypUqJDtXktLS+zt7Tly5Ih6Lj09XWsXWldXVwwNDYmPj6dkyZJaH0dHRwBcXFw4dOiQVnAWEhKCubk5hQsXftwnjQZvb2/GjRtHWFgYBgYGjJ29OFugCKjnxm2JICNTUfuRnJyMi4sLly5dIiEhQS1/+PBhrfsLFCgAoFXm6TyDISEhtGjRgg4dOlC+fHmKFy9OdHR0Dr3RVqFCBf755x+cnJyyvQ9TU1NKlCiBvr6+1ju9c+eOVt0eHh64uroyffr0bBsRAVob8zxPqVKlMDY2zjUdytMbET2v/+LjIcGiEEIIIcQHLCNTYdyWiBwDLpOytXkQE8qKP5bi2759rnUMGDCAyZMns3HjRs6ePUufPn20ghVzc3OGDBnCV199xZIlS4iJieHEiRPMnj1bTefRp08fLl26xJdffsnZs2fZtGmTOgqoo6PDkSNH+P777zl27Bjx8fGsX7+e69dv8NAke1qIjIf3uLryW+7/s5eL5yLZuC+MP//8kylTptCiRQvq169P6dKl8ff35+TJk+zfv58RI0Zo1ZEVyI4dO5Zz586xbdu2bDuSlipVSh3tjIyMpGfPnly7du2577xv377cvn0bX19fQkNDiYmJYceOHXTp0oWMjAzMzMwICAhg6NCh/P3335w5c4bOnTtrTQHWaDQsWrSI6OhoatSowV9//cWFCxc4deoUEydOpEWLFs/tRxYjIyOGDx/OsGHDWLp0KTExMRw+fJgFCxYA0KxZsxfqv/h4yDRUIYQQQogP2NHY21ojik8yKloOXWNzHt28hGv1JrnWMXjwYBISEvD390dHR4euXbvy2WefkZiYqJaZMGECBQoUYNKkSVy4cAErKysqVKjAt99+C0ChQoX466+/GDp0KOXLl8fa2pqAgABGjhwJgIWFBfv27WPmzJncu3ePokWL0nnQKHaSfQqmjr4xhg6luR+6kbS7V/FbmYlT0SJ0796db7/9Fh0dHTZs2EBAQABVqlTBycmJn376iUaNGql16Ovrs3LlSnr37k25cuWoXLky3333HW3atFHLjBw5kgsXLuDj44OJiQk9evSgZcuWWs+dEwcHB0JCQhg+fDgNGzYkJSWFokWL0qhRIzUgnDp1qjrd09zcnMGDB2ert0qVKhw7doyJEyfSvXt3bt68ib29PdWqVWPmzJnP7MPTRo0ahZ6eHqNHj+bKlSvY29vTq1cv0tLSMDLSzg+al/6Lj4NG+a+rZ1+je/fuYWlpSWJiIhYWFm+7O0IIIYQQ751N4f8yYFX4c8vN+sKDFh6FnlvuTToUcwvfeYefW25l90/ytI5Uo9GwYcMGWrZs+Qp69+7KzMxk2rRp/P7771y6dAlbW1t69uyJn58fxYoVY9WqVfzyyy9qWhGAgQMHqqPFY8eOZePGjQwePJhRo0Zx584dGjduzLx58zA3Nwfg/v379OrVi40bN2JhYcGwYcPYtGkTHh4eaiCbkpLCiBEjWLlyJXfv3sXNzY0ffviB2rVrv9RzSWzw5slXA0IIIYQQH7CC5kbPL/QC5d6kKsWssbc0ypbbMosGsLd8vCOt+J/n5VT8+uuvGTBgAJGRkfj4+ORYR0xMDBs3bmTr1q1s3bqV4OBgJk+erF4fNGgQISEhbN68mV27drF//36tPJEA/fr149ChQ6xatYpTp07Rpk0bGjVqxLlz517Pg4tXTqahCiGEEEJ8wLICrquJj3Jct6gB7N7RgEtXR8OY5q70XnYCDWj1PyuAHNPc9b1JXfK6PJkSxVSTxqxZs5gzZw7+/v4AlChRgurVqxMXFwc8HkVs1arVM+vMzMxk8eLF6khix44d2bNnDxMnTuT+/fssWbKEFStWqOk4Fi1apJWqJD4+nkWLFhEfH6+eHzJkCIGBgSxatIjvv//+Vb8G8RpIsCiEEEII8QF73wOuRm72zO1QIVueRTtLI8Y0d6WRW95TObzDq69e2tMpUVKuRJGSkoJeYfdc73kyB2NunJyc1EARHqfMuH79OgAXLlwgLS2NKlWqqNctLS218kSePn2ajIyMbDkZU1JSsLF5/1LPfKwkWBRCCCGE+MC9yoDrbWjkZk8DVzt19Kyg+eOR0Hc1wH1TslKiaH0BoP84r+XIjWewK1wkxz/bvKS/0NfX1zrWaDQ5pvDITVJSErq6uhw/fhxdXV2ta2ZmZnmuR7xdEiwKIYQQQnwE3veAS1dHk6dNbD4WuaVE0c/ngEbPkEcXTzJuixMNXO1e+Z9x8eLF0dfXJzQ0lCJFigCQmJhIdHQ0NWvWBMDT05OMjAyuX79OjRo1Xmn74s2RYFEIIYQQ4iMhAdeHI7eUKBo9AyyqtuZO0CLO6eqxPsgSR5N0/vnnH3V94X9lbm6Ov78/Q4cOxdramoIFCzJmzBh0dHTQaB4HpqVLl8bPz49OnToxffp0PD09uXHjBnv27KFcuXI0bdr0lfRFvF6yG6oQQgghhBDvmev3c86dCWDp/QUWlT/j7v7ltPepRrt27dT1hq/Kjz/+iJeXF82aNaN+/fp4e3vj4uKilbNx0aJFdOrUicGDB+Ps7EzLli21RiPFu0/yLAohhBBCCPGeedU5KP+r5ORkChUqxPTp0wkICHgtbUhs8ObJNFQhhBBCCCHeM287JUpYWBhnz56lSpUqJCYmMn78eABatGjxWtoTb4dMQxVCCCGEEOI9k5USBf6XAiXLm0qJMm3aNMqXL0/9+vVJTk5m//795M+f/7W1J948CRaFEEKId9zVq1dp0KABpqamWFlZAY+3sd+4ceNb7ZcQ4u3KSoliZ2mkdd7O0oi5HSq81pQonp6eHD9+nKSkJG7fvs2uXbtwd889t6N4P8k0VCGEEOIdN2PGDBISEggPD8fS0vJtd0cI8Q5531OiiHebBItCCCHEOy4mJoaKFStSqlSpt90VIcQ7SFKiiNdFpqEKIYQQb1nt2rXp378/w4YNw9raGjs7O8aOHQuAk5MT69atY+nSpWg0Gjp37vxW+yqEEOLjISOLQgghxDtgyZIlDBo0iCNHjnDo0CE6d+6Mt7c3oaGhdOrUCQsLC2bNmoWxsfHb7qoQQoiPhIwsCiGEEG9BRqbCoZhbbAr/l3sP03AvV44xY8ZQqlQpOnXqRKVKldizZw8FChTA0NAQY2Nj7OzsZM2iEDl4Hzd8CgoKQqPRcPfuXQAWL16sbmAlxLtCgkUhhBDiDQs8k0D1H/7Gd95hBqwKJyLhHufTrAk8k6CWsbe35/r162+xl0K8vM6dO6PRaOjVq1e2a3379n3lU6oTEhJo3Lhxnsu3bNkSjUaDRqNBT0+P/PnzU7NmTWbOnElKSsoLtf2yQV61atVISEjI9gXQ2LFj8fDweOH6hHgdJFgUQggh3qDAMwn0XnaChMRHWucfpEPvZSfUgFGj0ZCZmfk2uijEK+Ho6MiqVat4+PCheu7Ro0esWLGCIkWKvNK27OzsMDQ0zHP5smXL4uzsTEJCAvHx8ezdu5c2bdowadIkqlWrxv37919p/3JiYGCAnZ0dGo32rqVDhgxhz549r719IfJCgkUhhBDiDcnIVBi3JQLlGWXGbYkgI/NZJYR4P1SoUAFHR0fWr1+vnlu/fj1FihTB09NTPZeSkkL//v0pWLAgRkZGVK9endDQUAAyMzMpXLgwc+fO1ao7LCwMHR0dLl68CGSfhnrp0iXatm2LlZUV1tbWtGjRgri4OADS0tLQ19fHyMgIOzs7HBwccHd358svvyQ4OJgzZ87www8/aPVvyJAhFCpUCFNTU6pWrUpQUBDweCpply5dSExMVEcqszan+uOPP6hUqRLm5ubY2dnRvn17rdkCT09DzWJmZoaNjQ0nT56kTp06mJubY2FhQcWKFTl27NhL/VkI8bIkWBRCCCHekKOxt7ONKD5JARISH3E09vab65QQr1HXrl1ZtGiRerxw4UK6dOmiVWbYsGGsW7eOJUuWcOLECUqWLImPjw+3b99GR0cHX19fVqxYoXXP8uXL8fb2pmjRouq5DRs2ULJkSQwNDSlevDgxMTGsWrWKO3fucOvWLVxdXTEyMmL58uWEh4dz+vRp9d6sqZ+hoaHo6uoyadIkvvjiC+7fv0+/fv04dOgQCxcupH79+oSFhVGnTh2+/fZbxowZQ82aNbGwsCAhIYG4uDhu375NoUKF6NatG/fv3+e3335j48aNxMXFUb9+faysrNi4cSMdOnQAoHXr1ly6dClbX/z8/ChcuDChoaF88803XL9+nWrVqmFvb0+/fv0AUBSFsWPHUqRIEQwNDXFwcKB///6v7g9QfPQkWBRCCCHekOv3cw8UX6acEO+SJzdtunE/BUWBDh06cODAAS5evMjFixcJCQlRgySA5ORk5s6dy9SpU2ncuDGurq7MmzcPY2NjFixYAICfnx8hISHEx8cDj0cbV61ahZ+fn1b769evZ9SoUXz//ffY29vTq1cvypQpA8Dly5fJyMjg999/x8fHJ8f+x8TEsHHjRnx9fdHT0yM4OJhvvvmGRYsW8eeff7J27VpOnjzJ9u3bqVq1KuvWrSMsLAxDQ0M0Gg12dnZ89913HD9+nFWrVhEREUH37t3p2rUrNjY2/PTTT5w+fZoHDx4wceJEvvnmGwASExP54osvsvUnPj6e+vXrs3fvXsaPH8+QIUM4c+YMmzdvpmTJkgCsW7eOGTNm8Ntvv3Hu3Dk2btyIu7v7f/yTFOJ/JHWGEEII8YYUNDfK8bxd+8nZyj05pS6nXR4VRaaqindH4JkExm2JUEfOb0bfwCDjIcevpdO0aVMWL16Moig0bdqU/Pnzq/fFxMSQlpaGt7e3ek5fX58qVaoQGRkJgIeHBy4uLqxYsYKvv/6a4OBgrl+/Tps2bQDU9YWdOnXC39+foUOHcuXKFb766it13W9CQgJpaWkkJydjb2+f4zNkZmayePFivvvuO/T09OjYsSObN28mIyODUqVK8eDBAwwNDWnRogUpKSk0a9aMy5cvq/fHx8ezaNEi4uPjcXBw4Pjx4wQHBwOP10jq6+sDj6fBzpkzR13L+csvv1C1alXq1aun1Z9BgwbRrVs3dHV1qVatGs2aNaNEiRIAVK5cWW3Tzs6O+vXro6+vT5EiRahSpcoL//kJkRsZWRRCCCHekCrFrLG3NEKTy3UNYG9pRJVi1m+yW0L8J7lt2vQoPZPey05Qvl5LFi9ezJIlS+jatetLteHn56dORV2xYgWNGjXCKp81h2Ju8eumxwGZm9vjEbWkpCQqVqxIeHg4f/31FwBLly4lOjqa9u3b59qGk5MT5ubmREZGUqxYMezt7blz5w66urpq2zt37iQ8PJzIyEjmzp2Ls7Ozev/p06fJyMigdOnSmJmZUalSJQIDA0lPT6devXps2LABAD09PTXYAyhdujRWVlZcuXJFqz9jx45l3759pKSkcO/ePVxdXdU6srRp04aHDx9SvHhxunfvzoYNG0hPT3+pdyxETiRYFEIIId4QXR0NY5q7AmQLGLOOxzR3RVcnt3BSiHdLXjZt+uuOLampqaSlpWWbAlqiRAkMDAwICQlRz6WlpREaGoqrq6t6rn379pw5c4bjx4+zdu1aytZsoqafmbH38SY3U3dGEXgmgQoVKnDu3DkKFiyIk5MTAM7OzpQsWfKZeUr19fU5e/YsgYGBtG7dGo1Gg76+PhkZGdy+/XgdsZOTEyVLlqRkyZLY2dkBoKurS0ZGBklJSejq6nL8+HGWLVsGwN9//83Zs2dZtGjRS6XCcXNze/xsU6fSqlUrrfWf8HjH2aioKH755ReMjY3p06cPNWvWJC0t7YXbEiInEiwKIYQQb1AjN3vmdqiAnaX2lFQ7SyPmdqhAI7ecp8gJ8S7Ky6ZNV++nsWRbCBEREejq6mpdNzU1pXfv3gwdOpTAwEB1nd+DBw8ICAhQyzk5OVGtWjUCAgJISUtnRUJBtV39fA4A3LgYTe9lJyjgUZf8+fPTokULjh49CsCxY8fo37+/1rRRgKtXr3LlyhWuXbvGzZs3qVWrFh4eHgwdOhR4PAro5+fH2LFj0dPTY+vWrRw9epRJkyaxZs0aoqOjMTc3JykpiUePHpGRkUF8fDz/1959x9d4vg8c/5wksjeRBCHIkAhib2LHSFFFUytGWpsaRb8qlCpKrZavGqFWaNGaaRUxIsSKGRERO0qNSJD9/P7IL8/XcRKrJMb1fr3O6+U8437u55wg13Pf93XVrVsXQ0NDNm3ahJ6eHpGRkUycOBGAjIwMraymsbGx3Lt3j2LFiqnbsrKyGDhwIEeOHKFEiRIsXbqUQ4cO4eHhofMZm5iY4Ofnx5w5cwgLCyMiIkIreY8Q/4asWRRCCCHyma+XI808HYiMv8PNpBSKWmRPPZURRfE6/fe//2XkyJHcvXsXA4PsXwGTk5OxsbGhbt26ajkIyC7r0KhRo2e2OXHhWpJP7uf21lk6+woVLaP++QGFsLS0zLWNKVOmkJWVRbdu3UhKSqJatWr88ccf2NjYaB3XpUsX+vfvT5HKzdAU+l9NRY2BYfY1Tu3EuJg7EzLuMH3G90z5djJ9+/YFsqd0tmrVSqsPWVlZODo6oq+vT6FChdDX12fSpEn069dPq2ZjcHAwkyZN4vvvv2fAgAHY2tpSuXJldu7ciZ6eHsWLF6dv374MHz4cgE6dOrF48WKmTZvG1KlT+f7773F1dWX69Ol88MEHGBgYMGjQIHr06AHAgAEDqFWrFmXK/O/z0mg03L59m+7du5OQkMDPP/9M/fr16datG0ePHiU8PJxBgwaxdOlSMjMzqVmzJqampqxYsQITExOtLLFC/BsysiiEEEIUAH09DbXLFqatd3Fqly0sgaJ47Ro1akRycrLWqNbevXtxcHDg4MGDpKT8b4Rw165dODg4kJCQoL46deqEr6+v1rYGdesBoDE0pcSA5Vovh67fqe09mdzpt99+Y+nSpQAYGxszZ84cbt26RUpKCvv27dNa05ejX79+7D//D2bNh+jsK/nFRqxqdeTu3pVEzezFp3374efnx9GjRwHYvHkzP/30kxostmvXDisrKxRFISMjg1GjRuHi4sLQoUO1AkXInp46YcIErl+/zieffEJKSgqnT5+mVatWeHh4YGxszPz58/nnn39IS0tj8ODBDB8+XB2d/OCDD1i7di1+fn4EBwdjZmbGqFGjmDFjBkZGRlhZWbFmzRoCAgLUmosajYbVq1dz+fJlMjIy+O9//8vNmzepUqUKbdq0ITY2FgBra2sWLlxI3bp1qVixIn/99RebNm2icOHCz/6BEOI5aJQ3OJ3a/fv3sbKyIjExMc+nUUIIIYQQr5JGo2HDhg20a9cOgLNnzxIQEEBUVBTlypUjKiqqQPv3NEuXLmXo0KE6hd5z5NThGz16NACjRo3iwYMH7Ny5k3nz5uHj4wNAw4YNKV26tBrQAWow83h23swsBbdOo4jfPI+SQ9foXE9D9hTrfaMav5IHIr9HXWNISNQzj5v9sTdtvYv/6+s9zYMHDyhevDgzZszQmjL7NM/6fsTTSWyQ/2RkUQghhBDvnYCAADUYfFJCQgItW7ZU3wcFBWFmZkZMTAw7dux4rvbHjx+PRqNBo9FgYGCAs7Mzn3/+OcnJyS/dZx8fH7XN3F4+Pj507tyZc+fO5dlGo0aN2LVrl/p+165d+Pj40LBhQ3X7o0ePOHjw4HNNQ9XX09DOO3utXX4kbcqr/MzLHvcijh07xurVq4mLi+Po0aNqnce2bdu+8msJ8aaQNYtCCCGEEI/JyXKZIy4ujtatW7/wOrDy5cvz119/kZGRQXh4OL169eLhw4csWLBA59i0tDQMDQ2f2t769etJS0sD4MqVK9SoUYO//vqL8uXLA2BoaIiJiQkmJiZa52VmKer62JLlq/P75LFkZGTw6NEjjh07RsOGDUlPT+e///0vABEREaSmpj5XsAhQoYQ1SuoDLs/8iJz5ahpDY2r851eC/DxfadKmnPIzNxJTcs3AmjOS+brKz0yfPp2YmBgMDQ2pWrUqe/fu1aobKcS7RkYWhRBCCCEeo9Fo1KmWGo2GI0eO8PXXX6PRaBg/fjyQHax16tQJa2trbG1tadu2LRcvXtRqx8DAAAcHB0qUKEHnzp3p0qULGzduBLJHHr29vVm0aBGlS5fG2Dh7JOzy5cu0bdsWc3NzLC0t6dSpE3///TcAtra2ODg44ODggJ2dHQCFCxdWt9na2rJ06VKsra3VPnTtPxzLEq60GRBEhwbeTBmXPe102pJf2bt3L25ubpw+fZqpU6eyZ88erKys6NGjByVLlqRkyZLP/ZlZWFhw5uQJ1mzbw7xft7Nm01/sG9X4lWf3LcjyM5UrV+bIkSMkJydz584dtm/fToUKFV6ojcfXJQrxNpBgUQghhBAiDwkJCZQvX57hw4eTkJDAiBEj1HqBFhYW7N27l/DwcMzNzfH19VVH/nJjYmKitf/8+fOsW7eO9evXExUVRVZWFm3btuXOnTvs3r2b7du3c+HCBTp37vxSfQ89lcDmEwk8+ucaD8/upWiHcdh3/ho0eowfO4Ylv2yifv36tGvXjmbNmlGqVClmzZqFqakpderUeaFr6enp4e7mSscm1en7QT0+alT1tSVtkvIz764nH3Y8D2dnZ2bNmvXcx4eFhaHRaNSg/clr5jzIeVkvcw+5uXHjBs2aNcPMzExt7/EHWflFpqEKIYQQQuTBwcEBAwMDzM3N1empK1asICsri0WLFqHRZAdEwcHBWFtbExYWRvPmzXXaOXLkCKtWraJx48bqtrS0NH7++Wd1lHD79u2cPHmS+Ph4nJycAPj5558pX748hw4dyjVDaF4ysxQmbDoDgJKRRuHWwzCwyJ4uaVyyAimXjrMtdDuzJ45hwYIFtGnThjt37nDmzBkuXrxIUFDQS3xa+UfKz4gchw4dwszM7KXP79y5M61atXpl/XlV7c2cOZOEhASioqKwsrICsh9ePVlS5nWTYFEIIYQQ74XH1+7dSkrF4CXzwR8/fpzz589jYWGhtT0lJYW4uDj1/cmTJzE3NyczM5O0tDRat27NDz/8oO4vVaqUGigCREdH4+TkpAaKAJ6enlhbWxMdHf1CwWJk/B21aL2BpZ0aKAKYuNUm5dJxHv4dj2OFOgQEBNCiRQs8PDyIjo4mLS3tudcrFqSc8jPi/fb436GXkds63zehvbi4OKpWrYqrq6u67cn11PlBpqEKIYQQ4p0XeiqBelN34r/wAENCoth97hZ7Y28ReirhhdtKTk6matWqREVFab3OnTvHJ598oh7n7u5OVFQU0dHRPHr0iI0bN2Jvb6/u/zejIc9yMyklz33GJbIT4uhbFCbDyJLg4GAiIiJo1qwZqampaDQaLl269Nr6Jt5eWVlZfPvtt5QuXRoTExMqVarEr7/+iqIoNG3alBYtWpBTle/OnTuUKFGCcePGAf+b/rllyxYqVqyIsbExtWrV4tSpU3leLy4ujrZt22Jvb4+5ubla2uVxT05D1Wg0LFq0iPbt22Nqaoqrq6u6Vjg3z5o2GhcXR5kyZRg4cCCKopCamsqIESMoXrw4ZmZm1KxZk7CwsDzby5nWumTJEkqWLIm5uTn9+/cnMzOTadOm4eDgQNGiRfnmm2+07mndunX8/PPPaDQaAgIC1HvLmYZap04dRo0apdXXW7duUahQIfbs2QPwzL4+DwkWhRBCCPFOCz2VQL8VR9WRthwpGVn0W3H0hQPGKlWqEBsbS9GiRXFxcdF65UwXg+zspC4uLjg7Oz8z0ymAh4cHV65c4cqVK+q2M2fOcO/ePTw9PV+oj4+Xjsi4f4uMpNvq+8zkO6DRw7Hb9+pxlStXZtq0aSiKQs2aNVm1apVOm0uXLs11vZQkbXl/fPvtt/z888/897//5fTp03z++ed07dqVPXv2sGzZMg4dOsScOXMA6Nu3L8WLF1eDxRwjR45kxowZHDp0CDs7O/z8/EhPT8/1esnJybRq1YodO3Zw7NgxmjZtCqD1dyQ3EyZMoFOnTpw4cYJWrVrRpUsX7ty588L3e+LECerVq8cnn3zCDz/8gEajYeDAgURERBASEsKJEyfo2LEjvr6+xMbG5tlOXFwc27ZtIzQ0lNWrV7N48WJat27N1atX2b17N1OnTmXs2LEcPHgQyJ5a6+vrS6dOnUhISGD27Nk6bXbp0oWQkBA1OAdYs2YNxYoVo379+gAv1dcnSbAohBBCiHdWztq93GacZqU+IPXvC3yxYCNHjh4jKirqmb+EQvYvaUWKFKFt27bs3buX+Ph4wsLCGDx4MFevXn3pvjZt2pQKFSrQpUsXjh49SmRkJN27d6dhw4ZUq1bthdrKKTEBoDEw5PaWmaTdvEDKlVPc2fETZuXqUaK4I3YkMmbMGCIiIrh06RJ//vknsbGxeHh4vPR9iHdHZpZCRNxtfo+6xu4z15k8eTJLliyhRYsWlClThoCAALp27cqCBQsoXrw4CxYsYPTo0YwZM4atW7eyYsUKDAy0V70FBQXRrFkzKlSowLJly/j777/ZsGFDrtevVKkSn332GV5eXri6ujJ27FgAtm3b9tR+BwQE4O/vj4uLC5MnTyY5OZnIyMgXuvf9+/fj4+PDiBEjmDRpEpCdrTg4OJhffvmF+vXrU7ZsWUaMGEG9evUIDg7Os62srCyWLFmCp6cnfn5+NGrUiJiYGGbNmoW7uzs9e/bE3d1drXVqZ2eHkZERJiYmODg4aD2EytGpUyeuX7/Ovn371G2rVq3C398fjUbz0n19kqxZFEIIIcQ76/G1e09KvXyShKWDSQCq/f9Swt69ez+zTVNTU/bs2cOoUaP48MMPSUpKonjx4jRp0gRLS8uX7qtGo+H3339n0KBBNGjQAD09PXx9fZk7d+4Lt5VTYuLjLWBg44ipex1u/jKerJRkTMpWx7Z5f4L8PLEw1+Ps2bMsW7aM27dv4+joyIABA/jss89e+j7EuyH0VAITNp1R//6k3brEw4cPadykqVYiobS0NCpXrgxAx44d2bBhA1OmTGH+/Pla6+1y1K5dW/2zra0t7u7uREdH59qH5ORkxo8fz5YtW0hISCAjIwN49shixYoV1T+bmZlhaWnJzZs3n/POs4PCZs2a8c033zB06FB1+8mTJ8nMzMTNzU3r+NTUVAoXznv9rLOzs9YaZ3t7e/T19dHT09Pa9iJ9tLOzo3nz5qxcuZL69esTHx9PRESEWsf1Zfv6JAkWhRBCCPHOymvtXpHWn1Ok9efq+9kfe9PWuzgAixYt0jo2KipK53wHBweWLVuW53XHjx+v1mR8kf0lS5bk999/z/O8HM7OzlrTz3IEBASo65t8vRxpU9GRDRf0sKjcCovK2RkaHa2MCfLzVEtM5DWqI95fOVO3H/8JU9Kz/y5Zt/uKb7o2oIFbUXWfkZERAA8fPuTIkSPo6+u/0FTHvIwYMYLt27czffp0XFxcyMjIoEqVKnlOW81RqFAhrfcajYasrKznvq6dnR3FihVj9erV9OrVS30IlJycjL6+vnqPjzM3N3+h/vzbPkL2LIfBgwczd+5cVq1aRYUKFdTany/b1ydJsCiEEEKId9bja/dexXFvG5eiFrgWNWd+YC0pMSGeS15TtwsVdgL9QmTcv8XC44/o4VtW5+do+PDh6OnpsW3bNlq1akXr1q21ysUAHDhwgJIlSwJw9+5dzp07l+e05/DwcAICAmjfvj0A169ffzU3+QwmJiZs3ryZVq1a0aJFC/78808sLCyoXLkymZmZ3Lx5U10XWJDatm3Lp59+SmhoKKtWraJ79+7qvlfVV1mzKIQQQoh3Vs7avbxCIw3ZI201StvmZ7fyXe2yhWnrXZzaZQvnGSj6+PhoTbl7FR7P3njx4kU0Gk2uI7Vvi1dVcP1NltfUbT0jUyxrfMidnYuI3beF9WFHOHr0KHPnzmXZsmVs2bKFJUuWsHLlSpo1a8bIkSPp0aMHd+/e1Wrn66+/ZseOHZw6dYqAgACKFClCu3btcu2Lq6sr69evJyoqiuPHj9OnT5/Xccu5MjMzY8uWLRgYGNCyZUuSk5Nxc3OjS5cudO/enfXr1xMfH09kZCTffvstW7Zsybe+Pd7Hdu3a8dVXXxEdHY2/v7+671X1VYJFIYQQQryzctbuAToBY877ID/Pt3qk7WlB3vjx4ws0OEtISKBly5YFdn3x4p5WdsW6fles6nQm8cAvfNKiDr6+vmzZsgVnZ2d69+7N+PHjqVKlCpCdkdTe3p6+fftqtTFlyhSGDBlC1apVuXHjBps2bcozW/D333+PjY0NderUwc/PjyZNmry6G30O5ubmbNu2DUVRaN26NQ8ePCA4OJju3bszfPhw3N3dadeuHYcOHVJHS/Nbly5dOH78OPXr19fpw6voq0bJbcL7G+L+/ftYWVmRmJj4rxaMCyGEEOL99mSyDtBdu/e28vHxwdvbW6vWXEG2k5eLFy9SunRpjh07hre392u5BkB6errOerBXZenSpQwdOvSdLhUSEXcb/4UHnnnc6sBa1C77/IlSwsLCaNSoEXfv3n3p0VmJDfKfjCwKIYQQ4p3n6+XIvlGNWR1Yi9kfe7M6sBb7RjV+6wPFgIAAdu/ezezZs9FoNGg0Gi5evMju3bupUaMGRkZGODo6Mnr0aDWTJMCDBw/o3r075ubmODo6MmPGDJ22ly9fTrVq1bCwsMDBwYFPPvlEzdaoKAouLi5Mnz5d65yoqCg0Gg3nz58HtKeh5ubUqVO0bNkSc3Nz7O3t6datG//884+6PzQ0lHr16mFtbU3hwoVp06YNcXFx6v6cqa1r1qyhYcOGGBsbs3LlSgICAmjXrh3Tp0/H0dGRwoULM2DAAK3EKM9TsHzp0qWULFkSU1NT2rdvz+3bt3nXydRt8TgJFoUQQgjxXtDX0zzX2r23yezZs6lduzaBgYEkJCSQkJBAoUKFaNWqFdWrV+f48ePMnz+fxYsXq7XiILsw+u7du/n999/5888/CQsL4+jRo1ptp6enM3HiRI4fP85vv/3GxYsX1UyrGo2GXr166dRrCw4OpkGDBri4uDyz7/fu3aNx48ZUrlyZw4cPExoayt9//02nTp3UYx48eMCwYcM4fPgwO3bsQE9Pj/bt2+tkjRw9ejRDhgwhOjqaFi1aALBr1y7i4uLYtWsXy5YtY+nSpSxdulQ951kFyw8ePEjv3r0ZOHAgUVFRNGrUSOszfFe9D1O3xQtQ3mCJiYkKoCQmJhZ0V4QQQggh3ggZmVnK/vP/KL8du6rsP/+P0qBhQ2XIkCHq/i+//FJxd3dXsrKy1G0//vijYm5urmRmZipJSUmKoaGhsnbtWnX/7du3FRMTE612nnTo0CEFUJKSkhRFUZRr164p+vr6ysGDBxVFUZS0tDSlSJEiytKlS9VzAGXDhg2KoihKfHy8AijHjh1TFEVRJk6cqDRv3lzrGleuXFEAJSYmJtc+3Lp1SwGUkydParU5a9YsreN69OihlCpVSsnIyFC3dezYUencubOiKIpy6dIlRV9fX7l27ZrWeU2aNFHGjBmjKIqi+Pv7K61atdLa37lzZ8XKyirPz+hdsu3kdaXW5L+UUqM2q69ak/9Stp28XmB9ktgg/0npDCGEEEKIt0Ruay/vXL6LjdMD9X10dDS1a9dGo/nfyE/dunVJTk7m6tWr3L17l7S0NGrWrKnuzymO/rgjR44wfvx4jh8/zt27d9XRvMuXL+Pp6UmxYsVo3bo1S5YsoUaNGmzatInU1FQ6duz4XPdy/Phxdu3alWvNt7i4ONzc3IiNjWXcuHEcPHiQf/75R6sPXl5e6vHVqlXTaaN8+fJa9eUcHR05efIk8HwFy6Ojo9WSDTlq165NaGjoc93f287Xy5Fmng5Ext+RsivvMQkWhRBCCCHeArkVSgdIy8hiZ/RNQk8lvLI1mA8ePKBFixa0aNGClStXYmdnx+XLl2nRogVpaWnqcX369KFbt27MnDmT4OBgOnfujKmp6XNdIzk5GT8/P6ZOnaqzz9Ex+z78/PwoVaoUCxcupFixYmRlZeHl5aXVB8guIfCkpxU9f1UFy991OVO3xftLgkUhhBBCiDdcXoXSATT6hUDJYsKmMzTzdMDDw4N169ahKIo6uhgeHo6FhQUlSpTA1taWQoUKcfDgQZ3i6A0bNgTg7Nmz3L59mylTpuDk5ATA4cOHda7dqlUrzMzMmD9/PqGhoezZs+e576lKlSqsW7cOZ2dnDAx0fyW9ffs2MTExLFy4UC0qvm/fvudu/2mep2C5h4cHBw8e1Np24MCzs4QK8S6RBDdCCCGEEG+4vAqlAxhYFSU1IYYrly/x55FY+vfvz5UrVxg0aBBnz57l999/JygoiGHDhqGnp4e5uTm9e/dm5MiR7Ny5Uy2Orqf3v18LS5YsiaGhIXPnzuXChQts3LiRiRMn6lxbX1+fgIAAxowZg6urK7Vr137uexowYAB37tzB39+fQ4cOERcXxx9//EHPnj3JzMzExsaGwoUL89NPP3H+/Hl27tzJsGHDXvzDy8XzFCwfPHgwoaGhTJ8+ndjYWH744Yf3ZgqqEDkkWBRCCCGEeMM9rVC6ZY0PQaPH9UX9aVXDnfT0dLZu3UpkZCSVKlWib9++9O7dm7Fjx6rnfPfdd9SvXx8/Pz+aNm1KvXr1qFq1qrrfzs6OpUuX8ssvv+Dp6cmUKVN0ymTk6N27N2lpafTs2fOF7qlYsWKEh4eTmZlJ8+bNqVChAkOHDsXa2ho9PT309PQICQnhyJEjeHl58fnnn/Pdd9+90DWe5lkFy2vVqsXChQuZPXs2lSpV4s8//9T6DIV4H2gURcltRsMbQQpvCiGEEEK8vkLpr8LevXtp0qQJV65cwd7ePl+vLd4vEhvkPxlZFEIIIYR4w72JhdJTU1O5evUq48ePp2PHjhIoCvEOkmBRCCGEEOIN9yYWSl+9ejWlSpXi3r17TJs2Ld+uK4TIPzINVQghhBDiLZFbnUVHK2OC/DxfWdkMId5UEhvkPymdIYQQQgjxlpBC6UKI/CTBohBCCCHEW0QKpQsh8ousWRRCCCGEEOItMX78eLy9vZ/7+KVLl2Jtbf3a+vOyLl68iEajISoq6p24zrtKgkUhhBBCCFHgQkNDqVevHtbW1hQuXJg2bdoQFxcHwEcffcTAgQPVY4cOHYpGo+Hs2bMApKWlYWZmxl9//cXmzZuxtrYmMzMTgKioKDQaDaNHj1bP79OnD127ds3Hu3u6iIgI9PX1ad269Stvu3Pnzpw7d+6VtwtQrlw5jIyMuHHjxguf6+TkREJCAl5eXq+hZ+JVkWBRCCGEEEIUuAcPHjBs2DAOHz7Mjh070NPTo3379mRlZdGwYUPCwsLUY3fv3k2RIkXUbYcOHSI9PZ06depQv359kpKSOHbsWK7H5mzz8fHJv5t7hsWLFzNo0CD27NnD9evXX2nbJiYmFC1a9JW2CbBv3z4ePXrERx99xLJly174fH19fRwcHDAwkFVxbzIJFoUQQgghRL7LzFKIiLvN71HXiIi7Tbv2H/Lhhx/i4uKCt7c3S5Ys4eTJk5w5cwYfHx/OnDnDrVu3uHv3LmfOnGHIkCFqABgWFkb16tUxNTXFysoKb29vrX2ff/45x44dIzk5mWvXrnH+/HkaNmz4wn12dnZm1qxZ6vsbN27QrFkzzMzMXnqqZ3JyMmvWrKFfv360bt2apUuXau2fMmUK9vb2WFhY0Lt3b1JS/pcJ988//8TY2Jh79+5pnTNkyBAaN24M5D4NddOmTVSvXh1jY2OKFClC+/bt1X2pqamMGDGC4sWLY2ZmRs2aNbUC7RyLFy/mk08+oVu3bixZskRnv7OzM5MnT6ZXr15YWFhQsmRJfvrpJ3X/k9NDw8LC0Gg0/PHHH1SuXBkTExMaN27MzZs32bZtGx4eHpQoUQKAhw8fqu08bUQ6N3fv3qVLly7Y2dlhYmKCq6srwcHBeR7/vpNgUQghhBBC5KvQUwnUm7oT/4UHGBIShf/CA1Qd+TM+rdpRpkwZLC0tcXZ2BuDy5ct4eXlha2vL7t272bt3L5UrV6ZNmzbs3r0b0B0pzBmJVBSFvXv38uGHH+Lh4cG+ffvYvXs3xYoVw9XV9YX7fejQIT799FP1/cyZM0lISCAqKuqlp3quXbuWcuXK4e7uTteuXVmyZAk5le3Wrl3L+PHjmTx5MocPH8bR0ZF58+ap5zZp0gRra2vWrVunbsvMzGTNmjV06dIl1+tt2bKF9u3b06pVK44dO8aOHTuoUaOGun/gwIFEREQQEhLCiRMn6NixI76+vsTGxqrHJCUl8csvv9C1a1eaNWtGYmIie/fu1bnWjBkzqFatGseOHaN///7069ePmJiYp34e48eP54cffmD//v1cuXKFTp06MWvWLFatWsXatWsBWLBggXr800akc/PVV19x5swZtm3bRnR0NPPnz6dIkSJP7dP7TMZ9hRBCCCFEvgk9lUC/FUd5stD36aVjMbC0Y9x/ptCubgWysrLw8vIiLS0NjUZDgwYNCAsLw8jICB8fHypWrEhqaiqnTp1i//79jBgxQm3Lx8eHJUuWcPz4cQoVKkS5cuXw8fEhLCyMu3fvvtSoIoCdnZ3W+7i4OKpWrfpCgWdmlqJV+mTR4sXq+klfX18SExPV4HfWrFn07t2b3r17AzBp0iT++usvdXRRX1+fjz/+mFWrVqnH7Nixg3v37tGhQ4dcr//NN9/w8ccfM2HCBHVbpUqVgOzAPDg4mMuXL1OsWDEARowYQWhoKMHBwUyePBmAkJAQXF1dKV++PAAff/wxixcvpn79+lrXatWqFf379wdg1KhRzJw5k127duHu7p7n5zNp0iTq1q0LQO/evRkzZgxxcXGUKVOG+/fvA2gFpk/e55IlS7Czs+PMmTO5roe8fPkylStXplq1agDqQwmROxlZFEIIIYQQ+SIzS2HCpjM6gWLmo/tk3LmKdZ3ObLxVGDf3cty9e1frmJzRwrCwMHx8fNDT06NBgwZ89913pKamqgEGoK5bnDlzphoY5gSLOefnJikpiS5dumBmZoajoyMzZ87Ex8eHoUOHAtrTUJ2dnVm3bh0///wzGo2GgIAAFEVh/PjxlCxZEiMjI4oVK8bgwYPV9p8cUf1oyq8cOHAQe+/sKaMGBgZ07tyZxYsXAxAdHU3NmjW1+li7dm2t9126dCEsLExd67hy5Upat26d57TYqKgomjRpkuu+kydPkpmZiZubG+bm5upr9+7dWlM7lyxZopUgqGvXrvzyyy8kJSVptVexYkX1zxqNBgcHB27evJnrtXM7x97eHlNTU8qUKaN1zK1bt9Q/x8bG4u/vn+uIdG769etHSEgI3t7efPHFF+zfv/+p/XnfyciiEEIIIYTIF5Hxd0hITNHZrmdsjp6JJUnH/+CyuS3zVt1n+ZxvtY7x8fHh888/x9DQkHr16qnbRowYQfXq1TEzM1OPtbGxoWLFiqxcuZIffvgBgAYNGtCpUyfS09PzHFkcNmwY4eHhbNy4EXt7e8aNG8fRo0dzLVVx6NAhunfvjqWlJbNnz8bExIR169Yxc+ZMQkJCKF++PDdu3OD48eNA7iOqySf+RMnKxL+RN130NGgARVEwMjJS+/0s1atXp2zZsoSEhNCvXz82bNigs+7xcSYmJnnuS05ORl9fnyNHjqCvr6+1z9zcHIAzZ85w4MABIiMjGTVqlLo/MzOTkJAQAgMD1W2FChXSakOj0eQ5PTS3czQajU4bgDpNF8DPz49SpUqxcOFCihUrpjUinZuWLVty6dIltm7dyvbt22nSpAkDBgxg+vTpT+3X+0qCRSGEEEIIkS9uJukGigAajR5FPviCu38t4PriAXy/y4WlC+drjQBWqFABa2trddQLsoPFzMzMXEcKGzZsSFRUlLrP1tYWT09P/v77b61pkDnTQi/d+Iely5axcsVKdeQtODhYnY75JDs7O4yMjDAxMcHBwQHIHs1ycHCgadOmFCpUiJIlS1KjRo1cR1SVrEyST+/EplFvTEpXpoi5ET/3rom+noZ27dqxevVqPDw8OHjwIN27d1fPO3DggE5funTpwsqVKylRogR6enpPLcFRsWJFduzYQc+ePXX2Va5cmczMTG7evKkzpTTH4sWLadCgAT/++KPW9uDgYBYvXqwVLL5ut2/fJiYmhoULF6r93bdv3zPPs7Ozo0ePHvTo0YP69eszcuRICRbzINNQhRBCiBegKAqffvoptra2b32h54cPH9KhQwcsLS3RaDQ6GRVfpVdVGPzJbJQajYbffvvtX7cr8kdRC+M895k4e1Osz3xKjdjAqm17adiwIYqi0K5dOwD09PS4c+eOVrDk7e2Noih8++23Ou3NmjULRVEoV66cui0qKoqEhAT1/ePTQoct/pOM9HSmHEkn9FT2MVZWVk9dX/ekjh078ujRI8qUKUNgYCAbNmwgIyMj1xHVR+cjyUpJxrxScwrZOZNo4shDs2J4eXnRoUMHFi9ezJAhQ1iyZAnBwcGcO3eOoKAgTp8+rXPdLl26cPToUb755hs++ugjjIyM8uxjUFAQq1evJigoiOjoaE6ePMnUqVMBcHNzo0uXLnTv3p3169cTHx9PZGQk3377LVu2bCE9PZ3ly5fj7++Pl5eX1qtPnz4cPHgw1/69LjY2NhQuXJiffvqJ8+fPs3PnToYNG/bUc8aNG8fvv//O+fPnOX36NJs3b8bDwyOfevz2kWBRCCGEeAGhoaEsXbqUzZs3v7KC0q8qkHpRy5YtY+/evezfv5+EhASsrKxeSbtPBnSiYLyJDzZqlLbF0coYTR77NYCjlTE1Stu+9r7kTAt9Moi7lZRKvxVH1YDxRTg5ORETE8O8efMwMTGhf//+NGjQgOt3knSOTT7xJyalvNEz+t/02ZyR1w4dOnD48GE8PDz46quv+OKLL6hatSqXLl2iX79+Om25uLhQo0YNTpw4kWcW1Bw+Pj788ssvbNy4EW9vbxo3bkxkZKS6Pzg4mO7duzN8+HDc3d1p164dhw4domTJkmzcuJHbt29rldrI4eHhgYeHh7reMj/o6ekREhLCkSNH8PLy4vPPP+e777576jmGhoaMGTOGihUr0qBBA/T19QkJCcmnHr99ZBqqEEII8QLi4uJwdHSkTp06Bd2Vfy0uLg4PD49XEvCKN0/Og42wsDDKlCnzRpQH0NfTEOTnSb8VR7PX5z22LyeADPLzRF8vr3Dy1chtWqiBlQPoGZCSEIu5ZVEmbDpDjeImnDt3jgYNGjx32yYmJvj5+eHn58eAAQMoV64cSdcv6BxX9KMg3W3/P/Jao0YNdV1exYoV+fLLL7WOyxkJfNzBgwdz7U9AQAABAQFa2z78MLumZW4KFSrEhAkTtLKl5qhQoQKZmZm5ngfZ6xlzXLx4UWf/4w8snJ2dtdYe+vj4aL3Pq++gPdW0adOmWtcF7TWNT15n7NixjB07Ns97ENpkZFEIIYR4TgEBAQwaNIjLly+j0WhwdnZ+ZkHonMLT69evp1GjRpiamlKpUiUiIiKA7ELUPXv2JDExEY1Gg0ajYfz48QAsX76catWqYWFhgYODA5988olWJsGnFZdu3LgxAwcO1Or/rVu3MDQ0ZMeOHfj4+DBjxgz27NmDRqNR13XdvXuX7t27Y2Njg6mpKS1bttSqrwawbt06ypcvj5GREc7OzsyYMUPd5+Pjw6VLl/j888/V+3ncb7/9hqurK8bGxrRo0YIrV66o++Li4mjbti329vaYm5tTvXp1/vrrr5f8tsTjDzYcHBwwMHgzxgh8vRyZ37UKDlbaU1IdrIyZ37UKvl6Or70PuU0L1TMyxdyrMfd2LeHRpRNcOh9DB//u6Onp6fwc52Xp0qUsXryYU6dOceHCBVasWIGJiQmt6lR8Y0ZUhXgREiwKIYQQz2n27Nl8/fXXlChRgoSEBA4dOvTcBaH/85//MGLECKKionBzc8Pf35+MjAzq1KnDrFmzsLS0JCEhgYSEBLVeXHp6OhMnTuT48eP89ttvXLx4Uesp+9OKS/fp04dVq1aRmpqqHr9ixQqKFy9O48aNWb9+PYGBgdSuXZuEhATWr18PZAfEhw8fZuPGjURERKAoCq1atSI9PR2AI0eO0KlTJz7++GNOnjzJ+PHj+eqrr9Tsi+vXr6dEiRJ8/fXX6v3kePjwId988w0///wz4eHh3Lt3j48//ljdn5ycTKtWrdixYwfHjh3D19cXPz+/PFPgi7zl9mAjt+nB3t7e6sMJyF4DumjRItq3b4+pqSmurq5s3LhR3R8WFoZGo2HHjh1Uq1YNU1NT6tSpoxZav3jxInp6ehw+fFjrOrNmzaJUqVLq3wtfL0f2jWrM6sBazP7Ym9WBtdg3qnG+BIqQd6Idm8Z9MCxejpvrJnBzzVjKeFXBw8MDY+O811o+ztramoULF1K3bl0qVqzIX3/9xaZNmyhqV4QgP08AnYAxP0dUhXhhyhssMTFRAZTExMSC7ooQQoj3WEZmlrL//D/Kb8euKkP+M0kpVapUnsfeunVLAZSTJ08qiqIo8fHxCqAsWrRIPeb06dMKoERHRyuKoijBwcGKlZXVM/tx6NAhBVCSkpIURVEUPz8/pWfPnrke++jRI8XGxkZZs2aNuq1ixYrK+PHj1fdDhgxRGjZsqL4/d+6cAijh4eHqtn/++UcxMTFR1q5dqyiKonzyySdKs2bNtK41cuRIxdPTU31fqlQpZebMmVrHBAcHK4By4MABdVt0dLQCKAcPHszznsuXL6/MnTs3z7YBZcOGDXme/766d++e8vXXXyslSpRQEhISlJs3b+b6vVSqVEkJCgpS3wNKiRIllFWrVimxsbHK4MGDFXNzc+X27duKoijKrl27FECpWbOmEhYWppw+fVqpX7++UqdOHbWNZs2aKf3799e6TsWKFZVx48a9tvt9UfvP/6OUGrX5ma8dJy4pVlZWWn9//41tJ68rtSb/pXWNWpP/UradvP5K2n/XSWyQ/2RkUQghhHiKJ4to/xxxiYTEFDX5xfMWhH680LSjY/boybOKUx85cgQ/Pz9KliyJhYWFWhsup+2nFZc2NjamW7duLFmyBICjR49y6tSpXNf/5IiOjsbAwECrCHjhwoVxd3cnOjpaPebx4ucAdevWJTY29qlrmSC74Hj16tXV9+XKlcPa2lptOzk5mREjRuDh4YG1tTXm5uZER0fLyOILyMxSiIi7TVh8MrdT9dDX18fBwQE7O7vnbiMgIAB/f39cXFyYPHkyycnJWglQAL755hsaNmyIp6cno0ePZv/+/aSkZI/W9enTh9WrV6uj2kePHuXkyZO5lmooKHkl2kn7O44HZ3aTcTcBy+QrzB47GIC2bdu+kusW9IiqEC9KgkUhhBAiD3llS8zMUtRsiX5+fty5c4eFCxdy8OBBNcnEkwWhnyw0DTy1OPWDBw9o0aIFlpaWrFy5kkOHDrFhwwattnOKS3/++edcv36dJk2aqFNYIfuX9u3bt3P16lWCg4Np3LgxpUqV+hefyOs1YsQINmzYwOTJk9m7dy9RUVFUqFAhz+LaQtuzHmw8r8cfbJiZmWFpaanzYONpDz/atWuHvr6++vO6dOlSGjVqpD5IeRPkJNoB3Wmh9yPXcz14EPHLx/Dw4QP27t37SpMD6etpqF22MG29i1O7bGGZeireaBIsCiGEELnILVvik8auiSAmJoaxY8fSpEkTPDw8uHv37gtfy9DQUGdU7uzZs9y+fZspU6ZQv359ypUrl+tIZE5x6RUrVjBr1ix++ukndV+FChWoVq0aCxcuZNWqVfTq1eup/fDw8CAjI0Mrq2JO0WtPT0/1mPDwcK3zwsPDcXNzQ19fP8/7AcjIyNBayxYTE8O9e/fUGmfh4eEEBATQvn17KlSogIODQ64ZFYWu53mwoaenp5NtMmct6uMef7AB2Q83nnyw8bSHH4aGhnTv3p3g4GDS0tKe62evIOSWaMfQvixVhixg69ELJCXeZfv27VSoUKEAeylEwXoz0mIJIYQQb5jcsiU+TgFupRXCysaWn376CUdHRy5fvszo0aNf+FrOzs4kJyezY8cOKlWqhKmpKSVLlsTQ0JC5c+fSt29fTp06xcSJE7XOGzduHFWrVqV8+fKkpqbmWly6T58+DBw4EDMzs1xroz3O1dWVtm3bEhgYyIIFC7CwsGD06NEUL15cnYY3fPhwqlevzsSJE+ncuTMRERH88MMPzJs3T+t+9uzZw8cff4yRkZE6KlOoUCEGDRrEnDlzMDAwYODAgdSqVYsaNWqo11+/fj1+fn5oNBq++uqrp46+imzP82BjwqYzFLGz00o4dP/+feLj419Ln/r06YOXlxfz5s0jIyMjzzINBc3Xy5Fmng5Ext/hZlIKRS2yM5LKaJ8Q2WRkUQghhMhFXtkSH6fR6DFs8o8vVBA6N3Xq1KFv37507twZOzs7pk2bhp2dHUuXLuWXX37B09OTKVOmMH36dK3znqe4tL+/PwYGBvj7+z9XRsfg4GCqVq1KmzZtqF27NoqisHXrVnUkqUqVKqxdu5aQkBC8vLwYN24cX3/9tdZayK+//pqLFy9StmxZrbVypqamjBo1ik8++YS6detibm7OmjVr1P3ff/89NjY21KlTBz8/P1q0aEGVKlVe+PN83zzPg42ExBTKVa7N8uXL2bt3LydPnqRHjx7qaPCr5uHhQa1atRg1ahT+/v6YmJi8luu8CjItVIi8aZQn5yO8Qe7fv4+VlRWJiYlYWloWdHeEEEK8RyLibuO/8MAzj1sdWIvaZQvnQ49eTk7QdujQIQm83lG/R11jSEiUzvb7h37n/uHfKdEvO8nRt23K8vsP49m2bRtWVlZMnDiRmTNn0q5dO7V8hkajYcOGDbRr105tx9ramlmzZhEQEEBYWBiNGjXi7t27WFtbA9mF1itXrkx8fLzWusQlS5bQu3dvIiMjtRIbCfGyJDbIfzINVQghhMhFTrbEG4kpuU7v05BdRPxNLaKdnp7O7du3GTt2LLVq1ZJA8R1W1CL3EWPL6m2xrP6/LJ7OjnY6I889evTQep/bGMK9e/fUP/v4+Ogc4+3tnet5165do0KFChIoCvEWk2moQgghRC6eli3xbSiiHR4ejqOjI4cOHeK///1vQXdHvEZ5lYHIoQEc8/HBRnJyMqdOneKHH35g0KBB+XJNIcTrIcGiEEIIkYfcsiVC9oji/K5V3ujaaDkjQDExMZLN8R33pj3YGDhwIFWrVsXHx+e1Z0F1dnZm1qxZr/UaQrzPZM2iEEII8QyZWYpkSxRvvNBTCUzYdEYr2Y2jlTFBfp5v9IONf+PWrVuYmZlhampa0F0R+UBig/wnwaIQQgghxDtCHmyId5nEBvlPpqEKIYQQQrwj3rUyED4+PgwcOJCBAwdiZWVFkSJF+Oqrr9SEOk9OQ7137x6fffYZ9vb2GBsb4+XlxebNmwG4dOkSfn5+2NjYYGZmRvny5dm6detrv4ewsDA0Go1WoqDffvsNFxcX9PX1GTp06GvvgxAvS7KhCiGEEEKIN9ayZcvUEhyHDx/m008/pWTJkgQGBmodl5WVRcuWLUlKSmLFihWULVuWM2fOqLUkBwwYQFpaGnv27MHMzIwzZ85gbm7+yvvr4+ODt7e3GsTWqVOHhIQErKys1GM+++wzevbsyeDBg7GwsHjlfRDiVZFgUQghhBBCvLGcnJyYOXMmGo0Gd3d3Tp48ycyZM3WCxb/++ovIyEiio6Nxc3MDoEyZMur+y5cv06FDBzXh0+P7XidDQ0McHBzU98nJydy8eZMWLVpQrFixfOmDEC9LpqEKIYQQQog3RmaWQkTcbX6Pusb9R+nUrFkTjeZ/02lr165NbGwsmZmZWudFRUVRokQJNVB80uDBg5k0aRJ169YlKCiIEydOvPK+BwQEsHv3bmbPno1Go0Gj0bB06VJ1GmpYWJg6kti4cWM0Gg1hYWGMHz8eb29vrbZmzZqFs7PzK++jEC9CgkUhhBBCiOd048YNhgwZgouLC8bGxtjb21O3bl3mz5/Pw4cPC7p7b73QUwnUm7oT/4UHGBISxZmE+2w5mUDoqYRnnmtiYvLU/X369OHChQt069aNkydPUq1aNebOnfuqug7A7NmzqV27NoGBgSQkJJCQkICTk5O6v06dOsTExACwbt06EhISqFOnzivtgxCvkgSLQgghhBDP4cKFC1SuXJk///yTyZMnc+zYMSIiIvjiiy/YvHkzf/31V0F38a0WeiqBfiuOapX+ALh3MZp+K46qAeOBAwdwdXVV1yLmqFixIlevXuXcuXN5XsPJyYm+ffuyfv16hg8fzsKFC19J33NGQ8Pik0nJ1GBiYoKDgwMODg5a/TQ0NKRo0aIA2Nra4uDggKGh4SvpgxCvgwSLQgghhBDPoX///hgYGHD48GE6deqEh4cHZcqUoW3btmzZsgU/Pz8Avv/+eypUqICZmRlOTk7079+f5ORktZ2lS5dibW3N5s2bcXd3x9TUlI8++oiHDx+ybNkynJ2dsbGxYfDgwVpTLVNTUxkxYgTFixfHzMyMmjVrEhYWpu4vqGyfr0JmlsKETWfIrZ5bRtIt7uxYyOglf7By5Srmzp3LkCFDdI5r2LAhDRo0oEOHDmzfvp34+Hi2bdtGaGgoAEOHDuWPP/4gPj6eo0ePsmvXLjw8PP5133MbDV17+OpzjYYK8aaTYFEIIYR4h/j4+Dw1Fb9Go+G333577vZyS/v/Oly8eBGNRkNUVFSexwQEBKDRaOjbt6/OvgEDBqDRaAgICHjhYx+/x4iICPT19WndurXWObdv3+bPP/9kwIABmJmZ5dq/nHV1enp6zJkzh9OnT7Ns2TJ27tzJF198oXXsw4cPmTNnDiEhIYSGhhIWFkb79u3ZunUrW7duZfny5SxYsIBff/1VPWfgwIFEREQQEhLCiRMn6NixI76+vsTGxqr3lZqayp49ezh58iRTp059Ldk+X4fI+Ds6I4o5zMo3JisjjRM/DqDfgAEMGTKETz/9NNdj161bR/Xq1fH398fT05MvvvhCDbgzMzMZMGAAHh4e+Pr64ubmxrx58/5Vv/MaDX2QmqE1Gvosenp6PFn6PD09/V/1TYhXQbKhCiGEEO+RhIQEbGxsCrobL83JyYmQkBBmzpyprlFLSUlh1apVlCxZ8qWPzbF48WIGDRrE4sWLuX79upqt8vz58yiKgru7u9bxRYoUISUlO1AYMGAAU6dO1QrWnZ2dmTRpEn379tUKTNLT05k/fz5ly5YF4KOPPmL58uX8/fffmJub4+npSaNGjdi1axedO3fm8uXLBAcHc/nyZbVPI0aMIDQ0lODgYCZPnlxg2T5fhZtJuQeKABo9fWyb9qNwiwHM/tibtt7F1X0XL17UOtbW1pYlS5bk2s6rXp+Y12ioRr8QKFkATNh0hkk1nz02Y2dnx40bN1AURX3o8LQHJ0LkFxlZFEIIId4jDg4OGBkZFXQ3XlqVKlVwcnJi/fr16rb169dTsmRJKleu/NLHQnZJgzVr1tCvXz9at27N0qVL1bVoe87dBCArSzs0iIyMJCoqivLly5Oamgpkl3Bo0qQJxYsXx8LCgm7dunH79m2tBDimpqZqoAhgb2+Ps7Oz1kigvb09N29mX/fkyZNkZmbi5uaGubm5+tq9ezdxcXFA/mT7fF2KWhi/0uPyQ16joQZWRUlNiCE98W+uJvzNmev3ntmWj48Pt27dYtq0acTFxfHjjz+ybdu219BrIV6MBItCCCHEOyYrK4svvvhCTaAxfvx4dd/j01Bzpn6GhIRQp04djI2N8fLyYvfu3TptHjlyhGrVqmFqaqqV0TFHziiZoaEh7u7uLF++XGu/RqNh/vz5tGzZEhMTE8qUKaM1xTLHhQsXaNSoEaamplSqVImIiAit/bdv3+bBgwd0794dJycnBg8ezMKFC+nZsycAcXFxVKtWjZUrVxIaGkqhQoVYsGCBev6SJUuoWbMmf/31FytWrKBRo0bq6NRvv/1GuXLlMDY25sKFC4wd+xWGxqY0rFmFqb/uBTR8vnCr1tTCMmXK4OLioo5cXrx4kTZt2lCxYkXWrVvHkSNH+PHHHwFIS0tTzytUqJDO55Pbtqys7BGq5ORk9PX1OXLkCFFRUeorOjqa2bNnA/mT7fN1qVHaFkcrYzR57NcAjlbG1Chtm5/deqq8RkMta3wIGj2uL+rP1bldiL1w8ZlteXh4MG/ePH788UcqVapEZGQkI0aMeMU9FuLFSbAohHirvOh6q+f1POulhMhNQf7s5FabDWDZsmWYmZlx8OBBXF1dmTBhAtu3b1f3L168WOv4kSNHMnz4cI4dO0bt2rXx8/Pj9u3bWsf85z//YcaMGRw+fBgDAwN69eql7tuwYQNDhgxh+PDhnDp1is8++4yePXuya9curTa++uorOnTowPHjx+nSpQsff/wx0dHROtcZMWIEUVFRuLq68WHHzqw/fImIuNvcv3+fiIgIevXqhb6+PrNnz2bnzp3s3buXrl27AtmB8sSJE/nggw+oUaMG+vr6hIeHc+nSJS5dusS+ffv4+eefcXBwwM/Pjz59+jB69GgAli9fTteuXRkwYAAZ+sZgaIKN70CsfQIwMC+MsbM318N/47Ml+/Nci3bkyBGysrKYMWMGtWrVws3NjevXrz/jm3y2ypUrk5mZyc2bN3FxcdF6PV7w/XVl+3zd9PU0BPl5AmgFjA6fTKFw0+z1iUF+nujr5RVO5r+8RjkL2RbHsdsMSg5fR6lRm/Hv0h1FUbC2tgbA2toaRVHw8fHROq9v375cvnyZ5ORkli1bxpdffqkzzVaI/CbBohBCkP0LVkJCAl5eXgXdFVGA8kpu8m85OzurBbpNTU2pUKECixYtemXt5xQwj4i7jUJ2CYGgoCBcXV0pW7Ys1tbW7NixQz3+k08+0Trf29ubDh064OHhwfz587GystIJKL/55hsaNmyIp6cno0ePZv/+/epavenTpxMQEED//v1xc3Nj2LBhfPjhh0yfPl2rjY4dO9KnTx/c3NyYOHFiriNfI0aMoHXr1lxIsyC2REtuXLvCoAXb8F94gK17Iils78jYsWPx8/Pj5MmT1KhRg8zMTHX6pqurKy1btsTCwgJbW1vmz59PVlYWCxYsIDg4GGdnZ8qWLYuXlxdWVlZ06dJFTXRz5MgR/P39uXz5MrfMSmNe3oeUC0cwdamBsZMXts37oyiZJCwbyqBvfuTU6TPExMSwYsUKzp49i76+Pi4uLqSnpzN37lwuXLjA8uXL+e9///uvv2M3Nze6dOlC9+7dWb9+PfHx8URGRvLtt9+yZcsW4PVl+8wvvl6OzO9aBQcr7SDMwcqY+V2r4OvlWEA9y93bOBoqxIuSBDdCCAHo6+trPZ0X76e8kpu8Cl9//TWBgYE8fPiQX375hcDAQIoXL07Lli1fus3zN5OIvZmM/8ID6rY7l+/SsIb2ejxjY2N17RvoFi93dnZW/2xgYEC1atV0RvwqVqyo/tnRMfuX9ps3b1KyZEmio6N1slPWrVtXnR6Zo3bt2jrvnxyRrVixopphMoPsrKOZDxMpVNiJ9If3uXknGRNTM1Cy2LBhg3pefHw8kD1N1c/Pj127dpGSkqKOqC5btgxDQ0McHR0pV64cd+7c0elXZmYmxYoVIysrC0U5mb1To4+5d0uMS3hSyMYRx4A53I9Yy8Vti6i8bhrGRkZ4enoyYsQI+vfvj6mpKd9//z1Tp05lzJgxNGjQgG+//Zbu3bvzbwUHBzNp0iSGDx/OtWvXKFKkCLVq1aJNmzZq/wcMGMDVq1extLTE19eXmTNn/uvr5idfL0eaeToQGX+Hm0kpFLXIDrbepBHFHDmjof1WHEUDWolucnr7po2GCvGiZGRRCJHvQkNDqVevHtbW1hQuXJg2bdqoCRrS0tIYOHAgjo6OGBsbU6pUKb799ts82woKCsLR0VFN5DBv3jxcXV0xNjbG3t6ejz76SD02KyuLadOm4eLigpGRESVLluSbb74Bcp9KeOrUKVq2bIm5uTn29vZ069aNf/75R93v4+PD4MGD81wbBnDv3j0+++wz7O3t1fVgmzdvVvfv27eP+vXrY2Jioq6/evDgwUt/tuLl5ZbcJMfdu3fp0qULdnZ2mJiY4OrqSnBwcK7tZGZm0qtXL8qVK8fly5fV7RYWFjg4OFCmTBlGjRqFra2t1tTQe/fu0adPH+zs7LC0tKRx48YcP35cq+0pU6Zgb2+PhYUFLT70Z9PRy6RnZqn7laxMHt66xuZfV2JpbcsXX3yhpuPPWfsG/5uG+vHHHwPwww8/qCOfeXl8PV3OcY+3+aro6RuoGSbV3vx/ZkklKxN9S3vK9Z/PkaPHsLOzo2jRopw9e5ayZcuSkZHB9u3bsbS0pH79+jRs2FANKNPT00lPT1cLoj8up7TCpEmTiIqKYtba7RTtNBHLOp3RGBjw96rR3D+yCQADc1tsm/WleN/F/BoZT1JSEgcPHmTEiBGYmpoC8Pnnn3P9+nUePnxIaGgo3bp105qGGBAQoFOKZPz48TqB89KlS7Wm3RcqVIgJEyYQHx9PWloa169fZ/369Wr207lz53L+/HlSUlK4efMmP//8M4ULF365L6IA6etpqF22MG29i1O7bOE3Oth620ZDhXhREiwKIfLdgwcPGDZsGIcPH2bHjh3o6enRvn17srKymDNnDhs3bmTt2rXExMSwcuVKrVGPHIqiMGjQIH7++Wf27t1LxYoVOXz4MIMHD+brr78mJiaG0NBQGjRooJ4zZswYpkyZwldffcWZM2dYtWoV9vb2ufbx3r17NG7cmMqVK3P48GFCQ0P5+++/6dSpk9Zxj68NmzZtGl9//bUaAGRlZdGyZUvCw8NZsWIFZ86cYcqUKejr6wPZiTh8fX3p0KEDJ06cYM2aNezbt4+BAwe+ok86f7wr6z3Xrl1LuXLlcHd3p2vXrixZskQNtHJ+ZrZt20Z0dDTz58+nSJEiOm2kpqbSsWNHoqKi2Lt3b67lGbKysli3bh13797F0NBQ3d6xY0du3rzJtm3bOHLkCFWqVKFJkybqCNjatWsZP348kydP5mDkIU7f1SPp2Battu8f2kDmg7uYlKpMmZ7TuX37ttbo25Nypkc2a9aMhIQEEhISyMjI4MiRIy80fdHDw4Pw8HCtbeHh4Xh6emptO3DggM77J69z6lpinvX29IwtUNIectegMImGdsTGxnLu3Dnc3d0xNDQkOTmZ1NRUraA6Z0R1/fr1nDlzBk9PTyIjI7XaXblyJQBdu3bFy8uL6pW9MSldGZv63bCo0gY9UyuSj/+h0583KTOnKDi+Xo7sG9WY1YG1mP2xN6sDa7FvVGMJFMW7QXmDJSYmKoCSmJhY0F0RQvxLGZlZyv7z/yi/Hbuq7D//j5KRmaXuu3XrlgIoJ0+eVAYNGqQ0btxYycrKyrUdQPnll1+UTz75RPHw8FCuXr2q7lu3bp1iaWmp3L9/X+e8+/fvK0ZGRsrChQtzbTc+Pl4BlGPHjimKoigTJ05UmjdvrnXMlStXFECJiYlRFEVRGjZsqNSrV0/rmOrVqyujRo1SFEVR/vjjD0VPT089/km9e/dWPv30U61te/fuVfT09JRHjx7les7rtn//fkVPT09p1arVc5/z5Gf3pM6dOystWrTQ2rZt2zYFUIKCgrS2BwUFKU5OTi/a7Zfy5M9k7Tp1lFmzZimKoijp6elKkSJFlF27dimKoih+fn5Kz549c20n5/737t2rNGnSRKlXr55y7949rWNKlSqlGBoaKmZmZoqBgYECKLa2tkpsbKyiKNnfu6WlpZKSkqJ1XtmyZZUFCxYoiqIotWvXVvr3768oiqLsP/+PUmrUZsXQ0V0pVLS0UmrUZqXUqM2Kvrmtom/loFhU/UApNWqzsufsDaVEiRKKg4OD0qNHD0VRsv8OtWnTRqvvNjY2yvr165Xo6Gjl008/VczNzZVbt24piqIou3btUgDl7t27ar+OHTumAEp8fLyiKIqyYcMGpVChQsq8efOUc+fOKTNmzFD09fXVzy/nukWKFFEWL16sxMTEKOPGjVP09PSU06dPa/Xl+5A/1PtxGhKiAIq9/2Sl1KjNiolLDQWNnmJRpbXyfcgfyrlz55TffvtNGTBggKIoiuLr66vo6ekpI0eOVD788EOlRo0aipubm9bP56VLlxRDQ0PFxcVFadeunbJy5UrFyMhI6x4HDx6slAv4Vin+2SKlcKvPFUAxdq6s9st51Gal1uS/tP4dE0K8fhIb5D9ZsyiEeO1CTyUwYdMZdbQg/c41Ug+GUOh2HA/u31Wnsl2+fJmAgACaNWuGu7s7vr6+tGnThubNm2u19/nnn2NkZMSBAwe0RneaNWtGqVKlKFOmDL6+vvj6+tK+fXtMTU2Jjo4mNTWVJk2aPFefjx8/zq5du7RqnuWIi4vDzc0N0F7HBdlruXJGMqKioihRooR6bG7XOHHihDqqAdkjpllZWcTHxxdIYorXsWavUaNGjBgxgoyMDAwMsv/b2bVrF05OToSFhWkdu2vXLho1avSvr/ksOj+Tt6+ScOAggydnj7QZGBjQuXNnFi9ejI+PD/369aNDhw4cPXqU5s2b065dO+rUqaPVpr+/PyVKlGDnzp06awIhO+NoQEAACQkJjBw5kv79++Pi4gJk/ywkJyfrTBl89OiROkU7Ojqavn37Av9L2W9UvBwpl7OnYGelPiAz+Q6FipZWz7/zKINq1arpjOg9qU2bNkyZMoWoqChcXFzYuHFjriOneWnXrh2zZ89m+vTpDBkyhNKlSxMcHKyT7XHChAmEhITQv39/HB0dWb16tc7oo62pIZCe63WKdhhHasI57u1ZztjeH/IVULZsWTp37gzAtm3bWL16NV9++SUJCQlUqVKF6dOn88EHH6htlCxZknXr1vH555+zbds2bt++zfz587Wyu2ZlZZG4YwEJ16+hZ2SKWflG2DQJBGQtmhDi/SLTUIUQr1VOoorHp5XdXDeRB/fvodT7lOkrNnPw4EEge71ilSpViI+PZ+LEiTx69IhOnTpprTuE7KDw2rVr/PGH9rQwCwsLjh49yurVq3F0dGTcuHFUqlSJe/fu5frL+9MkJyfj5+enVc8sKiqK2NhYramtT6uL9qxrJicn89lnn2m1f/z4cWJjY7WKdeeX17Vmr1GjRiQnJ3P48GH1mLCwMEaPHs3BgwfVjJopKSkcPHhQDRYvX75M27ZtMTc3x9LSkk6dOvH333+rbeSUjViyZAklS5bE3Nyc/v37k5mZybRp03BwcKBo0aLqutQcv+4/S8cuAURO/JDLMztyY/WXJB5Yi5KViX8jbzR6emg0GubNm8fKlSuxsrJi2bJlnD59Wl2L1qRJE50aaK1ateLEiRM6dQFzFClSBBcXF+rXr88vv/zC4MGDOXPmjPrZOzo66vy8xcTEMHLkSJ22njb90bbpZ9j+f6mBnONq1qypfp8NGzbU+fmyt7fn4MGDpKamcvr0aa2A3cfHR2u9HWRnT1UURWuKeL9+/YiLiyMtLY2YmBi6deum07dixYrx559/kpKSQnx8vNa0bmdnZxRFoWvrhmqGST1jc0qN2oxxyf89lDF2dMP70++4fz+J5ORkjh8/zpdffqnu9/f3Jz4+npSUFPbv34+fnx+KomiVGGnTpg2xsbGkpKSwZ88eevbsqXWPc+fO5frleLZFXaLG2HUUaTMcfRNLQNaiCSHeL68lWLx48SK9e/emdOnSmJiYULZsWYKCgrSK0Qoh3n2ZWYqaqELd9ug+GXeuYlWnMybO3gSfTuef23e0zrO0tKRz584sXLiQNWvWsG7dOq3MhR988AGrVq2iT58+hISEaJ1rYGBA06ZNmTZtGidOnODixYvs3LkTV1dXTExMtMoHPE2VKlU4ffo0zs7OOjXNzMzMnquNihUrcvXqVc6dO5fnNc6cOaPTvouLi9Zatvzyutbsubm5UaxYMbXmXlJSEkePHqVjx444OzurwdX+/ftJTU2lUaNGZGVl0bZtW+7cucPu3bvZvn07Fy5cUEeQcsTFxbFt2zZCQ0NZvXo1ixcvpnXr1ly9epXdu3czdepUxo4dqz6QyMxS6NOjC5kP71G04wQce8zCsGgZHpzahVW9rhTrOYei1dtgampKkyZNKF68OH369GH37t0sWrSIHj16sGLFCmbNmsVPP/2k1Zd+/foxZcoUPvjgg1yL2j/OycmJzp07M2bMGCD7Z+HGjRsYGBjo/CzkfM4eHh7qfeSk7E+7flZtU8/IDH1zW1Kvx6gp+6s4WXLkyJFnfvc5CV7eBHnV23v8fX6N6slaNCHE++61TEM9e/asWtPIxcWFU6dOERgYyIMHD3RqLgkh3l2R8Xd0ElXoGZujZ2JJ8vE/0De35cKlW/QL+VXd//333+Po6EjlypXR09Pjl19+wcHBQWtUA6B9+/YsX76cbt26YWBgwEcffcTmzZu5cOECDRo0wMbGhq1bt5KVlYW7uzvGxsaMGjWKL774AkNDQ+rWrcutW7c4ffo0vXv31un7gAEDWLhwIf7+/mq20/PnzxMSEsKiRYvUJDVP07BhQxo0aECHDh34/vvvcXFx4ezZs2g0Gnx9fRk1ahS1atVi4MCB9OnTBzMzM86cOcP27dv54YcfXu5DfwGZWYpWevpFixerhc19fX1JTExk9+7d+Pj4cPnyZSpXrky1atUAck06lJycTOvWrUlNTWXXrl1YWVmp+xo1akRYWBhjxoxh7969uLm5YWdnR4MGDQgLC1P3ly5dmlKlSrF9+3ZOnjxJfHw8Tk5OAPz888+UL1+eQ4cOUb16dSB7uuCSJUuwsLDA09OTRo0aERMTw9atW9HT08Pd3Z2pU6eya9cuatasycJftnL/8lmcBq1EY5A9KmzsVJ6kw7+hZ2RCITtnHhQyJ0vJTogyadIkdu7cSenSpfn111/p2bMnqampbN68OddpwoMGDSIzM5M2bdqwbds26tWrl+fnP2TIELy8vDh8+DBNmzaldu3atGvXjmnTpqmF3Lds2UL79u2pVq0aQ4YMISAggGrVqlG3bl3KXN7CwX8uY2D9v5IvFlU/4P6BXylkU4xeAc0ZNHCATtbN3Bw9epRr165hZGT0QtNPX5ecDJOPTxWG7FG9ID/PfA3WcjJzCiHE++i1BIs5a4VylClThpiYGObPny/BohDvkZx1VY/TaPQo8sEX3P1rAdcXD6CQbXEGT/6OsYEdgeyppNOmTSM2NhZ9fX2qV6+u/uL/pI8++oisrCy6deuGnp4eRYsWZf369YwfP56UlBRcXV1ZvXo15cuXB7JHxwwMDBg3bhzXr1/H0dFRXQP2pGLFihEeHs6oUaNo3rw5qamplCpVCl9f31z7kpd169YxYsQI/P39efDgAS4uLkyZMgXIHnncvXs3//nPf6hfvz6Komitv3qd8nvNno+PD0OHDiU9PZ2wsDB1LVvDhg1ZsGABgBo0Qvb6PCcnJzVQBPD09MTa2pro6Gg1WHR2dsbCwkI9xt7eHn19fa3vyN7eXl1HeiwqCiU9hStz/NX9Skb2rJfM5P+NXts5lsDCwoIOHTowbdo0WrRoweHDh6lYsSImJibUr19fZ1Q7x9ChQ8nKyqJVq1aEhobqfE6P30/z5s0ZN24cW7duZevWrfznP/+hZ8+e3Lp1CwcHBxo0aKBm7O3cuTNxcXF88cUXpKSk0KFDBzp06cnW0P9Nx7as0R7j9Pvc3z6HL3b9SK9evWjfvj2JiYm59iFnZPezzz6jbNmypKamqqPJr9qLtvs21dsTQoh3lUZ5Xf8rPGHs2LGEhoZqrVl5UmpqKqmpqer7+/fv4+TkRGJiIpaWlvnRTSHEKxQRd1urWHheVgfWeq4n9xqNhg0bNtCuXbtX0Lv3V8460sf/8b+7awn3I9eDRg89PU12gWlFwcjIiISEBKysrLh16xZbt25l+/btrFu3jgEDBjB9+nQuXrxI6dKl+fTTT1mxYgWbNm2icePGWteMi4vDxcWF8PBwhgwZwsiRI+nUqRPXrl2jbNmyavC+ZMkSunTpwpw5c5g5c6ZaaD2HjY0Ns2fPpnv37owfP57ffvtNq2RHTv26x2vT+fj44O3tzaxZs+j/RRA/zf8R+090a3fqGZmhb2rFvX0rKXrnJOfOnFT3zZo1i1mzZnHx4sV/8cm/Hk+OEEtAJYR4V92/fx8rKyuJDfJRviS4OX/+PHPnzuWzzz576nHffvstVlZW6uvxJ8pCiLdPzrqqvH5tzVlXVaO07XO1l5CQQMuWLV9Z/95Hua0jVbIyST69E5tGvSnWcw5eA/7LkaPHOH78OMWKFWP16tUA2NnZvfSavbJly+Lk5MTGjRuJioqiYcOGABQvXpzixYszY8YM0tLS1JFFDw8Prly5wpUrV9Q2zpw5w71793SyZ76ID5rUJfPhXTR6+hSyKab10je1QgOYGxlgavjsacZvirepgLkQQoi3ywsFi6NHj0aj0Tz1dfbsWa1zrl27hq+vLx07diQwMPCp7Y8ZM4bExET19fgvCUKIt8+rTlTh4OCAkZHRq+vgeyi3daSPzkeSlZKMeaXmFLJzJtHEkYdmxfDy8qJDhw4sXryYcePG8fvvv3P+/HlOnz791DV7kyZNok2bNuzbt09rX6NGjZg3bx4uLi7q1ErInoo6d+5cNREOQNOmTalQoQJdunTh6NGjREZG0r17dxo2bKium3wZLZo3o7x3NW6un0RK/FEyEv8m5Wo0d/f8TFpCLAA+7nYv3b4QQgjxLnmhYHH48OFER0c/9VWmTBn1+OvXr9OoUSPq1Kmj8wQ6N0ZGRlhaWmq9hBBvt5xEFQ5W/0v1/+DsPv5eOpDrsz6iS0MvmjZtyoMHDwBYsmQJ5cuXx8jICEdHRwYOHKiep9FotKYXXrlyhU6dOmFtbY2trS1t27bVmiYYEBBAu3btmD59Oo6OjhQuXJgBAwaQnv6/Gm6pqamMGjUKJycnjIyMcHFxYfHixer+U6dO0bJlS8zNzbG3t6dbt278888/r+GTyh+5rSNNPvEnJqW80TMy0zmuQ4cOHD58GAMDA8aMGUPFihVp0KAB+vr6T12zN2HCBFq1asX+/fvV7Y0aNSIpKUmn9l7Dhg1JSkrSKteg0Wj4/fffsbGxoUGDBjRt2pQyZcqwZs2af3P7aDQaIsL+omXTRtwJnc21nz7jn43TyEy8iYODPfO7VsGlqMWzGxJCCCHeA69tzeK1a9do1KgRVatWZcWKFc+VOfBJMi9ZiHdHzrqqsxcuEdiqJlOnTqXDhx+SlJTE3r176d69O8uXL2fYsGFMmTKFli1bkpiYSHh4OEOHDgW01yymp6dTqVIlateuzdChQzEwMGDSpEkcOXKEEydOYGhoSEBAABs2bOCTTz5hyJAhnD9/ns6dOzNr1ix1pkPnzp2JiIhg9uzZVKpUifj4eP755x86d+7MvXv3cHNzo0+fPnTv3p1Hjx4xatQoMjIy2LlzZwF+mi/vVa8jfZvJWj8h3my5rUsW7zeJDfLfawkWr127ho+PD6VKlWLZsmVagaKDg8NTztQmPxBCvHuOHj1K1apVuXjxIqVKldLaV7x4cXr27MmkSZNyPffxYHHFihVMmjSJ6OhoNJrsX/DT0tKwtrbmt99+o3nz5gQEBBAWFkZcXJz671CnTp3Q09MjJCSEc+fO4e7uzvbt22natKnO9SZNmsTevXv544//ZZu8evUqTk5OxMTE4Obm9qo+lnyTmaVQb+pObiSmkNs//hqyyxPsG9VYAichRIFKTk4mNTWVwoXf7QdX4vlJbJD/XkvpjO3bt3P+/HnOnz9PiRIltPblU/JVIcQb5PERnMLmJWjcpAkVKlSgRYsWNG/enI8++oj09HSuX79OkyZNnqvN48ePc/78ea2yCQApKSnExcWp78uXL6/1wMrR0ZGTJ7OzXEZFRaGvr68mW8ntGrt27cLc3FxnX1xc3DODxZwsoceOHcPb2/u57ut1y1lH2m/F0eyMp4/ty++C50II8TTm5ua5/vsrhMg/ryUbakBAAIqi5PoSQrxfQk8lUG/qTvwXHmBISBRdlxziQePRBP24HE9PT+bOnUuxYsXUhCeNGzdWE2Y9Xq/1ScnJyVStWpWoqCit17lz5/jkk0/U4woVKqR1nkajISsrC0CnFmBu1/Dz89O5RmxsLA0aNHjmvTs5OZGQkICXl9czj81Pua0jhewRxfldq+RrwXMhxNvBx8eHQYMGMXToUGxsbLC3t2fhwoU8ePCAnj17YmFhgYuLC9u2bVPP2b17NzVq1FDXoI8ePZqMjAwAfvrpJ4oVK6b+e5yjbdu29OrVC8iehvrkg7ZFixbh4eGBsbEx5cqVY968eeq+tLQ0Bg4ciKOjI8bGxpQqVYpvv9UtkyOEeH6vZWRRCCEg93p+AH/fT+WH0wbM79qXcePGYWlpibu7Ow8fPuTDDz9k9OjRAE/NfFqlShXWrFlD0aJFX3oqSoUKFcjKymL37t25TkOtUqUK69atw9nZGQODF//nUl9f/4Wm3ucnKXguhHhRy5Yt44svviAyMpI1a9bQr18/NmzYQPv27fnyyy+ZOXMm3bp14/Lly9y9e5dWrVoREBDAzz//zNmzZwkMDMTY2Jjx48fTsWNHBg0axK5du9QZJXfu3CE0NJStW7fmev2VK1cybtw4fvjhBypXrsyxY8cIDAzEzMyMHj16MGfOHDZu3MjatWspWbKkTvkdIcSLy5c6i0KI909u9fwAUq/HcC9iLakJsXy5fBe//rqOlJQUbGxsmDhxIgsWLGDt2rUkJSURHx/P3LlzuXfvnlqntWPHjnh5eWFjY0ORIkVo27YtEydOxNXVlUKFCmFpaclXX32ldU1nZ2cmT55Mr169mDdvHgcOHOCnn37C2dmZHj160KtXL2bPnk3t2rUxNDTE3NycTz/9lICAAO7cuYO/vz9t2rShWbNm9OzZExMTE6ysrPj666/JyMhg5MiR2NraUqJECYKDg9XrXrx4EY1Go5Wc4fTp07Rp0wZLS0ssLCyoX7++Om02LCyMGjVqYGZmhrW1NXXr1uXSpUuv5fsBqc8nhHgxlSpVYuzYsbi6ujJmzBiMjY0pUqQIgYGBuLq6Mm7cOG7fvs2JEyeYN28eTk5O/PDDD5QrV4527doxYcIEZsyYQVZWFjY2NrRs2ZJVq1ap7f/6668UKVJEKzPy44KCgpgxYwYffvghpUuX5sMPP+Tzzz9nwYIFAFy+fBlXV1fq1atHqVKlqFevHv7+/vny2QjxrpKRRSHEa5FbPT8APUNTUq6c4v7h30lIfcgXJUtSrVo17O3t6dGjBykpKcycOZMRI0ZQpEgROnToQMuWLUlKSgJg7ty5lChRAn19ffbs2UOfPn0YN24cBgYGODo6UqZMGaZPn07ZsmW1rjtjxgwmTpxIVlYWe/bsoV+/fjRs2JD58+czcuRIhg0bBkCJEiXo3Lkzv/76K2lpaYSHhzNq1Ci2b99OWloaNjY2dO7cmfr169OnTx/2799PgwYNOHjwIGvWrOGzzz6jWbNmOuu1ITv5V4MGDfDx8WHnzp1YWloSHh5ORkYGGRkZtGvXjsDAQFavXk1aWhqRkZFq8h4hhMhvj683v/8onVpVK6n79PX1KVy4MBUqVFC35SwnuHnzJtHR0dSuXVvr37C6deuSnJzM1atXKVmyJF26dCEwMJB58+ZhZGTEypUr+fjjj9HT0x3LePDgAXFxcfTu3VurbndGRgZWVlZA9jKoZs2a4e7ujq+vL23atKF58+av/HMR4n0iwaIQ4rXIrZ4fQKEiTth3+lp93712KY78/A2bf/9FK5GBoaEhAwcOpFq1asybN4/o6OhcE8pYWVnRrFkz/vzzT3XbF198wXfffcfp06eB7JHFVq1a0b9/f/r374+iKDg4OLBr1y769u1LxYoVsbKy4sqVK5iZZdca9PHxwc/Pj6lTp7J+/Xo1s+qFCxfUX2S+++47Hj58yJdffgnAmDFjmDJlCvv27ePjjz/W6euPP/6IlZUVISEh6lrKnHu6c+cOiYmJtGnTRg10cyt6L57Nx8cHb29vZs2a9dqu4ezszNChQ9WyLkK8a0JPJTBh0xn1od+NhPskHP+bD04lqOuaNRqN1rrwnMDwyXWIefHz80NRFLZs2UL16tXZu3cvM2fOzPXY5ORkABYuXEjNmjW19uUkMatSpQrx8fFs27aNv/76i06dOtG0aVN+/fXXF7hzIcTjJFgUQrwWRS2Mn30Q8HPEJf45dwvz0pX4fvZcGrgVVffZ2tqyaNEiSpQokWfm0ejoaNq2bau1rW7dusyaNYvMzEz1l4iKFSuq+zUaDQ4ODty8eVNto1KlSmqgmNNGVlYWMTEx6tPy8uXLaz3xtre310pek/OkPafdJ0VFRVG/fn2dpDs59xoQEECLFi1o1qwZTZs2pVOnTjg6SrIZIUT+ymu9+YPUDPqtOPpcibA8PDxYt24diqKoQWR4eDgWFhbqzAtjY2M+/PBDVq5cyfnz53F3d6dKlSq5tmdvb0+xYsW4cOECXbp0yfO6lpaWdO7cmc6dO/PRRx/h6+vLnTt3sLW1ff4PQAihkjWLQojXokZpWxytjHneSZRpGkMm7rnL+RQzXFxccHFxwdbW9pkZS5/X07Ki/ps2XqTdZ91LcHAwERER1KlThzVr1uDm5saBAwdeqI9CCPFv5LXe/HETNp0hM+vpGe779+/PlStXGDRoEGfPnuX3338nKCiIYcOGaT1069KlC1u2bGHJkiVPDQIBJkyYwLfffsucOXM4d+4cJ0+eJDg4mO+//x6A77//ntWrV3P27FnOnTvHL7/8goODA9bW1s97+0KIJ0iwKIR4LXLq+QHPHTCC7i8hFStW5OrVq5w7dy7X4z08PAgPD9faFh4ejpubm1Z9xafx8PDg+PHjPHjwQKsNPT093N3dX6D3T1exYkX27t1Lenp6nsdUrlyZMWPGsH//fry8vLSSP4jnl5GRwcCBA7GysqJIkSJ89dVXavmmu3fv0r17d2xsbDA1NaVly5bExsZqnb9u3TrKly+PkZERzs7OzJgx46nXW7RoEdbW1uzYsQPITtRRoUIFTExMKFy4ME2bNtX6+RLiTZXXevMcCpCQmEJk/J2ntlO8eHG2bt1KZGQklSpVom/fvvTu3ZuxY8dqHde4cWNsbW2JiYnRKnuUmz59+rBo0SKCg4OpUKECDRs2ZOnSpZQuXRoACwsLpk2bRrVq1ahevToXL15k69atua6BFEI8H5mGKoR4bXLq+T2+7iUvSkY6Gcl3uZoM2yKjqeZsi4GBAQ0bNqRBgwZ06NCB77//HhcXF86ePavWYRw+fDjVq1dn4sSJdO7cmYiICH744Qet2lvP0qVLF4KCgujRowfjx4/n1q1bDBo0iG7duqlTUF+FgQMHMnfuXD7++GPGjBmDlZUVBw4coEaNGhgaGvLTTz/xwQcfUKxYMWJiYoiNjaV79+6v7Prvk2XLltG7d28iIyM5fPgwn376KSVLliQwMJCAgABiY2PZuHEjlpaWjBo1ilatWnHmzBkKFSrEkSNH6NSpE+PHj6dz587s37+f/v37U7hwYQICAnSuNW3aNKZNm8aff/5JjRo1SEhIwN/fn2nTptG+fXuSkpLYu3ev1BoWb4W81ps7fDJF57iLFy/qHPf4z3nDhg2JjIx86vX09PS4fv16rvvGjx/P+PHjtbZ98skneQaVgYGBWslvhBD/ngSLQojX6vF6fttOJfBzRO6lIFLij3D1x24A+P2Yvc3d3Z2zZ8+ybt06RowYgb+/Pw8ePMDFxYUpU7J/calSpQpr165l3LhxTJw4EUdHR77++utcf6nPi6mpKX/88QdDhgyhevXqmJqaqsHpq1S4cGF27tzJyJEjadiwIfr6+nh7e1O3bl1MTU05e/Ysy5Yt4/bt2zg6OjJgwAC1ZIjI2+MZG4taGKMATk5OzJw5E41Gg7u7OydPnmTmzJn4+PiwceNGwsPDqVOnDpBdu83JyYnffvuNjh078v3339OkSRO1BIubmxtnzpzhu+++0/m5GjVqFMuXL2f37t2UL18egISEBDIyMvjwww8pVaoUgFbGSCHeZM+73vx5jxNCvN00yhv8qPP+/ftYWVmRmJj40kW3hRBvjoi42/gvfPYavNWBtahdtnA+9Ei87Z7M2AhwZ+2X1KrkwZ8bQtRtv//+Ox999BG//vorH330ESkpKVrTlCtXrkz79u0ZN24cVapUoW3btgQFBWmd37FjRx49eoS+vj7Ozs5kZmby4MEDDh8+TJkyZdRjMzMzadGiBZGRkbRo0YLmzZvz0UcfYWNj85o/DSH+PWdnZ/Bqhcarda7rFjWAg5Ux+0Y1ltqsIt9JbJD/ZBK3ECLfPCvpjQZwtDKmRmnJWieeLSdj45NTnNMysoiIu03oqYTXev369euTmZnJ2rVrtbbr6+uzfft2tm3bhqenJ3PnzsXd3Z34+PjX2h/x7goICECj0dC3b1+dfQMGDECj0bzQbIqnOXToELOChgO6681z3gf5eUqgKMR7QoJFIUS+eVrSG/klRLyIZ2VsTL1+TitZ0oEDB3B1dcXT05OMjAwOHjyoHnv79m1iYmLw9Mz+2XzepEk1atRg27ZtTJ48menTp2sdr9FoqFu3LhMmTODYsWMYGhqyYcOGV3Dn4n3l5ORESEgIjx49UrelpKSwatUqSpYs+cquY2dnR7vqZZnftQoOVtpTTR2sjJ+rbIYQ4t0hwaIQIl/lJL2RX0LEv/GsjI0ZSbc4vX4uv+w4yOrVq5k7dy5DhgzB1dWVtm3bEhgYyL59+zh+/Dhdu3alePHiar3O4cOHs2PHDiZOnMi5c+dYtmwZP/zwAyNGjNC5Tp06ddi6dSsTJkxg1qxZABw8eJDJkydz+PBhLl++zPr167l16xYeHh6v5bMQ74cqVarg5OTE+vXr1W3r16+nZMmSVK5cWd3m7Oys/izm8Pb2VhPFKIrC+PHjKVmyJEZGRhQrVozBgwfrnO/r5ci+UY35qbMH7udXc39RT45NaM2Ij5uxefPm13qvQog3hyS4EULku8eT3uQkJalR2lZGFMVzyytjYw6z8o1RMtLo/WFzjAoZMGTIED799FMgu57lkCFDaNOmDWlpaTRo0ICtW7eqNTNfNGlSvXr12LJlC61atUJfX5+mTZuyZ88eZs2axf379ylVqhQzZsygZcuWr/QzEO+fXr16ERwcrNYjXLJkCT179iQsLOy521i3bh0zZ84kJCSE8uXLc+PGDY4fP57rsRoUgvp3ISkpiTWrV1K2bFnOnDnz3GWJhBBvPwkWhRAFQl9PI0lsxEt7WibGx1P8r/51uc7PmY2NDT///PNT2+/QoQMdOnTIc/+TJQMaNGhAcnKy+j40NPSp7QvxNDoZfv9/vnXXrl0ZM2YMly5lZ5UODw8nJCTkhYLFy5cv4+DgQNOmTSlUqBAlS5akRo0auR77119/ERkZSXR0NG5ubgBayZyEEO8+CRaFEEK8dXKSJd1ITHlqxkZJliTeNrll+H1wKgFXKw12dna0bt2apUuXoigKrVu3pkiRIi/UfseOHZk1axZlypTB19eXVq1a4efnh4GB7q+EUVFRlChRQg0UhRDvH1mzKIQQ4q0jyZLEuyivDL+P0jKJuppI6KkEevXqxdKlS1m2bBm9evXSaUNPT48nq6Klp6erf3ZyciImJoZ58+ZhYmJC//79adCggdYxOUxMTF7RnQkh3lYSLAohhHgrSbIk8S55VoZfgAmbztCseQvS0tJIT0+nRYsWOsfY2dmRkPC/sjH379/XKdtiYmKCn58fc+bMISwsjIiICE6ePKnTVsWKFbl69Srnzp176fsSQrzdZBqqEEKIt5YkSxLvimdl+AVISEzhyOVEoqOjAXJNNNO4cWOWLl2Kn58f1tbWjBs3Tuu4pUuXkpmZSc2aNTE1NWXFihWYmJhQqlQpnbYaNmxIgwYN6NChA99//z0uLi6cPXsWjUaDr6/vv7xjIcTbQIJFIYQQbzVJliTeBc/K8Pv4cU/7eR8zZgzx8fG0adMGKysrJk6cqDWyaG1tzZQpUxg2bBiZmZlUqFCBTZs2Ubhw7m2uW7eOESNG4O/vz4MHD3BxcWHKlCm5HiuEePdolCcntr9B7t+/j5WVFYmJiVhaWhZ0d4QQQgghXouIuNv4LzzwzONWB9aShyPivSWxQf6TNYtCCCGEEAUsJ8NvXhOoNYCjZPgVQuQzCRaFEEIIIQqYZPgVQryJJFgUQgghhHgDSIZfIcSbRhLcCCGEEEK8ISTDrxDiTSLBohBCCCHEG0Qy/Aoh3hQyDVUIIYQQQgghhA4JFoUQQgghhBBC6JBgUQghhBBCCCGEDgkWhRBCCCGEEELokGBRCCGEEEIIIYQOCRaFEEIIIYQQQuiQYFEIIYQQQgghhA4JFoUQQgghhBBC6JBgUQghhBBCCCGEDgkWhRBCCCGEEELokGBRCCGEEEIIIYQOCRaFEEIIIYQQQuiQYFEIIYQQQgghhA4JFoUQQojX5MaNGwwaNIgyZcpgZGSEk5MTfn5+7NixAwBnZ2c0Go3Wq0SJEur5j+/X19enWLFi9O7dm7t37xbULQkhhHiPSLAohBBCvAYXL16katWq7Ny5k++++46TJ08SGhpKo0aNGDBggHrc119/TUJCgvo6duyYVjs5+y9fvszKlSvZs2cPgwcPzu/bEUII8R4yKOgOCCGEEO+i/v37o9FoiIyMxMzMTN1evnx5evXqpb63sLDAwcEhz3Ye31+8eHF69OjB6tWrX1/HhRBCiP8nI4tCCCHEK3bnzh1CQ0MZMGCAVqCYw9ra+qXavXbtGps2baJmzZr/sodCCCHEs0mwKIQQQrxi58+fR1EUypUr98xjR40ahbm5ufqaM2dOrvtNTEwoUaIEGo2G77///nV1XQghhFDJNFQhhBDiFcjMUoiMv8PNpBRuXbn33OeNHDmSgIAA9X2RIkVy3a8oCleuXOHLL7+kdevW7NmzB319/VfUeyGEEEKXBItCCCHEvxR6KoEJm86QkJgCQOajJNBo2Lj7EO3bt3/quUWKFMHFxeW59ru6ujJr1ixq167Nrl27aNq06au7CSH+X2ZmJhqNBj09mYAmxPtO/hUQQggh/oXQUwn0W3FUDRQB9E0sMHGuwvLFP/FbZJzOOffu3Xvp6+WMJj569Oil2xAF49dff6VChQqYmJhQuHBhmjZtyoMHD8jKyuLrr7+mRIkSGBkZ4e3tTWhoqNa5V69exd/fH1tbW8zMzKhWrRoHDx5U92/atInq1atjbGxMkSJFtB5SpKamMmLECIoXL46ZmRk1a9YkLCxM3b906VKsra3ZuHEjnp6eGBkZcfny5df+eQgh3nwSLAohhBAvKTNLYcKmMyi57LNp3g+ULD7xa8Ivv/xKbGws0dHRzJkzh9q1az/3NZKSkrhx4wYJCQlERkYycuRI7OzsqFOnzqu7EfHaJSQk4O/vT69evYiOjiYsLIwPP/wQRVGYPXs2M2bMYPr06Zw4cYIWLVrwwQcfEBsbC0BycjINGzbk2rVrbNy4kePHj/PFF1+QlZUFwJYtW2jfvj2tWrXi2LFj7Nixgxo1aqjXHjhwIBEREYSEhHDixAk6duyIr6+v2j7Aw4cPmTp1KosWLeL06dMULVo0fz8gIcQbSaMoSm7/x70R7t+/j5WVFYmJiVhaWhZ0d4QQQggtEXG38V94IM/9Gcl3uB+xBrO/T3Dn1t/Y2dlRtWpVPv/8c3x8fHB2dmbo0KEMHTo01/OdnZ25dOmS+t7Ozo7q1avzzTff4O3t/YrvRrwOOWtZIyIPMfyTlsRdiKdMaWetY4oXL86AAQP48ssv1W01atSgevXq/Pjjj/z000+MGDGCixcvYmtrq3ONOnXqUKZMGVasWKGz7/Lly5QpU4bLly9TrFgxdXvTpk2pUaMGkydPZunSpfTs2ZOoqCgqVar06m5eiFdMYoP8J2sWhRBCiJd0MynlqfsNzG2xbdaP2R9709a7uM7+ixcvPvX8Z+0Xb7bH17IqWZkYl6qEm0d5ajdoTPeOH/DRRx+hr6/P9evXqVu3rta5devW5fjx4wBERUVRuXLlXAPFnP2BgYG57jt58iSZmZm4ublpbU9NTaVw4cLqe0NDQypWrPhvblcI8Q6SYFEIIYR4SUUtjF/pceLdkbOWNWf6lkZPn6KdJ5F2LZqT8ceY/N1M/vOf/7B9+/ZntmViYvLS+5OTk9HX1+fIkSM62XPNzc212tBoNM/sixDi/SJrFoUQQoiXVKO0LY5WxuT1K7YGcLQypkbp3EeExLspr7WsGo0GoxKe2NTvgn2PWRgaGrJjxw6KFStGeHi41rHh4eF4enoCULFiRaKiorhz506u16tYsSI7duzIdV/lypXJzMzk5s2buLi4aL0cHBz+9b0KId5tEiwKIYQQL0lfT0OQX/Yv9E8GjDnvg/w80deTEZv3SWT8Ha3suACp12NIjFhLakIs6fdvEndoFzdv3sLDw4ORI0cydepU1qxZQ0xMDKNHjyYqKoohQ4YA4O/vj4ODA+3atSM8PJwLFy6wbt06IiIiAAgKCmL16tUEBQURHR3NyZMnmTp1KgBubm506dKF7t27s379euLj44mMjOTbb79ly5Yt+fvBCCHeOjINVQghhPgXfL0cmd+1iladRQAHK2OC/Dzx9XIswN6JgpDbWlY9Q1NSrpzi/uHfyUp9iIFVUXoO+4qWLVvSokULEhMTGT58ODdv3sTT05ONGzfi6uoKZK8n/PPPPxk+fDitWrUiIyMDT09PfvzxRwB8fHz45ZdfmDhxIlOmTMHS0pIGDRqo1w4ODmbSpEkMHz6ca9euUaRIEWrVqkWbNm3y5wMRQry1JBuqEEII8QrkZL28mZRCUYvsqacyovh+elaW3ByrA2tRu2zhZx4nhMgmsUH+k2moQgghxCugr6ehdtnCtPUuTu2yhV86UMwpkJ5j/PjxzyyTcfHiRTQaDVFRUS91TfFqyVpWIcS7QoJFIYQQ4g02YsQIreQlAQEBtGvXTusYJycnEhIS8PLyyufeidzIWlYhxLtCgkUhhBDiDWZubq5VDy83+vr6ODg4YGAgqQjeFDlrWR2stMumOFgZM79rFVnLKoR4K0iwKIQQQrxCPj4+DBw4kIEDB2JlZUWRIkX46quvyEkRcPfuXbp3746NjQ2mpqa0bNmS2NjYPNt7fBrq+PHjWbZsGb///jsajQaNRkNYWFiu01BPnz5NmzZtsLS0xMLCgvr16xMXFwdAWFgYNWrUwMzMDGtra+rWrculS5de22fyvvL1cmTfqMasDqzF7I+9WR1Yi32jGkugKIR4a8gjSCGEEOIVW7ZsGb179yYyMpLDhw/z6aefUrJkSQIDAwkICCA2NpaNGzdiaWnJqFGjaNWqFWfOnKFQoUJPbXfEiBFER0dz//59goODAbC1teX69etax127do0GDRrg4+PDzp07sbS0JDw8nIyMDDIyMmjXrh2BgYGsXr2atLQ0IiMjpSD7a5KzllUIId5GEiwKIYQQ/9LjmVDvP0rHycmJmTNnotFocHd35+TJk8ycORMfHx82btxIeHg4derUAWDlypU4OTnx22+/0bFjx6dex9zcHBMTE1JTU59aUP3HH3/EysqKkJAQNQB1c3MD4M6dOyQmJtKmTRvKli0LgIeHx6v4GIQQQrxjZBqqEEII8S+Enkqg3tSd+C88wJCQKM4k3Ocf05L8cfqGekzt2rWJjY3lzJkzGBgYULNmTXVf4cKFcXd3Jzo6+pX1KSoqivr16+c6Umlra0tAQAAtWrTAz8+P2bNnk5CQ8MquLYQQ4t0hwaIQQgjxkkJPJdBvxVESErWLsD9Ky6TfiqOEniqYIMzExOSp+4ODg4mIiKBOnTqsWbMGNzc3Dhx4dl1AIYQQ7xcJFoUQQoiXkJmlMGHTGZRc9qVePwfAhE1nyMxSOHDgAK6urnh6epKRkcHBgwfVY2/fvk1MTAyenp7PdV1DQ0MyMzOfekzFihXZu3cv6enpeR5TuXJlxowZw/79+/Hy8mLVqlXPdX0hhBDvDwkWhRBCiJcQGX9HZ0QxR0bSLW7vWMjlC+eZNGchc+fOZciQIbi6utK2bVsCAwPZt28fx48fp2vXrhQvXpy2bds+13WdnZ05ceIEMTEx/PPPP7kGhAMHDuT+/ft8/PHHHD58mNjYWJYvX05MTAzx8fGMGTOGiIgILl26xJ9//klsbKysWxRCCKFDgkUhhBDiJdxMyj1QBDAr3xglI42En4cxPegLhgwZwqeffgpkTwGtWrUqbdq0oXbt2iiKwtatW5+ZCTVHYGAg7u7uVKtWDTs7O8LDw3WOKVy4MDt37iQ5OZmGDRtStWpVFi5cSKFChTA1NeXs2bN06NABNzc3Pv30UwYMGMBnn332ch+EEEKId5ZGySn89Aa6f/8+VlZWJCYmYmlpWdDdEUIIIVQRcbfxX6i7zu/GqtEYFi2DbdPs4HB1YC0pnSCEEK+AxAb5T0YWhRBCiJdQo7QtjlbG5FWdUAM4WhlTo7RtfnZLCCGEeGUkWBRCCCFegr6ehiC/7KQ0eQWMQX6e6OtJsXshhBBvJ5mGKoQQQvwLoacSmLDpjFayG0crY4L8PPH1cizAngkhxLtFYoP8Z1DQHRBCCCHeZr5ejjTzdCAy/g43k1IoapE99VRGFIUQQrztJFgUQggh/iV9PY0ksRFCCPHOkTWLQgghhBBCCCF0SLAohBBCCCGEEEKHBItCCCGEEEIIIXRIsCiEEEIIIYQQQocEi0IIIYQQQgghdEiwKIQQQgghhBBChwSLQgghhBBCCCF0SLAohBBCCCGEEEKHBItCCCGEEEIIIXRIsCiEEEIIIYQQQocEi0IIIYQQQgghdEiwKIQQQgghhBBChwSLQgghhBBCCCF0SLAohBBCCCGEEEKHBItCCCGEEEIIIXRIsCiEEEIIIYQQQocEi0IIIYQQQgghdEiwKIQQQgghhBBChwSLQgghhBBCCCF0SLAohBBCCCGEEEKHBItCCCGEEEIIIXRIsCiEEEIIIYQQQocEi5qcvTwAAAhYSURBVEIIIYQQQgghdEiwKIQQQgghhBBChwSLQgghhBBCCCF0SLAohBBCCCGEEEKHBItCCCGEEEIIIXQYFHQHnkZRFADu379fwD0RQgghhBBCFKScmCAnRhCv3xsdLCYlJQHg5ORUwD0RQgghhBBCvAmSkpKwsrIq6G68FzTKGxyaZ2Vlcf36dSwsLNBoNAXdnbfS/fv3cXJy4sqVK1haWhZ0d8QT5Pt5c8l382aT7+fNJd/Nm02+nzeXfDfPpigKSUlJFCtWDD09WU2XH97okUU9PT1KlChR0N14J1haWso/PG8w+X7eXPLdvNnk+3lzyXfzZpPv580l383TyYhi/pKQXAghhBBCCCGEDgkWhRBCCCGEEELokGDxHWdkZERQUBBGRkYF3RWRC/l+3lzy3bzZ5Pt5c8l382aT7+fNJd+NeBO90QluhBBCCCGEEEIUDBlZFEIIIYQQQgihQ4JFIYQQQgghhBA6JFgUQgghhBBCCKFDgkUhhBBCCCGEEDokWBRCCCGEEEIIoUOCxffMli1bqFmzJiYmJtjY2NCuXbuC7pJ4QmpqKt7e3mg0GqKiogq6O++9ixcv0rt3b0qXLo2JiQlly5YlKCiItLS0gu7ae+vHH3/E2dkZY2NjatasSWRkZEF3SQDffvst1atXx8LCgqJFi9KuXTtiYmIKulsiF1OmTEGj0TB06NCC7or4f9euXaNr164ULlwYExMTKlSowOHDhwu6W0JIsPg+WbduHd26daNnz54cP36c8PBwPvnkk4LulnjCF198QbFixQq6G+L/nT17lqysLBYsWMDp06eZOXMm//3vf/nyyy8LumvvpTVr1jBs2DCCgoI4evQolSpVokWLFty8ebOgu/be2717NwMGDODAgQNs376d9PR0mjdvzoMHDwq6a+Ixhw4dYsGCBVSsWLGguyL+3927d6lbty6FChVi27ZtnDlzhhkzZmBjY1PQXRNC6iy+LzIyMnB2dmbChAn07t27oLsj8rBt2zaGDRvGunXrKF++PMeOHcPb27uguyWe8N133zF//nwuXLhQ0F1579SsWZPq1avzww8/AJCVlYWTkxODBg1i9OjRBdw78bhbt25RtGhRdu/eTYMGDQq6OwJITk6mSpUqzJs3j0mTJuHt7c2sWbMKulvvvdGjRxMeHs7evXsLuitC6JCRxffE0aNHuXbtGnp6elSuXBlHR0datmzJqVOnCrpr4v/9/fffBAYGsnz5ckxNTQu6O+IpEhMTsbW1LehuvHfS0tI4cuQITZs2Vbfp6enRtGlTIiIiCrBnIjeJiYkA8nflDTJgwABat26t9XdIFLyNGzdSrVo1OnbsSNGiRalcuTILFy4s6G4JAUiw+N7IGQEZP348Y8eOZfPmzdjY2ODj48OdO3cKuHdCURQCAgLo27cv1apVK+juiKc4f/48c+fO5bPPPivorrx3/vnnHzIzM7G3t9fabm9vz40bNwqoVyI3WVlZDB06lLp16+Ll5VXQ3RFASEgIR48e5dtvvy3orognXLhwgfnz5+Pq6soff/xBv379GDx4MMuWLSvorgkhweLbbvTo0Wg0mqe+ctZcAfznP/+hQ4cOVK1aleDgYDQaDb/88ksB38W763m/n7lz55KUlMSYMWMKusvvjef9bh537do1fH196dixI4GBgQXUcyHefAMGDODUqVOEhIQUdFcEcOXKFYYMGcLKlSsxNjYu6O6IJ2RlZVGlShUmT55M5cqV+fTTTwkMDOS///1vQXdNCAwKugPi3xk+fDgBAQFPPaZMmTIkJCQA4OnpqW43MjKiTJkyXL58+XV28b32vN/Pzp07iYiIwMjISGtftWrV6NKlizxdfA2e97vJcf36dRo1akSdOnX46aefXnPvRG6KFCmCvr4+f//9t9b2v//+GwcHhwLqlXjSwIED2bx5M3v27KFEiRIF3R0BHDlyhJs3b1KlShV1W2ZmJnv27OGHH34gNTUVfX39Auzh+83R0VHr9zMADw8P1q1bV0A9EuJ/JFh8y9nZ2WFnZ/fM46pWrYqRkRExMTHUq1cPgPT0dC5evEipUqVedzffW8/7/cyZM4dJkyap769fv06LFi1Ys2YNNWvWfJ1dfG8973cD2SOKjRo1Ukfk9fRkUkZBMDQ0pGrVquzYsUMt+5OVlcWOHTsYOHBgwXZOoCgKgwYNYsOGDYSFhVG6dOmC7pL4f02aNOHkyZNa23r27Em5cuUYNWqUBIoFrG7dujplZs6dOye/n4k3ggSL7wlLS0v69u1LUFAQTk5OlCpViu+++w6Ajh07FnDvRMmSJbXem5ubA1C2bFl5Ml/Arl27ho+PD6VKlWL69OncunVL3SejWflv2LBh9OjRg2rVqlGjRg1mzZrFgwcP6NmzZ0F37b03YMAAVq1axe+//46FhYW6jtTKygoTE5MC7t37zcLCQmftqJmZGYULF5Y1pW+Azz//nDp16jB58mQ6depEZGQkP/30k8xiEW8ECRbfI9999x0GBgZ069aNR48eUbNmTXbu3Cl1fIR4iu3bt3P+/HnOnz+vE7hL5aH817lzZ27dusW4ceO4ceMG3t7ehIaG6iS9Eflv/vz5APj4+GhtDw4OfuaUbyHeZ9WrV2fDhg2MGTOGr7/+mtKlSzNr1iy6dOlS0F0TQuosCiGEEEIIIYTQJQtvhBBCCCGEEELokGBRCCGEEEIIIYQOCRaFEEIIIYQQQuiQYFEIIYQQQgghhA4JFoUQQgghhBBC6JBgUQghhBBCCCGEDgkWhRBCCCGEEELokGBRCCGEEEIIIYQOCRaFEEIIIYQQQuiQYFEIIYQQQgghhA4JFoUQQgghhBBC6Pg/qtaMdPOm/NwAAAAASUVORK5CYII=", + "image/png": "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8qJWrVqUK1cOFxcX4uLidPt69ep1TzuVK1fGyMiIwYMHs2rVKipUqPDAe77f9HtAQAAA7u7uBdouypAhQ1iwYAEACxYsYODAgQ88RwghXgSymluIF0TCXYnP67y3Qre9WrVqpKWl6fbVrVuXrVu33nONovJQTp48mcmTJ+s+502nn0vOonzqLRav/fuehSqGhoa63/X09AqUfjQxMbmnDX19fQ4cOMCWLVtYsWIF3377baF9zJM3/R4WFkbt2rUJDg4uUPM6r/272y6Kt7c3cXFxbN++nezsbBwcHB54jhBCvAhkZFKIF8TTSridfzq9nJEpt+9kMvLjrwk9nFt3++jRo7p3FB9GSkoKycnJdOzYkRkzZnDkyBEAKlasyK1bt+45/n7T78VR2HUHDBhA3759ZVRSCCHykWBSiBfE00q4nX86vXrfKVTrNYmbMYfp3dYTe3t7xo8fT/Xq1R/6urdu3aJTp044OTnxyiuvMH36dAB69+7N1KlTcXV1JSYmRnf8g6bfH+S1115j9erVugU4AP369ePGjRv06dPnofsvCufr68uDyujOnDmzwMh5x44dSUpKemx9CA4OZtq0aYXua968+WNrR4jnldTmFuIFEno4/okn3C6N+tVPy4oVK/j9999ZtGhRaXelTFFKoZSiXLl7xy98fX2ZNm0aHh5Flze2trYmLCwMCwuLJ9K/4OBgTE1N+eCDD57I9cXzS2pz55KRSSFeIE8j4fbzWr96zJgxBAUF8cknn5R2V8qEuLg47OzsGDBgAA4ODixatIhmzZrh5uZGz549SUlJueeckSNH4uHhgb29PRMnTgRg1qxZJCQk0KpVK1q1agXkBpd5C8amT5+Og4MDDg4OzJw5U9d2o0aNGDp0KPb29rRv35709HTd9fLSS+XPFhAZGYmvry82NjYF8q6ampoCuWmjWrRogb+/P3Z2dowYMYKcnByys7MJDAzEwcEBR0dHZsyY8QSephDPNlmAI4R4rMb52TF+1bECK8efdP3qp2H27Nml3YUyJyoqip9//pmXX36ZgIAANm/ejImJCV9//TXTp0/n008/LXD8F198wUsvvUR2djZt2rTh6NGjjB07lunTp7Nt27Z7RibDw8NZsGAB+/fvRylFkyZNaNmyJebm5kRFRfHrr7/y448/8vrrr7Ny5Ur69+/PlClTiI2NxdDQsMBU+alTp9i2bRu3bt3Czs6OkSNH3pP66cCBA0RGRlK3bl06dOjAqlWrqFevHvHx8Rw/fhzgsU6/C1FWyMikEOKx6upak68CHKlpZowG1DQz5qsARyk7+AKqW7cuTZs2Zd++fURGRuLt7Y2Liws///wz586du+f4ZcuW4ebmhqurKydOnChQ2agwu3btolu3bpiYmGBqakpAQIDu/dZ69erh4uICFEz/5OTkRL9+/Vi8eDH6+v8bT/H398fQ0BALCwuqVq1aaJUmLy8vbGxs0NPTo0+fPuzatQsbGxvOnj3LmDFjWL9+PZUqVSrp4xKizJKRSSHEY9fVtaYEjy+g/O/kvqSSydbLTb+klKJdu3b8+uuvRZ4bGxvLtGnTOHjwIObm5gQGBhZI5fSw7k49lTfNvXbtWnbs2MEff/zBF198wbFjxwo9vrB0UZqm3fPZ3NycI0eOsGHDBubOncuyZcuYP39+ifstRFkkI5NCCCEe2d0Vlq7czODKzQxCD8fTtGlTdu/eTXR0NJBbGenMmTMFzr958yYmJiZUrlyZK1eusG7dOt2+otI/+fj4EBoaSlpaGqmpqaxevfq+1ZpycnK4cOECrVq14uuvvyY5ObnQdzeLcuDAAWJjY8nJyWHp0qW88sorXLt2jZycHLp3787kyZM5dOhQsa8nxPPikUYmNU3rCQQDjQAvpVTYv9vbAVOA8sAdYJxSqujswkIIIcq0wiosKaWYuuE0XYNaExISQp8+fbh9+zaQm+je1tZWd6yzszOurq40bNiQ2rVr4+3trds3bNgwOnTogJWVFdu2bdNtd3NzIzAwEC8vLyC3SpGrq2uRFY2ys7Pp378/ycnJKKUYO3YsZmZmxb5HT09PRo8eTXR0NK1ataJbt24cO3aMgQMHkpOTA8BXX31V7OsJ8bx4pNRAmqY1AnKAH4AP8gWTrsAVpVSCpmkOwAal1APnvCQ1kBBClE3Pc0ooyF3NPW3atAL13YWQ1EC5HmlkUil1Eu59j0QpdTjfxxOAsaZphkqp24/SnhBCiGeTlZkx8XeV7MzbLoR4vj2Ndya7A4ckkBTif/T09HBxccHe3h5nZ2f+85//6KbJirJ9+3Y6der0UO3cXTmkKL6+vtjZ2eHs7IynpycRERHFOidvJqE4FUk+/fRTNm/eXLyOizLnaVVYKi2+vr4yKilEER4YTGqatlnTtOOF/HQpxrn2wNfA8PscM0zTtDBN08ISExMfrvdClFHGxsZERERw4sQJNm3axLp16/jss88eezv5g8n8iZ4Ls2TJEo4cOcKoUaMYN26cbvv27dvZs2fPfdv566+/Hvju2eeff07btm2Bx1eiLiEhgR49ejyWa91PaGhogTQ1ISEhJCQkPPF2yxJJCSXEi+uBwaRSqq1SyqGQn9/vd56mabWA1cAApVRMUccppeYppTyUUh6WlpYPfwdClHFVq1Zl3rx5fPvttyilyM7OZty4cXh6euLk5MQPP/ygO/bmzZv3VOCA4lcO2bZt2wOrkDRr1oz4+Hjd559++ok+ffoUek5e+pT8geqkSZOws7PjlVdeoU+fPrqax4GBgaxYsUJ3jKurK46OjgwaNEi3KMPa2pqJEyfi5uaGo6Mjp06duu+zs7Ky0l3zUWVnZxe5T4LJ4nkaFZaEEM+gvJqpj/IDbAc88n02A44AAQ9zHXd3dyXEi8DExOSebZUrV1aXL19WP/zwg5o0aZJSSqmMjAzl7u6uzp49q7Zt26YMDQ1VTEyMysrKUm3btlXLly9XSin1zz//KKWUysrKUi1btlRffPGF8vT0VAYGBmrAgAEqKytL1a5dWzVt2lSlpKSoRYsWqVq1aqnq1aurYcOGqRYtWqiDBw+qdevWqZo1a6qqVauq1q1bq/DwcGVgYKBq1KihnJ2d1fDhw5WLi4saPny4qlixourbt6/6559/lLGxsWrcuLFycHBQtra2Kj09XQUFBamKFSsqGxsbVa9ePeXl5aWWL1+u0tPTlaZp6vTp00oppVxdXVWNGjWUk5OTqlSpkpo1a5ZSSqk5c+aowYMH655PVFSUatOmjXJyclKurq4qOjpaxcbGKnt7e6WUUqmpqapnz57K0tJSde3aVXl5eanff/9d2dvbqxEjRih3d3fVuHFj9emnn+quWbduXfXhhx8qV1dX9euvv6ro6GjVuHFjVbduXfXKK6+okydPqt27dytzc3NlbW2tnJ2d1ZQpU5SJiYmytbVVzs7OKi0tTYWFhakWLVooNzc31b59e5WQkPAE/tQIIZ41QJh6DHFUWf951NRA3YDZgCWwVtO0CKWUHzAaeBn4VNO0vHpZ7ZVSVx+lPSFeBBs3buTo0aO6Ebfk5GSioqIoX768rgIHoKvA0aNHD5YtW8a8efPIysriwoUL3Lp1i3379tGgQQP09PRYsmQJt2/f5vTp07i7u3Pp0iWsrKxo3rw5enp6XLlyhV69enHu3DkqVarEsWPHMDY2Zs+ePQWqhOzYsYPMzEwuXryIq6sr7777LhMnTqR8+fL8/fffTJw4kZUrV2JkZIShoSGmpqYMHTqUIUOGUKtWLbKysjh9+jSapmFra8u6deu4ffs2Hh4erFmzhtq1axMQEADkVi1ZtWqVru1+/foRFBREt27dyMjIICcnh6tX//c/Kd999x3m5uakpaUxadIkXfUTKLxMn5OTEwBVqlTR5QZs06YNoaGhNGjQgP379zNq1Ci2bt1K586d6dSpk25Kfd26dUybNg0PDw8yMzMZM2YMv//+O5aWlixdupQJEyZI4mohxAvjUVdzryZ3Kvvu7ZOByY9ybSGeN/mrg6RnZhN6OF43DXj27Fn09PSoWrUqSilmz56Nn59fgfO3b99eaAWOvMohwT/9zvd7r5A2ayRHIk9j6+BCQkICO3bsoE6dOkDuIoLWrVvz5ZdfYmhoSHh4OOnp6dy+fZuxY8cSHh5OjRo1GDNmDKtWrUIphY2NDYGBgXzwwQdA7nR1q1atWLBgAZBb0s7ExASABg0akJ6ezs2bN4Hcknb6+vpYWFhgZGREcnJygf5v3rwZPz8/XV5APT09XSWS/FVIbt26RXx8PN26dQPAyMgIyM0/GBMTg729PQYGBjRq1Ij09HT69++vK2uXnZ1N586dCQ8PR19fHyMjIyIjIzExMeHKlSssXLiQP/74g5kzZ7Jnzx58fHwoV64cVatW5fLlyzRu3JhLly4RFRVFjx49CA4O5tSpUwwZMoQbN27w7rvvEh4eTp06dTAwMKBOnTpYWVk9yh8VIYQoU6QCjhBPwd3VQZSC8auOEXo4nsTEREaMGMHo0aPRNA0/Pz++//57MjMzAThz5gypqalA4RU4bt68SXa58kzedI7z8QlkXruAgVUjjF7/DzXq2rBp0yaCg4MxNDRk//79XL16lTfffJPdu3ezbNkyTp8+jbW1ta6vkyZNYt++fZw6dYqmTZty4cIF3fuQqampukolhfH29iY9PZ2MjAzu3LlToMqJpmlkZ2djZ2eHUkpXDWXfvn20bNmyRM/1//7v/6hfvz5hYWGcPXuWXr166RY35d3TmTNnOH/+PAkJCbz66qs0bNiQjIwMhg0bRpUqVXT5A999913MzMwYMWIE7733HhEREZQrV47Dhw/TpUsXhg0bpms3PT2duXPnsmbNGoKCgrCxsSE9PZ02bdowefJkNm7cWKL7EUKIskhqcwvxFNxdHURl3SFm3ij6zsuhQfXKvPHGG7z33ntAbhWPuLg43NzcUEphaWlJaGgoUHgFjnLlypFasTYXvxuKfiULylvZcudyNClJ/2DQqB3t2rXD0tKScuXK8c033/DJJ58QFRXF77//zpQpU7CwsCAjIwNHR0dmzJjB5cuXef/995k8eTKLFy+mT58+LFy4kL/++guAuxfK+fj4sHDhQiA32KxSpQqvvPIKGRkZVK9encqVKxc4Pm8KvGfPnty4cYO0tDQGDBgAFL0IpmLFitSqVYvQ0FC6du3K7du3yc7OJiQkhOjoaJo2bcqdO3d0/YiMjNTVXK5Zsybm5uZUrlwZW1tb/vrrLzIyMtizZw/Z2dn4+vqir6/P7du3qVevHidOnKBJkyYopbC2tqZfv37cvHmzQIqlGjVqkJ6ejpeXFzk5OWRmZrJ3714cHR2JiYnhxIkT2Nvbl+wPixBClDGPVAHncZMKOOJ59aSrg9x9/dSTO0jetxyUwrH2S8yZM4fevXsTFhaGhYUFS5cu5auvviInJwcDAwPmzJlD06ZNWbduHf/v//0/cnJyqFq1Kps2beLMmTP06NGDcuXKMXv2bH766acC7w9ev36dQYMGcfbsWSpUqMDMmTNp2rQpEyZM4Oeff2bNmjW4ubnh4ODAn3/+ibW1NaamprpV4VOmTGHhwoWUL1+ejh078uWXXxZ6j1FRUQwfPpyzFy5xLS0bI/cuZBxag3l5xYWzZ3TT0zt37qRr166cPXuWGTNmMGbMGDw8PNizZ0/ui+L6+owdO5bPP/8cQ0ND3TMBiI2NpV27dqSlpWFmZsbrr79Oy5YtmTt3LqGhoTRq1IgWLVqQlJTE/v37MTY2Jioqit27dzN27FjdSOykSZMYOnToI3+vQohnm1TAySXBpBBPgfeUrYVWB6lpZszuoNbP/PUfRt++fYmMjCQjI4M333yT8ePHP7Zr570ukJ6ZTVrUPlKObKBun895y9WY9/u0548//qBXr17s3buXV199lQ0bNhAQEMDx48cBmDZtGikpKQQHB9O8eXPeffddevbsiVKKo0eP4uzsTHBwMKamprz33nucP38ea2trMjMzqVu3LpGRkcycORNTU1PdO6T5A+O8c/P2CSGebxJM5pJpbiGegnF+drogKM/jrA7ypK//MH755Zcndu38rwsY13Pn1uF1RH83lInV6+Dp6cmYMWMwMDDAxcWFZs2aUb58+SKvtWTJEkaOHMnkyZPJzMykd+/eODs76/ZnZ2fTv39/kpOTUUoxduzYByZmF0KIF5GMTArxlORfzW1lZsw4P7vHmtT5SV//aXnrrbfYvXt3gW1vv/02AwcOfOKvCwghxMOQkclcMjIpxFPS1bXmEw3unvT1H5avr68uF2NRZs6cybBhw6hQoQKQW+P7l19+KXIE0MrMuNDpfCsz40KPv9+0c/PmzR9YJrKk8laI36+W89y5c6lQoYJu8ZEQQpRVkhpICFFiSildSceSyF87HB5c43ucnx3GBnoFtpV0Ov9JBZLFNWLECAkkhRDPBQkmhRAPJS4uDjs7OwYMGICDgwOLFi16YL3v4tYOz1/je/r06Tg4OODg4MDMmTMBcDHP5NbiMaRv/Y6E/44iaeVEgju+TFfXmsyaNYvGjRvj5ORE7969dW1HRkbi6+uLjY0Ns2bN0m03NTUFckcRW7RoUWjN88IUdi8A69evp2HDhri5uekq9+Tk5GBtbU1SUpLuuAYNGnDlyhWCg4N1dcujo6Np27Ytzs7OuLm5ERMTA8DUqVN1NdrztyWEEM+U0q7nmP9HanML8eyLjY1VmqapvXv3qsTEROXj46NSUlKUUkpNmTJFffbZZ0oppVq2bKkOHjyolLq3dviRI0eUUrm1sRMTE3XXzvscFhamHBwcVEpKirp165Zq3LixOnTokIqNjVV6enrq8OHDSimlevbsqRYtWqSUUqpGjRoqIyNDKaXUjRs3lFJKTZw4UTVr1kxlZGSoxMRE9dJLL6k7d+4opf5XH/1+Nc8LU9i9pKenq1q1aqkzZ86onJwc1bNnT+Xv76+UUmrs2LFq/vz5Siml9u3bp9q0aaPr29SpU5VSSnl5ealVq1YppZRKT09XqampasOGDWro0KEqJydHZWdnK39/f/X3338/9PclhHhykNrcKKVkZFII8WChh+PxnrKVekFr6f79Hixr1KJp06bs27ePyMhIvL29cXFx4eeff+bcuXP3nL9s2TLc3NxwdXXlxIkTREZG3re9Xbt20a1bN0xMTDA1NSUgIICdO3cCuSUa8+puu7u760oxOjk50a9fPxYvXlygnri/vz+GhoZYWFhQtWpVrly5ck97eTXP9fT0dDXPi1LYvZw6dYp69erRoEEDNE2jf//+uuN79erF0qVLAfjtt9/o1atXgesVViqyQoUKbNy4kY0bN+Lq6oqbmxunTp0iKirqvs9NCCFKgyzAEULcV/7cjgBXbmaQlFmO0MPx6ClFu3bt+PXXX4s8P692+MGDBzE3NycwMJCMjIwS9yevdjfk1u9OT89dkLN27Vp27NjBH3/8wRdffKGrgHP38Xn1vvMrrOb547qXZs2aER0dTWJiIqGhoXz88cfFuk+lFOPHj2f48OHFOl4IIUqLjEwKIe7r7lKQkBvoTN1wmqZNm7J7925dne3U1NQC9bgBXS3vypUrc+XKFdatW6fbV7FiRW7dunVPmz4+PoSGhpKWlkZqaiqrV6/Gx8enyD7m5ORw4cIFWrVqxddff01ycnKh724WpbCa54Up6l4aNmxIXFyc7l3H/MG1pml069aN9957j0aNGlGlSpUC18xfKhLg9u3bpKWl4efnx/z583X3ER8fz9WrV4t9T0II8bTIyKQQ4r4SCknFk7fd0tKSkJAQ+vTpw+3btwGYPHkytra2uuOcnZ1xdXWlYcOG1K5dG29vb92+YcOG0aFDB6ysrNi2bZtuu5ubG4GBgXh5eQG59cpdXV11U9p3e9QE44XVPC9MUfdiZGTEvHnz8Pf3p0KFCvj4+BQIknv16oWnpychISGFXnfRokUMHz6cTz/9FAMDA5YvX0779u05efIkzZo1A3IXDC1evJiqVasW+76EEOJpkKTlQoj7epZKNT4JxckJKYQQhZGk5blkmlsIcV+PM7ejEEKI549Mcwsh7iuvqs7zUKqxML6+vvj6+t6zvUmTJrqp+zyLFi3C0dHxKfVMCCHKBpnmFkIIIYQoAZnmziXT3EIIIYQQosQkmBRCCCGEECUmwaQQQgghhCgxCSaFEEIIIUSJSTApRCmIi4vDwcGh2MevWbOGKVOmABAcHMy0adMe+ZqPKjU1FX9/f5ydnXFwcGDp0qWEh4fTsmVL3N3d8fPz49KlS2RlZeHp6cn27dsBGD9+PBMmTHhq/RRCCPFkSTApxBOmp6eHi4sLDg4O9OzZk7S0NAAyMzPp0qULDRo0oH79+rz99tvcuXMHyE2k3alTJ901OnfuTFBQEL6+viQkJDBr1ixcXFyoU6cOlpaWuLi40LFjRzIzM7G2tubatWsAXL58md69e1O/fn3c3d3p2LHjPeUOS2r9+vVYWVlx5MgRjh8/TocOHRgzZgwrVqwgPDycQYMGMWHCBPT19QkJCWHkyJFs3ryZ9evXM3HixMfSByGEEKVPgkkhnjBjY2MiIiI4fvw45cuXZ+7cuSilOH/+PFevXkVfXx8XFxeSkpLfLW82AAAYKklEQVSwtLTUBYJJSUm6/IchISGMHj1ad82xY8cSERHBoEGDUEqhlMLf3x8DAwMAzp8/j4+PD/Xr12fPnj0sWrSI8PBwAgIC6NmzJ/7+/tjZ2TFixAhycnKA3ODQzc0NZ2dn2rRp88D7cnR0ZNOmTXz00Ufs3LmTCxcucPz4cdq1a4eLiwuTJ0/m4sWLANjb2/PGG2/QqVMn5s+fT/ny5R/nIxZCCFGKJJgU4iny8fEhOjqaPXv2kJGRwbRp0zh58iSVK1emQYMGpKSk6EYui+Onn36iRYsWHDlypMB2CwsLJkyYgLu7O1u2bGHs2LEAvPzyy5w+fZrZs2cTGRlJTEwMq1atIjExkaFDh7Jy5UqOHDnC8uXLi2wz9HA83lO24jc/iqoDZnK7Yk0+/vhjVq5cib29PREREURERHDs2DE2btyoO+/YsWOYmZlx9erVh3xqQgghnmUSTArxlGRlZbFu3TocHR05c+YMFStWxNvbG4D+/fsTFhaGnp4esbGxxbpeUlISaWlpWFlZAfDGG28UaOuTTz4hMjKSnj17EhkZqdvn5eWFjY0Nenp69OnTh127drFv3z5atGhBvXr1AHjppZcKbTP0cDzjVx0jPimdzFv/cCVNseG2La8EDGL//v0kJiayd+9eIHca/8SJEwCsWrWK69evs2PHDsaMGUNSUtJDPj0hhBDPKimnKMQTlp6ejouLC8npmWRUseXI2RpkH9pLVnbB6lOapqFpGjk5Obr/ltTcuXOpWLEi/fv3Z9q0aRgZGRVo5+52i2vqhtOkZ2YDkJkYx9XtC0DT+MagPNtDF6Ovr8/YsWNJTk4mKyuLd955h2rVqhEUFMSWLVuoXbs2o0eP5u233+bnn38u8f0JIYR4dkgwKcQTEHo4XlfLGv3ydApexMrweNS/gVh6haqkp6UwJWQNQYGd+eWXX/Dw8ODPP/8kKSkJc3NzLl++TJ06dYpsw8zMjAoVKpCQkADAkiVLdPtu3ryJra0thw4dYtGiRWRnZ+v2HThwgNjYWOrWrcvSpUsZNmwYTZs2ZdSoUcTGxlKvXj2uX79e6OhkQlK67ndjG3eMbdwB0AAPj9yKYjt27LjnvPyLfvKm3IUQQjwfZJpbiPtISkriu+++e6hz8k8FK0ApWLLvvG5ED8CwZiPQM+CLieNp1KgR169fJzo6moCAAD766COGDx9erLYGDx7Mjh07cHFxQan/jXQOHDiQPXv2EBYWxm+//YaJiQkAMTEx2NraMnr0aBo1akS9evXo1q0blpaWzJs3j4CAAJydnenVq1eh7VmZGT/UdiGEEM8/Lf8/QKXNw8NDhYWFlXY3hNCJi4ujU6dOHD9+vNjneE/ZSny+Ebzz03tQ570V9xyXdTOR6xu/o6Z2g5ycHDp27Mi0adMwNDRk+/btvPrqq1SpUkV3/PLlyxk/fjzTpk3TjQKGhIQQFhbGt99+C0B2djb169cnLCwMCwsLEhISeOeddwgPD8fIyIiKFStibGzMtm3bSvQ88gLl/IGxsYEeXwU40tW1ZomuKYQQZZWmaeFKKY/S7kdpk2luIe4jKCiImJgYXFxcaNeuHVWrVmXZsmXcvn2bbt268dlnnwGwePFiZs2axZ07d4ihBi+1H4lWTo/z03tQ0aMzCfNHo+kbUrX7x+iZmJMWvZ/kPUsxIIe6jeuyZMkSqlWrRmJiIn379iUhIYF+/fqxadMmwsPDsbCwYPHixaSlpTFkyBCaNGnCd999R2BgIKNHj8bQ0JDNmzczZ84cevfuTYsWLdDX16d9+/YsW7ZMdz/bt28vNOF5ceUFjHlT+FZmxozzs5NAUgghXmAyMinEfeQfmdy4cSMrVqzghx9+QClF586d+fDDD7G0tOTDDz9k1apVGBgYUL1pF7Is6mPq0IZzX3fCsvsnVHi5CTe2zUczrIBZ895kZ6RgYlqJKd2duBa+jpMnT/Kf//yH0aNHU7NmTcaPH8/69et59dVXSUxMJDExsUAbo0aNomnTpgwYMABN01i6dCmvv/46//zzD82bN+fUqVNomkZSUhJmZmal/RiFEOK5JCOTuWRkUohi2rhxIxs3bsTV1RWAlJQUoqKiOHr0KOHh4Xh6egKgl3SLrPIVc0/S08e4vhfGBnq4+TRl99/b0IAq3IIt3/HJ79e5c+eOLiXPrl27WL16NQAdOnTA3NwcgC1bthRoIz09napVq+Y2oadH9+7dAahcuTJGRkYMHjyYTp06FaiiI4QQQjwJEkwKUYi81djnzsVx/VoqoYfjUUoxfvz4exbHzJ49mzfffJOvvvrqnvPPl9OnlnkFxvnZkRWTQqVrJwiZ4o+vry/vjX+fzp07s337doKDg+/bH6XUPW3kMTIyQk9PDwB9fX0OHDjAli1bWLFiBd9++y1bt2599AcihBBCFEFWcwtxl/yrsbXyxtxJT2X8qmNUrO/O/PnzSUlJASA+Pp6rV6/Spk0bVqxYoavscv36dVxfymJ3UGsqlNdjd1Dre94pTE5OpmbN3G358y16e3vr3nHcuHEjN27cACi0jXPnzt3T95SUFJKTk+nYsSMzZsy4pzKOEEII8bjJyKQQd8mfmFvPuBKGNRsTM3c4PzZqyod9+9KsWTMATE1NWbx4MY0bN2by5Mm0b9+enJwcDAwMmDNnDnXr1i2yjeDgYHr27Im5uTmtW7fWVb2ZOHEiffr0YdGiRTRr1ozq1atTsWJFLCwsitXGrVu36NKlCxkZGSilmD59+hN6SkIIIUQuWYAjxF3qBa2lsL8VGhA7xf+Jtn379m309PTQ19dn7969jBw5koiIiCfaphBCiJKRBTi5ZGRSiLtYmRkXyBOZf/uTdv78eV5//XVycnIoX748P/744xNvUwghhHgUEkwKcZdxfnaFJuYe52f3xNtu0KABhw8ffuLtCCGEEI+LBJNC3EUScwshhBDFJ6u5hShEV9ea7A5qTewU/0JXYz9NJakPnicwMJAVK+4t5fgs+fLLL0u7C0IIIR6BBJNCPOMeJZh8limlyMnJkWBSCCHKOAkmhXjG5a8PPm7cOKZOnYqnpydOTk5MnDhRd9zChQtxcnLC2dmZN954Q7d9x44dNG/eHBsbG90o5aVLl2jRogUuLi5UqFCBnTt3EhcXp0t+DrBixQoCAwMBqF69Ot27d8fDwwNbW1v+/PNPAEJCQujSpQu+vr40aNBAV6scYPr06Tg4OODg4MDMmTOB3PKUdnZ2DBgwAAcHBwYPHkx6ejouLi7069fviT1DIYQQT468MynEM27KlCkcP36ciIgIXX3wAwcO6OqD79ixgypVqjB58mT27NmDhYUF169f151/6dIldu3axalTp+jcuTM9evTgl19+wc/PjwkTJpCdnU1aWhr//PPPffuRkJDAgQMHiImJoVWrVkRHRwNw4MABjh8/ToUKFfD09MTf3x9N01iwYAH79+9HKUWTJk1o2bIl5ubmREVF8fPPP9O0aVMAli9fLumPhBCiDJNgUohSNmnSJBYvXoylpSW1a9fG3d2dtm3bMmLECNLS0qhevTrZ2bkrywcPHszNmzdZvHgx2dnZWFpaEhUVxeHDh3nppZd49dVXuX37Nm+99RbDhw9n3759dOzYkXLlyjFhwgRd1ZyrV6/y448/kpmZyddff016enqBYDI9PZ0ZM2Zw/PhxkpOTyc7Opl27dpQrV44GDRpgY2PDqVOnAGjXrh1VqlQBICAggF27dqFpGt26dcPExES3fefOnXTu3Jm6devqAkkhhBBln0xzC1GKDh48yMqVKzly5Ajr1q0jL2l/1559SHHqxa2OX3EsxYT4S5d153h5eZGWlsbq1atp2LAhgwcPZu/evRgaGnLw4EEOHjzIjz/+SGxsLNWqVdONIMbHx5OTkwPkBpPffvstNWvW5M6dOyxcuLBAv77//nv09fXp1q0bn332WaGjlpqmFfjv3duLkhdgCiGEeD5IMCnEE2Ztbc21a9cK3bd79266dOmCkZERFStW5LXXXiM8+hLxV/8h5SXb3Eo8DVpy61YKoYfjMTc3Jz4+npSUFNzd3YmOjubq1atcv36dvXv34uDgQJMmTbh69SpRUVFUq1aNkydPEhkZSVZWFpqmcenSJXbs2EHHjh0ZOnQo+vr6HDp0CAB9fX1OnjzJ33//TV51LCcnJ8zNzdmyZQtbt26lVatWnD17Fju73LybmzZt4vr166SnpxMaGoq3tzc+Pj6EhoaSlpZGamoqq1evxsfHp9BnYGBgQGZm5mN/7kIIIZ4OmeYWohSEHo5n6obTnNwUiQkZuB6O16Uf2h39D/mrnJYzMqVceSP6vvoKVQyyeP3112nWrBnZ2dlcunSJW7duUbFiRcaOHcv69etRStG6dWvat2/PL7/8QlpaGuvXrycyMhI9PT2WLVtGTk4Or7zyCgYGBmRlZTFmzBgAqlatSqdOnbhx4wYtWrQo0Ofq1aszcuRI4uPj+e233zAyMgJyR0q7d+/OxYsX6d+/Px4euZXFAgMD8fLyAmDIkCG4uroSFxd3z7MYNmwYTk5OuLm5sWTJksf9qIUQQjxhUptbiIcUFxdHhw4dcHd359ChQ9jb27Nw4UL27t3LBx98QFZWFp6ennz//fcYGhpibW1NWFgYJiYmBAQEUM+jFdtwIjFiMzf3LiMr+QqVHFox55sZfDakC1ExsZQzrIBW3ggDsxroVa5GxtlwND197GpZEBISgoODAwMHDmTlypXY29vTunVrYmJieO2111i7di2JiYlcunSJgIAArl69yqpVq0hNTaV+/fpcvHiR3r17s3v3bpo0acLixYuJjY1lwoQJrFy5EhsbG2rWrEmdOnX473//y9y5cxk5ciRWVlZ0796ds2fP8ueff5KamkqHDh04c+YMVlZWBAcH06VLF06cOMHAgQO5c+cOOTk5rFy5kgYNGpT21yaEEI+d1ObOJdPcQpTA6dOnGTVqFCdPnqRSpUpMnz6dwMBAli5dyrFjx8jKyuL777/XHZ+SksJrr71Gnz59OGLiwc1LcaSd3EGNgbOp1KQ7N0/uZEj3djg6OkJOFpW9+6JXwZzbl6JIj95P9cBvsH9zkm5kb86cOWiahpWVFb/++ivLly/H1taWiRMn6tL27N69m6VLl2Jvb4+pqSnGxsacOHECTdPw8vIiKiqKUaNGUaFCBerWrcsHH3xA/fr1OXr0KBkZGVy8eBE7Ozvee+89zM3NGTNmDJcv/+/dzS+++IJGjRrRs2dPtm3bxrhx40hNTWXu3Lm8/fbbREREEBYWRq1atZ7mVyOEEOIpk2BSiBKoXbs23t7eAPTv358tW7ZQr149bG1tAXjzzTfZsWOH7vguXbowcOBABgwYQEJSOunnIrhzJYZLC98l7cwe9EzMKf9yc86dO4eevj5Vm3SmxoD/UMmjM5XcO1PRrAqfDuiAvr4+Hh4e7Nq1iyFDhhAXF0fDhg2pW7cu/fv3Z/Lkybz55pvs3LmTatWq0bhxY5o1a0ZCQgKQ+35i3ohi3qrqlJQUAPbt20f58uVxdXXl5MmTuuDYw8OD69evExQURP/+/XX3tHHjRvbs2cOuXbvw9fUlIyOD8+fP06xZM7788ku+/vprzp07h7Gx8dP6WoQQQpQCCSaFKIbQw/F4T9lKvaC1dP9+DxmZOQX2m5mZ3fd8b29v3fuMVma5wZWJQ2usBs7GwMIaTb88mTH76N69O0aGhkzp7kRNM2PQNCqbVuCrAEcC3GuTlZX1wL4aGhrqftfT0yvynPyrqmNjY5k2bRpbtmzh6NGj+Pv7k5GRcd92lFKsXLmSiIgIIiIiOH/+PI0aNaJv376sWbMGY2NjOnbsyNatWx/YZyGEEGWXBJNCPEDo4XjGrzpGfFI6CrhyM4PEy/FMCVkDwC+//IKHhwdxcXG6NDyLFi2iZcuWumt8/vnnmJub89ZbbzHOzw6z+q6knd5NdmoSlp3HYf3G18xcsJzx48cD/6sN/k5bW0a3fvme2uA+Pj66xSpnzpzh/PnzutXVRbnfqumbN29iYmJC5cqVuXLlCuvWrQOgYcOGxMXFERMTA8Cvv/6qO8fPz4/Zs2frVn0fPnwYgLNnz2JjY8PYsWPp0qULR48effBDFkIIUWZJMCnEA0zdcJr0zOwC2/RfqsV/vplFo0aNuHHjBu+++y4LFiygZ8+eODo6Uq5cOUaMGFHgnG+++Yb09HT2/PoN04d3wqbDYK4s+4TEn8eQvXYSTlWKvxhu1KhR5OTk4OjoSK9evQgJCSkwIlmYvFXThZUtdHZ2xtXVlYYNG9K3b1/dFL6RkRHz5s3D398fNzc3qlatqjvnk08+ITMzEycnJ+zt7fnkk08AWLZsGQ4ODri4uHD8+HEGDBhQ7PsSQghR9shqbiEeoF7QWvL/LclKvsLVFZ9Rc/B3xE7xL7V+CSGEKF2ymjuXjEwK8QB57zgWd7sQQgjxIpFgUogHGOdnh7GBnu6zfuVq1B/xA+P87v+OohBCCPEikAo4QjxA3uKXqRtOk5CUjpWZMeP87O5ZFCOEEEK8iCSYFKIYurrWlOBRCCGEKIRMcwshhBBCiBKTYFIIIYQQQpTYIwWTmqb11DTthKZpOZqm3bM0XtO0OpqmpWia9sGjtCOEEEIIIZ5NjzoyeRwIAHYUsX86sO4R2xBCCCGEEM+oR1qAo5Q6CaBp2j37NE3rCsQCqY/ShhBCCCGEeHY9kXcmNU0zBT4CPnsS1xdCCCGEEM+GB45Mapq2GaheyK4JSqnfizgtGJihlEopbNTyrusPA4YB1KlT50HdEUIIIYQQz5AHBpNKqbYluG4ToIemaf8HmAE5mqZlKKW+LeT684B5kFubuwRtCSGEEEKIUvJEkpYrpXzyftc0LRhIKSyQFEIIIYQQZdujpgbqpmnaRaAZsFbTtA2Pp1tCCCGEEKIseNTV3KuB1Q84JvhR2hBCCCGEEM8uqYAjhBBCCCFKTIJJIYQQQghRYhJMCiGEEEKIEpNgUgghhBBClJgEk0IIIYQQosQkmBRCCCGEECUmwaQQQgghhCgxCSaFEEIIIUSJSTAphBBCCCFKTFNKlXYfdDRNSwTOPcIlLIBrj6k7onTId1i2yfdX9sl3WPbJd/j01FVKWZZ2J0rbMxVMPipN08KUUh6l3Q9RcvIdlm3y/ZV98h2WffIdiqdNprmFEEIIIUSJSTAphBBCCCFK7HkLJueVdgfEI5PvsGyT76/sk++w7JPvUDxVz9U7k0IIIYQQ4ul63kYmhRBCCCHEU/RcBZOapk3VNO2UpmlHNU1brWmaWWn3SRSPpmkdNE07rWlatKZpQaXdH/FwNE2rrWnaNk3TIjVNO6Fp2tul3SdRMpqm6WmadljTtD9Luy/i4WmaZqZp2op//y08qWlas9Luk3j+PVfBJLAJcFBKOQFngPGl3B9RDJqm6QFzgFeBxkAfTdMal26vxEPKAt5XSjUGmgJvyXdYZr0NnCztTogS+wZYr5RqCDgj36V4Cp6rYFIptVEplfXvx31ArdLsjyg2LyBaKXVWKXUH+A3oUsp9Eg9BKXVJKXXo399vkfsPWM3S7ZV4WJqm1QL8gf+Wdl/Ew9M0rTLQAvgJQCl1RymVVLq9Ei+C5yqYvMsgYF1pd0IUS03gQr7PF5FApMzSNM0acAX2l25PRAnMBD4Eckq7I6JE6gGJwIJ/X1X4r6ZpJqXdKfH8K3PBpKZpmzVNO17IT5d8x0wgd9ptSen1VIgXj6ZppsBK4B2l1M3S7o8oPk3TOgFXlVLhpd0XUWL6gBvwvVLKFUgF5B108cTpl3YHHpZSqu399muaFgh0AtooyXtUVsQDtfN9rvXvNlGGaJpmQG4guUQptaq0+yMemjfQWdO0joARUEnTtMVKqf6l3C9RfBeBi0qpvFmBFUgwKZ6CMjcyeT+apnUgd4qms1IqrbT7I4rtINBA07R6mqaVB3oDa0q5T+IhaJqmkfue1kml1PTS7o94eEqp8UqpWkopa3L/Dm6VQLJsUUpdBi5ommb376Y2QGQpdkm8IMrcyOQDfAsYApty/21jn1JqROl2STyIUipL07TRwAZAD5ivlDpRyt0SD8cbeAM4pmlaxL/b/p9S6q9S7JMQL6IxwJJ//4/5WWBgKfdHvACkAo4QQgghhCix52qaWwghhBBCPF0STAohhBBCiBKTYFIIIYQQQpSYBJNCCCGEEKLEJJgUQgghhBAlJsGkEEIIIYQoMQkmhRBCCCFEiUkwKYQQQgghSuz/Aw2vyiLb2oSdAAAAAElFTkSuQmCC\n", "text/plain": [ - "
" + "
" ] }, - "metadata": {}, + "metadata": { + "needs_background": "light" + }, "output_type": "display_data" } ], "source": [ - "plt.figure(figsize=(10, 10))\n", + "plt.figure(figsize=(10,10))\n", "plt.scatter(tsne_df[0].values, tsne_df[1].values)\n", "for i, txt in enumerate(tsne_df.index):\n", - " plt.annotate(txt, (tsne_df.values[i, 0], tsne_df.values[i, 1]))\n", + " plt.annotate(txt, (tsne_df.values[i,0], tsne_df.values[i,1]))\n", "plt.show()" ] }, @@ -5835,69 +19851,40 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 69, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXkAAAD4CAYAAAAJmJb0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nO3deXxU5b348c93lqwkEEhYBCJriyiLEHfE2gJSlypoUate297Kq9Yq1i7qT1u1q4pLbfVqudbqta24XS8opYpbxR1QQcWlihoFhAARJuss5/n9kQRIMiEzmTlzlnzfrxcvnTOTc74zyXzPc57zfZ5HjDEopZTyp4DTASillLKPJnmllPIxTfJKKeVjmuSVUsrHNMkrpZSPhZwOYG/l5eVmxIgRToehlFKesmbNmm3GmIpkz7kqyY8YMYLVq1c7HYZSSnmKiHzS1XPaXaOUUj6mSV4ppXxMk7xSSvmYJnmllPIxTfJKKeVjmuSVUsrHNMkrpZSPaZJXSikfc9VgKKWU6qlIJEJtbS3xeJxQKERZWRklJSVOh+U4TfJKKc+LRCJs27aNtkWQ4vE427ZtA3Blos/lCUm7a5RSnldbW0vHVe6MMdTW1ib/gXgcHngAzjwTfvADeP31HETZou2EFI/HW0NpOSFFIhFbjqcteaUcFI/Dpk0wYAAUFzsdjXe1JcyUtsdiMHMmZvVqpL4eEwxi/vIXotdeS8GCBTZHuu8Tkh2teW3JK+WQP/0JyssN48ZZDBhgcc45EbZvt6c153ehUPL2atLtDzyAWbUKqa8HQBIJAk1N5F16KZHPPrMzTCDNE1IW2J7kRWS2iLwnIh+IyGV2H08pL1iyBC65xLBzp9DYGKC5OcBDDxVz0UXGtst2X4nH4bHH4A9/gJUrKevXDxFp9xIRoaysrPPPPvgg0tDQabMJh2l64gm7It4trRNSFtia5EUkCNwGfB0YD5wpIuPtPKZSXvCrX0FDQ/uk1NQU4OGH+7Bp0xeOxBSJRKiurmbDhg1UV1dn72RjDNx5J4wbBxUVcPrp8OGHPd/fxo1Yo0djnXEG1k9/ijV7NkWzZlFeVLQ7UYZCIcrLy5N3f5SWYjqcENrE8vJ6HleKysrKUj8hZYHdLflDgQ+MMRuMMVFgMXCyzcdUyvU+/TT5dhHYts3KbTDYfDPw0ksxCxbAe+/Btm2Yhx7CTJ3a9YfQjfjZZyMbNxKorycQjRJoaEDeeIO8666jsrKSUaNGUVlZ2XX/9vz5mIKCztvz8ogfeWSPYkpHSUkJ5eXlqZ2QssDuJD8U2Ps3+Vnrtt1EZL6IrBaR1TU1NTaHo5Q7HHYYiJhO2/PzDUOGJG9l2int6pTUd4z54x/bdY+IZUFDA9Hf/S79/dXXE3z+eSSRaLc50NxM6K9/TW0f06YRvfRSrPx8rOJiEn36kCgr4/O776asIuniSllXUlKS2gkpCxyvrjHGLAIWAVRVVXX+q1fKh37zG3jqKWhsNBjTktQLCy0uvXQHFRXdX7Znu87atpuB69djwmGkqandZonF4Lnn0t9fh+TeThqxFlx1FXXnnEPT8uXEioqITZ9O2cCBtiRbpwdp2Z3kNwLD93o8rHWbUr3ahAnw8svCZZfFePXVAPvtF2PBggjf/GZBtwnAjoE/oVAoaULP+GZgZSVEo502GxFigwaRdg94aSnRAw8kb906ZK8rDxMK0XD88aTz7vuMGkWfCy5IN4K0uGGQlt3dNauAsSIyUkTygDOApTYfUylPmDABli0LU1MTZO3aAr773YqUvvh2dK3YdjNw+HCajjwSq+MNTWMoXLmS5ilTqPvgg7R2Gb/zTqzSUqzCQgCsoiLi++0Hv/51ZrHawLZusDTY2pI3xsRF5IfA40AQuMsY87adx1TK7+zoWmk7udjRrZD4299o+P73Kf7HPyAeR6DlXyxG3rp1cMopRF56KeVjFVdVEXnrLWJ3303gww+JT55M/llnUVJennGs2ZbrmvhkpONZxklVVVVm9erVToehlKtVV1d32bVSWVnpQETdi0QiBE4/naLly+l4W9kqLGTLkiUMmTnTkdjslKvflYisMcZUJXtOR7wq5TG5rrPOhpKSEoojkU4JHlr6083nn+c8plxww+9Kk7xSHpP1Outdu+C66+Coo2DuXPjXv7IY7V5mz8bKz++0WaJREpMnp7Ur2wZuZVmua+KTcbyEUimVvpKSkuwkil274OCDMZs2IU1NGMD8859Ef/lLCn7yk8z3v7cLLoDbb8eqqSHQWnFjFRbyxfnn02/EiJR344aKlXRk7XfVQ5rklerNbr99d4KH1huijY3k/fznRM46i5IhQ7J3rH79CKxdS/Pvfoc89hiJsjLqvvc9CubNSysJ5noWx+44XQffHU3ySrlIzhPGkiWdBipBa935ypWUzJuX3eMNGED+DTfADTcAUNiDXbihYqWNF64qNMkr5RKOJIxBgzDQ6YaoJBJEbU5SPT2h2TZwqwfcdlWRjN54VRnzyk0wt3Nk4MyCBZjC9u1pQ0sN++Af/ACuvz7piNVMZTIhWlcVK4WFhTn/O3TTVUVXNMmrjOR6KTO3eecdmDkT8vOhf3+4/PKe50RHEsZXvkL0mmuwCgpIFBe3TMErgsTjhD/+GOuqq4gff3zLdMF7MwYefhhmzYLp01tWQEnjjWdyQktWsdKnTx/q6upy/neY67nhe0IHQ6mMdDXY4/PP83n55aEkEnDyyfClLzkQnM02boTx4yES2TPJWEGBxcyZCZYuDae9PycHOUU2bSKxcCGld9xBoEMfvVVYSOOyZRQfe+yejeefj7n33t2rK1mFhVgHH0zouecgGOz2eBs2bOjyuVGjRqUdv1OfXccuNmi5qsh1maQOhlK2SfbFuu++Er761SFcfrnFFVcYJk60+MUvmh2Izl633gpNTXsSPLQs/PHEE0HWratLe39ODpwp2W8/+llWpwQPgGXRvHLlnsfvv4+5++7dCR4g0NhI4I03aHzwwZSOl+0WsFPdJm6og++OJnmVkY5fys8/D/KrXw2guTlANBogFhOamwMsXBjm1Vfru9iLN61aBdFo5zGceXmGNWs6Ly/XHccTxsiRWMkW0wiFiA4cuOfxv/6VdGWlQEMD8WXLUjpUtk9oTnab5HJu+J7QJK8y0vHL+uSTxSRbWS0WExYvjuUwMvtNngzhcOfuzlhMqKxM0iJOgaMJ45xzoENSNIEAVnEx0b3nlRkwAAKdU4cVDhMbMCClQ2X7hOaG6QPcSpO8ykjHL2sgyZe/TSKR+2Xt7HThhS2t9r3l51scemgTY8c6FFQmBgygcdkyYiNHtqyalJdH84EHsvmBByjbuyV//PGYcJhOp7dgkMY06uqzeUJz/CrIxfTGq8qqjRth9GiL5ub2yb6gwOLRR7cwY0YWR1C6wPPP13PhhUHWrs0nP98wd26EK6+sZdiwAZ5NMJFdu9j1zjvERZDBg5PWr9e/8AL5p51GYNcuCAQwItTcdBPFp5/e6bVuHxHqB/u68apJXmXdLbc0cemleRgDxgiBgOGCC77g6qvDvvxyt1RY1GJZccLh3pPEIjt3Ur9yJYmGBhJTplA2aFDSBO+G6pOOMfntpKNJXuXcW2/VsXhxjFjMYvbsZqqq7J+kyY9f3o689h7dNve9G0862bCvJO+ein3lKwcd1Cenq7F5YQ6RTHnxPWa7tHFX8y4eXv8wW+u3csyIYzhs6GGdbrjuixemIcg2TfLKF3rDl9eL7zGb88ys2riKr/3P10hYCaKJKOFgmGP3P5al31pKMND9ACzwxjQE2WZbdY2ILBSRd0VknYg8IiL97DqWUr3hy+vF95it0kbLWJyy+BQi0QgN8QbiJk5jvJFnPn6GO16+I+X9eGEagmyzs4RyBXCQMWYi8D5wuY3HUjbywgRkveHL68X3mK3Sxje3vMkXTV902t6YaOSuN+5KeT+9sZ7etr8OY8wTez18GTjNrmMp+2TcD/zFF3DbbbB8OQwbBhdfDIcfnvU4y8rKkt5Q89OX16vvMRsrI5nOVfm7WSb18RdtcXjp5nWmctUE+C5wf7InRGQ+MB9w7UrzvVlG/cA7dsDkyZiampal5UQwS5fSfNNNFH7/+1mNszd8ee16j16o2Jk4aCJ9wn1oiLefLqIwWMi8sektbOL0cny5llEJpYg8CQxO8tQVxpglra+5AqgC5ppuDqYllO6T0WyBV16JWbgQ6TAFrVVcTP3HH1NSXp6NEFUGvFRSuOLdFcx5eA4Jk6Ap0URRqIgpFVNYMm8J/fv1dzo8R9lWQmmMmdHNgb8NnAh8rbsEr9wpo+qIRx/tlOABEKHulVcoOeGELESoMpHJldo//gE33ww1NXDCCXDJJS3T2thl5riZvH3e29z7+r1srd/KEfsdwQnjT6C0tNS+g/qAbd01IjIb+BlwjDEm/Sn5lCtk1A/cVUs9FiPWp0/Sp7zQdeAnPa3Yue46+OUvDQ0NLTcx33nH4p574M03A9h5i2D/gftz5XFX2ncAH7KzuuZWoARYISJviEjqdU7KNTKqjvjRj7A6Li0XDBI94AAYObLTy3v7KlNO6EnFzq5dcPXVexI8QDQaYNs2uOkm76wbsKNxBwtfWMjpD57Ob1f+lpr6GqdDsoVOa+BiVtxi8+ubCYaDDJo0KK2RfW7RdNVV5F13HSYvD4nHiY0cyZa//IWyAw7odKJw2xD43iBZnzy0zCZqWVbSq6lnn4VvfMMiEuncRpwypZk1a/LtDrtb3V0RbqjdwKH/fSgNsQYa443kB/PJD+bz9LeeZur+Ux2MvGd0WgMP2vDUBh6c9yCJ5gTGGPL65jHn/jmMOXqM06GlpeCaa4h873s0PP880bIyzPjxXXbBeHGwj9d1rNgREYwxWFZLWWKyktlBgyDZr0TEMGhQDHA2yadS9nvR8ouobardXX7ZnGgmmohywfILWHHWCl91Eep88i4U2Rzhvm/cR9OOJmL1MeINcRo2N/DgiQ+yY8sOp8NLW8nw4Qw680yGz569z3nDvTjYxw/2ntc9mGR91o4LbB9wAIweHSMYbN/6LygwfO976S97mG2pLBL+5IYnO9XXGwyrtqxi+47tOYkzVzTJu9C6v67DSrLAhpWwWPfAOgciyo1cjkbctg2uuAKmTIETT4Rnnsn6ITwp1aupRx6JMWFCMwUFFn36JCgutrjqqu3MnFmcizD3KZX3kB9KfrURCoRIxBO2xOUUbSI5LFnfYf2WeqzmJEk+ZlFf4691UveWqwFNNTUwaRJs326IRoXXXzc8/bTht7+NcvHFSdY47UVSLZkdM6YPzz0XYe3a7WzbZhg/3mLIEHdUQqXyHs6ddC6L1iyiObHnRnFeII+TRp5EOBzOSZy5okneAXsn9r219R0OPmIwoaIQ8Yb2z0tQGHrU0FyGmnO5GI144417EnwLobFRuOKKPL71rQgDBzqfqJySTslsSUkJ06a577NK5T1cO+Na3tj8Bqs3rSYgASxjMa5sHL845BeunyYiXZrkc6yraoY2xhj6Tu3L4CmD2bxmM4nGlkvHUFGI4TOGM/rI0bkM15eWL2evBL9HIGB45ZV6Tjop/cTll/p+P0wPkcp7KAoX8dx3n+P5D59ndfVqRvQZwcEDD6Z///6eeq+p0CSfY8luCnWUsBJ8+6lv89J/vcS6e9chIWHcmeOY+p2pvvsDdMKQIbAuya2NWEzo2zfJCN1ueHExj33xw9wuqb6HaaOnMW30tBxE5BxN8jmWSjlgKBQimBdk2sXTmHaxv/8AnXDJJfDccxaNjXvqDkIhw0EHNTNiRPr78+JiHqr30OqaHOuuHNALU8d63axZcM01UQoLWypDCgosJk5s4o47tvbos9f6/j28sPZAb6Mt+RxLdlOojRf7P73qpz8t4JxzIrz0Uj1lZVFGjYKysp71x2ZziTsv81u3lV/0rr9CF/DDjS2/GDy4hDlzMv/cvbqYR7Zpt5U7aZJ3gB9ubKk9vHDiNsZgGYvGhiBLlkBtLXz1qzB+fPaOod1W7qRJXqkscOuJO2El+PmKn3PrmluJxCLIji+R99Qt8MEsROCMM+LcdVce2Zj7Trut3ElvvCrlYwuWLeD3q35PJNZyA9T0f5/mk+fSXPEKTU0BHnggxOLFjVk5Vm9cJNsLNMkr5VN10Tr+vPbPNCY6JPFwI3zlGgAaGgLceWd2jpfR2gPKNnodpZRPbYpsIiBJ2nECVKzf/bC5OXtrSri126o305a8Uj41rHRY8tHVlsDnkwAoLLQ47TRdndPPNMkr5VNF4SIumHoBhcH2SzASL4Rnr6KoyOLQQ5s491znV3JS9rG9u0ZEfgzcAFQYY7bZfTyl1B7Xz76e8qJybnrlJmqbaxnd5wAO3vI7io4fw7HHbuPEEwvp29c73SvVO6vZHNnM+IrxlOR7J24n2brGq4gMB+4ExgFTu0vyusarUiqZnU07mXPfHF7c+CLhQJi4Fednh/+Ma2Zc43RoruDkGq83Az8Dlth8HJUDfplOV3nPmQ+eyQufvUDUiu5e6GPhywsZWzaWs6ee7XB07mZbn7yInAxsNMastesYKnfa5iVpG+zSNi+JTkCl7LatYRtPffwUUav9NNCNiUZufPnGnMfjtUnYMmrJi8iTwOAkT10B/D9gVgr7mA/MB6isrMwkHGUjnZdEOWVH4w5CgVCnJA9Q01iT01i8OAlbRkneGDMj2XYRmQCMBNa2joAbBrwmIocaYz7vsI9FwCJo6ZPPJB5lH52XRDllVNkowoHO664GJci0Ibldb8GLjR1bumuMMW8aYwYaY0YYY0YAnwFTOiZ45R1dzT+i85Iou4UCIa4+9Op2paDhQJiScAk/nPjDnMbixcaO776hHW8OFhYW0tjYqDcLM6TT6SonzR07l/2K92PR24vYWLeRIwYfwXkHnsfQ0twubO/FSdhyEllra952NTU17W6CxOPxTo/d3n/mVl6YTlfl1qc7P+XC5Rey/IPlhAIhzjjwDG487kb6FfTL+rHKyso4JHEIVQP3VAk60cjwYmPHvaefNEUikZTucru9/8zNsjUviZZiel9dtI5D7zyUmvoaEiZBNBHl3nX3smrjKtaev7bTbJSZcksjwy1xpMM3Sb62tjbl17q5/8zvvFidoDr7+5t/Z1fTLhImsXtbzIrxYe2HLH9nOcePPz7rx2xrZOzaBS++CH37wmGHQSDHk7N4bRI238xdk07idnP/md/tqzpBecfaz9fSEO88sVnCJHjt09dsO+7tt8OgQYZ58yxmzrQYPjzO6tX1th3PD3yT5FNN3G7vP/M7L1YnqM4mDJpAYaiw0/agBBnRZ4Qtx3z1Vfjxjw1NTUIkEqC+PsDmzUFOPDGfnTvdPSDJSb5J8slWpQHIz8/XRQxcREsx/eGsCWdRFCpqN199OBBmeJ/hHD3saFuOefvt0NTUfpsxQl1dgCee0OmSu+KbJJ9sVZqKigqGDh1KZWUlo0aNorKyUhO8w3SJOH8oyS/h2bOe5eghRxOUIHmBPI7f/3gWH7eY/v3723LMmpqWpN6RiKG2VsdRdsVXzSev3RDpjbxYnaCSO2jYQTx6xqPs2LGDeDxOOBy29Xc5dy48/bRFY2P7tmksJhx+uHb3dcVXSV5ll12ljnoy9o9c/i7POgv++EfDe++1JHoRQ0GBYcGCWkaO7JuTGLxIk7xKSksdldvk58NLLwVZtKiJhx4y9O2b4D/+o57Zs4v0b3IfNMmrpLw4EZPyv4ICuOiiAi66qG1Lnx7tpzcNyNMkr5LSUkflV73tKtU31TUqu7TUUflVbxuQp0leJaWljsqvettVqjbLVFJa6qiyzS394F6cLjgT/nxXKiu01FFli5v6wb04XXAmtLtGKWU7N/WDJxsd7+fpTrQlr5Syndv6wXvTVaq25JVSttNqLedokldK2U6rtZxja5IXkQtF5F0ReVtErrfzWEop9+pt/eBuYtu1kogcC5wMTDLGNIvIQLuOpZRyv97UD+4mdnaInQ9ca4xpBjDGbLXxWEqpLrilPl05w84k/yXgaBH5DdAE/MQYs6rji0RkPjAfoLKy0sZwlOp93FSf7mVePlFmlORF5ElgcJKnrmjdd3/gcOAQ4AERGWU6FMsaYxYBiwCqqqp0eRelskhnE82c10+UGSV5Y8yMrp4TkfOB/21N6q+KiAWUAzWZHFMplTq31ad7kddPlHZW1/wfcCyAiHwJyAO22Xg8pVQHWp+eOa+fKO1M8ncBo0TkLWAxcG7HrhqllL20Pj1zXj9R2halMSYKnG3X/pVSe3R1Y1BnE82c1yc088apSCnVpe5uDGp9ema8fqLUJK+Ux3n9xqAXePlEqXPXKOVxXr8xqOylSV4pj/P6jUFlL03ySnmcVtCofdFTvVIe5/Ubg8pemuSV8gEv3xhU9tLuGuU7zfFmrnz6SgbdMIjS35Vy+oOnU72z2umwlHKEtuSV75z6wKk89dFTNMWbAHho/UM8/dHTvH/h+5QVdt9P7eUZB5XqSFvyylfW16zn6Y+e3p3gASws6qJ1/NfL/9Xtz7cNLGorP2wbWBSJRGyL2c8ikQjV1dVs2LCB6upq/RwdoC155SvrtqwjIJ3bLk2JJp7/5Pndj3c27eT/3v0/6mP1zB4zm1FlowAdWJSpva+CRKTdZ+m1KXr9QpO88pXRZaM7JWmA/EA+Y0vHArDiwxWccv8pYMAyFpc8fgkXTr2QhV9fqAOLMtBxeoVkvwc9YeaedtcoX6nar4ox/cYQDoTbbQ8FQpwz/hwaYg3MvX8uDbEGGuINNCWaaE40c9ua23ji3Sd0YFEGkl0FJaMnzNzSJK98RUR4dN6jzBo+i3AgTFCCHNT/IBYft5hxQ8ex4sMVSX+uKdHEXa/dpQOLMpBq8tYTZm7pp618p7KikvtOvY8t27bQHGumpKBkd4VMzIol70bA0Bxv7vHAIq9U5MQSMX75r19yx+o7qIvVccz+x/D72b9nXPm4jPcdCoW6TfR6wsw9TfLKl7oaHDRj1AwSJtFpe1GoiFPGnLLPn+2Kl9YAPfuRs1n63tLd1UdPfPgEh/33Yay/YD1DS4dmtO9k864DBAIBLMty9cnPz7S7RvUq/Qr6ccvMW8gP5hMOhBGEwlAhM4bPYM5Bc3q0z31V5KRrS90WXt34KrWN6f9sdz754hOWvLukXXmpwdAUb+KGlTdkvP+SkhLKy8t3d8eEQiEqKioYMWIEo0aNorKyUhO8A7Qlr3qd+YfN57D9DuOe1+4hEo0wa/9ZHDfuOEpLS3u0v2xU5DTHmzn7obNZ+u+l5AfziVpRvjvxu9x60q1JS0J7Yn3NevICeTQnmtttj1pRXvnslawcQ6dXcB/bkryITAbuAAqAOPADY8yrdh1PqXRMGj6Jm4bflJV9ddUXnc4NxgXLFvDYB48RtaJErSgAd6+7m8rSSi77ymVZiXPsgLG79723sIT5cr8vZ+UYyn3s7K65HrjGGDMZ+EXrY6V8J9OKnISV4J4376Ep0dRue2OikT+s+kPW4hzTfwyHDz6c/GB+u+3hYJj/POg/s3Yc5S52JnkDtF3/9gU22XgspRyTrC+6vLw85W6L5kQzMSuW9Lkvmr/IWpwA98+9n7mj5pIfzEcQDup/EH+f9XcmVU7K6nGUe0gqgxd6tGORA4DHAaHlZHKkMeaTJK+bD8wHqKysnPrJJ51eopTvjbp5FB/t+qjT9mlDprFy/sqsHisSibB9x3aaY80U5hVqxYsPiMgaY0xVsucyasmLyJMi8laSfycD5wM/MsYMB34E/DnZPowxi4wxVcaYqoqKikzCUcqzbpl1CwXBAgKtX8mgBCkKFXH9jOz3chYVF/HU9qc499lzOfWfp3LPO/cQTXTuq1f+YGdLfifQzxhjpKXDcqcxZp/lC1VVVWb16tW2xKOU273w4Qtc+/y1vP/F+0yumMzl0y5ncuXkrB9n7v1zefyDx2mINwBQECxgUvkk/jrzr+SF87Rl70H7asnbWUK5CTgGeBb4KvBvG4+llGP+vf3fbIxsZOKgifQv7N/j/Rw1+igeHf1oFiPrbNXGVe0SPLRM6fDm9jd5fvPzTN9vumsHcqmesTPJnwfcIiIhoInWfnel/GJH4w5O+OsJvLHlDcKBMFEryoVTL+T62dd3qrZxi5XVK4lbncs9G+INvPL5K0zfb7rOFOkztiV5Y8zzwFS79q+U0+bdP481n68hZsV2lz/e9tptjC8fz3cO+Y7D0SU3sHggoUCoU718QbCAisI998R0pkj/0GkNlOqBmvoaVn66slPpY2O8kZtfudmhqLo3Z9wcQoHObbuABDhp5Em7H+tMkf6hSV6pHvii6YukyRJgR9OOHEeTuuK8YpbNW8bQ4qEUhYooChVRUVDBXV+9iwEFAwCdKdJv9HStVA+MKhtFfjC/3Q1MgJCEOHb4sQ5FlZppo6exfv56Xv3oVZpjzYzrP45gIKgzRfqUJnmleiAYCPKHmX/gvOXn0ZxoxmDIC+RRklfCz6f/3OnwulVaWsqMSTOcDkPlgCZ55Wp2L8aRyf7Pnno2lX0rufHFG6mOVDNtv2lccuQljBw0MmvxKZUpTfLKtexejCMb+58+ZjrTx0zPOBal7KI3XpVrZXMxDif2r5QbaJJXrpWNxTic3L9SbqBJXrlWV7Xa2arhtnv/SrmBJnnlWpkuxuH0/pVyA22yKNdqu/lpV3WN3ftXyg00yStXs3thaF14WvmdJnmlPMDu8QLKvzTJK+Vydo8XUP6mN16Vcjmt51eZ0CSvlMtpPb/KhHbXKNUq3X7vXPWTh0KhpAld6/lVKrQlrxR7+r3bkmlbv3ckEsnK6zOh9fwqExkleRH5poi8LSKWiFR1eO5yEflARN4TkeMyC1Mpe6Xb753LfvKSkhLKy8t3t9xDoRDl5eV601WlJNPrvbeAucCf9t4oIuOBM4ADgf2AJ0XkS8aYRIbHUyol6XalpNvvnet+cq3nVz2VUUveGPOOMea9JE+dDCw2xjQbYz4CPgAOzeRYSqWqJ10p6c5jo/PeKK+wq09+KPDpXo8/a92mlO160pWSbr+39pMrr+i22SEiTwKDkzx1hTFmSaYBiMh8YOVLr/4AAA0OSURBVD5AZWVlprtTqkddKenOY6Pz3iiv6DbJG2N6shDkRmD4Xo+HtW5Ltv9FwCKAqqoqk+w1SqWjpyWH6fZ7az+58gK7OhCXAn8XkZtoufE6FnjVpmMp1U5ZWVm7aQDAvV0pvWlOmk2rN7Hq9lXUb6nnyyd/mUnnTCJUoPcw7JbRJywic4A/AhXAMhF5wxhznDHmbRF5AFgPxIELtLJG5YpXulJ605w0r/35NZZfuJx4cxws+Ojpj3jlj69w3svnES4KOx2er0nHG1ROqqqqMqtXr3Y6DKVyorq6ustuJTfdn8r0aiNaH2XhwIXEG9q/12BhkGN+dQxH//jobIfc64jIGmNMVbLndMSrUg7xwpw02RjZu/GVjUhQOm1PNCZY/+D6rMWqktMk73exTVBzFWycBztuhsROpyNSrbxQa5+Nkb35pfmYRPIeg3Bf7aqxm3v+mlT2Na3BfPIVjIkSIIoVeQy2XUdg5BoI9+5hC9m84dnTfXnhBnE2rjaGTB1CYXkhkU8jsFeuDxYGGX/u+ExDVN3QlryPJT77NmLqCBAFIEAjYm0jtumnDkfmrGxOLpbJvrwwJ002rjZEhNMeOY3iIcWEikOE+4QJ5AWY+MOJHHjSgdkKVXVBW/J+ldhFIP5up81CgkDjPxwIyD321QWRboLNdF9ur7XP1tVG5ZRK5q+fz3tPvkfD9gaGHDqEIaOHuPq9+4Umeb+SMND5ZheAoSCtXfmtljubNzztunnqls88m+WopX1LOeTUQ7IdouqGJnm/ChTSGDiWQusZhNjuzRYF1IW+Rb8Ud+O1Wu5UkmM2F+GwY0EPt33mbr/aUPumffI+lhj4J6IyBosiEhRjUUBj4EiCA69IeR9eWl801f7xbE4uZsdEZV76zJX7aUvex0r6jSASeJna7U8j8Y9JhA+iZMBhabXKvFDL3SbV/vFsdkHYMbrWS5+5cj9N8j5XUlpKSekpPf55L60vmk5yzGYXRMd9JaIJtqzbQmH/QkqHlaa9Py995sr99K9G7VM2a7ntvpnohuT4xv+8wfIfLsdYhkQ8QcXkCubcN4dBIwelvA8v1M8r79A+ebVP2arlzsXC104v5PHpi5+y7PvLiEaixOpjWM0WW9ds5aG5D6X1Pr1QP6+8Q1vyqlvZ6NrIZm16V5yeffKlm18i3tT+SsLEDbXv1vLxmo+Z8JUJKe9LK1pUtmiSVzmRq5uJTibHXZ/uajdsv00gHKDu87rcB6QUmuRVjqTTX+6WgUDpGj1rNJtf34wVtdptt6IWFRMqHIpK9XbaJ69yItX+8kz77iORCNXV1WzYsIHq6uqs9vl357AFh1HYv5BAeM/XKlgYZOKFExlUmfqNV6WySVvyKidS7S/PpO/e6ZGiRQOKOH/t+Tzz62f4YPkH5PfPZ8L8CUyaN8kTVyLKnzTJq5xJpb88k777XNzc7U7xwGJO/MOJOTlWJra+vZXnfvkcm1ZvYsCXBjD959MZfuRwp8NSNtAkr1wlk1p3HSmams2vb+YvR/+FeGMcYxlqN9Ty0bMfcdI9JzFp3iSnw1NZllGfvIh8U0TeFhFLRKr22j5TRNaIyJut//1q5qGq3iCTWncvrLTkBit+soJYfQxj7bnqSTQlWHHJCnbt2uVgZMoOmd54fQuYCzzXYfs24CRjzATgXODeDI+jeolMBgI5PRjKKza+ujHp9oYtDdR8VpPjaJTdMmriGGPeATp9sYwxr+/18G2gUETyjTHNmRxP+U9X5ZJumSzMj4oHFhOti3baHggFMKHka7Eq78rFdeypwGtdJXgRmQ/MB6isrMxBOMoOPaltt6MaRkeKdu+onx3FP3/0T+KNe+5VBAuCjD1zLHkFeQ5GpuzQbZIXkSeBwUmeusIYs6Sbnz0QuA6Y1dVrjDGLgEUAVVVV2ozwoJ4mazdUw7Tx6gCsnpgyfwrbPtrGqltWIUHBilmM/MZIqi6r0q4tH+o2yRtjZvRkxyIyDHgE+A9jzIc92Yfyhp4ma7dUwzhdX59rIsJx1x7HIRcfwqdvfUp+eT5F/Yt8fWLrzWzprhGRfsAy4DJjzAt2HEO5R0+TdU/KJY0xvLX4LV664SUatjcw5rgxTP/FdEqHpj9vexs3XVHkUv/B/ek/uL/TYSibZVpCOUdEPgOOAJaJyOOtT/0QGAP8QkTeaP03MMNYlUv1tHSxJ9Uwz/z8GZZ+bymbX9vMzk928tpdr3HHpDuo29LzCcDcckWhlB0ySvLGmEeMMcOMMfnGmEHGmONat//aGFNsjJm817+t2QlZuU1PSxfTLZdsrG3kxRtfJN6wJ/mauKE50sxz13es4k2d1tcrP9O/YpWxTEoX06mG2frmVgLhAImmRLvtVtTio6c/Sj/wVroSk/IzTfIqK3JRuliyXwlWzOr8hEDx0OKe71fr65WPaZJXntF/TH/KJ5VT81pNu2QfzA8y8fsTM9q31tcrv9L55JWnnPrAqQw5agiBvADBwiD5/fOZdtM0xh4z1unQlHIlbcmrrMjVYKKKygpOX3o6mzdspnFHI8XDigkEA9TW1gL+rGtXKhOa5FWP7Z3Y92b3YKKSkhIYBdtKe88AJqV6SrtrVI90XKavo7bBRHbZ1wAmpdQe2pJXnaTS9ZIsyXZk52AiHcCkVGq0Ja/aSXUh7VSSqZ2DiXQAk1Kp0SSv2km1G6S7ZGr3YCJdIESp1GiSV+2k2g2SLMm2SWc1p57KZAUppXoTvbZV7aQ6M6QbRonqACaluqdJXrWTzjwuqSTZ3rQYh1JupEletdOuhR5rokT+RWneJ+SbCWCdAoH8Ln+2Y0IvLCykrq5Oa9mVcpAmedVJSUkJJUVR+HgGJrYZovVYkSIsuZimQc/Qp9+4Tj+TbHWljhU50DsW41DKTfTGq0pu608wsY8RU4dgCFBP0GwlsPX8pMk7lbr5NlrLrlTuaJJXyUUeRoi12yRYFForqd2xrdPL00ncWsuuVO5okldpS3dd1r1pLbtSuZXpGq/fFJG3RcQSkaokz1eKSJ2I/CST4ygHlJyGIdxukyFIg0wnFO5887WrwUklJSVay66UgzK9bn4LmAv8qYvnbwKWZ3gM5YSBC7HqVyLxzQgNGIqwKGF7+DddllOCrq6klNtklOSNMe8ASUc+isgpwEdAfSbHUA4JDiA4+h0aax6kObKGZmt/mvO+Tln/QV0mbh2cpJT72HIHTET6AJcCM4F9dtWIyHxgPkBlZaUd4aiekhCFA8+kcOCZTkeilOqhbvvkReRJEXkryb+T9/FjVwM3G2Pqutu/MWaRMabKGFNVUVGRRuhKKaW6021L3hgzowf7PQw4TUSuB/oBlog0GWNu7cG+lFJK9ZAt3TXGmKPb/l9ErgbqNMErpVTuZVpCOUdEPgOOAJaJyOPZCUsppVQ2ZFpd8wjwSDevuTqTYyillOo5HfGqlFI+pkleKaV8TJO8Ukr5mKQ6PWwuiEgN8EkaP1IOdJ4SsXfSz6KFfg576GfRojd8DvsbY5IONHJVkk+XiKw2xnSaGK030s+ihX4Oe+hn0aK3fw7aXaOUUj6mSV4ppXzM60l+kdMBuIh+Fi30c9hDP4sWvfpz8HSfvFJKqX3zekteKaXUPmiSV0opH/N8kheRhSLyroisE5FHRKSf0zHlkojMFpH3ROQDEbnM6XicIiLDReQZEVnfuu7wAqdjcpKIBEXkdRF5zOlYnCQi/UTkodYc8Y6IHOF0TLnm+SQPrAAOMsZMBN4HLnc4npwRkSBwG/B1YDxwpoiMdzYqx8SBHxtjxgOHAxf04s8CYAHwjtNBuMAtwD+NMeOASfTCz8TzSd4Y84QxJt768GVgmJPx5NihwAfGmA3GmCiwGNjXil2+ZYzZbIx5rfX/I7R8mYc6G5UzRGQYcAJwp9OxOElE+gLTgT8DGGOixpgvnI0q9zyf5Dv4LrDc6SByaCjw6V6PP6OXJra9icgI4GDgFWcjcczvgZ8BltOBOGwkUAP8pbXr6k4RKXY6qFzzRJJPZZ1ZEbmClkv2vzkXqXJa6yLyDwMXG2N2OR1PronIicBWY8wap2NxgRAwBbjdGHMwUA/0uvtWtiz/l23drTMrIt8GTgS+ZnpX4f9GYPhej4e1buuVRCRMS4L/mzHmf52OxyFHAd8QkeOBAqBURP5qjDnb4bic8BnwmTGm7YruIXphkvdES35fRGQ2LZem3zDGNDgdT46tAsaKyEgRyQPOAJY6HJMjRERo6Xt9xxhzk9PxOMUYc7kxZpgxZgQtfw9P99IEjzHmc+BTEfly66avAesdDMkRnmjJd+NWIB9Y0fI952VjzPedDSk3jDFxEfkh8DgQBO4yxrztcFhOOQo4B3hTRN5o3fb/jDH/cDAm5bwLgb+1NoI2AN9xOJ6c02kNlFLKxzzfXaOUUqprmuSVUsrHNMkrpZSPaZJXSikf0ySvlFI+pkleKaV8TJO8Ukr52P8HcxO/1JMyhKgAAAAASUVORK5CYII=\n", "text/plain": [ - "
" + "
" ] }, - "metadata": {}, + "metadata": { + "needs_background": "light" + }, "output_type": "display_data" } ], "source": [ - "games = [\n", - " \"battlefield3\",\n", - " \"Diablo\",\n", - " \"DotA2\",\n", - " \"Guildwars2\",\n", - " \"leagueoflegends\",\n", - " \"magicTCG\",\n", - " \"Minecraft\",\n", - " \"pokemon\",\n", - " \"skyrim\",\n", - " \"starcraft\",\n", - " \"tf2\",\n", - " \"wow\",\n", - "]\n", + "games = [\"battlefield3\", \"Diablo\", \"DotA2\", \"Guildwars2\", \"leagueoflegends\", \"magicTCG\", \"Minecraft\", \"pokemon\", \"skyrim\", \"starcraft\", \"tf2\", \"wow\"]\n", "trade = [\"Dota2Trade\", \"pokemontrades\", \"SteamGameSwap\", \"tf2trade\", \"Random_Acts_Of_Amazon\"]\n", "sports = [\"baseball\", \"CFB\", \"hockey\", \"MMA\", \"nba\", \"nfl\", \"soccer\"]\n", "\n", - "link_aggregators = [\n", - " \"AskReddit\",\n", - " \"WTF\",\n", - " \"pics\",\n", - " \"gifs\",\n", - " \"aww\",\n", - " \"funny\",\n", - " \"todayilearned\",\n", - " \"AdviceAnimals\",\n", - "]\n", + "link_aggregators = [\"AskReddit\", \"WTF\", \"pics\", \"gifs\", \"aww\", \"funny\", \"todayilearned\",\n", + " \"AdviceAnimals\"]\n", "relationships = [\"AskMen\", \"AskWomen\", \"relationships\", \"relationship_advice\", \"OkCupid\"]\n", "\n", "plt.scatter(tsne_df[0].values, tsne_df[1].values, color=\"#dddddd\")\n", - "plt.scatter(\n", - " tsne_df[0].values,\n", - " tsne_df[1].values,\n", - " color=[\n", - " \"green\"\n", - " if l in games\n", - " else \"gold\"\n", - " if l in trade\n", - " else \"purple\"\n", - " if l in relationships\n", - " else \"red\"\n", - " if l in link_aggregators\n", - " else \"blue\"\n", - " if l in sports\n", - " else \"#00000000\"\n", - " for l in tsne_df.index\n", - " ],\n", - ")\n", + "plt.scatter(tsne_df[0].values, tsne_df[1].values, color=[\n", + " \"green\" if l in games else\n", + " \"gold\" if l in trade else\n", + " \"purple\" if l in relationships else\n", + " \"red\" if l in link_aggregators else\n", + " \"blue\" if l in sports else\n", + " \"#00000000\"\n", + " for l in tsne_df.index])\n", "plt.show()" ] }, @@ -5938,40 +19925,41 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 70, "metadata": { "scrolled": true }, "outputs": [], "source": [ - "dists = pairwise_distances(subreddit_df.values, metric=\"cosine\")\n", + "dists = pairwise_distances(subreddit_df.values, metric='cosine')\n", "flat_dists = np.ravel(dists)\n", "idx1, idx2 = np.unravel_index(np.arange(len(flat_dists)), dists.shape)\n", - "pairwise_dist_df = pd.DataFrame.from_dict(\n", - " {\"p1\": subreddit_df.index[idx1], \"p2\": subreddit_df.index[idx2], \"dist\": flat_dists},\n", - " orient=\"columns\",\n", - ")" + "pairwise_dist_df = pd.DataFrame.from_dict({'p1': subreddit_df.index[idx1],\n", + " 'p2': subreddit_df.index[idx2],\n", + " 'dist': flat_dists},\n", + " orient='columns')" ] }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 71, "metadata": {}, "outputs": [], "source": [ - "def print_nearest_neighbors(pairwise_dist_df, test_subreddits=[], top_N=10):\n", + "def print_nearest_neighbors(pairwise_dist_df, \n", + " test_subreddits=[],\n", + " top_N=10):\n", " for subreddit in test_subreddits:\n", - " subset_df = pairwise_dist_df[\n", - " (pairwise_dist_df.p1 == subreddit) & (pairwise_dist_df.p2 != subreddit)\n", - " ]\n", + " subset_df = pairwise_dist_df[(pairwise_dist_df.p1 == subreddit)\n", + " & (pairwise_dist_df.p2 != subreddit)]\n", " print(subreddit)\n", - " print(subset_df.sort_values(\"dist\")[[\"p2\", \"dist\"]].head(top_N))\n", + " print(subset_df.sort_values('dist')[['p2', 'dist']].head(top_N))\n", " print()" ] }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 72, "metadata": { "scrolled": true }, @@ -6114,21 +20102,10 @@ } ], "source": [ - "print_nearest_neighbors(\n", - " pairwise_dist_df,\n", - " [\n", - " \"apple\",\n", - " \"politics\",\n", - " \"leagueoflegends\",\n", - " \"AskWomen\",\n", - " \"Music\",\n", - " \"pics\",\n", - " \"australia\",\n", - " \"Random_Acts_Of_Amazon\",\n", - " \"Bitcoin\",\n", - " \"MensRights\",\n", - " ],\n", - ")" + "print_nearest_neighbors(pairwise_dist_df, ['apple', 'politics', 'leagueoflegends',\n", + " 'AskWomen', 'Music', 'pics',\n", + " 'australia', 'Random_Acts_Of_Amazon',\n", + " 'Bitcoin', 'MensRights'])" ] }, { @@ -6140,7 +20117,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 73, "metadata": {}, "outputs": [], "source": [ @@ -6149,7 +20126,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 74, "metadata": {}, "outputs": [], "source": [ @@ -6172,7 +20149,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 75, "metadata": {}, "outputs": [ { @@ -6208,7 +20185,7 @@ " \n", " \n", " \n", - " e5q0p88\n", + " e60kzm8\n", " -0.963049\n", " 0.069720\n", " 0.012004\n", @@ -6216,10 +20193,10 @@ " -0.253023\n", " -0.035112\n", " 0.045334\n", - " Christianity\n", + " MensRights\n", " \n", " \n", - " e5d4yag\n", + " e5q0p88\n", " -0.963049\n", " 0.069720\n", " 0.012004\n", @@ -6230,7 +20207,7 @@ " Christianity\n", " \n", " \n", - " e60kzm8\n", + " e5d4yag\n", " -0.963049\n", " 0.069720\n", " 0.012004\n", @@ -6238,7 +20215,7 @@ " -0.253023\n", " -0.035112\n", " 0.045334\n", - " MensRights\n", + " Christianity\n", " \n", " \n", " e5m9w22\n", @@ -6263,7 +20240,7 @@ " Music\n", " \n", " \n", - " e6r4v8m\n", + " e68nlvd\n", " -0.935494\n", " 0.050881\n", " 0.060026\n", @@ -6271,10 +20248,10 @@ " -0.250417\n", " -0.055384\n", " 0.220780\n", - " POLITIC\n", + " Christianity\n", " \n", " \n", - " e5o4hip\n", + " e6r4v8m\n", " -0.935494\n", " 0.050881\n", " 0.060026\n", @@ -6282,10 +20259,10 @@ " -0.250417\n", " -0.055384\n", " 0.220780\n", - " gonewild\n", + " POLITIC\n", " \n", " \n", - " e68nlvd\n", + " e5ojhdr\n", " -0.935494\n", " 0.050881\n", " 0.060026\n", @@ -6293,10 +20270,10 @@ " -0.250417\n", " -0.055384\n", " 0.220780\n", - " Christianity\n", + " AskMen\n", " \n", " \n", - " e5ojhdr\n", + " e5o4hip\n", " -0.935494\n", " 0.050881\n", " 0.060026\n", @@ -6304,7 +20281,7 @@ " -0.250417\n", " -0.055384\n", " 0.220780\n", - " AskMen\n", + " gonewild\n", " \n", " \n", " e6jkkjw\n", @@ -6323,27 +20300,27 @@ ], "text/plain": [ " 0 1 2 3 4 5 6 \\\n", + "e60kzm8 -0.963049 0.069720 0.012004 0.014941 -0.253023 -0.035112 0.045334 \n", "e5q0p88 -0.963049 0.069720 0.012004 0.014941 -0.253023 -0.035112 0.045334 \n", "e5d4yag -0.963049 0.069720 0.012004 0.014941 -0.253023 -0.035112 0.045334 \n", - "e60kzm8 -0.963049 0.069720 0.012004 0.014941 -0.253023 -0.035112 0.045334 \n", "e5m9w22 -0.963049 0.069720 0.012004 0.014941 -0.253023 -0.035112 0.045334 \n", "e59g1nk -0.956579 0.050546 -0.028281 0.006982 -0.281819 -0.045649 -0.006813 \n", - "e6r4v8m -0.935494 0.050881 0.060026 0.064334 -0.250417 -0.055384 0.220780 \n", - "e5o4hip -0.935494 0.050881 0.060026 0.064334 -0.250417 -0.055384 0.220780 \n", "e68nlvd -0.935494 0.050881 0.060026 0.064334 -0.250417 -0.055384 0.220780 \n", + "e6r4v8m -0.935494 0.050881 0.060026 0.064334 -0.250417 -0.055384 0.220780 \n", "e5ojhdr -0.935494 0.050881 0.060026 0.064334 -0.250417 -0.055384 0.220780 \n", + "e5o4hip -0.935494 0.050881 0.060026 0.064334 -0.250417 -0.055384 0.220780 \n", "e6jkkjw -0.923477 0.027897 0.067691 0.035644 -0.276119 -0.062107 0.245887 \n", "\n", " subreddit \n", + "e60kzm8 MensRights \n", "e5q0p88 Christianity \n", "e5d4yag Christianity \n", - "e60kzm8 MensRights \n", "e5m9w22 atheism \n", "e59g1nk Music \n", - "e6r4v8m POLITIC \n", - "e5o4hip gonewild \n", "e68nlvd Christianity \n", + "e6r4v8m POLITIC \n", "e5ojhdr AskMen \n", + "e5o4hip gonewild \n", "e6jkkjw POLITIC " ] }, @@ -6422,7 +20399,7 @@ " -0.129918\n", " \n", " \n", - " prop-nonzero[indegree over c->c mid-thread responses]\n", + " prop-nonzero[indegree over C->c responses]\n", " -0.785073\n", " -0.120033\n", " -0.107805\n", @@ -6452,7 +20429,7 @@ " 0.042901\n", " \n", " \n", - " prop-nonzero[indegree over C->c responses]\n", + " prop-nonzero[indegree over c->c mid-thread responses]\n", " -0.785073\n", " -0.120033\n", " -0.107805\n", @@ -6491,10 +20468,10 @@ "prop-nonzero[indegree over C->C responses] -0.945359 -0.101535 \n", "count[reciprocity motif over mid-thread] -0.809754 0.105072 \n", "count[reciprocity motif] -0.809152 0.173066 \n", - "prop-nonzero[indegree over c->c mid-thread resp... -0.785073 -0.120033 \n", + "prop-nonzero[indegree over C->c responses] -0.785073 -0.120033 \n", "prop-nonzero[indegree over C->c mid-thread resp... -0.785073 -0.120033 \n", "prop-nonzero[indegree over c->c responses] -0.785073 -0.120033 \n", - "prop-nonzero[indegree over C->c responses] -0.785073 -0.120033 \n", + "prop-nonzero[indegree over c->c mid-thread resp... -0.785073 -0.120033 \n", "entropy[indegree over C->c responses] -0.752376 -0.339732 \n", "is-present[reciprocity motif over mid-thread] -0.746503 -0.388562 \n", "\n", @@ -6503,10 +20480,10 @@ "prop-nonzero[indegree over C->C responses] 0.238357 -0.078078 \n", "count[reciprocity motif over mid-thread] -0.429701 0.326016 \n", "count[reciprocity motif] -0.206560 0.449086 \n", - "prop-nonzero[indegree over c->c mid-thread resp... -0.107805 -0.327275 \n", + "prop-nonzero[indegree over C->c responses] -0.107805 -0.327275 \n", "prop-nonzero[indegree over C->c mid-thread resp... -0.107805 -0.327275 \n", "prop-nonzero[indegree over c->c responses] -0.107805 -0.327275 \n", - "prop-nonzero[indegree over C->c responses] -0.107805 -0.327275 \n", + "prop-nonzero[indegree over c->c mid-thread resp... -0.107805 -0.327275 \n", "entropy[indegree over C->c responses] -0.136839 -0.383152 \n", "is-present[reciprocity motif over mid-thread] 0.299804 0.194661 \n", "\n", @@ -6515,10 +20492,10 @@ "prop-nonzero[indegree over C->C responses] -0.107471 0.146344 \n", "count[reciprocity motif over mid-thread] 0.036748 -0.019626 \n", "count[reciprocity motif] 0.224681 -0.060130 \n", - "prop-nonzero[indegree over c->c mid-thread resp... -0.495253 0.058358 \n", + "prop-nonzero[indegree over C->c responses] -0.495253 0.058358 \n", "prop-nonzero[indegree over C->c mid-thread resp... -0.495253 0.058358 \n", "prop-nonzero[indegree over c->c responses] -0.495253 0.058358 \n", - "prop-nonzero[indegree over C->c responses] -0.495253 0.058358 \n", + "prop-nonzero[indegree over c->c mid-thread resp... -0.495253 0.058358 \n", "entropy[indegree over C->c responses] -0.323822 0.136627 \n", "is-present[reciprocity motif over mid-thread] 0.101641 -0.001041 \n", "\n", @@ -6527,10 +20504,10 @@ "prop-nonzero[indegree over C->C responses] -0.010486 \n", "count[reciprocity motif over mid-thread] -0.201477 \n", "count[reciprocity motif] -0.129918 \n", - "prop-nonzero[indegree over c->c mid-thread resp... 0.042901 \n", + "prop-nonzero[indegree over C->c responses] 0.042901 \n", "prop-nonzero[indegree over C->c mid-thread resp... 0.042901 \n", "prop-nonzero[indegree over c->c responses] 0.042901 \n", - "prop-nonzero[indegree over C->c responses] 0.042901 \n", + "prop-nonzero[indegree over c->c mid-thread resp... 0.042901 \n", "entropy[indegree over C->c responses] 0.171623 \n", "is-present[reciprocity motif over mid-thread] -0.391977 " ] @@ -6750,7 +20727,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.0" + "version": "3.7.6" } }, "nbformat": 4, diff --git a/examples/hyperconvo/predictive_tasks.ipynb b/examples/hyperconvo/predictive_tasks.ipynb index 6e47e659..28259133 100644 --- a/examples/hyperconvo/predictive_tasks.ipynb +++ b/examples/hyperconvo/predictive_tasks.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -27,14 +27,14 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Dataset already exists at /Users/seanzhangkx/.convokit/downloads/reddit-corpus-small\n" + "Dataset already exists at /Users/calebchiam/Documents/GitHub/ConvoKit/convokit/tensors/reddit-corpus-small\n" ] } ], @@ -53,18 +53,16 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ - "top_level_utterance_ids = [\n", - " utt.id for utt in corpus.iter_utterances() if utt.id == utt.meta[\"top_level_comment\"]\n", - "]" + "top_level_utterance_ids = [utt.id for utt in corpus.iter_utterances() if utt.id == utt.meta['top_level_comment']]" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -73,7 +71,7 @@ "10000" ] }, - "execution_count": 4, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -84,16 +82,13 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ - "threads_corpus = corpus.reindex_conversations(\n", - " source_corpus=corpus,\n", - " new_convo_roots=top_level_utterance_ids,\n", - " preserve_convo_meta=True,\n", - " preserve_corpus_meta=False,\n", - ")" + "threads_corpus = corpus.reindex_conversations(new_convo_roots=top_level_utterance_ids, \n", + " preserve_convo_meta=True,\n", + " preserve_corpus_meta=False)" ] }, { @@ -124,13 +119,13 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "hc = HyperConvo(prefix_len=10, min_convo_len=10, invalid_val=-1)\n", "hc.fit_transform(threads_corpus)\n", - "feats = list(threads_corpus.get_vector_matrix(\"hyperconvo\").columns)" + "feats = list(threads_corpus.get_vector_matrix('hyperconvo').columns)" ] }, { @@ -142,18 +137,18 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['max[indegree over c->c responses]',\n", - " 'argmax[indegree over c->c responses]',\n", - " 'norm.max[indegree over c->c responses]']" + "['2nd-argmax[indegree over C->C mid-thread responses]',\n", + " '2nd-argmax[indegree over C->C responses]',\n", + " '2nd-argmax[indegree over C->c mid-thread responses]']" ] }, - "execution_count": 7, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -171,36 +166,34 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ - "hyperconvo_matrix = threads_corpus.get_vector_matrix(\"hyperconvo\")" + "hyperconvo_matrix = threads_corpus.get_vector_matrix('hyperconvo')" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ - "reply_tree_matrix = hyperconvo_matrix.subset(\n", - " columns=[c for c in hyperconvo_matrix.columns if \"c->c\" in c]\n", - ")" + "reply_tree_matrix = hyperconvo_matrix.subset(columns=[c for c in hyperconvo_matrix.columns if 'c->c' in c])" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ - "reply_tree_matrix.name = \"reply-tree\"" + "reply_tree_matrix.name = 'reply-tree'" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -209,13 +202,13 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "for convo in threads_corpus.iter_conversations():\n", - " if convo.has_vector(\"hyperconvo\"):\n", - " convo.add_vector(\"reply-tree\")" + " if convo.has_vector('hyperconvo'):\n", + " convo.add_vector('reply-tree')" ] }, { @@ -227,15 +220,13 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "## volume is the number of unique users in the first 10 comments\n", "for convo in threads_corpus.iter_conversations():\n", - " convo.meta[\"volume\"] = len(\n", - " set([utt.speaker for utt in convo.get_chronological_utterance_list()[:10]])\n", - " )" + " convo.meta['volume'] = len(set([utt.user for utt in convo.get_chronological_utterance_list()[:10]]))" ] }, { @@ -270,34 +261,46 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "for convo in threads_corpus.iter_conversations():\n", - " convo.meta[\"comment-growth\"] = len(list(convo.iter_utterances())) >= 15\n", - "\n", + " convo.meta['comment-growth'] = len(list(convo.iter_utterances())) >= 15\n", + " \n", " convo_utts = convo.get_chronological_utterance_list()\n", " if len(convo_utts) >= 20:\n", " first_10_spkrs = len(set([utt.speaker.id for utt in convo_utts[:10]]))\n", " first_20_spkrs = len(set([utt.speaker.id for utt in convo_utts[:20]]))\n", - " convo.meta[\"commenter-growth\"] = (first_20_spkrs / first_10_spkrs) >= 2.0\n", + " convo.meta['commenter-growth'] = (first_20_spkrs / first_10_spkrs) >= 2.0\n", " else:\n", - " convo.meta[\"commenter-growth\"] = None" + " convo.meta['commenter-growth'] = None" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "ConvoKitMeta({'original_convo_meta': {'title': 'Coming Soon: Sibling Rivalry Podcast Season 2 with Bob The Drag Queen & Monét X Change', 'num_comments': 19, 'domain': 'youtube.com', 'timestamp': 1536033837, 'subreddit': 'rupaulsdragrace', 'gilded': 0, 'gildings': {'gid_1': 0, 'gid_2': 0, 'gid_3': 0}, 'stickied': False, 'author_flair_text': 'Miz Cracker'}, 'original_convo_id': '9cs8tg', 'volume': 6, 'comment-growth': False, 'commenter-growth': None})" + "{'original_convo_meta': {'title': 'Daily Discussion, September 15, 2018',\n", + " 'num_comments': 97,\n", + " 'domain': 'self.Bitcoin',\n", + " 'timestamp': 1537002016,\n", + " 'subreddit': 'Bitcoin',\n", + " 'gilded': 0,\n", + " 'gildings': {'gid_1': 0, 'gid_2': 0, 'gid_3': 0},\n", + " 'stickied': False,\n", + " 'author_flair_text': ''},\n", + " 'original_convo_id': '9g03ho',\n", + " 'volume': 4,\n", + " 'comment-growth': True,\n", + " 'commenter-growth': True}" ] }, - "execution_count": 15, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -315,7 +318,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -324,33 +327,32 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ - "pairer_1 = Pairer(\n", - " obj_type=\"conversation\",\n", - " pairing_func=lambda convo: convo.meta[\"original_convo_id\"],\n", - " pos_label_func=lambda convo: convo.meta[\"comment-growth\"],\n", - " neg_label_func=lambda convo: not convo.meta[\"comment-growth\"],\n", - " pair_id_attribute_name=\"pair_id_1\",\n", - " label_attribute_name=\"pair_obj_1\",\n", - " pair_orientation_attribute_name=\"pair_orientation_1\",\n", - ")" + "pairer_1 = Pairer(obj_type=\"conversation\", \n", + " pairing_func=lambda convo: convo.meta['original_convo_id'],\n", + " pos_label_func=lambda convo: convo.meta['comment-growth'],\n", + " neg_label_func=lambda convo: not convo.meta['comment-growth'],\n", + " pair_id_attribute_name=\"pair_id_1\",\n", + " label_attribute_name=\"pair_obj_1\",\n", + " pair_orientation_attribute_name=\"pair_orientation_1\"\n", + " )" ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 18, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -361,33 +363,32 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ - "pairer_2 = Pairer(\n", - " obj_type=\"conversation\",\n", - " pairing_func=lambda convo: convo.meta[\"original_convo_id\"],\n", - " pos_label_func=lambda convo: convo.meta[\"commenter-growth\"],\n", - " neg_label_func=lambda convo: not convo.meta[\"commenter-growth\"],\n", - " pair_id_attribute_name=\"pair_id_2\",\n", - " label_attribute_name=\"pair_obj_2\",\n", - " pair_orientation_attribute_name=\"pair_orientation_2\",\n", - ")" + "pairer_2 = Pairer(obj_type=\"conversation\", \n", + " pairing_func=lambda convo: convo.meta['original_convo_id'],\n", + " pos_label_func=lambda convo: convo.meta['commenter-growth'],\n", + " neg_label_func=lambda convo: not convo.meta['commenter-growth'],\n", + " pair_id_attribute_name=\"pair_id_2\",\n", + " label_attribute_name=\"pair_obj_2\",\n", + " pair_orientation_attribute_name=\"pair_orientation_2\"\n", + " )" ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 20, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -405,7 +406,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 22, "metadata": {}, "outputs": [], "source": [ @@ -414,7 +415,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 23, "metadata": {}, "outputs": [ { @@ -427,22 +428,22 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 22, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bow = BoWTransformer(obj_type=\"conversation\", vector_name=\"bow_1\")\n", - "bow.fit_transform(threads_corpus, selector=lambda convo: convo.meta[\"pair_id_1\"] is not None)" + "bow.fit_transform(threads_corpus, selector=lambda convo: convo.meta['pair_id_1'] is not None)" ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 24, "metadata": {}, "outputs": [ { @@ -455,22 +456,22 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 23, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bow2 = BoWTransformer(obj_type=\"conversation\", vector_name=\"bow_2\")\n", - "bow2.fit_transform(threads_corpus, selector=lambda convo: convo.meta[\"pair_id_2\"] is not None)" + "bow2.fit_transform(threads_corpus, selector=lambda convo: convo.meta['pair_id_2'] is not None)" ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 25, "metadata": {}, "outputs": [ { @@ -479,7 +480,7 @@ "{'bow_1', 'bow_2', 'hyperconvo', 'reply-tree'}" ] }, - "execution_count": 24, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -497,7 +498,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 26, "metadata": {}, "outputs": [], "source": [ @@ -536,7 +537,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 39, "metadata": {}, "outputs": [ { @@ -549,22 +550,21 @@ { "data": { "text/plain": [ - "0.5774812343619683" + "0.5445037531276065" ] }, - "execution_count": 26, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "pp = PairedVectorPrediction(\n", - " obj_type=\"conversation\",\n", - " vector_name=\"hyperconvo\",\n", - " pair_id_attribute_name=\"pair_id_1\",\n", - " label_attribute_name=\"pair_obj_1\",\n", - " pair_orientation_attribute_name=\"pair_orientation_1\",\n", - ")\n", + "pp = PairedVectorPrediction(obj_type=\"conversation\",\n", + " vector_name=\"hyperconvo\",\n", + " pair_id_attribute_name=\"pair_id_1\",\n", + " label_attribute_name=\"pair_obj_1\",\n", + " pair_orientation_attribute_name=\"pair_orientation_1\"\n", + " )\n", "pp.summarize(threads_corpus)" ] }, @@ -577,7 +577,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 40, "metadata": {}, "outputs": [ { @@ -590,22 +590,20 @@ { "data": { "text/plain": [ - "0.5973144286905754" + "0.5974145120934111" ] }, - "execution_count": 27, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "pp = PairedVectorPrediction(\n", - " obj_type=\"conversation\",\n", - " vector_name=\"reply-tree\",\n", - " pair_id_attribute_name=\"pair_id_1\",\n", - " label_attribute_name=\"pair_obj_1\",\n", - " pair_orientation_attribute_name=\"pair_orientation_1\",\n", - ")\n", + "pp = PairedVectorPrediction(obj_type=\"conversation\",\n", + " vector_name=\"reply-tree\",\n", + " pair_id_attribute_name=\"pair_id_1\", \n", + " label_attribute_name=\"pair_obj_1\",\n", + " pair_orientation_attribute_name=\"pair_orientation_1\")\n", "pp.summarize(threads_corpus)" ] }, @@ -618,7 +616,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 41, "metadata": {}, "outputs": [ { @@ -631,22 +629,21 @@ { "data": { "text/plain": [ - "0.5993327773144287" + "0.5955796497080901" ] }, - "execution_count": 28, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "pp = PairedPrediction(\n", - " obj_type=\"conversation\",\n", - " pred_feats=[\"volume\"],\n", - " pair_id_attribute_name=\"pair_id_1\",\n", - " label_attribute_name=\"pair_obj_1\",\n", - " pair_orientation_attribute_name=\"pair_orientation_1\",\n", - ")\n", + "pp = PairedPrediction(obj_type=\"conversation\",\n", + " pred_feats=[\"volume\"],\n", + " pair_id_attribute_name=\"pair_id_1\",\n", + " label_attribute_name=\"pair_obj_1\",\n", + " pair_orientation_attribute_name=\"pair_orientation_1\"\n", + " )\n", "pp.summarize(threads_corpus)" ] }, @@ -659,7 +656,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 42, "metadata": {}, "outputs": [ { @@ -672,28 +669,27 @@ { "data": { "text/plain": [ - "0.8160633861551293" + "0.8342285237698082" ] }, - "execution_count": 29, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "pp = PairedVectorPrediction(\n", - " obj_type=\"conversation\",\n", - " vector_name=\"bow_1\",\n", - " pair_id_attribute_name=\"pair_id_1\",\n", - " label_attribute_name=\"pair_obj_1\",\n", - " pair_orientation_attribute_name=\"pair_orientation_1\",\n", - ")\n", + "pp = PairedVectorPrediction(obj_type=\"conversation\",\n", + " vector_name=\"bow_1\",\n", + " pair_id_attribute_name=\"pair_id_1\",\n", + " label_attribute_name=\"pair_obj_1\",\n", + " pair_orientation_attribute_name=\"pair_orientation_1\"\n", + " )\n", "pp.summarize(threads_corpus)" ] }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 38, "metadata": {}, "outputs": [ { @@ -706,10 +702,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 30, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" } @@ -734,7 +730,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 43, "metadata": {}, "outputs": [ { @@ -747,22 +743,21 @@ { "data": { "text/plain": [ - "0.5655737704918031" + "0.5815970386039133" ] }, - "execution_count": 31, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "pp = PairedVectorPrediction(\n", - " obj_type=\"conversation\",\n", - " vector_name=\"hyperconvo\",\n", - " pair_id_attribute_name=\"pair_id_2\",\n", - " label_attribute_name=\"pair_obj_2\",\n", - " pair_orientation_attribute_name=\"pair_orientation_2\",\n", - ")\n", + "pp = PairedVectorPrediction(obj_type=\"conversation\",\n", + " vector_name=\"hyperconvo\",\n", + " pair_id_attribute_name=\"pair_id_2\",\n", + " label_attribute_name=\"pair_obj_2\",\n", + " pair_orientation_attribute_name=\"pair_orientation_2\"\n", + " )\n", "pp.summarize(threads_corpus)" ] }, @@ -775,7 +770,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 44, "metadata": {}, "outputs": [ { @@ -788,22 +783,20 @@ { "data": { "text/plain": [ - "0.5296668429402432" + "0.509941829719725" ] }, - "execution_count": 32, + "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "pp = PairedVectorPrediction(\n", - " obj_type=\"conversation\",\n", - " vector_name=\"reply-tree\",\n", - " pair_id_attribute_name=\"pair_id_2\",\n", - " label_attribute_name=\"pair_obj_2\",\n", - " pair_orientation_attribute_name=\"pair_orientation_2\",\n", - ")\n", + "pp = PairedVectorPrediction(obj_type=\"conversation\",\n", + " vector_name=\"reply-tree\",\n", + " pair_id_attribute_name=\"pair_id_2\", \n", + " label_attribute_name=\"pair_obj_2\",\n", + " pair_orientation_attribute_name=\"pair_orientation_2\")\n", "pp.summarize(threads_corpus)" ] }, @@ -816,7 +809,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 45, "metadata": {}, "outputs": [ { @@ -829,22 +822,21 @@ { "data": { "text/plain": [ - "0.5849814912744579" + "0.5653622421998942" ] }, - "execution_count": 33, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "pp = PairedPrediction(\n", - " obj_type=\"conversation\",\n", - " pred_feats=[\"volume\"],\n", - " pair_id_attribute_name=\"pair_id_2\",\n", - " label_attribute_name=\"pair_obj_2\",\n", - " pair_orientation_attribute_name=\"pair_orientation_2\",\n", - ")\n", + "pp = PairedPrediction(obj_type=\"conversation\",\n", + " pred_feats=[\"volume\"],\n", + " pair_id_attribute_name=\"pair_id_2\",\n", + " label_attribute_name=\"pair_obj_2\",\n", + " pair_orientation_attribute_name=\"pair_orientation_2\"\n", + " )\n", "pp.summarize(threads_corpus)" ] }, @@ -857,7 +849,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 46, "metadata": {}, "outputs": [ { @@ -870,22 +862,21 @@ { "data": { "text/plain": [ - "0.7386567953463776" + "0.7154415653093601" ] }, - "execution_count": 34, + "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "pp = PairedVectorPrediction(\n", - " obj_type=\"conversation\",\n", - " vector_name=\"bow_2\",\n", - " pair_id_attribute_name=\"pair_id_2\",\n", - " label_attribute_name=\"pair_obj_2\",\n", - " pair_orientation_attribute_name=\"pair_orientation_2\",\n", - ")\n", + "pp = PairedVectorPrediction(obj_type=\"conversation\",\n", + " vector_name=\"bow_2\",\n", + " pair_id_attribute_name=\"pair_id_2\",\n", + " label_attribute_name=\"pair_obj_2\",\n", + " pair_orientation_attribute_name=\"pair_orientation_2\"\n", + " )\n", "pp.summarize(threads_corpus)" ] } @@ -906,7 +897,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.0" + "version": "3.7.6" } }, "nbformat": 4, diff --git a/examples/merging/corpus_merge_demo.ipynb b/examples/merging/corpus_merge_demo.ipynb index 1ebcc136..25f212f1 100644 --- a/examples/merging/corpus_merge_demo.ipynb +++ b/examples/merging/corpus_merge_demo.ipynb @@ -38,24 +38,11 @@ "metadata": {}, "outputs": [], "source": [ - "corpus1 = Corpus(\n", - " utterances=[\n", - " Utterance(id=\"0\", conversation_id=\"0\", text=\"hello world\", speaker=Speaker(id=\"alice\")),\n", - " Utterance(\n", - " id=\"1\",\n", - " conversation_id=\"0\",\n", - " reply_to=0,\n", - " text=\"my name is bob\",\n", - " speaker=Speaker(id=\"bob\"),\n", - " ),\n", - " Utterance(\n", - " id=\"2\",\n", - " conversation_id=\"2\",\n", - " text=\"this is a sentence\",\n", - " speaker=Speaker(id=\"foxtrot\", meta={\"yellow\": \"food\"}),\n", - " ),\n", - " ]\n", - ")" + "corpus1 = Corpus(utterances = [\n", + " Utterance(id=\"0\", conversation_id=\"0\", text=\"hello world\", speaker=Speaker(id=\"alice\")),\n", + " Utterance(id=\"1\", conversation_id=\"0\", reply_to=0, text=\"my name is bob\", speaker=Speaker(id=\"bob\")),\n", + " Utterance(id=\"2\", conversation_id=\"2\", text=\"this is a sentence\", speaker=Speaker(id=\"foxtrot\", meta={\"yellow\": \"food\"})),\n", + " ])" ] }, { @@ -90,29 +77,11 @@ "metadata": {}, "outputs": [], "source": [ - "corpus2 = Corpus(\n", - " utterances=[\n", - " Utterance(\n", - " id=\"3\",\n", - " conversation_id=\"3\",\n", - " text=\"i like pie\",\n", - " speaker=Speaker(id=\"charlie\", meta={\"what\": \"a mood\", \"hey\": \"food\"}),\n", - " ),\n", - " Utterance(\n", - " id=\"4\",\n", - " conversation_id=\"3\",\n", - " reply_to=3,\n", - " text=\"sentence galore\",\n", - " speaker=Speaker(id=\"echo\"),\n", - " ),\n", - " Utterance(\n", - " id=\"2\",\n", - " conversation_id=\"2\",\n", - " text=\"this is a sentence\",\n", - " speaker=Speaker(id=\"foxtrot\", meta={\"yellow\": \"mood\", \"hello\": \"world\"}),\n", - " ),\n", - " ]\n", - ")" + "corpus2 = Corpus(utterances = [\n", + " Utterance(id=\"3\", conversation_id=\"3\", text=\"i like pie\", speaker=Speaker(id=\"charlie\", meta={\"what\": \"a mood\", \"hey\": \"food\"})),\n", + " Utterance(id='4', conversation_id='3', reply_to=3, text=\"sentence galore\", speaker=Speaker(id=\"echo\")),\n", + " Utterance(id='2', conversation_id='2', text=\"this is a sentence\", speaker=Speaker(id=\"foxtrot\", meta={\"yellow\": \"mood\", \"hello\": \"world\"})),\n", + " ])" ] }, { @@ -150,12 +119,12 @@ "name": "stdout", "output_type": "stream", "text": [ - "\u001b[91mWARNING: \u001b[0mMultiple values found for Speaker(id: 'foxtrot', vectors: [], meta: ConvoKitMeta({'yellow': 'food'})) for metadata key: 'yellow'. Taking the latest one found\n" + "\u001b[91mWARNING: \u001b[0mMultiple values found for Speaker(id: foxtrot, vectors: [], meta: {'yellow': 'food'}) for metadata key: 'yellow'. Taking the latest one found\n" ] } ], "source": [ - "corpus3 = Corpus.merge(corpus1, corpus2)" + "corpus3 = corpus1.merge(corpus2)" ] }, { @@ -199,7 +168,7 @@ { "data": { "text/plain": [ - "ConvoKitMeta({'yellow': 'mood', 'hello': 'world'})" + "{'yellow': 'mood', 'hello': 'world'}" ] }, "execution_count": 8, @@ -208,7 +177,7 @@ } ], "source": [ - "corpus3.get_speaker(\"foxtrot\").meta" + "corpus3.get_speaker('foxtrot').meta" ] }, { @@ -227,7 +196,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "[Speaker({'obj_type': 'speaker', 'vectors': [], 'owner': , 'id': 'alice', 'meta': ConvoKitMeta({})}), Speaker({'obj_type': 'speaker', 'vectors': [], 'owner': , 'id': 'bob', 'meta': ConvoKitMeta({})}), Speaker({'obj_type': 'speaker', 'vectors': [], 'owner': , 'id': 'foxtrot', 'meta': ConvoKitMeta({'yellow': 'mood', 'hello': 'world'})}), Speaker({'obj_type': 'speaker', 'vectors': [], 'owner': , 'id': 'charlie', 'meta': ConvoKitMeta({'what': 'a mood', 'hey': 'food'})}), Speaker({'obj_type': 'speaker', 'vectors': [], 'owner': , 'id': 'echo', 'meta': ConvoKitMeta({})})]\n", + "[Speaker({'obj_type': 'speaker', 'meta': {}, 'vectors': [], 'owner': , 'id': 'alice'}), Speaker({'obj_type': 'speaker', 'meta': {}, 'vectors': [], 'owner': , 'id': 'bob'}), Speaker({'obj_type': 'speaker', 'meta': {'yellow': 'mood', 'hello': 'world'}, 'vectors': [], 'owner': , 'id': 'foxtrot'}), Speaker({'obj_type': 'speaker', 'meta': {'what': 'a mood', 'hey': 'food'}, 'vectors': [], 'owner': , 'id': 'charlie'}), Speaker({'obj_type': 'speaker', 'meta': {}, 'vectors': [], 'owner': , 'id': 'echo'})]\n", "\n", "Number of Utterances: 1\n", "Number of Conversations: 1\n" @@ -236,7 +205,7 @@ ], "source": [ "print(list(corpus3.iter_speakers()))\n", - "speaker_echo = corpus3.get_speaker(\"echo\")\n", + "speaker_echo = corpus3.get_speaker('echo')\n", "print()\n", "speaker_echo.print_speaker_stats()" ] @@ -270,27 +239,12 @@ "metadata": {}, "outputs": [], "source": [ - "corpus4 = Corpus(\n", - " utterances=[\n", - " Utterance(\n", - " id=\"0\",\n", - " conversation_id=\"0\",\n", - " text=\"hello world\",\n", - " speaker=Speaker(id=\"alice\"),\n", - " meta={\"in\": \"wonderland\"},\n", - " ),\n", - " Utterance(\n", - " id=\"1\",\n", - " conversation_id=\"0\",\n", - " reply_to=\"0\",\n", - " text=\"my name is bob\",\n", - " speaker=Speaker(id=\"bob\"),\n", - " meta={\"fu\": \"bu\"},\n", - " ),\n", - " ]\n", - ")\n", - "corpus4.add_meta(\"AB\", 1)\n", - "corpus4.add_meta(\"CD\", 2)" + "corpus4 = Corpus(utterances = [\n", + " Utterance(id='0', conversation_id='0', text=\"hello world\", speaker=Speaker(id=\"alice\"), meta={'in': 'wonderland'}),\n", + " Utterance(id='1', conversation_id='0', reply_to='0', text=\"my name is bob\", speaker=Speaker(id=\"bob\"), meta={'fu': 'bu'})\n", + " ])\n", + "corpus4.add_meta('AB', 1)\n", + "corpus4.add_meta('CD', 2)\n" ] }, { @@ -325,27 +279,12 @@ "metadata": {}, "outputs": [], "source": [ - "corpus5 = Corpus(\n", - " utterances=[\n", - " Utterance(\n", - " id=\"0\",\n", - " conversation_id=\"0\",\n", - " text=\"hello world\",\n", - " speaker=Speaker(id=\"alice\"),\n", - " meta={\"in\": \"the hat\"},\n", - " ),\n", - " Utterance(\n", - " id=\"1\",\n", - " conversation_id=\"0\",\n", - " reply_to=\"0\",\n", - " text=\"my name is bobbb\",\n", - " speaker=Speaker(id=\"bob\"),\n", - " meta={\"barrel\": \"roll\"},\n", - " ),\n", - " ]\n", - ")\n", - "corpus5.add_meta(\"AB\", 3)\n", - "corpus5.add_meta(\"EF\", 3)" + "corpus5 = Corpus(utterances = [\n", + " Utterance(id='0', conversation_id='0', text=\"hello world\", speaker=Speaker(id=\"alice\"), meta={'in': 'the hat'}),\n", + " Utterance(id='1', conversation_id='0', reply_to='0', text=\"my name is bobbb\", speaker=Speaker(id=\"bob\"), meta={'barrel': 'roll'})\n", + " ])\n", + "corpus5.add_meta('AB', 3)\n", + "corpus5.add_meta('EF', 3)" ] }, { @@ -378,15 +317,15 @@ "text": [ "\u001b[91mWARNING: \u001b[0mFound conflicting values for Utterance '0' for metadata key: 'in'. Overwriting with other corpus's Utterance metadata.\n", "\u001b[91mWARNING: \u001b[0mUtterances with same id do not share the same data:\n", - "Utterance(id: '1', conversation_id: 0, reply-to: 0, speaker: Speaker(id: 'bob', vectors: [], meta: ConvoKitMeta({})), timestamp: None, text: 'my name is bob', vectors: [], meta: ConvoKitMeta({'fu': 'bu'}))\n", - "Utterance(id: '1', conversation_id: 0, reply-to: 0, speaker: Speaker(id: 'bob', vectors: [], meta: ConvoKitMeta({})), timestamp: None, text: 'my name is bobbb', vectors: [], meta: ConvoKitMeta({'barrel': 'roll'}))\n", + "Utterance(id: '1', conversation_id: 0, reply-to: 0, speaker: Speaker(id: bob, vectors: [], meta: {}), timestamp: None, text: 'my name is bob', vectors: [], meta: {'fu': 'bu'})\n", + "Utterance(id: '1', conversation_id: 0, reply-to: 0, speaker: Speaker(id: bob, vectors: [], meta: {}), timestamp: None, text: 'my name is bobbb', vectors: [], meta: {'barrel': 'roll'})\n", "Ignoring second corpus's utterance.\n", - "\u001b[91mWARNING: \u001b[0mFound conflicting values for primary Corpus metadata key: 'AB'. Overwriting with secondary Corpus's metadata.\n" + "\u001b[91mWARNING: \u001b[0mFound conflicting values for Corpus metadata key: 'AB'. Overwriting with other Corpus's metadata.\n" ] } ], "source": [ - "corpus6 = Corpus.merge(corpus4, corpus5)" + "corpus6 = corpus4.merge(corpus5)" ] }, { @@ -416,7 +355,7 @@ { "data": { "text/plain": [ - "ConvoKitMeta({'AB': 3, 'CD': 2, 'EF': 3})" + "{'AB': 3, 'CD': 2, 'EF': 3}" ] }, "execution_count": 16, @@ -436,7 +375,7 @@ { "data": { "text/plain": [ - "Utterance({'obj_type': 'utterance', 'vectors': [], 'speaker_': Speaker({'obj_type': 'speaker', 'vectors': [], 'owner': , 'id': 'bob', 'meta': ConvoKitMeta({})}), 'owner': , 'id': '1', 'meta': ConvoKitMeta({'fu': 'bu'})})" + "Utterance({'obj_type': 'utterance', 'meta': {'fu': 'bu'}, 'vectors': [], 'speaker': Speaker({'obj_type': 'speaker', 'meta': {}, 'vectors': [], 'owner': , 'id': 'bob'}), 'conversation_id': '0', 'reply_to': '0', 'timestamp': None, 'text': 'my name is bob', 'owner': , 'id': '1'})" ] }, "execution_count": 17, @@ -445,7 +384,7 @@ } ], "source": [ - "corpus6.get_utterance(\"1\")" + "corpus6.get_utterance('1')" ] }, { @@ -456,7 +395,7 @@ { "data": { "text/plain": [ - "Utterance({'obj_type': 'utterance', 'vectors': [], 'speaker_': Speaker({'obj_type': 'speaker', 'vectors': [], 'owner': , 'id': 'alice', 'meta': ConvoKitMeta({})}), 'owner': , 'id': '0', 'meta': ConvoKitMeta({'in': 'the hat'})})" + "Utterance({'obj_type': 'utterance', 'meta': {'in': 'the hat'}, 'vectors': [], 'speaker': Speaker({'obj_type': 'speaker', 'meta': {}, 'vectors': [], 'owner': , 'id': 'alice'}), 'conversation_id': '0', 'reply_to': None, 'timestamp': None, 'text': 'hello world', 'owner': , 'id': '0'})" ] }, "execution_count": 18, @@ -465,7 +404,7 @@ } ], "source": [ - "corpus6.get_utterance(\"0\")" + "corpus6.get_utterance('0')" ] }, { @@ -483,8 +422,8 @@ { "data": { "text/plain": [ - "[Utterance({'obj_type': 'utterance', 'vectors': [], 'speaker_': Speaker({'obj_type': 'speaker', 'vectors': [], 'owner': , 'id': 'alice', 'meta': ConvoKitMeta({})}), 'owner': , 'id': '0', 'meta': ConvoKitMeta({'in': 'the hat'})}),\n", - " Utterance({'obj_type': 'utterance', 'vectors': [], 'speaker_': Speaker({'obj_type': 'speaker', 'vectors': [], 'owner': , 'id': 'bob', 'meta': ConvoKitMeta({})}), 'owner': , 'id': '1', 'meta': ConvoKitMeta({'fu': 'bu'})})]" + "[Utterance({'obj_type': 'utterance', 'meta': {'in': 'the hat'}, 'vectors': [], 'speaker': Speaker({'obj_type': 'speaker', 'meta': {}, 'vectors': [], 'owner': , 'id': 'alice'}), 'conversation_id': '0', 'reply_to': None, 'timestamp': None, 'text': 'hello world', 'owner': , 'id': '0'}),\n", + " Utterance({'obj_type': 'utterance', 'meta': {'fu': 'bu'}, 'vectors': [], 'speaker': Speaker({'obj_type': 'speaker', 'meta': {}, 'vectors': [], 'owner': , 'id': 'bob'}), 'conversation_id': '0', 'reply_to': '0', 'timestamp': None, 'text': 'my name is bob', 'owner': , 'id': '1'})]" ] }, "execution_count": 19, @@ -498,11 +437,11 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "corpus6.dump(\"temp-corpus\", \"./\")" + "corpus6.dump('temp-corpus', './')" ] }, { @@ -515,9 +454,9 @@ ], "metadata": { "kernelspec": { - "display_name": "convokit_git", + "display_name": "temp-venv", "language": "python", - "name": "python3" + "name": "temp-venv" }, "language_info": { "codemirror_mode": { @@ -529,7 +468,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.0" + "version": "3.7.6" } }, "nbformat": 4, diff --git a/examples/politeness-strategies/Politeness_Marker_and_Summarize_Demo.ipynb b/examples/politeness-strategies/Politeness_Marker_and_Summarize_Demo.ipynb index 9bca5746..a5bfb482 100644 --- a/examples/politeness-strategies/Politeness_Marker_and_Summarize_Demo.ipynb +++ b/examples/politeness-strategies/Politeness_Marker_and_Summarize_Demo.ipynb @@ -172,7 +172,7 @@ } ], "source": [ - "utt = corpus.get_utterance(\"480633\")\n", + "utt = corpus.get_utterance('480633')\n", "print(\"RAW TEXT: \" + utt.text + \"\\n\")\n", "\n", "print(\"Sentences: \")\n", @@ -180,15 +180,13 @@ " stra = \"\"\n", " for y in x[\"toks\"]:\n", " stra += \" \" + y[\"tok\"]\n", - "\n", - " print(str(i) + \" \" + stra[:50] + \"...\")\n", - "\n", + " \n", + " print(str(i) + \" \" + stra[:50] + \"...\") \n", + " \n", "print()\n", - "for (k, v), (k1, v2) in zip(\n", - " utt.meta[\"politeness_strategies\"].items(), utt.meta[\"politeness_markers\"].items()\n", - "):\n", + "for ((k,v),(k1,v2)) in zip(utt.meta[\"politeness_strategies\"].items(),utt.meta[\"politeness_markers\"].items()):\n", " if v != 0:\n", - " print(k[21 : len(k) - 2] + \" results:\")\n", + " print(k[21:len(k)-2] + \" results:\")\n", " print(\"Markers: \" + str(v2) + \"\\n\")" ] }, @@ -243,12 +241,10 @@ } ], "source": [ - "spacy_nlp = spacy.load(\"en_core_web_sm\", disable=[\"ner\"])\n", + "spacy_nlp = spacy.load('en_core_web_sm', disable=['ner'])\n", "\n", - "utt = ps.transform_utterance(\n", - " \"hello, could you please help me proofread this article?\", spacy_nlp=spacy_nlp\n", - ")\n", - "utt.meta[\"politeness_strategies\"]" + "utt = ps.transform_utterance(\"hello, could you please help me proofread this article?\", spacy_nlp=spacy_nlp)\n", + "utt.meta['politeness_strategies']" ] }, { @@ -298,7 +294,7 @@ } ], "source": [ - "data = ps.summarize(corpus, plot=True, y_lim=1.6)" + "data = ps.summarize(corpus, plot=True, y_lim = 1.6)" ] }, { @@ -331,8 +327,8 @@ } ], "source": [ - "query = lambda x: not x.meta[\"is-admin\"]\n", - "non_admin_data = ps.summarize(corpus, query, plot=True, y_lim=1.6)" + "query = lambda x : not x.meta[\"is-admin\"]\n", + "non_admin_data = ps.summarize(corpus, query, plot = True, y_lim = 1.6)" ] }, { @@ -361,8 +357,8 @@ } ], "source": [ - "query = lambda x: x.meta[\"is-admin\"]\n", - "admin_data = ps.summarize(corpus, query, plot=True, y_lim=1.6)" + "query = lambda x : x.meta[\"is-admin\"]\n", + "admin_data = ps.summarize(corpus, query, plot = True, y_lim = 1.6)" ] }, { diff --git a/examples/politeness-strategies/Politeness_Strategies_in_MT-mediated_Communication.ipynb b/examples/politeness-strategies/Politeness_Strategies_in_MT-mediated_Communication.ipynb index 17610c17..eed740de 100644 --- a/examples/politeness-strategies/Politeness_Strategies_in_MT-mediated_Communication.ipynb +++ b/examples/politeness-strategies/Politeness_Strategies_in_MT-mediated_Communication.ipynb @@ -35,7 +35,6 @@ "\n", "import seaborn as sns\n", "from matplotlib import pyplot as plt\n", - "\n", "%matplotlib inline" ] }, @@ -68,7 +67,7 @@ "metadata": {}, "outputs": [], "source": [ - "# OPTION 1: DOWNLOAD CORPUS\n", + "# OPTION 1: DOWNLOAD CORPUS \n", "# UNCOMMENT THESE LINES TO DOWNLOAD CORPUS\n", "# DATA_DIR = ''\n", "# WIKI_ROOT_DIR = download('wiki-corpus', data_dir=DATA_DIR)\n", @@ -80,7 +79,7 @@ "corpus = Corpus(filename=WIKI_ROOT_DIR)\n", "\n", "# load parses\n", - "corpus.load_info(\"utterance\", [\"parsed\"])" + "corpus.load_info('utterance',['parsed'])" ] }, { @@ -99,7 +98,7 @@ } ], "source": [ - "# Overall stats of the dataset\n", + "# Overall stats of the dataset \n", "corpus.print_summary_stats()" ] }, @@ -168,7 +167,7 @@ "source": [ "ps_local = PolitenessStrategies(strategy_collection=\"politeness_local\", verbose=10000)\n", "\n", - "# By default, strategy extraction results are saved under \"politeness_strategies\".\n", + "# By default, strategy extraction results are saved under \"politeness_strategies\". \n", "corpus = ps_local.transform(corpus, markers=True)" ] }, @@ -236,9 +235,8 @@ "outputs": [], "source": [ "# utterance-level strategy uses\n", - "df_feat = pd.DataFrame.from_dict(\n", - " {utt.id: utt.meta[\"politeness_strategies\"] for utt in corpus.iter_utterances()}, orient=\"index\"\n", - ")" + "df_feat = pd.DataFrame.from_dict({utt.id: utt.meta['politeness_strategies'] \\\n", + " for utt in corpus.iter_utterances()}, orient='index')" ] }, { @@ -252,13 +250,11 @@ "sampled_ids, samples = set(), []\n", "\n", "for k in sorted_strategies:\n", - " df_sample = df_feat[(~df_feat.index.isin(sampled_ids)) & (df_feat[k] == 1)].sample(\n", - " 1000, random_state=42\n", - " )\n", - " df_sample[\"strategy\"] = k\n", - " samples.append(df_sample[[\"strategy\"]])\n", + " df_sample = df_feat[(~df_feat.index.isin(sampled_ids)) & (df_feat[k]==1)].sample(1000, random_state=42)\n", + " df_sample['strategy'] = k\n", + " samples.append(df_sample[['strategy']])\n", " sampled_ids.update(df_sample.index)\n", - "\n", + " \n", "df_en_sample = pd.concat(samples)" ] }, @@ -271,14 +267,12 @@ "# saving as a convokit corpus\n", "for i, info in df_en_sample.itertuples():\n", " utt = corpus.get_utterance(i)\n", - " utt.add_meta(\"selected\", True)\n", - " utt.add_meta(\"strategy\", info)\n", + " utt.add_meta('selected', True)\n", + " utt.add_meta('strategy', info)\n", "\n", - "# filter only selected utterances\n", + "# filter only selected utterances \n", "# (not that this does not maintain conversation structure)\n", - "wiki_sampled_en = corpus.filter_utterances_by(\n", - " lambda utt: \"selected\" in utt.meta and utt.meta[\"selected\"]\n", - ")" + "wiki_sampled_en = corpus.filter_utterances_by(lambda utt:'selected' in utt.meta and utt.meta['selected'])" ] }, { @@ -311,7 +305,7 @@ "df_utts = wiki_sampled_en.get_utterances_dataframe(exclude_meta=True)\n", "\n", "# translation model\n", - "model = EasyNMT(\"opus-mt\", cache_folder=\"/belafonte_sauna/liye_translations/easynmt/\")" + "model = EasyNMT('opus-mt', cache_folder=\"/belafonte_sauna/liye_translations/easynmt/\")" ] }, { @@ -328,14 +322,12 @@ } ], "source": [ - "df_utts[\"en-zh\"] = model.translate(\n", - " list(df_utts[\"text\"]),\n", - " target_lang=\"zh\",\n", - " source_lang=\"en\",\n", - " show_progress_bar=True,\n", - " batch_size=8,\n", - " perform_sentence_splitting=False,\n", - ")" + "df_utts['en-zh'] = model.translate(list(df_utts['text']), \\\n", + " target_lang='zh', \\\n", + " source_lang='en', \\\n", + " show_progress_bar=True,\n", + " batch_size=8, \\\n", + " perform_sentence_splitting=False)" ] }, { @@ -352,14 +344,12 @@ } ], "source": [ - "df_utts[\"en-back\"] = model.translate(\n", - " list(df_utts[\"en-zh\"]),\n", - " target_lang=\"en\",\n", - " source_lang=\"zh\",\n", - " show_progress_bar=True,\n", - " batch_size=8,\n", - " perform_sentence_splitting=False,\n", - ")" + "df_utts['en-back'] = model.translate(list(df_utts['en-zh']), \\\n", + " target_lang='en', \\\n", + " source_lang='zh', \\\n", + " show_progress_bar=True,\n", + " batch_size=8, \\\n", + " perform_sentence_splitting=False)" ] }, { @@ -384,11 +374,11 @@ "metadata": {}, "outputs": [], "source": [ - "for row in df_utts[[\"text\", \"en-zh\", \"en-back\"]].itertuples():\n", + "for row in df_utts[['text', 'en-zh', 'en-back']].itertuples():\n", " idx, trans, backtrans = row[0], row[2], row[3]\n", " utt = wiki_sampled_en.get_utterance(idx)\n", - " utt.add_meta(\"en-zh\", trans)\n", - " utt.add_meta(\"en-back\", backtrans)" + " utt.add_meta('en-zh', trans)\n", + " utt.add_meta('en-back', backtrans)" ] }, { @@ -397,14 +387,14 @@ "metadata": {}, "outputs": [], "source": [ - "# parser to parse back-translated English texts\n", - "en_parser = TextParser(output_field=\"en_parsed\", input_field=\"en-back\", verbosity=5000)\n", + "# parser to parse back-translated English texts \n", + "en_parser = TextParser(output_field='en_parsed', input_field='en-back', \\\n", + " verbosity=5000)\n", "\n", "# parer to parse translated texts in Chinese\n", - "spacy_zh = spacy.load(\"zh_core_web_sm\", disable=[\"ner\"])\n", - "zh_parser = TextParser(\n", - " output_field=\"zh_parsed\", input_field=\"en-zh\", spacy_nlp=spacy_zh, verbosity=5000\n", - ")" + "spacy_zh = spacy.load('zh_core_web_sm', disable=['ner'])\n", + "zh_parser = TextParser(output_field='zh_parsed', input_field='en-zh', \\\n", + " spacy_nlp=spacy_zh, verbosity=5000)" ] }, { @@ -469,7 +459,7 @@ } ], "source": [ - "wiki_sampled_zh = Corpus(download(\"wiki-sampled-zh-corpus\"))" + "wiki_sampled_zh = Corpus(download('wiki-sampled-zh-corpus'))" ] }, { @@ -490,8 +480,8 @@ ], "source": [ "# Inspect the meta data avaible, should have the following:\n", - "# 'parsed' contains the dependency parses for the utterance text\n", - "# 'zh-en' and 'zh-back' contains the translations and back translations for utterance texts respectively\n", + "# 'parsed' contains the dependency parses for the utterance text \n", + "# 'zh-en' and 'zh-back' contains the translations and back translations for utterance texts respectively \n", "# 'en_parsed' and 'zh_parsed' contain the respective parses, which we will use for strategy extractions\n", "wiki_sampled_zh.meta_index" ] @@ -538,13 +528,13 @@ } ], "source": [ - "# Download the data if Part 1 of the notebook is skipped\n", + "# Download the data if Part 1 of the notebook is skipped \n", "\n", - "# replace with where you'd like the corpora to be saved\n", - "DATA_DIR = \"/belafonte_sauna/liye_translations/convokit_mt/test/\"\n", + "# replace with where you'd like the corpora to be saved \n", + "DATA_DIR = '/belafonte_sauna/liye_translations/convokit_mt/test/'\n", "\n", - "wiki_sampled_en = Corpus(download(\"wiki-sampled-en-corpus\", data_dir=DATA_DIR))\n", - "wiki_sampled_zh = Corpus(download(\"wiki-sampled-zh-corpus\", data_dir=DATA_DIR))" + "wiki_sampled_en = Corpus(download('wiki-sampled-en-corpus', data_dir=DATA_DIR))\n", + "wiki_sampled_zh = Corpus(download('wiki-sampled-zh-corpus', data_dir=DATA_DIR))" ] }, { @@ -605,19 +595,15 @@ "metadata": {}, "outputs": [], "source": [ - "ps_zh = PolitenessStrategies(\n", - " parse_attribute_name=\"zh_parsed\",\n", - " strategy_attribute_name=\"zh_strategies\",\n", - " strategy_collection=\"politeness_cscw_zh\",\n", - " verbose=5000,\n", - ")\n", + "ps_zh = PolitenessStrategies(parse_attribute_name='zh_parsed', \\\n", + " strategy_attribute_name=\"zh_strategies\", \\\n", + " strategy_collection=\"politeness_cscw_zh\", \n", + " verbose=5000)\n", "\n", - "ps_en = PolitenessStrategies(\n", - " parse_attribute_name=\"en_parsed\",\n", - " strategy_attribute_name=\"en_strategies\",\n", - " strategy_collection=\"politeness_local\",\n", - " verbose=5000,\n", - ")" + "ps_en = PolitenessStrategies(parse_attribute_name='en_parsed', \\\n", + " strategy_attribute_name=\"en_strategies\", \\\n", + " strategy_collection=\"politeness_local\",\n", + " verbose=5000)" ] }, { @@ -695,32 +681,31 @@ "metadata": {}, "outputs": [], "source": [ - "# Mapping between strategy names in different collections\n", - "# Note that the collections are not exactly equivalent,\n", + "# Mapping between strategy names in different collections \n", + "# Note that the collections are not exactly equivalent, \n", "# i.e., there are strategies we can't find a close match between the two collections\n", "\n", - "en2zh = {\n", - " \"Actually\": \"factuality\",\n", - " \"Adverb.Just\": None,\n", - " \"Affirmation\": \"praise\",\n", - " \"Apology\": \"apologetic\",\n", - " \"By.The.Way\": \"indirect_btw\",\n", - " \"Conj.Start\": \"start_so\",\n", - " \"Filler\": None,\n", - " \"For.Me\": None,\n", - " \"For.You\": None,\n", - " \"Gratitude\": \"gratitude\",\n", - " \"Greeting\": \"greeting\",\n", - " \"Hedges\": \"hedge\",\n", - " \"Indicative\": \"can_you\",\n", - " \"Please\": \"please\",\n", - " \"Please.Start\": \"start_please\",\n", - " \"Reassurance\": None,\n", - " \"Subjunctive\": \"could_you\",\n", - " \"Swearing\": \"taboo\",\n", - "}\n", + "en2zh = {'Actually': 'factuality',\n", + " 'Adverb.Just': None,\n", + " 'Affirmation': 'praise',\n", + " 'Apology': 'apologetic',\n", + " 'By.The.Way': 'indirect_btw',\n", + " 'Conj.Start': 'start_so',\n", + " 'Filler': None,\n", + " 'For.Me': None,\n", + " 'For.You': None,\n", + " 'Gratitude': 'gratitude',\n", + " 'Greeting':'greeting',\n", + " 'Hedges':'hedge',\n", + " 'Indicative':'can_you',\n", + " 'Please': 'please',\n", + " 'Please.Start': 'start_please',\n", + " 'Reassurance': None,\n", + " 'Subjunctive': 'could_you',\n", + " 'Swearing': 'taboo'\n", + " }\n", "\n", - "zh2en = {v: k for k, v in en2zh.items() if v}" + "zh2en = {v:k for k,v in en2zh.items() if v}" ] }, { @@ -731,21 +716,22 @@ "source": [ "# add utterance-level assessing result to utterance metadata for the English corpus\n", "for utt in wiki_sampled_en.iter_utterances():\n", - " # strategy names in English and Chinese\n", - " en_name = utt.retrieve_meta(\"strategy\")\n", + " \n", + " # strategy names in English and Chinese \n", + " en_name = utt.retrieve_meta('strategy')\n", " zh_name = en2zh[en_name]\n", - "\n", + " \n", " # translations\n", " if zh_name:\n", - " trans_status = utt.retrieve_meta(\"zh_strategies\")[zh_name]\n", - " utt.add_meta(\"translation_result\", trans_status)\n", + " trans_status = utt.retrieve_meta('zh_strategies')[zh_name]\n", + " utt.add_meta('translation_result', trans_status)\n", " else:\n", - " # when a comparison isn't applicable, we use the value -1\n", - " utt.add_meta(\"translation_result\", -1)\n", - "\n", - " # back translations\n", - " backtrans_status = utt.retrieve_meta(\"en_strategies\")[en_name]\n", - " utt.add_meta(\"backtranslation_result\", backtrans_status)" + " # when a comparison isn't applicable, we use the value -1 \n", + " utt.add_meta('translation_result', -1)\n", + " \n", + " # back translations \n", + " backtrans_status = utt.retrieve_meta('en_strategies')[en_name]\n", + " utt.add_meta('backtranslation_result', backtrans_status)" ] }, { @@ -756,18 +742,19 @@ "source": [ "# add utterance-level assessing result to utterance metadata for the Chinese corpus\n", "for utt in wiki_sampled_zh.iter_utterances():\n", - " # strategy names in English and Chinese\n", - " zh_name = utt.retrieve_meta(\"strategy\")\n", + " \n", + " # strategy names in English and Chinese \n", + " zh_name = utt.retrieve_meta('strategy')\n", " en_name = zh2en[zh_name]\n", - "\n", + " \n", " # translations\n", " if en_name:\n", - " trans_status = utt.retrieve_meta(\"en_strategies\")[en_name]\n", - " utt.add_meta(\"translation_result\", trans_status)\n", - "\n", - " # back translations\n", - " backtrans_status = utt.retrieve_meta(\"zh_strategies\")[zh_name]\n", - " utt.add_meta(\"backtranslation_result\", backtrans_status)" + " trans_status = utt.retrieve_meta('en_strategies')[en_name]\n", + " utt.add_meta('translation_result', trans_status)\n", + " \n", + " # back translations \n", + " backtrans_status = utt.retrieve_meta('zh_strategies')[zh_name]\n", + " utt.add_meta('backtranslation_result', backtrans_status)" ] }, { @@ -801,15 +788,16 @@ "metadata": {}, "outputs": [], "source": [ - "# results for the English corpus\n", - "res_df_en = wiki_sampled_en.get_attribute_table(\n", - " obj_type=\"utterance\", attrs=[\"strategy\", \"translation_result\", \"backtranslation_result\"]\n", - ")\n", + "# results for the English corpus \n", + "res_df_en = wiki_sampled_en.get_attribute_table(obj_type='utterance', \\\n", + " attrs=['strategy', \\\n", + " 'translation_result', \\\n", + " 'backtranslation_result'])\n", "\n", - "res_df_en.columns = [\"strategy\", \"en->zh\", \"en->zh->en\"]\n", + "res_df_en.columns = ['strategy', 'en->zh', 'en->zh->en']\n", "\n", - "# strategy-level permeability, -1 means the strategy is not applicable\n", - "permeability_df_en = res_df_en.groupby(\"strategy\").sum() / 1000" + "# strategy-level permeability, -1 means the strategy is not applicable \n", + "permeability_df_en = res_df_en.groupby('strategy').sum() / 1000" ] }, { @@ -818,30 +806,14 @@ "metadata": {}, "outputs": [], "source": [ - "# As a reference, we include permeability computed through an informal small-scale human annotations\n", + "# As a reference, we include permeability computed through an informal small-scale human annotations \n", "# (50 instances, one annotator)\n", - "reference = {\n", - " \"Actually\": 0.7,\n", - " \"Adverb.Just\": 0.62,\n", - " \"Affirmation\": 0.8,\n", - " \"Apology\": 0.94,\n", - " \"By.The.Way\": 0.42,\n", - " \"Conj.Start\": 0.66,\n", - " \"Filler\": 0.58,\n", - " \"For.Me\": 0.62,\n", - " \"For.You\": 0.52,\n", - " \"Gratitude\": 0.86,\n", - " \"Greeting\": 0.52,\n", - " \"Hedges\": 0.68,\n", - " \"Indicative\": 0.64,\n", - " \"Please\": 0.72,\n", - " \"Please.Start\": 0.82,\n", - " \"Reassurance\": 0.88,\n", - " \"Subjunctive\": 0.0,\n", - " \"Swearing\": 0.3,\n", - "}\n", - "\n", - "permeability_df_en[\"reference\"] = [reference[name] for name in permeability_df_en.index]" + "reference = {'Actually': 0.7, 'Adverb.Just': 0.62, 'Affirmation': 0.8, 'Apology': 0.94, 'By.The.Way': 0.42,\n", + " 'Conj.Start': 0.66, 'Filler': 0.58, 'For.Me': 0.62, 'For.You': 0.52, 'Gratitude': 0.86,\n", + " 'Greeting': 0.52, 'Hedges': 0.68, 'Indicative': 0.64, 'Please': 0.72, 'Please.Start': 0.82,\n", + " 'Reassurance': 0.88, 'Subjunctive': 0.0, 'Swearing': 0.3}\n", + "\n", + "permeability_df_en['reference'] = [reference[name] for name in permeability_df_en.index]" ] }, { @@ -851,10 +823,8 @@ "outputs": [], "source": [ "# As further context, we can inlcude information about strategy prevalence on our plot\n", - "prevalence_en = dict(df_prevalence * 100)\n", - "permeability_df_en.index = [\n", - " f\"{name} ({prevalence_en[name]:.1f}%)\" for name in permeability_df_en.index\n", - "]" + "prevalence_en = dict(df_prevalence*100)\n", + "permeability_df_en.index = [f\"{name} ({prevalence_en[name]:.1f}%)\" for name in permeability_df_en.index]" ] }, { @@ -879,9 +849,7 @@ "\n", "# cells that are not applicable are masked in white\n", "with sns.axes_style(\"white\"):\n", - " sns.heatmap(\n", - " permeability_df_en, annot=True, cmap=\"Greens\", fmt=\".1%\", mask=permeability_df_en == -1\n", - " )" + " sns.heatmap(permeability_df_en, annot=True, cmap=\"Greens\", fmt=\".1%\", mask=permeability_df_en==-1)" ] }, { @@ -897,16 +865,17 @@ "metadata": {}, "outputs": [], "source": [ - "# results for the English corpus\n", - "res_df_zh = wiki_sampled_zh.get_attribute_table(\n", - " obj_type=\"utterance\", attrs=[\"strategy\", \"translation_result\", \"backtranslation_result\"]\n", - ")\n", + "# results for the English corpus \n", + "res_df_zh = wiki_sampled_zh.get_attribute_table(obj_type='utterance', \\\n", + " attrs=['strategy', \\\n", + " 'translation_result', \\\n", + " 'backtranslation_result'])\n", "\n", - "# convert names to make it easier to compare between directions\n", - "res_df_zh[\"strategy\"] = res_df_zh[\"strategy\"].apply(lambda name: zh2en[name])\n", + "# convert names to make it easier to compare between directions \n", + "res_df_zh['strategy'] = res_df_zh['strategy'].apply(lambda name:zh2en[name])\n", "\n", - "res_df_zh.columns = [\"strategy\", \"zh->en\", \"zh->en->zh\"]\n", - "permeability_df_zh = res_df_zh.groupby(\"strategy\").sum() / 1000" + "res_df_zh.columns = ['strategy', 'zh->en', 'zh->en->zh'] \n", + "permeability_df_zh = res_df_zh.groupby('strategy').sum() / 1000" ] }, { @@ -918,25 +887,13 @@ "# as the original dataset for the Chinese corpus is quite large\n", "# we present strategy prevalence results directly\n", "\n", - "prevalence_zh = {\n", - " \"apologetic\": 0.6,\n", - " \"can_you\": 0.3,\n", - " \"could_you\": 0.0,\n", - " \"factuality\": 0.4,\n", - " \"gratitude\": 3.1,\n", - " \"greeting\": 0.0,\n", - " \"hedge\": 42.8,\n", - " \"indirect_btw\": 0.1,\n", - " \"praise\": 0.4,\n", - " \"please\": 25.4,\n", - " \"start_please\": 17.7,\n", - " \"start_so\": 0.7,\n", - " \"taboo\": 0.4,\n", - "}\n", - "\n", - "permeability_df_zh.index = [\n", - " f\"{name} ({prevalence_zh[en2zh[name]]:.1f}%)\" for name in permeability_df_zh.index\n", - "]" + "prevalence_zh = {'apologetic': 0.6, 'can_you': 0.3, 'could_you': 0.0, \n", + " 'factuality': 0.4,'gratitude': 3.1, 'greeting': 0.0, \n", + " 'hedge': 42.8, 'indirect_btw': 0.1,\n", + " 'praise': 0.4, 'please': 25.4, \n", + " 'start_please': 17.7, 'start_so': 0.7, 'taboo': 0.4}\n", + "\n", + "permeability_df_zh.index = [f\"{name} ({prevalence_zh[en2zh[name]]:.1f}%)\" for name in permeability_df_zh.index]" ] }, { diff --git a/examples/politeness-strategies/politeness_demo.ipynb b/examples/politeness-strategies/politeness_demo.ipynb index 2af08c30..6003920a 100755 --- a/examples/politeness-strategies/politeness_demo.ipynb +++ b/examples/politeness-strategies/politeness_demo.ipynb @@ -111,7 +111,6 @@ "outputs": [], "source": [ "from convokit import TextParser\n", - "\n", "parser = TextParser(verbosity=1000)" ] }, @@ -150,7 +149,6 @@ "outputs": [], "source": [ "from convokit import PolitenessStrategies\n", - "\n", "ps = PolitenessStrategies()" ] }, @@ -438,7 +436,7 @@ } ], "source": [ - "wiki_corpus.get_utterance(\"434044\").meta" + "wiki_corpus.get_utterance('434044').meta" ] }, { @@ -493,13 +491,11 @@ } ], "source": [ - "utt = wiki_corpus.get_utterance(\"434044\")\n", + "utt = wiki_corpus.get_utterance('434044')\n", "print(\"RAW TEXT: \" + utt.text + \"\\n\")\n", - "for (k, v), (k1, v2) in zip(\n", - " utt.meta[\"politeness_strategies\"].items(), utt.meta[\"politeness_markers\"].items()\n", - "):\n", + "for ((k,v),(k1,v2)) in zip(utt.meta[\"politeness_strategies\"].items(),utt.meta[\"politeness_markers\"].items()):\n", " if v != 0:\n", - " print(k[21 : len(k) - 2] + \" results:\")\n", + " print(k[21:len(k)-2] + \" results:\")\n", " print(\"Markers: \" + str(v2) + \"\\n\")" ] }, @@ -565,8 +561,8 @@ } ], "source": [ - "query = lambda x: x.meta[\"politeness_strategies\"][\"feature_politeness_==HASPOSITIVE==\"] == 1\n", - "positive_data = ps.summarize(wiki_corpus, query, plot=True)" + "query = lambda x : x.meta[\"politeness_strategies\"][\"feature_politeness_==HASPOSITIVE==\"] == 1\n", + "positive_data = ps.summarize(wiki_corpus, query, plot = True)" ] }, { @@ -612,9 +608,7 @@ "metadata": {}, "outputs": [], "source": [ - "binary_corpus = Corpus(\n", - " utterances=[utt for utt in wiki_corpus.iter_utterances() if utt.meta[\"Binary\"] != 0]\n", - ")" + "binary_corpus = Corpus(utterances=[utt for utt in wiki_corpus.iter_utterances() if utt.meta[\"Binary\"] != 0])" ] }, { @@ -660,11 +654,9 @@ } ], "source": [ - "clf_cv = Classifier(\n", - " obj_type=\"utterance\",\n", - " pred_feats=[\"politeness_strategies\"],\n", - " labeller=lambda utt: utt.meta[\"Binary\"] == 1,\n", - ")\n", + "clf_cv = Classifier(obj_type=\"utterance\", \n", + " pred_feats=[\"politeness_strategies\"], \n", + " labeller=lambda utt: utt.meta['Binary'] == 1)\n", "\n", "clf_cv.evaluate_with_cv(binary_corpus)" ] @@ -705,11 +697,9 @@ } ], "source": [ - "clf_split = Classifier(\n", - " obj_type=\"utterance\",\n", - " pred_feats=[\"politeness_strategies\"],\n", - " labeller=lambda utt: utt.meta[\"Binary\"] == 1,\n", - ")\n", + "clf_split = Classifier(obj_type=\"utterance\", \n", + " pred_feats=[\"politeness_strategies\"], \n", + " labeller=lambda utt: utt.meta['Binary'] == 1)\n", "\n", "clf_split.evaluate_with_train_test_split(binary_corpus)" ] @@ -736,17 +726,10 @@ ], "source": [ "test_ids = binary_corpus.get_utterance_ids()[-100:]\n", - "train_corpus = Corpus(\n", - " utterances=[utt for utt in binary_corpus.iter_utterances() if utt.id not in test_ids]\n", - ")\n", - "test_corpus = Corpus(\n", - " utterances=[utt for utt in binary_corpus.iter_utterances() if utt.id in test_ids]\n", - ")\n", - "print(\n", - " \"train size = {}, test size = {}\".format(\n", - " len(train_corpus.get_utterance_ids()), len(test_corpus.get_utterance_ids())\n", - " )\n", - ")" + "train_corpus = Corpus(utterances=[utt for utt in binary_corpus.iter_utterances() if utt.id not in test_ids])\n", + "test_corpus = Corpus(utterances=[utt for utt in binary_corpus.iter_utterances() if utt.id in test_ids])\n", + "print(\"train size = {}, test size = {}\".format(len(train_corpus.get_utterance_ids()),\n", + " len(test_corpus.get_utterance_ids())))" ] }, { @@ -780,11 +763,9 @@ } ], "source": [ - "clf = Classifier(\n", - " obj_type=\"utterance\",\n", - " pred_feats=[\"politeness_strategies\"],\n", - " labeller=lambda utt: utt.meta[\"Binary\"] == 1,\n", - ")\n", + "clf = Classifier(obj_type=\"utterance\", \n", + " pred_feats=[\"politeness_strategies\"], \n", + " labeller=lambda utt: utt.meta['Binary'] == 1)\n", "clf.fit(train_corpus)" ] }, @@ -982,7 +963,7 @@ "for i, idx in enumerate(test_ids[0:5]):\n", " print(i)\n", " test_utt = test_corpus.get_utterance(idx)\n", - " ypred, yprob = test_utt.meta[\"prediction\"], test_utt.meta[\"pred_score\"]\n", + " ypred, yprob = test_utt.meta['prediction'], test_utt.meta['pred_score']\n", " print(\"test utterance:\\n{}\".format(test_utt.text))\n", " print(\"------------------------\")\n", " print(\"Result: {}, probability estimates = {}\\n\".format(pred2label[ypred], yprob))" diff --git a/examples/politeness-strategies/short-politeness-example.ipynb b/examples/politeness-strategies/short-politeness-example.ipynb index ba6b5594..0749087a 100644 --- a/examples/politeness-strategies/short-politeness-example.ipynb +++ b/examples/politeness-strategies/short-politeness-example.ipynb @@ -41,7 +41,7 @@ } ], "source": [ - "train_corpus = Corpus(filename=download(\"wiki-politeness-annotated\"))" + "train_corpus = Corpus(filename=download('wiki-politeness-annotated'))" ] }, { @@ -58,7 +58,7 @@ } ], "source": [ - "test_corpus = Corpus(filename=download(\"reddit-corpus-small\"))" + "test_corpus = Corpus(filename=download('reddit-corpus-small'))" ] }, { @@ -86,7 +86,7 @@ ], "source": [ "parser = TextParser()\n", - "parser.transform(train_corpus)" + "parser.transform(train_corpus)\n" ] }, { @@ -151,11 +151,8 @@ "metadata": {}, "outputs": [], "source": [ - "clf = Classifier(\n", - " obj_type=\"utterance\",\n", - " pred_feats=[\"politeness_strategies\"],\n", - " labeller=lambda utt: utt.meta[\"Binary\"] == 1,\n", - ")" + "clf = Classifier(obj_type='utterance', pred_feats=['politeness_strategies'], \n", + " labeller=lambda utt: utt.meta['Binary']==1)" ] }, { @@ -204,8 +201,8 @@ "metadata": {}, "outputs": [], "source": [ - "aww_vals = clf.summarize(test_corpus, selector=lambda utt: utt.meta[\"subreddit\"] == \"aww\")\n", - "politics_vals = clf.summarize(test_corpus, selector=lambda utt: utt.meta[\"subreddit\"] == \"politics\")" + "aww_vals = clf.summarize(test_corpus, selector=lambda utt: utt.meta['subreddit']=='aww')\n", + "politics_vals = clf.summarize(test_corpus, selector=lambda utt: utt.meta['subreddit']=='politics')" ] }, { @@ -214,8 +211,8 @@ "metadata": {}, "outputs": [], "source": [ - "print(aww_vals[\"pred_score\"].mean())\n", - "print(politics_vals[\"pred_score\"].mean())" + "print(aww_vals['pred_score'].mean())\n", + "print(politics_vals['pred_score'].mean())" ] }, { diff --git a/examples/prompt-types/prompt-type-demo.ipynb b/examples/prompt-types/prompt-type-demo.ipynb index 333e7213..bdad1062 100644 --- a/examples/prompt-types/prompt-type-demo.ipynb +++ b/examples/prompt-types/prompt-type-demo.ipynb @@ -84,7 +84,7 @@ }, "outputs": [], "source": [ - "# OPTION 1: DOWNLOAD CORPUS\n", + "# OPTION 1: DOWNLOAD CORPUS \n", "# UNCOMMENT THESE LINES TO DOWNLOAD CORPUS\n", "# DATA_DIR = ''\n", "# ROOT_DIR = download('parliament-corpus', data_dir=DATA_DIR)\n", @@ -94,7 +94,7 @@ "# ROOT_DIR = ''\n", "\n", "corpus = convokit.Corpus(ROOT_DIR)\n", - "corpus.load_info(\"utterance\", [\"parsed\"])" + "corpus.load_info('utterance',['parsed'])" ] }, { @@ -109,8 +109,7 @@ "outputs": [], "source": [ "import warnings\n", - "\n", - "warnings.filterwarnings(\"ignore\")" + "warnings.filterwarnings('ignore')" ] }, { @@ -152,7 +151,7 @@ }, "outputs": [], "source": [ - "test_utt_id = \"1997-01-27a.4.0\"\n", + "test_utt_id = '1997-01-27a.4.0'\n", "utt = corpus.get_utterance(test_utt_id)" ] }, @@ -295,7 +294,7 @@ } ], "source": [ - "get_arcs = TextToArcs(\"arcs\", verbosity=VERBOSITY)\n", + "get_arcs = TextToArcs('arcs', verbosity=VERBOSITY)\n", "corpus = get_arcs.transform(corpus)" ] }, @@ -341,7 +340,7 @@ } ], "source": [ - "utt.retrieve_meta(\"arcs\")" + "utt.retrieve_meta('arcs')" ] }, { @@ -416,7 +415,7 @@ "outputs": [], "source": [ "def question_filter(utt):\n", - " return utt.retrieve_meta(\"is_question\")" + " return utt.retrieve_meta('is_question')" ] }, { @@ -430,26 +429,13 @@ }, "outputs": [], "source": [ - "q_arc_pipe = ConvokitPipeline(\n", - " [\n", - " (\"censor_nouns\", CensorNouns(\"parsed_censored\", verbosity=VERBOSITY)),\n", - " (\n", - " \"shallow_arcs\",\n", - " TextToArcs(\n", - " \"arcs_censored\", input_field=\"parsed_censored\", root_only=True, verbosity=VERBOSITY\n", - " ),\n", - " ),\n", - " (\n", - " \"question_sentence_filter\",\n", - " QuestionSentences(\n", - " \"question_arcs\",\n", - " input_field=\"arcs_censored\",\n", - " input_filter=question_filter,\n", - " verbosity=VERBOSITY,\n", - " ),\n", - " ),\n", - " ]\n", - ")" + "q_arc_pipe = ConvokitPipeline([\n", + " ('censor_nouns', CensorNouns('parsed_censored', verbosity=VERBOSITY)),\n", + " ('shallow_arcs', TextToArcs('arcs_censored', input_field='parsed_censored', \n", + " root_only=True, verbosity=VERBOSITY)),\n", + " ('question_sentence_filter', QuestionSentences('question_arcs', input_field='arcs_censored',\n", + " input_filter=question_filter, verbosity=VERBOSITY))\n", + "])" ] }, { @@ -641,7 +627,7 @@ } ], "source": [ - "utt.retrieve_meta(\"question_arcs\")" + "utt.retrieve_meta('question_arcs')" ] }, { @@ -662,7 +648,7 @@ }, "outputs": [], "source": [ - "test_utt_id_1 = \"2015-06-09c.1041.5\"\n", + "test_utt_id_1 = '2015-06-09c.1041.5'\n", "utt1 = corpus.get_utterance(test_utt_id_1)" ] }, @@ -703,7 +689,7 @@ } ], "source": [ - "utt1.retrieve_meta(\"question_arcs\")" + "utt1.retrieve_meta('question_arcs')" ] }, { @@ -747,9 +733,8 @@ }, "outputs": [], "source": [ - "pm_model = PhrasingMotifs(\n", - " \"motifs\", \"question_arcs\", min_support=100, fit_filter=question_filter, verbosity=VERBOSITY\n", - ")" + "pm_model = PhrasingMotifs('motifs','question_arcs',min_support=100,fit_filter=question_filter,\n", + " verbosity=VERBOSITY)" ] }, { @@ -1031,7 +1016,7 @@ } ], "source": [ - "utt.retrieve_meta(\"motifs\")" + "utt.retrieve_meta('motifs')" ] }, { @@ -1058,7 +1043,7 @@ } ], "source": [ - "utt.retrieve_meta(\"motifs__sink\")" + "utt.retrieve_meta('motifs__sink')" ] }, { @@ -1130,7 +1115,7 @@ } ], "source": [ - "pm_model.dump_model(os.path.join(ROOT_DIR, \"pm_model\"))" + "pm_model.dump_model(os.path.join(ROOT_DIR, 'pm_model'))" ] }, { @@ -1154,7 +1139,7 @@ } ], "source": [ - "pm_model_dir = os.path.join(ROOT_DIR, \"pm_model\")\n", + "pm_model_dir = os.path.join(ROOT_DIR, 'pm_model')\n", "!ls $pm_model_dir" ] }, @@ -1176,9 +1161,8 @@ }, "outputs": [], "source": [ - "new_pm_model = PhrasingMotifs(\n", - " \"motifs_new\", \"question_arcs\", min_support=100, fit_filter=question_filter, verbosity=VERBOSITY\n", - ")" + "new_pm_model = PhrasingMotifs('motifs_new','question_arcs',min_support=100,fit_filter=question_filter,\n", + " verbosity=VERBOSITY)" ] }, { @@ -1205,7 +1189,7 @@ } ], "source": [ - "new_pm_model.load_model(os.path.join(ROOT_DIR, \"pm_model\"))" + "new_pm_model.load_model(os.path.join(ROOT_DIR, 'pm_model'))" ] }, { @@ -1253,7 +1237,7 @@ } ], "source": [ - "utt.retrieve_meta(\"motifs__sink\")" + "utt.retrieve_meta('motifs__sink')" ] }, { @@ -1280,7 +1264,7 @@ } ], "source": [ - "utt.retrieve_meta(\"motifs_new__sink\")" + "utt.retrieve_meta('motifs_new__sink')" ] }, { @@ -1422,24 +1406,14 @@ } ], "source": [ - "q_arc_pipe_full = ConvokitPipeline(\n", - " [\n", - " (\n", - " \"shallow_arcs_full\",\n", - " TextToArcs(\"root_arcs\", input_field=\"parsed\", root_only=True, verbosity=VERBOSITY),\n", - " ),\n", - " (\n", - " \"question_sentence_filter\",\n", - " QuestionSentences(\n", - " \"question_arcs_full\",\n", - " input_field=\"root_arcs\",\n", - " input_filter=question_filter,\n", - " verbosity=VERBOSITY,\n", - " ),\n", - " ),\n", - " ]\n", - ")\n", - "corpus = q_arc_pipe_full.transform(corpus)" + "q_arc_pipe_full = ConvokitPipeline([\n", + " ('shallow_arcs_full', TextToArcs('root_arcs', input_field='parsed', \n", + " root_only=True, verbosity=VERBOSITY)),\n", + " ('question_sentence_filter', QuestionSentences('question_arcs_full', input_field='root_arcs',\n", + " input_filter=question_filter, verbosity=VERBOSITY)),\n", + "\n", + "])\n", + "corpus = q_arc_pipe_full.transform(corpus)\n" ] }, { @@ -1563,13 +1537,9 @@ } ], "source": [ - "noun_pm_model = PhrasingMotifs(\n", - " \"motifs_full\",\n", - " \"question_arcs_full\",\n", - " min_support=100,\n", - " fit_filter=question_filter,\n", - " verbosity=VERBOSITY,\n", - ")\n", + "noun_pm_model = PhrasingMotifs('motifs_full','question_arcs_full',min_support=100,\n", + " fit_filter=question_filter, \n", + " verbosity=VERBOSITY)\n", "noun_pm_model.fit(corpus)" ] }, @@ -1666,7 +1636,7 @@ } ], "source": [ - "utt.retrieve_meta(\"motifs__sink\")" + "utt.retrieve_meta('motifs__sink')" ] }, { @@ -1688,7 +1658,7 @@ } ], "source": [ - "utt.retrieve_meta(\"motifs_full__sink\")" + "utt.retrieve_meta('motifs_full__sink')" ] }, { @@ -1763,11 +1733,9 @@ "outputs": [], "source": [ "def question_filter(utt):\n", - " return utt.retrieve_meta(\"is_question\")\n", - "\n", - "\n", + " return utt.retrieve_meta('is_question')\n", "def response_filter(utt):\n", - " return (not utt.retrieve_meta(\"is_question\")) and (utt.reply_to is not None)" + " return (not utt.retrieve_meta('is_question')) and (utt.reply_to is not None)" ] }, { @@ -1796,15 +1764,10 @@ }, "outputs": [], "source": [ - "pt = PromptTypes(\n", - " n_types=8,\n", - " prompt_field=\"motifs\",\n", - " reference_field=\"arcs_censored\",\n", - " prompt_transform_field=\"motifs__sink\",\n", - " output_field=\"prompt_types\",\n", - " random_state=1000,\n", - " verbosity=1,\n", - ")" + "pt = PromptTypes(n_types=8, prompt_field='motifs', reference_field='arcs_censored', \n", + " prompt_transform_field='motifs__sink',\n", + " output_field='prompt_types',\n", + " random_state=1000, verbosity=1)" ] }, { @@ -3325,7 +3288,7 @@ } ], "source": [ - "utt.retrieve_meta(\"prompt_types__prompt_repr\")" + "utt.retrieve_meta('prompt_types__prompt_repr')" ] }, { @@ -3359,7 +3322,7 @@ } ], "source": [ - "utt.retrieve_meta(\"prompt_types__prompt_dists__8\")" + "utt.retrieve_meta('prompt_types__prompt_dists__8')" ] }, { @@ -3386,7 +3349,7 @@ } ], "source": [ - "utt.retrieve_meta(\"prompt_types__prompt_type_dist__8\")" + "utt.retrieve_meta('prompt_types__prompt_type_dist__8')" ] }, { @@ -3595,7 +3558,7 @@ } ], "source": [ - "pt.summarize(corpus, type_ids=utt.retrieve_meta(\"prompt_types__prompt_type__8\"), k=15)" + "pt.summarize(corpus,type_ids=utt.retrieve_meta('prompt_types__prompt_type__8'), k=15)" ] }, { @@ -3677,7 +3640,7 @@ } ], "source": [ - "utt1.retrieve_meta(\"motifs__sink\")" + "utt1.retrieve_meta('motifs__sink')" ] }, { @@ -3697,7 +3660,7 @@ } ], "source": [ - "utt1.retrieve_meta(\"prompt_types__prompt_type__8\")" + "utt1.retrieve_meta('prompt_types__prompt_type__8')" ] }, { @@ -3882,7 +3845,7 @@ } ], "source": [ - "pt.summarize(corpus, type_ids=utt1.retrieve_meta(\"prompt_types__prompt_type__8\"), k=15)" + "pt.summarize(corpus,type_ids=utt1.retrieve_meta('prompt_types__prompt_type__8'), k=15)" ] }, { @@ -3910,7 +3873,7 @@ }, "outputs": [], "source": [ - "utt2 = corpus.get_utterance(\"1987-03-04a.857.5\")" + "utt2 = corpus.get_utterance('1987-03-04a.857.5')" ] }, { @@ -3952,7 +3915,7 @@ } ], "source": [ - "utt2.retrieve_meta(\"motifs__sink\")" + "utt2.retrieve_meta('motifs__sink')" ] }, { @@ -3972,7 +3935,7 @@ } ], "source": [ - "utt2.retrieve_meta(\"prompt_types__prompt_type__8\")" + "utt2.retrieve_meta('prompt_types__prompt_type__8')" ] }, { @@ -4176,7 +4139,7 @@ } ], "source": [ - "pt.summarize(corpus, type_ids=utt2.retrieve_meta(\"prompt_types__prompt_type__8\"), k=15)" + "pt.summarize(corpus,type_ids=utt2.retrieve_meta('prompt_types__prompt_type__8'), k=15)" ] }, { @@ -4211,7 +4174,7 @@ }, "outputs": [], "source": [ - "response_utt = corpus.get_utterance(\"1997-01-27a.4.1\")" + "response_utt = corpus.get_utterance('1997-01-27a.4.1')" ] }, { @@ -4278,7 +4241,7 @@ } ], "source": [ - "response_utt.retrieve_meta(\"prompt_types__reference_type__8\")" + "response_utt.retrieve_meta('prompt_types__reference_type__8')" ] }, { @@ -4471,9 +4434,8 @@ } ], "source": [ - "corpus.get_vectors(\n", - " \"prompt_types__prompt_repr\", ids=[utt.id, utt1.id, utt2.id], as_dataframe=True\n", - ").head()" + "corpus.get_vectors('prompt_types__prompt_repr', ids=[utt.id, utt1.id, utt2.id], \n", + " as_dataframe=True).head()" ] }, { @@ -4575,9 +4537,8 @@ } ], "source": [ - "corpus.get_vectors(\n", - " \"prompt_types__prompt_dists__8\", ids=[utt.id, utt1.id, utt2.id], as_dataframe=True\n", - ")" + "corpus.get_vectors('prompt_types__prompt_dists__8', ids=[utt.id, utt1.id, utt2.id], \n", + " as_dataframe=True)" ] }, { @@ -4606,7 +4567,7 @@ }, "outputs": [], "source": [ - "corpus.dump_vectors(\"prompt_types__prompt_repr\")" + "corpus.dump_vectors('prompt_types__prompt_repr')\n" ] }, { @@ -4620,7 +4581,7 @@ }, "outputs": [], "source": [ - "corpus.dump_vectors(\"prompt_types__prompt_dists__8\")" + "corpus.dump_vectors('prompt_types__prompt_dists__8')\n" ] }, { @@ -4636,9 +4597,8 @@ "metadata": {}, "outputs": [], "source": [ - "new_corpus = convokit.Corpus(\n", - " ROOT_DIR, preload_vectors=[\"prompt_types__prompt_repr\", \"prompt_types__prompt_dists__8\"]\n", - ")" + "new_corpus = convokit.Corpus(ROOT_DIR, preload_vectors=['prompt_types__prompt_repr',\n", + " 'prompt_types__prompt_dists__8'])\n" ] }, { @@ -4798,9 +4758,8 @@ } ], "source": [ - "new_corpus.get_vectors(\n", - " \"prompt_types__prompt_repr\", ids=[utt.id, utt1.id, utt2.id], as_dataframe=True\n", - ")" + "new_corpus.get_vectors('prompt_types__prompt_repr', ids=[utt.id, utt1.id, utt2.id],\n", + " as_dataframe=True)" ] }, { @@ -4895,9 +4854,8 @@ } ], "source": [ - "new_corpus.get_vectors(\n", - " \"prompt_types__prompt_dists__8\", ids=[utt.id, utt1.id, utt2.id], as_dataframe=True\n", - ")" + "new_corpus.get_vectors('prompt_types__prompt_dists__8', ids=[utt.id, utt1.id, utt2.id],\n", + " as_dataframe=True)" ] }, { @@ -4967,7 +4925,7 @@ } ], "source": [ - "pt.dump_model(os.path.join(ROOT_DIR, \"pt_model\"))" + "pt.dump_model(os.path.join(ROOT_DIR, 'pt_model'))" ] }, { @@ -4999,7 +4957,7 @@ } ], "source": [ - "pt_model_dir = os.path.join(ROOT_DIR, \"pt_model\")\n", + "pt_model_dir = os.path.join(ROOT_DIR, 'pt_model')\n", "!ls $pt_model_dir" ] }, @@ -5021,16 +4979,11 @@ }, "outputs": [], "source": [ - "new_pt = PromptTypes(\n", - " prompt_field=\"motifs\",\n", - " reference_field=\"arcs_censored\",\n", - " prompt_transform_field=\"motifs__sink\",\n", - " output_field=\"prompt_types_new\",\n", - " prompt__tfidf_min_df=100,\n", - " reference__tfidf_min_df=100,\n", - " random_state=1000,\n", - " verbosity=1,\n", - ")" + "new_pt = PromptTypes(prompt_field='motifs', reference_field='arcs_censored', \n", + " prompt_transform_field='motifs__sink',\n", + " output_field='prompt_types_new', prompt__tfidf_min_df=100,\n", + " reference__tfidf_min_df=100, \n", + " random_state=1000, verbosity=1)" ] }, { @@ -5083,7 +5036,7 @@ } ], "source": [ - "utt.retrieve_meta(\"prompt_types_new__prompt_type__8\")" + "utt.retrieve_meta('prompt_types_new__prompt_type__8')" ] }, { @@ -5739,17 +5692,11 @@ }, "outputs": [], "source": [ - "pt_arcs = PromptTypes(\n", - " prompt_field=\"arcs_censored\",\n", - " reference_field=\"arcs_censored\",\n", - " prompt_transform_field=\"arcs_censored\",\n", - " output_field=\"prompt_types_arcs\",\n", - " prompt__tfidf_min_df=100,\n", - " reference__tfidf_min_df=100,\n", - " n_types=8,\n", - " random_state=1000,\n", - " verbosity=1,\n", - ")" + "pt_arcs = PromptTypes(prompt_field='arcs_censored', reference_field='arcs_censored', \n", + " prompt_transform_field='arcs_censored',\n", + " output_field='prompt_types_arcs', prompt__tfidf_min_df=100,\n", + " reference__tfidf_min_df=100, n_types=8,\n", + " random_state=1000, verbosity=1)" ] }, { diff --git a/examples/prompt-types/prompt-type-wrapper-demo.ipynb b/examples/prompt-types/prompt-type-wrapper-demo.ipynb index b5f367f7..e6307f0e 100644 --- a/examples/prompt-types/prompt-type-wrapper-demo.ipynb +++ b/examples/prompt-types/prompt-type-wrapper-demo.ipynb @@ -57,8 +57,7 @@ "outputs": [], "source": [ "import warnings\n", - "\n", - "warnings.filterwarnings(\"ignore\")" + "warnings.filterwarnings('ignore')" ] }, { @@ -79,7 +78,7 @@ }, "outputs": [], "source": [ - "# OPTION 1: DOWNLOAD CORPUS\n", + "# OPTION 1: DOWNLOAD CORPUS \n", "# UNCOMMENT THESE LINES TO DOWNLOAD CORPUS\n", "# DATA_DIR = ''\n", "# ROOT_DIR = download('parliament-corpus', data_dir=DATA_DIR)\n", @@ -89,7 +88,7 @@ "# ROOT_DIR = ''\n", "\n", "corpus = Corpus(ROOT_DIR)\n", - "corpus.load_info(\"utterance\", [\"parsed\"])" + "corpus.load_info('utterance',['parsed'])" ] }, { @@ -124,7 +123,7 @@ }, "outputs": [], "source": [ - "test_utt_id = \"1997-01-27a.4.0\"\n", + "test_utt_id = '1997-01-27a.4.0'\n", "utt = corpus.get_utterance(test_utt_id)" ] }, @@ -1933,7 +1932,7 @@ } ], "source": [ - "utt.retrieve_meta(\"motifs\")" + "utt.retrieve_meta('motifs')" ] }, { @@ -1983,7 +1982,7 @@ } ], "source": [ - "utt.retrieve_meta(\"prompt_types__prompt_repr\")" + "utt.retrieve_meta('prompt_types__prompt_repr')" ] }, { @@ -2017,7 +2016,7 @@ } ], "source": [ - "utt.retrieve_meta(\"prompt_types__prompt_dists__8\")" + "utt.retrieve_meta('prompt_types__prompt_dists__8')" ] }, { @@ -2044,7 +2043,7 @@ } ], "source": [ - "utt.retrieve_meta(\"prompt_types__prompt_type__8\")" + "utt.retrieve_meta('prompt_types__prompt_type__8')" ] }, { @@ -2064,7 +2063,7 @@ } ], "source": [ - "utt.retrieve_meta(\"prompt_types__prompt_type_dist__8\")" + "utt.retrieve_meta('prompt_types__prompt_type_dist__8')" ] }, { @@ -2340,7 +2339,7 @@ }, "outputs": [], "source": [ - "utt1 = corpus.get_utterance(\"1987-03-04a.857.5\")" + "utt1 = corpus.get_utterance('1987-03-04a.857.5')" ] }, { @@ -2362,7 +2361,7 @@ } ], "source": [ - "utt1.retrieve_meta(\"motifs\")" + "utt1.retrieve_meta('motifs')" ] }, { @@ -2402,7 +2401,7 @@ } ], "source": [ - "utt1.retrieve_meta(\"prompt_types__prompt_type__8\")" + "utt1.retrieve_meta('prompt_types__prompt_type__8')" ] }, { @@ -2435,7 +2434,7 @@ }, "outputs": [], "source": [ - "str_utt = pt.transform_utterance(\"Do you share my distaste for cockroaches?\")" + "str_utt = pt.transform_utterance('Do you share my distaste for cockroaches?')" ] }, { @@ -2455,7 +2454,7 @@ } ], "source": [ - "str_utt.retrieve_meta(\"motifs\")" + "str_utt.retrieve_meta('motifs')" ] }, { @@ -2475,7 +2474,7 @@ } ], "source": [ - "str_utt.retrieve_meta(\"prompt_types__prompt_type__8\")" + "str_utt.retrieve_meta('prompt_types__prompt_type__8')" ] }, { @@ -2543,7 +2542,7 @@ } ], "source": [ - "pt.dump_model(os.path.join(ROOT_DIR, \"full_pipe_models\"))" + "pt.dump_model(os.path.join(ROOT_DIR, 'full_pipe_models'))" ] }, { @@ -2564,9 +2563,8 @@ }, "outputs": [], "source": [ - "new_pt = PromptTypeWrapper(\n", - " output_field=\"prompt_types_new\", min_support=100, svd__n_components=25, random_state=1000\n", - ")" + "new_pt = PromptTypeWrapper(output_field='prompt_types_new',\n", + " min_support=100, svd__n_components=25, random_state=1000)" ] }, { @@ -2589,7 +2587,7 @@ } ], "source": [ - "new_pt.load_model(os.path.join(ROOT_DIR, \"full_pipe_models\"))" + "new_pt.load_model(os.path.join(ROOT_DIR, 'full_pipe_models'))" ] }, { @@ -2606,7 +2604,7 @@ } ], "source": [ - "pt_model_dir = os.path.join(ROOT_DIR, \"full_pipe_models\")\n", + "pt_model_dir = os.path.join(ROOT_DIR, 'full_pipe_models')\n", "!ls $pt_model_dir" ] }, @@ -2621,7 +2619,7 @@ }, "outputs": [], "source": [ - "new_str_utt = new_pt.transform_utterance(\"Do you share my distaste for cockroaches?\")" + "new_str_utt = new_pt.transform_utterance('Do you share my distaste for cockroaches?')" ] }, { @@ -2641,7 +2639,7 @@ } ], "source": [ - "new_str_utt.retrieve_meta(\"motifs\")" + "new_str_utt.retrieve_meta('motifs')" ] }, { @@ -2661,7 +2659,7 @@ } ], "source": [ - "new_str_utt.retrieve_meta(\"prompt_types_new__prompt_type__8\")" + "new_str_utt.retrieve_meta('prompt_types_new__prompt_type__8')" ] }, { diff --git a/examples/sigdial-demo.ipynb b/examples/sigdial-demo.ipynb index 31ff4225..cba90dc8 100644 --- a/examples/sigdial-demo.ipynb +++ b/examples/sigdial-demo.ipynb @@ -47,7 +47,7 @@ } ], "source": [ - "movie_corpus = Corpus(download(\"movie-corpus\"))" + "movie_corpus = Corpus(download('movie-corpus'))" ] }, { @@ -106,8 +106,8 @@ "outputs": [], "source": [ "for convo in movie_corpus.iter_conversations():\n", - " genders = set([speaker.meta[\"gender\"] for speaker in convo.iter_speakers()])\n", - " convo.meta[\"mixed\"] = \"M\" in genders and \"F\" in genders" + " genders = set([speaker.meta['gender'] for speaker in convo.iter_speakers()])\n", + " convo.meta['mixed'] = 'M' in genders and 'F' in genders" ] }, { @@ -570,13 +570,10 @@ "source": [ "fw = FightingWords()\n", "\n", - "fw.fit(\n", - " movie_corpus,\n", - " class1_func=lambda utt: utt.get_conversation().meta[\"mixed\"],\n", - " class2_func=lambda utt: not utt.get_conversation().meta[\"mixed\"],\n", - ")\n", + "fw.fit(movie_corpus, class1_func=lambda utt: utt.get_conversation().meta['mixed'],\n", + " class2_func=lambda utt: not utt.get_conversation().meta['mixed'])\n", "\n", - "fw.summarize(movie_corpus, plot=True, class1_name=\"mixed\", class2_name=\"single\")" + "fw.summarize(movie_corpus, plot=True, class1_name='mixed', class2_name='single')" ] }, { @@ -610,4 +607,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file diff --git a/examples/speaker-convo-attributes/speaker-convo-diversity-demo.ipynb b/examples/speaker-convo-attributes/speaker-convo-diversity-demo.ipynb index 205e99a5..3fd29723 100644 --- a/examples/speaker-convo-attributes/speaker-convo-diversity-demo.ipynb +++ b/examples/speaker-convo-attributes/speaker-convo-diversity-demo.ipynb @@ -93,13 +93,9 @@ "metadata": {}, "outputs": [], "source": [ - "SPEAKER_BLACKLIST = [\"[deleted]\", \"DeltaBot\", \"AutoModerator\"]\n", - "\n", - "\n", + "SPEAKER_BLACKLIST = ['[deleted]', 'DeltaBot','AutoModerator']\n", "def utterance_is_valid(utterance):\n", - " return (utterance.id != utterance.conversation_id) and (\n", - " utterance.speaker.id not in SPEAKER_BLACKLIST\n", - " )" + " return (utterance.id != utterance.conversation_id) and (utterance.speaker.id not in SPEAKER_BLACKLIST)" ] }, { @@ -135,7 +131,7 @@ } ], "source": [ - "corpus.get_speaker(\"ThatBelligerentSloth\").meta[\"n_convos\"]" + "corpus.get_speaker('ThatBelligerentSloth').meta['n_convos']" ] }, { @@ -155,7 +151,7 @@ } ], "source": [ - "corpus.get_speaker(\"ThatBelligerentSloth\").meta[\"start_time\"]" + "corpus.get_speaker('ThatBelligerentSloth').meta['start_time']" ] }, { @@ -185,7 +181,7 @@ } ], "source": [ - "corpus.get_speaker(\"ThatBelligerentSloth\").meta[\"conversations\"][\"2wm22t\"]" + "corpus.get_speaker('ThatBelligerentSloth').meta['conversations']['2wm22t']" ] }, { @@ -210,7 +206,7 @@ "metadata": {}, "outputs": [], "source": [ - "speaker_activities = corpus.get_attribute_table(\"speaker\", [\"n_convos\"])" + "speaker_activities = corpus.get_attribute_table('speaker',['n_convos'])" ] }, { @@ -312,7 +308,7 @@ } ], "source": [ - "speaker_activities.sort_values(\"n_convos\", ascending=False).head(10)" + "speaker_activities.sort_values('n_convos', ascending=False).head(10)" ] }, { @@ -321,7 +317,7 @@ "metadata": {}, "outputs": [], "source": [ - "top_speakers = speaker_activities.sort_values(\"n_convos\", ascending=False).head(100).index" + "top_speakers = speaker_activities.sort_values('n_convos', ascending=False).head(100).index" ] }, { @@ -933,7 +929,7 @@ } ], "source": [ - "tokenizer = TextParser(mode=\"tokenize\", output_field=\"tokens\", verbosity=1000)\n", + "tokenizer = TextParser(mode='tokenize', output_field='tokens', verbosity=1000)\n", "subset_corpus = tokenizer.transform(subset_corpus)" ] }, @@ -1057,7 +1053,7 @@ } ], "source": [ - "subset_corpus.get_utterance(\"cos7k4p\").retrieve_meta(\"tokens\")" + "subset_corpus.get_utterance('cos7k4p').retrieve_meta('tokens')" ] }, { @@ -1110,13 +1106,9 @@ } ], "source": [ - "wordcounter = TextProcessor(\n", - " input_field=\"tokens\",\n", - " output_field=\"wordcount\",\n", - " proc_fn=lambda sents: sum(len(sent[\"toks\"]) for sent in sents),\n", - " verbosity=25000,\n", - ")\n", - "subset_corpus = wordcounter.transform(subset_corpus)" + "wordcounter = TextProcessor(input_field='tokens', output_field='wordcount', \n", + " proc_fn=lambda sents: sum(len(sent['toks']) for sent in sents), verbosity=25000)\n", + "subset_corpus = wordcounter.transform(subset_corpus) " ] }, { @@ -1136,7 +1128,7 @@ } ], "source": [ - "subset_corpus.get_utterance(\"cos7k4p\").retrieve_meta(\"wordcount\")" + "subset_corpus.get_utterance('cos7k4p').retrieve_meta('wordcount')" ] }, { @@ -1156,7 +1148,7 @@ } ], "source": [ - "subset_corpus.get_utterance(\"cos8ffz\").retrieve_meta(\"wordcount\")" + "subset_corpus.get_utterance('cos8ffz').retrieve_meta('wordcount')" ] }, { @@ -1190,9 +1182,7 @@ "metadata": {}, "outputs": [], "source": [ - "sc_wordcount = convokit.speaker_convo_helpers.speaker_convo_attrs.SpeakerConvoAttrs(\n", - " \"wordcount\", agg_fn=np.mean\n", - ")\n", + "sc_wordcount = convokit.speaker_convo_helpers.speaker_convo_attrs.SpeakerConvoAttrs('wordcount', agg_fn=np.mean)\n", "subset_corpus = sc_wordcount.transform(subset_corpus)" ] }, @@ -1356,7 +1346,7 @@ } ], "source": [ - "subset_corpus.get_speaker(\"ThatBelligerentSloth\").meta[\"conversations\"][\"2wm22t\"]" + "subset_corpus.get_speaker('ThatBelligerentSloth').meta['conversations']['2wm22t']" ] }, { @@ -1374,9 +1364,8 @@ "metadata": {}, "outputs": [], "source": [ - "speaker_convo_len_df = subset_corpus.get_full_attribute_table(\n", - " speaker_convo_attrs=[\"wordcount\", \"n_utterances\"], speaker_attrs=[\"n_convos\"]\n", - ")" + "speaker_convo_len_df = subset_corpus.get_full_attribute_table(speaker_convo_attrs=['wordcount','n_utterances'],\n", + " speaker_attrs=['n_convos'])" ] }, { @@ -1516,8 +1505,10 @@ "outputs": [], "source": [ "def get_lifestage_attributes(attr_df, attr, lifestage_size, agg_fn=np.mean):\n", - " aggs = attr_df.groupby([\"speaker\", attr_df.convo_idx // lifestage_size])[attr].agg(agg_fn)\n", - " aggs = aggs.reset_index().pivot(index=\"speaker\", columns=\"convo_idx\", values=attr)\n", + " aggs = attr_df.groupby(['speaker', attr_df.convo_idx // lifestage_size])\\\n", + " [attr].agg(agg_fn)\n", + " aggs = aggs.reset_index().pivot(index='speaker', columns='convo_idx',\n", + " values=attr)\n", " return aggs" ] }, @@ -1534,9 +1525,8 @@ "metadata": {}, "outputs": [], "source": [ - "subset = speaker_convo_len_df[\n", - " (speaker_convo_len_df.n_convos__speaker >= 20) & (speaker_convo_len_df.convo_idx < 20)\n", - "]" + "subset = speaker_convo_len_df[(speaker_convo_len_df.n_convos__speaker >= 20)\n", + " & (speaker_convo_len_df.convo_idx < 20)]" ] }, { @@ -1545,7 +1535,7 @@ "metadata": {}, "outputs": [], "source": [ - "stage_wc_df = get_lifestage_attributes(subset, \"wordcount\", 10)" + "stage_wc_df = get_lifestage_attributes(subset, 'wordcount', 10)" ] }, { @@ -1672,14 +1662,15 @@ "source": [ "def print_lifestage_comparisons(stage_df):\n", " for i in range(stage_df.columns.max()):\n", - " mask = stage_df[i + 1].notnull() & stage_df[i].notnull()\n", - " c1 = stage_df[i + 1][mask]\n", + " \n", + " mask = stage_df[i+1].notnull() & stage_df[i].notnull()\n", + " c1 = stage_df[i+1][mask]\n", " c0 = stage_df[i][mask]\n", - "\n", - " print(\"stages %d vs %d (%d speakers)\" % (i + 1, i, sum(mask)))\n", + " \n", + " print('stages %d vs %d (%d speakers)' % (i + 1, i, sum(mask)))\n", " n_more = sum(c1 > c0)\n", " n = sum(c1 != c0)\n", - " print(\"\\tprop more: %.3f, binom_p=%.2f\" % (n_more / n, stats.binom_test(n_more, n)))" + " print('\\tprop more: %.3f, binom_p=%.2f' % (n_more/n, stats.binom_test(n_more,n)))" ] }, { @@ -1706,7 +1697,7 @@ "metadata": {}, "outputs": [], "source": [ - "stage_convo_len_df = get_lifestage_attributes(subset, \"n_utterances\", 10)" + "stage_convo_len_df = get_lifestage_attributes(subset, 'n_utterances', 10)" ] }, { @@ -1796,15 +1787,8 @@ "metadata": {}, "outputs": [], "source": [ - "scd = convokit.SpeakerConvoDiversityWrapper(\n", - " lifestage_size=10,\n", - " max_exp=20,\n", - " sample_size=300,\n", - " min_n_utterances=1,\n", - " n_iters=50,\n", - " cohort_delta=60 * 60 * 24 * 30 * 2,\n", - " verbosity=100,\n", - ")" + "scd = convokit.SpeakerConvoDiversityWrapper(lifestage_size=10, max_exp=20,\n", + " sample_size=300, min_n_utterances=1, n_iters=50, cohort_delta=60*60*24*30*2, verbosity=100)" ] }, { @@ -1862,9 +1846,7 @@ "metadata": {}, "outputs": [], "source": [ - "div_df = subset_corpus.get_full_attribute_table(\n", - " [\"div__self\", \"div__other\", \"div__adj\", \"tokens\", \"n_utterances\"], [\"n_convos\"]\n", - ")" + "div_df = subset_corpus.get_full_attribute_table(['div__self','div__other','div__adj', 'tokens', 'n_utterances'], ['n_convos'])" ] }, { @@ -1941,11 +1923,11 @@ } ], "source": [ - "for attr in [\"div__self\", \"div__other\", \"div__adj\"]:\n", + "for attr in ['div__self','div__other','div__adj']:\n", " print(attr)\n", " stage_df = get_lifestage_attributes(div_df, attr, 10)\n", " print_lifestage_comparisons(stage_df)\n", - " print(\"\\n\\n===\")" + " print('\\n\\n===')" ] }, { diff --git a/examples/text-processing/text_preprocessing_demo.ipynb b/examples/text-processing/text_preprocessing_demo.ipynb index 8cb053c7..cdcbb5b8 100644 --- a/examples/text-processing/text_preprocessing_demo.ipynb +++ b/examples/text-processing/text_preprocessing_demo.ipynb @@ -38,18 +38,9 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 67, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/seanzhangkx/opt/anaconda3/envs/convokit_git/lib/python3.9/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", - " from .autonotebook import tqdm as notebook_tqdm\n" - ] - } - ], + "outputs": [], "source": [ "import convokit\n", "from convokit import download, Speaker" @@ -57,11 +48,11 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ - "# OPTION 1: DOWNLOAD CORPUS\n", + "# OPTION 1: DOWNLOAD CORPUS \n", "# UNCOMMENT THESE LINES TO DOWNLOAD CORPUS\n", "# DATA_DIR = ''\n", "# ROOT_DIR = download('tennis-corpus')\n", @@ -75,7 +66,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -94,11 +85,11 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ - "# SET YOUR OWN OUTPUT DIRECTORY HERE.\n", + "# SET YOUR OWN OUTPUT DIRECTORY HERE. \n", "# OUT_DIR = ''" ] }, @@ -111,17 +102,17 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ - "test_utt_id = \"1681_14.a\"\n", + "test_utt_id = '1681_14.a'\n", "utt = corpus.get_utterance(test_utt_id)" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -130,7 +121,7 @@ "\"Yeah, but many friends went with me, Japanese guy. So I wasn't -- I wasn't like homesick. But now sometimes I get homesick.\"" ] }, - "execution_count": 9, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -148,16 +139,16 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "ConvoKitMeta({'is_answer': True, 'is_question': False, 'pair_idx': '1681_14'})" + "{'is_answer': True, 'is_question': False, 'pair_idx': '1681_14'}" ] }, - "execution_count": 10, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -206,7 +197,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -229,12 +220,12 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "def preprocess_text(text):\n", - " text = text.replace(\" -- \", \" \")\n", + " text = text.replace(' -- ', ' ')\n", " return text" ] }, @@ -252,11 +243,11 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ - "prep = TextProcessor(proc_fn=preprocess_text, output_field=\"clean_text\")\n", + "prep = TextProcessor(proc_fn=preprocess_text, output_field='clean_text')\n", "corpus = prep.transform(corpus)" ] }, @@ -269,7 +260,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 33, "metadata": {}, "outputs": [ { @@ -278,13 +269,13 @@ "\"Yeah, but many friends went with me, Japanese guy. So I wasn't I wasn't like homesick. But now sometimes I get homesick.\"" ] }, - "execution_count": 14, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "utt.retrieve_meta(\"clean_text\")" + "utt.retrieve_meta('clean_text')" ] }, { @@ -330,7 +321,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 34, "metadata": {}, "outputs": [], "source": [ @@ -339,16 +330,16 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 35, "metadata": {}, "outputs": [], "source": [ - "parser = TextParser(input_field=\"clean_text\", verbosity=50)" + "parser = TextParser(input_field='clean_text', verbosity=50)" ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 36, "metadata": {}, "outputs": [ { @@ -395,16 +386,16 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 37, "metadata": {}, "outputs": [], "source": [ - "test_parse = utt.retrieve_meta(\"parsed\")" + "test_parse = utt.retrieve_meta('parsed')" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 38, "metadata": {}, "outputs": [ { @@ -415,20 +406,17 @@ " {'tok': ',', 'tag': ',', 'dep': 'punct', 'up': 5, 'dn': []},\n", " {'tok': 'but', 'tag': 'CC', 'dep': 'cc', 'up': 5, 'dn': []},\n", " {'tok': 'many', 'tag': 'JJ', 'dep': 'amod', 'up': 4, 'dn': []},\n", - " {'tok': 'friends', 'tag': 'NNS', 'dep': 'nsubj', 'up': 5, 'dn': [3]},\n", - " {'tok': 'went',\n", - " 'tag': 'VBD',\n", - " 'dep': 'ROOT',\n", - " 'dn': [0, 1, 2, 4, 6, 8, 10, 11]},\n", + " {'tok': 'friends', 'tag': 'NNS', 'dep': 'nsubj', 'up': 5, 'dn': [3, 10]},\n", + " {'tok': 'went', 'tag': 'VBD', 'dep': 'ROOT', 'dn': [0, 1, 2, 4, 6, 8, 11]},\n", " {'tok': 'with', 'tag': 'IN', 'dep': 'prep', 'up': 5, 'dn': [7]},\n", " {'tok': 'me', 'tag': 'PRP', 'dep': 'pobj', 'up': 6, 'dn': []},\n", " {'tok': ',', 'tag': ',', 'dep': 'punct', 'up': 5, 'dn': []},\n", " {'tok': 'Japanese', 'tag': 'JJ', 'dep': 'amod', 'up': 10, 'dn': []},\n", - " {'tok': 'guy', 'tag': 'NN', 'dep': 'npadvmod', 'up': 5, 'dn': [9]},\n", + " {'tok': 'guy', 'tag': 'NN', 'dep': 'appos', 'up': 4, 'dn': [9]},\n", " {'tok': '.', 'tag': '.', 'dep': 'punct', 'up': 5, 'dn': []}]}" ] }, - "execution_count": 19, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" } @@ -446,17 +434,17 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 39, "metadata": {}, "outputs": [], "source": [ - "texttagger = TextParser(output_field=\"tagged\", input_field=\"clean_text\", mode=\"tag\")\n", + "texttagger = TextParser(output_field='tagged', input_field='clean_text', mode='tag')\n", "corpus = texttagger.transform(corpus)" ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 41, "metadata": {}, "outputs": [ { @@ -476,13 +464,13 @@ " {'tok': '.', 'tag': '.'}]}" ] }, - "execution_count": 21, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "utt.retrieve_meta(\"tagged\")[0]" + "utt.retrieve_meta('tagged')[0]" ] }, { @@ -508,7 +496,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 42, "metadata": {}, "outputs": [ { @@ -517,7 +505,7 @@ "['is_answer', 'is_question', 'pair_idx', 'clean_text', 'parsed', 'tagged']" ] }, - "execution_count": 22, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } @@ -544,15 +532,12 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 55, "metadata": {}, "outputs": [], "source": [ - "corpus.dump(\n", - " os.path.basename(OUT_DIR),\n", - " base_path=os.path.dirname(OUT_DIR),\n", - " fields_to_skip={\"utterance\": [\"parsed\", \"tagged\", \"clean_text\"]},\n", - ")" + "corpus.dump(os.path.basename(OUT_DIR), base_path=os.path.dirname(OUT_DIR), \n", + " fields_to_skip={'utterance': ['parsed','tagged','clean_text']})" ] }, { @@ -570,11 +555,11 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 56, "metadata": {}, "outputs": [], "source": [ - "corpus.dump_info(\"utterance\", [\"parsed\", \"tagged\"], dir_name=OUT_DIR)" + "corpus.dump_info('utterance',['parsed','tagged'], dir_name = OUT_DIR)" ] }, { @@ -586,16 +571,15 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 59, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "conversations.json info.parsed.jsonl \u001b[34msupreme-corpus\u001b[m\u001b[m/ \u001b[34mwiki-corpus\u001b[m\u001b[m/\n", - "corpus.json info.tagged.jsonl supreme-corpus.zip wiki-corpus.zip\n", - "index.json speakers.json utterances.jsonl\n" + "conversations.json index.json info.tagged.jsonl users.json\n", + "corpus.json info.parsed.jsonl speakers.json utterances.jsonl\n" ] } ], @@ -605,9 +589,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 58, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "'/kitchen/convokit_corpora_lf/tennis-corpus/'" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [] }, { @@ -619,7 +614,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 60, "metadata": {}, "outputs": [], "source": [ @@ -628,7 +623,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 61, "metadata": {}, "outputs": [], "source": [ @@ -644,16 +639,16 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 62, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "KeysView(ConvoKitMeta({'is_answer': True, 'is_question': False, 'pair_idx': '1681_14'}))" + "KeysView({'is_answer': True, 'is_question': False, 'pair_idx': '1681_14'})" ] }, - "execution_count": 28, + "execution_count": 62, "metadata": {}, "output_type": "execute_result" } @@ -671,36 +666,33 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "new_corpus.load_info(\"utterance\", [\"parsed\"])" + "new_corpus.load_info('utterance',['parsed'])" ] }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 68, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "({'rt': 5,\n", + "[{'rt': 5,\n", " 'toks': [{'tok': 'Yeah', 'tag': 'UH', 'dep': 'intj', 'up': 5, 'dn': []},\n", " {'tok': ',', 'tag': ',', 'dep': 'punct', 'up': 5, 'dn': []},\n", " {'tok': 'but', 'tag': 'CC', 'dep': 'cc', 'up': 5, 'dn': []},\n", " {'tok': 'many', 'tag': 'JJ', 'dep': 'amod', 'up': 4, 'dn': []},\n", - " {'tok': 'friends', 'tag': 'NNS', 'dep': 'nsubj', 'up': 5, 'dn': [3]},\n", - " {'tok': 'went',\n", - " 'tag': 'VBD',\n", - " 'dep': 'ROOT',\n", - " 'dn': [0, 1, 2, 4, 6, 8, 10, 11]},\n", + " {'tok': 'friends', 'tag': 'NNS', 'dep': 'nsubj', 'up': 5, 'dn': [3, 10]},\n", + " {'tok': 'went', 'tag': 'VBD', 'dep': 'ROOT', 'dn': [0, 1, 2, 4, 6, 8, 11]},\n", " {'tok': 'with', 'tag': 'IN', 'dep': 'prep', 'up': 5, 'dn': [7]},\n", " {'tok': 'me', 'tag': 'PRP', 'dep': 'pobj', 'up': 6, 'dn': []},\n", " {'tok': ',', 'tag': ',', 'dep': 'punct', 'up': 5, 'dn': []},\n", " {'tok': 'Japanese', 'tag': 'JJ', 'dep': 'amod', 'up': 10, 'dn': []},\n", - " {'tok': 'guy', 'tag': 'NN', 'dep': 'npadvmod', 'up': 5, 'dn': [9]},\n", + " {'tok': 'guy', 'tag': 'NN', 'dep': 'appos', 'up': 4, 'dn': [9]},\n", " {'tok': '.', 'tag': '.', 'dep': 'punct', 'up': 5, 'dn': []}]},\n", " {'rt': 2,\n", " 'toks': [{'tok': 'So', 'tag': 'RB', 'dep': 'advmod', 'up': 2, 'dn': []},\n", @@ -708,10 +700,10 @@ " {'tok': 'was', 'tag': 'VBD', 'dep': 'ROOT', 'dn': [0, 1, 3, 5, 9]},\n", " {'tok': \"n't\", 'tag': 'RB', 'dep': 'neg', 'up': 2, 'dn': []},\n", " {'tok': 'I', 'tag': 'PRP', 'dep': 'nsubj', 'up': 5, 'dn': []},\n", - " {'tok': 'was', 'tag': 'VBD', 'dep': 'ccomp', 'up': 2, 'dn': [4, 6, 7]},\n", + " {'tok': 'was', 'tag': 'VBD', 'dep': 'ccomp', 'up': 2, 'dn': [4, 6, 8]},\n", " {'tok': \"n't\", 'tag': 'RB', 'dep': 'neg', 'up': 5, 'dn': []},\n", - " {'tok': 'like', 'tag': 'IN', 'dep': 'prep', 'up': 5, 'dn': [8]},\n", - " {'tok': 'homesick', 'tag': 'NN', 'dep': 'pobj', 'up': 7, 'dn': []},\n", + " {'tok': 'like', 'tag': 'UH', 'dep': 'intj', 'up': 8, 'dn': []},\n", + " {'tok': 'homesick', 'tag': 'JJ', 'dep': 'acomp', 'up': 5, 'dn': [7]},\n", " {'tok': '.', 'tag': '.', 'dep': 'punct', 'up': 2, 'dn': []}]},\n", " {'rt': 4,\n", " 'toks': [{'tok': 'But', 'tag': 'CC', 'dep': 'cc', 'up': 4, 'dn': []},\n", @@ -720,16 +712,16 @@ " {'tok': 'I', 'tag': 'PRP', 'dep': 'nsubj', 'up': 4, 'dn': []},\n", " {'tok': 'get', 'tag': 'VBP', 'dep': 'ROOT', 'dn': [0, 1, 2, 3, 5, 6]},\n", " {'tok': 'homesick', 'tag': 'JJ', 'dep': 'acomp', 'up': 4, 'dn': []},\n", - " {'tok': '.', 'tag': '.', 'dep': 'punct', 'up': 4, 'dn': []}]})" + " {'tok': '.', 'tag': '.', 'dep': 'punct', 'up': 4, 'dn': []}]}]" ] }, - "execution_count": 30, + "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "new_utt.retrieve_meta(\"parsed\")" + "new_utt.retrieve_meta('parsed')" ] }, { @@ -761,7 +753,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 69, "metadata": {}, "outputs": [], "source": [ @@ -770,16 +762,16 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 70, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "Utterance({'obj_type': 'utterance', 'vectors': [], 'speaker_': Speaker({'obj_type': 'speaker', 'vectors': [], 'owner': None, 'id': 'speaker', 'temp_storage': {}, 'meta': {}}), 'owner': None, 'id': None, 'temp_storage': {'speaker_id': 'speaker', 'conversation_id': None, 'reply_to': None, 'timestamp': None, 'text': 'I played -- a tennis match.'}, 'meta': {'clean_text': 'I played a tennis match.'}})" + "Utterance({'obj_type': 'utterance', 'meta': {'clean_text': 'I played a tennis match.'}, 'vectors': [], 'speaker': Speaker({'obj_type': 'speaker', 'meta': {}, 'vectors': [], 'owner': None, 'id': 'speaker'}), 'conversation_id': None, 'reply_to': None, 'timestamp': None, 'text': 'I played -- a tennis match.', 'owner': None, 'id': None})" ] }, - "execution_count": 32, + "execution_count": 70, "metadata": {}, "output_type": "execute_result" } @@ -790,16 +782,16 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 72, "metadata": {}, "outputs": [], "source": [ - "adhoc_utt = prep.transform_utterance(test_str)" + "adhoc_utt = prep.transform_utterance(adhoc_utt)" ] }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 74, "metadata": {}, "outputs": [ { @@ -808,13 +800,13 @@ "'I played a tennis match.'" ] }, - "execution_count": 34, + "execution_count": 74, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "adhoc_utt.retrieve_meta(\"clean_text\")" + "adhoc_utt.retrieve_meta('clean_text')" ] }, { @@ -840,7 +832,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 75, "metadata": {}, "outputs": [], "source": [ @@ -859,21 +851,18 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 76, "metadata": {}, "outputs": [], "source": [ - "parse_pipe = ConvokitPipeline(\n", - " [\n", - " (\"prep\", TextProcessor(preprocess_text, \"clean_text_pipe\")),\n", - " (\"parse\", TextParser(\"parsed_pipe\", input_field=\"clean_text_pipe\", verbosity=50)),\n", - " ]\n", - ")" + "parse_pipe = ConvokitPipeline([('prep', TextProcessor(preprocess_text, 'clean_text_pipe')),\n", + " ('parse', TextParser('parsed_pipe', input_field='clean_text_pipe',\n", + " verbosity=50))])" ] }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 77, "metadata": {}, "outputs": [ { @@ -893,27 +882,24 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 78, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "({'rt': 5,\n", + "[{'rt': 5,\n", " 'toks': [{'tok': 'Yeah', 'tag': 'UH', 'dep': 'intj', 'up': 5, 'dn': []},\n", " {'tok': ',', 'tag': ',', 'dep': 'punct', 'up': 5, 'dn': []},\n", " {'tok': 'but', 'tag': 'CC', 'dep': 'cc', 'up': 5, 'dn': []},\n", " {'tok': 'many', 'tag': 'JJ', 'dep': 'amod', 'up': 4, 'dn': []},\n", - " {'tok': 'friends', 'tag': 'NNS', 'dep': 'nsubj', 'up': 5, 'dn': [3]},\n", - " {'tok': 'went',\n", - " 'tag': 'VBD',\n", - " 'dep': 'ROOT',\n", - " 'dn': [0, 1, 2, 4, 6, 8, 10, 11]},\n", + " {'tok': 'friends', 'tag': 'NNS', 'dep': 'nsubj', 'up': 5, 'dn': [3, 10]},\n", + " {'tok': 'went', 'tag': 'VBD', 'dep': 'ROOT', 'dn': [0, 1, 2, 4, 6, 8, 11]},\n", " {'tok': 'with', 'tag': 'IN', 'dep': 'prep', 'up': 5, 'dn': [7]},\n", " {'tok': 'me', 'tag': 'PRP', 'dep': 'pobj', 'up': 6, 'dn': []},\n", " {'tok': ',', 'tag': ',', 'dep': 'punct', 'up': 5, 'dn': []},\n", " {'tok': 'Japanese', 'tag': 'JJ', 'dep': 'amod', 'up': 10, 'dn': []},\n", - " {'tok': 'guy', 'tag': 'NN', 'dep': 'npadvmod', 'up': 5, 'dn': [9]},\n", + " {'tok': 'guy', 'tag': 'NN', 'dep': 'appos', 'up': 4, 'dn': [9]},\n", " {'tok': '.', 'tag': '.', 'dep': 'punct', 'up': 5, 'dn': []}]},\n", " {'rt': 2,\n", " 'toks': [{'tok': 'So', 'tag': 'RB', 'dep': 'advmod', 'up': 2, 'dn': []},\n", @@ -921,10 +907,10 @@ " {'tok': 'was', 'tag': 'VBD', 'dep': 'ROOT', 'dn': [0, 1, 3, 5, 9]},\n", " {'tok': \"n't\", 'tag': 'RB', 'dep': 'neg', 'up': 2, 'dn': []},\n", " {'tok': 'I', 'tag': 'PRP', 'dep': 'nsubj', 'up': 5, 'dn': []},\n", - " {'tok': 'was', 'tag': 'VBD', 'dep': 'ccomp', 'up': 2, 'dn': [4, 6, 7]},\n", + " {'tok': 'was', 'tag': 'VBD', 'dep': 'ccomp', 'up': 2, 'dn': [4, 6, 8]},\n", " {'tok': \"n't\", 'tag': 'RB', 'dep': 'neg', 'up': 5, 'dn': []},\n", - " {'tok': 'like', 'tag': 'IN', 'dep': 'prep', 'up': 5, 'dn': [8]},\n", - " {'tok': 'homesick', 'tag': 'NN', 'dep': 'pobj', 'up': 7, 'dn': []},\n", + " {'tok': 'like', 'tag': 'UH', 'dep': 'intj', 'up': 8, 'dn': []},\n", + " {'tok': 'homesick', 'tag': 'JJ', 'dep': 'acomp', 'up': 5, 'dn': [7]},\n", " {'tok': '.', 'tag': '.', 'dep': 'punct', 'up': 2, 'dn': []}]},\n", " {'rt': 4,\n", " 'toks': [{'tok': 'But', 'tag': 'CC', 'dep': 'cc', 'up': 4, 'dn': []},\n", @@ -933,16 +919,16 @@ " {'tok': 'I', 'tag': 'PRP', 'dep': 'nsubj', 'up': 4, 'dn': []},\n", " {'tok': 'get', 'tag': 'VBP', 'dep': 'ROOT', 'dn': [0, 1, 2, 3, 5, 6]},\n", " {'tok': 'homesick', 'tag': 'JJ', 'dep': 'acomp', 'up': 4, 'dn': []},\n", - " {'tok': '.', 'tag': '.', 'dep': 'punct', 'up': 4, 'dn': []}]})" + " {'tok': '.', 'tag': '.', 'dep': 'punct', 'up': 4, 'dn': []}]}]" ] }, - "execution_count": 38, + "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "utt.retrieve_meta(\"parsed_pipe\")" + "utt.retrieve_meta('parsed_pipe')" ] }, { @@ -954,7 +940,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 79, "metadata": {}, "outputs": [], "source": [ @@ -963,7 +949,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 80, "metadata": {}, "outputs": [ { @@ -978,13 +964,13 @@ " {'tok': '.', 'tag': '.', 'dep': 'punct', 'up': 1, 'dn': []}]}]" ] }, - "execution_count": 40, + "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "test_utt.retrieve_meta(\"parsed_pipe\")" + "test_utt.retrieve_meta('parsed_pipe')" ] }, { @@ -1012,17 +998,17 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 81, "metadata": {}, "outputs": [], "source": [ - "wc_raw = TextProcessor(proc_fn=lambda x: len(x.split()), output_field=\"wc_raw\")\n", + "wc_raw = TextProcessor(proc_fn=lambda x: len(x.split()), output_field='wc_raw')\n", "corpus = wc_raw.transform(corpus)" ] }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 83, "metadata": {}, "outputs": [ { @@ -1031,13 +1017,13 @@ "23" ] }, - "execution_count": 42, + "execution_count": 83, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "utt.retrieve_meta(\"wc_raw\")" + "utt.retrieve_meta('wc_raw')" ] }, { @@ -1049,11 +1035,11 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 84, "metadata": {}, "outputs": [], "source": [ - "wc = TextProcessor(proc_fn=lambda x: len(x.split()), output_field=\"wc\", input_field=\"clean_text\")\n", + "wc = TextProcessor(proc_fn=lambda x: len(x.split()), output_field='wc', input_field='clean_text')\n", "corpus = wc.transform(corpus)" ] }, @@ -1066,7 +1052,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 86, "metadata": {}, "outputs": [ { @@ -1075,13 +1061,13 @@ "22" ] }, - "execution_count": 44, + "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "utt.retrieve_meta(\"wc\")" + "utt.retrieve_meta('wc')" ] }, { @@ -1093,17 +1079,17 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 87, "metadata": {}, "outputs": [], "source": [ - "chars = TextProcessor(proc_fn=lambda x: len(x), output_field=\"ch\", input_field=\"clean_text\")\n", + "chars = TextProcessor(proc_fn=lambda x: len(x), output_field='ch', input_field='clean_text')\n", "corpus = chars.transform(corpus)" ] }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 88, "metadata": {}, "outputs": [ { @@ -1112,13 +1098,13 @@ "120" ] }, - "execution_count": 46, + "execution_count": 88, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "utt.retrieve_meta(\"ch\")" + "utt.retrieve_meta('ch')" ] }, { @@ -1147,21 +1133,18 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 89, "metadata": {}, "outputs": [], "source": [ - "char_per_word = TextProcessor(\n", - " proc_fn=lambda x: (x[\"ch\"] / x[\"wc\"], x[\"wc\"] / x[\"ch\"]),\n", - " output_field=[\"char_per_word\", \"word_per_char\"],\n", - " input_field=[\"ch\", \"wc\"],\n", - ")\n", + "char_per_word = TextProcessor(proc_fn=lambda x: (x['ch']/x['wc'], x['wc']/x['ch']), \n", + " output_field=['char_per_word', 'word_per_char'], input_field=['ch','wc'])\n", "corpus = char_per_word.transform(corpus)" ] }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 90, "metadata": {}, "outputs": [ { @@ -1170,18 +1153,18 @@ "5.454545454545454" ] }, - "execution_count": 48, + "execution_count": 90, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "utt.retrieve_meta(\"char_per_word\")" + "utt.retrieve_meta('char_per_word')" ] }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 91, "metadata": {}, "outputs": [ { @@ -1190,13 +1173,13 @@ "0.18333333333333332" ] }, - "execution_count": 49, + "execution_count": 91, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "utt.retrieve_meta(\"word_per_char\")" + "utt.retrieve_meta('word_per_char')" ] }, { @@ -1222,28 +1205,26 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 92, "metadata": {}, "outputs": [], "source": [ "def is_question(utt, aux={}):\n", - " return utt.meta[\"is_question\"]" + " return utt.meta['is_question']" ] }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 93, "metadata": {}, "outputs": [], "source": [ - "qparser = TextParser(\n", - " output_field=\"qparsed\", input_field=\"clean_text\", input_filter=is_question, verbosity=50\n", - ")" + "qparser = TextParser(output_field='qparsed', input_field='clean_text', input_filter=is_question, verbosity=50)" ] }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 94, "metadata": {}, "outputs": [ { @@ -1270,11 +1251,11 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 95, "metadata": {}, "outputs": [], "source": [ - "utt.retrieve_meta(\"qparsed\")" + "utt.retrieve_meta('qparsed')" ] }, { @@ -1286,7 +1267,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 96, "metadata": {}, "outputs": [ { @@ -1295,20 +1276,20 @@ "'How hard was it for you when, 13 years, left your parents, left Japan to go to the States. Was it a big step for you?'" ] }, - "execution_count": 54, + "execution_count": 96, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "q_utt_id = \"1681_14.q\"\n", + "q_utt_id = '1681_14.q'\n", "q_utt = corpus.get_utterance(q_utt_id)\n", "q_utt.text" ] }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 97, "metadata": { "scrolled": true }, @@ -1316,30 +1297,30 @@ { "data": { "text/plain": [ - "({'rt': 15,\n", + "[{'rt': 11,\n", " 'toks': [{'tok': 'How', 'tag': 'WRB', 'dep': 'advmod', 'up': 1, 'dn': []},\n", " {'tok': 'hard', 'tag': 'RB', 'dep': 'acomp', 'up': 2, 'dn': [0]},\n", - " {'tok': 'was', 'tag': 'VBD', 'dep': 'advcl', 'up': 15, 'dn': [1, 3, 4, 11]},\n", + " {'tok': 'was', 'tag': 'VBD', 'dep': 'advcl', 'up': 11, 'dn': [1, 3, 4, 9]},\n", " {'tok': 'it', 'tag': 'PRP', 'dep': 'nsubj', 'up': 2, 'dn': []},\n", " {'tok': 'for', 'tag': 'IN', 'dep': 'prep', 'up': 2, 'dn': [5]},\n", " {'tok': 'you', 'tag': 'PRP', 'dep': 'pobj', 'up': 4, 'dn': []},\n", - " {'tok': 'when', 'tag': 'WRB', 'dep': 'advmod', 'up': 11, 'dn': []},\n", - " {'tok': ',', 'tag': ',', 'dep': 'punct', 'up': 11, 'dn': []},\n", + " {'tok': 'when', 'tag': 'WRB', 'dep': 'advmod', 'up': 9, 'dn': [7]},\n", + " {'tok': ',', 'tag': ',', 'dep': 'punct', 'up': 6, 'dn': []},\n", " {'tok': '13', 'tag': 'CD', 'dep': 'nummod', 'up': 9, 'dn': []},\n", - " {'tok': 'years', 'tag': 'NNS', 'dep': 'nsubj', 'up': 11, 'dn': [8, 10]},\n", - " {'tok': ',', 'tag': ',', 'dep': 'punct', 'up': 9, 'dn': []},\n", - " {'tok': 'left', 'tag': 'VBD', 'dep': 'advcl', 'up': 2, 'dn': [6, 7, 9, 13]},\n", + " {'tok': 'years', 'tag': 'NNS', 'dep': 'npadvmod', 'up': 2, 'dn': [6, 8]},\n", + " {'tok': ',', 'tag': ',', 'dep': 'punct', 'up': 11, 'dn': []},\n", + " {'tok': 'left', 'tag': 'VBD', 'dep': 'ROOT', 'dn': [2, 10, 13, 14, 15, 22]},\n", " {'tok': 'your', 'tag': 'PRP$', 'dep': 'poss', 'up': 13, 'dn': []},\n", " {'tok': 'parents', 'tag': 'NNS', 'dep': 'dobj', 'up': 11, 'dn': [12]},\n", - " {'tok': ',', 'tag': ',', 'dep': 'punct', 'up': 15, 'dn': []},\n", - " {'tok': 'left', 'tag': 'VBD', 'dep': 'ROOT', 'dn': [2, 14, 16, 18, 22]},\n", + " {'tok': ',', 'tag': ',', 'dep': 'punct', 'up': 11, 'dn': []},\n", + " {'tok': 'left', 'tag': 'VBD', 'dep': 'conj', 'up': 11, 'dn': [16, 18]},\n", " {'tok': 'Japan', 'tag': 'NNP', 'dep': 'dobj', 'up': 15, 'dn': []},\n", " {'tok': 'to', 'tag': 'TO', 'dep': 'aux', 'up': 18, 'dn': []},\n", " {'tok': 'go', 'tag': 'VB', 'dep': 'xcomp', 'up': 15, 'dn': [17, 19]},\n", " {'tok': 'to', 'tag': 'IN', 'dep': 'prep', 'up': 18, 'dn': [21]},\n", " {'tok': 'the', 'tag': 'DT', 'dep': 'det', 'up': 21, 'dn': []},\n", - " {'tok': 'States', 'tag': 'NNPS', 'dep': 'pobj', 'up': 19, 'dn': [20]},\n", - " {'tok': '.', 'tag': '.', 'dep': 'punct', 'up': 15, 'dn': []}]},\n", + " {'tok': 'States', 'tag': 'NNP', 'dep': 'pobj', 'up': 19, 'dn': [20]},\n", + " {'tok': '.', 'tag': '.', 'dep': 'punct', 'up': 11, 'dn': []}]},\n", " {'rt': 0,\n", " 'toks': [{'tok': 'Was', 'tag': 'VBD', 'dep': 'ROOT', 'dn': [1, 4, 7]},\n", " {'tok': 'it', 'tag': 'PRP', 'dep': 'nsubj', 'up': 0, 'dn': []},\n", @@ -1348,16 +1329,16 @@ " {'tok': 'step', 'tag': 'NN', 'dep': 'attr', 'up': 0, 'dn': [2, 3, 5]},\n", " {'tok': 'for', 'tag': 'IN', 'dep': 'prep', 'up': 4, 'dn': [6]},\n", " {'tok': 'you', 'tag': 'PRP', 'dep': 'pobj', 'up': 5, 'dn': []},\n", - " {'tok': '?', 'tag': '.', 'dep': 'punct', 'up': 0, 'dn': []}]})" + " {'tok': '?', 'tag': '.', 'dep': 'punct', 'up': 0, 'dn': []}]}]" ] }, - "execution_count": 55, + "execution_count": 97, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "q_utt.retrieve_meta(\"qparsed\")" + "q_utt.retrieve_meta('qparsed')" ] }, { @@ -1391,7 +1372,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.0" + "version": "3.7.4" } }, "nbformat": 4, diff --git a/examples/vectors/bag-of-words-demo.ipynb b/examples/vectors/bag-of-words-demo.ipynb index 368a02e0..fbfb60ce 100644 --- a/examples/vectors/bag-of-words-demo.ipynb +++ b/examples/vectors/bag-of-words-demo.ipynb @@ -22,7 +22,9 @@ "execution_count": 1, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "import convokit" + ] }, { "cell_type": "code", @@ -47,7 +49,7 @@ } ], "source": [ - "corpus = Corpus(filename=download(\"subreddit-Cornell\"))" + "corpus = Corpus(filename=download('subreddit-Cornell'))" ] }, { @@ -143,7 +145,7 @@ ], "source": [ "# before transformation\n", - "corpus.get_utterance(\"dsbgljl\").vectors" + "corpus.get_utterance('dsbgljl').vectors" ] }, { @@ -184,7 +186,7 @@ ], "source": [ "# after transformation\n", - "corpus.get_utterance(\"dsbgljl\").vectors" + "corpus.get_utterance('dsbgljl').vectors" ] }, { @@ -232,7 +234,7 @@ } ], "source": [ - "corpus.get_vector_matrix(\"bow_vector\")" + "corpus.get_vector_matrix('bow_vector')" ] }, { @@ -309,9 +311,9 @@ } ], "source": [ - "bow_classifier = VectorClassifier(\n", - " obj_type=\"utterance\", vector_name=\"bow_vector\", labeller=lambda utt: utt.meta[\"score\"] > 0\n", - ")" + "bow_classifier = VectorClassifier(obj_type=\"utterance\", \n", + " vector_name='bow_vector',\n", + " labeller=lambda utt: utt.meta['score'] > 0)" ] }, { @@ -331,7 +333,7 @@ } ], "source": [ - "# This fit_transform() step fits the classifier and then uses it to compute predictions for all the\n", + "# This fit_transform() step fits the classifier and then uses it to compute predictions for all the \n", "# utterances in the Corpus\n", "bow_classifier.fit_transform(corpus)" ] @@ -533,7 +535,7 @@ ], "source": [ "# The ngrams weighted most positively (i.e. utterances with these ngrams are more likely to have positive scores)\n", - "bow_classifier.get_coefs(feature_names=corpus.get_vector_matrix(\"bow_vector\").columns).head()" + "bow_classifier.get_coefs(feature_names=corpus.get_vector_matrix('bow_vector').columns).head()" ] }, { @@ -732,9 +734,7 @@ "metadata": {}, "outputs": [], "source": [ - "top_level_comment_ids = [\n", - " utt.id for utt in corpus.iter_utterances() if utt.id == utt.meta[\"top_level_comment\"]\n", - "]" + "top_level_comment_ids = [utt.id for utt in corpus.iter_utterances() if utt.id == utt.meta['top_level_comment']]" ] }, { @@ -832,11 +832,11 @@ "for thread in threads_corpus.iter_conversations():\n", " thread_len = len(list(thread.iter_utterances()))\n", " if thread_len == 5:\n", - " thread.meta[\"thread_doubles\"] = False\n", + " thread.meta['thread_doubles'] = False\n", " elif thread_len >= 10:\n", - " thread.meta[\"thread_doubles\"] = True\n", + " thread.meta['thread_doubles'] = True\n", " else:\n", - " thread.meta[\"thread_doubles\"] = None" + " thread.meta['thread_doubles'] = None" ] }, { @@ -861,13 +861,9 @@ ], "source": [ "# We set our BoWTransformer to use only the first 5 utterances in the Conversation by configuring 'text_func'\n", - "bow_transformer2 = BoWTransformer(\n", - " obj_type=\"conversation\",\n", - " vector_name=\"bow_vector_2\",\n", - " text_func=lambda convo: \" \".join(\n", - " [utt.text for utt in convo.get_chronological_utterance_list()[:5]]\n", - " ),\n", - ")" + "bow_transformer2 = BoWTransformer(obj_type=\"conversation\", vector_name='bow_vector_2',\n", + " text_func=lambda convo: ' '.join([utt.text for utt in convo.get_chronological_utterance_list()[:5]])\n", + " )" ] }, { @@ -887,9 +883,7 @@ } ], "source": [ - "bow_transformer2.fit_transform(\n", - " threads_corpus, selector=lambda convo: convo.meta[\"thread_doubles\"] is not None\n", - ")" + "bow_transformer2.fit_transform(threads_corpus, selector=lambda convo: convo.meta['thread_doubles'] is not None)" ] }, { @@ -933,11 +927,8 @@ } ], "source": [ - "bow_classifier2 = VectorClassifier(\n", - " obj_type=\"conversation\",\n", - " vector_name=\"bow_vector_2\",\n", - " labeller=lambda convo: convo.meta[\"thread_doubles\"],\n", - ")" + "bow_classifier2 = VectorClassifier(obj_type=\"conversation\", vector_name='bow_vector_2',\n", + " labeller=lambda convo: convo.meta['thread_doubles'])" ] }, { @@ -957,9 +948,7 @@ } ], "source": [ - "bow_classifier2.fit_transform(\n", - " threads_corpus, selector=lambda convo: convo.meta[\"thread_doubles\"] is not None\n", - ")" + "bow_classifier2.fit_transform(threads_corpus, selector=lambda convo: convo.meta['thread_doubles'] is not None)" ] }, { @@ -968,9 +957,7 @@ "metadata": {}, "outputs": [], "source": [ - "summary = bow_classifier2.summarize(\n", - " threads_corpus, selector=lambda convo: convo.meta[\"thread_doubles\"] is not None\n", - ")" + "summary = bow_classifier2.summarize(threads_corpus, selector=lambda convo: convo.meta['thread_doubles'] is not None)" ] }, { @@ -1158,9 +1145,7 @@ } ], "source": [ - "bow_classifier2.base_accuracy(\n", - " threads_corpus, selector=lambda convo: convo.meta[\"thread_doubles\"] is not None\n", - ")" + "bow_classifier2.base_accuracy(threads_corpus, selector=lambda convo: convo.meta['thread_doubles'] is not None)" ] }, { @@ -1180,9 +1165,7 @@ } ], "source": [ - "bow_classifier2.accuracy(\n", - " threads_corpus, selector=lambda convo: convo.meta[\"thread_doubles\"] is not None\n", - ")" + "bow_classifier2.accuracy(threads_corpus, selector=lambda convo: convo.meta['thread_doubles'] is not None)" ] }, { @@ -1207,11 +1190,7 @@ } ], "source": [ - "print(\n", - " bow_classifier2.classification_report(\n", - " threads_corpus, selector=lambda convo: convo.meta[\"thread_doubles\"] is not None\n", - " )\n", - ")" + "print(bow_classifier2.classification_report(threads_corpus, selector=lambda convo: convo.meta['thread_doubles'] is not None))" ] }, { @@ -1239,9 +1218,7 @@ "source": [ "# consider only conversations that have at least 5 utterances, i.e. from earlier,\n", "# this is any conversation that has thread_doubles with a value that is not None.\n", - "valid_convos = list(\n", - " threads_corpus.iter_conversations(lambda convo: convo.meta[\"thread_doubles\"] is not None)\n", - ")" + "valid_convos = list(threads_corpus.iter_conversations(lambda convo: convo.meta['thread_doubles'] is not None))" ] }, { @@ -1316,15 +1293,15 @@ "outputs": [], "source": [ "for convo in train_convos:\n", - " convo.meta[\"train_test_type\"] = \"train\"\n", - "\n", + " convo.meta['train_test_type'] = 'train'\n", + " \n", "for convo in test_convos:\n", - " convo.meta[\"train_test_type\"] = \"test\"\n", + " convo.meta['train_test_type'] = 'test'\n", "\n", "# any other convo not part of the train/test split should have the metadata attribute value set to None\n", "for convo in threads_corpus.iter_conversations():\n", - " if \"train_test_type\" not in convo.meta:\n", - " convo.meta[\"train_test_type\"] = None" + " if 'train_test_type' not in convo.meta:\n", + " convo.meta['train_test_type'] = None" ] }, { @@ -1345,7 +1322,7 @@ ], "source": [ "# Fit the classifier only on train data\n", - "bow_classifier2.fit(threads_corpus, selector=lambda convo: convo.meta[\"train_test_type\"] == \"train\")" + "bow_classifier2.fit(threads_corpus, selector=lambda convo: convo.meta['train_test_type'] == 'train')" ] }, { @@ -1471,14 +1448,10 @@ "# Evaluating the classifier on test data\n", "\n", "# First annotate the conversation with the prediction\n", - "bow_classifier2.transform(\n", - " threads_corpus, selector=lambda convo: convo.meta[\"train_test_type\"] == \"test\"\n", - ")\n", + "bow_classifier2.transform(threads_corpus, selector=lambda convo: convo.meta['train_test_type'] == 'test')\n", "\n", "# Then evaluate the accuracy of this prediction\n", - "bow_classifier2.summarize(\n", - " threads_corpus, selector=lambda convo: convo.meta[\"train_test_type\"] == \"test\"\n", - ")" + "bow_classifier2.summarize(threads_corpus, selector=lambda convo: convo.meta['train_test_type'] == 'test')" ] }, { @@ -1503,11 +1476,8 @@ } ], "source": [ - "print(\n", - " bow_classifier2.classification_report(\n", - " threads_corpus, selector=lambda convo: convo.meta[\"train_test_type\"] == \"test\"\n", - " )\n", - ")" + "print(bow_classifier2.classification_report(threads_corpus, \n", + " selector=lambda convo: convo.meta['train_test_type'] == 'test'))" ] }, { @@ -1541,9 +1511,7 @@ } ], "source": [ - "bow_classifier2.evaluate_with_cv(\n", - " threads_corpus, selector=lambda convo: convo.meta[\"thread_doubles\"] is not None\n", - ")" + "bow_classifier2.evaluate_with_cv(threads_corpus, selector=lambda convo: convo.meta['thread_doubles'] is not None)" ] }, { @@ -1573,9 +1541,9 @@ } ], "source": [ - "bow_classifier2.evaluate_with_train_test_split(\n", - " threads_corpus, selector=lambda convo: convo.meta[\"thread_doubles\"] is not None, test_size=0.2\n", - ")" + "bow_classifier2.evaluate_with_train_test_split(threads_corpus, \n", + " selector=lambda convo: convo.meta['thread_doubles'] is not None,\n", + " test_size=0.2)" ] }, { diff --git a/examples/vectors/vector_demo.ipynb b/examples/vectors/vector_demo.ipynb index 167427bc..3a8bc33d 100644 --- a/examples/vectors/vector_demo.ipynb +++ b/examples/vectors/vector_demo.ipynb @@ -55,7 +55,7 @@ } ], "source": [ - "corpus = Corpus(download(\"subreddit-Cornell\"))" + "corpus = Corpus(download('subreddit-Cornell'))" ] }, { @@ -208,7 +208,7 @@ } ], "source": [ - "bow_transformer = BoWTransformer(obj_type=\"utterance\", vector_name=\"bow\")\n", + "bow_transformer = BoWTransformer(obj_type=\"utterance\", vector_name='bow')\n", "bow_transformer.fit_transform(corpus)" ] }, @@ -284,7 +284,7 @@ } ], "source": [ - "random_utt.get_vector(\"bow\")" + "random_utt.get_vector('bow')" ] }, { @@ -383,7 +383,7 @@ ], "source": [ "# We can get a more interpretable display of the vector as a dataframe\n", - "random_utt.get_vector(\"bow\", as_dataframe=True)" + "random_utt.get_vector('bow', as_dataframe=True)" ] }, { @@ -453,7 +453,7 @@ } ], "source": [ - "random_utt.get_vector(\"bow\", as_dataframe=True, columns=[\"youtu\", \"youtube\", \"yr\"])" + "random_utt.get_vector('bow', as_dataframe=True, columns=['youtu', 'youtube', 'yr'])" ] }, { @@ -475,7 +475,7 @@ ], "source": [ "# This works for the non-dataframe format too\n", - "random_utt.get_vector(\"bow\", as_dataframe=False, columns=[\"youtu\", \"youtube\", \"yr\"])" + "random_utt.get_vector('bow', as_dataframe=False, columns=['youtu', 'youtube', 'yr'])" ] }, { @@ -502,7 +502,7 @@ } ], "source": [ - "corpus.vectors # The corpus has a 'bow' vector associated with it" + "corpus.vectors # The corpus has a 'bow' vector associated with it" ] }, { @@ -530,7 +530,7 @@ } ], "source": [ - "corpus.get_vector_matrix(\"bow\")" + "corpus.get_vector_matrix('bow') " ] }, { @@ -539,7 +539,7 @@ "metadata": {}, "outputs": [], "source": [ - "bow_matrix = corpus.get_vector_matrix(\"bow\")" + "bow_matrix = corpus.get_vector_matrix('bow')" ] }, { @@ -838,7 +838,7 @@ } ], "source": [ - "# Accessing the numpy matrix directly; we could use this\n", + "# Accessing the numpy matrix directly; we could use this \n", "bow_matrix.matrix" ] }, @@ -916,7 +916,7 @@ "metadata": {}, "outputs": [], "source": [ - "ck_matrix = ConvoKitMatrix(name=\"bag-of-words\", matrix=matrix_data)" + "ck_matrix = ConvoKitMatrix(name='bag-of-words', matrix=matrix_data)" ] }, { @@ -1171,10 +1171,12 @@ "metadata": {}, "outputs": [], "source": [ - "# We can initialize the ConvoKitMatrix with this information\n", - "ck_matrix = ConvoKitMatrix(\n", - " name=\"bag-of-words\", matrix=matrix_data, columns=column_names, ids=row_ids\n", - ")" + "# We can initialize the ConvoKitMatrix with this information \n", + "ck_matrix = ConvoKitMatrix(name='bag-of-words',\n", + " matrix=matrix_data,\n", + " columns=column_names,\n", + " ids=row_ids\n", + " )" ] }, { @@ -1457,7 +1459,11 @@ } ], "source": [ - "corpus.set_vector_matrix(name=\"bag-of-words\", matrix=matrix_data, columns=column_names, ids=row_ids)" + "corpus.set_vector_matrix(name='bag-of-words', \n", + " matrix=matrix_data,\n", + " columns=column_names,\n", + " ids=row_ids\n", + " )" ] }, { @@ -1492,7 +1498,7 @@ ], "source": [ "# It does not have a 'bag-of-words' vector\n", - "utt_example = corpus.get_utterance(\"nyx4d\")\n", + "utt_example = corpus.get_utterance('nyx4d')\n", "utt_example.vectors" ] }, @@ -1516,7 +1522,7 @@ ], "source": [ "# this call will fail since there is no such vector associated with the utterance\n", - "utt_example.get_vector(\"bag-of-words\")" + "utt_example.get_vector('bag-of-words') " ] }, { @@ -1532,7 +1538,7 @@ "metadata": {}, "outputs": [], "source": [ - "utt_example.add_vector(\"bag-of-words\")" + "utt_example.add_vector('bag-of-words')" ] }, { @@ -1560,7 +1566,7 @@ } ], "source": [ - "utt_example.get_vector(\"bag-of-words\")" + "utt_example.get_vector('bag-of-words')" ] }, { @@ -1607,7 +1613,7 @@ } ], "source": [ - "utt_example.delete_vector(\"bag-of-words\")\n", + "utt_example.delete_vector('bag-of-words')\n", "utt_example.vectors" ] }, @@ -1648,7 +1654,7 @@ } ], "source": [ - "corpus.delete_vector_matrix(\"bag-of-words\")\n", + "corpus.delete_vector_matrix('bag-of-words')\n", "corpus.vectors" ] }, @@ -1775,7 +1781,7 @@ ], "source": [ "# horizontal stack\n", - "ConvoKitMatrix.hstack(name=\"hstacked_matrix\", matrices=[matrix_a, matrix_b])" + "ConvoKitMatrix.hstack(name='hstacked_matrix', matrices=[matrix_a, matrix_b])" ] }, { @@ -1797,7 +1803,7 @@ ], "source": [ "# vertical stack\n", - "ConvoKitMatrix.vstack(name=\"vstacked_matrix\", matrices=[matrix_a, matrix_b])" + "ConvoKitMatrix.vstack(name='vstacked_matrix', matrices=[matrix_a, matrix_b])" ] }, { @@ -1843,7 +1849,6 @@ ], "source": [ "import os\n", - "\n", "os.listdir()" ] }, @@ -1854,7 +1859,7 @@ "outputs": [], "source": [ "# dumps all vectors by default\n", - "corpus.dump(\"cornell-with-bow\", base_path=\".\")" + "corpus.dump('cornell-with-bow', base_path='.')" ] }, { @@ -1879,7 +1884,7 @@ } ], "source": [ - "os.listdir(\"./cornell-with-bow\")" + "os.listdir('./cornell-with-bow')" ] }, { @@ -1895,7 +1900,7 @@ "metadata": {}, "outputs": [], "source": [ - "corpus.dump(\"cornell-no-bow\", base_path=\".\", exclude_vectors=[\"bow\"])" + "corpus.dump('cornell-no-bow', base_path='.', exclude_vectors=['bow'])" ] }, { @@ -1919,7 +1924,7 @@ } ], "source": [ - "os.listdir(\"./cornell-no-bow\")" + "os.listdir('./cornell-no-bow')" ] }, { @@ -1935,7 +1940,7 @@ "metadata": {}, "outputs": [], "source": [ - "corpus = Corpus(filename=\"./cornell-no-bow\")" + "corpus = Corpus(filename='./cornell-no-bow')" ] }, { @@ -1998,7 +2003,7 @@ "metadata": {}, "outputs": [], "source": [ - "corpus = Corpus(filename=\"./cornell-with-bow\")" + "corpus = Corpus(filename='./cornell-with-bow')" ] }, { @@ -2080,7 +2085,7 @@ ], "source": [ "# fetched normally (the lazy-loading is invisible to the ConvoKit user)\n", - "corpus.get_vector_matrix(\"bow\")" + "corpus.get_vector_matrix('bow')" ] }, { @@ -2096,7 +2101,7 @@ "metadata": {}, "outputs": [], "source": [ - "corpus = Corpus(filename=\"./cornell-with-bow\", preload_vectors=[\"bow\"])" + "corpus = Corpus(filename='./cornell-with-bow', preload_vectors=['bow'])" ] }, { @@ -2137,7 +2142,7 @@ } ], "source": [ - "corpus.get_vector_matrix(\"bow\")" + "corpus.get_vector_matrix('bow')" ] }, { From 177f1cde766b35e0a3d36b3cf65691b1f39773c3 Mon Sep 17 00:00:00 2001 From: seanzhangkx8 <106214464+seanzhangkx8@users.noreply.github.com> Date: Mon, 17 Jul 2023 20:31:46 +0800 Subject: [PATCH 16/20] update release date --- README.md | 4 ++-- docs/source/index.rst | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f9f69c31..c39cdbee 100644 --- a/README.md +++ b/README.md @@ -4,13 +4,13 @@ [![pypi](https://img.shields.io/pypi/v/convokit.svg)](https://pypi.org/pypi/convokit/) -[![py\_versions](https://img.shields.io/badge/python-3.7%2B-blue)](https://pypi.org/pypi/convokit/) +[![py\_versions](https://img.shields.io/badge/python-3.8%2B-blue)](https://pypi.org/pypi/convokit/) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) [![license](https://img.shields.io/badge/license-MIT-green)](https://github.com/CornellNLP/ConvoKit/blob/master/LICENSE.md) [![Slack Community](https://img.shields.io/static/v1?logo=slack&style=flat&color=red&label=slack&message=community)](https://join.slack.com/t/convokit/shared_invite/zt-1axq34qrp-1hDXQrvSXClIbJOqw4S03Q) -This toolkit contains tools to extract conversational features and analyze social phenomena in conversations, using a [single unified interface](https://convokit.cornell.edu/documentation/architecture.html) inspired by (and compatible with) scikit-learn. Several large [conversational datasets](https://github.com/CornellNLP/ConvoKit#datasets) are included together with scripts exemplifying the use of the toolkit on these datasets. The latest version is [3.0.0](https://github.com/CornellNLP/ConvoKit/releases/tag/v3.0.0) (released 1 June 2023); follow the [project on GitHub](https://github.com/CornellNLP/ConvoKit) to keep track of updates. +This toolkit contains tools to extract conversational features and analyze social phenomena in conversations, using a [single unified interface](https://convokit.cornell.edu/documentation/architecture.html) inspired by (and compatible with) scikit-learn. Several large [conversational datasets](https://github.com/CornellNLP/ConvoKit#datasets) are included together with scripts exemplifying the use of the toolkit on these datasets. The latest version is [3.0.0](https://github.com/CornellNLP/ConvoKit/releases/tag/v3.0.0) (released July 17, 2023); follow the [project on GitHub](https://github.com/CornellNLP/ConvoKit) to keep track of updates. Read our [documentation](https://convokit.cornell.edu/documentation) or try ConvoKit in our [interactive tutorial](https://colab.research.google.com/github/CornellNLP/ConvoKit/blob/master/examples/Introduction_to_ConvoKit.ipynb). diff --git a/docs/source/index.rst b/docs/source/index.rst index 47f027fe..2a6f0dec 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -8,7 +8,7 @@ Cornell Conversational Analysis Toolkit (ConvoKit) Documentation This toolkit contains tools to extract conversational features and analyze social phenomena in conversations, using a `single unified interface `_ inspired by (and compatible with) scikit-learn. Several large `conversational datasets `_ are included together with scripts exemplifying the use of the toolkit on these datasets. -More information can be found at our `website `_. The latest version is `3.0.0 `_ (released July 11, 2023). +More information can be found at our `website `_. The latest version is `3.0.0 `_ (released July 17, 2023). Contents -------- From a300a96de63e8bf7e8d2b588b025cebf24e1abf4 Mon Sep 17 00:00:00 2001 From: seanzhangkx8 <106214464+seanzhangkx8@users.noreply.github.com> Date: Wed, 26 Jul 2023 14:33:16 +0800 Subject: [PATCH 17/20] updated setup.py, README --- README.md | 2 +- docs/source/troubleshooting.rst | 4 ++-- setup.py | 3 +-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index c39cdbee..d6559f76 100644 --- a/README.md +++ b/README.md @@ -180,7 +180,7 @@ Name for download: `spolin-corpus` In addition to the provided datasets, you may also use ConvoKit with your own custom datasets by loading them into a `convokit.Corpus` object. [This example script](https://github.com/CornellNLP/ConvoKit/blob/master/examples/converting_movie_corpus.ipynb) shows how to construct a Corpus from custom data. ## Installation -This toolkit requires Python >= 3.7. +This toolkit requires Python >= 3.8. 1. Download the toolkit: `pip3 install convokit` 2. Download Spacy's English model: `python3 -m spacy download en` diff --git a/docs/source/troubleshooting.rst b/docs/source/troubleshooting.rst index 13c7d267..04e8ac03 100644 --- a/docs/source/troubleshooting.rst +++ b/docs/source/troubleshooting.rst @@ -59,9 +59,9 @@ The two recommended fixes are to run: and if that doesn't fix the issue, then run: ->>> open /Applications/Python\ 3.7/Install\ Certificates.command +>>> open /Applications/Python\ 3.8/Install\ Certificates.command -(Substitute 3.7 in the above command with your current Python version (e.g. 3.8 or 3.9) if necessary.) +(Substitute 3.8 in the above command with your current Python version (e.g. 3.9 or 3.10) if necessary.) Immutability of Metadata Fields ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/setup.py b/setup.py index c7b41e28..ca7ed562 100644 --- a/setup.py +++ b/setup.py @@ -6,7 +6,7 @@ author_email="cristian@cs.cornell.edu", url="https://github.com/CornellNLP/ConvoKit", description="ConvoKit", - version="2.5.3", + version="3.0.0", packages=[ "convokit", "convokit.bag_of_words", @@ -62,7 +62,6 @@ }, classifiers=[ "Programming Language :: Python", - "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", From e7f9071e7fc5c8aa77956d0eb875a3c5cccf530f Mon Sep 17 00:00:00 2001 From: seanzhangkx8 <106214464+seanzhangkx8@users.noreply.github.com> Date: Tue, 26 Sep 2023 23:30:44 -0400 Subject: [PATCH 18/20] updated parliament_demo with correct cluster names, added CANDOR corpus conversion notebook --- .../demos/parliament_demo.ipynb | 2069 ++++++++--------- .../CANDOR/candor_to_convokit.ipynb | 795 +++++++ 2 files changed, 1760 insertions(+), 1104 deletions(-) create mode 100644 examples/dataset-examples/CANDOR/candor_to_convokit.ipynb diff --git a/convokit/expected_context_framework/demos/parliament_demo.ipynb b/convokit/expected_context_framework/demos/parliament_demo.ipynb index 23e31909..7c674b0a 100644 --- a/convokit/expected_context_framework/demos/parliament_demo.ipynb +++ b/convokit/expected_context_framework/demos/parliament_demo.ipynb @@ -14,9 +14,7 @@ { "cell_type": "code", "execution_count": 1, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "import warnings\n", @@ -26,9 +24,7 @@ { "cell_type": "code", "execution_count": 2, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", @@ -37,15 +33,6 @@ "import os" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - }, { "cell_type": "markdown", "metadata": {}, @@ -56,9 +43,7 @@ { "cell_type": "code", "execution_count": 3, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "from convokit import Corpus\n", @@ -68,9 +53,7 @@ { "cell_type": "code", "execution_count": 4, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "# OPTION 1: DOWNLOAD CORPUS \n", @@ -80,15 +63,13 @@ "\n", "# OPTION 2: READ PREVIOUSLY-DOWNLOADED CORPUS FROM DISK\n", "# UNCOMMENT THIS LINE AND REPLACE WITH THE DIRECTORY WHERE THE TENNIS-CORPUS IS LOCATED\n", - "# PARL_CORPUS_PATH = ''" + "PARL_CORPUS_PATH = ''" ] }, { "cell_type": "code", "execution_count": 5, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "parl_corpus = Corpus(PARL_CORPUS_PATH)" @@ -123,23 +104,12 @@ { "cell_type": "code", "execution_count": 7, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "parl_corpus.load_info('utterance',['arcs','q_arcs'])" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - }, { "cell_type": "markdown", "metadata": {}, @@ -150,9 +120,7 @@ { "cell_type": "code", "execution_count": 8, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "from convokit.expected_context_framework import ColNormedTfidfTransformer, ExpectedContextModelTransformer" @@ -212,24 +180,13 @@ { "cell_type": "code", "execution_count": 11, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "_ = q_tfidf_obj.transform(parl_corpus, selector=lambda x: x.meta['is_question'] and x.meta['pair_has_features'])\n", "_ = a_tfidf_obj.transform(parl_corpus, selector=lambda x: x.meta['is_answer'] and x.meta['pair_has_features'])" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - }, { "cell_type": "markdown", "metadata": {}, @@ -244,9 +201,7 @@ { "cell_type": "code", "execution_count": 12, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "q_ec = ExpectedContextModelTransformer(\n", @@ -266,24 +221,13 @@ { "cell_type": "code", "execution_count": 13, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "q_ec.fit(parl_corpus, selector=lambda x: x.meta['is_question'] and (x.meta.get('q_arc_tfidf__n_feats',0)>0),\n", " context_selector=lambda x: x.meta['is_answer'] and (x.meta.get('arc_tfidf__n_feats',0)>0))" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - }, { "cell_type": "markdown", "metadata": {}, @@ -305,405 +249,399 @@ "CLUSTER 0 0\n", "---\n", "terms\n", - " cluster_dist\n", - "index \n", - "why>* 0.433792\n", - "explain_* 0.450258\n", - "explain_will 0.476159\n", - "admit_* 0.520922\n", - "how>does 0.545040\n", - "admit_will 0.570400\n", - "cost_* 0.601069\n", - "why>does 0.612624\n", - "explain_is 0.637547\n", - "explain_to 0.642417\n", + " cluster_dist\n", + "index \n", + "share_* 0.561461\n", + "welcome_* 0.565564\n", + "share_does 0.604726\n", + "congratulate_* 0.616394\n", + "use_* 0.617847\n", + "am_* 0.627405\n", + "impress_on 0.635085\n", + "encourage_* 0.646977\n", + "congratulate_may 0.664214\n", + "join_* 0.678611\n", "\n", "context terms\n", - " cluster_dist\n", - "index \n", - "of>* 0.667550\n", - "is>* 0.683172\n", - "failed_* 0.689151\n", - "expected_* 0.690912\n", - "is_wrong 0.701407\n", - "is_what 0.707268\n", - "of_* 0.722738\n", - "instead>* 0.726977\n", - "apologise_* 0.728533\n", - "three>* 0.732311\n", + " cluster_dist\n", + "index \n", + "is_important 0.557533\n", + "hope_* 0.567806\n", + "have_can 0.570490\n", + "encourage_* 0.571406\n", + "is_ensure 0.596783\n", + "and>* 0.613320\n", + "is_have 0.614779\n", + "hope_do 0.620393\n", + "is_get 0.628049\n", + "is_do 0.628658\n", "\n", "\n", "utterances\n", - "> 1988-10-31a.656.2 0.379 I assure the Minister that the Opposition understand the great difficulty of his task of providing housing in Wales . We consider it important for him to receive advice from as wide a range of sources as possible . Will he therefore explain why two gentlemen , Mr. John Allen and Colonel Geoffrey Inkin , have between them been vice chairmen of the Land Authority , chairman of the Land Authority , chairman of the Housing for Wales , chairman of Cwmbran development corporation , chairman of Cardiff Bay development corporation , and ex - vice chairman of Cwmbran district council ? Why does the Minister not obtain advice from all over Wales , rather than adopt such an incestuous relationship with failed Tory party candidates and Tory placemen ?\n", - "> 1985-12-18a.297.3 0.392 Will the Minister explain why the British Council , of all overseas organisations , has been singled out for punitive cuts of 20 per cent . ? Has he presented to the Treasury the British Council 's claim for an extension of activities to Indonesia and China ? Why is his Department so publicly supportive of the British Council but will not fight for it in private ?\n", - "> 1996-05-09a.351.4 0.400 When the Minister meets the president of the NFU , will he explain to him why the Government are seeking to deny the House of Commons the opportunity to express its views on a proper motion in the agriculture debate next week ? That debate will be of great importance to the dairy sector during the BSE crisis—the biggest crisis to hit our agriculture this century . Why is the Minister ignoring the recommendation of the Select Committee on European Legislation that there should be an early debate in the House rather than in European Standing Committee A ? What is he afraid of ?\n", - "> 1984-04-05a.1102.4 0.401 How many letters drew attention to the fact that this Budget gives most to the people who already have most and does nothing for the people who have least ? When Ministers reply to the letters do they explain this as being inevitable , accidental or a direct result of Government decision ?\n", - "> 2006-07-03c.521.1 0.401 After five years of attempts to destroy the poppy trade , this year 's harvest will be the highest ever and the price of heroin on the streets of Britain will be the lowest ever . The last Secretary of State for Defence said that the Helmand venture would end in three years without a shot being fired . What we are now seeing in the formerly peaceful area of Helmand is bitter resentment , not among the Taliban but among the ordinary people : murderous resentment of our troops . If we are sucked into a war in Afghanistan , it could deteriorate into a British Vietnam and provoke Afghan terrorism on the streets of Britain . When will we explain to our American friends and to our Government that it is not possible to win hearts and minds by using bombs and bullets ?\n", - "> 1980-03-03a.25.1 0.402 When the hon Gentleman publicises his aid policy , will he explain how his policy on overseas students ' fees is connected with the general principles of aid policy which he announced recently ? Is he aware that if this policy continues many poor students who would , in the past , have come to Britain will end up receiving their higher education in Moscow and behind the Iron Curtain ?\n", - "> 2010-03-25c.364.5 0.402 I thank the Minister for that reply . He knows that 2009 was another difficult year for many British farmers . Will he explain why Government procurement of British food actually fell during that year , and in particular , why NHS procurement dropped sharply ? Why are the Government failing to back British farmers and British food at this time ?\n", - "> 1981-10-27a.718.5 0.403 Will the Prime Minister confirm that when the Salt II talks were concluded it was announced officially that there was nuclear parity between the Soviet Union and the United States of America ? Why do the Prime Minister and President Reagan now say that they must install Cruise and Pershing II missiles in Europe to bring about parity before nuclear disarmament talks can proceed ? Will she explain that to the House ?\n", - "> 1998-11-05a.1007.0 0.406 On Tuesday , the Chancellor described his growth forecasts as \" prudent \" and \" cautious \" . Today , the Chief Secretary has said that they are \" realistic \" . Why , then , is it almost impossible today to find a single independent forecaster who agrees with them ? Will the Minister explain why the Chancellor is almost alone in upgrading his growth forecasts for the year after next ? Will he give an assurance that the Chancellor will not be forced to return to the House in a few months to admit that , once again , he got it wrong ?\n", - "> 2010-11-01b.598.6 0.407 It is interesting that the Home Secretary chose not to answer the question on the spending review and the impact on police numbers , but we have heard from both the Home Secretary and the Policing Minister that thousands of police jobs are to be lost . The idea that that will not impact on front - line policing is one for the fairies . Can the Minister explain why the 20 % cut announced in direct Government funding for police forces is front - loaded ? In other words , of that 20 % , why are the deepest , most far - reaching cuts in the first two years - next year 6 % , in 2012 - 13 8 % , then 4 % and 4 % ? Why is the deepest , most far - reaching cut , 8 % , in the year when the country is facing one of it greatest security challenges , the Olympics ?\n", + "> 2006-01-12b.407.2 0.425 The Minister knows how fervently the Opposition support his work to encourage links between the universities and industry . In that spirit of cross - party consensus on higher education , will he join me in supporting all those engaged in the study and teaching of disciplines that greatly stimulate and develop the mind , but which do not have an immediate vocational application ? May I also ask him finally to dissociate himself and his party from the remarks of the former Secretary of State , who deprecated the study of taxpayer - funded history ? [ Interruption . ] Medieval history or any other type of history . Does he agree that those remarks were not only sad and surprising from a man who was notionally in charge of higher education , but economically illiterate ?\n", + "> 1991-07-22a.747.5 0.434 Will the Minister join me in congratulating the Neath - based West Glamorgan Theatre Company on its pioneering work in Welsh language productions , but will he recognise that it needs more funding , especially in view of the reductions in the centrally held funds of educational authorities ? Will the Minister also encourage extra funding for the excellent Pontardawe music festival , which will be attended by 20,000 people on the weekend of 16 to 18 August but receives a derisory Arts Council grant of just £ 1,275 , which would not even buy four seats in a box at Covent Garden ? Does the Minister agree that our rich arts culture can not survive on voluntary enthusiasm and dedication alone ?\n", + "> 1995-07-06a.512.0 0.438 May I congratulate my right hon Friend on his win ? May I assure him that , like him , I wish to see a Conservative election victory ? Would he agree with me that some of the ideas and policies that I set out in the past two weeks could make an important contribution to that victory ?\n", + "> 1999-02-09a.113.2 0.441 May I genuinely congratulate the Deputy Prime Minister on the way in which he has carried forward the work of my right hon Friend the Member for Suffolk , Coastal ( Mr. Gummer ) in this important area ? Does he share my disappointment that certain organisations characterised the Buenos Aires conference as an agenda for inaction ? In the context of the question asked by the hon Member for Nottingham , South ( Mr. Simpson ) , how can certain developed countries be prevented from escaping their obligations through some clever footwork ? It is clearly important that the developed world provides a proper and sincere lead for the developing world to ensure that we can get to grips with environmental problems .\n", + "> 1992-07-13a.796.0 0.442 Does the Secretary of State agree that the role of the voluntary sector , and particularly of unpaid sports coaches and school teachers in their spare time , in improving participation in sport is important ? Does he share the concern that many voluntary sports clubs feel about the level of funding , and especially the burden of the business rate ? Will he join me in the delegation going to see the Treastury about corporation tax and will he give his full support to exemption from corporation tax for the British Olympic Association so as to ensure that the money raised by voluntary effort for the Olympics can be spent on that and not given back to the Government ?\n", + "> 2002-07-17.285.3 0.444 The Prime Minister will be aware that my constituency has seen a rising number of gunshot incidents , some of which have led to the murder of mainly young men . He is right to say that we need more police on the streets . However , will he join me in applauding the actions of Mothers Against Violence ? Women whose children have been shot and killed have taken the very brave step of publicly standing up to condemn the violence in their communities ; they are trying to change the culture where young men are prepared to use firearms . When my right hon Friend is next in the city of Manchester , will he agree to meet that group of women to give them his support and that of the Government ?\n", + "> 1994-04-19a.734.3 0.446 Will my right hon Friend join me in regretting today 's announcement by London International of the plant closure in my constituency and urge the company to think again ? If its decision remains unchanged , will my right hon Friend make every effort and take every measure to ensure that all those who are unfortunate enough to lose their jobs as a result will be found new jobs ?\n", + "> 2015-11-19a.806.5 0.447 May I congratulate my right hon Friend on her speech yesterday and warmly welcome her determination to reach zero subsidy ? Does she agree with me that if we eliminated all subsidy for large - scale solar PV—photovoltaics—and concentrated it on domestic and small - scale solar PV , we could actually achieve our renewables target , protect jobs and reach zero subsidy and grid parity within the LCF earlier than 2020 ?\n", + "> 1999-02-02a.712.3 0.447 I thank my hon Friend for that reply . In inviting bids for that work , will he welcome and encourage new and innovative practices that complement other measures for developing a national health service for the 21st century ? I have in mind the bid from the Exeter , Plymouth and Open universities , which , in addition to having a strong community focus , will seek to develop training through telematics and information technologies which will be the stuff of communication for doctors in the next century .\n", + "> 2002-07-24.974.0 0.449 Following the publication of Dame Janet 's interim report on Harold Shipman last Friday , will the Prime Minister join me and other hon Members in expressing sympathy and support to the victims ' relatives ? Does he also agree that the failure of the General Medical Council to strike off Harold Shipman following 77 counts of drug misuse and prescription fraud in my constituency led to many more deaths in Hythe ? May I ask the Prime Minister to take a personal interest in the final report when it is published in the autumn and to expedite the recommendations as urgently as possible ?\n", "\n", "context-utterances\n", - ">> 1986-01-13a.764.7 0.515 The railway is not expected to make a profit . Therefore , the hon Gentleman is wrong to assume that this is a case of public investment designed to create private profit . I am sorry to have to say that it will create a running loss .\n", - ">> 1989-05-08a.541.2 0.535 Of course . That is one of the reasons why the review was confined to England . As the hon Gentleman said , a five - year development strategy has been evolved by the Wales tourist board , and it is expected that it will trigger off about £ 73 million of private sector money and create 2,000 jobs . Therefore , there is every reason for us to continue as we are .\n", - ">> 1988-07-25a.4.2 0.542 We clearly can not appoint a Regulator until the necessary legislation has passed through Parliament . Until the Regulator is appointed and the regulatory regime is in place , the Government will oversee , or , to use my hon Friend 's word , \" monitor \" , the electricity supply industry 's preparation for privatisation . In particular , we shall oversee the negotiations of the initial contracts between distribution boards and the CEGB 's successors . We shall not permit practices designed to stifle competition or to prevent distributors from making contracts with new sources of supply .\n", - ">> 1997-11-03a.10.3 0.547 In the great history of brass necks in politics , I suppose that the hon Gentleman does not shine out , but savings in this year 's defence budget will have to be made to fill the holes in capability that his hon Friends left . In addition to that , we inherited a 3 per cent . efficiency savings target from the previous Government . The hon Gentleman was a special adviser to the previous Administration , so he knows a little about random , ad hoc , arbitrary cutting of defence budgets . Perhaps he should apologise to the House rather than boast .\n", - ">> 1991-02-04a.9.0 0.552 With respect to my hon Friend , if further loans are made to somebody they are not expected to repay the second loan until the first has been completed . Of course , there is no question of interest being charged on any of the loans—they are all interest - free .\n", - ">> 1999-07-12a.14.3 0.559 I have to point out that the Opposition supported the principles behind the Good Friday agreement , and it is , frankly , wrong for the hon Gentleman to condense both that issue and hunting . I am sure that he , like the rest of us , wants to see peace in Northern Ireland , and I should not have expected the hon Gentleman to raise this issue along with that of Northern Ireland .\n", - ">> 1992-02-13a.1102.5 0.563 My hon Friend is right about the revenues from North sea oil taxation . This financial year , they are expected to be just over £ 1 billion—about one half of 1 per cent . of total tax revenues .\n", - ">> 1991-05-08a.707.0 0.574 We got rid of the unfair principle underlying the old rating system , to which the hon Gentleman wants to return , whereby the occupants of more expensive properties—even if they had modest incomes—were expected to pay limitless sums towards local government . The hon Gentleman also wants sole occupants to pay as much as multiple - occupancy households . That was a major unfairness under the rates system , and we are not prepared to return to it . The hon Gentleman has been barking up the wrong tree for some time . We devised a system that appeals to the British public as being fair , because it dispenses with the extremes of the rating system . We prefer to base a system on 1991 values , whereas the hon Gentleman wants to use 1973 values .\n", - ">> 2007-10-18b.946.6 0.577 To drive down rates of unemployment , it is important that we give our young people and young adults the education , training and access to opportunities that they need in a modern economy . I am surprised that the hon Gentleman did not welcome the fact that we have created 2.6 million extra jobs , and that levels of employment are the highest seen in the economy for many years . I would have expected him to at least acknowledge the Government 's success in terms of employment .\n", - ">> 1982-04-07a.938.2 0.583 I must deny the hon Gentleman 's statement . Last year 's claim was £ 644 million . At 1982 prices , that amounts to £ 704 million . This year 's grant is £ 804 million . Therefore , that is £ 100 million more than was originally claimed last year .\n", + ">> 2014-03-25c.141.2 0.437 I do support that . It is very important that small businesses should have access to good internet connections . It is right to point out that even in our big cities and urban areas where connections are available , they are not comprehensive enough : about 5 % of premises in urban areas can not be connected to a high - speed connection . That is a very important feature to be corrected and I hope the local growth deal will do so .\n", + ">> 1984-12-03a.17.7 0.461 UNDRO is a monitoring , advisory and co - ordinating body with a small organisation , which is not designed to run a major famine relief operation . It is important to have effective co - ordination in places such as Ethiopia , and for that reason we support the action of the United Nations Secretary - General in appointing a special co - ordinator in the form of Mr. Jansson to operate from Addis .\n", + ">> 1984-04-05a.1111.2 0.463 We welcome the recent initiatives by President Reagan to table further proposals . That initiative was foreshadowed in a speech by Mr. Shultz at the Stockholm conference recently . As my hon Friend knows , we had previously tabled an initiative on chemical warfare , including the right to challenge inspection . We warmly support President Reagan 's present initiative . At a time when chemical weapons have been used , it is extremely important that we should secure a comprehensive ban on their manufacture , stockpiling and use .\n", + ">> 2015-09-17b.1187.0 0.468 Our energy security relies upon an energy mix . We therefore support shale and feel that the right way to approach it is to have a planning process that councils adhere to . We stand ready to help councils when they need it , and I hope that we will have the opportunity to do so .\n", + ">> 1995-01-23a.7.0 0.475 The council has a difficult job in ensuring that it proposes qualifying conditions to Ministers that ensure that benefit is paid to miners and ex - miners whose disability can most confidently be attributed to coal dust , rather than to other causes such as smoking . The council has now initiated a review of the qualifying conditions and evidence can be given to that review until 14 April . I strongly encourage the hon Gentleman to ensure that he passes his evidence—including evidence about his constituents , about whom he has written to me—to the council so that it can take it fully into account before giving advice to Ministers .\n", + ">> 1999-06-09a.646.4 0.477 I know that my hon Friend has expressed that point of view and his concerns on several occasions . I assure him that the full range of safety , environmental and economic issues associated with reprocessing were considered in exhaustive detail during the process of consultation before THORP was commissioned . But if we were to question the continued operation of THORP , that would not be right . THORP is an operation with orders valued at some £ 12 billion , it provides 6,000 skilled jobs and it indirectly supports many more . We have to deal with the issue of radioactive waste , but I do not support the case of those who would like us to abandon THORP.\n", + ">> 2015-09-14b.749.1 0.478 Yes , my hon Friend makes a very good point . The need for starter homes and affordable homes for people to purchase is as important in rural areas as it is in urban areas , and I am delighted that we will be able to take that project forward and see 200,000 starter homes delivered for first - time buyers across the country .\n", + ">> 2016-12-07b.213.0 0.482 It is clear that boardrooms should do more to reflect the reality of modern Britain . The Government certainly support the principle of increasing the diversity of boards , which is why we are supporting the business - led ethnic diversity initiative chaired by Sir John Parker . We strongly encourage businesses to act on Sir John ’s recommendations .\n", + ">> 2013-12-05a.1072.6 0.482 I do support that initiative and I hope it will be possible to visit my hon Friend ’s constituency , because I know how much she does to support the Malvern cluster , which will soon be rivalling the Cambridge cluster and tech city .\n", + ">> 1981-07-30a.1148.6 0.483 No more does it support the case for a further round of fiscal reflation . As my hon and learned Friend the Minister of State pointed out , the size of the PSBR is one of the main determinants of the level of interest rates . It is important to have that influence working in the right direction .\n", "\n", "====\n", "\n", "CLUSTER 1 1\n", "---\n", "terms\n", - " cluster_dist\n", - "index \n", - "ensure_will 0.407149\n", - "ensure_* 0.412689\n", - "agree_will 0.484440\n", - "undertake_will 0.525983\n", - "take_* 0.535627\n", - "undertake_* 0.536568\n", - "may>* 0.543304\n", - "take_will 0.566800\n", - "press_may 0.571226\n", - "press_* 0.593260\n", + " cluster_dist\n", + "index \n", + "give_* 0.427345\n", + "give_can 0.526360\n", + "give_will 0.528818\n", + "see_* 0.541311\n", + "assure_will 0.549835\n", + "assure_* 0.584025\n", + "discuss_* 0.591057\n", + "have_* 0.592760\n", + "reassure_* 0.620947\n", + "discuss_will 0.627564\n", "\n", "context terms\n", - " cluster_dist\n", - "index \n", - "am_aware 0.581255\n", - "am_always 0.593945\n", - "am_sure 0.628000\n", - "am_of 0.655275\n", - "am_grateful 0.659158\n", - "am_interested 0.666939\n", - "am_not 0.679442\n", - "try_* 0.684235\n", - "confess_* 0.692829\n", - "seek_* 0.719882\n", + " cluster_dist\n", + "index \n", + "understand_* 0.642189\n", + "when>* 0.687080\n", + "am_concerned 0.688567\n", + "understand_fully 0.689203\n", + "assure_* 0.690546\n", + "was_about 0.694483\n", + "understand_will 0.707195\n", + "am_satisfied 0.707623\n", + "assure_is 0.720145\n", + "assure_can 0.744900\n", "\n", "\n", "utterances\n", - "> 1999-07-13a.157.1 0.373 Could the Minister give an assurance that he will pay particular attention in his review to applications for sites within areas of outstanding natural beauty , including the Chiltern hills ? Will he take careful account of the reports that pressure is being exerted to overturn the decision of the local planning authority on Chisleys wood in my constituency ? That pressure is coming from Government Departments and the current tenant of Chequers . Will he ensure that he takes all steps within his Department to avoid any conflict of interest in determining the outcome ?\n", - "> 2010-01-19c.159.8 0.377 I welcome the Secretary of State 's comments on Haiti , but may I ask whether we are using all our assets ? The Type 23 frigate , HMS Iron Duke , is in the Caribbean but not being utilised . Our military stabilisation and security teams , which performed so admirably after the Indonesian earthquake , remain to be dispatched to Haiti . Will he consider those assets ?\n", - "> 2009-07-02c.466.1 0.386 What a pleasure it is to see you in the Chair , Mr. Speaker . May I ask my right hon Friend the Secretary of State to pass on my welcome to my two colleagues who have joined him on the Front Bench ? Food and food production are far too important to be left entirely to the advocacy of Members with rural constituencies . They are of importance to everyone . I noted my right hon Friend 's response to the hon Member for Lancaster and Wyre ( Mr. Wallace ) . Will he consider approaching the Office of Fair Trading and pressing it for its view on what is competitive in the dairy market ? That would allow it to take a more pragmatic approach when mergers and changes happen in the co - operative sector .\n", - "> 2001-06-26.502.0 0.387 I am disappointed that it is not the Secretary of State at the Dispatch Box . Labour 's NHS plan states that the Government are in favour of a new pay system for the NHS , and figures published today detail the pay received by the service 's humble and self - effacing nurses . They show that general nurses get about two thirds of what is paid for agency work , while a theatre - registered general nurse gets paid about half the rate for an agency job . Is it the Government 's plan to bring the pay of people who work for the national health service up to the levels available outside , so that they will not leave the service and work elsewhere ? If so , will he ensure that all those working for the NHS come within the pay review body structure ? Above all , will he ensure that ambulance personnel receive the sort of pay that people who save lives every day deserve ?\n", - "> 2000-11-30a.1123.5 0.387 I welcome Lord Sainsbury 's report , but what steps will the Government take specifically to assist industrial biotechnology ? Bearing in mind the work that my right hon Friend the Secretary of State has been doing along with others in the north - west , will my hon Friend consider carefully the fantastic successes in industrial biotechnology in the north west and urge the Government to inject more support into the projects going to our academic institutions there , thus helping our industrial partners ?\n", - "> 2014-06-12c.677.0 0.389 I am grateful to the Secretary of State for that reply . Will he ensure that , in addition to that scientific examination , he also meets with the Welsh Assembly Minister who is dealing with this matter in Wales—not too far from his own constituency—where an alternative method of vaccination is being undertaken ? Will the Secretary of State agree to evaluate that as part of the process as well ?\n", - "> 2009-07-01b.286.6 0.390 May I press the new Minister for a better answer to the question put by my hon Friend the Member for Salisbury ( Robert Key ) ? Church groups , scout groups and sports clubs face crippling hikes in their water bills as a result of the proposed changes . Three months ago , I asked the previous Minister whether he would consider a moratorium , at least until an impact assessment was carried out . He said that he would speak to colleagues across Government , but we have heard nothing and time is running out . In welcoming the members of the new team , may I ask them what their view is ? Will they consider a moratorium or the idea of a special social tariff , or will they continue the policy of doing nothing ?\n", - "> 1979-06-26a.262.6 0.395 Will the hon Lady agree that the changes to be made in pensions will only allow prospectively for the miscalculation , and not for the miscalculation in the current year ? Is she aware that in the current year pensioners are losing out by the amount that I quoted in my question ? Will she take the opportunity of the Bill dealing with the Christmas bonus to introduce a summer bonus as well to make good that shortfall ?\n", - "> 2001-06-26.501.1 0.397 The strength of primary care trusts lies in the way they can respond to and meet local needs . When my right hon Friend considers delegation , will he ensure that the allocation of money to the trusts is speeded up ? Also , in the modernisation process that is taking place in the national health service , will he ensure that we do not end up with larger primary care trusts than those that have just been set up ? The trust in my constituency is doing a splendid job and I want it to continue to do so .\n", - "> 2007-07-11b.1458.1 0.397 I warmly welcome the Prime Minister 's statement , which contrasted with the churlish Punch - and - Judy effort from the Leader of the Opposition . I suspect that parliamentarians throughout the House will welcome my right hon Friend 's comments today . Will he examine the relationship between Parliament and the Executive ? Government and Parliament are stronger in partnership than when one dominates the other . In that context , will he ensure that all Bills are introduced in draft , so that the House can discuss them properly ? Will he also ensure the fullest pre - legislative scrutiny ? If we have that , we will end up with better law and better government .\n", + "> 1992-06-30a.704.3 0.338 Can the Minister give us a guarantee that a contingency plan will be drawn up in the event of the Germans withdrawing from the EFA ? As my hon Friend the Member for Edinburgh , East ( Dr. Strang ) said , there could be job losses in the area that we represent and it is important for the next generation of technology that we go ahead with the project . May we have a guarantee from the Minister that we shall go ahead with it ?\n", + "> 2004-03-08.1228.3 0.358 I thank the Minister for that reply . I know that he shares my sadness about the regular reports of the behaviour of a significant number of professional footballers over the past year or so , but I want to be positive about the game . When he meets the football authorities will he use his influence to promote the idea of a John Charles fair play award at either national or European level ? The Minister , as a Sheffield United supporter , knows a bit about football . John Charles of Leeds United and Wales was never sent off or booked in his career . In many respects , he represents the age of innocence for our national game . What support can the Minister give to all those of us who want John Charles 's memory to be honoured properly ?\n", + "> 1994-03-08a.137.3 0.364 May I assure the House that that was not a planted question ? Can the Secretary of State give the House an assurance that the Government are not providing military training to any country that is in breach of any UN resolution , in particular to Indonesia which , as the Secretary of State will I am sure know from seeing the documentary \" Death of a Nation \" , has carried out a policy of genocide against the people of East Timor ?\n", + "> 1987-04-07a.157.6 0.366 Can the Minister give an assurance that the Government intend to maintain the appeals system in the benefits system ? Will he take account of the fact that there appears to be some pettifogging bureaucracy that is discouraging people from attending appeals tribunals on the side of the appellants ? Will he give a further assurance that he will investigate matters of this sort and see that those friends and other people who attend on behalf of appellants are encouraged , not discouraged ?\n", + "> 2014-06-17b.957.1 0.370 In view of the rapidly changing circumstances in Iraq , and in view of the fact that the President of the United States has changed his policy a little , may we have continuing reports on the developing situation instead of relying on Question Time or a statement from the Foreign Secretary ? I have had several e - mails in the past few days from women MPs in Iraq who are very concerned about their circumstances . What assurances can we give them ?\n", + "> 2007-04-19b.427.1 0.375 It is obviously crucial that DEFRA and the Government should set an example , and it is rather worrying that the figures from the Sustainable Development Commission suggest that DEFRA 's own emissions have increased three times as rapidly as the overall national average . However , the quantification of the Government 's impact is crucial , too . As I challenged the Secretary of State in the Budget debate , can the Minister give an estimate of the impact on carbon emissions of the country as a whole of the new measures announced in the Budget ?\n", + "> 1985-01-21a.723.0 0.377 In view of the importance of communications , to which the Secretary of State referred , what assurances can he give to industrialists and others that the experience on the A55 between Llanfairfechan and Penmaenmawr , which was closed for large parts of last week by a landslide , will not be repeated ? Will he assure us that the Welsh Office will investigate the rumours circulating in the area that the landslides were started by drilling initiated by the Welsh Office ?\n", + "> 2003-03-26.274.6 0.379 Many of my constituents who are in the armed services are in Afghanistan , and far too many of my constituents are drug addicts because of heroin . Can we see the job through in Afghanistan ? Will the Minister give a commitment to quantify the success in providing alternative employment in Afghanistan over the next year ?\n", + "> 2010-12-09b.515.4 0.380 Will my right hon Friend give the House a rough idea of the cost of food imported into the country that we are able to , and have the capacity , to grow ?\n", + "> 2014-04-09d.265.5 0.381 In the spirit of a new positive case for the Union previewed this week by Lord Robertson , can the Prime Minister perhaps give us his view as to which of the four horsemen of the apocalypse will be the first to descend on an independent Scotland ?\n", "\n", "context-utterances\n", - ">> 1980-04-15a.989.4 0.522 I am aware of it . I am glad to say that I had an opportunity to talk to Earl Mountbatten upon the subject of that speech , which needs to be read in full .\n", - ">> 1982-05-19a.350.3 0.528 Many hundreds of thousands of tenants have successfully purchased their homes over the years and I am not aware of any statistical basis for suggesting that there is a greater number of defaulters among purchasers from local authorities as opposed to the majority of owner occupiers .\n", - ">> 1983-01-25a.772.5 0.532 I am well aware of the problems of that school . The papers on that subject arrived on my desk some time ago . As my hon Friend drew the attention of the House and the whole country to the matter at the time , I am sure that from now on everyone will bear the matter even more in mind .\n", - ">> 1995-01-11a.141.1 0.533 I am grateful to my hon Friend for those remarks . I am aware that the Director General of Fair Trading has received several representations in the period since the merger was announced , many of which were along the lines that have been outlined by my hon Friend , drawing on the great financial tradition that exists in Yorkshire , Leeds and Halifax .\n", - ">> 1997-06-02a.14.0 0.533 I am grateful for the hon Gentleman 's comments . I am aware of his excellent work as a member of the Select Committee and of the Committee 's invaluable reports on this topic . I am also aware of the problems caused by the complexity of the formula , which I assure him will be considered in great detail in our review of the CSA.\n", - ">> 1986-03-25a.774.0 0.540 I am not aware of the position to which my hon Friend refers . My superficial reaction is that that does not make sense , because those restrictions do not apply at present , but they will apply some time in future .\n", - ">> 1983-11-23a.306.8 0.546 I am aware that the contracting out of services in that borough will save the ratepayers about £ 10 million over the next few years . I am also aware that one of the strengths of contracting out is that if there is unsatisfactory performance , local authorities can find a new contractor .\n", - ">> 1990-07-09a.17.1 0.551 We are well aware of the difficulties that Sendero Luminoso and other terrorists make for the Government in that country . I am not aware of specific difficulties in getting the aid through , but the new Government—under president - elect Fujimori—have a great deal to do , including sorting out a debt of $ 1.5 billion : those are substantial arrears .\n", - ">> 1979-06-18a.902.4 0.551 I am aware of that important point , and I am grateful to the hon Lady for raising it . I hope that she will put forward further constructive suggestions on the arts .\n", - ">> 1986-02-06a.421.4 0.554 I am aware that the Commissioner for Agriculture and Fisheries has made proposals for extra money to deal with the existing surpluses . I suspect that many members of the Council of Ministers will feel that it is not helpful to find a lot more money to deal with the surplus stores in Europe if they are just going to build up again within the next year or two .\n", + ">> 2011-04-26d.21.1 0.503 I am , of course , aware of these issues , which have been raised by colleagues on both sides of the House . At this stage , may I simply reiterate that the consultation team should consider the points that I know my hon Friend and others are making to it ? After the consultation team has fully reflected on all the points , I hope Members will be able to see that it has fully taken them into account in whatever proposals it brings forward .\n", + ">> 1998-07-01a.353.1 0.510 I am grateful to the hon Gentleman for the responsible attitude that he has taken in this matter and to his constituents for the restraint that they have shown . I fully understand , as do all hon Members , the concern at the prospect of having a paedophile housed in the local community , especially in a rural area such as Rutland . On the future role of Wing Grange , the essential point is that no released offenders will at any time be housed at Wing Grange or anywhere else if they present a risk to the public that can not be contained . Such arrangements will be kept under constant review . Much depends on the response of the individuals concerned , but perhaps I can give the hon Gentleman the assurance that , in any event , there is no question of groups of paedophiles being housed together at Wing Grange , nor of any one paedophile being housed there indefinitely . I can further assure him that Wing Grange will take only offenders whose risk can be properly managed there now and in\n", + ">> 1979-07-02a.880.4 0.515 I can understand that the hon Gentleman may not necessarily like a Conservative Budget , but a large number of the representative bodies that support the interests of small businesses—the CBI Small Firms Council , the Federation of Self - Employed and the Association of Independent Businesses—have all sent in comments to the Department of Industry saying that they thought the Budget was very welcome to small businesses . That is the opinion of those who represent small businesses , although I appreciate that the hon Gentleman may feel differently .\n", + ">> 1985-02-28a.449.1 0.537 That goes extremely wide of the question , but I understand the hon Gentleman 's point .\n", + ">> 2013-06-11b.139.10 0.537 I share the hon Gentleman ’s concerns about the way that NHS funding is allocated to different parts of the country . The allocation in my constituency is about the same as in his constituency , and I have long worried that things like age and rurality are not factored into the final amounts in the way that they need to be . However , in this case NHS England decided that if it was to follow precisely the ACRA recommendations , it would lead to higher growth for areas with better health outcomes and lower growth , or even cuts , for areas with less good outcomes , which it thought would be inconsistent with its responsibility to reduce health inequalities . That is why it is conducting a fundamental review , which it says it hopes will inform the next set of allocations for 2013 - 14 .\n", + ">> 1996-12-09a.14.1 0.543 The aid to South Africa and to other southern African countries is certainly not mutually exclusive . As my hon Friend knows from our conversations—I am aware of his interest in the subject—we give substantial bilateral aid to Africa . Indeed , three quarters of all bilateral aid goes to the poorest countries . Therefore , we are very well aware of the points that he has raised .\n", + ">> 1986-01-27a.635.0 0.544 I readily understand the wish of local residents and the hon Gentleman to know the time scale involved . I am satisfied that the Coal Board is doing everything that it can to minimise the nuisance . Work is progressing as quickly as possible to clear the bing as effectively as possible . I am aware that it is important to keep residents informed , and therefore I was pleased to hear from the area director this morning that he is making arrangements for a public meeting to be held as soon as possible , when experts will be in attendance to answer detailed questions .\n", + ">> 2007-11-29b.425.6 0.551 I was delighted to hear of the formation of Cashfields in my hon Friend 's constituency . I understand that it is relatively new and I wish it every success . Following the collapse of Farepak , more that 100 credit unions throughout the country now offer Christmas savings accounts , which is to be welcomed . I shall shortly be publishing the results of the Government 's financial inclusion action plan , which will include further measures to support the growth of credit unions .\n", + ">> 2013-11-12f.796.2 0.551 I can give my hon Friend an assurance that we will publish proposals for change in the new year , and they will include a replacement to Labour ’s Human Rights Act 1998 . I can also assure him that we , as a party , will publish a draft Bill later next year . Whether the coalition and this Parliament will choose to accept such a Bill , or whether it needs to wait for a majority Conservative Government , is something I suspect we will discover then .\n", + ">> 1980-11-27a.566.2 0.553 I am always prepared to look for further ways of cutting public spending . I understand that there is a Bill before the House . Technically , the British Leyland expenditure still comes under the National Enterprise Board , and we have not yet decided on the future of its corporate plan .\n", "\n", "====\n", "\n", "CLUSTER 2 2\n", "---\n", "terms\n", - " cluster_dist\n", - "index \n", - "agree_is 0.313285\n", - "agree_be 0.326589\n", - "agree_have 0.371677\n", - "agree_are 0.392267\n", - "agree_with 0.417120\n", - "agree_also 0.431296\n", - "agree_need 0.459429\n", - "be_agree 0.505595\n", - "agree_given 0.518590\n", - "is_agree 0.523877\n", + " cluster_dist\n", + "index \n", + "tell_* 0.497229\n", + "tell_will 0.545768\n", + "confirm_will 0.564324\n", + "confirm_* 0.573774\n", + "can>* 0.581039\n", + "how>* 0.588424\n", + "tell_can 0.597118\n", + "explain_* 0.600130\n", + "say_* 0.619994\n", + "explain_will 0.632284\n", "\n", "context terms\n", - " cluster_dist\n", - "index \n", - "agree_absolutely 0.440895\n", - "agree_certainly 0.446786\n", - "agree_will 0.448477\n", - "agree_is 0.450768\n", - "agree_be 0.457787\n", - "agree_strongly 0.465542\n", - "agree_however 0.466209\n", - "agree_wholeheartedly 0.466694\n", - "agree_completely 0.467850\n", - "agree_* 0.471350\n", + " cluster_dist\n", + "index \n", + "is>* 0.653612\n", + "tell_will 0.680050\n", + "is_what 0.687452\n", + "am_afraid 0.691371\n", + "tell_should 0.719463\n", + "tell_* 0.722463\n", + "represent_* 0.723182\n", + "on>* 0.723196\n", + "tell_are 0.733122\n", + "expect_* 0.738662\n", "\n", "\n", "utterances\n", - "> 1992-07-02a.953.5 0.277 Does the Minister agree that in the sugar beet sector , as in others , the proposed changes in inheritance tax , which have been discussed in Standing Committee , are likely to have some contradictory effects ? I welcome the changes in inheritance tax because the industry obviously needs them , but does the Minister agree that over a range of agricultural changes introduced as a result of the common agricultural policy , it will be necessary to avoid preventing the achievement of major environmental access and recreational agreements ? The good work that the Minister has done in the past could be undone . Does the Minister agree that some steps will have to be taken to mitigate those effects ?\n", - "> 1997-01-27a.4.0 0.279 Does my right hon Friend agree that last week 's statement about a replacement royal yacht has been widely welcomed ? Does he agree also that , ideally , Britannia should become the centrepiece of the millennium project in Portsmouth harbour , spanning Gosport and Portsmouth ? I am sure that that idea would prove very popular . As to plans for a new yacht , does my right hon Friend share my distaste for the Opposition 's tactics ? They had every opportunity to express their grudging and negative attitude during the past two years when the project was under discussion .\n", - "> 2002-06-26.874.0 0.285 Does my right hon Friend share my view that the greatest challenge facing the international community is fighting global poverty , when 1 billion people exist on less than $ 1 a day ? Is not the war on poverty the acid test of the G8 summit ? Does The right hon Gentleman also agree that in the future the culmination of success must be enhanced debt relief and fair aid and trade ? What we need is a new Marshall plan for Africa .\n", - "> 2003-03-10.15.6 0.287 I thank the hon Gentleman for mentioning that . Does he share the concern expressed to me by a number of my local clergy that they may be forced to employ people who are hostile to the aims of their churches ? Does he also agree that that could be a problem for all faiths , not just for the Church of England ?\n", - "> 1989-12-13a.985.6 0.294 Does the Minister agree that there is a good possibility that the Commission will insist on the implementation of both directives at an earlier date than many of the schemes that have been put before the Commission suggest that the Government are prepared to accept ? Given that on the bathing water directive alone , the Government intend that £ 760 million worth of work will be done after 1993 , does he agree that if the Commission insists on 1993 as the date , there will be a big shock for those people who are making short - term gains from the water privatisation ?\n", - "> 2007-07-16b.8.0 0.295 As the Secretary of State knows , the Defence Committee was in Iraq last week , and we were bowled over by the courage and enthusiasm of the men and women from the UK whom we met . Does he agree that there is a judgment to be made about the viability of our force there ? Given what is happening there at the moment , does he agree that we are now close to the irreducible minimum ?\n", - "> 2008-05-20b.148.1 0.305 I welcome the Government 's commitment to keeping a property - based council tax at the heart of local government finance , but does the Secretary of State agree that it is important that local councils should be able to raise finance from a range of sources other than a property - based council tax ? Does she agree that it is particularly important that a higher proportion of their revenue is raised locally if they are to be accountable to the local electorate ?\n", - "> 1991-05-16a.426.1 0.306 Bearing in mind the adverse criticism directed so often in the past against English football supporters , does my right hon Friend share my pleasure not only in Manchester United 's excellent result last night against Barcelona but in the behaviour of its supporters ? Does he agree with me that , good though the quality of the play was , it is likely to be bettered on Sunday in the third division play - off by Bury football club against Bolton Wanderers ?\n", - "> 1999-07-21a.1178.4 0.307 Does the right hon Gentleman share my view that the United Kingdom should subscribe to the theory that the Commission should do less but do what it does better ? Does he also agree that Neil Kinnock , albeit a charming man , is not the right candidate to reform the EU given that he could not even reform the state aid regime for airlines throughout the EU as Transport Commissioner ?\n", - "> 1987-03-30a.758.9 0.307 I welcome the steps that my right hon Friend has taken , but does he agree that the secondment figures are lamentably low and that an interchange of staff is immensely to the benefit not only of civil servants but of business men ? Will my right hon Friend and his colleagues exert their political will — that is what is required — to ensure that there is more coming and going between industry and the Civil Service ?\n", + "> 2014-07-07c.21.3 0.366 Can the Minister confirm whether the Glasgow Passport Office offers a full passport service ? If the answer is yes , will he explain why my constituents have been directed to offices as far afield as Belfast , Durham and Peterborough to pick up their passports ? If the answer is no , will he tell me why does it not offer such a service ?\n", + "> 2000-03-22a.976.7 0.366 Can the Prime Minister confirm that , despite the Budget yesterday , his Government are set to miss and to break his manifesto promise to raise the proportion of the national income spent on education in this Parliament ? Will he explain why he is allowing his Chancellor to spend almost three times as much on a cut in the basic rate of income tax next year as he has given to schools ? Will he tell the House and the people of this country what has happened to his election priority of education as opposed to Tory tax cuts ?\n", + "> 2013-10-09a.147.6 0.373 It is truly extraordinary that the Minister continues to defend the bedroom tax . Will he confirm for the record whether , according to the Government ’s own figures , Wales is hit harder than anywhere else in the UK ? As he mentioned the disabled , will he tell us how many disabled households in Wales are hit by the bedroom tax ?\n", + "> 2003-03-05.816.0 0.379 I want to come back to the issue of foundation hospitals . Will the Prime Minister tell us whether he agrees with the Secretary of State for Health , who said in a speech last month that he was in favour of freeing such hospitals from the constraints of central Government and capital rationing—in other words , from the controls of the Chancellor of the Exchequer ? We have the benefit of having both the Chancellor of the Exchequer and the Secretary of State for Health here today , so will the Prime Minister confirm which of them he is backing in this long - running Government dispute ?\n", + "> 2011-10-31c.598.5 0.380 Will the Secretary of State confirm the really startling figures from the first quarter of the operation of the new homes bonus , which show that new home starts went down by 18 % compared with the same period last year , and that residential planning permissions went down by 23 % compared with that same period ? If he can confirm that those figures are correct , will he tell us what plans he has to revise the mechanisms of the new homes bonus ?\n", + "> 1987-12-14a.757.1 0.390 Will the Minister confirm that the Electricity Council employs more people than the Department of Energy ; and will he tell us what they all do ?\n", + "> 2009-05-20b.1489.5 0.395 The Minister 's predecessor launched the £ 70 million community builders fund in July 2008 with great fanfare . It is there to help our social entrepreneurs and people who want to show leadership in keeping our communities strong . They need support at this time more than ever . Will the Minister confirm that , almost a year later , not one penny has been invested from the fund ? Will he explain why not and tell us when the fund will deliver something more than a press release ?\n", + "> 1992-02-03a.17.8 0.400 If the Minister can not tell us how many women have been appointed , will he tell us a statistic that I am sure that he will know ? How many of the extra women on the list are card - carrying members of the Conservative party ?\n", + "> 1998-02-17a.880.0 0.403 How does the Minister understand the process of consultation on the Scottish Parliament ? Will he confirm that the minutes of the consultative group meeting for 19 January confirmed that the decision on the interim location of the Parliament would come before that body ? The Minister accepted that proposal just last week . Why , then , are his civil servants briefing that that decision has already been made in favour of the general assembly building ? Can the Minister say whether that is correct ? If so , what is the point of having consultative meetings if the Scottish Office is proceeding by diktat ?\n", + "> 1992-10-26a.761.3 0.403 I do not know who should be more offended , Madam Speaker . I welcome the Minister to the Government Dispatch Box on the occasion of my latest and most enduring comeback . Will he confirm that thousands of jobs in construction and manufacturing industry outside London are waiting on a decision on the Jubilee line extension ? It is appalling that the indecision and lack of an announcement from the Government should be leading to so much uncertainty . If the Minister can not make an announcement today , will he tell the House whether he is personally in favour of the Jubilee line extension ?\n", "\n", "context-utterances\n", - ">> 1981-11-30a.17.10 0.304 Yes . It is extremely important . I agree that there is an immense spin - off for British industry from the high standard of work of British craftsmen . This can have a great effect on the products of British industry . It is important that there should be more outlets where craftsmen can sell their works . The new gallery in the West End of London is a tremendously important site and will have a considerable effect . I shall want to watch the situation closely .\n", - ">> 2000-10-31a.596.0 0.310 I agree and , of course , an environmental assessment will have to be made alongside the other matters to be considered .\n", - ">> 1985-12-05a.412.8 0.311 The hon Gentleman seems to suppose that I send people to prison . I do not send people to prison . The courts send people to prison , having listened to the evidence . For serious cases it is right that there should be serious sentences , which often means custodial sentences . I agree with the hon Gentleman to the extent that for the less serious cases the courts should look carefully at alternatives before awarding custodial sentences .\n", - ">> 2008-01-17b.1071.1 0.314 With great respect to the right hon Gentleman , the least developed countries already have access to the EU market , including the UK market , under the \" Everything but Arms \" initiative . I agree that we need to see progress in the Doha development round . We expect to see revised negotiating drafts of documents , which could potentially lead to ministerial discussions to close the round towards the end of January , or perhaps at the beginning of February . All sides will need to give ground and to show additional flexibility . I hope that the key players—the G4 members and others—will help to ensure that progress is made .\n", - ">> 2012-07-03c.758.2 0.314 I congratulate my hon Friend ’s constituent on his birthday yesterday . The argument for retaining a retirement age of 70 for judges of all kinds—I agree that this is a mere stripling for most occupations—is that , unlike me and most other people in their 70s , they can not be removed from office : they are there for life , and can be removed only for quite serious bad behaviour . If we let everybody go on until whatever age , we will get into difficulties and politicians or somebody else will have to start appraising their performance , as they can not be dismissed peremptorily . That is what has made us hold back from raising the compulsory retirement age for magistrates and judges at every level .\n", - ">> 2008-12-11b.660.1 0.314 My hon Friend is an expert in these areas , and I agree that the integrated nature of the automotive supply chain brings real challenges for suppliers when the automotive manufacturers decide to take extended breaks . We are acutely aware of the pressures that the situation is causing a number of supply chain companies . As he is aware , the UK has about 200,000 jobs in the supply chain alone , about 500,000 in retail and about 180,000 in direct automotive production . This is a vast and important sector of the UK economy , and we need to examine what more we can do to support companies that are going through very difficult times at the moment .\n", - ">> 1992-10-19a.203.2 0.320 I agree ; but it is extremely important , in a subject about which people hold strong , sincere and deep views , that we get the question of reforming the divorce law right rather than simply achieve speed . It is inevitable that , during the discussions , there will be a great deal of deliberation about mediation , particularly if we are to depart from the traditional adversarial role in divorce matters and from the concept of fault and blame .\n", - ">> 2016-01-27d.263.0 0.321 I absolutely agree with my hon Friend . Of course , we hold our service personnel to the highest standards , and it is right that we do , but it is quite clear that there is now an industry trying to profit from spurious claims that are lodged against our brave servicemen and women . I am determined to do everything we can to close that bogus industry down . We should start by making it clear that we will take action against any legal firm that we find to have abused the system to pursue fabricated claims . That is absolutely not acceptable .\n", - ">> 2007-06-06b.252.5 0.322 Of course , local decision making is important , but I hope that the hon Gentleman agrees that if we are to deal with housing issues , we have to expand the availability of housing because of the expansion in the number of households . I agree that a balance needs to be struck , but that must include proposals that allow us to make sure that our people , particularly our younger people , have houses to buy .\n", - ">> 1996-12-04a.1033.2 0.322 I agree with the statistics that my hon Friend mentioned . He is right to emphasise the importance of promoting the multilateral free trade agenda . Free trading blocs can have their place , so long as they are not exclusive and do not confine their benefits to their members . We want the free trade agenda to be spread widely . If a bloc such as my hon Friend describes contributes to that , it can form an acceptable part of the multilateral agenda . But the globalisation of trade liberalisation is our main objective .\n", + ">> 1990-10-31a.971.4 0.524 My hon Friend is absolutely right . In the decade up to 1985 , the total subsidy to British Steel , in present - day money , was £ 14 billion . It is hard to know where the Opposition expect to get such money , as they have already mortgaged the future with promises to spend on almost everything else . If they return to a state - controlled , state - regulated or nationally owned steel industry , we shall again be back in that loss - making era .\n", + ">> 2003-06-10.527.1 0.537 The appearance of members of the Prime Minister 's staff before Select Committees is a matter for the Prime Minister—[Hon Members : \" And the House . \" ] Ultimately for the House , of course , but initially for the Prime Minister , who will clarify the matter . I recall that the hon Gentleman made a fine speech on 18 March , summing up the resolution that was agreed overwhelmingly by the House . On that occasion he was unequivocal in his support for the military action on the basis of the evidence then available— [ Interruption . ] It does the Opposition no good to try to change the terms on which they backed the Government . The basis on which we took the decisions still applies today , and the hon Gentleman knows that very well .\n", + ">> 1994-05-03a.589.7 0.543 My hon Friend is entirely right . Not only do we have both inflation and interest rates at historically low levels , but we have exports running at record levels and growth this year running at twice the rate in any other significant European country . This is expected to continue next year . It is a result of the policies that the Conservative Government have followed .\n", + ">> 1997-11-03a.10.3 0.581 In the great history of brass necks in politics , I suppose that the hon Gentleman does not shine out , but savings in this year 's defence budget will have to be made to fill the holes in capability that his hon Friends left . In addition to that , we inherited a 3 per cent . efficiency savings target from the previous Government . The hon Gentleman was a special adviser to the previous Administration , so he knows a little about random , ad hoc , arbitrary cutting of defence budgets . Perhaps he should apologise to the House rather than boast .\n", + ">> 1996-02-14a.996.1 0.581 I can see that the right hon Lady has nicely caught the spirit of St. Valentine 's day . I shall not be so churlish and I wish her a happy Valentine 's day . My figures on the fall in manufacturing output under the last Labour Government are correct and I will send the right hon Lady those figures so that she does not make the same mistake twice . [ Interruption . ] If she will be quiet for a minute and let me get a word in edgeways , I can tell her that investment has risen six times faster under this Government than under Labour . There is one big difference between investment now and investment in the 1970s : in those days , investment was directed by bureaucrats and politicians into low - grade , dossed - out , state - run industries , but investment nowadays is in high - grade , exportable manufactures .\n", + ">> 1988-11-14a.732.6 0.582 I am grateful to my hon Friend . I can tell him that 110 schemes have been set up and that 102,000 individuals have taken out personal pensions . If my hon Friend would like to look at the Financial Times of 31 October , he will see a report which says that the figure from a straw poll of life companies , shows … the personal pensions market was extremely buoyant in its first three months .\n", + ">> 2010-01-11c.392.1 0.588 Our bilateral relationship with the United States is , as the hon Gentleman said , the most important security and defence relationship that we have and will stay that way for the foreseeable future . However , no serious people in the US expect us to do anything other than build good working relationships with our European neighbours and the European Union . They see that as a positive thing , so there is no competition in that regard , as some people appear to think there is or should be .\n", + ">> 1991-06-06a.390.9 0.589 I can tell my hon Friend the Member for Surbiton ( Mr. Tracey ) , whose question I welcome , that under a Conservative Government there is no possibility whatever of any amnesty ever being declared for anyone who breaks the law . Rather than people waving banners outside Wandsworth prison , perhaps one day we shall see outside magistrates courts ordinary decent people who pay their community charge waving banners that say , \" Those who can pay , should pay . \"\n", + ">> 1987-07-21a.199.0 0.594 The hon Gentleman asks me to deliberate between my right hon Friend the Secretary of State for the Environment and my right hon and learned Friend the Chancellor of the Duchy of Lancaster . Section 35 of the Race Relations Act 1976 , to which my right hon and learned Friend referred , deals with the restriction applied to members of a particular racial group , of access to education , training and welfare on the ground that that restriction fulfills a special need for improvement in those respects . That in no way contradicts what my right hon Friend the Secretary of State for the Environment said . On the hon Gentleman 's second point , he knows that the south London business initiative and the north Peckham task force and other agencies of my Department are doing their best to help in his constituency .\n", + ">> 1996-06-20a.988.5 0.599 I am aware of that , and I am sympathetic to the investment made by abattoirs across the country , many of which are seeking higher standards and the EU mark to enable them to export . That export market has now , unfairly , been denied to them . My hon Friend will have heard the answer given by my right hon and learned Friend the Minister when he explained how those abattoirs have been selected for the 30-month cull scheme . I must tell my hon Friend that one of the encouraging things is that the British consumer is still eating beef . We can see in the supermarkets that there is still support in the United Kingdom for the consumption of beef . Therefore , there is an opportunity for all slaughterhouses to slaughter for consumption . Despite the importance of the cull scheme , we must not lose sight of the fact that abattoirs are still slaughtering for consumption , and that is the most important aspect .\n", "\n", "====\n", "\n", "CLUSTER 3 3\n", "---\n", "terms\n", - " cluster_dist\n", - "index \n", - "do_what 0.494729\n", - "do_can 0.536450\n", - "do_help 0.539715\n", - "take_what 0.550735\n", - "work_with 0.554005\n", - "work_will 0.555667\n", - "doing_are 0.573649\n", - "work_* 0.574394\n", - "doing_* 0.596905\n", - "do_* 0.598807\n", + " cluster_dist\n", + "index \n", + "agree_is 0.181025\n", + "agree_be 0.189122\n", + "agree_are 0.260053\n", + "agree_with 0.268076\n", + "agree_also 0.310908\n", + "agree_have 0.316698\n", + "agree_further 0.362442\n", + "is_agree 0.404585\n", + "agree_need 0.454182\n", + "be_agree 0.468914\n", "\n", "context terms\n", - " cluster_dist\n", - "index \n", - "raises_* 0.636251\n", - "am_pleased 0.673346\n", - "with_* 0.695410\n", - "makes_* 0.700331\n", - "through>* 0.728352\n", - "are_keen 0.743943\n", - "are_determined 0.753761\n", - "had_recently 0.777395\n", - "thank_for 0.784145\n", - "are_yet 0.784944\n", + " cluster_dist\n", + "index \n", + "agree_certainly 0.314437\n", + "agree_is 0.324106\n", + "agree_however 0.328711\n", + "agree_be 0.333174\n", + "agree_* 0.340822\n", + "agree_will 0.342947\n", + "agree_also 0.346806\n", + "agree_with 0.347905\n", + "agree_have 0.349221\n", + "agree_absolutely 0.350800\n", "\n", "\n", "utterances\n", - "> 2012-03-01a.410.1 0.393 In Kent , a lot of our water comes from an underground chalk aquifer . What is its long - term sustainability , and what can the public and local businesses do to help ?\n", - "> 2011-03-31d.515.6 0.396 I am very lucky to have many successful manufacturing businesses in my constituency , and I am always one to talk up our manufacturing expertise , whether it is David Brown Engineering in Lockwood , Thornton and Ross pharmaceuticals in Linthwaite , Equi - Trek horseboxes in Meltham or any one of many others . However , some of my smaller businesses are still reporting problems with bank lending . How aware is the ministerial team of this problem , and what can we do to help such businesses to achieve multimillion pound turnovers ?\n", - "> 2013-05-15b.626.6 0.407 As well as reducing corporation tax , what else can the Government do to help small businesses in Wales ?\n", - "> 2008-11-18b.115.2 0.408 Can the Minister do more as a matter of urgency to help local authorities and even housing associations to buy up unsaleable flats and other developments for social housing ? That would help the economy , the housing market , which needs a lot of help at the moment , and our constituents who need social housing .\n", - "> 2011-01-10b.7.0 0.412 I thank the Minister for her response and commend the work she is doing in this field . Voluntary organisations in my borough of Bexley are very keen to assist the disabled into work and many are already doing so . What more can the Government do to help utilise the talent and skills of disabled people in the work force ?\n", - "> 2014-04-03a.993.6 0.416 My constituent , Mr Davis , has late onset spina bifida . He needs a wide range of electrical equipment just to live his daily life , including an electric bed and wheelchair , and machines to keep his legs from swelling . Because Mr Davis has an occupational pension and is not in receipt of means - tested benefit , he can not get any of EDF ’s energy - efficient schemes or special tariffs . As a result , he pays £ 250 a month for electricity . After this week ’s Work and Pensions Committee report criticising the Government for targeting disabled people , what can the Minister do to help Mr Davis ?\n", - "> 2007-10-09b.158.2 0.417 To follow up on the points that colleagues have made about the importance of the economy of Palestine , does my hon Friend recognise that the Balls and Cunliffe report made it clear that there is high and growing unemployment among the Palestinian people and that that is increasingly speedily making the situation worse ? What can the British Government do to help to tackle that crisis ?\n", - "> 2005-11-01b.720.0 0.419 I know that my right hon Friend has concerns about Zimbabwe , but the big issue is what role the African nations can play . What role is our new high commissioner playing in trying to persuade South Africa to use some sanctions , which is what it will take if we are to break the evil regime of Mugabe ? What else can we do , and what role is our high commission playing ?\n", - "> 2007-03-27d.1296.6 0.420 My constituents want to know that they have a Government who are on their side , helping people who are working hard on limited incomes to get on in life . What more can the Government do to help people earning perhaps £ 10,000 or £ 12,000 a year who are keen to start a family , but want to wait until they have got on the housing ladder and can buy or rent a home of their own ?\n", - "> 2010-10-19a.792.3 0.423 Are my right hon and hon Friends aware of the devastating consequences , particularly for victims of domestic violence , of the decision taken by the Legal Services Commission to halve the number of legal aid providers ? In the whole of my constituency of South Northamptonshire we have only one small firm specialising in domestic violence legal aid cases , yet it has just been told that its licence will be revoked . Can Ministers do anything to help my constituents ?\n", + "> 1981-02-03a.140.1 0.144 Does the Minister agree that a large proportion of the increases in supplementary benefits is due to the rise in the number of unemployed ? Is it not the case that the real value of the flat - rate benefits has been cut and that the projections include the abolition of the earnings related supplement ? Does she agree that it is a disgrace that people are being subjected to the indignity of means - tested benefits , which will be more expensive for the Government ? Does she agree that it would be better to restore the flat rate benefits and stop the abolition of the earnings - related supplement ?\n", + "> 2000-05-02a.10.7 0.153 With that answer the Minister confirms that postcoding exists when it comes to this form of treatment . Does she agree that that is unfair on a couple in my constituency—hence my question—who are being deprived of the service , whereas if they lived in another part of the country , it would be available to them ? Surely the Government should insist on fairness throughout the country . We must end postcoding .\n", + "> 1995-11-21a.449.0 0.157 Does my hon Friend agree that it is important to protect small businesses from local authorities such as Labour - controlled Lancashire county council , which is interested only in spending money and not in the level of services that it provides ? Does he agree that it is important for us to look at extra ways of helping to protect small rural businesses from the unified business rate ? Does he agree that the announcement in the rural White Paper will be extremely important for those small rural businesses ?\n", + "> 1994-05-04a.720.1 0.158 Does my hon Friend agree that , having pressed those countries to shake off the shackles of communism , it would be negligent if we were then to deny them the benefits of free trade ? Does he agree with me that free trade and democracy are not only the guarantees of peace but the best means by which those countries can qualify for membership of the Community in the future ?\n", + "> 1992-02-25a.800.3 0.158 Does the Minister agree that life - long education is a right , not a privilege , and that it should not be any less of a right just because a person happens to be disabled ? Is the Minister aware that many disabled people are concerned that their rights will be reduced if further education colleges are taken out of local authority control ? Does the Minister agree with the almost unanimous view of the disability lobby that the best way to protect the rights of disabled people would be to introduce anti - discrimination legislation now ?\n", + "> 2004-11-29a.340.2 0.158 My right hon Friend will be aware that emotions are running high in Scotland over the role of Scottish regiments in Iraq , so does he agree that it is highly irresponsible for political parties , such as the Scottish National party , to describe , as it does , the British flag as the butcher 's apron , thereby implying that our soldiers are butchers ? Does he agree that an apology should be forthcoming from the leadership of the Scottish National party ?\n", + "> 2007-02-22c.404.6 0.158 I thank the Minister for that reply . Does she agree with her colleague the Minister for Children and Families that all parents should have the right to request flexible working ? Indeed , given that there are so many reasons other than caring responsibilities for people wanting to manage their work - life balance differently , does she agree that there would be benefits for all of society if the right were extended to everyone ?\n", + "> 2016-03-23a.1560.5 0.167 Does the Minister agree that it would be bad news for Scotland if it became the highest taxed part of the United Kingdom ? Does he agree with Ruth Davidson MSP that Scottish taxpayers should not have to pay any more in tax than fellow Britons in England , Wales and Northern Ireland ?\n", + "> 1980-03-13a.1545.3 0.168 Does my hon Friend agree that the pharmaceutical and chemical industries are two of the most honest , straightforward and genuine industries ? Hon Members may laugh but they are serious industries . Does my hon Friend agree that it will be a sad day for the House and the country when reactions are based on rumours ? Does he agree that it is wiser for the House to listen to the considered opinion of those who investigate such matters in depth ?\n", + "> 1986-05-13a.550.10 0.169 Does my right hon Friend agree that , as defence costs rise , there will inevitably in due course be a need to review commitments ? If commitments are to be reviewed , does he agree that that which is least consistent with fair burden - sharing among the NATO allies is the maintenance of 55,000 troops and a tactical air force in Germany ?\n", "\n", "context-utterances\n", - ">> 2007-06-26b.151.7 0.596 My hon Friend raises an important point . The NHS keeps detailed records on every patient who is subjected to compulsory treatment of whatever kind , but she is absolutely right to say that , as we give patients access to psychological therapies often at a much earlier stage in the development of mental health problems , it is likely—this would be of great benefit to those patients and their families—that we can avoid the need for more acute treatment , and particularly compulsory treatment , further down the line .\n", - ">> 1988-11-29a.561.4 0.628 My hon Friend is right . We are concerned about what should be happening in NATO. Through a United Kingdom initiative , NATO has embarked on a study of both supply and demand , which we hope will enable us to assess the requirement accurately .\n", - ">> 2008-01-24b.1614.4 0.628 My hon Friend should be assured that the interim Poynter review has already identified some of those issues . The management of HMRC are working to establish data security while the review is ongoing . We await the final findings , which will deal with those issues in more detail . I can assure my hon Friend that I shall take on board all his points , which are fair , and that we will make changes to structures and systems in order to ensure that the highest standards can be guaranteed in future .\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - ">> 2000-11-23a.424.0 0.630 I thank my hon Friend for his question . He is a staunch advocate of the new deal in his constituency , which has helped employment to rise and unemployment to fall there . We are deeply concerned about the fact that in his and surrounding constituencies , about 6,000 people are facing redundancy . Through the rapid response unit and the new deal for 50-plus , we have to send the message that if people lose their job at 50 , their working life is not over .\n", - ">> 2010-11-11b.419.5 0.641 The hon Gentleman makes some very good points . I am pleased to tell him that the Minister of State , Department of Energy and Climate Change , my hon Friend the Member for Wealden ( Charles Hendry ) , had an excellent meeting with members of the Northern Irish Government yesterday . We are determined that the whole United Kingdom should be able to share the benefits and the investment involved in the transition to a green , low - carbon economy .\n", - ">> 2009-11-24e.385.2 0.646 My hon Friend raises with me an issue that I am happy to discuss with her at a later date .\n", - ">> 2006-06-05b.11.1 0.650 The hon Gentleman raises an important point . We estimate that , when switchover is complete , 98.5 per cent . of the country will be able to receive digital television services . As he will know , that is roughly comparable with the number of people who can receive analogue services and we expect the 1.5 per cent . who can not broadly to map each other , although it will not be exactly the same . We will need to address the issue of those who will not be able to receive pictures in 2012 . We are conscious of that and working on it now . It is a significant number of people . It is worth bearing it in mind , though , that 1.5 per cent . of the country does not receive television pictures . We need to improve on that and undoubtedly technology will help us in that process . We are determined to work with the hon Gentleman and other hon Members who may have constituents who do not receive analogue pictures so that we can bring everything we know and the technology to bear to help every c\n", - ">> 2002-03-21.431.0 0.651 My hon Friend makes an important point . My hon Friend the Minister of State , Cabinet Office , and I have been organising meetings and seminars around the country that are designed to encourage women from a variety of backgrounds to think about possible public appointments for which their skills in the family , in their local neighbourhoods and in voluntary organisations have made them well fitted . I am pleased to say that that programme of seminars has been such a success in attracting women to apply for public appointments that I shall do three more meetings targeted at women from the black and Asian community , women from business and women from trade unions .\n", - ">> 1998-03-05a.1189.0 0.653 I know that the Home Office will look at the Law Commission report and take it into consideration in its work . My hon Friend can be assured that the Government are determined to combat bribery , wherever and whenever it may occur . The United Kingdom 's anti - corruption legislation is among the most comprehensive in the world and we are working within the Organisation for Economic Co - operation and Development and the European Union to ensure that our major overseas competitors enact similar legislation . On the other matter raised by my hon Friend , it is for the company concerned to decide whom it wishes to employ .\n", - ">> 2012-01-17b.611.2 0.656 My hon Friend is quite right to raise this matter . We have highlighted to our posts around the world the key commitments in the human trafficking strategy that they can help to deliver . Those include engaging with foreign Governments to ensure that common challenges are identified , and encouraging them to work with us to address those challenges . We have asked each of our posts to identify a single point of contact on human trafficking , and we are working in consultation with colleagues across government and with non - governmental organisations to bring together all the work that is already going on , including on the specific local challenges in each country . He can therefore be assured that our posts across the world are working hard on this .\n", + ">> 1985-01-17a.499.3 0.191 I agree with everything that my hon Friend has said . Indeed , the NFU 's \" Send a million tonnes of wheat to Africa \" campaign is to be warmly welcomed . With regard to my hon Friend 's first point , it is certainly true that surpluses can erode quite rapidly in very bad years . Nevertheless , we face a substantial surplus this year . The important point about food aid or any cereal exports is that it is cheaper to export direct from the open market than through intervention . That is a very important point in connection with our policy on intervention .\n", + ">> 2002-07-23.843.3 0.202 I understand and agree with my hon Friend 's desire for a much stronger external policy for the European Union . It is important , however , that , in the absence of that , we all make every effort to try to crack this problem . The Danish presidency is seized of the need to engage on this matter , and the European Commission is in weekly discussion on Kaliningrad on behalf of the whole of Europe .\n", + ">> 1990-07-10a.162.8 0.203 I entirely agree with my hon Friend . What is more , our new policy for grant - maintained status is proving popular . The number of grant - maintained schools in operation this coming September will be double that of last September . It is clear that parents are opting for grant - maintained schools as applications for places are up by 40 per cent . , so it is also clear that parents , governors , head teachers and teachers like grant - maintained schools . Only the Opposition reject that extended opportunity for parental choice . I suspect that , as with so many of their other policies , they will think again in due course .\n", + ">> 1991-01-29a.776.6 0.205 I agree with my hon Friend . It is important to take advantage of the situation , even though it is rather grave on the tourism front because of the impact of the Gulf war . The promotional efforts to which he referred are important and there is a real challenge to encourage home tourists to make more use of facilities here . The timing of the promotion is of the essence , but it is for the industry , in conjunction with the British tourist authorities , to decide how to do it .\n", + ">> 2002-04-10.18.0 0.212 My hon Friend 's point is right . Saddam Hussein is in defiance of the resolutions with which he should comply . However , he has the opportunity to comply with them now . He is not in doubt about what is necessary . The United Nations resolutions are clear ; there are nine and he is in breach of every one . The international community 's position is also clear . Whatever people think about the action that will follow , he must comply with the resolutions . To that extent , I entirely agree with my hon Friend .\n", + ">> 1996-11-28a.447.2 0.214 I agree entirely . Even when the other continental countries achieve better rates of economic growth , their experience tends to be that that growth does not create jobs as it does in this country . That is because they are over - regulated , they have inflexible labour markets and the costs of employment are far too high . It is therefore extremely important that we should repudiate the social chapter . That sentiment is shared by large numbers of German , French , Dutch and other industrialists . It is quite extraordinary that the British Labour party continues to advocate a turn towards that approach to employment , when the business community in the rest of the continent is hoping to get away from it .\n", + ">> 1986-10-22a.1164.4 0.214 I agree that it would be desirable to make a statement . However , it is open to the EIS to determine its timetable in the light of the information that it feels it needs to know before deciding on the recommendation to make to its members .\n", + ">> 1985-12-05a.412.8 0.216 The hon Gentleman seems to suppose that I send people to prison . I do not send people to prison . The courts send people to prison , having listened to the evidence . For serious cases it is right that there should be serious sentences , which often means custodial sentences . I agree with the hon Gentleman to the extent that for the less serious cases the courts should look carefully at alternatives before awarding custodial sentences .\n", + ">> 1989-05-10a.857.1 0.217 I agree with both my hon Friend 's points . In particular , on his latter point , it is surely right that we in the United Kingdom and the EC should try to establish trading and other relations with the countries that are making progress and respond to that progress as it develops .\n", + ">> 1987-11-10a.148.5 0.222 I agree with the hon Gentleman 's second point . As for his first question , the objective of all the negotiations and of the agreement that we very much hope is about to be signed is to reduce the number of nuclear warheads in Europe . I am convinced that the agreement will achieve that aim . When that has happened we shall have to make sure that our remaining armaments are credible and that they hold together as a coherent weapons system .\n", "\n", "====\n", "\n", "CLUSTER 4 4\n", "---\n", "terms\n", - " cluster_dist\n", - "index \n", - "is_not 0.340599\n", - "think_* 0.440641\n", - "think_does 0.480421\n", - "does>not 0.480930\n", - "believe_* 0.511179\n", - "believe_does 0.528576\n", - "think_not 0.572628\n", - "has>not 0.582164\n", - "would>not 0.605298\n", - "should>* 0.608125\n", + " cluster_dist\n", + "index \n", + "do_what 0.510104\n", + "do_help 0.542297\n", + "do_can 0.549668\n", + "take_what 0.558956\n", + "work_with 0.559757\n", + "work_will 0.560180\n", + "doing_are 0.581044\n", + "work_* 0.582551\n", + "doing_* 0.603983\n", + "have_what 0.604028\n", "\n", "context terms\n", - " cluster_dist\n", - "index \n", - "is_for 0.520541\n", - "is_therefore 0.525952\n", - "is_extraordinary 0.533678\n", - "therefore>* 0.562317\n", - "is_surely 0.565929\n", - "is_not 0.576556\n", - "is_on 0.592949\n", - "is_in 0.594222\n", - "has_* 0.610643\n", - "suppose_* 0.621963\n", + " cluster_dist\n", + "index \n", + "raises_* 0.642016\n", + "am_pleased 0.686334\n", + "with_* 0.708684\n", + "makes_* 0.722158\n", + "through>* 0.729139\n", + "are_determined 0.756542\n", + "are_keen 0.757121\n", + "continuing_are 0.780108\n", + "are_yet 0.783221\n", + "had_recently 0.786321\n", "\n", "\n", "utterances\n", - "> 1984-06-11a.633.4 0.316 Is the Leader of the House aware that May day was instituted 96 years ago to celebrate the first international strike for the eight - hour day ? Does not the right hon Gentleman think it ironic that , 96 years after that first real May day , the average number of working hours in industry in Britain is still 42·6 ? Will he transmit that to the Select Committee ?\n", - "> 1984-11-14a.665.13 0.325 Does the Minister agree that the case of the British Government—and , indeed , of the British people — would be a good deal stronger if social and economic conditions in the islands were nearer the norms of 1984 than those of 1784 ? Is it not a fact that the principal proprietor and factor in the Falkland Islands is one company , whose profits go to absentee shareholders ? Is it not also a fact that Lord Shackleton some years ago reported that the land should be made available to the Falkland Islanders ? Why are the Government not pursuing that aim more vigorously ?\n", - "> 1993-05-05a.174.1 0.326 The hon Member for Billericay ( Mrs. Gorman ) could learn more from her area . I have a letter in front of me from a demoralised head teacher in that area , who is complaining about the Government 's interference , is weary of being blamed for everything , including the moral decline of society . He states unequivocally that the people responsible are those who have been in power for the past 14 years . Does not the Minister think that the hon Lady could learn from Scottish education , not least over testing , where changes to the national curriculum in England and Wales followed a successful campaign by parents and teachers in Scotland ? Does he agree that comprehensive education has resulted in increased standards and qualifications in Scotland and that such a system , which does not reject 80 per cent . of our young people at a tender age , is good for the aspirations and talents of young people and for Scottish society ? Does not the hon Lady have a lot to learn from Scottish socie\n", - "> 1990-04-19a.1550.0 0.329 Will the Prime Minister confirm that in addition to financial matters , she and the Foreign Secretary will discuss the Belgian proposals for European union with other Ministers from the Common Market when they meet in Dublin over the next two weekends ? Does she agree that these issues render the prerogative an increasingly outdated idea , and accordingly , will she tell Mr. Haughey when she meets him tomorrow that she is not prepared to give any view on , still less any commitment to , that paper unless it has been debated in this House ? Does not she think that anything less than that represents an unacceptable democratic deficit in the United Kingdom ?\n", - "> 2009-01-13c.117.3 0.329 Does the hon Gentleman not think it ironic that the present Israeli Government were elected on a programme of withdrawing settlements and negotiating a twin - state arrangement independently , and have shown evidence of that purpose by withdrawing from Gaza and removing their own settlements from the area ? Are not the present circumstances therefore primarily the responsibility of Hamas , which failed to take up the offers made by the Israeli Government , but continued its programme of rocketing civilians ?\n", - "> 1990-04-18a.1407.8 0.333 Does not that welcome answer show that the standards and quality of British manufacturing are very high ? Is not that why we sell so well to countries such as Japan ? Is it true that the British kitemark on British products is taken as a symbol of that quality ? Would not those who are trying to export to Japan be well advised to have the kitemark on their products because people recognise it throughout the world ?\n", - "> 2000-03-09a.1175.3 0.338 Does the Chief Secretary recall that his former hon Friend , the hon Member for Brent , East ( Mr. Livingstone ) , said : We have n't increased the top rate of tax or the standard rate of tax , but we have increased a lot of other taxes … we have done it with all these stealth taxes . I just think it would have been better to have honestly told people beforehand ? Is not the truth of the matter that the Prime Minister told the British people at the general election that he would not increase taxes ? He has increased taxes and every person in this Chamber is paying at least £ 1,500 more in tax than they were at the last general election . His candidate is 55 points behind the independent candidate for mayor because people are fed up with these lies ; they want some truth .\n", - "> 1982-12-01a.252.6 0.339 Is my right hon Friend aware that previous Governments allowed British Rail to finance by leasing using private sector finance—for example , for its locomotive programme ? Is it not time that both British Rail and the Government adopted a far more determined approach to the harnessing of private sector resources and initiatives in developing British Rail investment ?\n", - "> 1990-11-21a.286.3 0.340 Is not there something sickening about a Minister who ensures that his own family are properly housed but shows such callous disregard for the misery caused by homelessness and by dampness and overcrowding in housing ? Those problems are a direct result of the cuts that the Government have imposed on housing in the past 10 years . Is not it true that total expenditure by central Government for local government housing has been cut by more than 50 per cent ? Is not it also true that the Minister voted for his right hon Friend the Member for Henley ( Mr. Heseltine ) ? If so , does he agree with his right hon Friend that a much more interventionist policy should be pursued in terms of housing ?\n", - "> 1981-05-20a.280.3 0.341 As the Council does not keep a record of the time spent discussing certain subjects , does the Lord Privy Seal agree that the time spent by the House on receiving statements from Ministers returning from Council meetings has been reduced in recent weeks , and months ? Does not he think that the previous practice should be restored ?\n", + "> 2012-03-01a.410.1 0.407 In Kent , a lot of our water comes from an underground chalk aquifer . What is its long - term sustainability , and what can the public and local businesses do to help ?\n", + "> 2011-03-31d.515.6 0.409 I am very lucky to have many successful manufacturing businesses in my constituency , and I am always one to talk up our manufacturing expertise , whether it is David Brown Engineering in Lockwood , Thornton and Ross pharmaceuticals in Linthwaite , Equi - Trek horseboxes in Meltham or any one of many others . However , some of my smaller businesses are still reporting problems with bank lending . How aware is the ministerial team of this problem , and what can we do to help such businesses to achieve multimillion pound turnovers ?\n", + "> 2008-11-18b.115.2 0.420 Can the Minister do more as a matter of urgency to help local authorities and even housing associations to buy up unsaleable flats and other developments for social housing ? That would help the economy , the housing market , which needs a lot of help at the moment , and our constituents who need social housing .\n", + "> 2013-05-15b.626.6 0.425 As well as reducing corporation tax , what else can the Government do to help small businesses in Wales ?\n", + "> 2011-01-10b.7.0 0.428 I thank the Minister for her response and commend the work she is doing in this field . Voluntary organisations in my borough of Bexley are very keen to assist the disabled into work and many are already doing so . What more can the Government do to help utilise the talent and skills of disabled people in the work force ?\n", + "> 2005-11-01b.720.0 0.433 I know that my right hon Friend has concerns about Zimbabwe , but the big issue is what role the African nations can play . What role is our new high commissioner playing in trying to persuade South Africa to use some sanctions , which is what it will take if we are to break the evil regime of Mugabe ? What else can we do , and what role is our high commission playing ?\n", + "> 2010-10-19a.792.3 0.433 Are my right hon and hon Friends aware of the devastating consequences , particularly for victims of domestic violence , of the decision taken by the Legal Services Commission to halve the number of legal aid providers ? In the whole of my constituency of South Northamptonshire we have only one small firm specialising in domestic violence legal aid cases , yet it has just been told that its licence will be revoked . Can Ministers do anything to help my constituents ?\n", + "> 2014-04-03a.993.6 0.434 My constituent , Mr Davis , has late onset spina bifida . He needs a wide range of electrical equipment just to live his daily life , including an electric bed and wheelchair , and machines to keep his legs from swelling . Because Mr Davis has an occupational pension and is not in receipt of means - tested benefit , he can not get any of EDF ’s energy - efficient schemes or special tariffs . As a result , he pays £ 250 a month for electricity . After this week ’s Work and Pensions Committee report criticising the Government for targeting disabled people , what can the Minister do to help Mr Davis ?\n", + "> 2007-10-09b.158.2 0.434 To follow up on the points that colleagues have made about the importance of the economy of Palestine , does my hon Friend recognise that the Balls and Cunliffe report made it clear that there is high and growing unemployment among the Palestinian people and that that is increasingly speedily making the situation worse ? What can the British Government do to help to tackle that crisis ?\n", + "> 2007-03-27d.1296.6 0.438 My constituents want to know that they have a Government who are on their side , helping people who are working hard on limited incomes to get on in life . What more can the Government do to help people earning perhaps £ 10,000 or £ 12,000 a year who are keen to start a family , but want to wait until they have got on the housing ladder and can buy or rent a home of their own ?\n", "\n", "context-utterances\n", - ">> 2002-03-12.754.7 0.413 Surely the important point is that the policy review , as reported in the press , reiterated the United States ' commitment to a \" no first use \" policy . It also indicated that America was seeking to reduce the number of its nuclear missiles from 6,000 to 2,000 . The message that my hon Friend and other Members surely should convey is that we want North Korea to engage with , to talk to and to open up to the rest of the world . That is the view of South Korea , Japan and China , and , I believe , of the United States—and certainly of Her Majesty 's Government .\n", - ">> 1981-06-15a.724.0 0.444 With respect to my hon Friend , that is not so . The Commission believes that it is in everyone 's interests that the final report of the consultants , which has already been delayed for a considerable period , and which will take twice as long to be presented as was expected , should be expedited .\n", - ">> 1989-01-17a.140.7 0.448 My right hon Friend the Secretary of State said just now that 76 per cent . of the country 's YTS leavers go into jobs or further education . That percentage is exactly the same in Stevenage , although , in Stevenage a slightly higher proportion of YTS leavers go into jobs and a slightly lower proportion into further education .\n", - ">> 1999-07-15a.548.0 0.451 I wonder where the hon Gentleman has been . Of course there is a challenge in global competitiveness , but where was he when we boosted the science , engineering and technology budget by £ 1.4 billion to underpin basic research ? We have £ 25 million for the science enterprise challenge and £ 20 million for the reach out fund , as well as funds for the SMART schemes and the foresight - link awards to foster engineering . We believe that we will address the shortfall not by doing things for industry , but by putting in schemes to underpin the innovative approach to competitiveness to ensure that our engineers make world - class products and can win their way forward .\n", - ">> 1994-12-14a.922.1 0.462 But that is to argue that existing frontiers can be disregarded and that international law can be flouted by armed aggression . If one were to follow what the right hon Gentleman has suggested , one would begin to see the entirety of the former Soviet Union , and probably much of central and eastern Europe , dissolve into conflict . That is not something that he or I want , and it is important to go on asserting that existing frontiers must be respected unless altered with the genuine consent of all relevant parties .\n", - ">> 2015-03-10a.147.7 0.464 It is extraordinary . I wonder if the hon Gentleman would like to admit that every Labour Government when they leave office leave unemployment higher than when they came in . That is the truth of the matter . The Government are sorting out the mess left by the Labour Government , which was the worst financial crisis in British peacetime .\n", - ">> 1992-06-08a.3.5 0.469 The hon Gentleman would have been frank with the House had he informed it that the inspector in that case overturned the decision and made the award that the hon Gentleman wanted . That shows that our system for reviewing such cases works . The hon Gentleman would have far more cause to complain if inspectors invariably upheld original decisions rather than put them right—as in this case .\n", - ">> 2007-02-20b.142.1 0.470 This is a very easy assumption to make , but if we are to take on what President Karzai has himself described as the single most corrosive element in Afghan society—the corruption , killing and subjugation generated by the narcotics trade—this issue has to be dealt with . It is not a simple fight involving just hearts and minds . For example , more than 3,000 men have been lost on the eastern border of Iran combating drug convoys armed with anti - aircraft missiles that are bringing heroin to Europe . This industry generates huge sums of money that is used in the most nefarious ways , so it has to be tackled in every way open to us , including through military activity .\n", - ">> 1987-12-07a.11.0 0.470 When the right hon Gentleman was a senior member of the Labour Government , the Health Service stumbled to its knees . Does he really call it a fake figure , when nurses ' pay fell by over 21 per cent . when he was a Minister ? Is that the way to run the National Health Service ?\n", - ">> 1996-12-18a.938.5 0.472 I am surprised at the hon Gentleman . In view of the nonsense that we have just heard from the Opposition Front Bench , surely he is not asking us to go ahead with stock transfers that do not give value for money . That was the basis on which the other bidders were ruled out , and each of them has had the chance to rebid . Does the hon Gentleman genuinely think that we should go to the National Audit Office and say that we will accept any bid , regardless of value for money ? The Paragon housing association has no greater access to information than any of the other bidders , as the hon Gentleman knows full well .\n", + ">> 2007-06-26b.151.7 0.609 My hon Friend raises an important point . The NHS keeps detailed records on every patient who is subjected to compulsory treatment of whatever kind , but she is absolutely right to say that , as we give patients access to psychological therapies often at a much earlier stage in the development of mental health problems , it is likely—this would be of great benefit to those patients and their families—that we can avoid the need for more acute treatment , and particularly compulsory treatment , further down the line .\n", + ">> 1988-11-29a.561.4 0.632 My hon Friend is right . We are concerned about what should be happening in NATO. Through a United Kingdom initiative , NATO has embarked on a study of both supply and demand , which we hope will enable us to assess the requirement accurately .\n", + ">> 2008-01-24b.1614.4 0.632 My hon Friend should be assured that the interim Poynter review has already identified some of those issues . The management of HMRC are working to establish data security while the review is ongoing . We await the final findings , which will deal with those issues in more detail . I can assure my hon Friend that I shall take on board all his points , which are fair , and that we will make changes to structures and systems in order to ensure that the highest standards can be guaranteed in future .\n", + ">> 2000-11-23a.424.0 0.645 I thank my hon Friend for his question . He is a staunch advocate of the new deal in his constituency , which has helped employment to rise and unemployment to fall there . We are deeply concerned about the fact that in his and surrounding constituencies , about 6,000 people are facing redundancy . Through the rapid response unit and the new deal for 50-plus , we have to send the message that if people lose their job at 50 , their working life is not over .\n", + ">> 2006-06-05b.11.1 0.650 The hon Gentleman raises an important point . We estimate that , when switchover is complete , 98.5 per cent . of the country will be able to receive digital television services . As he will know , that is roughly comparable with the number of people who can receive analogue services and we expect the 1.5 per cent . who can not broadly to map each other , although it will not be exactly the same . We will need to address the issue of those who will not be able to receive pictures in 2012 . We are conscious of that and working on it now . It is a significant number of people . It is worth bearing it in mind , though , that 1.5 per cent . of the country does not receive television pictures . We need to improve on that and undoubtedly technology will help us in that process . We are determined to work with the hon Gentleman and other hon Members who may have constituents who do not receive analogue pictures so that we can bring everything we know and the technology to bear to help every c\n", + ">> 1998-03-05a.1189.0 0.651 I know that the Home Office will look at the Law Commission report and take it into consideration in its work . My hon Friend can be assured that the Government are determined to combat bribery , wherever and whenever it may occur . The United Kingdom 's anti - corruption legislation is among the most comprehensive in the world and we are working within the Organisation for Economic Co - operation and Development and the European Union to ensure that our major overseas competitors enact similar legislation . On the other matter raised by my hon Friend , it is for the company concerned to decide whom it wishes to employ .\n", + ">> 2009-11-24e.385.2 0.652 My hon Friend raises with me an issue that I am happy to discuss with her at a later date .\n", + ">> 2010-11-11b.419.5 0.653 The hon Gentleman makes some very good points . I am pleased to tell him that the Minister of State , Department of Energy and Climate Change , my hon Friend the Member for Wealden ( Charles Hendry ) , had an excellent meeting with members of the Northern Irish Government yesterday . We are determined that the whole United Kingdom should be able to share the benefits and the investment involved in the transition to a green , low - carbon economy .\n", + ">> 2012-01-17b.611.2 0.656 My hon Friend is quite right to raise this matter . We have highlighted to our posts around the world the key commitments in the human trafficking strategy that they can help to deliver . Those include engaging with foreign Governments to ensure that common challenges are identified , and encouraging them to work with us to address those challenges . We have asked each of our posts to identify a single point of contact on human trafficking , and we are working in consultation with colleagues across government and with non - governmental organisations to bring together all the work that is already going on , including on the specific local challenges in each country . He can therefore be assured that our posts across the world are working hard on this .\n", + ">> 2003-06-09.395.0 0.657 One of the things I sensibly did , anticipating the question , was to check whether the Dundee call centre , which serves the hon Lady 's constituents , had had any problems with its telephony . I was assured that it had not . Indeed , the system was working very well and at least 94 per cent . of calls got through first time , which is a good record for any call centre , whether in the public or private sector . On personal access , I know that there are surgeries every Thursday at the A.K. Bell library in Perth , on the first Tuesday of the month at the Kinloch Rannoch medical practice , and on the last Wednesday of every month in Crieff library , as well as at Kinross - shire day centre in Kinross on the last Tuesday of every month . If the hon Lady or indeed other hon Members have suggestions as to how the surgery arrangements for constituents offered by the Pension Service can be improved , I and the Pension Service will be very pleased to consider them .\n", "\n", "====\n", "\n", "CLUSTER 5 5\n", "---\n", "terms\n", - " cluster_dist\n", - "index \n", - "give_* 0.456398\n", - "see_* 0.538979\n", - "give_can 0.543987\n", - "assure_will 0.548994\n", - "give_will 0.553678\n", - "assure_* 0.580302\n", - "have_* 0.584380\n", - "discuss_* 0.599421\n", - "reassure_* 0.610053\n", - "given>* 0.624857\n", + " cluster_dist\n", + "index \n", + "is_not 0.446276\n", + "why>does 0.515228\n", + "think_does 0.534604\n", + "think_* 0.538671\n", + "believe_* 0.560391\n", + "does>not 0.570308\n", + "explain_is 0.576377\n", + "stop_* 0.582624\n", + "believe_does 0.591538\n", + "is_true 0.604974\n", "\n", "context terms\n", " cluster_dist\n", "index \n", - "understand_* 0.636752\n", - "assure_* 0.679695\n", - "when>* 0.683269\n", - "understand_fully 0.689111\n", - "am_concerned 0.692593\n", - "was_about 0.697184\n", - "understand_will 0.700170\n", - "am_satisfied 0.704546\n", - "assure_is 0.708241\n", - "have_might 0.720801\n", + "therefore>* 0.536575\n", + "is_therefore 0.551210\n", + "wonder_* 0.562381\n", + "surely>* 0.591958\n", + "is_on 0.636717\n", + "is_at 0.641183\n", + "is_suggest 0.642476\n", + "of>* 0.643083\n", + "is_extraordinary 0.644015\n", + "is_in 0.668729\n", "\n", "\n", "utterances\n", - "> 1992-06-30a.704.3 0.347 Can the Minister give us a guarantee that a contingency plan will be drawn up in the event of the Germans withdrawing from the EFA ? As my hon Friend the Member for Edinburgh , East ( Dr. Strang ) said , there could be job losses in the area that we represent and it is important for the next generation of technology that we go ahead with the project . May we have a guarantee from the Minister that we shall go ahead with it ?\n", - "> 2004-03-08.1228.3 0.350 I thank the Minister for that reply . I know that he shares my sadness about the regular reports of the behaviour of a significant number of professional footballers over the past year or so , but I want to be positive about the game . When he meets the football authorities will he use his influence to promote the idea of a John Charles fair play award at either national or European level ? The Minister , as a Sheffield United supporter , knows a bit about football . John Charles of Leeds United and Wales was never sent off or booked in his career . In many respects , he represents the age of innocence for our national game . What support can the Minister give to all those of us who want John Charles 's memory to be honoured properly ?\n", - "> 1994-03-08a.137.3 0.371 May I assure the House that that was not a planted question ? Can the Secretary of State give the House an assurance that the Government are not providing military training to any country that is in breach of any UN resolution , in particular to Indonesia which , as the Secretary of State will I am sure know from seeing the documentary \" Death of a Nation \" , has carried out a policy of genocide against the people of East Timor ?\n", - "> 1987-04-07a.157.6 0.385 Can the Minister give an assurance that the Government intend to maintain the appeals system in the benefits system ? Will he take account of the fact that there appears to be some pettifogging bureaucracy that is discouraging people from attending appeals tribunals on the side of the appellants ? Will he give a further assurance that he will investigate matters of this sort and see that those friends and other people who attend on behalf of appellants are encouraged , not discouraged ?\n", - "> 2014-06-17b.957.1 0.386 In view of the rapidly changing circumstances in Iraq , and in view of the fact that the President of the United States has changed his policy a little , may we have continuing reports on the developing situation instead of relying on Question Time or a statement from the Foreign Secretary ? I have had several e - mails in the past few days from women MPs in Iraq who are very concerned about their circumstances . What assurances can we give them ?\n", - "> 1985-03-19a.768.8 0.392 Bearing in mind the value of the new technology courses of the Open University in broadening the skills of our work force , what reassurance can my right hon Friend give that those courses will be continued , despite the drop in income ?\n", - "> 2008-07-17b.394.0 0.394 As Sir Michael makes no fewer than 92 recommendations , is the Secretary of State satisfied that the money that he has set aside will be sufficient to implement them ? Many hinge on better joint working between the various agencies , and a good job of work remains to be done in that regard . What assurances can he give the House about Sir Michael Pitt 's ongoing reporting to Parliament about the progress of the implementation of his practical recommendations—or will we just have to wait for the recriminations after the next deluge hits us ?\n", - "> 1988-11-29a.567.1 0.395 Will the Minister give us some assurance about collaboration on radar and tell us what is happening in relation to competition for that ? May we have some assurances that the radar contract will be given to a British company such as Ferranti , and its group , which is needed to keep us in the forefront of R and D and is essential for the future of radar in European and world terms ?\n", - "> 1995-02-23a.469.3 0.396 Is my hon Friend assuring the House that the directive is being uniformly introduced over the whole of Europe , and that it is being uniformly introduced in this country ? Bearing in mind the concern of my hon Friend the Member for Bridlington ( Mr. Townend ) , can my hon Friend give some assurance as to the way in which Members of Parliament will be advised in the future on problems with abattoirs in their constituencies ?\n", - "> 1985-01-21a.723.0 0.398 In view of the importance of communications , to which the Secretary of State referred , what assurances can he give to industrialists and others that the experience on the A55 between Llanfairfechan and Penmaenmawr , which was closed for large parts of last week by a landslide , will not be repeated ? Will he assure us that the Welsh Office will investigate the rumours circulating in the area that the landslides were started by drilling initiated by the Welsh Office ?\n", + "> 1996-10-15a.580.2 0.362 Will the Minister confirm that just 605 houses were started by local authorities in England last year ? As an example , in the north - west there are 14,000 homeless families , but not one house was started by local authorities in the north - west—not one house in Blackpool , Bolton , Bury , Oldham , Rochdale or Manchester . Does he not think that that is a disgrace ? Does he not realise that many local authorities have capital receipts ? That money should be invested in finding somewhere decent for homeless people .\n", + "> 1982-12-01a.259.4 0.367 Is not the low level of transport in rural areas , and generally , due to a lack of investment in transport by the Government , and is not the biggest restrictive practice in transport precisely that lack of proper investment by the Government ? When this matter is examined on a world scale , is not the United Kingdom among the lowest on the international list ? Is not the real reason for that the lack of proper rural transport ?\n", + "> 1985-06-26a.916.0 0.373 Why does the Minister persist in putting all the blame on Nicarague ? Would not our relations with Nicaragua and peace in Central America be significantly improved if the Government said categorically that they did not support the American policy of giving money to the Contras , and that they do not support President Reagan 's avowed aim of getting rid of the Sandinista Government by peaceful or other means ? Is that not the right policy for us ?\n", + "> 1980-06-04a.1422.0 0.374 Does not the process of charging for planning applications mean that , under the weird system which is proposed in the order , that the Minister has put before the House , it will take longer to determine the fee to be charged ? Is it not true that in certain circumstances the fee is miscalculated ? Is not the only decent and proper course open to the Minister for him to withdraw the order , stop the smokescreen about reviewing the position in six months ' time , admit that his officials have agreed that the order is defective and stop—if the report in The Guardian yesterday is right—blackmailing local authorities into making charges ?\n", + "> 1981-04-28a.641.1 0.376 Why is the Minister permitting the MSC 's employment division to lose 1,700 jobs and £ 80 million in the years ahead ? Does not that presage a decline in services for the unemployed who should have an increase in services ?\n", + "> 1990-01-11a.1081.2 0.377 Does the Minister agree that there is little value in reducing the salmonella content of British eggs if we allow salmonella to be imported wholesale ? Will he confirm the point made by my hon Friend the Member for South Shields ( Dr. Clark ) that salmonella has been found in imported Dutch eggs but that , by the time that tests reveal the presence of salmonella , the eggs have been distributed and are adorning the breakfast plates of Britain ? Why does the Minister not use the available EEC regulations on contaminated food and stop the distribution of imported eggs until they arc tested and cleared ?\n", + "> 1984-04-02a.646.6 0.378 Has not organisation at GCHQ been grossly undermined in the last few days with the introduction today of the polygraph ? Why does not the hon Gentleman withdraw that evil device and restore the rights of people at GCHQ to live by the loyalty that they have traditionally shown to the nation ?\n", + "> 1999-05-17a.622.1 0.381 Is it not the case that increasing demands for all library services , particularly IT , are being met with diminishing budgets because of pressure from other service areas ? Is it not also the case that book funds throughout the country are being raided to maintain libraries and keep them open ? Is there not a case for the right hon Gentleman to look to match the statutory duty with a specific standard spending assessment element for libraries which is directly related to the level of service provided ?\n", + "> 1988-02-04a.1149.3 0.387 Is not the equivalent of the set - aside scheme paying workers to watch lathes , brush them down and oil them ? When one puts aside all the jargon , is not the effect of the scheme that we are paying farmers £ 150 per acre to watch grass grow ?\n", + "> 1984-11-20a.142.8 0.388 Does the hon Gentleman realise that 1984 will see twice as many working days lost through industrial action as happened in the last year of the Labour Government , in 1978 ? In the years subsequent to 1978 we have had three pieces of industrial relations legislation from this Government . Does the hon Gentleman think that the number of lost working days is a sign that that legislation has failed or a sign of its success ? Are not this Government concerned with causing chaos in industrial relations ?\n", "\n", "context-utterances\n", - ">> 2011-04-26d.21.1 0.482 I am , of course , aware of these issues , which have been raised by colleagues on both sides of the House . At this stage , may I simply reiterate that the consultation team should consider the points that I know my hon Friend and others are making to it ? After the consultation team has fully reflected on all the points , I hope Members will be able to see that it has fully taken them into account in whatever proposals it brings forward .\n", - ">> 1998-07-01a.353.1 0.503 I am grateful to the hon Gentleman for the responsible attitude that he has taken in this matter and to his constituents for the restraint that they have shown . I fully understand , as do all hon Members , the concern at the prospect of having a paedophile housed in the local community , especially in a rural area such as Rutland . On the future role of Wing Grange , the essential point is that no released offenders will at any time be housed at Wing Grange or anywhere else if they present a risk to the public that can not be contained . Such arrangements will be kept under constant review . Much depends on the response of the individuals concerned , but perhaps I can give the hon Gentleman the assurance that , in any event , there is no question of groups of paedophiles being housed together at Wing Grange , nor of any one paedophile being housed there indefinitely . I can further assure him that Wing Grange will take only offenders whose risk can be properly managed there now and in\n", - ">> 1979-07-02a.880.4 0.503 I can understand that the hon Gentleman may not necessarily like a Conservative Budget , but a large number of the representative bodies that support the interests of small businesses—the CBI Small Firms Council , the Federation of Self - Employed and the Association of Independent Businesses—have all sent in comments to the Department of Industry saying that they thought the Budget was very welcome to small businesses . That is the opinion of those who represent small businesses , although I appreciate that the hon Gentleman may feel differently .\n", - ">> 1985-02-28a.449.1 0.524 That goes extremely wide of the question , but I understand the hon Gentleman 's point .\n", - ">> 2013-06-11b.139.10 0.542 I share the hon Gentleman ’s concerns about the way that NHS funding is allocated to different parts of the country . The allocation in my constituency is about the same as in his constituency , and I have long worried that things like age and rurality are not factored into the final amounts in the way that they need to be . However , in this case NHS England decided that if it was to follow precisely the ACRA recommendations , it would lead to higher growth for areas with better health outcomes and lower growth , or even cuts , for areas with less good outcomes , which it thought would be inconsistent with its responsibility to reduce health inequalities . That is why it is conducting a fundamental review , which it says it hopes will inform the next set of allocations for 2013 - 14 .\n", - ">> 1996-12-09a.14.1 0.544 The aid to South Africa and to other southern African countries is certainly not mutually exclusive . As my hon Friend knows from our conversations—I am aware of his interest in the subject—we give substantial bilateral aid to Africa . Indeed , three quarters of all bilateral aid goes to the poorest countries . Therefore , we are very well aware of the points that he has raised .\n", - ">> 1986-01-27a.635.0 0.545 I readily understand the wish of local residents and the hon Gentleman to know the time scale involved . I am satisfied that the Coal Board is doing everything that it can to minimise the nuisance . Work is progressing as quickly as possible to clear the bing as effectively as possible . I am aware that it is important to keep residents informed , and therefore I was pleased to hear from the area director this morning that he is making arrangements for a public meeting to be held as soon as possible , when experts will be in attendance to answer detailed questions .\n", - ">> 2013-11-12f.796.2 0.552 I can give my hon Friend an assurance that we will publish proposals for change in the new year , and they will include a replacement to Labour ’s Human Rights Act 1998 . I can also assure him that we , as a party , will publish a draft Bill later next year . Whether the coalition and this Parliament will choose to accept such a Bill , or whether it needs to wait for a majority Conservative Government , is something I suspect we will discover then .\n", - ">> 2007-12-06b.949.1 0.553 I understand the points that the hon Gentleman has made , and I know that he has taken a keen interest in these matters , not least in his constituency . However , I am sorry to say that it would be inappropriate for me to comment at this stage , when the Competition Commission has published only its preliminary findings and when there is an opportunity for those who participated in the inquiry to comment on their initial findings . I understand that the commission will report early in the new year , and when it has done so Ministers will give an appropriate response if recommendations are made to the Government .\n", - ">> 2007-11-29b.425.6 0.556 I was delighted to hear of the formation of Cashfields in my hon Friend 's constituency . I understand that it is relatively new and I wish it every success . Following the collapse of Farepak , more that 100 credit unions throughout the country now offer Christmas savings accounts , which is to be welcomed . I shall shortly be publishing the results of the Government 's financial inclusion action plan , which will include further measures to support the growth of credit unions .\n", + ">> 2008-11-06b.337.0 0.460 The simple reason why we are likely to have to apply for derogation under the new directive that gives member states the ability to apply for additional time is the existing problem that we have with PM10 and nitrogen dioxide , which , by definition , is nothing to do with any decision that may yet be taken about the expansion of Heathrow . That is a problem we have now . Therefore , the answer that I gave in May was completely accurate .\n", + ">> 1994-03-10a.385.0 0.479 I am sorry to disagree with my hon Friend . Of course , there are systems of parole whereby some people may be released before they have served their full sentence , but it is wrong for my hon Friend to suggest that in all cases of murder the offender will serve about 12 years . The advantage of the mandatory life sentence for murder , with discretionary release at the end , is that it can cover a great many gradations of murder . Some people will serve shorter sentences , but I repeat that some people who are sentenced for murder may never be released .\n", + ">> 1998-03-03a.847.4 0.487 Surely the hon Gentleman is aware that the Government are implementing the manifesto commitment to conduct a fundamental review of our roads programme ; to decide what role roads play in an integrated transport policy ; and to determine what criteria should be taken into account in choosing which roads to give priority to . In the business plan for its proposed PFI scheme , Dorset county council envisages signing the contract in 1999–2000 .\n", + ">> 1987-07-22a.354.6 0.490 The figure of 80 per cent . was the outside limit of a range from 80 to 95 per cent . The hon Gentleman is therefore mistaken in his assumption . The vast majority of people are law abiding , the Act is now the law of the land , and we can expect that most people will pay it .\n", + ">> 1989-07-06a.457.4 0.493 On the first point that the hon Gentleman has made , I have to tell him that he is mistaken . Of the other countries that he mentiooned , only one has mortgage interest payments in its index , and a great many of them—in fact , about a half of them—have nothing at all for owner - occupier housing costs , nothing at all . Therefore , the only way to have a truly comparable figure is to take owner - occupier housing out , which is what I did , and that is a very different comparison between the 6 per cent . and the 4¼ per cent . As for the second question that the hon Gentleman put to me , the answer is : lower than it is today .\n", + ">> 1996-07-01a.547.2 0.494 My hon Friend is on to a good point . The liaison between my office and the Crown Office in Edinburgh would clearly be confused if there were a tax - raising Scottish Parliament . I wonder whether the hon Member for Linlithgow ( Mr. Dalyell ) , who tabled the question , will continue to persevere with probing his colleagues about the West Lothian question , to which we have had no satisfactory response .\n", + ">> 1999-07-15a.548.0 0.498 I wonder where the hon Gentleman has been . Of course there is a challenge in global competitiveness , but where was he when we boosted the science , engineering and technology budget by £ 1.4 billion to underpin basic research ? We have £ 25 million for the science enterprise challenge and £ 20 million for the reach out fund , as well as funds for the SMART schemes and the foresight - link awards to foster engineering . We believe that we will address the shortfall not by doing things for industry , but by putting in schemes to underpin the innovative approach to competitiveness to ensure that our engineers make world - class products and can win their way forward .\n", + ">> 1994-03-28a.632.6 0.498 I wonder where the hon Gentleman has been for the past five minutes while I have been telling the House about the reduction in prices in most of the privatised utilities . He clearly has no idea what he is talking about .\n", + ">> 1983-03-31a.451.8 0.501 Oh , yes . That is not new . I wonder whether the Manchester city council , which is the flagship of the so - called nuclear - free zone council movement , might consider proposing to protect its people—after all it is two - thirds of Manchester 's police committee—against crime by proposing a burglar - free zone .\n", + ">> 1983-07-19a.174.4 0.504 As the right hon Gentleman has been a member of a Cabinet , he is fully aware that one never reveals agendas , let alone the contents of papers , in advance . He is fully aware of that practice and I am surprised that he should wish to break it , other than for his own personal reasons .\n", "\n", "====\n", "\n", "CLUSTER 6 6\n", "---\n", "terms\n", - " cluster_dist\n", - "index \n", - "tell_* 0.460119\n", - "can>* 0.506656\n", - "tell_will 0.515027\n", - "confirm_* 0.536725\n", - "say_* 0.550612\n", - "confirm_will 0.557403\n", - "tell_can 0.570300\n", - "say_can 0.593507\n", - "expect_does 0.661614\n", - "remain_* 0.664343\n", + " cluster_dist\n", + "index \n", + "be_* 0.380167\n", + "as>* 0.446805\n", + "accept_will 0.458083\n", + "be_not 0.463601\n", + "be_would 0.508921\n", + "recognise_does 0.509598\n", + "accept_* 0.516023\n", + "in>* 0.517295\n", + "recognise_* 0.532365\n", + "accept_does 0.533569\n", "\n", "context terms\n", " cluster_dist\n", "index \n", - "am_afraid 0.651999\n", - "tell_will 0.678107\n", - "tell_* 0.683149\n", - "on>* 0.696367\n", - "tell_can 0.702783\n", - "tell_are 0.706053\n", - "have_not 0.712576\n", - "tell_however 0.723561\n", - "have_were 0.725421\n", - "tell_is 0.726888\n", + "is_surely 0.573458\n", + "be_indeed 0.604535\n", + "is_not 0.627032\n", + "stated_* 0.638818\n", + "has_* 0.640160\n", + "be_possible 0.643052\n", + "be_difficult 0.650494\n", + "be_important 0.650706\n", + "am_certain 0.651591\n", + "however>* 0.652481\n", "\n", "\n", "utterances\n", - "> 2011-10-31c.598.5 0.317 Will the Secretary of State confirm the really startling figures from the first quarter of the operation of the new homes bonus , which show that new home starts went down by 18 % compared with the same period last year , and that residential planning permissions went down by 23 % compared with that same period ? If he can confirm that those figures are correct , will he tell us what plans he has to revise the mechanisms of the new homes bonus ?\n", - "> 2003-03-05.816.0 0.322 I want to come back to the issue of foundation hospitals . Will the Prime Minister tell us whether he agrees with the Secretary of State for Health , who said in a speech last month that he was in favour of freeing such hospitals from the constraints of central Government and capital rationing—in other words , from the controls of the Chancellor of the Exchequer ? We have the benefit of having both the Chancellor of the Exchequer and the Secretary of State for Health here today , so will the Prime Minister confirm which of them he is backing in this long - running Government dispute ?\n", - "> 2009-02-12c.1508.0 0.322 On two occasions , both the Prime Minister and the Chancellor have failed to express confidence in Glen Moreno , acting chairman of UK Financial Investments Ltd , the body entrusted with risk - managing our bank holdings . Can the Minister tell us when he will appoint a permanent chairman , and will he confirm that Mr. Moreno will not be a candidate ?\n", - "> 2013-10-09a.147.6 0.324 It is truly extraordinary that the Minister continues to defend the bedroom tax . Will he confirm for the record whether , according to the Government ’s own figures , Wales is hit harder than anywhere else in the UK ? As he mentioned the disabled , will he tell us how many disabled households in Wales are hit by the bedroom tax ?\n", - "> 1987-12-14a.757.1 0.331 Will the Minister confirm that the Electricity Council employs more people than the Department of Energy ; and will he tell us what they all do ?\n", - "> 2012-02-06c.1.8 0.334 Can the Minister confirm that detailed statistics on children at ports of entry are now being kept ? Will he tell us what type of accommodation they are required to be detained in , and whether the Government have any specific plans to reduce the number of children being detained in that way ?\n", - "> 2004-07-20.144.4 0.343 I suppose this question would be a bit easier to answer in Scotland , as the Secretary of State helpfully transferred power to the Scottish Executive in his statement last week . Can he confirm that the necessary resources will accompany the transfer of power , so that the Scottish Executive will be able to pursue their rail objectives and priorities ? Will he tell us how Scotland 's share is to be calculated , given that he is about to announce massive infrastructure building in London and the south - east on the Crossrail project ?\n", - "> 2015-02-05a.405.0 0.343 So it is true : this is the greenest Government ever . Will my right hon Friend tell us what proportion of that electricity is generated by onshore wind ? Can he confirm that onshore wind is the most mature , least expensive , and most efficient form of renewable energy , and is actually pretty popular ?\n", - "> 2010-12-20a.1176.0 0.344 Can the Minister confirm that the budget for the new early intervention grant , which includes funding for Sure Start , will be almost 11 % lower next year than the current funding for the various programmes , and 7.5 % lower in 2012 ? Can she tell the House by what definition of flexibility that is not a cut ?\n", - "> 2012-12-19a.841.2 0.344 I start by joining the Prime Minister in paying tribute to our troops in Afghanistan , who continue to show such huge courage and bravery . It is particularly important at this time of year to remember them and their families , many of whom will be separated from them . Their families , too , are in all our thoughts . I also welcome the Government ’s expected announcement today on reducing the number of troops in Afghanistan during 2013 ; we await the Defence Secretary ’s statement . Can the Prime Minister tell the House how many British troops and civilian staff will be left in Afghanistan after the 2014 deadline , and can he confirm whether they will be there under Afghan - led command ?\n", + "> 1985-12-11a.907.6 0.298 Is the Secretary of State aware that it might do him a whole lot of good to visit Gartcosh , if only because a change of company might be helpful ? Is he aware also that if he ever meets the men and women of Gartcosh he will find that they are people who say what they mean and mean what they say ? They would never be a party to the disgraceful betrayal which we witnessed in the Select Committee on Scottish Affairs this morning , which was a contribution to the pantomime season and a disgrace to Scotland ? Will he accept that the men and women of Gartcosh believe that they have a future and that Ravenscraig has a future and that Scottish Members are determined to fight for that future , in the knowledge that they have the overwhelming support of the Scottish people ?\n", + "> 1989-10-19a.259.3 0.312 Does the Chancellor recognise that since the last quota increase the growth in the world economy and the emergence of the international debt problem on their own justify a larger rate of increase than the Government are willing to support ? Does he accept that historically important changes are taking place in eastern Europe , the success of which will depend on the economic progress of the countries concerned ? Would it not be tragic if this unique opportunity , from which we have so much to gain in the West , were missed because we starved the IMF of the resources that it needs to play a constructive role ?\n", + "> 1986-04-29a.773.8 0.313 Will the Minister accept that the Government 's proposals could inflict gratuitous extra hardship on some of the most severely disabled people in this country , and could force them into the sort of subhuman existence that Granada 's \" World in Action \" documentary so strikingly exposed last night ? Is he prepared to consider an as - of - right community care addition to meet the additional requirements of disabled people ? Would it not be self - defeating as well as inhumane not to do so ?\n", + "> 1997-01-13a.4.6 0.313 Will not this project be , in effect , the Northfleet town bypass ? The town will have , on one side , the Thames tunnel of the channel tunnel rail link and , on the other , Ebbsfleet international station . During the construction of those large projects , heavy goods vehicles will rumble through the town , as there is currently no other route for them . Does my hon Friend accept that the people of Northfleet are fed up to the back teeth with Kent county council , which has delayed the introduction of the project ? Two years after the public exhibition , the council is now involved in an inspector 's inquiry . Will my hon . Friend give an assurance that , as and when Kent county council does its work properly , he will ensure that the inquiry is carried out as fast as possible ?\n", + "> 1982-03-01a.10.9 0.317 From those horrendous figures , is it not undeniable , despite what Lord Stokes told us would happen at the time , that Common Market membership has proved disastrous and catastrophic to the British motor vehicle industry ? We negotiate limits on Japanese imports , which will allow in more EEC imports , but will the Minister accept any responsibility for the existence of the British motor industry ? We are investing in the motor industry and seeking to build it up , but would it not be wise to negotiate import ceilings on EEC imports in the same way as we do with Japan , regardless of what the Treaty of Rome says ?\n", + "> 2016-02-29c.666.1 0.320 Does my right hon Friend accept that by advancing the rather quaint idea that somehow our membership of the EU enhances our national security , he is merely playing into the hands of people such as Mr Juncker and Chancellor Merkel who , if Britain votes to remain in the EU , would advance towards a European army and permanent structured co - operation , the result of which would be to undermine NATO—the very organisation that the Secretary of State says is the cornerstone of our national defence ?\n", + "> 1994-06-14a.508.0 0.320 In the event of further education colleges in Rotherham and , indeed , nationwide settling the dispute between college lecturers and college employers on the same basis as in Manchester college of arts and technology , will it be the Government 's policy to insist on the holdback of moneys to further education , or will they accept that as a legitimate settlement ?\n", + "> 1985-07-11a.1249.0 0.323 Does my hon Friend accept that as surely as night follows day the House will in the fullness of time have the common sense to reintroduce capital punishment for terrorism in response to public demand ? When that day comes , will it not be necessary to ensure that the people concerned have a proper trial ? Is my hon Friend aware that nothing will convince me that those who have escaped from the Maze prison have not struck and killed again ?\n", + "> 1988-03-14a.856.2 0.325 Does the Minister accept that it is very difficult to target aid at poverty in Third - world countries when we still have not resolved the problem of international debt ? Bearing in mind what he said about the World Bank , does he accept that many African countries see the World Bank and its demands as part of their problems rather than as a solution to them ? Would it not be better for the bank to come up with a strategy of debt relief instead of dealing with default in the interests of its own credit rating ?\n", + "> 1983-12-14a.980.4 0.326 Does the Secretary of State accept that a little while ago hon Members on both sides supported my request that there should be a restraint on exporting instruments designed to confer electric shocks on people in penal institutions ? Would it not therefore be consistent for the Secretary of State to take action similar to that taken by others of his colleagues in the Government ?\n", "\n", "context-utterances\n", - ">> 2003-06-10.527.1 0.507 The appearance of members of the Prime Minister 's staff before Select Committees is a matter for the Prime Minister—[Hon Members : \" And the House . \" ] Ultimately for the House , of course , but initially for the Prime Minister , who will clarify the matter . I recall that the hon Gentleman made a fine speech on 18 March , summing up the resolution that was agreed overwhelmingly by the House . On that occasion he was unequivocal in his support for the military action on the basis of the evidence then available— [ Interruption . ] It does the Opposition no good to try to change the terms on which they backed the Government . The basis on which we took the decisions still applies today , and the hon Gentleman knows that very well .\n", - ">> 1980-07-08a.227.3 0.553 It is not a question of passing the buck . The right hon Gentleman was a Minister at the DES , and he knows what the 1944 Act permits . We appreciate the points that he has made , but he must understand that local authorities have the final decision . The previous Administration sent out a circular and we have conducted a sample survey of some 2,000 primary schools and 1,000 secondary schools to find out precisely what provision is made . As soon as the results are to hand , we shall tell the House .\n", - ">> 1988-11-14a.732.6 0.553 I am grateful to my hon Friend . I can tell him that 110 schemes have been set up and that 102,000 individuals have taken out personal pensions . If my hon Friend would like to look at the Financial Times of 31 October , he will see a report which says that the figure from a straw poll of life companies , shows … the personal pensions market was extremely buoyant in its first three months .\n", - ">> 1996-02-14a.996.1 0.556 I can see that the right hon Lady has nicely caught the spirit of St. Valentine 's day . I shall not be so churlish and I wish her a happy Valentine 's day . My figures on the fall in manufacturing output under the last Labour Government are correct and I will send the right hon Lady those figures so that she does not make the same mistake twice . [ Interruption . ] If she will be quiet for a minute and let me get a word in edgeways , I can tell her that investment has risen six times faster under this Government than under Labour . There is one big difference between investment now and investment in the 1970s : in those days , investment was directed by bureaucrats and politicians into low - grade , dossed - out , state - run industries , but investment nowadays is in high - grade , exportable manufactures .\n", - ">> 2003-06-23.692.0 0.561 I was curious about the hon Gentleman 's opening proposition that it is too early to say—perhaps it is too early to say what his policy is on these matters , as he seems to change it according to circumstance . I must tell the House , in case it escaped the hon Gentleman 's notice , that I do not have ministerial responsibility for Mr. Campbell , so I am not in a position to deal with that matter . As for the hon Gentleman 's final observation , I was slightly surprised by his suggestion that he would prefer a judicial inquiry to one conducted by right hon and hon Members in the House of Commons . If that really is his position , he needs to articulate it more clearly .\n", - ">> 1990-10-31a.971.4 0.562 My hon Friend is absolutely right . In the decade up to 1985 , the total subsidy to British Steel , in present - day money , was £ 14 billion . It is hard to know where the Opposition expect to get such money , as they have already mortgaged the future with promises to spend on almost everything else . If they return to a state - controlled , state - regulated or nationally owned steel industry , we shall again be back in that loss - making era .\n", - ">> 1996-11-20a.965.3 0.562 The hon Gentleman is totally mistaken . No spending plans on how much will be allocated to further education have yet been decided . He stands up and says that there will be less money , but he does not have a clue how much money will be allocated next year . All I can say is that we have increased spending on further education colleges every year since incorporation in 1993 .\n", - ">> 1990-02-22a.1054.3 0.563 I can not see for the life of me what that has to do with question No . 5 . As a matter of interest , however , I can tell the hon Gentleman that the prison department is trying to resolve the dispute .\n", - ">> 1991-06-06a.390.9 0.566 I can tell my hon Friend the Member for Surbiton ( Mr. Tracey ) , whose question I welcome , that under a Conservative Government there is no possibility whatever of any amnesty ever being declared for anyone who breaks the law . Rather than people waving banners outside Wandsworth prison , perhaps one day we shall see outside magistrates courts ordinary decent people who pay their community charge waving banners that say , \" Those who can pay , should pay . \"\n", - ">> 1997-12-04a.477.0 0.569 The hon Gentleman asked about an inquiry . I can tell him that the report this morning is clearly not true because no final decision has yet been made . When we are able to make a decision—it is being actively considered across Whitehall—about an inquiry into the BSE legacy that we inherited on 1 May , we will be at the House pretty quickly to announce it . I can give the House that promise . On the rest of the hon Gentleman 's question , we can not govern by hint . Yesterday ' s statement was crystal clear about the proposals that had been put , the recommendations that had been made and the Government 's action . We have to condemn , as I hope would all hon Members , illegal activities taking place at the ports .\n", + ">> 1997-11-26a.959.0 0.446 I thank the hon and learned Gentleman for his question . Different parties have different parts that they consider to be essential to some sort of final accommodation—these include devolution in terms of an assembly , cross - border co - operation and the nature of the powers of that body . Surely , the point of negotiation and discussion is to consider the basic tenets that each party brings with it , whether it be cross - border co - operation , a devolved assembly or a change in east - west relations . That is what discussion , debate and negotiation should be about . I hope that the hon and learned Gentleman finds it within himself to join those talks in the future , because his contribution would be welcome .\n", + ">> 1998-02-17a.891.7 0.472 The hon Gentleman knows that my hon Friend the Financial Secretary announced the proposal well in advance of any Budget determination , precisely so that the professions could be consulted , and so that any representations made about the effects of the proposal could be considered . The hon Gentleman is surely aware that such representations have been made , and I am sure that my hon Friend will take them into account .\n", + ">> 1994-12-19a.1390.2 0.474 I understand that what has persuaded the hon Gentleman 's colleagues and others who are members of the Accommodation and Works Committee to make access for disabled people—it is not available for other members of the public—via Carriage Gates is the practical difficulty of providing good access for the disabled through St. Stephen 's entrance , for the very reason that he has given . If the hon Gentleman has thought of a solution to the problem , I suggest that he directs it to the members of the Accommodation and Works Committee .\n", + ">> 2007-10-25b.398.2 0.483 I am grateful to my hon Friend for that question , but I am sorry to have to tell him that , because of the lack of agreement on suitable controls and standards , the Environment Agency and the industry have not been able to produce a protocol . However , it is not all bad news and we hope that the industry itself will make further progress on protocols . The Environment Agency issued new guidance on 3 October , confirming the deregulation of virgin timber . That means that producers will be able to recover and sell on virgin waste wood , such as off - cuts , shavings and sawdust and , of course , the production that comes from the management of forests . Those will be free from regulatory control . Clean and treated non - virgin timber will remain classified as waste and regulated as normal through exemptions and waste legislation .\n", + ">> 1997-11-18a.142.1 0.486 I can only assume that that is a deliberate misrepresentation of the Government 's position . The hon Lady is surely aware of the road schemes that we have announced and I am sure that she appreciates that we are carrying out a thorough review of the trunk road programme , as we promised during the general election .\n", + ">> 2006-03-06b.600.5 0.489 I am grateful to my hon Friend . He goes back to 1807 ; shortly , we will have a question that relates to the next century—the Church certainly has a wide span . He will note that the Synod recently called on Her Majesty 's Government to give the highest priority to enabling legislation to bring an end to the causes and outcomes of slavery . Personally , I presume that the Synod will equally accept the enabling legislation for the Church to accept women bishops in line with his ten - minute Bill .\n", + ">> 1997-06-10a.931.5 0.489 I can only repeat that , while we make it clear that the human rights dimension is an important part of the way in which we shall consider applications for export licences , the review announced by my right hon Friend the Foreign Secretary has not yet been completed , although it will be completed very rapidly . Until that time , it would be foolish for us to make any further comment .\n", + ">> 2005-03-02a.942.5 0.491 I am not surprised at anything that the Tories do in my hon Friend 's council . When we came to power in 1997 , the Tories left a shameful legacy of child poverty . The problems of poverty and social exclusion across Wales and the huge gap between the rich and the poor were evident to everybody . It is important that we continue this Government 's commitment to investing in education and overcoming the problems of child poverty . One child in three in Wales lived in a low - income household when the Conservatives were in government ; they will never be in government again to damage and harm our people , as they did in the past .\n", + ">> 2007-11-28b.280.2 0.493 That is not , I believe , what Baroness Jay said , but the hon Gentleman 's question will be a matter for the inquiry , which will examine all issues relating to this matter . Surely the right thing to do when a problem arises is to investigate it in detail , deal with it , change the procedures if necessary and , if necessary , reform political party funding—which we are prepared to do .\n", + ">> 1994-01-17a.518.5 0.493 As I have said , approximately £ 12 million is available for such measures in the current year . I understand that the specific case of Coedely is a matter for the Welsh Development Agency , for the hon Gentleman 's local authority of Taff Ely borough council and for Mid - Glamorgan county council , which are giving it the most serious consideration and are ensuring that appropriate arrangements are in hand . I remind him that , under the first programme for the valleys , 2,600 acres throughout the valleys of south Wales have been cleared—a record which can compare with the best in Europe .\n", "\n", "====\n", "\n", @@ -712,55 +650,55 @@ "terms\n", " cluster_dist\n", "index \n", - "be_* 0.380684\n", - "as>* 0.442467\n", - "accept_will 0.452264\n", - "be_not 0.468965\n", - "recognise_does 0.508869\n", - "accept_* 0.510929\n", - "be_would 0.517275\n", - "in>* 0.519376\n", - "accept_does 0.528391\n", - "recognise_* 0.532189\n", + "ensure_will 0.421913\n", + "ensure_* 0.424475\n", + "agree_will 0.487595\n", + "undertake_will 0.509146\n", + "undertake_* 0.520769\n", + "take_* 0.555380\n", + "press_may 0.569691\n", + "may>* 0.572695\n", + "consider_will 0.574867\n", + "consider_* 0.577258\n", "\n", "context terms\n", - " cluster_dist\n", - "index \n", - "be_indeed 0.597686\n", - "be_possible 0.640883\n", - "stated_* 0.644839\n", - "be_difficult 0.648393\n", - "be_important 0.649744\n", - "be_should 0.653422\n", - "am_certain 0.655182\n", - "be_on 0.657499\n", - "be_at 0.659461\n", - "be_would 0.660128\n", + " cluster_dist\n", + "index \n", + "am_aware 0.557982\n", + "am_always 0.600846\n", + "am_sure 0.642930\n", + "am_of 0.653652\n", + "am_not 0.668030\n", + "am_interested 0.672428\n", + "am_grateful 0.679423\n", + "try_* 0.685277\n", + "confess_* 0.698852\n", + "seek_* 0.721268\n", "\n", "\n", "utterances\n", - "> 1985-12-11a.907.6 0.295 Is the Secretary of State aware that it might do him a whole lot of good to visit Gartcosh , if only because a change of company might be helpful ? Is he aware also that if he ever meets the men and women of Gartcosh he will find that they are people who say what they mean and mean what they say ? They would never be a party to the disgraceful betrayal which we witnessed in the Select Committee on Scottish Affairs this morning , which was a contribution to the pantomime season and a disgrace to Scotland ? Will he accept that the men and women of Gartcosh believe that they have a future and that Ravenscraig has a future and that Scottish Members are determined to fight for that future , in the knowledge that they have the overwhelming support of the Scottish people ?\n", - "> 1997-01-13a.4.6 0.309 Will not this project be , in effect , the Northfleet town bypass ? The town will have , on one side , the Thames tunnel of the channel tunnel rail link and , on the other , Ebbsfleet international station . During the construction of those large projects , heavy goods vehicles will rumble through the town , as there is currently no other route for them . Does my hon Friend accept that the people of Northfleet are fed up to the back teeth with Kent county council , which has delayed the introduction of the project ? Two years after the public exhibition , the council is now involved in an inspector 's inquiry . Will my hon . Friend give an assurance that , as and when Kent county council does its work properly , he will ensure that the inquiry is carried out as fast as possible ?\n", - "> 1994-06-14a.508.0 0.312 In the event of further education colleges in Rotherham and , indeed , nationwide settling the dispute between college lecturers and college employers on the same basis as in Manchester college of arts and technology , will it be the Government 's policy to insist on the holdback of moneys to further education , or will they accept that as a legitimate settlement ?\n", - "> 1986-04-29a.773.8 0.315 Will the Minister accept that the Government 's proposals could inflict gratuitous extra hardship on some of the most severely disabled people in this country , and could force them into the sort of subhuman existence that Granada 's \" World in Action \" documentary so strikingly exposed last night ? Is he prepared to consider an as - of - right community care addition to meet the additional requirements of disabled people ? Would it not be self - defeating as well as inhumane not to do so ?\n", - "> 1989-10-19a.259.3 0.315 Does the Chancellor recognise that since the last quota increase the growth in the world economy and the emergence of the international debt problem on their own justify a larger rate of increase than the Government are willing to support ? Does he accept that historically important changes are taking place in eastern Europe , the success of which will depend on the economic progress of the countries concerned ? Would it not be tragic if this unique opportunity , from which we have so much to gain in the West , were missed because we starved the IMF of the resources that it needs to play a constructive role ?\n", - "> 1982-03-01a.10.9 0.318 From those horrendous figures , is it not undeniable , despite what Lord Stokes told us would happen at the time , that Common Market membership has proved disastrous and catastrophic to the British motor vehicle industry ? We negotiate limits on Japanese imports , which will allow in more EEC imports , but will the Minister accept any responsibility for the existence of the British motor industry ? We are investing in the motor industry and seeking to build it up , but would it not be wise to negotiate import ceilings on EEC imports in the same way as we do with Japan , regardless of what the Treaty of Rome says ?\n", - "> 2016-02-29c.666.1 0.318 Does my right hon Friend accept that by advancing the rather quaint idea that somehow our membership of the EU enhances our national security , he is merely playing into the hands of people such as Mr Juncker and Chancellor Merkel who , if Britain votes to remain in the EU , would advance towards a European army and permanent structured co - operation , the result of which would be to undermine NATO—the very organisation that the Secretary of State says is the cornerstone of our national defence ?\n", - "> 2000-10-30a.504.3 0.319 The Government have to deal with those who are preparing for operations . Will the Minister accept that 1,000 drivers being trained to help bust any sort of strike may well be included among those , as they are being prepared and are ready to be deployed on an operation ? As and when they are deployed on that operation , will those military drivers be under the command of the Home Office or the Ministry of Defence ?\n", - "> 1985-07-11a.1249.0 0.321 Does my hon Friend accept that as surely as night follows day the House will in the fullness of time have the common sense to reintroduce capital punishment for terrorism in response to public demand ? When that day comes , will it not be necessary to ensure that the people concerned have a proper trial ? Is my hon Friend aware that nothing will convince me that those who have escaped from the Maze prison have not struck and killed again ?\n", - "> 1992-07-15a.1128.6 0.326 Is the Minister aware that his answer to his hon Friend the Member for Ealing , North ( Mr. Greenway ) was almost contemptibly arrogant and irresponsible ? Does he not accept that the overwhelming proportion of local government spending is in pursuit of the statutory obligations and duties placed on local authorities , and that only a very small proportion of local government spending is left to the liberty of the individual council ? Would it not be more responsible for Ministers to persuade their hon Friends that it is unreasonable to try to suggest that all local government spending is profligate ?\n", + "> 2010-01-19c.159.8 0.367 I welcome the Secretary of State 's comments on Haiti , but may I ask whether we are using all our assets ? The Type 23 frigate , HMS Iron Duke , is in the Caribbean but not being utilised . Our military stabilisation and security teams , which performed so admirably after the Indonesian earthquake , remain to be dispatched to Haiti . Will he consider those assets ?\n", + "> 2009-07-02c.466.1 0.372 What a pleasure it is to see you in the Chair , Mr. Speaker . May I ask my right hon Friend the Secretary of State to pass on my welcome to my two colleagues who have joined him on the Front Bench ? Food and food production are far too important to be left entirely to the advocacy of Members with rural constituencies . They are of importance to everyone . I noted my right hon Friend 's response to the hon Member for Lancaster and Wyre ( Mr. Wallace ) . Will he consider approaching the Office of Fair Trading and pressing it for its view on what is competitive in the dairy market ? That would allow it to take a more pragmatic approach when mergers and changes happen in the co - operative sector .\n", + "> 1999-07-13a.157.1 0.387 Could the Minister give an assurance that he will pay particular attention in his review to applications for sites within areas of outstanding natural beauty , including the Chiltern hills ? Will he take careful account of the reports that pressure is being exerted to overturn the decision of the local planning authority on Chisleys wood in my constituency ? That pressure is coming from Government Departments and the current tenant of Chequers . Will he ensure that he takes all steps within his Department to avoid any conflict of interest in determining the outcome ?\n", + "> 2007-07-11b.1458.1 0.389 I warmly welcome the Prime Minister 's statement , which contrasted with the churlish Punch - and - Judy effort from the Leader of the Opposition . I suspect that parliamentarians throughout the House will welcome my right hon Friend 's comments today . Will he examine the relationship between Parliament and the Executive ? Government and Parliament are stronger in partnership than when one dominates the other . In that context , will he ensure that all Bills are introduced in draft , so that the House can discuss them properly ? Will he also ensure the fullest pre - legislative scrutiny ? If we have that , we will end up with better law and better government .\n", + "> 2000-11-29a.953.6 0.391 Will my right hon Friend consider the case of Ernie Obern , an 85-year - old ex - miner in my constituency ? He has 90 per cent . dust in his lungs , he is on oxygen permanently , and he is bedridden . He is very ill at this moment . He has just received a letter from his solicitor telling him that it will be not months but years before he receives his full compensation . May I ask my right hon Friend to ensure that the elderly , the sick and widows are a top priority ? May I also ask him personally to take the question of compensation by the scruff of the neck , and deliver justice to the miners ?\n", + "> 2000-11-30a.1123.5 0.393 I welcome Lord Sainsbury 's report , but what steps will the Government take specifically to assist industrial biotechnology ? Bearing in mind the work that my right hon Friend the Secretary of State has been doing along with others in the north - west , will my hon Friend consider carefully the fantastic successes in industrial biotechnology in the north west and urge the Government to inject more support into the projects going to our academic institutions there , thus helping our industrial partners ?\n", + "> 1999-03-09a.165.5 0.396 As I understand the regulations , part of the point is to stop drivers keeping the engine running when they are not going anywhere , such as those just keeping themselves warm . Will the Minister consider taking action to ensure that drivers in Westminster , where we all walk around all the time , do not sit in their cars creating emissions and polluting the atmosphere ? As a start , will she ensure that all Government Departments instruct Government drivers to switch off their engines in such circumstances , which they currently fail to do within the Palace of Westminster and in the streets of Westminster ?\n", + "> 2014-06-12c.677.0 0.399 I am grateful to the Secretary of State for that reply . Will he ensure that , in addition to that scientific examination , he also meets with the Welsh Assembly Minister who is dealing with this matter in Wales—not too far from his own constituency—where an alternative method of vaccination is being undertaken ? Will the Secretary of State agree to evaluate that as part of the process as well ?\n", + "> 2001-06-26.502.0 0.401 I am disappointed that it is not the Secretary of State at the Dispatch Box . Labour 's NHS plan states that the Government are in favour of a new pay system for the NHS , and figures published today detail the pay received by the service 's humble and self - effacing nurses . They show that general nurses get about two thirds of what is paid for agency work , while a theatre - registered general nurse gets paid about half the rate for an agency job . Is it the Government 's plan to bring the pay of people who work for the national health service up to the levels available outside , so that they will not leave the service and work elsewhere ? If so , will he ensure that all those working for the NHS come within the pay review body structure ? Above all , will he ensure that ambulance personnel receive the sort of pay that people who save lives every day deserve ?\n", + "> 2013-09-12a.1153.10 0.402 I welcome any improvements in recycling , as I am sure does everybody else . Will the hon Gentleman consider the use of plastic by the building as a whole ? We have removed much of it from the catering department , but not all of it . However , Members ’ offices are still supplied with plastic envelopes that are not recyclable or biodegradable . I could be wrong about that , but I believe it to be the case . Will he ensure that we use only paper and cardboard , which are completely recyclable ?\n", "\n", "context-utterances\n", - ">> 1997-11-26a.959.0 0.447 I thank the hon and learned Gentleman for his question . Different parties have different parts that they consider to be essential to some sort of final accommodation—these include devolution in terms of an assembly , cross - border co - operation and the nature of the powers of that body . Surely , the point of negotiation and discussion is to consider the basic tenets that each party brings with it , whether it be cross - border co - operation , a devolved assembly or a change in east - west relations . That is what discussion , debate and negotiation should be about . I hope that the hon and learned Gentleman finds it within himself to join those talks in the future , because his contribution would be welcome .\n", - ">> 1998-02-17a.891.7 0.472 The hon Gentleman knows that my hon Friend the Financial Secretary announced the proposal well in advance of any Budget determination , precisely so that the professions could be consulted , and so that any representations made about the effects of the proposal could be considered . The hon Gentleman is surely aware that such representations have been made , and I am sure that my hon Friend will take them into account .\n", - ">> 1994-12-19a.1390.2 0.476 I understand that what has persuaded the hon Gentleman 's colleagues and others who are members of the Accommodation and Works Committee to make access for disabled people—it is not available for other members of the public—via Carriage Gates is the practical difficulty of providing good access for the disabled through St. Stephen 's entrance , for the very reason that he has given . If the hon Gentleman has thought of a solution to the problem , I suggest that he directs it to the members of the Accommodation and Works Committee .\n", - ">> 2007-10-25b.398.2 0.483 I am grateful to my hon Friend for that question , but I am sorry to have to tell him that , because of the lack of agreement on suitable controls and standards , the Environment Agency and the industry have not been able to produce a protocol . However , it is not all bad news and we hope that the industry itself will make further progress on protocols . The Environment Agency issued new guidance on 3 October , confirming the deregulation of virgin timber . That means that producers will be able to recover and sell on virgin waste wood , such as off - cuts , shavings and sawdust and , of course , the production that comes from the management of forests . Those will be free from regulatory control . Clean and treated non - virgin timber will remain classified as waste and regulated as normal through exemptions and waste legislation .\n", - ">> 1997-06-10a.931.5 0.490 I can only repeat that , while we make it clear that the human rights dimension is an important part of the way in which we shall consider applications for export licences , the review announced by my right hon Friend the Foreign Secretary has not yet been completed , although it will be completed very rapidly . Until that time , it would be foolish for us to make any further comment .\n", - ">> 2005-03-02a.942.5 0.490 I am not surprised at anything that the Tories do in my hon Friend 's council . When we came to power in 1997 , the Tories left a shameful legacy of child poverty . The problems of poverty and social exclusion across Wales and the huge gap between the rich and the poor were evident to everybody . It is important that we continue this Government 's commitment to investing in education and overcoming the problems of child poverty . One child in three in Wales lived in a low - income household when the Conservatives were in government ; they will never be in government again to damage and harm our people , as they did in the past .\n", - ">> 1997-11-18a.142.1 0.493 I can only assume that that is a deliberate misrepresentation of the Government 's position . The hon Lady is surely aware of the road schemes that we have announced and I am sure that she appreciates that we are carrying out a thorough review of the trunk road programme , as we promised during the general election .\n", - ">> 2007-11-28b.280.2 0.494 That is not , I believe , what Baroness Jay said , but the hon Gentleman 's question will be a matter for the inquiry , which will examine all issues relating to this matter . Surely the right thing to do when a problem arises is to investigate it in detail , deal with it , change the procedures if necessary and , if necessary , reform political party funding—which we are prepared to do .\n", - ">> 2006-03-06b.600.5 0.497 I am grateful to my hon Friend . He goes back to 1807 ; shortly , we will have a question that relates to the next century—the Church certainly has a wide span . He will note that the Synod recently called on Her Majesty 's Government to give the highest priority to enabling legislation to bring an end to the causes and outcomes of slavery . Personally , I presume that the Synod will equally accept the enabling legislation for the Church to accept women bishops in line with his ten - minute Bill .\n", - ">> 1994-01-17a.518.5 0.498 As I have said , approximately £ 12 million is available for such measures in the current year . I understand that the specific case of Coedely is a matter for the Welsh Development Agency , for the hon Gentleman 's local authority of Taff Ely borough council and for Mid - Glamorgan county council , which are giving it the most serious consideration and are ensuring that appropriate arrangements are in hand . I remind him that , under the first programme for the valleys , 2,600 acres throughout the valleys of south Wales have been cleared—a record which can compare with the best in Europe .\n", + ">> 1983-01-25a.772.5 0.520 I am well aware of the problems of that school . The papers on that subject arrived on my desk some time ago . As my hon Friend drew the attention of the House and the whole country to the matter at the time , I am sure that from now on everyone will bear the matter even more in mind .\n", + ">> 1995-01-11a.141.1 0.523 I am grateful to my hon Friend for those remarks . I am aware that the Director General of Fair Trading has received several representations in the period since the merger was announced , many of which were along the lines that have been outlined by my hon Friend , drawing on the great financial tradition that exists in Yorkshire , Leeds and Halifax .\n", + ">> 1980-04-15a.989.4 0.524 I am aware of it . I am glad to say that I had an opportunity to talk to Earl Mountbatten upon the subject of that speech , which needs to be read in full .\n", + ">> 1990-07-09a.17.1 0.535 We are well aware of the difficulties that Sendero Luminoso and other terrorists make for the Government in that country . I am not aware of specific difficulties in getting the aid through , but the new Government—under president - elect Fujimori—have a great deal to do , including sorting out a debt of $ 1.5 billion : those are substantial arrears .\n", + ">> 1997-06-02a.14.0 0.536 I am grateful for the hon Gentleman 's comments . I am aware of his excellent work as a member of the Select Committee and of the Committee 's invaluable reports on this topic . I am also aware of the problems caused by the complexity of the formula , which I assure him will be considered in great detail in our review of the CSA.\n", + ">> 1986-03-25a.774.0 0.543 I am not aware of the position to which my hon Friend refers . My superficial reaction is that that does not make sense , because those restrictions do not apply at present , but they will apply some time in future .\n", + ">> 1982-05-19a.350.3 0.544 Many hundreds of thousands of tenants have successfully purchased their homes over the years and I am not aware of any statistical basis for suggesting that there is a greater number of defaulters among purchasers from local authorities as opposed to the majority of owner occupiers .\n", + ">> 1983-11-23a.306.8 0.546 I am aware that the contracting out of services in that borough will save the ratepayers about £ 10 million over the next few years . I am also aware that one of the strengths of contracting out is that if there is unsatisfactory performance , local authorities can find a new contractor .\n", + ">> 1979-07-16a.999.4 0.549 That is another of the questions that I intend to discuss tomorrow with the chairman of the Manpower Services Commission . I share the concern of the right hon Gentleman about the problems that will arise at Shotton , and I am aware of the need to provide adequate training facilities .\n", + ">> 1992-03-11a.834.3 0.553 The hon Gentleman makes a valid point about the regime which the hon Member for Edinburgh , Leith ( Mr. Brown ) appears to admire . I am not aware that any such list has been provided .\n", "\n", "====\n", "\n" @@ -788,13 +726,11 @@ { "cell_type": "code", "execution_count": 15, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ - "q_ec.set_cluster_names(['demand_account', 'shared_concern', 'agreement', 'issue_update',\n", - " 'question_premises', 'request_assurance', 'prompt_comment', 'accept_propose'])" + "q_ec.set_cluster_names(['shared_concern', 'request_assurance', 'prompt_comment', 'agreement', \n", + " 'issue_update', 'question_premises', 'accept_propose', 'demand_account'])" ] }, { @@ -832,59 +768,59 @@ " \n", " \n", " accept_propose\n", - " 0.181097\n", - " 0.151042\n", - " 0.134168\n", - " 0.136733\n", + " 0.184516\n", + " 0.150174\n", + " 0.147930\n", + " 0.139690\n", " \n", " \n", " agreement\n", - " 0.121480\n", - " 0.098958\n", - " 0.154184\n", - " 0.135625\n", + " 0.080253\n", + " 0.047743\n", + " 0.078630\n", + " 0.052106\n", " \n", " \n", " demand_account\n", - " 0.110949\n", - " 0.184028\n", - " 0.160204\n", - " 0.168145\n", + " 0.131033\n", + " 0.137153\n", + " 0.071226\n", + " 0.071693\n", " \n", " \n", " issue_update\n", - " 0.092509\n", - " 0.124132\n", - " 0.139761\n", - " 0.183666\n", + " 0.092242\n", + " 0.128472\n", + " 0.123574\n", + " 0.167036\n", " \n", " \n", " prompt_comment\n", - " 0.114751\n", - " 0.098958\n", - " 0.093792\n", - " 0.081301\n", + " 0.162576\n", + " 0.168403\n", + " 0.131228\n", + " 0.129342\n", " \n", " \n", " question_premises\n", - " 0.102576\n", - " 0.089410\n", - " 0.122206\n", - " 0.114930\n", + " 0.143333\n", + " 0.165799\n", + " 0.133372\n", + " 0.144863\n", " \n", " \n", " request_assurance\n", - " 0.132699\n", - " 0.104167\n", - " 0.112767\n", - " 0.097191\n", + " 0.127051\n", + " 0.098090\n", + " 0.122071\n", + " 0.104952\n", " \n", " \n", " shared_concern\n", - " 0.143939\n", - " 0.149306\n", - " 0.082917\n", - " 0.082409\n", + " 0.078997\n", + " 0.104167\n", + " 0.191969\n", + " 0.190318\n", " \n", " \n", "\n", @@ -892,14 +828,14 @@ ], "text/plain": [ " utts terms context_utts context_terms\n", - "accept_propose 0.181097 0.151042 0.134168 0.136733\n", - "agreement 0.121480 0.098958 0.154184 0.135625\n", - "demand_account 0.110949 0.184028 0.160204 0.168145\n", - "issue_update 0.092509 0.124132 0.139761 0.183666\n", - "prompt_comment 0.114751 0.098958 0.093792 0.081301\n", - "question_premises 0.102576 0.089410 0.122206 0.114930\n", - "request_assurance 0.132699 0.104167 0.112767 0.097191\n", - "shared_concern 0.143939 0.149306 0.082917 0.082409" + "accept_propose 0.184516 0.150174 0.147930 0.139690\n", + "agreement 0.080253 0.047743 0.078630 0.052106\n", + "demand_account 0.131033 0.137153 0.071226 0.071693\n", + "issue_update 0.092242 0.128472 0.123574 0.167036\n", + "prompt_comment 0.162576 0.168403 0.131228 0.129342\n", + "question_premises 0.143333 0.165799 0.133372 0.144863\n", + "request_assurance 0.127051 0.098090 0.122071 0.104952\n", + "shared_concern 0.078997 0.104167 0.191969 0.190318" ] }, "execution_count": 16, @@ -921,9 +857,7 @@ { "cell_type": "code", "execution_count": 17, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "_ = q_ec.transform(parl_corpus, selector=lambda x: x.meta['is_question'] and (x.meta.get('q_arc_tfidf__n_feats',0)>0))\n", @@ -973,7 +907,7 @@ { "data": { "text/plain": [ - "('demand_account', 0.4022091585508637)" + "('prompt_comment', 0.6094370409124481)" ] }, "execution_count": 19, @@ -1032,7 +966,7 @@ { "data": { "text/plain": [ - "0.8090945361491605" + "0.8090945361491606" ] }, "execution_count": 21, @@ -1044,15 +978,6 @@ "eg_ut.meta['fw_range']" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - }, { "cell_type": "markdown", "metadata": {}, @@ -1066,10 +991,8 @@ }, { "cell_type": "code", - "execution_count": 22, - "metadata": { - "collapsed": true - }, + "execution_count": 23, + "metadata": {}, "outputs": [], "source": [ "for ut in parl_corpus.iter_utterances():\n", @@ -1088,10 +1011,8 @@ }, { "cell_type": "code", - "execution_count": 23, - "metadata": { - "collapsed": true - }, + "execution_count": 24, + "metadata": {}, "outputs": [], "source": [ "utt_meta_sub = utt_meta_df[((utt_meta_df.is_incumbent == True) | (utt_meta_df.is_oppn == True))\n", @@ -1109,10 +1030,8 @@ }, { "cell_type": "code", - "execution_count": 24, - "metadata": { - "collapsed": true - }, + "execution_count": 25, + "metadata": {}, "outputs": [], "source": [ "def compute_log_odds(col, bool_col, val_subset=None):\n", @@ -1132,10 +1051,8 @@ }, { "cell_type": "code", - "execution_count": 25, - "metadata": { - "collapsed": true - }, + "execution_count": 26, + "metadata": {}, "outputs": [], "source": [ "log_odds_party = []\n", @@ -1148,10 +1065,8 @@ }, { "cell_type": "code", - "execution_count": 26, - "metadata": { - "collapsed": true - }, + "execution_count": 27, + "metadata": {}, "outputs": [], "source": [ "type_order = log_odds_party_df.sort_values('log_odds').index\n" @@ -1159,10 +1074,8 @@ }, { "cell_type": "code", - "execution_count": 27, - "metadata": { - "collapsed": true - }, + "execution_count": 28, + "metadata": {}, "outputs": [], "source": [ "display_names = ['Demand for account', 'Questioning premises', 'Prompt for comment',\n", @@ -1172,10 +1085,8 @@ }, { "cell_type": "code", - "execution_count": 28, - "metadata": { - "collapsed": true - }, + "execution_count": 29, + "metadata": {}, "outputs": [], "source": [ "from matplotlib import pyplot as plt\n", @@ -1184,17 +1095,19 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 30, "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] }, - "metadata": {}, + "metadata": { + "needs_background": "light" + }, "output_type": "display_data" } ], @@ -1227,9 +1140,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [] }, @@ -1242,10 +1153,8 @@ }, { "cell_type": "code", - "execution_count": 30, - "metadata": { - "collapsed": true - }, + "execution_count": 31, + "metadata": {}, "outputs": [], "source": [ "med_tenures = pd.concat([utt_meta_sub[utt_meta_sub.is_incumbent].groupby('fw_clustering.cluster').tenure.median().rename('govt'),\n", @@ -1256,7 +1165,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 32, "metadata": {}, "outputs": [ { @@ -1292,43 +1201,43 @@ " \n", " \n", " accept_propose\n", - " 9.997260\n", - " 11.734247\n", + " 9.946575\n", + " 11.545205\n", " \n", " \n", " agreement\n", - " 4.830137\n", - " 9.512329\n", + " 4.890411\n", + " 9.221918\n", " \n", " \n", " demand_account\n", - " 8.756164\n", - " 8.872603\n", + " 6.845205\n", + " 10.221918\n", " \n", " \n", " issue_update\n", - " 4.852055\n", - " 8.493151\n", + " 4.882192\n", + " 8.417808\n", " \n", " \n", " prompt_comment\n", - " 6.110959\n", - " 8.854795\n", + " 6.449315\n", + " 8.680822\n", " \n", " \n", " question_premises\n", - " 8.679452\n", - " 9.657534\n", + " 9.030137\n", + " 9.697260\n", " \n", " \n", " request_assurance\n", - " 6.461644\n", - " 9.564384\n", + " 6.460274\n", + " 9.600000\n", " \n", " \n", " shared_concern\n", - " 6.917808\n", - " 10.347945\n", + " 5.613699\n", + " 10.010959\n", " \n", " \n", "\n", @@ -1337,17 +1246,17 @@ "text/plain": [ " govt oppn\n", "fw_clustering.cluster \n", - "accept_propose 9.997260 11.734247\n", - "agreement 4.830137 9.512329\n", - "demand_account 8.756164 8.872603\n", - "issue_update 4.852055 8.493151\n", - "prompt_comment 6.110959 8.854795\n", - "question_premises 8.679452 9.657534\n", - "request_assurance 6.461644 9.564384\n", - "shared_concern 6.917808 10.347945" + "accept_propose 9.946575 11.545205\n", + "agreement 4.890411 9.221918\n", + "demand_account 6.845205 10.221918\n", + "issue_update 4.882192 8.417808\n", + "prompt_comment 6.449315 8.680822\n", + "question_premises 9.030137 9.697260\n", + "request_assurance 6.460274 9.600000\n", + "shared_concern 5.613699 10.010959" ] }, - "execution_count": 31, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -1358,17 +1267,19 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 33, "metadata": {}, "outputs": [ { "data": { - "image/png": "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\nTkSuQmCC\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY0AAAF8CAYAAAAzaedtAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAABKnklEQVR4nO3dfZxVVdn/8c8XlECGu4EximHKkdFRCpKYwbR8oFSyUu5CvW8ly4cUSsvUTLNSsV9qlmkP6h1aipn2YEEKVj4yZmoKgxgENjp4VBwUGxhlYADB6/fHWgPH4xlmD8zMnjNc79frvOacvdZe+1r7wL72Xmufc2RmOOecc0n0STsA55xzhcOThnPOucQ8aTjnnEvMk4ZzzrnEPGk455xLzJOGc865xHZJOwDn2rL77rtbeXl52mH0arW1UFWVdhQ9gO+It6mtrf2Pmb0rd7knDddjlZeXM3/+/LTD6NUk8F0MTJsWHm4LSc/nW+7DU8455wkjMU8azjlXWpp2BAXDk4Zzzq1YkXYEBcOThnPOucQ8aTjn3NixaUdQMDxpOOdcbW3aERQMTxrOOTdlStoRFAxPGs45d+ONaUdQMDxpOOecS8yThnPOucQ8aTjn3EsvpR1BwfCk4ZxzfvdUYv6Fhc65XqOlBWbNgvp6qKiASZOgf/8EK06cCGZdHl9v4FcaCUjaXZJJGr+NOn0kTZfU2F5d51znmzcvfIXU1KlwySXh77BhYbnrPJ2WNCTNiAdLk/SGpJWS5ko6U9KunbWdHuxTwCnA0cAw4NF0w+mZJNVIujbtOFzv0tICEyZAUxM0N4eLhubm8HrCBFi/Pu0Ie4/OvtK4n3DALAcmALOBS4GHJQ3s5G31NHsBK8zsUTN72cw2bk8jO0mCda5TzZoFmzblL9u0CWbObKeB6dM7PabeqrOTxoZ4wHzJzBaa2dXAeGAscH5rJUn9JF0pabmktZLmSfpEVvn4eMXySUm1klokPSypTNKhkp6S1CxpjqSSrPXGSbpX0n8kvS7p75IOzA4wtjtF0h1x28sknZhTZ1zc7npJTwIf3lanJc0ArgHeF9vPxOXvkPRjSa/Etv4h6aA8/fyUpCckbQQ+0cY2zpX0zxjzS5J+Iak4p84Bkh6MdV6T9ICk0lgmSV+X9IykDXHfX5G17mhJ98d9vSpeOb4zu4+S5uRsb5qkxbl1JH0txrha0s2SdsvaT4cCZ2ZdlZZva986l0R9Paxdm79s7VpYtqydBvwT4Yl1+ZyGmS0G/gock7X4ZsLBYzIwGrgFmC1pv5zVLwXOJhy0BwO/Ay4GphCS0QeAaVn1BwG3AgcD+wMLgT9L2j2n3YuBO4H9Yps3SdoDIF4R3Q0sA6qBbwJXtdPNrwHfBZYTrrTGxeU/AP4XOBX4ELAI+KukYTnrXwl8B9gXeLyNbbxJ2BcfIOy3/YGftRbGfTcXeBb4KHAA8Hu23uxwOXARcEVs4zjgxbjuboT3qDm2+1ngI8BN7fQ7n4OBUcDhhL5/lrB/iH8fI7z/w+Ljxe3YhnNvUVEBA9sYyxg4EEaM2MbKQ4aEnzDM9xgypEviLWTddffUEsJBBEkVwAlAuZm9EMuvlXQ4MBU4I2u9i8zs4bjezwkHySozWxCX3QIc21rZzB7M3qikrxKS1ZHAr7OKbjWzX8c6FxEOZgcDzwOfA/oBp5hZM7BY0mWEZJSXmb0maQ2w2cxeju0OBL4MnGZmd8dlXwI+DpxJSBKtppnZvW21H7fx46yXGUnnA3dKOsnM3iRcyT1lZtmnTEvjdouAc4Czzaw1ETxLOIAT+1wEfN7M1sR1pgBzJe1lZs9uK7YcrwNfNrNNwFJJdwCHAVfE/bQRWNe6n3LF7U4BKCsrI5PJsGbNGhobG6mqqqK2tpaioiJKS0upq6ujoqKCxsZGmpqatpQXFxdTUlJCfX09lZWVNDQ00NzcvKW8pKSEQYMGkclkGDlyJJlMhpaWli3lQ4cOpV+/fixfvpxRo0ZRV1fH5s2bGT16NAsXLmTYsJDzV6xYwZgxY1i0aBF9+/alsrKSxYsXU1ZWxsaNG1m5cuWWNgcMGEB5eTlLly6lvLy8x/QJDqampqbg+3TooaPYf/863nhjM4sWjWbMmIU0NIQ+jRixgsMOG8PDD7fRp/32Y3xNDTVz5769TxMn0lhTk/r7lMa/vTaZWac8gBnAnDbKrgTWxufHAUY4q81+vAHcE+uMj3WGZbXRut6uWcu+DKzMej0UmA7UAa/FdjcD38qqY8AJOfE9D5wbn18D/C2nvCKuN34b/T8PyGS9/mBcpyKn3q+BmTn93CPB/v04cB/hamYNsC6uWxrLlwCXtbHu/rHu3m2UXw08nLOsX9x3E9t6fwlXeYtz/g3ck1PnUuCfWa9rgGuT/Juqqqoy17Ug7Qg6zxNPmBUXmxUVmUnhb3FxWL5NYd687bKdFDDf8vy/7K4rjfcThnsgDIkZYQjnjZx6LTmvs8vDEd8sd1n2ENstwLsJZ9UZYAPwAOEA2Fa7ue2o7W50SGs7+W7+zl3WxmhsbCgMnd0N3EgYWmskzBP9hq1921bc7fVJbcSZHeubedrJN2m/rX3rXJcZNw4aGsKk+LJlYUgq8ec0jjqqy+PrLbo8aUgaRRge+l5c9CTh4PMeM5vbyZs7CDjLtg4HvZswbt4RS4CTJA00s9aD+QHbEcuzwMYY07IYT1/gQOD2DrZVTUgO55jZ5thW7r/yBYSrkXyWEBLoYcAzbZSfKmmQxeEpwpxGH+IQF/AqMCZnvdzXSWwE+m7Hes61a8AAmDx5O1acPbvTY+mtOvsM8B2S3iOpVNJ+ks4lDEfUEieTzawOuA2YIelYSSMkVUs6T9KkHdx+HXCipPdLGgf8lnCQ6ojbgU2EyfEPSDoC+HZHA4kJ5/+A78e7o0bG1+8Gru9gc88Q3quzJe0p6QTCpHi2HwIfknRD3Pf7SDpN0vtiIvgJcIWkUyRVSNpf0pfjurcRrnZ+Fe+iOoQwzDfTts5nPBjbP1XSXnFO5aMd7AeEK8D9JZUrfGjSr0Jc+o4+Ou0ICkZn/4c9HFgBvEAYFppIGNM+JOusHcKH4G4m3F30NDAHOIQwt7AjTiVM6NYSEsZNhINUYhYmv48C9iacvV8FXLCd8VxAuIPpZsKdXB8EjjSzDv2KvZn9kzBZfy7hquA0whxKdp2FhP2/L/APwl1Yx7N1uOhCwtzSRYSrhz8CZXHddYRbff8LeIJwZ9ljhP3Z2v49hPfyMsL+LafjyQ/C/twY+/Eq8L7taMO5zjVnTvt1HAAy/74V10NVV1fb/Pnz0w6jV5P8K5cYMgRWr85fNngwrFrVvfH0EJJqzaw6d7l/YaFzbue2apVnzw7w8WTnnPOEkZgnDeecu+GGtCMoGJ40nHNu6tS0IygYnjScc84l5knDOedcYp40nHPurrvSjqBgeNJwzrmqqrQjKBieNJxzbvjwtCMoGJ40nHPOJeZJwznnXGKeNJxz7vTT046gYHjScM45/0R4Yp40nHPO755KzJOGc84tWJB2BAXDk4ZzzrnEPGk459ywYWlHUDA8aTjnXEND2hEUDE8azjk3bVraERQMTxrOOXfppWlHUDA8aTjnnEvMk4ZzzrnEPGk459z8+WlHUDA8aTjnnEvMk4ZzzlVXpx1BwfCk4ZxzLjFPGs455xLzpOGcc5dcknYEBWOXtANwzqXr9tuhvh4qKmDSJOjfP+2IUuCfCE+sV1xpSCqXZJI6dTZLUo2kazuzzUIhKSPpvLTjcF1n3rzwd+rUcKI9dWr43r7W5TuV0tK0IygYia40JA0HLgE+BQwFXgX+DFxqZsu7Lry8sdQAi83sK1mLXwSGAf/p5M1NAt7o5DYLxThgbdpBuK7R0gITJoTnzc1v/TthAqxYsZNdcaxYkXYEBaPdKw1JewLzgVHAScBewInAB4B5ksq7MsAkzGyzmb1sZps6ud1VZramM9vsLJL6dWX7Zvaqma3rym249MyaBZva+N+yaRPMnNm98bjCkWR46jrgTeBwM3vAzF4ws7nA4XH5da0V8w3nSJohaU7Wa0k6X1K9pBZJiySdmLPOxZKel7RB0suSftXaFnAocGYcjrI4NPW24SlJh0h6XNJ6Sa9Iuib7QBtjvV7S5ZL+I2mlpKsk9cmpc23W64yk70iaLul1ScslfSMn9kpJD8Xt/lvSpyQ1Szq5rR3cuo9i26/E+jdLGpATy//FGF8FHonL3y/pbklrYh9+I+k9edq+IO7L1yR9X1IfSdPiOi9LuiAnprcMT0maKqku9utVSfdI2iWr/BRJS2J5naRzcvblNtd33au+Hta2cR25di0sW9a98aRu7Ni0IygY20wakoYARwLX5Z51xtfXA5+UNLgD2/we8EXgTOD9wBXAdEmfjts8BjgPOAPYGzgKeCKu+zXgMeBmwnDUMMLQVG7cw4G/AE8CH4rbOyFuK9vngE3AR4CvAGcD/9tO/OcAi4CxwJXADyQdGLfbB5gV2zwAOJkwrPeOdtqEkAz3Aw4DjgEmxPaznQgIOBj4gqRhwN+AxcD+hEReBNyVfcAGDgH2BMYDXwLOJwwvvgM4CJgGfF9S3h9Kjsn4OuBSYJ+4nb9mlZ8OXA5cDIwEvg5cQHgP213fdb+KChg4MH/ZwIEwYkT3xpPYkCEg5X8MGbL97dbWdl6MvVx7Z3p7Ew5SS9soXxLL92brgb1NkgYC5wITzOzhuPg5SfsTksjdwB7ACuBeM3sDeIEwPIaZvSZpI7DOzF7Oajd3U2fENs4wszeBpZK+SUhOF2UlwCVmdnF8XhcPfocBv9lGN+41s9arj59JOiuu8xhwBOGgOMHMXoqxnUO8KmjHZuAUM2sGFscz/19KutDMWs8JnzOzr2f1+7vAU2Z2QdayLwCrgGq2vievAWea2WbgaUlfB0rN7Misvn8T+BiQ73/P+wjzG3fF4brngaeyyi8CzjezP7TGKen7hPfh2gTrbyFpCjAFoKysjEwmw5o1a2hsbKSqqora2lqKioooLS2lrq6OiooKGhsbaWpq2lJeXFxMSUkJ9fX1VFZW0tDQQHNz85bykpISBg0aRCaTYeTIkWQyGVpaWraUDx06lH79+rF8+XJGjRpFXV0dmzdvZvTo0SxcuJBh8VfeVqxYwZgxY1i0aBF9+/alsrKSxYsXU1ZWxsaNG1m5cuWWNgcMGEB5eTlLly6lvLw89T6VldVx4IGbue++gxk/voaGhtCn0tIVLFs2hmHDFvHooz2wT/vtR9Vdd+V/nyZOZPPDD2/X+/SRW27h0ZNO6nHvU5r/9tpkZm0+gA8DBnymjfJJsXxMfF0DXJtTZwYwJz4fF+uvBZqzHhuAf8c6740HleXAL4HjgHdktZdvG+Wx3er4eiZwa06dvWKdD2a1Mz2nzi3xwJZ3W0AGuDBnnYeAn8bnXwNeyCnflZAQTt7Gfp4B/C1nWUWeeG/OqXM3YaK+OedhwAlZbd+TZ73bcpY9Dvwgp6/nxeeDgH8SbjS4jTC3NSiWvStub11ODOuBDe2tv61HVVWVua7zxBNmYFZUZCaFv8XFYXmPBdtXtiPt7qSA+Zbn/2V7VxrPxAPCB4A/5SkfSRiKeS6+fpNw5ZFt16znrUMmRxOuILK9AWBmL0rah3D2fjjwI+ASSR+2rWfc7VGMO5/s5bl3Rhntz/Nsa51tbbcz5Pa/DyEB5Ls19pWs5/liTtx3M1sjaSxhmOsI4ELgcknjCAkRwrDXox1d38z8dzZTMm5c+Dt9epjDGDFiJ/6chktsm0nDzFZJ+itwhqRrLGteQ9JuhCGlWWb2Wlz8KmGeIdt+hLNWCMNZG4A9zOzBbWx3PeFgeHcc5ngZ+ChwL7AR6NtOv5YA/yOpj4XhKQhj9xuB+nbW3RFLgeGSSrMOhtUku+FgtKSBWYnxANqPdwHwP8DzFobyuoyFO9MeBB6UdAmwEjjKzG6Q9BJQYWa/6uj6wA1dGbdr3+TJaUfgCkmSu1fOJIzX3y/pO4SrjwrgMsLZ6llZdR8EfixpIvBvYCphuCkDW844rwKuUpiI+Bth4vYA4M14ADo5xvU4YZjjf+N2nonbyAD7K9zq20wYv891PWFS+3pJPwFGAN8nDDV15W2k9xH6fUu882gAcDXhaqy9K5BdgJviPEVpjPfGdq6urgNOB34n6UpC0h5BSCRft066XVjSUYT3/G+E/f0xwpBT61zXNML8ThNhgn1Xwo0Cw83sigTrO5eul15KO4KC0e4ZsJk9Rzhb/hdwK+GgPZcwFDXGsiakgZuyHo8QDuqzcpq8iHCQOS+2eR/hbqHWIa4mwt1ODxPuCjoGmBTjALiKcAa+hHCQfF+emF8CPkm4c2phjOc3wLfa6++OiFc1nyXclfQEYY7kMkLCWN/O6g8R9sdcwj57kHCX07a210C4AnuTcDfSvwiJZEN8dJYm4DPA/cDThPfuNIs3M5jZL4BTgc8TJrgfJkxmP5dkfedS53dPJaYw39HBlaSvEuYajjOzOzs9ql5E0n6ExFVtZnn/ZSp8/mR3MzuqG0Pr8aqrq22+/6Jal5JgOw4B6RkyBFavzl82eDCsyjfwkEDB7YiuJ6nWzN721Uzb9eEqM/uZpFeA90u618xadjjCXkLSZwkT1s8Q7uq6mnD2vSDFsJzrHbY3KbhOs92fyDWz33dmIL3IIMKH8t4LrCbcKnuObc8lnXPO9TD+NQ6dLN5B1OZdRG2sc3LXROOcS2T69LQjKBi94qvRnXNuh0yZknYEBcOThnPOvf2riFwbPGk455xLzJOGc865xDxpOOfcUf4RqaQ8aTjn3OzZaUdQMDxpOOfc0UenHUHB8KThnHNz5rRfxwGeNJxzznWAJw3nnHOJedJwzjn/arjEPGk459wN/gOSSXnScM65qVPTjqBgeNJwzjmXmCcN55xziXnScM65u+5KO4KC4UnDOeeqqtKOoGB40nDOueHD046gYHjScM45l5gnDeecc4l50nDOudNPTzuCguFJwznn/BPhiXnScM45v3sqMU8azjm3YEHaERQMTxrOOecS2yXtAJxzLnXDhr1tUUsLzJoF9fVQUQGTJkH//inE1sN40tgGSe8BfgV8FNjNzJRySM65rtDQ8JaX8+bBhAmwaROsXQsDB8KZZ8K998K4cSnF2EPs8PCUpBmSLD7ekLRM0lWSBnZGgF0hxnpsgqrnAaXAGODtpyKuQySdLKk57Tice5tp07Y8bWkJCaOpCZqbw+8zNTeH1xMmwPr1aQXZM3TWnMb9hIPqCOA7wBnAVfkqStpFUqGcse8F1JrZM2b28vY0UGD9dW7ndOmlW57OmhWuMPLZtAlmzuymmHqozkoaG8zsZTN70cxuB24DPgMgaZqkxfEssx7YAAyU9D5JsyStiY+ZkspaG8xa7yRJGUnNkm6W1E/SGZJelNQo6WpJfbLWy8R1fx3XeVnSednl8ekd8Yqj9fVbxOX/DXwh1psRlyeN+y39bWMb+0q6S9JrMdbHJI2OZX0kXRT7uUHSIkn/nbVueYzreEkPSWqR9KSkD0oaJelRSWsl/V3Snp2wX/tJulLS8tjuPEmfyCofH+M5TNLjktZJmi9pbGs5cHN871uvTKfl2y/Opam+PgxJ5bN2LSxb1r3x9DRddfdUC7Br1us9gcnAccB+hAPpn4B3Ax8HPkYYBvpTzll5OeHAfRRwTFz/TmAcMAE4Dfgq8Nmc7Z8LLAXGApcAl0uaFMtaRyRPJ1wdtTVCOY5wBfX7WO9rMbYkcef2920XtJJKgb8DBhwRY70O6BurfA34BnABMBqYBcyUNCanqUuBK4EPAU3A7cDPgG8D+wP9gZ/mrFNOx/frzcChsV+jgVuA2ZL2y2n7CuCbsT+NwG1x3zwKnA2sI+zPYbRxNepcmioqwhxGPgMHwogR3RDEkCEg5X8MGdINAbSt0yfCJe1POLA8kLW4H/B5M3sl1jmCcDCtMLNMXDYZeBY4jHCwhnAAPcXMXgMWS/or4cA13Mw2AkslPUI4eP8xa3uPm9ll8XmdpHGERDLTzF6Nx/embQ05xXobgJbWeh2I+y39bcOZwFrguNgXgLqs8vOAq+KVG8DFkg6Jy0/Mqne1mf05xvIjYDZwjJnNjcuuBa7N2XaH9qukCuAEoNzMXohtXCvpcGAqYTiy1UVZ2/4uITEON7Plkl4Lu7bt/S5pCjAFoKysjEwmw5o1a2hsbKSqqora2lqKioooLS2lrq6OiooKGhsbaWpq2lJeXFxMSUkJ9fX1VFZW0tDQQHNz85bykpISBg0aRCaTYeTIkWQyGVpaWraUDx06lH79+rF8+XJGjRpFXV0dmzdvZvTo0SxcuJBh8U6bFStWMGbMGBYtWkTfvn2prKxk8eLFlJWVsXHjRlauXLmlzQEDBlBeXs7SpUspLy/vMX2Cg6mpqelVfdqe92ncQw8xr6aGAQMGcPDB5Rx00FKefrqcQYPWUFLSSG1tFVVVtWzeXMRHPlJKTU0X92m//Rh1xx35+zRxIitqarr8fWqTme3QA5gBbAKaCWfUm4GZwNBYPg14Lmeds4AX87S1HDgra71/55RfBzySs+x3wO+zXmeA7+bU+SKwKuu1Accm6NscYMZ2xP1cgrb/DNzWRtl/xRgPy1n+PWBBfF4e6xyYVT4uLts7a9kn47Ldtne/Eq5ELL7H2Y83gHtinfGxzrCsNvaMy8bG1ycDzUn/bVVVVZnrWiGHO5s//y0vn3jCrLjYrKjITAp/i4vD8m6xrTemm940YL7l+X/ZWVcafyOcHb4BNJjZGznluSOEigeTfLKX57ZjbSzrS/dIGncbI6Jva6s9+baVu+yNPGX5lmUPRXZ0v/aJr8flqdeSIB7/EKnr2aqrw21S0bhx4S7cWbPCHMaIEf45jVadlTTWmdmzHai/BBguqdy2DvOMIMwPLOmEeA7I83pp1us32L5E05lxLwBOlNTPtg5PAWBmr0tqAA4CHswqOmg7ttMZniQkufdYHHraThvpvgTv3A4ZMAAmT047ip4nrTPA+4GnCJOkVZKqCXdcLeCtB8ntdYCkCyXtLel04AvANVnlGeAwSe+RNDiluK8HioDfSxonaS9JJ2RNdP8QOC8uq4zzAwcDP+rgdnaYmdUR+jlD0rGSRkiqlnRe1g0GSWSA/pKOkLS7pN26JGDnXJdJJWnE8bLPAK8CNcBc4GXgM7FsR10NfJBwhvw94GIz+0NW+dcJk7wvxjrdHreZvQQcQpg0nxvj+CphfgjCHU8/BH4ALCbcyXSMmS3syHY60SmEO6h+ADxNmO85BHg+aQNm9ijwc+A3hH14fueH6dx2uOSStCMoGOqcY3TPofD5imvNzG/nLHDV1dU2f/78tMPo1aS3DOW7nmLIEFi9On/Z4MGwalWXhyCp1syqc5f7BKVzzpWWph3BW61aFbJ5vkc3JIxt8aThnHMrVqQdQcHodd9ya2blacfgnHO9lV9pOOfc2LFpR1AwPGk451xtbdoRFAxPGs45N2VK2hEUDE8azjl3441pR1AwPGk455xLzJOGc865xDxpOOfcSy+lHUHB8KThnHN+91RinjScc27ixLQjKBieNJxzziXmScM551xinjScc2769LQjKBieNJxzzj8RnpgnDeeck9KOoGB40nDOOZeYJw3nnHOJedJwzrmjjko7goLhScM552bPTjuCguFJwznnjj467QgKhicN55ybMyftCAqGJw3nnHOJedJwzjmXmCcN55wzSzuCguFJwznnbrgh7QgKhicN53Zyt98O/+//hb/r16cdTUqmTk07goKxS9oB7Owk7Q68CnzMzGpSDsftRObNC3+nToW1a2HgQDjzTLj3Xhg3Lt3YXM/V5Vcakj4kabOkR7p6W9tD0gxJfr+d26m0tMCECeF5c3MY0m9uhqamsHynveJw7eqO4anTgeuBUZJGdsP2HCCpX9oxuJ5r1izYtCl/2aZNMHNm98aTurvuSjuCgtGlSUPSAGAycCPwB+CLeeocIOlBSWslvSbpAUmlsUySvi7pGUkbJC2XdEXWusMl/VbS6vi4W9LeWeXTJC2WdJqkFyS1SPpTHBJC0jTgJODTkiw+xrfRl3GS7pX0H0mvS/q7pANz6pikKZLuiP1ZJunEPO3USlov6Ungwwn2Y42kn0v6SVZffyipT1adTOzvTZKagNvi8kmSFsX996Kkb0tbvwc6a71fS2qW9LKk83K2/z5JsyStiY+Zksqyyt8r6U5JqyStk/S0pOOTvk+u+9XXhyGpfNauhWXLujee1FVVpR1BwejqK41jgefN7J/ArcAXJO3aWihpP2Au8CzwUeAA4PdsnWu5HLgIuAL4AHAc8GJcd7e47nrgUOBAYAVwfyxrVQ6cCPw3cDiwN3BTLLsqbu9+YFh8PNpGXwbFPhwM7A8sBP7cmoCyXAzcCewH/A64SdIeMeaBwN3AMqAa+GaMIYnPEd6vA4GpwBTg7Jw65wJPx7a/JakKuAOYCYyO27sQ+Eqe9ZYCY4FLgMslTYoxC/gT8G7g48DHgFLgT1nJ53pgt1j2gRhXU1w/6fvkulFFRZjDyGfgQBgxonvjScWQIeF3NCQYPnzrcymUuby6eiL8NMKBFuAhYB0wEfhjXHY+8JSZZf9s1lIASUXAOcDZZtZ6kH8WeCw+Px4QcIpZuMla0lRgJXAUIRkADAC+YGYvZNV5WNLeZvaMpBZgg5m9vK2OmNmD2a8lfRU4BjgS+HVW0a1m9utY5yLga4RE8zzhwN8vxtwMLJZ0WdY+2pYVwFmxr09LqiQc7K/OqvOQmf0gK8bb4rJL4qK6eIZ/AfCzrPUeN7PLsuqMi23PJCTa/YAKM8vEdicT3ovDCAl3D+CPZvZUbOO5rLaTvk+tMU8hJETKysrIZDKsWbOGxsZGqqqqqK2tpaioiNLSUurq6qioqKCxsZGmpqYt5cXFxZSUlFBfX09lZSUNDQ00NzdvKS8pKWHQoEFkMhlGjhxJJpOhpaVlS/nQoUPp168fy5cvZ9SoUdTV1bF582ZGjx7NwoULGTZsWHhDVqxgzJgxLFq0iL59+1JZWcnixYspKytj48aNrFy5ckubAwYMoLy8nKVLl1JeXp56n8rK6jjwwM3cd9/BjB9fQ0ND6FNp6QqWLRvDsGGLePTRwupTh9+nIUPY+Pe/s3LlSsZ/7GPUzJ27tU/HH0/5Tv5vr01m1iUPYC9gE1Catewy4C9Zr5cAl7Wx/v6AAXu3UX5dbL855/EmcGGsMw14IWe9XYHNwMT4egYwJ0F/hgLTgTrgtbitzcC3suoYcELOes8D58bn1wB/yymviOuN38a2a4Bf5Sw7LK73X/F1Brgkp84C4P/lLDs8z3rfzanzRWBVfH4W8GKemJYTklhr/TcICf17QFVH3qe2HlVVVea6zhNPmIFZUZGZFP4WF4flOwXI/zzf650QMN/y/L/syiuN04C+wAvZQ+gQxsDN7MXW121o7/cX+xCGiI7PU7aqQ5EmcwthiOYcwoF2A/AA4coh2xs5r42tw4Bd/ZuSuaPUitvPJ+lHYNttw8x+Keke4FOEpPSopCvMbBrd/z65hFpvq50+PcxhjBgBkyZB//7pxpWK009PO4KC0SVJQ9IuhAnmC4Hc21lvBU4Bvks4E/54G80sIRyYDwOeyVO+ADgB+I+ZNW0jnOFZSQrCFUwf4jAYsJGQ3NpzEOHM+m4ASe8mzIF0xBLgJEkDzaz1AH9AwnU/LEnxDKB1vQYze72d7R2Us+wgYLmZrclalhvDAWzdP0sI+7Dctg5PjSDMayxpXcHMlgM3ADdIuoAwLDeN5O+TS8nkyWlH0AP4J8IT66qJ8E8DuwM3mtni7AfwW+DUeOfPD4EPSbpB0n6S9ol3Or0vHtR+Alwh6RRJFZL2l/TluI3bgFeAOyUdKmlPSYdI+lHOnTktwC2SxsS7nX4O3G1mrYkoQ7gdeB9Ju2dP1OeoA06U9P445v9bQsLpiNsJQzU3SfqApCOAbydctxT4cYzzWOAbhOGubfkRcGi8O6pS0ueArwM/yKl3gKQLJe0t6XTgC1lt3w88BdwmqUpSNWHfLwAeBIh3dR0paYSkMYR5ntaEkvR9ci49fvdUYl2VNL4IzDWzxjxldxAmTg83s4WE4Yx9gX8AjxOGMVqHeC4EriTcQbWUMIFeBmBm64BDCHci3UG4a+gWYDCwOmt7GcIBfjbhILeMcKXT6sbY9nzCJ7M/2kafTgWKgNrY3k2x7cQsTH4fRbiDawHhzqkLEq5+G+GK6PEY8y9pJ2mY2QLCHWfHAIuB78fHtTlVrwY+CDxJmJO42Mz+ENsw4DOEfVNDuBPqZeAzWVc9fQgT60uA+whJ4qS4ftL3ybn0LFiQdgQFQ1v/3/c+Cp/DONbMRqUdy46QVAMsNrPcW2U7o+0McK2ZJb31t9tUV1fb/Pnz0w6jV5N24i94HTIEVrdx3jJ4MKzauafcJNWaWXXucv/CQufczmnVqpAxzWDYsK3PzXb6hLEtnjScc66hIe0ICkavThpmNq3Qh6YAzGx8VwxNxbbLe+LQlHPdatq0tCMoGL06aTjnXCKXXpp2BAXDk4ZzzrnEPGk455xLzJOGc875rd2JedJwzjmXmCcN55yrfttn2FwbPGk455xLzJOGc865xDxpOOfcJZe0X8cBnjScc84/Ed4BnjScc660NO0ICoYnDeecW7Ei7QgKhicN55xziXnScM65sWPTjqBgeNJwzrna2rQjKBieNJxzbsqUtCMoGJ40nHPuxhvTjqBgeNJwzjmXmCcN55xziXnScM65l15KO4KC4UnDOef87qnEPGk459zEiWlHUDA8aTjnnEvMk4ZzzrnEPGk459z06WlHUDB2STsA53ZmLS0waxbU10NFBUyaBP37px3VTsg/EZ6YJ41I0r7AzcCHgJfNrDzdiFxvN28eTJgAmzbB2rUwcCCceSbcey+MG5d2dDsZCczSjqIgpDY8JWmGJIuPTZJekPR/kganFNL3gHXAvoD/l3VdqqUlJIymJmhuDser5ubwesIEWL8+7Qidyy/tOY37gWFAOXAacDRwfUqx7AX83cwyZvbq9jQgqV8nx9RlCinW3mjWrHCFkc+mTTBzZvfG41xSaSeNDWb2spktN7N7gd8BE7IrSDpF0hJJ6yXVSTpHUp+s8r0k1cTyf0s6SlKzpJOTBiHJgP2Ai+OVz7S4fLSk+yW1SFoVr47embXeDElzJF0gaTmwvI32SyT9RtLy2Na/JJ2SU+cQSf+Isb8m6XFJo2LZOyXdKmll7OcySWdnxy/p2Jz2MpLOy6lzpqSZktYCl0vqK+mXkp6LcT0j6fyc/dvax69JeknSakk3S9otq44kfT2uvyH284qs8uGSfhvXXS3pbkl7J31/eqP6+jAklc/atbBsWffGs9M76qi0IygYPWZOQ9II4EjgjaxlpwPfBb4K1AKjgBtjnWvjwW0WsBo4ENgN+Anwjg5ufhhQA8wBrgKa40Hxr8A8YH9gSNz2TcAxWeseCrwWY1cb7fcHFgBXAq8DhwPTJb1gZg9I2gW4E/gl8DlgV2AssDmu/z1gNHAUsJJwZfauDvYR4BLgW8B5gBFOGl4C/gd4NfbzBqAxxtLqYGBFjPu9wO+BOqA1MVwOfBk4F/hbjO1DAHE/zgUeJeyrjXH790saaWbrtqMfBa+iIsxhNDe/vWzgQBgxovtj6nGGDIHVq/OXDR4Mq1Z13rZmz+68tnq5tJPGkZKagb6EAyuEA0+ri4DzzewP8fVzkr4PnAFcSziIvR/Y08xeAIhn4A93JAgze1nSJqDZzF6O7ZwOFAGfN7M1cdkUYK6kvczs2bj6euBUM9uwjfZfAn6YtegGSR8HTgAeAP4LKAZmm1l9rPN0Vv09gCfN7In4OtOR/mX5nZn9ImfZxVnPM5LGxriyk8brwJfNbBOwVNIdwGHAFZKKgHOAs83splj/WeCx+Px4QjI9xSzMNEqaSkh+RxES0BZxH08BKCsrI5PJsGbNGhobG6mqqqK2tpaioiJKS0upq6ujoqKCxsZGmpqatpQXFxdTUlJCfX09lZWVNDQ00NzcvKW8pKSEQYMGkclkGDlyJJlMhpaWli3lQ4cOpV+/fixfvpxRo0ZRV1fH5s2bGT16NAsXLmTYsGEArFixgjFjxrBo0SL69u1LZWUlixcvpqysjI0bN7Jy5cotbQ4YMIDy8nKWLl1KeXk5++67hoMOauSRR6qoqqplzZoiGhpK2WefOl55pYK9926kpqbr+wQHU1NT0yl96vT3qayMQQsW5O/TxIkMXbKk096ng668kr9fcEHX96kH/NtL2qc2mVkqD2AG8CBhLmE08FPgbqBvLH8X4Wx4HdCc9VhPGNYC+BrwQk67uxLO0E/uYDyLgWlZr68GHs6p0y+2PTGrD3MTtN0X+DbwT8JZfDPhjPverDo3x77dTUic780q+ySwFniKcCV0aE77BhybsywDnJdT56Q8sX0JmE+40mgGNgB1Oe/TPTnrXAr8Mz7fP7a9dxt9vw7YlPMeNgNvAhdua79VVVVZb/bEE2bFxWZFRWZS+FtcHJZ3F+i+bXXYtoLr7MB79I5IBzDf8vy/TPtKY51tPWM/S9JcwtXFNLbOt3yJMLSRT1vDQZ1BhINhPtnL2xiZfovzgK8TktwiwkHzcmDolgbNTpH0Y8Iw10TgMkmfMbN7zOwvkvYgJI/DgLsl3WFmrfMixtv3xa554nhLrJL+F/hxjO9RwhXFmcBnc9Z7I+d169AWebabqw+wkHDFkasTxxcKz7hx0NAQJsWXLQtDUv45DdfTpZ00cl0K/EXSDWbWIOkloMLMftVG/SXAcEnvNbMX47L96ZwJ/iXAqZIGWRyeAj4S217awbYOIgw93Qph4hioBJqyK5nZU4SriSsl/QU4Cbgnlv0HuBW4NZb9RtKXLAyLvUqYlyG2/+7s1+3E9biZXZu1bkUH+7aEcHVyGPBMnvIFhOGu/5hZUwfb7vUGDIDJk9OOwrnk0r576i3MrAb4F/CduGgacH68Y2ofSaMkfUHShbH8fsLY/68kjZF0IHANYThkC0kPZN/Nk9BthDPzX8W7qA4BpgMzs66OkqoDDpN0kMKHCK8F9syKb09J35f0EUl7SPoY8EHCARlJ35X0GUl7SxoJTAKW2dZ5lAeBMyVVS/oQYUgpyZ3+dcBYSZ+MbV9EmKxOLCbUnxDmN06RVCFpf0lfjlVuA14B7pR0aOzrIZJ+tLPfQeV6EP9gX2I9KmlEVwNflLSHhUnbU4HPE87AHyZMkj4HYGZvEoZS+gCPA78i3GmUOyldQbIz7y0s3NXzCcIk9ROEu5sei/F01PdiG38h3F20lnAwbbWOcOVxB+FAfkssvzKWbwAuI+yDR4BBhM+0tPo6sIxwB9gfgF8QJprbM50wEX074S6xcuBHHesaABfGWC8iXIX9ESiDLfvxkBjfHYQkfwswmHDXm3Ppu+GGtCMoGLJemGHjHVlfMbMZacfitl91dbXNnz8/7TB6tR797Rndecttj94R6ZBUa2bVuct72pyGc84FnZkUXKfpicNTzjnneqheeaVhZkVpx+CcKyB33ZV2BAXDrzScc66qKu0ICoYnDeecGz487QgKhicN55xziXnScM45l5gnDeecO/30tCMoGJ40nHPOPxGemCcN55zzu6cS86ThnHMLFqQdQcHwpOGccy4xTxrOOTesQ1+CvVPzpOGccw0NaUdQMDxpOOfctGlpR1AwPGk459yll6YdQcHwpOGccy4xTxrOOecS86ThnHP+s8KJedJwzjmXmCcN55yrrk47goLhScM551xinjScc84l5knDOecuuSTtCAqGJw3nnPNPhCfmScM550pL046gYHjScM65FSvSjqBgeNJwzjmX2C5pB+Cc67laWmDWLKivh4oKmDQJ+vdPO6ouMHZs2hEUDE8ark2SFgN/MLNpacfiut+8eTBhAmzaBGvXwsCBcOaZcO+9MG5c2tF1stratCMoGD48tQ2SZkiak3YchULSyZKa047D7biWlpAwmpqguRnMwt+mprB8/fq0I+xkU6akHUHB8KThnHubWbPCFUY+mzbBzJndG0+Xu/HGtCMoGJ40OkDSaEkPSHpd0hpJT0n6WCzbVdJPJTVI2iDpRUnfz1o3I+m8nPZqJF2b9bqfpCslLZe0VtI8SZ9oJ6a3tBGXveUKKdb5uaSfSFodHz+U1CerzlBJd0pqkfS8pFPzbOtcSf+Msb0k6ReSimPZeOBmYKAki49p29svl676+jAklc/atbBsWffG43oOn9PomNuBp4D9gU3AaKD1Qv0s4LPA8UAGKAP26WD7NwMVwGRgOfApYLakcWb21A7G/jlgBnAg8EHgRmAFcHUsnwHsARwOrAOuAcpz2ngTOBtYFuv+LD4+Dzwayy6PfQBoHarqyn65LlBREeYwmvMMNg4cCCNGdH9MqRsyBFavzl82eDCsWtW98aTEk0bH7AFcZWZPx9fP5pTVAQ+bmQEvEA6kiUiqAE4Ays3shbj4WkmHA1OBM3Yw9hXAWTG2pyVVAucCV8fnnwQOMrNHYjwnEZLDFmb246yXGUnnA3dKOsnMNkp6LVSzl7e3X5KmAFMAysrKyGQyrFmzhsbGRqqqqqitraWoqIjS0lLq6uqoqKigsbGRpqamLeXFxcWUlJRQX19PZWUlDQ0NNDc3bykvKSlh0KBBZDIZRo4cSSaToaWlZUv50KFD6devH8uXL2fUqFHU1dWxefNmRo8ezcKFCxk2bFjYoStWMGbMGBYtWkTfvn2prKxk8eLFlJWVsXHjRlauXLmlzQEDBlBeXs7SpUspLy/vMX2Cg6mpqXlbn4YNW8T++/flqacqGT16MS++WEa/fht597tX8swzVQwdWsvjj/fMPm3P+1T9738zv6Zm2+/TfvtR9MMf5u/TxInU1tT0qD7t6L+9NpmZP9p4EM6+52S9nga8ATwIfBvYN6tsLNAIPANcB3wa6JNVngHOy2m/Brg2Pj8OMMLZefbjDeCebcS4pY1txF0D/CqnzmFxe/8F/DewGdg1p86LwLSs1x8H7iNcLawhXJEYUBrLTwaac9rYrn6ZGVVVVea6Vsjx+T3xhFlxsVlRkZkU/hYXh+W9zl13tV9nWztrW2UFCphvef5f+pVGB5jZNEm3Ec7KPwFcIulLZnaTmS2QVA4cSTi43gI8JekIM3uTMLSjnCZ3zXreh3BwHUc4oGZr2UZY7bWbRO76b68g7QHcTRjWupiQIMcCvwH6bWPV7e2XS9m4cdDQECbFly0LQ1K99nMaEyeGW8RcuzxpdJCZPUO4mvippP8DTgNuimVrgDuAOyTNAP4B7EUYtnoVGNbajqT+wL7Ak3HRk4SD93vMbG4HQnpLu9F+hCubbB+WpHgGAXAA0GBmr0taSji4jyMOqUl6H5D9hTzVhORwjpltjnWOytnGRqBvzrLt7ZfrAQYMgMmT047C9SR+91RCkgZIuk7SeEnlkj4MHAQsieXnSjpB0khJexEmfV8nDOVAGNL6XFz/A4REs+WKwMzqgNuAGZKOlTRCUrWk8yRN2kZoDwKflDRR0j6Srgbem6deKfDjWOdY4BuEyW7M7N/AX4Hpkg6UNIYwxJV9JfAM4d/L2ZL2lHQCYeI7WwboL+kISbtL2m0H+uWc64E8aSS3GRhMGHb6NzALeIwwmQxhjP8bwBPAAmAM8EkzWxfLryAc4O8E7gX+HutlO4Vwp9EPgKeBOcAhwPPbiOumrMcjhPmCWXnq3Ua4CnicMMT0S2LSiE4GnosxzibcKZZpLTSzfwJfi/1dQrjCesstxGb2KPBzwpDVq8D5O9Av57rP9OlpR1AwZD6O1+tJqgEWm9lX0o6lI6qrq23+/Plph9GrST6Un9hOdsutpFoze9uPp/uchnPOJcmevSwpbC8fnnLOOZeYX2nsBMxsfNoxOOd6B7/ScM65o3LvHndt8aThnHOzZ6cdQcHwpOGcc0cfnXYEBcOThnPOzfHfWkvKk4ZzzrnEPGk455xLzJOGc875x+IT86ThnHM33JB2BAXDk4Zzzk2dmnYEBcOThnPOucQ8aTjnnEvMk4Zzzt11V9oRFAxPGs45V1WVdgQFw5OGc84NH552BAXDk4ZzzrnEPGk455xLzJOGc86dfnraERQMTxrOOeefCE/Mk4ZzzvndU4l50nDOuQUL0o6gYHjScM45l5gnDeecGzYs7QgKhicN55xraEg7goLhScM556ZNSzuCguFJwznnLr007QgKxi5pB+Cc2z4tLTBrFtTXQ0UFTJoE/funHZXr7Xpl0pCUAa41s6vSjgVAUjUwD9jTzDIph+N6gXnzYMIE2LQJ1q6FgQPhzDPh3nth3Li0o3O9WcENT0l6l6TrJWUkbZD0iqQHJB2RdmzOdYeWlpAwmpqguRnMwt+mprB8/fq0IyxA8+enHUHBKLikAfwR2B/4IlAJHAX8BSjpyo1K6iOpb1duo9BI6pd2DDujWbPCFUY+mzbBzJndG4/buRRU0pBUDBwMfNPMHjCz581snpldZWa/zaneX9J0Sa9LWi7pGzltnSvpn5LWSnpJ0i9i+63lJ0tqlvQpSYuBjcBISf0kXRnbXCtpnqRP5LR9pKSnJa2X9DAhubXXt36SLpf0fLyCWibprKzyQyQ9Htt8RdI12QdtSTXxCuxySf+RtFLSVZL6dGAb75d0t6Q1cf3fSHpPVvkMSXMkXSBpObBcUrkkk3SMpPskrZO0JPvKT9Kukn4qqSFu90VJ329vn7j86uvDkFQ+a9fCsmXdG0+vUF2ddgQFo6CSBtAcHxMltTfldw6wCBgLXAn8QNKBWeVvAmcDHwAmE65efpbTRn/gO8BU4P3A88DNwKFxndHALcBsSfsBSHov8CfgPmBMbPMHCfp2C/AF4FxgJOFKqim2OZxwNfUk8KFYdgJwRU4bnwM2AR8BvhL7978JtzEM+BuwOO6Lw4Ei4K7sxBP7/kHgSOCwrOWXAT8F9iPM3/xWUlEsOwv4LHA8sHeM6d8J9onLo6IizGHkM3AgjBjRvfH0WkOGgJT/MWRI2tGlpqAmws1sk6STgRuBKZKeBB4B7jCzx3Oq32tm18bnP4tn1IcBj8W2fpxVNyPpfOBOSSeZ2ZtxeV/gq2ZWCyCpgnCwLjezF2KdayUdTkgsZwBfBl4AzjIzA56WVAn8v7b6JWlvwgH1k2b217g4+3zxDGAFcEaMbamkbwLTJV1kZutivSVmdnF8Xifp9Njn3yTYxpeBp8zsgqy4vgCsAqqBJ+Li9cCpZrYh1imPy68xs9lx2bcIyWkM8HdgD6AOeDjukxeAR9vYF1OAKQBlZWVkMhnWrFlDY2MjVVVV1NbWUlRURGlpKXV1dVRUVNDY2EhTU9OW8uLiYkpKSqivr6eyspKGhgaam5u3lJeUlDBo0CAymQwjR44kk8nQ0tKypXzo0KH069eP5cuXM2rUKOrq6ti8eTOjR49m4cKFDIufHl6xYgVjxoxh0aJF9O3bl8rKShYvXkxZWRkbN25k5cqVW9ocMGAA5eXlLF26lPLy8h3q00c+UsmHPtRA377N1NZWUVVVS2NjCWvWDGLffTMcfPBIHn88WZ/gYGpqalLvU9rv03igpqbmrX165ztZ89BD+fv0uc9R8eKLPbpPO/o+tcnMCu5BuAI4Arg4HnwM+FZWeQa4MGedh4CfZr3+OOFqYDmwBlgX2ymN5ScDbwB9s9Y5LtZpznm8AdwT68wCfpWz7cPieuVt9Od/gM3AO9oonwncmrNsr9jmB+PrGmB6Tp1bgLsSbuPu2I/cvhlwQqwzA5ibs155rHNg1jLFZZPi67FAI/AMcB3waaBPe+9zVVWVufyeeMKsuNisqMhMCn+Li8PyjoCuia/gXHLJ25dta+fsBDsOmG95/l8W1JVGKzNbTzjg3wd8V9IvgGmSrjKzjbHaG7mrEYfjJO1BOEjeSEg8jYQD22+A7MndDWa2Oet1n9jOuDztt8S/2o4utbdO60E4n+zlbfY5wTb6EPbJeXnKXsl63sZo+tZtm5lJam0TM1sQr0iOJCTrW4CnJB1hW6/qXAeMGxe++WLWrDCHMWKEf05jh/gnwhMryKSRxxJCX/oTJqzbU01IDue0JgVJRyVY70nCwfc9ZjZ3G7EcI0kxWwMc0E67CwgH2I8Bf81TvgT4H0l9sg6yBxH6Wp8g7iTbWEC4GnnezHKTzw4zszXAHcAdkmYA/yBcLdV19rZ2FgMGwOTJaUfRS5SW+vdPJVRQE+GSSiQ9KOlESR+UtKek44DzgQfM7PWETT1D6PvZsY0TCJPG22RmdcBtwAxJx0oaIala0nmSJsVqPycM2fxY0j6SjgW+1E67zwC/B34R70LaU9LBkj4fq1wPlALXSxop6dPA9wkfYFzXRrMd3cZ1wDuB30n6cOzb4ZJukDQoyTbaonCn2gkx9r0INxG8ThgadC59K1akHUHBKKikQRhj/wfwNcIcxb+Ay4HbeetdQttkZv+MbZxLOIs/jfzDMvmcQriD6gfA08Ac4BDCnVVYmCCfRBiKeYpwF9c3E7T7hdiPn8Z2ZxAO4pjZS8AnCXdOLQRuIgylfSthzEm20QB8lHBX2V8J+/Y6YEN87Ig1wDcIk+kLCBPkn0ya8JxzPYe2jqA417NUV1fbfP+kbpeSwifKd3pVVVBb+9ZlQ4bA6tX56w8eDKtWdX1cKZJUa2Zv+wBLb5nTcM657ZebMKDXJ4XtVWjDU8451/mmTEk7goLhScM55268Me0ICoYnDeecc4l50nDOOZeYJw3nnHvppbQjKBieNJxzLt/dUy4vTxrOOTdxYtoRFAxPGs455xLzpOGccy4xTxrOOTd9etoRFAxPGs45558IT8yThnPOaXt+O23n5EnDOedcYp40nHPOJeZJwznnjkrya88OPGk45xzMnp12BAXDk4Zzzh19dNoRFAxPGs45N2dO2hEUDE8azjnnEvOk4ZxzLjFPGs45Z5Z2BAXDk4Zzzt1wQ9oRFAxPGs45N3Vq2hEUDE8azjnnEvOk4ZxzLjFPGs45d9ddaUdQMHZJOwDndmYtLTBrFtTXQ0UFTJoE/funHdVOqKoq7QgKhicN51Iybx5MmACbNsHatTBwIJx5Jtx7L4wbl3Z0O5nhw/2224R8eKqLSPqQpM2SHkk7lp5C0smSmtOOoydoaQkJo6kJmpvD8aq5ObyeMAHWr087Qufy86TRdU4HrgdGSRq5o41J2nXHQ3I9xaxZ4Qojn02bYObM7o3HuaQ8aXQBSQOAycCNwB+AL+aUf1jSAknrJT0p6VOSTNL4WD4+vv6UpCckbQQ+oeB8SfWSWiQtknRiTtvDJf1W0ur4uFvS3lnl0yQtlnSSpIykZkk3S+on6QxJL0pqlHS1pD5Z6/WTdKWk5ZLWSpon6RNZ5a0xHybpcUnrJM2XNLa1HLgZGBjrmaRpnbnfC0l9fRiSymftWli2rHvj2emdfnraERQMTxpd41jgeTP7J3Ar8IXWKwVJRcAc4GmgCjgf+GEb7VwJfAfYF3gc+B4hAZ0JvB+4Apgu6dOx7d2AucB64FDgQGAFcH8sa1UO/DdwFHAMcBxwJzAOmACcBnwV+GzWOjfHNicDo4FbgNmS9suJ+Qrgm8BYoBG4TZKAR4GzgXXAsPi4qq0d2NtVVIQ5jHwGDoQRI7o3nl5pyJDw29/5HkOGvLWufyI8MZ8I7xqnEZIFwEOEA+VE4I/A54C+wBfNrAX4l6TLgNvytDPNzO4FkDQQOBeYYGYPx/LnJO1PSCJ3A8cDAk4xC7N6kqYCKwkJ4vdxvb6xzmvAYkl/JSSE4Wa2EVga52I+BvxRUgVwAlBuZi/ENq6VdDgwFTgjK+aLzGxu3PZ3gb/HdpdLeg0wM3u5rR0naQowBaCsrIxMJsOaNWtobGykqqqK2tpaioqKKC0tpa6ujoqKChobG2lqatpSXlxcTElJCfX19VRWVtLQ0EBzc/OW8pKSEgYNGkQmk2HkyJFkMhlaWlq2lA8dOpR+/fqxfPlyRo0aRV1dHZs3b2b06NEsXLiQYcOGAbBixQrGjBnDokWL6Nu3L5WVlSxevJiysjI2btzIypUrt7Q5YMAAysvLWbp0KeXl5ey77xoOOqiRRx6poqqqljVrimhoKGWffep45ZUK9t67kZqaru8THExNTU2n9KnHvU/vehc89lj+Ph13HGXPPrulTwefcw4PX3NNz+9TN75PbTIzf3TiA9gL2ASUZi27DPhLfH4N8LecdSoAA8bH1+Pj6z2y6oyLy9YCzVmPDcC/Y53r4rabcx5vAhfGOtNa62e1fR3wSM6y3wG/j8+Pi9vObfcN4J6cmIdltbFnXDY2vj4ZaE66L6uqqqw3e+IJs+Jis6IiMyn8LS4Oy7tLyOG91LY6l1vWq3fE9gHmW57/l36l0flOI5zJvxBGZYBw9o+k98bnSe/tyx71bh1KPBp4IafeG1l1FhKuOHKtylO/lbWxrG9Wu0ZIXLn1WtqIpbWN1vVdjnHjoKEhTIovWxaGpPxzGq6n86TRiSTtApwEXEiYt8h2K3AKsJQwxzHAwvAUwP4Jml9CuKrYw8webKPOAsIw0n/MrKmD4W/Lk4Rk9x6LQ0/baSNbE5EDBgyAyZPTjsIRh31c+/wMsHN9GtgduNHMFmc/gN8CpwK/ATYDN0p6f5wX+FZcv80rEDNbQ5g4vkrSqZL2kjRG0pfiPACEeZFXgDslHSppT0mHSPpR9h1UHWVmdbHtGZKOlTRCUrWk8yRN6kBTGaC/pCMk7Z4zOe9cehoa0o6gYHjS6FxfBOaaWWOesjuAPYADCENMHyCcwf+QMM8A4a6nbbko1j0P+BdwH+Hup+cAzGwdcAiwLG7vacJdToOB1dvXpS1OIdxB9YPY7py4reeTNmBmjwI/JyTOVwl3jjmXvmnT0o6gYCjMd7g0SfpvYBYw1Mz+k3Y8PUV1dbXNnz8/7TB6NakXf3vGkCGwuo1zpcGDYVXWNF+v3hHbR1KtmVXnLvc5jRRIOolwNfAiMAr4MTDbE4ZznSg7KbhO40kjHe8GLiV8wO1lwmcsLkg1IuecS8CTRgrM7AeEuQHnXE/gw6CJ+US4c865xDxpOOdc9dvme10bPGk455xLzJOGc865xDxpOOfcJZekHUHB8KThnHP+ifDEPGk451xpadoRFAxPGs45t2JF2hEUDE8azjnnEvOk4ZxzY8emHUHB8KThnHO1tWlHUDD8q9FdjyXpVTrwex29xO6Af9txz7Mzvi97mNm7chd60nCuB5E0P99vGLh0+fuylQ9POeecS8yThnPOucQ8aTjXs9yQdgAuL39fIp/TcM45l5hfaTjnnEvMk4ZzzrnEPGk4lzJJ0yRZzuPltOPamUg6RNJdkl6K+//knHLF96lBUoukGkkfSCncVHnScK5n+DcwLOsxOt1wdjpFwGLga0BLnvLzga8DXwXGASuB+yQN6rYIe4hd0g7AOQfAJjPzq4uUmNmfgT8DSJqRXSZJwNnA983sj3HZSYTEMRmY3p2xps2vNJzrGUbEoZHnJP1W0oi0A3Jb7Am8B7i3dYGZtQB/Az6SVlBp8aThXPoeB04GPgmcTjhAPSqpJM2g3BbviX9fyVn+SlbZTsOHp5xLmZn9Jfu1pH8Ay4CTgKtTCcrlk/uhNuVZ1uv5lYZzPYyZNQP/AvZOOxYHQOtcU+5VxVDefvXR63nScK6HkdQf2Bfw3yDtGZ4jJI4jWhfE9+hg4NG0gkqLD085lzJJVwGzgRcIZ68XAQOBW9KMa2ciqQjYK77sA7xP0hhglZm9IOnHwLclPQ3UAd8BmoHbUwg3Vf7dU86lTNJvgUMIP/TzKvAP4CIzW5JqYDsRSeOBuXmKbjGzk+Ntt5cAU4HBhJsXzjSzxd0WZA/hScM551xiPqfhnHMuMU8azjnnEvOk4ZxzLjFPGs455xLzpOGccy4xTxrOOecS86Th3E5E0vj4I0Pjs5bVSKrp5jiK448aje3O7bod558Id86dkcI2iwkfllsOLEhh+247edJwbifnnzxvm6R3mNmGtOPoSXx4yrlulvWb4PtKukfSWkkvSDolln9e0tOSmiXNlVSRp43TJT0lab2k/0j6paQhOXXeJel2Sa9LapL0K8IZfm5bbxmektRf0jWSFscYXpY0W9K+OeudHPtxgKTb4nYaJP00fqFfW/0vJ3wJIMCNWb+LfnJWnUmS/iFpXYz9Dknvy2knI+nXko6XtDTux/mSDtpW/3LWn5GnP4fE7TURvi4ESbtIujC+LxtiP3+0rX72Vp40nEvPHcDdwGeAWuAmSZcDXwa+CZwC7EPOl+JJ+j5wPXA/MBH4BnAk8BdJfbOqzgSOAr4F/C+wCfhZgrjeAQwCvgd8OsbTH/iHpHw/OnQrUA9MAv4POBO4cBvtr4h1Aa4ADoyPu2P/vgT8EVgCHEv4vqdRwEN5fpP7YMJvd18U+9gXmCOpOEE/23IbIakdS3gfAH5N+JLC2wn75Argi7HuzsXM/OEPf3TjA5hG+PGeL2QtG0w4qDcC/5W1/KxYd4/4uhzYDFyc0+ZHY73PxNdHxNfH59T7S1w+PmtZDVCzjXj7ArsBa4BzspafHNu6NKf+HKCunX1QHtc9LWd5EfAacFOe+huBs7OWZYDVwOCsZdWx3cnt9S+uPyNPf67JqXdw7vsVl38uLh+T9r+p7nz4lYZz6dnyi31mthpYCfzDzF7PqvN0/Pve+PcIwgjBbXHIZBdJuxCGUV4nfFsuhDP3zYQz9my/TRKYpP+R9HgcotkErCUc0PfJU/3unNeLgPflqZfEgcB/8fb+LSfsi0Ny6j8W9132ttmB7QPMynl9JCFh/TEnptbfDM+NqVfziXDn0rM65/XGNpZBGB6C8HsbAM+20Wbr74oPA1ab2Rs55e3+0pyko4HfEX7P41LgP8CbwJ+z4si2Kuf1BsIQ1/Zo7d/9bZTn7p+3bNvMNoRvMc8bZ1K5P341FOhH+P2MfHaq33L3pOFcYWmMfyfw9gNodvkKYLCkXXMSx7sTbON44FkzO7l1gaRdgSFtrtF5WuM/mfCTt7nWbEeb6wlXL7na6k/u70U0xjYObqN+w3bEVLA8aThXWO4jnPW/z8zu20a9xwhzEcfw1iGp4xNsYzfCkFS2z8f2OkvrbawDcpY/SkgMe5lZZ/1y4fPAMZL6mdlGAEmHECb7k/grcAHwTjN7oJNiKlieNJwrIGZWL+lK4FpJ+wAPEc6C30uY7/iFmc01s/sk/R2YLml34BnC3UWjEmzmr8BnJF1DmNSuIkzIN3ViV14hnMEfL+mfhDmT58ysUdI3gOskvYsw7/MaMBw4lDCh3dGfWP0tMIVwd9oMYE/g3Nhuu8ysRtJvgD9Iuhp4gpC4y4FPAReYWV0HYypYPhHuXIExs28RDoKHAL8H7iScCa8mJIdWkwjzEFcQ5ih2Ab6SYBM3ApcRksxswi2mR5PwIJuEmb0JnEa4a+x+YF7cBmY2nXAr8T6E23n/Qphb2QVYuB3bmgt8CfgwoT+nACfSsSR4IuGut2MJ+/sPhH35DAnmiXoT/7lX55xzifmVhnPOucQ8aTjnnEvMk4ZzzrnEPGk455xLzJOGc865xDxpOOecS8yThnPOucQ8aTjnnEvMk4ZzzrnE/j89OK91g5w8xAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, - "metadata": {}, + "metadata": { + "needs_background": "light" + }, "output_type": "display_data" } ], @@ -1402,9 +1313,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [] }, @@ -1426,10 +1335,8 @@ }, { "cell_type": "code", - "execution_count": 33, - "metadata": { - "collapsed": true - }, + "execution_count": 34, + "metadata": {}, "outputs": [], "source": [ "a_ec = ExpectedContextModelTransformer(\n", @@ -1441,10 +1348,8 @@ }, { "cell_type": "code", - "execution_count": 34, - "metadata": { - "collapsed": true - }, + "execution_count": 35, + "metadata": {}, "outputs": [], "source": [ "a_ec.fit(parl_corpus, selector=lambda x: x.meta['is_answer'] and (x.meta.get('arc_tfidf__n_feats',0)>0),\n", @@ -1453,7 +1358,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 36, "metadata": {}, "outputs": [ { @@ -1463,159 +1368,45 @@ "CLUSTER 0 0\n", "---\n", "terms\n", - " cluster_dist\n", - "index \n", - "keep_* 0.268190\n", - "clearly>* 0.278435\n", - "reviewing_are 0.279912\n", - "looking_* 0.296509\n", - "happen_* 0.302775\n", - "point_is 0.303575\n", - "looking_are 0.329829\n", - "consider_will 0.330174\n", - "look_* 0.331673\n", - "want_not 0.339141\n", - "\n", - "context terms\n", - " cluster_dist\n", - "index \n", - "instruct_* 0.478614\n", - "report_* 0.488451\n", - "at>* 0.497210\n", - "intervene_* 0.501445\n", - "given>* 0.513234\n", - "intervene_will 0.528936\n", - "endorse_* 0.568409\n", - "given>that 0.593500\n", - "agree_go 0.616590\n", - "to_* 0.636640\n", - "\n", - "\n", - "utterances\n", - "> 1989-02-15a.307.5 0.096 Government involvement in manufacturing is the last thing that the manufacturing industry wants . In fact , there is absolutely no reason why something should not be made from scratch , providing that it is competitive and is of the required quality . One has only to look at the production of Nissan cars in a green field site to see that if the product is competitive and meets a demand , it will immediately take a piece of the market .\n", - "> 2006-10-24b.1374.0 0.099 My hon Friend is quite right to point to the advances that have been made in terms of the extra investment that has gone into cancer treatment , and the increased number of cancer consultants and clinical nurse specialists . That has made a real difference to the outcomes for cancer patients . Of course , the cancer networks look at the referral patterns and I shall certainly make sure that the cancer network that oversees his area is aware of the points that he has made .\n", - "> 2011-02-14b.698.2 0.101 Given my political career , I have given up giving advice to anybody , so the best thing the shadow Secretary of State can do is forge his own way and I will look to see how I can dismantle that .\n", - "> 2002-07-22.659.2 0.103 I do not know the details of the application from my hon Friend 's constituency , but if he writes to me I shall look at it and ensure that it is dealt with fairly . A total of £ 581 million is being invested through the new opportunities fund via local education authorities , but the funding is conditional on the facilities being used by the community , too . That is important . Many people have been critical of investment in sports facilities that have not been available to the wider community . There is a change in culture and attitude among many in education—those who must ensure that those centres of excellence can be used by the whole community . If my hon Friend wants to write to me , I shall look into the questions that he has raised .\n", - "> 2008-06-02b.490.2 0.103 Those are rather unusual circumstances . I am aware that my hon Friend has encountered them in her constituency , and I encourage her to write to me with the details of the cases , if she does not mind . I am happy to look into them a bit further . However , it has always been part of the regulations applying to the child support system that for a maintenance calculation to be made and enforced , all the parties have to be habitually resident in the UK. I think that that is not so in the case that she has encountered , and there would therefore be difficulties in pursuing the matter , but still , if she gives me more details about it , I will look further into it for her .\n", - "> 2014-12-04a.407.2 0.106 The hon Gentleman is right to highlight the issues around the Snake pass . I know there are safety concerns there , and I have obviously used the road myself . He knows that this Government have at their very heart the idea of a northern powerhouse . We are championing the interests of the north of England , perhaps to a greater degree than any previous Government . To that end , I shall look at all the specific questions that the hon Gentleman asks on timing , on detail and on planning , and I shall be more than happy to address them directly with him .\n", - "> 2013-09-12a.1155.0 0.107 Clearly , the hon Gentleman has strong views on that particular private Members ’ Bill but , as I stated , it is important that we consider these matters in the round . The Procedure Committee has rightly devoted a substantial amount of time to considering this matter and the House should look at its proposals—for example , on the process of balloting Members—so that it can come to a sensible decision .\n", - "> 2009-11-04c.855.6 0.108 When there was a Labour council , Glencraft got a huge amount of support from it . I have heard that the grants are being cut by the SNP - Liberal administration in the area . We will look at what we can do , but it is clearly important in a recession to help those people who are most in need of support , and that includes the disabled members of our community .\n", - "> 2004-05-26.1564.6 0.108 I am , of course , always prepared to meet an all - party group on the issue . I will look at it in the light of what has been said by the previous Prime Minister , but I give no guarantees that we will change the decision . A decision was taken at the time , which was endorsed by this Government as well , but I understand the very strong feelings that there are , not least among the families of the pilots . I am very happy to meet an all - party group , but that has to be done without any prior commitment or guarantee as to what the outcome would be .\n", - "> 1995-04-24a.508.6 0.108 Those cases sound very worrying indeed . Of course I will look into them specifically , immediately following Question Time and I will provide the hon Gentleman with a written answer . That is not the kind of thing that I wish to hear . Many hundreds of thousands of people receive very good treatment from the NHS in Wales and we must make sure that that is true of everyone . Like the hon Gentleman , I am rather worried by that story .\n", - "\n", - "context-utterances\n", - ">> 1998-05-19a.714.1 0.317 As my hon Friend knows , 510 jobs are being lost in my constituency following Mitsubishi 's decision to close its colour television factory at Haddington— [ Interruption . ] I wish that Conservative Members would take issues like this seriously ; it is a very serious matter for my constituents . Following my hon Friend 's visit to Haddington on 6 April—the day of the announcement—can he report on the progress made by the task force in creating new jobs for people in Haddington and in finding new enterprises for the factory that has been closed ?\n", - ">> 2010-12-21a.1314.1 0.321 Treasury Ministers rightly assert that the vulnerable should be protected and that those with broader shoulders should bear the greatest burden . With that in mind , will Ministers report on the effectiveness of the initiative announced in September to bear down on the estimated £ 42 billion of tax that the wealthy do not pay each year ?\n", - ">> 1998-05-07a.850.0 0.334 May I welcome my right hon Friend 's trail - blazing child care policies ? Will he confirm that his departmental research shows that 90 per cent . of employers make no provision whatever for child care assistance ? Are we sure that Departments and agencies are that good in this respect ? Will he make certain that Departments and agencies become model employers and give a lead in policies on child care ?\n", - ">> 2010-11-02a.753.8 0.340 Does the Minister agree with me and the 1999 Shields report that children 's accident and emergency , paediatrics and maternity units should be kept together in one hospital ? Will he postpone the move of the Burnley children 's ward to Blackburn until the new GP commissioners are installed and can make an informed decision ?\n", - ">> 2009-02-26b.356.5 0.360 DEFRA has a great little scheme that funds some pilots through which farmers and land managers manage their land in ways that hold back flood waters . I have been to see a scheme at Seighford , near Stafford , with Matt Jones from Staffordshire Wildlife Trust , who is the project manager . Some really low - tech solutions are successfully keeping back flood waters at times of pressure . Will my right hon Friend be talking to Sir Michael about the assessment of those pilots , with a view to seeing whether they could be rolled out more widely ? If he does , can he report back to MPs who have pilots in their area ?\n", - ">> 1984-07-19a.508.5 0.360 Will the Prime Minister recognise that she is totally misrepresenting the position of the talks , the NUM , and the response of the NCB when she makes the claim that no will accept pit closures in any circumstances ? The cost of the strike is now nearly £ 2,000 million . When will she intervene to help a settlement instead of interfering to hinder a settlement ?\n", - ">> 2007-07-03b.800.5 0.386 May I take the Foreign Secretary back to a commitment given by his predecessor but one after the French and Dutch votes two years ago ? The hon Member for Vauxhall ( Kate Hoey ) asked him : \" Will he assure me that one matter that he would certainly submit to a referendum is the creation of a Foreign Minister and a European President ? \" The then Foreign Secretary replied : \" Those points are central to the European constitutional treaty , and of course I see no prospect of their being brought into force , save through the vehicle of a constitutional treaty.\"—[ Official Report , 6 June 2005 ; Vol . 434 , c. 1001 . ] The new treaty does indeed include both a Foreign Minister and a President . According to the Government , that would make it a constitution , so why is there no referendum ?\n", - ">> 2011-07-12c.151.5 0.388 Is the Minister as concerned as I am about the failure of Suffolk primary care trust to act to invest in proper buildings and infrastructure for the Gipping valley practice in Claydon in my constituency ? That practice has been forced to treat patients out of a portakabin for 15 years now . Will he agree to meet me , and local doctors and patient groups , to see whether we can find a solution to the problem ?\n", - ">> 1980-02-21a.655.4 0.391 In her meeting with Mr. Vance this afternoon , will the Prime Minister report that there are some of us who have had in - depth meetings with the Indian High Commissioner and other Asians who are not apologists for the Soviet Union but who see Afghanistan in various tones of grey rather than black and white ? They believe that that issue certainly does not constitute a reason for not going to the Olympics .\n", - ">> 1985-04-22a.610.7 0.391 Is my right hon Friend aware that the prospect for further jobs in Wales is inextricably linked with small businesses ' prospects of prosperity ? Is he further aware that those businesses want access to venture capital more than anything else ? Will he report on the development of the welcome addition to that access of the Welsh Development Agency 's institutional and venture capital unit ?\n", - "\n", - "====\n", - "\n", - "CLUSTER 1 1\n", - "---\n", - "terms\n", - " cluster_dist\n", - "index \n", - "in>* 0.101296\n", - "there>* 0.120411\n", - "on>* 0.139847\n", - "for>* 0.140881\n", - "was_* 0.141678\n", - "said_* 0.153782\n", - "am_sorry 0.156208\n", - "made_* 0.157317\n", - "is_not 0.159876\n", - "what>* 0.160643\n", - "\n", - "context terms\n", - " cluster_dist\n", - "index \n", - "is_on 0.284732\n", - "is_as 0.358130\n", - "is_there 0.378568\n", - "is_also 0.391161\n", - "so>* 0.391639\n", - "is_for 0.393613\n", - "is_now 0.414324\n", - "is_said 0.416279\n", - "want_* 0.421141\n", - "is_what 0.423311\n", - "\n", - "\n", - "utterances\n", - "> 1999-02-04a.1071.2 0.059 In answer to the hon Gentleman 's first question , the number of abattoirs is less than the fingers on one hand . [ Interruption . ] I said less than the fingers on one hand .\n", - "> 1997-12-18a.471.2 0.063 I rather share my hon Friend 's view . I recall very recently sitting at dinner next to someone who said that he had been a Euro - sceptic since 1992 , to which my response was , \" Too late . \" What changed my mind was 25 years , two referendums and the experience of the British people , who clearly chose , by a democratic decision , to remain in the European Union . In my view it is now the case that all our interests are irrevocably bound up with our membership of that body , and it is absolutely essential for Britain 's future to make the best that we can of our membership and to work co - operatively with our European Union partners . The classic example of that is economic and monetary union itself . I do not know whether the right hon Gentleman is suggesting , as he seemed to imply , that the Conservative party has now decided that it does not want to participate in economic and monetary union at any point , but I can tell him that that would be disastrous for British business an\n", - "> 1983-03-17a.342.10 0.065 If UHT milk in Europe has to comply with the same hygiene regulations as are required here , there is no way in which it will undermine our market . At present , UHT milk in France is selling in Paris at 19 to 19½p , compared with fresh milk on the doorstep here at 21p . There is no way in which that could compete with or undermine the doorstep delivery service in this country .\n", - "> 2012-01-11b.159.7 0.067 What the Prime Minister said stands . There are no current plans for the MOD to reduce the core police role relating to the security of our national institutions , such as nuclear safety at Coulport or Faslane . National security , including the security of our defence installations , is our highest priority . The reason we have so many MOD police in Scotland in the first place is our huge defence imprint , which would be put at risk immediately if the country were to become independent .\n", - "> 1984-08-01a.325.4 0.067 There is not a balance of payments deficit . I am sorry to bring the right hon Gentleman the good news .\n", - "> 2003-04-10.394.2 0.068 The causes of truancy are complex and varied . Different practices are adopted in different schools and areas to tackle that . The evidence on setting is mixed . There is evidence of successful setting in certain subjects at certain stages , and other evidence that shows successful mixed - ability practice . What is important is that we enable head teachers to study the evidence that is available and to make the best decision on setting and mixed ability for the children in their schools .\n", - "> 1982-06-10a.388.8 0.069 The right hon Gentleman wrote to my right hon Friend the Prime Minister . He has made a serious point that deserves a serious and proper answer . First , it is important to say that at no time have we demanded unconditional surrender . We have made it clear that if the Argentine forces in Port Stanley announced their wish to withdraw to the mainland they would be given time to do so with dignity and good order . That is their opportunity . Before their invasion we made it clear to the Argentines that we were prepared to discuss matters affecting the future of the islands with them . Even after their invasion we were prepared to do so if they promptly withdrew . However , their response was to insist on ultimate transfer of sovereignty to them as a pre - condition . That was not acceptable . Since our landings on the islands and the losses that we have incurred , it is unthinkable to negotiate about the future of the islands as if everything was as it had been before . As I am sure that\n", - "> 2010-10-11c.18.5 0.069 I am grateful to the hon Lady and am delighted to take up the invitation , as I have to many other youth centres and projects around the country ; she may come to regret that invitation . I am afraid that in this financial climate we have to think smarter about how we can provide services . In common with every Department and every other part of this Department 's work , the youth sector is under that scrutiny . My battle is to involve as many providers as possible from the voluntary sector , local authority and others in ensuring that we provide youth services to those most in need of them in the most imaginative way - with less money , because of the previous Government 's disastrous financial legacy .\n", - "> 2013-05-20b.902.1 0.069 I have said all along that we will keep this under review and talk to local authorities . The Opposition have not once apologised—they did not do so when in government , either—for the fact that , under them , house building fell to its lowest level since the 1920s and that there was more overcrowding . There are 1.5 million spare rooms and 250,000 people live in overcrowded accommodation . There were record levels under the previous Government . Why do they not say sorry for the mess they left housing in ?\n", - "> 2005-11-01b.721.3 0.070 It is not true that those people go to those countries at will—there is a proper procedure . However , under this sanction regime , as is the case under any sanction regime throughout the world , there is provision to allow members of the Zimbabwe Government to have visas when they are attending international organisation meetings , just as the United States has to allow all sorts of world leaders against whom they deploy sanctions to attend meetings of the United Nations in New York .\n", - "\n", - "context-utterances\n", - ">> 1988-04-20a.820.7 0.154 Does my hon Friend agree that it is not necessary for local authorities to wait for the timetable , and that as competitive tendering is a desirable development they should get on with it now on their own initative ?\n", - ">> 1985-01-09a.775.5 0.165 When will the Government recognise the appalling housing plight of so many people who need rented accommodation , as well as those tenants who are living in pre - war council dwellings that need to be modernised ? The Minister referred to the Labour Government . Is it not a fact that in 1978 , the last year of that Government , well over 107,000 housing starts were made in the public sector , compared to an estimated 40,000 last year ? This year the figure is expected to be even less . Why do the Government refuse to take action to help people who need somewhere to live ?\n", - ">> 2012-09-18a.780.2 0.189 Further to Question 6 , is there any indication that any prisoner has received an inappropriate sentence because of the failings of Applied Language Solutions , given that , as the Under - Secretary of State for Justice , the hon Member for Maidstone and The Weald ( Mrs Grant ) said , it has failed to fulfil 5 % of its bookings even after the improvements that she talked about ?\n", - ">> 1992-12-15a.281.2 0.192 Does my hon Friend recall that there was almost universal hostility from the teaching profession to the national curriculum when it was first introduced ? Does he recognise that there is now tremendous support for it in all schools , but that there is also some anxiety about key stage 3 , in not only English but technology ? Will he at least consider a pilot scheme for a year so that teachers can get hold of the necessary paperwork for the key stage 3 exam ?\n", - ">> 2012-04-17c.170.4 0.201 Further to Question 9 , is not the worst aspect of the demolitions the practice of punitive demolitions , which is based on the doctrine of collective punishment , and does that not directly contravene article 33 of the Geneva convention ?\n", - ">> 2005-01-26a.286.4 0.218 I add my praise to the organisers of the tsunami appeal event on Saturday night in Cardiff . When we consider that it took just three weeks to put that event together , it is testimony to what can be achieved with vision and focus . As for the 50th aniversary celebrations in Cardiff , is the Secretary of State aware that while the Millennium Commission has offered £ 1.3 million for those celebrations , to date the Welsh Assembly Government have offered no financial support ? Is the right hon Gentleman willing to have conversations with his opposite numbers and Rhodri Morgan to see that this omission , in my view , can be rectified ?\n", - ">> 1996-02-07a.323.5 0.218 Does my right hon and learned Friend agree that Britain 's initiative a few years ago in calling a special meeting of the Security Council to examine the reform of the UN was one of the best things that had happened for some time in the area ? Is he also aware that the planning of peacekeeping operations is remarkably amateurish and inefficient ? What new proposals is Britain putting forward on that front ? Does my right hon and learned Friend support the Canadian proposal for a small standby force to be available to the Secretary - General ?\n", - ">> 1993-02-17a.311.0 0.225 Is my right hon Friend aware that the OECD has forecast that Britain is likely to increase its share of world trade this year ? Is not one reason for that , as Jacques Delors said , that Britain has become a paradise for overseas investment and is not that because the Government have tackled the excessive power of the trade unions and refused to sign the job - destroying social chapter ? Is not that in stark contrast with the union - dominated Labour party , which seems to believe that only the state can generate economic growth—a view which not even the Russians believe nowadays ?\n", - ">> 1989-11-15a.340.4 0.226 With regard to the discussions that the Secretary of State has had , or will have , does not his conscience trouble him ? Is he not fully responsible for the destruction of the Scottish coal industry , in the stupid belief that nuclear energy is cheaper than coal ?\n", - ">> 1996-04-03a.383.1 0.228 As the Government will need the support of the all the other countries if there is to be any radical change in the workings of the European Court of Justice , will the Minister list those countries that support the Government 's aims ? Furthermore , on the working hours directive , is not the Government 's case completely undermined by the report that they commissioned which showed a clear link between long working hours and threats to health and safety ?\n", - "\n", - "====\n", - "\n", - "CLUSTER 2 2\n", - "---\n", - "terms\n", " cluster_dist\n", "index \n", - "welcome_* 0.174939\n", - "is_take 0.178166\n", - "indeed>* 0.204507\n", - "support_* 0.209341\n", - "is_important 0.217289\n", - "is_right 0.219323\n", - "agree_on 0.220261\n", - "be_should 0.225752\n", - "hope_is 0.229722\n", - "is_course 0.232044\n", + "welcome_* 0.173558\n", + "is_take 0.179574\n", + "indeed>* 0.206015\n", + "support_* 0.208702\n", + "is_important 0.218273\n", + "is_right 0.218688\n", + "agree_on 0.219922\n", + "be_should 0.227413\n", + "hope_is 0.230160\n", + "is_course 0.232897\n", "\n", "context terms\n", " cluster_dist\n", "index \n", - "agree_is 0.269454\n", - "agree_are 0.292272\n", - "however>* 0.294820\n", - "agree_with 0.305238\n", - "is_however 0.326743\n", - "seek_* 0.337037\n", - "agree_further 0.341428\n", - "agree_however 0.349094\n", - "agree_be 0.354631\n", - "seek_will 0.354900\n", + "agree_is 0.267424\n", + "agree_are 0.291674\n", + "however>* 0.294775\n", + "agree_with 0.306583\n", + "is_however 0.326577\n", + "seek_* 0.337093\n", + "agree_further 0.340146\n", + "agree_however 0.348032\n", + "agree_be 0.353457\n", + "seek_will 0.354214\n", "\n", "\n", "utterances\n", - "> 1992-02-05a.280.6 0.071 I entirely agree with my hon Friend . The House will know that 46 British inspectors have been involved in the process of inspection within Iraq . Certainly I pay tribute to them and to their colleagues from other countries . On the second part of my hon Friend 's question , yes , it is important to enhance the verification and inspection powers of IAEA. I hope that we shall succeed in doing that , especially with regard to special inspections of previously undeclared sites .\n", - "> 1990-12-11a.802.0 0.078 The hon Gentleman is absolutely right and I welcome his support . His party is not renowned for its determination to stand up to proposals emanating from the European Commission . I hope that we can derive some confidence from his words that the Liberal Democrats will agree with our efforts , supported by the CBI and other organisations , to resist those extremely damaging proposals .\n", - "> 2005-12-05b.599.0 0.078 I entirely agree with my hon Friend and I congratulate those who have been doing that work in his area . Where work has been done through the alcohol misuse enforcement campaign to clamp down on alcohol - related crime , the result has been a significant reduction in such crime . However , he is right to say that there should be no tolerance of organisations that repeatedly sell to under - age drinkers . I support the full use of the powers that we have given police forces and others to clamp down on the sort of morally unacceptable behaviour to which he has drawn our attention .\n", - "> 2013-02-25b.14.6 0.080 I agree with my hon Friend that that is extremely important . I believe that we will do what he asks , and if we do not , I am sure he will bring it to our attention . Since I first went to the Ministry of Defence nearly three years ago , he has been a doughty exponent of the need for the development of commercial and residential estates on old MOD sites . I pay tribute to him for his work on behalf of his constituents .\n", - "> 2008-02-05b.773.1 0.084 On the first point , my hon Friend is right about some sluggishness in PCTs in commissioning these services . That is why we have made it a tier 2 issue in the operating framework this year and increased funding by 11 per cent . On the second point , I pay tribute to the work that she too has done on fluoridation over the years . I entirely agree , as do the British Medical Association , the British Dental Association and every reputable scientist who has considered it , that extending fluoridation is the best way to close health inequalities .\n", - "> 2009-12-16b.959.5 0.088 I congratulate the Daily Record on its campaign against loan - sharking . It is important that we inform everybody that Government - funded money advice centres are there to help people , that in all areas there are loan - sharking investigation teams and that people can look to their credit unions for help . For many families , there is a lot of pressure at Christmas , so they should take advice and use credit unions .\n", + "> 1992-02-05a.280.6 0.072 I entirely agree with my hon Friend . The House will know that 46 British inspectors have been involved in the process of inspection within Iraq . Certainly I pay tribute to them and to their colleagues from other countries . On the second part of my hon Friend 's question , yes , it is important to enhance the verification and inspection powers of IAEA. I hope that we shall succeed in doing that , especially with regard to special inspections of previously undeclared sites .\n", + "> 1990-12-11a.802.0 0.077 The hon Gentleman is absolutely right and I welcome his support . His party is not renowned for its determination to stand up to proposals emanating from the European Commission . I hope that we can derive some confidence from his words that the Liberal Democrats will agree with our efforts , supported by the CBI and other organisations , to resist those extremely damaging proposals .\n", + "> 2005-12-05b.599.0 0.080 I entirely agree with my hon Friend and I congratulate those who have been doing that work in his area . Where work has been done through the alcohol misuse enforcement campaign to clamp down on alcohol - related crime , the result has been a significant reduction in such crime . However , he is right to say that there should be no tolerance of organisations that repeatedly sell to under - age drinkers . I support the full use of the powers that we have given police forces and others to clamp down on the sort of morally unacceptable behaviour to which he has drawn our attention .\n", + "> 2013-02-25b.14.6 0.081 I agree with my hon Friend that that is extremely important . I believe that we will do what he asks , and if we do not , I am sure he will bring it to our attention . Since I first went to the Ministry of Defence nearly three years ago , he has been a doughty exponent of the need for the development of commercial and residential estates on old MOD sites . I pay tribute to him for his work on behalf of his constituents .\n", + "> 2008-02-05b.773.1 0.086 On the first point , my hon Friend is right about some sluggishness in PCTs in commissioning these services . That is why we have made it a tier 2 issue in the operating framework this year and increased funding by 11 per cent . On the second point , I pay tribute to the work that she too has done on fluoridation over the years . I entirely agree , as do the British Medical Association , the British Dental Association and every reputable scientist who has considered it , that extending fluoridation is the best way to close health inequalities .\n", + "> 2012-01-25a.286.2 0.088 Yes , I most certainly do—2012 is the year to visit Northern Ireland , with the launch of “ Your Time , Our Place ” last week , before returning in 2013 for the UK city of culture . I pay tribute to my hon Friend for his sterling work in encouraging Members to donate to his window to commemorate Her Majesty ’s diamond jubilee . I did a quick ring - round of the Northern Ireland Office , and I am glad to say that I have donated—although I have not told my wife—the Secretary of State has donated and our Minister in the Lords has donated .\n", "> 1998-06-15a.15.6 0.088 My hon Friend is right . However , as we saw when I visited his constituency , the process can not be easy or immediate . There needs to be a commitment on the part of police and local authorities ; they need to win the support of the local community , and they need to listen to members of that community , who best know the type of crime that spoils their lives . A commitment to such a partnership , and to cutting crime , is essential , and I congratulate my hon Friend on the way in which he is encouraging that in his constituency .\n", - "> 2004-03-09.1367.1 0.088 Yes , I do . There are opportunities for all kinds of imaginative ways of running the railways better . Often , local circumstances dictate how best the railway should be run in that area , and a great deal can be done to tap the creative potential that is there to provide better service for customers .\n", - "> 2012-01-25a.286.2 0.089 Yes , I most certainly do—2012 is the year to visit Northern Ireland , with the launch of “ Your Time , Our Place ” last week , before returning in 2013 for the UK city of culture . I pay tribute to my hon Friend for his sterling work in encouraging Members to donate to his window to commemorate Her Majesty ’s diamond jubilee . I did a quick ring - round of the Northern Ireland Office , and I am glad to say that I have donated—although I have not told my wife—the Secretary of State has donated and our Minister in the Lords has donated .\n", - "> 2012-09-12a.263.9 0.089 I pay tribute to the hundreds of skilled workers in the hon Gentleman ’s constituency who contribute so much to United Kingdom and , indeed , international defence through the work that they do at Raytheon and elsewhere , and I agree that this is not the time to be putting that at risk . On the specifics of the Type 26 , it is clear that if Scotland were an independent country , the rest of the UK would be applying European Union procurement rules , which basically keep such contracts for the domestic market . We would therefore be locking ourselves out of the potential for millions of pounds - worth of work involving hundreds of jobs in Scotland , and that is not acceptable .\n", + "> 2009-12-16b.959.5 0.088 I congratulate the Daily Record on its campaign against loan - sharking . It is important that we inform everybody that Government - funded money advice centres are there to help people , that in all areas there are loan - sharking investigation teams and that people can look to their credit unions for help . For many families , there is a lot of pressure at Christmas , so they should take advice and use credit unions .\n", + "> 2007-01-10b.267.1 0.089 I warmly welcome the hon Gentleman 's remarks about David Ervine—and he is right to raise organised criminal activity , which underpins the remaining paramilitary activity in Northern Ireland and occupies my mind very much . We have the Organised Crime Task Force in Northern Ireland , which is doing a good job of bearing down on the problem . I am sure that the whole House will unite in the quest to ensure that organised criminal activity in Northern Ireland is eradicated .\n", + "> 2004-03-09.1367.1 0.089 Yes , I do . There are opportunities for all kinds of imaginative ways of running the railways better . Often , local circumstances dictate how best the railway should be run in that area , and a great deal can be done to tap the creative potential that is there to provide better service for customers .\n", "\n", "context-utterances\n", ">> 1996-04-24a.431.7 0.162 Does my hon Friend agree that , if multi - culturalism is about defending the rights of people of other faiths to worship freely and peacefully , that is something to which we should all subscribe ? However , did my hon Friend detect in the smearing attack on Christianity by the hon Member for Bath ( Mr. Foster ) the idea that multiculturalism means that the Judaeo - Christian tradition of this country is no more or less valid than any other tradition ? Is that not something that she and I should reject completely ?\n", @@ -1623,117 +1414,111 @@ ">> 1985-06-10a.633.9 0.174 I welcome the increase in the number of circuit judges . However , does the Attorney - General agree that there are still intolerable delays in the trials of serious cases in the Crown courts ? Is there not still a considerable need for the appointment of more circuit judges ? Does he also agree that it is the judges who carry much of the responsibility for speeding up the terrible delays which sometimes occur in the police force and in the DPP 's Department over the processing of cases quickly for trial ?\n", ">> 1985-11-25a.608.6 0.176 Is the Minister aware that there will be a general welcome for the increase in secondments ? However , does he agree with his hon Friend the Member for Chipping Barnet ( Mr. Chapman ) that the number is still tiny in relation to the size of the Civil Service ? What is the impediment ? Is it that there is such disparity in the terms and conditions of service that it is difficult to switch individuals backwards and forwards ?\n", ">> 1998-05-18a.596.4 0.179 I am certainly in favour of using the Select Committee system in the most effective way possible . However , does the right hon Lady not agree that , in her Government 's increasingly farcical handling of the arms to Sierra Leone affair , it was hardly a contribution to the effectiveness of Select Committees that , last week , during Business Questions , she should have referred to correspondence directed to the Chairman of the Foreign Affairs Select Committee that the House had not seen , but which—I need hardly add with this Government—the BBC had ?\n", - ">> 1993-07-05a.17.1 0.186 Does my hon Friend agree that the significant increase in judicial appointments in recent years from ladies and members of ethnic minority communities is greatly to be welcomed ? However , does he agree also that it is ludicrous for the Labour party to call for some kind of positive discrimination when what the British people need are the best judges ? Is not it absolutely right for the Lord Chancellor to continue to insist that judges will be appointed only on merit and does not the positive discrimination suggested by the Labour party lead Labour into the ridicule and contempt of the British people ?\n", - ">> 1997-02-10a.1.8 0.189 Is it not a good idea for cyclists to make use of the railway ? I understand that the Secretary of State has an honourable record on this in connection with work that he produced when he was a Back Bencher , which involved my hon Friend the Member for Newham , South ( Mr. Spearing ) . However , has not a new situation arisen with the railways ' fragmentation ? It has presented many blocks and problems , so that information to cyclists about moving throughout the system is difficult to obtain . Pre - booking is beginning to be required . There is the costs problem and there is no official monitoring of cyclists ' problems . Perhaps it is time for the Secretary of State to get on his bike and sort those things out .\n", - ">> 1995-06-13a.589.1 0.191 Does the Minister agree that any form of discrimination , especially age , is unacceptable ? However , is there not a danger that the slogan \" Too Old , Who Says ? \" could be undermined by Lady Thatcher 's latest efforts to undermine this discredited and dying Government ?\n", - ">> 2001-01-23a.783.4 0.193 It may not be strictly necessary to mention this , but I have a registerable interest in relation to such matters , which is recorded in the Register of Members ' Interests . The Secretary of State will , of course , have the support of all hon Members for the efforts that are being made to cause the talks to be successful , and he is right to applaud the efforts of President Clinton . However , does he agree that unless there is recognition of the right of return , as contained in United Nations Security Council resolution 194 , then the prospects for a lasting peace will be severely diminished ? Is it not time that the old people who hold in their hands the crumbling deeds of their houses and the receipts that they paid for property tax , should have a hope of returning to the homes from which they were driven or expelled all those years ago ?\n", - ">> 2001-03-13a.812.2 0.193 I welcome the objective of treating more people in their own homes . However , is the Minister not alarmed that social services budgets throughout the country are expected to finish the financial year more than £ 200 million overspent ? Although he has announced rises in the standard spending assessment for next year , social services directors expect next year to be even tougher . What hope is there that the services the Government talk about can be provided for people in their own homes , if social services departments struggle to meet even their existing commitments out of their existing resources ?\n", + ">> 1993-07-05a.17.1 0.185 Does my hon Friend agree that the significant increase in judicial appointments in recent years from ladies and members of ethnic minority communities is greatly to be welcomed ? However , does he agree also that it is ludicrous for the Labour party to call for some kind of positive discrimination when what the British people need are the best judges ? Is not it absolutely right for the Lord Chancellor to continue to insist that judges will be appointed only on merit and does not the positive discrimination suggested by the Labour party lead Labour into the ridicule and contempt of the British people ?\n", + ">> 1997-02-10a.1.8 0.190 Is it not a good idea for cyclists to make use of the railway ? I understand that the Secretary of State has an honourable record on this in connection with work that he produced when he was a Back Bencher , which involved my hon Friend the Member for Newham , South ( Mr. Spearing ) . However , has not a new situation arisen with the railways ' fragmentation ? It has presented many blocks and problems , so that information to cyclists about moving throughout the system is difficult to obtain . Pre - booking is beginning to be required . There is the costs problem and there is no official monitoring of cyclists ' problems . Perhaps it is time for the Secretary of State to get on his bike and sort those things out .\n", + ">> 1995-06-13a.589.1 0.192 Does the Minister agree that any form of discrimination , especially age , is unacceptable ? However , is there not a danger that the slogan \" Too Old , Who Says ? \" could be undermined by Lady Thatcher 's latest efforts to undermine this discredited and dying Government ?\n", + ">> 2001-01-23a.783.4 0.194 It may not be strictly necessary to mention this , but I have a registerable interest in relation to such matters , which is recorded in the Register of Members ' Interests . The Secretary of State will , of course , have the support of all hon Members for the efforts that are being made to cause the talks to be successful , and he is right to applaud the efforts of President Clinton . However , does he agree that unless there is recognition of the right of return , as contained in United Nations Security Council resolution 194 , then the prospects for a lasting peace will be severely diminished ? Is it not time that the old people who hold in their hands the crumbling deeds of their houses and the receipts that they paid for property tax , should have a hope of returning to the homes from which they were driven or expelled all those years ago ?\n", + ">> 2001-03-13a.812.2 0.194 I welcome the objective of treating more people in their own homes . However , is the Minister not alarmed that social services budgets throughout the country are expected to finish the financial year more than £ 200 million overspent ? Although he has announced rises in the standard spending assessment for next year , social services directors expect next year to be even tougher . What hope is there that the services the Government talk about can be provided for people in their own homes , if social services departments struggle to meet even their existing commitments out of their existing resources ?\n", "\n", "====\n", "\n", - "CLUSTER 3 3\n", + "CLUSTER 1 1\n", "---\n", "terms\n", " cluster_dist\n", "index \n", - "understand_* 0.129655\n", - "take_* 0.144926\n", - "believe_* 0.156162\n", - "given>* 0.158650\n", - "hope_* 0.171039\n", - "am_sure 0.189488\n", - "think_* 0.197868\n", - "at>* 0.209783\n", - "however>* 0.212377\n", - "given_* 0.217715\n", + "understand_* 0.130761\n", + "take_* 0.148076\n", + "believe_* 0.153739\n", + "given>* 0.159122\n", + "hope_* 0.169307\n", + "am_sure 0.190583\n", + "think_* 0.196396\n", + "at>* 0.207818\n", + "however>* 0.211507\n", + "given_* 0.215625\n", "\n", "context terms\n", " cluster_dist\n", "index \n", - "is_in 0.312343\n", - "in>* 0.358414\n", - "is_willing 0.373197\n", - "as>* 0.376415\n", - "is_that 0.389273\n", - "bearing>* 0.398627\n", - "is_important 0.412457\n", - "start_* 0.422291\n", - "therefore>* 0.455701\n", - "agree_not 0.466248\n", - "\n", - "\n", - "utterances\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "> 1993-05-17a.13.7 0.071 I take careful note of what my hon Friend says , as , no doubt , will colleagues from all parties here and in the other place who serve on the Ecclesiastical Committee , which is to meet later this afternoon and which is now the only possible source of delay . My hon Friend can be assured that the Ecclesiastical Committee will present to the House for his benefit a comprehensive summary of the arguments for and against the ordination of women , I believe with an endorsement to the effect that the measure is expedient .\n", - "> 1988-10-25a.168.1 0.074 With regard to the right hon Gentleman 's point about Piper Alpha , as he knows , that has yet to be decided . I think that there is a delegation to my hon Friend the Minister of State this afternoon to discuss the possible payment of costs on the inquiry . With regard to the IRA and the Criminal Injuries Compensation Board , I take note of his point and will pursue it .\n", - "> 2003-03-18.746.1 0.084 I take the very simple view—I think that my hon Friend shares it—that if we want more out of the national health service , we simply have to put more in . That is what the Government are committed to ; it is what the Conservative party opposes .\n", - "> 1981-06-17a.1005.11 0.088 The closure of schools , to which the hon Gentleman is perhaps referring , is in the first instance a matter for the local authority . We take the view that the closure of rural schools is of particular importance in the local area , that proper consultation must take place if a closure is planned , and that the distance between a primary school and another where closure is contemplated must not be so great as to impose a strain on the children or parents .\n", - "> 1984-01-23a.617.8 0.091 Of course . My hon Friend will understand that he need not tell me , the right hon Member for Pembroke , about the importance of the milk sector . Nevertheless , there must be adjustments and restraints on prices if the Community 's problems are to be resolved . One of our principal objectives is to ensure that any changes are on a non - discriminatrory basis and that Welsh producers are fairly treated in relation to producers in Europe as a whole .\n", + "is_in 0.311157\n", + "in>* 0.361146\n", + "is_willing 0.372766\n", + "as>* 0.374970\n", + "is_that 0.388252\n", + "bearing>* 0.400073\n", + "is_important 0.411733\n", + "start_* 0.422922\n", + "therefore>* 0.457628\n", + "agree_not 0.466130\n", + "\n", + "\n", + "utterances\n", + "> 1993-05-17a.13.7 0.072 I take careful note of what my hon Friend says , as , no doubt , will colleagues from all parties here and in the other place who serve on the Ecclesiastical Committee , which is to meet later this afternoon and which is now the only possible source of delay . My hon Friend can be assured that the Ecclesiastical Committee will present to the House for his benefit a comprehensive summary of the arguments for and against the ordination of women , I believe with an endorsement to the effect that the measure is expedient .\n", + "> 1988-10-25a.168.1 0.073 With regard to the right hon Gentleman 's point about Piper Alpha , as he knows , that has yet to be decided . I think that there is a delegation to my hon Friend the Minister of State this afternoon to discuss the possible payment of costs on the inquiry . With regard to the IRA and the Criminal Injuries Compensation Board , I take note of his point and will pursue it .\n", + "> 2003-03-18.746.1 0.085 I take the very simple view—I think that my hon Friend shares it—that if we want more out of the national health service , we simply have to put more in . That is what the Government are committed to ; it is what the Conservative party opposes .\n", + "> 1981-06-17a.1005.11 0.087 The closure of schools , to which the hon Gentleman is perhaps referring , is in the first instance a matter for the local authority . We take the view that the closure of rural schools is of particular importance in the local area , that proper consultation must take place if a closure is planned , and that the distance between a primary school and another where closure is contemplated must not be so great as to impose a strain on the children or parents .\n", + "> 1994-07-11a.654.6 0.091 As we indicated in the White Paper last week , we believe that the BBC should provide published objectives for each of its radio services and that the character of its services should not be changed without giving audiences an opportunity to comment on the proposals . I understand what the hon Gentleman says about the potential confusion that can arise .\n", + "> 1999-10-21a.572.4 0.091 I understand the strength of feeling that underpins the decision that Budgen has made on , I believe , apples and pears . It is selling British produce and not purchasing any more from France . There is a great deal of strong feeling in this country about the French behaviour , and some people take the view that while the French are imposing a ban on our beef we should not buy their products .\n", "> 1996-05-14a.758.1 0.091 I am sure my that hon Friend will welcome the fact that , especially in the London ambulance service , increased use is being made of paramedics both in ambulances and on motor cycles . I take his point that we must provide the best possible accident and emergency service for everyone . It is for clinicians to guide how that can best be offered in the circumstances . I am sure that my hon Friend welcomes the great increase in the number of accident and emergency specialist consultants .\n", - "> 1994-07-11a.654.6 0.093 As we indicated in the White Paper last week , we believe that the BBC should provide published objectives for each of its radio services and that the character of its services should not be changed without giving audiences an opportunity to comment on the proposals . I understand what the hon Gentleman says about the potential confusion that can arise .\n", - "> 1999-10-21a.572.4 0.093 I understand the strength of feeling that underpins the decision that Budgen has made on , I believe , apples and pears . It is selling British produce and not purchasing any more from France . There is a great deal of strong feeling in this country about the French behaviour , and some people take the view that while the French are imposing a ban on our beef we should not buy their products .\n", - "> 1980-12-04a.412.8 0.095 I am grateful to my hon Friend . I recall that at the meetings we had the farmers asked that , whatever conclusions we came to , we would give them the opportunity of expressing support for the possibility of a producer - financed eradication scheme . We are considering the details of that at the present time . The number of outbreaks this year is very similar to the number in the year before . There is no indication of the type of flare - up of the disease that had been feared in some quarters . I should like to eradicate every disease , but there is a priority in terms of public expenditure as to what we can eradicate . If producers are willing to finance an eradication scheme , obviously I must consider the proposal .\n", - "> 2011-11-09a.274.4 0.095 I am not aware of any such suggestions in the Electoral Commission report , but my hon Friend is correct to highlight the issues with the Scottish separatists ’ referendum that are causing such uncertainty—the franchise , the question and the timing . [ Interruption . ]\n", + "> 1984-01-23a.617.8 0.091 Of course . My hon Friend will understand that he need not tell me , the right hon Member for Pembroke , about the importance of the milk sector . Nevertheless , there must be adjustments and restraints on prices if the Community 's problems are to be resolved . One of our principal objectives is to ensure that any changes are on a non - discriminatrory basis and that Welsh producers are fairly treated in relation to producers in Europe as a whole .\n", + "> 1980-12-04a.412.8 0.094 I am grateful to my hon Friend . I recall that at the meetings we had the farmers asked that , whatever conclusions we came to , we would give them the opportunity of expressing support for the possibility of a producer - financed eradication scheme . We are considering the details of that at the present time . The number of outbreaks this year is very similar to the number in the year before . There is no indication of the type of flare - up of the disease that had been feared in some quarters . I should like to eradicate every disease , but there is a priority in terms of public expenditure as to what we can eradicate . If producers are willing to finance an eradication scheme , obviously I must consider the proposal .\n", + "> 1981-01-13a.842.0 0.095 We shall undoubtedly take note of all views that come to us . One factor that is involved is the tendency of education opinion to move back , I think rightly , to the idea of a balanced curriculum instead of single subject examinations . It is important that whatever examination we introduce has national currency as a passport that is understood throughout the country .\n", "\n", "context-utterances\n", - ">> 1983-07-05a.149.3 0.177 Is the Secretary of State aware that in school after school in inner London , PTAs are now fighting to retain teacher ratios and for increased expenditure on amenities ? Their problem is the shortage of financial help from the Government to ILEA. In view of the answers that his junior Minister has already given this afternoon , is he also aware that if there is any attempt to break up ILEA —and there have been attempts in the past—the people of London will know how to tackle the Tory Government ?\n", - ">> 1991-01-16a.841.1 0.191 In view of the perception of many members of the European Community that the United Kingdom is a bad member of that club , what efforts have the Government taken to publicise in those countries its first - class record in enacting legislation for 1992 ?\n", - ">> 2010-10-11c.22.1 0.198 In the wake of the Munro report , is the Minister as concerned as I am about the growing number of children being taken into care ? Does he agree that the best way in which to stop more of those personal tragedies is to invest in prevention programmes for babies and their carers in the earliest years ?\n", - ">> 1995-03-06a.2.3 0.201 Is the right hon Gentleman prepared to accept that confidence in the channel tunnel service is still fragile and that traffic from all parts of the United Kingdom is still dependent on that confidence being reinvigorated and assured ? In the light of recent disclosures , is he prepared to add to his exchanges and correspondence with me on the issues of fire safety and evacuation procedures in the tunnel ?\n", - ">> 1987-03-03a.718.7 0.206 In view of that answer , is the Minister prepared to tell the Chancellor of the Exchequer to eat his words , introducing the last Budget , when he said that \" lower wages mean more jobs \" ? Does he agree that the real reason for the Wages Act was to cut the wages of the lowest paid workers in order to increase the profits of friends of the Tory party who contribute huge sums to Tory party funds ?\n", + ">> 1983-07-05a.149.3 0.178 Is the Secretary of State aware that in school after school in inner London , PTAs are now fighting to retain teacher ratios and for increased expenditure on amenities ? Their problem is the shortage of financial help from the Government to ILEA. In view of the answers that his junior Minister has already given this afternoon , is he also aware that if there is any attempt to break up ILEA —and there have been attempts in the past—the people of London will know how to tackle the Tory Government ?\n", + ">> 1991-01-16a.841.1 0.192 In view of the perception of many members of the European Community that the United Kingdom is a bad member of that club , what efforts have the Government taken to publicise in those countries its first - class record in enacting legislation for 1992 ?\n", + ">> 2010-10-11c.22.1 0.199 In the wake of the Munro report , is the Minister as concerned as I am about the growing number of children being taken into care ? Does he agree that the best way in which to stop more of those personal tragedies is to invest in prevention programmes for babies and their carers in the earliest years ?\n", + ">> 1995-03-06a.2.3 0.200 Is the right hon Gentleman prepared to accept that confidence in the channel tunnel service is still fragile and that traffic from all parts of the United Kingdom is still dependent on that confidence being reinvigorated and assured ? In the light of recent disclosures , is he prepared to add to his exchanges and correspondence with me on the issues of fire safety and evacuation procedures in the tunnel ?\n", + ">> 1987-03-03a.718.7 0.205 In view of that answer , is the Minister prepared to tell the Chancellor of the Exchequer to eat his words , introducing the last Budget , when he said that \" lower wages mean more jobs \" ? Does he agree that the real reason for the Wages Act was to cut the wages of the lowest paid workers in order to increase the profits of friends of the Tory party who contribute huge sums to Tory party funds ?\n", ">> 1983-02-09a.998.10 0.207 In relation to the import of UHT milk , is it not iniquitous that we should be told by an alien body what we should and should not do about imports ? Is it not a disgrace that at the behest of such a body Ministers propose to introduce legislation in this Parliament to alter the law in accordance with the ruling of the European Court of Justice ?\n", - ">> 1987-05-05a.568.11 0.209 In view of the notable contribution made by Horseshoe barracks and related facilities to the defence requirements of the nation for many years , is my hon Friend willing to visit Shoeburyness to meet the military personnel and local councillors before a final decision is made on this important issue ?\n", ">> 2011-12-06b.145.4 0.210 The major banks argue that they can not be expected to strengthen their balance sheets and increase net lending at the same time . Does the Chancellor agree with the Governor of the Bank of England that that could be achieved if banks were prepared to cut their bonuses and dividends ? In particular , is it not time that shareholders stepped up to the plate and ensured that banks behaved responsibly on the matter ?\n", + ">> 1987-05-05a.568.11 0.210 In view of the notable contribution made by Horseshoe barracks and related facilities to the defence requirements of the nation for many years , is my hon Friend willing to visit Shoeburyness to meet the military personnel and local councillors before a final decision is made on this important issue ?\n", ">> 1994-03-07a.3.5 0.213 In view of the Allied Dunbar , Health Education Authority survey on children 's fitness , does my hon Friend agree with the hon Member for Liverpool , Walton ( Mr. Kilfoyle ) that children 's sport in schools is especially important ? What progress is my hon Friend making with the Department for Education in his efforts to ensure that more competitive sport is played in schools ?\n", - ">> 2006-03-30b.1030.6 0.216 In spite of the revenue from fuel duty , which is a very large amount , is it not the case that the cost of private motoring continues to decline year on year ? Is it not also the case that , in the light of the climate change review programme published this week , sooner or later all parties in the House are going to face up to the fact that an above - inflation rise in fuel duty is the most effective means of reducing congestion , and of reducing CO 2 emissions in the transport sector ?\n", + ">> 2006-03-30b.1030.6 0.215 In spite of the revenue from fuel duty , which is a very large amount , is it not the case that the cost of private motoring continues to decline year on year ? Is it not also the case that , in the light of the climate change review programme published this week , sooner or later all parties in the House are going to face up to the fact that an above - inflation rise in fuel duty is the most effective means of reducing congestion , and of reducing CO 2 emissions in the transport sector ?\n", "\n", "====\n", "\n", - "CLUSTER 4 4\n", + "CLUSTER 2 2\n", "---\n", "terms\n", " cluster_dist\n", "index \n", - "know_* 0.180781\n", - "and>* 0.185771\n", - "want_* 0.190517\n", - "committed_to 0.191220\n", - "are_there 0.200138\n", - "committed_* 0.204326\n", - "know_will 0.209225\n", - "give_will 0.216041\n", - "trying_* 0.222481\n", - "are_committed 0.222606\n", + "know_* 0.180409\n", + "and>* 0.185346\n", + "want_* 0.190352\n", + "committed_to 0.191354\n", + "are_there 0.200296\n", + "committed_* 0.204579\n", + "know_will 0.209547\n", + "give_will 0.216046\n", + "are_committed 0.222467\n", + "trying_* 0.222782\n", "\n", "context terms\n", " cluster_dist\n", "index \n", - "recognise_is 0.301617\n", - "recognise_* 0.319832\n", - "recognise_will 0.322264\n", - "recognise_does 0.338649\n", - "recognise_not 0.349834\n", - "further>* 0.360798\n", - "recognise_be 0.373725\n", - "furthermore>* 0.378644\n", - "recognise_are 0.389822\n", - "is_given 0.420853\n", + "recognise_is 0.301521\n", + "recognise_* 0.319689\n", + "recognise_will 0.322014\n", + "recognise_does 0.338546\n", + "recognise_not 0.349756\n", + "further>* 0.360290\n", + "recognise_be 0.373500\n", + "furthermore>* 0.378391\n", + "recognise_are 0.389699\n", + "is_given 0.420716\n", "\n", "\n", "utterances\n", "> 2005-06-23a.944.5 0.078 I thank my hon Friend for his kind comments , and I agree with what he says . The Women and Work Commission was set up because achieving equal pay for women remained a problem even many years after the Equal Pay Act 1970 was introduced . The gender pay gap has narrowed significantly but it remains wide , especially in respect of part - time working . This is a complex issue : occupational segregation is one element , but there are many others . I assure my hon Friend that the commission is fully involved with trade unions and the EOC , and with the representatives of many businesses and employers .\n", "> 2000-01-12a.270.1 0.079 That is precisely why we shall not implement them . If I might expand on the remarks of my hon Friend , there were reports in The New York Times , during the past two days— [ Interruption . ] I was going to read them out in response to further questions from the Leader of the Opposition , but I never got any . In The New York Times , for example , it was reported that the wave of flu has become widespread , overwhelming emergency rooms , filling hospital beds , and forcing postponement of operations . In many overcrowded rooms , people are simply leaving without being treated . In Ireland , hospitals in Dublin and around the country were forced again to cancel almost all routine surgery and procedures . In Sweden , all the intensive care facilities are full ; some non - urgent operations have been cancelled and closed - down wards are having to be reopened . Elsewhere—in Italy , Norway , Germany , France and Switzerland—there are huge problems as a result of the flu outbreak . Having s\n", "> 2001-03-05a.6.1 0.081 I have no wish to be churlish , especially as I read last week of some extremely complimentary remarks that the right hon Gentleman made about the Government 's stakeholder pensions . I am grateful to him for having recognised how valuable a contribution they will make . On the question of fraud , I understand why the right hon Gentleman seeks to clear his name , but he will know that it was not until 1995 that any serious attempt was made to measure fraud and error in the system . It is true , as I said , that in 1997 some efforts were made to deal with the problem ; however , they focused almost entirely on simply detecting fraud that had already entered the system . The National Audit Office recognised the shortcomings of that as the sole strategy , because it almost encouraged people to let in fraud by rewarding them for detecting it . We have stopped fraud entering the system in the first place . As I have told Opposition Members who have asked the question , the fraud and error r\n", - "> 1994-05-05a.830.8 0.082 The hon Gentleman is well aware of the great concern , energy and effort that the Ministry puts into the matter . I am happy to give him the assurances that he seeks . Furthermore , the regime that we have applied includes extensive checks other than those that are statutorily required . We will continue to maintain our high animal health status , which is a very high priority for the Department . I should be happy if the hon Gentleman would be good enough to send me whatever evidence he has so that we can pursue the matter .\n", - "> 2008-07-22c.652.1 0.084 My hon Friend raises a very important point . In fact , he must have raised it in his constituency , as the rates of MRSA and C. difficile infection in the Mid Staffordshire NHS Trust were in decline in March this year . All health staff in the area are to be congratulated . We have reduced infection rates significantly for MRSA and C. difficile . Latest data from the Health Protection Agency for January to March show that MRSA bloodstream infections are down 33 per cent . from the same quarter of last year , and by more than 49 per cent . from the 2003 - 04 monthly average . The same is true for C. difficile infections : in the most vulnerable group of those aged 65 and over , the rate is 32 per cent . lower than in the same quarter of last year . NHS staff work extremely hard to drive down the number of infections . I agree that we must not take our eye off the ball , but we must also recognise such significant improvements .\n", - "> 1994-03-14a.601.11 0.084 The hon Gentleman will be aware that that is a matter for my right hon Friend the Secretary of State for Transport . I can assure the hon Gentleman that my right hon Friend and I will ensure that that matter is given every consideration .\n", + "> 1994-05-05a.830.8 0.081 The hon Gentleman is well aware of the great concern , energy and effort that the Ministry puts into the matter . I am happy to give him the assurances that he seeks . Furthermore , the regime that we have applied includes extensive checks other than those that are statutorily required . We will continue to maintain our high animal health status , which is a very high priority for the Department . I should be happy if the hon Gentleman would be good enough to send me whatever evidence he has so that we can pursue the matter .\n", + "> 2008-07-22c.652.1 0.083 My hon Friend raises a very important point . In fact , he must have raised it in his constituency , as the rates of MRSA and C. difficile infection in the Mid Staffordshire NHS Trust were in decline in March this year . All health staff in the area are to be congratulated . We have reduced infection rates significantly for MRSA and C. difficile . Latest data from the Health Protection Agency for January to March show that MRSA bloodstream infections are down 33 per cent . from the same quarter of last year , and by more than 49 per cent . from the 2003 - 04 monthly average . The same is true for C. difficile infections : in the most vulnerable group of those aged 65 and over , the rate is 32 per cent . lower than in the same quarter of last year . NHS staff work extremely hard to drive down the number of infections . I agree that we must not take our eye off the ball , but we must also recognise such significant improvements .\n", + "> 1994-03-14a.601.11 0.085 The hon Gentleman will be aware that that is a matter for my right hon Friend the Secretary of State for Transport . I can assure the hon Gentleman that my right hon Friend and I will ensure that that matter is given every consideration .\n", "> 2006-04-27b.694.6 0.085 No , I do not . We are on a journey with extended schools . As I said , more than 6,000 schools are working with us directly to provide extended services . The baseline survey that we conducted at the outset showed that approximately 95 per cent . of secondary schools and 87 per cent . of primary schools already offered extended activities after school to some extent . There is therefore a great deal of interest and commitment . Extended activities help schools to maximise the attainment of their children and support parents in doing that . Schools that have provided extended activities for some time are convinced of the benefits . I am sure that , as we develop the programme , that will be the case for all schools . The money provided—£840 million so far—is for start - up costs . Schools need to ensure that they sustain activities and we will support them with a charging regime to ensure that they do .\n", - "> 2004-03-18.445.6 0.086 The hon Gentleman raises several important points . I can assure him that two safeguards are in place as regards any change to trial systems . Such proposals would , first , have to come before this House for its approval following debate and discussion ; and , secondly , they would have to be compliant with our international obligations under the European convention on human rights as enshrined in the Human Rights Act 1998 . As for whether closer work between the Crown Prosecution Service and the police could contaminate the independence of the CPS , the answer is emphatically no . It is a good idea for the police to have early advice on the nature of the charge and what evidence would be admissible . That does not impede the independence of the Crown Prosecution Service , but it will ensure that the police are able effectively to progress the investigation and that the trial works properly .\n", + "> 2004-03-18.445.6 0.087 The hon Gentleman raises several important points . I can assure him that two safeguards are in place as regards any change to trial systems . Such proposals would , first , have to come before this House for its approval following debate and discussion ; and , secondly , they would have to be compliant with our international obligations under the European convention on human rights as enshrined in the Human Rights Act 1998 . As for whether closer work between the Crown Prosecution Service and the police could contaminate the independence of the CPS , the answer is emphatically no . It is a good idea for the police to have early advice on the nature of the charge and what evidence would be admissible . That does not impede the independence of the Crown Prosecution Service , but it will ensure that the police are able effectively to progress the investigation and that the trial works properly .\n", "> 2008-05-12c.1045.0 0.087 I am grateful to my hon Friend , my right hon Friend the Member for Makerfield ( Mr. McCartney ) and the Secretary of State for their involvement in relation to the jobs in Wigan . Clearly , we want to make sure that we protect as many jobs as possible , and that will be a consideration when we look at the various options . I will be happy to meet my hon Friend the Member for Wigan ( Mr. Turner ) and my right hon Friend the Member for Makerfield to make sure that we go through every opportunity . There is great interest in the House about the sale of the Tote ; the issue has been with us for some time . We need to make sure that we get the best possible return . I should like to put on the record my tribute to the work force in Wigan and to the Tote 's management , who have been keeping going under difficult circumstances .\n", "> 1990-06-13a.279.8 0.087 I am aware of the suggestions for a parliamentary delegation . That could help . Those who are concerned , including my hon Friend , are in touch with the Foreign Office about it .\n", "\n", @@ -1743,11 +1528,125 @@ ">> 1989-01-19a.477.2 0.243 Is the Minister satisfied with the quality of milk supplied to the consumer by the dairy industry ? Further , what is his view about the marketing opportunities for added value products by the farmer ?\n", ">> 1991-02-12a.727.0 0.252 Why are the Government watering down the award when the IAC—a Government - appointed body—has reported to them that teachers ' morale is at rock bottom and that vacancy levels have deteriorated appreciably over the past four years ? When will the Government recognise that there is a serious crisis in our education system ?\n", ">> 1985-06-06a.431.1 0.252 Is the Home Secretary aware that serious abuses of the Immigration Act 1971 are taking place and that the procedures he has announced during the last two weeks concerning the treatment of Tamil refugees seeking asylum in this country have met with enormous opposition from Members of Parliament and from all of the immigration advisory agencies and refugee agencies ? Is he further aware that the 24-hour rule for Members of Parliament , concerning the time in which they can make representations , is completely inadequate , and that until Tuesday of this week the immigration officers at Gatwick airport were unaware that they had to inform the United Kingdom immigrants advisory service of any refugee - seekers arriving in this country ? Furthermore , is the Home Secretary aware that on Tuesday of this week a Tamil asylum seeker was removed extra - judicially from this country to Colombo , that his whereabouts are unknown and that it is incumbent upon the Home Secretary to tell the House wha\n", - ">> 1996-02-21a.360.6 0.254 Is the Minister unaware that slashing the capital budget by 30 per cent . next year and by almost 50 per cent . over the next three years will have the most disastrous effect on universities ' ability to provide for their students ? Further , is he unaware that capital funds are used for the purchase and maintenance of equipment for teaching and research , which is totally unsuited to provision by the private finance initiative ?\n", + ">> 1996-02-21a.360.6 0.253 Is the Minister unaware that slashing the capital budget by 30 per cent . next year and by almost 50 per cent . over the next three years will have the most disastrous effect on universities ' ability to provide for their students ? Further , is he unaware that capital funds are used for the purchase and maintenance of equipment for teaching and research , which is totally unsuited to provision by the private finance initiative ?\n", ">> 2016-12-01c.1658.7 0.256 The Prime Minister recently told the CBI conference that we want to avoid a cliff edge . Further to the answer that the Secretary of State gave to my right hon Friend the Member for Wolverhampton South East ( Mr McFadden ) , and given that our EU partners have so far refused to commit to parallel negotiations on our future arrangements alongside those on article 50 , what is the plan if we can not start , let alone conclude , those negotiations within two years ? Will we be forced off that cliff and on to World Trade Organisation rules and tariffs , with all the consequences for jobs and investment that business has warned of ?\n", ">> 1985-02-06a.930.6 0.267 Why does the Secretary of State not recognise that hundreds of thousands of people are living in great housing hardship and misery because they can not be housed by their local authority ? Is it not a striking illustration of the Government 's callous indifference that they have each year cut the amount of money made available to local authorities ? In my borough , only because it has not had the money available , no contracts for new council housing have been entered into for the past six years . When will the Secretary of State recognise his responsibility towards people in such a desperate housing plight in my borough and the rest of the country ?\n", ">> 2014-11-06b.946.3 0.272 The Labour party has already set out its position on carbon capture and storage as a vital part of our future energy mix . Is the Secretary of State concerned that Europe appears to be falling behind on CCS , and does he agree that his Government need to do more to stop that happening ?\n", - ">> 2015-01-29a.987.3 0.273 I am grateful to the Minister for that answer . I am sure that he would join me in welcoming the announcement by Northumbrian Water in my area . After consultation with customers , it has introduced a social tariff , and it is working with debt charities to support vulnerable people in my area . However , only 25,000 people nationally benefit from social tariffs , so what practical steps is the Minister taking to encourage the scope and availability of social tariffs for vulnerable people ?\n", + ">> 2015-01-29a.987.3 0.272 I am grateful to the Minister for that answer . I am sure that he would join me in welcoming the announcement by Northumbrian Water in my area . After consultation with customers , it has introduced a social tariff , and it is working with debt charities to support vulnerable people in my area . However , only 25,000 people nationally benefit from social tariffs , so what practical steps is the Minister taking to encourage the scope and availability of social tariffs for vulnerable people ?\n", + "\n", + "====\n", + "\n", + "CLUSTER 3 3\n", + "---\n", + "terms\n", + " cluster_dist\n", + "index \n", + "keep_* 0.266941\n", + "clearly>* 0.277723\n", + "reviewing_are 0.280402\n", + "looking_* 0.298435\n", + "happen_* 0.302697\n", + "point_is 0.303206\n", + "consider_will 0.329686\n", + "looking_are 0.331699\n", + "look_* 0.333398\n", + "want_not 0.337675\n", + "\n", + "context terms\n", + " cluster_dist\n", + "index \n", + "instruct_* 0.478968\n", + "report_* 0.488678\n", + "at>* 0.495860\n", + "intervene_* 0.501563\n", + "given>* 0.513179\n", + "intervene_will 0.528650\n", + "endorse_* 0.567649\n", + "given>that 0.593545\n", + "agree_go 0.615395\n", + "to_* 0.637088\n", + "\n", + "\n", + "utterances\n", + "> 1989-02-15a.307.5 0.097 Government involvement in manufacturing is the last thing that the manufacturing industry wants . In fact , there is absolutely no reason why something should not be made from scratch , providing that it is competitive and is of the required quality . One has only to look at the production of Nissan cars in a green field site to see that if the product is competitive and meets a demand , it will immediately take a piece of the market .\n", + "> 2006-10-24b.1374.0 0.099 My hon Friend is quite right to point to the advances that have been made in terms of the extra investment that has gone into cancer treatment , and the increased number of cancer consultants and clinical nurse specialists . That has made a real difference to the outcomes for cancer patients . Of course , the cancer networks look at the referral patterns and I shall certainly make sure that the cancer network that oversees his area is aware of the points that he has made .\n", + "> 2011-02-14b.698.2 0.102 Given my political career , I have given up giving advice to anybody , so the best thing the shadow Secretary of State can do is forge his own way and I will look to see how I can dismantle that .\n", + "> 2002-07-22.659.2 0.103 I do not know the details of the application from my hon Friend 's constituency , but if he writes to me I shall look at it and ensure that it is dealt with fairly . A total of £ 581 million is being invested through the new opportunities fund via local education authorities , but the funding is conditional on the facilities being used by the community , too . That is important . Many people have been critical of investment in sports facilities that have not been available to the wider community . There is a change in culture and attitude among many in education—those who must ensure that those centres of excellence can be used by the whole community . If my hon Friend wants to write to me , I shall look into the questions that he has raised .\n", + "> 2008-06-02b.490.2 0.104 Those are rather unusual circumstances . I am aware that my hon Friend has encountered them in her constituency , and I encourage her to write to me with the details of the cases , if she does not mind . I am happy to look into them a bit further . However , it has always been part of the regulations applying to the child support system that for a maintenance calculation to be made and enforced , all the parties have to be habitually resident in the UK. I think that that is not so in the case that she has encountered , and there would therefore be difficulties in pursuing the matter , but still , if she gives me more details about it , I will look further into it for her .\n", + "> 2014-12-04a.407.2 0.106 The hon Gentleman is right to highlight the issues around the Snake pass . I know there are safety concerns there , and I have obviously used the road myself . He knows that this Government have at their very heart the idea of a northern powerhouse . We are championing the interests of the north of England , perhaps to a greater degree than any previous Government . To that end , I shall look at all the specific questions that the hon Gentleman asks on timing , on detail and on planning , and I shall be more than happy to address them directly with him .\n", + "> 2013-09-12a.1155.0 0.108 Clearly , the hon Gentleman has strong views on that particular private Members ’ Bill but , as I stated , it is important that we consider these matters in the round . The Procedure Committee has rightly devoted a substantial amount of time to considering this matter and the House should look at its proposals—for example , on the process of balloting Members—so that it can come to a sensible decision .\n", + "> 2004-05-26.1564.6 0.108 I am , of course , always prepared to meet an all - party group on the issue . I will look at it in the light of what has been said by the previous Prime Minister , but I give no guarantees that we will change the decision . A decision was taken at the time , which was endorsed by this Government as well , but I understand the very strong feelings that there are , not least among the families of the pilots . I am very happy to meet an all - party group , but that has to be done without any prior commitment or guarantee as to what the outcome would be .\n", + "> 2009-11-04c.855.6 0.110 When there was a Labour council , Glencraft got a huge amount of support from it . I have heard that the grants are being cut by the SNP - Liberal administration in the area . We will look at what we can do , but it is clearly important in a recession to help those people who are most in need of support , and that includes the disabled members of our community .\n", + "> 1995-04-24a.508.6 0.110 Those cases sound very worrying indeed . Of course I will look into them specifically , immediately following Question Time and I will provide the hon Gentleman with a written answer . That is not the kind of thing that I wish to hear . Many hundreds of thousands of people receive very good treatment from the NHS in Wales and we must make sure that that is true of everyone . Like the hon Gentleman , I am rather worried by that story .\n", + "\n", + "context-utterances\n", + ">> 1998-05-19a.714.1 0.316 As my hon Friend knows , 510 jobs are being lost in my constituency following Mitsubishi 's decision to close its colour television factory at Haddington— [ Interruption . ] I wish that Conservative Members would take issues like this seriously ; it is a very serious matter for my constituents . Following my hon Friend 's visit to Haddington on 6 April—the day of the announcement—can he report on the progress made by the task force in creating new jobs for people in Haddington and in finding new enterprises for the factory that has been closed ?\n", + ">> 2010-12-21a.1314.1 0.320 Treasury Ministers rightly assert that the vulnerable should be protected and that those with broader shoulders should bear the greatest burden . With that in mind , will Ministers report on the effectiveness of the initiative announced in September to bear down on the estimated £ 42 billion of tax that the wealthy do not pay each year ?\n", + ">> 1998-05-07a.850.0 0.333 May I welcome my right hon Friend 's trail - blazing child care policies ? Will he confirm that his departmental research shows that 90 per cent . of employers make no provision whatever for child care assistance ? Are we sure that Departments and agencies are that good in this respect ? Will he make certain that Departments and agencies become model employers and give a lead in policies on child care ?\n", + ">> 2010-11-02a.753.8 0.339 Does the Minister agree with me and the 1999 Shields report that children 's accident and emergency , paediatrics and maternity units should be kept together in one hospital ? Will he postpone the move of the Burnley children 's ward to Blackburn until the new GP commissioners are installed and can make an informed decision ?\n", + ">> 2009-02-26b.356.5 0.359 DEFRA has a great little scheme that funds some pilots through which farmers and land managers manage their land in ways that hold back flood waters . I have been to see a scheme at Seighford , near Stafford , with Matt Jones from Staffordshire Wildlife Trust , who is the project manager . Some really low - tech solutions are successfully keeping back flood waters at times of pressure . Will my right hon Friend be talking to Sir Michael about the assessment of those pilots , with a view to seeing whether they could be rolled out more widely ? If he does , can he report back to MPs who have pilots in their area ?\n", + ">> 1984-07-19a.508.5 0.360 Will the Prime Minister recognise that she is totally misrepresenting the position of the talks , the NUM , and the response of the NCB when she makes the claim that no will accept pit closures in any circumstances ? The cost of the strike is now nearly £ 2,000 million . When will she intervene to help a settlement instead of interfering to hinder a settlement ?\n", + ">> 2007-07-03b.800.5 0.385 May I take the Foreign Secretary back to a commitment given by his predecessor but one after the French and Dutch votes two years ago ? The hon Member for Vauxhall ( Kate Hoey ) asked him : \" Will he assure me that one matter that he would certainly submit to a referendum is the creation of a Foreign Minister and a European President ? \" The then Foreign Secretary replied : \" Those points are central to the European constitutional treaty , and of course I see no prospect of their being brought into force , save through the vehicle of a constitutional treaty.\"—[ Official Report , 6 June 2005 ; Vol . 434 , c. 1001 . ] The new treaty does indeed include both a Foreign Minister and a President . According to the Government , that would make it a constitution , so why is there no referendum ?\n", + ">> 2011-07-12c.151.5 0.388 Is the Minister as concerned as I am about the failure of Suffolk primary care trust to act to invest in proper buildings and infrastructure for the Gipping valley practice in Claydon in my constituency ? That practice has been forced to treat patients out of a portakabin for 15 years now . Will he agree to meet me , and local doctors and patient groups , to see whether we can find a solution to the problem ?\n", + ">> 1980-02-21a.655.4 0.389 In her meeting with Mr. Vance this afternoon , will the Prime Minister report that there are some of us who have had in - depth meetings with the Indian High Commissioner and other Asians who are not apologists for the Soviet Union but who see Afghanistan in various tones of grey rather than black and white ? They believe that that issue certainly does not constitute a reason for not going to the Olympics .\n", + ">> 1993-01-28a.1137.5 0.390 May I assure my right hon Friend that the people of West Dorset are delighted to see the establishment of the South Wessex downs environmentally sensitive area ? They will greatly appreciate that in future . My right hon Friend knows that part of the world well . The area finishes at Maiden Newton , but it would be extremely nice if it could extend to my home town of Beaminster . May I make future representations to him about that ?\n", + "\n", + "====\n", + "\n", + "CLUSTER 4 4\n", + "---\n", + "terms\n", + " cluster_dist\n", + "index \n", + "in>* 0.101368\n", + "there>* 0.121001\n", + "on>* 0.140528\n", + "for>* 0.140912\n", + "was_* 0.141448\n", + "said_* 0.153850\n", + "am_sorry 0.155638\n", + "made_* 0.157480\n", + "is_not 0.160121\n", + "what>* 0.160193\n", + "\n", + "context terms\n", + " cluster_dist\n", + "index \n", + "is_on 0.284335\n", + "is_as 0.357750\n", + "is_there 0.378701\n", + "so>* 0.390909\n", + "is_also 0.391591\n", + "is_for 0.393961\n", + "is_now 0.414244\n", + "is_said 0.415668\n", + "want_* 0.421120\n", + "is_what 0.423084\n", + "\n", + "\n", + "utterances\n", + "> 1999-02-04a.1071.2 0.060 In answer to the hon Gentleman 's first question , the number of abattoirs is less than the fingers on one hand . [ Interruption . ] I said less than the fingers on one hand .\n", + "> 1997-12-18a.471.2 0.063 I rather share my hon Friend 's view . I recall very recently sitting at dinner next to someone who said that he had been a Euro - sceptic since 1992 , to which my response was , \" Too late . \" What changed my mind was 25 years , two referendums and the experience of the British people , who clearly chose , by a democratic decision , to remain in the European Union . In my view it is now the case that all our interests are irrevocably bound up with our membership of that body , and it is absolutely essential for Britain 's future to make the best that we can of our membership and to work co - operatively with our European Union partners . The classic example of that is economic and monetary union itself . I do not know whether the right hon Gentleman is suggesting , as he seemed to imply , that the Conservative party has now decided that it does not want to participate in economic and monetary union at any point , but I can tell him that that would be disastrous for British business an\n", + "> 1983-03-17a.342.10 0.065 If UHT milk in Europe has to comply with the same hygiene regulations as are required here , there is no way in which it will undermine our market . At present , UHT milk in France is selling in Paris at 19 to 19½p , compared with fresh milk on the doorstep here at 21p . There is no way in which that could compete with or undermine the doorstep delivery service in this country .\n", + "> 2012-01-11b.159.7 0.067 What the Prime Minister said stands . There are no current plans for the MOD to reduce the core police role relating to the security of our national institutions , such as nuclear safety at Coulport or Faslane . National security , including the security of our defence installations , is our highest priority . The reason we have so many MOD police in Scotland in the first place is our huge defence imprint , which would be put at risk immediately if the country were to become independent .\n", + "> 1984-08-01a.325.4 0.067 There is not a balance of payments deficit . I am sorry to bring the right hon Gentleman the good news .\n", + "> 2003-04-10.394.2 0.068 The causes of truancy are complex and varied . Different practices are adopted in different schools and areas to tackle that . The evidence on setting is mixed . There is evidence of successful setting in certain subjects at certain stages , and other evidence that shows successful mixed - ability practice . What is important is that we enable head teachers to study the evidence that is available and to make the best decision on setting and mixed ability for the children in their schools .\n", + "> 1982-06-10a.388.8 0.069 The right hon Gentleman wrote to my right hon Friend the Prime Minister . He has made a serious point that deserves a serious and proper answer . First , it is important to say that at no time have we demanded unconditional surrender . We have made it clear that if the Argentine forces in Port Stanley announced their wish to withdraw to the mainland they would be given time to do so with dignity and good order . That is their opportunity . Before their invasion we made it clear to the Argentines that we were prepared to discuss matters affecting the future of the islands with them . Even after their invasion we were prepared to do so if they promptly withdrew . However , their response was to insist on ultimate transfer of sovereignty to them as a pre - condition . That was not acceptable . Since our landings on the islands and the losses that we have incurred , it is unthinkable to negotiate about the future of the islands as if everything was as it had been before . As I am sure that\n", + "> 2010-10-11c.18.5 0.069 I am grateful to the hon Lady and am delighted to take up the invitation , as I have to many other youth centres and projects around the country ; she may come to regret that invitation . I am afraid that in this financial climate we have to think smarter about how we can provide services . In common with every Department and every other part of this Department 's work , the youth sector is under that scrutiny . My battle is to involve as many providers as possible from the voluntary sector , local authority and others in ensuring that we provide youth services to those most in need of them in the most imaginative way - with less money , because of the previous Government 's disastrous financial legacy .\n", + "> 2013-05-20b.902.1 0.070 I have said all along that we will keep this under review and talk to local authorities . The Opposition have not once apologised—they did not do so when in government , either—for the fact that , under them , house building fell to its lowest level since the 1920s and that there was more overcrowding . There are 1.5 million spare rooms and 250,000 people live in overcrowded accommodation . There were record levels under the previous Government . Why do they not say sorry for the mess they left housing in ?\n", + "> 1993-01-28a.1135.5 0.070 The system is not broken , but it has its problems , the main one being that in the main growth area of the market we have been increasingly supplied by imports . We now import 530,000 tonnes of processed products per year , and many of the chips in the great British fish and chips meal are imported . As for seed potatoes , there is no question of a great contraction of British potato acreage in different circumstances . People are not falling over themselves to get out of growing potatoes , but we want more people to grow them . We have more varieties than many continental countries . There is a market overseas for Scottish seed potatoes because we can boast greater variety and expertise than many other countries , and we want to exploit those advantages .\n", + "\n", + "context-utterances\n", + ">> 1988-04-20a.820.7 0.155 Does my hon Friend agree that it is not necessary for local authorities to wait for the timetable , and that as competitive tendering is a desirable development they should get on with it now on their own initative ?\n", + ">> 1985-01-09a.775.5 0.166 When will the Government recognise the appalling housing plight of so many people who need rented accommodation , as well as those tenants who are living in pre - war council dwellings that need to be modernised ? The Minister referred to the Labour Government . Is it not a fact that in 1978 , the last year of that Government , well over 107,000 housing starts were made in the public sector , compared to an estimated 40,000 last year ? This year the figure is expected to be even less . Why do the Government refuse to take action to help people who need somewhere to live ?\n", + ">> 2012-09-18a.780.2 0.189 Further to Question 6 , is there any indication that any prisoner has received an inappropriate sentence because of the failings of Applied Language Solutions , given that , as the Under - Secretary of State for Justice , the hon Member for Maidstone and The Weald ( Mrs Grant ) said , it has failed to fulfil 5 % of its bookings even after the improvements that she talked about ?\n", + ">> 1992-12-15a.281.2 0.191 Does my hon Friend recall that there was almost universal hostility from the teaching profession to the national curriculum when it was first introduced ? Does he recognise that there is now tremendous support for it in all schools , but that there is also some anxiety about key stage 3 , in not only English but technology ? Will he at least consider a pilot scheme for a year so that teachers can get hold of the necessary paperwork for the key stage 3 exam ?\n", + ">> 2012-04-17c.170.4 0.202 Further to Question 9 , is not the worst aspect of the demolitions the practice of punitive demolitions , which is based on the doctrine of collective punishment , and does that not directly contravene article 33 of the Geneva convention ?\n", + ">> 2005-01-26a.286.4 0.218 I add my praise to the organisers of the tsunami appeal event on Saturday night in Cardiff . When we consider that it took just three weeks to put that event together , it is testimony to what can be achieved with vision and focus . As for the 50th aniversary celebrations in Cardiff , is the Secretary of State aware that while the Millennium Commission has offered £ 1.3 million for those celebrations , to date the Welsh Assembly Government have offered no financial support ? Is the right hon Gentleman willing to have conversations with his opposite numbers and Rhodri Morgan to see that this omission , in my view , can be rectified ?\n", + ">> 1996-02-07a.323.5 0.218 Does my right hon and learned Friend agree that Britain 's initiative a few years ago in calling a special meeting of the Security Council to examine the reform of the UN was one of the best things that had happened for some time in the area ? Is he also aware that the planning of peacekeeping operations is remarkably amateurish and inefficient ? What new proposals is Britain putting forward on that front ? Does my right hon and learned Friend support the Canadian proposal for a small standby force to be available to the Secretary - General ?\n", + ">> 1993-02-17a.311.0 0.225 Is my right hon Friend aware that the OECD has forecast that Britain is likely to increase its share of world trade this year ? Is not one reason for that , as Jacques Delors said , that Britain has become a paradise for overseas investment and is not that because the Government have tackled the excessive power of the trade unions and refused to sign the job - destroying social chapter ? Is not that in stark contrast with the union - dominated Labour party , which seems to believe that only the state can generate economic growth—a view which not even the Russians believe nowadays ?\n", + ">> 1989-11-15a.340.4 0.227 With regard to the discussions that the Secretary of State has had , or will have , does not his conscience trouble him ? Is he not fully responsible for the destruction of the Scottish coal industry , in the stupid belief that nuclear energy is cheaper than coal ?\n", + ">> 1996-04-03a.383.1 0.228 As the Government will need the support of the all the other countries if there is to be any radical change in the workings of the European Court of Justice , will the Minister list those countries that support the Government 's aims ? Furthermore , on the working hours directive , is not the Government 's case completely undermined by the report that they commissioned which showed a clear link between long working hours and threats to health and safety ?\n", "\n", "====\n", "\n" @@ -1767,10 +1666,8 @@ }, { "cell_type": "code", - "execution_count": 36, - "metadata": { - "collapsed": true - }, + "execution_count": 37, + "metadata": {}, "outputs": [], "source": [ "a_ec.set_cluster_names(['progress_report', 'statement', 'endorsement', 'comment', 'commitment'])" @@ -1778,7 +1675,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 38, "metadata": {}, "outputs": [ { @@ -1811,38 +1708,38 @@ " \n", " \n", " comment\n", - " 0.175944\n", - " 0.201035\n", - " 0.151253\n", - " 0.173611\n", + " 0.042213\n", + " 0.115299\n", + " 0.137920\n", + " 0.155382\n", " \n", " \n", " commitment\n", - " 0.257680\n", - " 0.209904\n", - " 0.099321\n", - " 0.095486\n", + " 0.395989\n", + " 0.328899\n", + " 0.336692\n", + " 0.357639\n", " \n", " \n", " endorsement\n", - " 0.125338\n", - " 0.144863\n", - " 0.275901\n", - " 0.218750\n", + " 0.258554\n", + " 0.209165\n", + " 0.100145\n", + " 0.098090\n", " \n", " \n", " progress_report\n", - " 0.041792\n", - " 0.115299\n", - " 0.137177\n", - " 0.154514\n", + " 0.123028\n", + " 0.145233\n", + " 0.278981\n", + " 0.222222\n", " \n", " \n", " statement\n", - " 0.399247\n", - " 0.328899\n", - " 0.336348\n", - " 0.357639\n", + " 0.180216\n", + " 0.201404\n", + " 0.146261\n", + " 0.166667\n", " \n", " \n", "\n", @@ -1850,14 +1747,14 @@ ], "text/plain": [ " utts terms context_utts context_terms\n", - "comment 0.175944 0.201035 0.151253 0.173611\n", - "commitment 0.257680 0.209904 0.099321 0.095486\n", - "endorsement 0.125338 0.144863 0.275901 0.218750\n", - "progress_report 0.041792 0.115299 0.137177 0.154514\n", - "statement 0.399247 0.328899 0.336348 0.357639" + "comment 0.042213 0.115299 0.137920 0.155382\n", + "commitment 0.395989 0.328899 0.336692 0.357639\n", + "endorsement 0.258554 0.209165 0.100145 0.098090\n", + "progress_report 0.123028 0.145233 0.278981 0.222222\n", + "statement 0.180216 0.201404 0.146261 0.166667" ] }, - "execution_count": 37, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" } @@ -1875,10 +1772,8 @@ }, { "cell_type": "code", - "execution_count": 38, - "metadata": { - "collapsed": true - }, + "execution_count": 39, + "metadata": {}, "outputs": [], "source": [ "_ = a_ec.transform(parl_corpus, selector=lambda x: x.meta['is_answer'] and (x.meta.get('arc_tfidf__n_feats',0)>0))" @@ -1886,9 +1781,8 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 40, "metadata": { - "collapsed": true, "scrolled": true }, "outputs": [], @@ -1903,7 +1797,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 41, "metadata": {}, "outputs": [ { @@ -1912,7 +1806,7 @@ "(84823, 11)" ] }, - "execution_count": 40, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } @@ -1923,10 +1817,8 @@ }, { "cell_type": "code", - "execution_count": 41, - "metadata": { - "collapsed": true - }, + "execution_count": 42, + "metadata": {}, "outputs": [], "source": [ "log_odds_party_answer = []\n", @@ -1939,10 +1831,8 @@ }, { "cell_type": "code", - "execution_count": 42, - "metadata": { - "collapsed": true - }, + "execution_count": 43, + "metadata": {}, "outputs": [], "source": [ "a_type_order = log_odds_party_answer_df.sort_values('log_odds').index" @@ -1950,10 +1840,8 @@ }, { "cell_type": "code", - "execution_count": 43, - "metadata": { - "collapsed": true - }, + "execution_count": 44, + "metadata": {}, "outputs": [], "source": [ "a_display_names = ['Statement', 'Comment', 'Progress report', 'Commitment', 'Endorsement']" @@ -1961,17 +1849,19 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 45, "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] }, - "metadata": {}, + "metadata": { + "needs_background": "light" + }, "output_type": "display_data" } ], @@ -1996,9 +1886,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [] }, @@ -2013,10 +1901,8 @@ }, { "cell_type": "code", - "execution_count": 45, - "metadata": { - "collapsed": true - }, + "execution_count": 46, + "metadata": {}, "outputs": [], "source": [ "utt_range_df = parl_corpus.get_attribute_table('utterance',\n", @@ -2026,10 +1912,8 @@ }, { "cell_type": "code", - "execution_count": 46, - "metadata": { - "collapsed": true - }, + "execution_count": 47, + "metadata": {}, "outputs": [], "source": [ "fw_range_distrs = utt_range_df.groupby('fw_clustering.cluster').fw_range.describe().sort_values('50%')\n", @@ -2038,17 +1922,19 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 48, "metadata": {}, "outputs": [ { "data": { - "image/png": "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\nERGRyP0/RwUCu6p1e4kAAAAASUVORK5CYII=\n", + "image/png": "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", "text/plain": [ "
" ] }, - "metadata": {}, + "metadata": { + "needs_background": "light" + }, "output_type": "display_data" } ], @@ -2082,9 +1968,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [] }, @@ -2102,10 +1986,8 @@ }, { "cell_type": "code", - "execution_count": 48, - "metadata": { - "collapsed": true - }, + "execution_count": 49, + "metadata": {}, "outputs": [], "source": [ "from convokit.expected_context_framework import ExpectedContextModelPipeline" @@ -2113,10 +1995,8 @@ }, { "cell_type": "code", - "execution_count": 49, - "metadata": { - "collapsed": true - }, + "execution_count": 50, + "metadata": {}, "outputs": [], "source": [ "# see `demo_text_pipelines.py` in this demo's directory for details\n", @@ -2141,10 +2021,8 @@ }, { "cell_type": "code", - "execution_count": 50, - "metadata": { - "collapsed": true - }, + "execution_count": 51, + "metadata": {}, "outputs": [], "source": [ "q_pipe = ExpectedContextModelPipeline(context_field='next_id', output_prefix='fw',\n", @@ -2158,10 +2036,8 @@ }, { "cell_type": "code", - "execution_count": 51, - "metadata": { - "collapsed": true - }, + "execution_count": 52, + "metadata": {}, "outputs": [], "source": [ "q_pipe.fit(parl_corpus,\n", @@ -2178,7 +2054,7 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 53, "metadata": {}, "outputs": [ { @@ -2188,242 +2064,242 @@ "CLUSTER 0 0\n", "---\n", "terms\n", - " cluster_dist\n", - "index \n", - "why>* 0.433792\n", - "explain_* 0.450258\n", - "explain_will 0.476159\n", - "admit_* 0.520922\n", - "how>does 0.545040\n", - "admit_will 0.570400\n", - "cost_* 0.601069\n", - "why>does 0.612624\n", - "explain_is 0.637547\n", - "explain_to 0.642417\n", + " cluster_dist\n", + "index \n", + "share_* 0.561461\n", + "welcome_* 0.565564\n", + "share_does 0.604726\n", + "congratulate_* 0.616394\n", + "use_* 0.617847\n", + "am_* 0.627405\n", + "impress_on 0.635085\n", + "encourage_* 0.646977\n", + "congratulate_may 0.664214\n", + "join_* 0.678611\n", "\n", "context terms\n", - " cluster_dist\n", - "index \n", - "of>* 0.667550\n", - "is>* 0.683172\n", - "failed_* 0.689151\n", - "expected_* 0.690912\n", - "is_wrong 0.701407\n", - "is_what 0.707268\n", - "of_* 0.722738\n", - "instead>* 0.726977\n", - "apologise_* 0.728533\n", - "three>* 0.732311\n", + " cluster_dist\n", + "index \n", + "is_important 0.557533\n", + "hope_* 0.567806\n", + "have_can 0.570490\n", + "encourage_* 0.571406\n", + "is_ensure 0.596783\n", + "and>* 0.613320\n", + "is_have 0.614779\n", + "hope_do 0.620393\n", + "is_get 0.628049\n", + "is_do 0.628658\n", "\n", "CLUSTER 1 1\n", "---\n", "terms\n", - " cluster_dist\n", - "index \n", - "ensure_will 0.407149\n", - "ensure_* 0.412689\n", - "agree_will 0.484440\n", - "undertake_will 0.525983\n", - "take_* 0.535627\n", - "undertake_* 0.536568\n", - "may>* 0.543304\n", - "take_will 0.566800\n", - "press_may 0.571226\n", - "press_* 0.593260\n", + " cluster_dist\n", + "index \n", + "give_* 0.427345\n", + "give_can 0.526360\n", + "give_will 0.528818\n", + "see_* 0.541311\n", + "assure_will 0.549835\n", + "assure_* 0.584025\n", + "discuss_* 0.591057\n", + "have_* 0.592760\n", + "reassure_* 0.620947\n", + "discuss_will 0.627564\n", "\n", "context terms\n", - " cluster_dist\n", - "index \n", - "am_aware 0.581255\n", - "am_always 0.593945\n", - "am_sure 0.628000\n", - "am_of 0.655275\n", - "am_grateful 0.659158\n", - "am_interested 0.666939\n", - "am_not 0.679442\n", - "try_* 0.684235\n", - "confess_* 0.692829\n", - "seek_* 0.719882\n", + " cluster_dist\n", + "index \n", + "understand_* 0.642189\n", + "when>* 0.687080\n", + "am_concerned 0.688567\n", + "understand_fully 0.689203\n", + "assure_* 0.690546\n", + "was_about 0.694483\n", + "understand_will 0.707195\n", + "am_satisfied 0.707623\n", + "assure_is 0.720145\n", + "assure_can 0.744900\n", "\n", "CLUSTER 2 2\n", "---\n", "terms\n", - " cluster_dist\n", - "index \n", - "agree_is 0.313285\n", - "agree_be 0.326589\n", - "agree_have 0.371677\n", - "agree_are 0.392267\n", - "agree_with 0.417120\n", - "agree_also 0.431296\n", - "agree_need 0.459429\n", - "be_agree 0.505595\n", - "agree_given 0.518590\n", - "is_agree 0.523877\n", + " cluster_dist\n", + "index \n", + "tell_* 0.497229\n", + "tell_will 0.545768\n", + "confirm_will 0.564324\n", + "confirm_* 0.573774\n", + "can>* 0.581039\n", + "how>* 0.588424\n", + "tell_can 0.597118\n", + "explain_* 0.600130\n", + "say_* 0.619994\n", + "explain_will 0.632284\n", "\n", "context terms\n", - " cluster_dist\n", - "index \n", - "agree_absolutely 0.440895\n", - "agree_certainly 0.446786\n", - "agree_will 0.448477\n", - "agree_is 0.450768\n", - "agree_be 0.457787\n", - "agree_strongly 0.465542\n", - "agree_however 0.466209\n", - "agree_wholeheartedly 0.466694\n", - "agree_completely 0.467850\n", - "agree_* 0.471350\n", + " cluster_dist\n", + "index \n", + "is>* 0.653612\n", + "tell_will 0.680050\n", + "is_what 0.687452\n", + "am_afraid 0.691371\n", + "tell_should 0.719463\n", + "tell_* 0.722463\n", + "represent_* 0.723182\n", + "on>* 0.723196\n", + "tell_are 0.733122\n", + "expect_* 0.738662\n", "\n", "CLUSTER 3 3\n", "---\n", "terms\n", - " cluster_dist\n", - "index \n", - "do_what 0.494729\n", - "do_can 0.536450\n", - "do_help 0.539715\n", - "take_what 0.550735\n", - "work_with 0.554005\n", - "work_will 0.555667\n", - "doing_are 0.573649\n", - "work_* 0.574394\n", - "doing_* 0.596905\n", - "do_* 0.598807\n", + " cluster_dist\n", + "index \n", + "agree_is 0.181025\n", + "agree_be 0.189122\n", + "agree_are 0.260053\n", + "agree_with 0.268076\n", + "agree_also 0.310908\n", + "agree_have 0.316698\n", + "agree_further 0.362442\n", + "is_agree 0.404585\n", + "agree_need 0.454182\n", + "be_agree 0.468914\n", "\n", "context terms\n", - " cluster_dist\n", - "index \n", - "raises_* 0.636251\n", - "am_pleased 0.673346\n", - "with_* 0.695410\n", - "makes_* 0.700331\n", - "through>* 0.728352\n", - "are_keen 0.743943\n", - "are_determined 0.753761\n", - "had_recently 0.777395\n", - "thank_for 0.784145\n", - "are_yet 0.784944\n", + " cluster_dist\n", + "index \n", + "agree_certainly 0.314437\n", + "agree_is 0.324106\n", + "agree_however 0.328711\n", + "agree_be 0.333174\n", + "agree_* 0.340822\n", + "agree_will 0.342947\n", + "agree_also 0.346806\n", + "agree_with 0.347905\n", + "agree_have 0.349221\n", + "agree_absolutely 0.350800\n", "\n", "CLUSTER 4 4\n", "---\n", "terms\n", - " cluster_dist\n", - "index \n", - "is_not 0.340599\n", - "think_* 0.440641\n", - "think_does 0.480421\n", - "does>not 0.480930\n", - "believe_* 0.511179\n", - "believe_does 0.528576\n", - "think_not 0.572628\n", - "has>not 0.582164\n", - "would>not 0.605298\n", - "should>* 0.608125\n", + " cluster_dist\n", + "index \n", + "do_what 0.510104\n", + "do_help 0.542297\n", + "do_can 0.549668\n", + "take_what 0.558956\n", + "work_with 0.559757\n", + "work_will 0.560180\n", + "doing_are 0.581044\n", + "work_* 0.582551\n", + "doing_* 0.603983\n", + "have_what 0.604028\n", "\n", "context terms\n", - " cluster_dist\n", - "index \n", - "is_for 0.520541\n", - "is_therefore 0.525952\n", - "is_extraordinary 0.533678\n", - "therefore>* 0.562317\n", - "is_surely 0.565929\n", - "is_not 0.576556\n", - "is_on 0.592949\n", - "is_in 0.594222\n", - "has_* 0.610643\n", - "suppose_* 0.621963\n", + " cluster_dist\n", + "index \n", + "raises_* 0.642016\n", + "am_pleased 0.686334\n", + "with_* 0.708684\n", + "makes_* 0.722158\n", + "through>* 0.729139\n", + "are_determined 0.756542\n", + "are_keen 0.757121\n", + "continuing_are 0.780108\n", + "are_yet 0.783221\n", + "had_recently 0.786321\n", "\n", "CLUSTER 5 5\n", "---\n", "terms\n", - " cluster_dist\n", - "index \n", - "give_* 0.456398\n", - "see_* 0.538979\n", - "give_can 0.543987\n", - "assure_will 0.548994\n", - "give_will 0.553678\n", - "assure_* 0.580302\n", - "have_* 0.584380\n", - "discuss_* 0.599421\n", - "reassure_* 0.610053\n", - "given>* 0.624857\n", + " cluster_dist\n", + "index \n", + "is_not 0.446276\n", + "why>does 0.515228\n", + "think_does 0.534604\n", + "think_* 0.538671\n", + "believe_* 0.560391\n", + "does>not 0.570308\n", + "explain_is 0.576377\n", + "stop_* 0.582624\n", + "believe_does 0.591538\n", + "is_true 0.604974\n", "\n", "context terms\n", " cluster_dist\n", "index \n", - "understand_* 0.636752\n", - "assure_* 0.679695\n", - "when>* 0.683269\n", - "understand_fully 0.689111\n", - "am_concerned 0.692593\n", - "was_about 0.697184\n", - "understand_will 0.700170\n", - "am_satisfied 0.704546\n", - "assure_is 0.708241\n", - "have_might 0.720801\n", + "therefore>* 0.536575\n", + "is_therefore 0.551210\n", + "wonder_* 0.562381\n", + "surely>* 0.591958\n", + "is_on 0.636717\n", + "is_at 0.641183\n", + "is_suggest 0.642476\n", + "of>* 0.643083\n", + "is_extraordinary 0.644015\n", + "is_in 0.668729\n", "\n", "CLUSTER 6 6\n", "---\n", "terms\n", - " cluster_dist\n", - "index \n", - "tell_* 0.460119\n", - "can>* 0.506656\n", - "tell_will 0.515027\n", - "confirm_* 0.536725\n", - "say_* 0.550612\n", - "confirm_will 0.557403\n", - "tell_can 0.570300\n", - "say_can 0.593507\n", - "expect_does 0.661614\n", - "remain_* 0.664343\n", + " cluster_dist\n", + "index \n", + "be_* 0.380167\n", + "as>* 0.446805\n", + "accept_will 0.458083\n", + "be_not 0.463601\n", + "be_would 0.508921\n", + "recognise_does 0.509598\n", + "accept_* 0.516023\n", + "in>* 0.517295\n", + "recognise_* 0.532365\n", + "accept_does 0.533569\n", "\n", "context terms\n", " cluster_dist\n", "index \n", - "am_afraid 0.651999\n", - "tell_will 0.678107\n", - "tell_* 0.683149\n", - "on>* 0.696367\n", - "tell_can 0.702783\n", - "tell_are 0.706053\n", - "have_not 0.712576\n", - "tell_however 0.723561\n", - "have_were 0.725421\n", - "tell_is 0.726888\n", + "is_surely 0.573458\n", + "be_indeed 0.604535\n", + "is_not 0.627032\n", + "stated_* 0.638818\n", + "has_* 0.640160\n", + "be_possible 0.643052\n", + "be_difficult 0.650494\n", + "be_important 0.650706\n", + "am_certain 0.651591\n", + "however>* 0.652481\n", "\n", "CLUSTER 7 7\n", "---\n", "terms\n", " cluster_dist\n", "index \n", - "be_* 0.380684\n", - "as>* 0.442467\n", - "accept_will 0.452264\n", - "be_not 0.468965\n", - "recognise_does 0.508869\n", - "accept_* 0.510929\n", - "be_would 0.517275\n", - "in>* 0.519376\n", - "accept_does 0.528391\n", - "recognise_* 0.532189\n", + "ensure_will 0.421913\n", + "ensure_* 0.424475\n", + "agree_will 0.487595\n", + "undertake_will 0.509146\n", + "undertake_* 0.520769\n", + "take_* 0.555380\n", + "press_may 0.569691\n", + "may>* 0.572695\n", + "consider_will 0.574867\n", + "consider_* 0.577258\n", "\n", "context terms\n", - " cluster_dist\n", - "index \n", - "be_indeed 0.597686\n", - "be_possible 0.640883\n", - "stated_* 0.644839\n", - "be_difficult 0.648393\n", - "be_important 0.649744\n", - "be_should 0.653422\n", - "am_certain 0.655182\n", - "be_on 0.657499\n", - "be_at 0.659461\n", - "be_would 0.660128\n", + " cluster_dist\n", + "index \n", + "am_aware 0.557982\n", + "am_always 0.600846\n", + "am_sure 0.642930\n", + "am_of 0.653652\n", + "am_not 0.668030\n", + "am_interested 0.672428\n", + "am_grateful 0.679423\n", + "try_* 0.685277\n", + "confess_* 0.698852\n", + "seek_* 0.721268\n", "\n" ] } @@ -2435,22 +2311,18 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", - "execution_count": 53, - "metadata": { - "collapsed": true - }, + "execution_count": 54, + "metadata": {}, "outputs": [], "source": [ - "q_pipe.set_cluster_names(['demand_account', 'shared_concern', 'agreement', 'issue_update',\n", - " 'question_premises', 'request_assurance', 'prompt_comment', 'accept_propose'])" + "q_pipe.set_cluster_names(['shared_concern', 'request_assurance', 'prompt_comment', 'agreement', \n", + " 'issue_update', 'question_premises', 'accept_propose', 'demand_account'])" ] }, { @@ -2462,10 +2334,8 @@ }, { "cell_type": "code", - "execution_count": 54, - "metadata": { - "collapsed": true - }, + "execution_count": 55, + "metadata": {}, "outputs": [], "source": [ "new_ut = q_pipe.transform_utterance(\n", @@ -2474,14 +2344,14 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 56, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "question type: demand_account\n" + "question type: prompt_comment\n" ] } ], @@ -2498,39 +2368,39 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 57, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[-0.22965707394434226,\n", - " 0.10581579121622418,\n", - " 0.07254644720724363,\n", - " 0.20469517320080868,\n", - " 0.10699971871015322,\n", - " -0.13490207014444577,\n", - " -0.26702240703760644,\n", - " 0.13488915445375071,\n", - " 0.15966352756358362,\n", - " 0.0107342180615978,\n", - " -0.20582957448248315,\n", - " -0.0300809488106593,\n", - " -0.1253219697701489,\n", - " -0.1767950015556454,\n", - " -0.24238622998068718,\n", - " 0.3250296440985557,\n", - " -0.3060914209840068,\n", - " 0.1708864159910593,\n", - " -0.07358702431952024,\n", - " 0.4387561934517013,\n", - " 0.06139064383539123,\n", - " 0.006236864476251507,\n", - " -0.39667464447326306,\n", - " -0.08685370687788838]" + "[-0.2296570739443364,\n", + " 0.10581579121624114,\n", + " 0.07254644720723367,\n", + " 0.20469517320080635,\n", + " 0.10699971871019655,\n", + " -0.13490207014441047,\n", + " -0.26702240703759755,\n", + " 0.13488915445375704,\n", + " 0.15966352756360683,\n", + " 0.010734218061526093,\n", + " -0.20582957448247755,\n", + " -0.030080948810664185,\n", + " -0.12532196977015536,\n", + " -0.1767950015555799,\n", + " -0.24238622998072742,\n", + " 0.3250296440986241,\n", + " -0.30609142098397113,\n", + " 0.17088641599100582,\n", + " -0.07358702431958357,\n", + " 0.4387561934516926,\n", + " 0.061390643835384485,\n", + " 0.006236864476233286,\n", + " -0.39667464447326534,\n", + " -0.08685370687786637]" ] }, - "execution_count": 56, + "execution_count": 57, "metadata": {}, "output_type": "execute_result" } @@ -2540,20 +2410,11 @@ "# dependency parses may change from version to version\n", "new_ut.meta['fw_repr']" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -2567,7 +2428,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.3" + "version": "3.8.3" } }, "nbformat": 4, diff --git a/examples/dataset-examples/CANDOR/candor_to_convokit.ipynb b/examples/dataset-examples/CANDOR/candor_to_convokit.ipynb new file mode 100644 index 00000000..20995bd8 --- /dev/null +++ b/examples/dataset-examples/CANDOR/candor_to_convokit.ipynb @@ -0,0 +1,795 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Converting the CANDOR Corpus into ConvoKit format \n", + "\n", + "This notebook is to help people working with CANDOR Corpus to quickly transform it into ConvoKit format.\n", + "You can request CANDOR Corpus seperately from and run through this notebook to have ConvoKit CANDOR Corpus instantly!" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from tqdm import tqdm\n", + "from convokit import Corpus, Speaker, Utterance\n", + "from collections import defaultdict\n", + "import pandas as pd" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Below you should replace the CANDOR_PATH to the CANDOR Corpus with your own local directory path. Note that inside the CANDOR Corpus directory, there should be 3 files, a survey.tsv plus two transcript_method.tsv, and another directory, raw, which contains all the transcriptions in three methods." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# replace the directory with where your CANDOR corpus is saved\n", + "CANDOR_PATH = ''\n", + "# ls: raw survey.tsv transcript_backbiter.tsv transcript_cliffhanger.tsv" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "survey_path = CANDOR_PATH + \"survey.tsv\"\n", + "survey = pd.read_csv(survey_path, delimiter='\\t')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Creating Speaker List\n", + "\n", + "We create speaker list by going through the survey, and extract all speakers from the survey (survey is filled before and after by every speaker who conducted video calls during the experiment, and it is required when when CANDOR corpus is collecting data from participants!)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1454" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "all_speakers = list(set(survey['user_id'].to_list() + survey['partner_id'].to_list()))\n", + "len(all_speakers)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "corpus_speakers = {k: Speaker(id = k, meta = {}) for k in all_speakers}" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "number of speakers in the data = 1454\n" + ] + } + ], + "source": [ + "print(\"number of speakers in the data = {}\".format(len(corpus_speakers)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Creating Utterance List\n", + "\n", + "Now, we get extract all utterances from the corpus, conversation by conversation. Here, each conversation is stored as an individual folder in the \"raw\" folder. Thus, we go into it, and extract one by one.\n", + "\n", + "Note that, there are three versions of transcripts for each conversation, corresponding to three different ways audio transcriptions are processed. For consistency, we recommend sticking with one type of transcription for corpus construction here. The three types are Audiophile, Cliffhanger, Backbiter. Modify the \"transcription_type\" varible for your intended processing method. Refer back to the paper for details on what each transcription processing method is about. \n", + "\n", + "CANDOR corpus paper: https://www.science.org/doi/epdf/10.1126/sciadv.adf3197" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "99" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import os\n", + "conversations_list_path = CANDOR_PATH + \"raw/\"\n", + "conversations = [d for d in os.listdir(conversations_list_path) if os.path.isdir(os.path.join(conversations_list_path, d))]\n", + "transcription_type = \"cliffhanger\" # or \"backbiter\" or \"audiophile\"\n", + "len(conversations)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that the fields of ConvoKit Utterance objects are:\n", + "Utterance(id=..., speaker =..., conversation_id =..., reply_to=..., timestamp=..., text =..., meta =...)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "30075\n" + ] + } + ], + "source": [ + "utt_id_count = 0\n", + "corpus_utterances = {}\n", + "for convo_id in conversations:\n", + " meta_path = f\"{conversations_list_path}{convo_id}/metadata.json\"\n", + " transcription_path = f\"{conversations_list_path}{convo_id}/transcription/transcript_{transcription_type}.csv\"\n", + " transcription = pd.read_csv(transcription_path)\n", + " for index, row in transcription.iterrows():\n", + " reply_to = None if row['turn_id'] == 0 else utt_id_count-1\n", + " meta = {}\n", + " for k, v in row.items():\n", + " if k != \"speaker\" and k != \"utterance\":\n", + " meta.update({k : v})\n", + " utt = Utterance(id=str(utt_id_count), speaker=corpus_speakers[row['speaker']], conversation_id=str(convo_id), reply_to=str(reply_to), timestamp=row['start'], text=row['utterance'], meta=meta)\n", + " corpus_utterances[utt_id_count] = utt\n", + " utt_id_count += 1\n", + "\n", + "print(utt_id_count)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "utterance_list = corpus_utterances.values()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "CANDOR_corpus = Corpus(utterances=utterance_list)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Updating Conversation Info\n", + "\n", + "Here, we update the conversation info, especially the metadata from surveys participants filled.\n", + "\n", + "For each conversation, we got 1 survey from each conversation participant, and as this conversation is 2 people video calling, we got 2 surveys per conversation. We decided to organize the metadata in the following way:\n", + "\n", + "convo.meta = {\"survey field name\" : {\"sp_A id\" : \"sp_A survey value\", \"sp_B\" : \"sp_B survey value\"} ... }\n", + "\n", + "We choose this way or organizing metadata, as we usually focus on several survey fields, and analysis the values from two participants. This format allow us to quickly extract such information. \n", + "\n", + "You can also feel free to modify the format to suit your research / work needs." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "number of conversations in the dataset = 99\n" + ] + } + ], + "source": [ + "print(\"number of conversations in the dataset = {}\".format(len(CANDOR_corpus.get_conversation_ids())))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Below we see how the survey from two participants of a random conversation looks like" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Unnamed: 0user_idpartner_idconvo_iddatesurvey_duration_in_secondstime_zonepre_affectpre_arousaltechnical_quality...my_conscientiousmy_neuroticmy_openyour_extraversionyour_agreeableyour_conscientiousyour_neuroticyour_openwho_i_talked_to_most_past24most_common_format_past24
179405b5e7e643bac1d0001f9bf285f07070d75038e05e9fcf5158bf369ea-ab22-4723-ba24-caeff2204a9e2020-08-1327938.05.05.01.0...2.04.3333335.0000002.3333334.6666673.0000003.0000003.666667NaNNaN
179515f07070d75038e05e9fcf5155b5e7e643bac1d0001f9bf288bf369ea-ab22-4723-ba24-caeff2204a9e2020-08-13563810.05.05.01.0...4.02.0000004.6666673.6666673.6666672.6666673.6666674.000000NaNNaN
\n", + "

2 rows × 223 columns

\n", + "
" + ], + "text/plain": [ + " Unnamed: 0 user_id partner_id \\\n", + "1794 0 5b5e7e643bac1d0001f9bf28 5f07070d75038e05e9fcf515 \n", + "1795 1 5f07070d75038e05e9fcf515 5b5e7e643bac1d0001f9bf28 \n", + "\n", + " convo_id date \\\n", + "1794 8bf369ea-ab22-4723-ba24-caeff2204a9e 2020-08-13 \n", + "1795 8bf369ea-ab22-4723-ba24-caeff2204a9e 2020-08-13 \n", + "\n", + " survey_duration_in_seconds time_zone pre_affect pre_arousal \\\n", + "1794 2793 8.0 5.0 5.0 \n", + "1795 5638 10.0 5.0 5.0 \n", + "\n", + " technical_quality ... my_conscientious my_neurotic my_open \\\n", + "1794 1.0 ... 2.0 4.333333 5.000000 \n", + "1795 1.0 ... 4.0 2.000000 4.666667 \n", + "\n", + " your_extraversion your_agreeable your_conscientious your_neurotic \\\n", + "1794 2.333333 4.666667 3.000000 3.000000 \n", + "1795 3.666667 3.666667 2.666667 3.666667 \n", + "\n", + " your_open who_i_talked_to_most_past24 most_common_format_past24 \n", + "1794 3.666667 NaN NaN \n", + "1795 4.000000 NaN NaN \n", + "\n", + "[2 rows x 223 columns]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "convo = CANDOR_corpus.random_conversation()\n", + "survey[survey[\"convo_id\"] == convo.id]" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "for convo in CANDOR_corpus.iter_conversations():\n", + " convo_id = convo.id\n", + " row1 = survey[survey['convo_id'] == convo_id].iloc[0]\n", + " row2 = survey[survey['convo_id'] == convo_id].iloc[1]\n", + " sp_A = row1['user_id']\n", + " sp_B = row2['user_id']\n", + " metadata = {}\n", + " for field in list(row1.index[1:]):\n", + " if field != \"convo_id\" and field != 'user_id':\n", + " field_values = {sp_A : row1[field], sp_B : row2[field]}\n", + " metadata.update({field : field_values})\n", + " convo.meta = metadata\n", + "\n", + "# Use Below instead if you want to have metadata formatted in: convo.meta = {sp_A : {sp_A survey with keys to be field, value to be values}, sp_B : {sp_B survey}}\n", + "# for convo in CANDOR_corpus.iter_conversations():\n", + "# convo_id = convo.id\n", + "# row1 = survey[survey['convo_id'] == convo_id].iloc[0]\n", + "# row2 = survey[survey['convo_id'] == convo_id].iloc[1]\n", + "# metadata = {row1['user_id'] : {}, row2['user_id'] : {}}\n", + "# for row in [row1, row2]:\n", + "# for k, v in row.items():\n", + "# if k != \"convo_id\":\n", + "# metadata[row['user_id']].update({k : v})\n", + "# convo.meta = metadata\n", + "# convo.meta.update({\"speaker_A\" : row1['user_id']})" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "ConvoKitMeta({'partner_id': {'5e52af8dd120e7000bc35826': '5e8ab4b84d3d6775b807e9ba', '5e8ab4b84d3d6775b807e9ba': '5e52af8dd120e7000bc35826'}, 'date': {'5e52af8dd120e7000bc35826': '2020-10-20', '5e8ab4b84d3d6775b807e9ba': '2020-10-20'}, 'survey_duration_in_seconds': {'5e52af8dd120e7000bc35826': 3524, '5e8ab4b84d3d6775b807e9ba': 2726}, 'time_zone': {'5e52af8dd120e7000bc35826': 5.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'pre_affect': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'pre_arousal': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'technical_quality': {'5e52af8dd120e7000bc35826': 1.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'conv_length': {'5e52af8dd120e7000bc35826': 32.0, '5e8ab4b84d3d6775b807e9ba': 31.0}, 'affect': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 8.0}, 'arousal': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'overall_affect': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'overall_arousal': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'overall_memory_rating': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 8.0}, 'begin_affect': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'begin_arousal': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'begin_memory_rating': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'begin_memory_text': {'5e52af8dd120e7000bc35826': 'We got to know each other a bit and talked about where we were from and what college we went to and the COVID situations going on at our colleges.', '5e8ab4b84d3d6775b807e9ba': 'I was kinda worried cause he said he was in the military and I am anti military, so I was nervous '}, 'middle_affect': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'middle_arousal': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'middle_memory_rating': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'middle_memory_text': {'5e52af8dd120e7000bc35826': \"We talked about my experiences in Army ROTC and the month-long training that I had to do over the summer. We also talked a bit about our experiences being RA's.\", '5e8ab4b84d3d6775b807e9ba': 'We talked about RA life and how fucked up it is'}, 'end_affect': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 8.0}, 'end_arousal': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 8.0}, 'end_memory_rating': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 8.0}, 'end_memory_text': {'5e52af8dd120e7000bc35826': \"We kept talking about ROTC and also about being gay in the military since we were both LGBT. That led to us talking about our parent's reactions and if we were fully out.\", '5e8ab4b84d3d6775b807e9ba': 'We talked about his intense military camping \"trip\" and how tragic that was'}, 'worst_affect': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'worst_arousal': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'best_affect': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 8.0}, 'best_arousal': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'how_enjoyable': {'5e52af8dd120e7000bc35826': 8.0, '5e8ab4b84d3d6775b807e9ba': 8.0}, 'i_like_you': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'you_like_me': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'in_common': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'conversationalist': {'5e52af8dd120e7000bc35826': 89.0, '5e8ab4b84d3d6775b807e9ba': 71.0}, 'next_seven_days': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'my_friends_like_you': {'5e52af8dd120e7000bc35826': 86.0, '5e8ab4b84d3d6775b807e9ba': 16.0}, 'good_for_advice': {'5e52af8dd120e7000bc35826': 81.0, '5e8ab4b84d3d6775b807e9ba': 35.0}, 'i_felt_close_to_my_partner': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'i_would_like_to_become_friends': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'i_paid_attention_to_my_partner': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'my_partner_paid_attention_to_me': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'my_partner_was_clear_and_coherent': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'interested_in_exchanging_contact_info': {'5e52af8dd120e7000bc35826': 1.0, '5e8ab4b84d3d6775b807e9ba': 1.0}, 'you_are_intelligent': {'5e52af8dd120e7000bc35826': 8.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'you_are_quickwitted': {'5e52af8dd120e7000bc35826': 8.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'you_are_competent': {'5e52af8dd120e7000bc35826': 8.0, '5e8ab4b84d3d6775b807e9ba': 9.0}, 'you_are_kind': {'5e52af8dd120e7000bc35826': 9.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'you_are_friendly': {'5e52af8dd120e7000bc35826': 9.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'you_are_warm': {'5e52af8dd120e7000bc35826': 9.0, '5e8ab4b84d3d6775b807e9ba': 8.0}, 'you_think_i_am_intelligent': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'you_think_i_am_quickwitted': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'you_think_i_am_competent': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'you_think_i_am_kind': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'you_think_i_am_friendly': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'you_think_i_am_warm': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'you_are_humble': {'5e52af8dd120e7000bc35826': 8.0, '5e8ab4b84d3d6775b807e9ba': 8.0}, 'you_are_giving': {'5e52af8dd120e7000bc35826': 8.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'you_are_fair': {'5e52af8dd120e7000bc35826': 8.0, '5e8ab4b84d3d6775b807e9ba': 8.0}, 'you_are_trustworthy': {'5e52af8dd120e7000bc35826': 9.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'you_are_agreeable': {'5e52af8dd120e7000bc35826': 8.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'you_are_playful': {'5e52af8dd120e7000bc35826': 9.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'i_am_intelligent': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 9.0}, 'i_am_quickwitted': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'i_am_competent': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 9.0}, 'i_am_kind': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'i_am_friendly': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'i_am_warm': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'i_am_humble': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'i_am_giving': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'i_am_fair': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'i_am_trustworthy': {'5e52af8dd120e7000bc35826': 8.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'i_am_agreeable': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'i_am_playful': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'rest_of_day_open': {'5e52af8dd120e7000bc35826': \"I do not see it going very well, since I have a lot of stuff to do for school and an upcoming three-day event for ROTC that I do not actually want to go to. I'm also a bit stressed out dealing with other people at my college and the whole COVID situation.\", '5e8ab4b84d3d6775b807e9ba': \"I think I am just going to finish up some homework assignment. I also have some essays and projects due, but I think it'll be a good week and I am going to visit some friends and drink with them, so I am super excited about visiting them this weekend\"}, 'critical_positive': {'5e52af8dd120e7000bc35826': \"I think we had a good amount in common that let us have a good conversation without getting bored of each other's company. I also think we had a pretty good banter going and it made for a very enjoyable conversation. My partner was also very nice and easy to talk to.\", '5e8ab4b84d3d6775b807e9ba': 'I am really glad that he told me he was gay. I was very nervous because you never know who you are going to meet on these chats and he pulled up in a cameo hat, and that is usually not a good sign, but I think he knew that and tried to make me feel as comfortable as possible and I really liked that. '}, 'critical_negative': {'5e52af8dd120e7000bc35826': \"I think our conversation worked really well and I wouldn't say that we had and problems that made the conversation boring or feel too long. I was afraid I was talking a bit too much, but I don't think it was bad enough that the entire conversation was ruined because of it.\", '5e8ab4b84d3d6775b807e9ba': \"I think if I had been a little bit more opened minded, then the beginning of the convo would have been more comfortable. I also assumed he had a good relationship with his parents and it turned out he didn't so just remembering to not make as many judgements about people. \"}, 'smiles': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 1.0}, 'laughter': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'questions': {'5e52af8dd120e7000bc35826': 5.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'nods': {'5e52af8dd120e7000bc35826': 5.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'verbal_feedback': {'5e52af8dd120e7000bc35826': 5.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'speak_quickly': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'my_turn_length': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'your_turn_length': {'5e52af8dd120e7000bc35826': 5.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'topic_diversity': {'5e52af8dd120e7000bc35826': 5.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'turn_overlap_gap': {'5e52af8dd120e7000bc35826': 5.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'i_disclosed': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'you_disclosed': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'i_am_good_listener': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'you_are_good_listener': {'5e52af8dd120e7000bc35826': 8.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'conv_leader': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'talk_time_100_1': {'5e52af8dd120e7000bc35826': 60.0, '5e8ab4b84d3d6775b807e9ba': 45.0}, 'you_total_talk_time': {'5e52af8dd120e7000bc35826': 40.0, '5e8ab4b84d3d6775b807e9ba': 55.0}, 'conv_pace': {'5e52af8dd120e7000bc35826': 5.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'my_mind_wander': {'5e52af8dd120e7000bc35826': 2.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'your_mind_wander': {'5e52af8dd120e7000bc35826': 3.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'i_am_funny': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'you_are_funny': {'5e52af8dd120e7000bc35826': 8.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'i_am_polite': {'5e52af8dd120e7000bc35826': 8.0, '5e8ab4b84d3d6775b807e9ba': 8.0}, 'you_are_polite': {'5e52af8dd120e7000bc35826': 8.0, '5e8ab4b84d3d6775b807e9ba': 8.0}, 'i_tried_to_impress': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'you_tried_to_impress': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'responsive_1': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'responsive_2': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'responsive_3': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'end_you': {'5e52af8dd120e7000bc35826': 5.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'end_you_time_1': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'longer_self': {'5e52af8dd120e7000bc35826': 1.0, '5e8ab4b84d3d6775b807e9ba': nan}, 'how_long_you': {'5e52af8dd120e7000bc35826': 3.0, '5e8ab4b84d3d6775b807e9ba': nan}, 'end_other': {'5e52af8dd120e7000bc35826': 5.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'end_other_time_1': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': 16.0}, 'longer_other': {'5e52af8dd120e7000bc35826': 2.0, '5e8ab4b84d3d6775b807e9ba': nan}, 'how_long_other': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'our_thoughts_synced_up_sr1': {'5e52af8dd120e7000bc35826': 5.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'developed_joint_perspective_sr2': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'shared_thoughts_feels_sr3': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'discussed_real_things_sr4': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'thoughts_became_more_alike_sr5': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'anticipated_each_other_sr6': {'5e52af8dd120e7000bc35826': 5.0, '5e8ab4b84d3d6775b807e9ba': 1.0}, 'became_certain_of_perception_sr7': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 1.0}, 'saw_world_in_same_way_sr8': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'i_think_my_status': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'i_think_your_status': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'you_think_my_status': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'my_bfi_1': {'5e52af8dd120e7000bc35826': 2.0, '5e8ab4b84d3d6775b807e9ba': 1.0}, 'my_bfi_2': {'5e52af8dd120e7000bc35826': 2.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'my_bfi_3': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'my_bfi_4': {'5e52af8dd120e7000bc35826': 3.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'my_bfi_5': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'my_bfi_6': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'my_bfi_7': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'my_bfi_8': {'5e52af8dd120e7000bc35826': 3.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'my_bfi_9': {'5e52af8dd120e7000bc35826': 2.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'my_bfi_10': {'5e52af8dd120e7000bc35826': 3.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'my_bfi_11': {'5e52af8dd120e7000bc35826': 3.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'my_bfi_12': {'5e52af8dd120e7000bc35826': 2.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'my_bfi_13': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'my_bfi_14': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'my_bfi_15': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'your_bfi_1': {'5e52af8dd120e7000bc35826': 2.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'your_bfi_2': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'your_bfi_3': {'5e52af8dd120e7000bc35826': 3.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'your_bfi_4': {'5e52af8dd120e7000bc35826': 3.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'your_bfi_5': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'your_bfi_6': {'5e52af8dd120e7000bc35826': 3.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'your_bfi_7': {'5e52af8dd120e7000bc35826': 2.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'your_bfi_8': {'5e52af8dd120e7000bc35826': 2.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'your_bfi_9': {'5e52af8dd120e7000bc35826': 2.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'your_bfi_10': {'5e52af8dd120e7000bc35826': 3.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'your_bfi_11': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'your_bfi_12': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'your_bfi_13': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'your_bfi_14': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'your_bfi_15': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'you_lack_companionship': {'5e52af8dd120e7000bc35826': 1.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'you_feel_left_out': {'5e52af8dd120e7000bc35826': 1.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'you_feel_isolated': {'5e52af8dd120e7000bc35826': 1.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'sex': {'5e52af8dd120e7000bc35826': 'male', '5e8ab4b84d3d6775b807e9ba': 'female'}, 'politics': {'5e52af8dd120e7000bc35826': 2.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'race': {'5e52af8dd120e7000bc35826': 'white', '5e8ab4b84d3d6775b807e9ba': 'black_or_african_american'}, 'edu': {'5e52af8dd120e7000bc35826': 'some_college', '5e8ab4b84d3d6775b807e9ba': 'some_college'}, 'employ': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 1.0}, 'employ_7_TEXT': {'5e52af8dd120e7000bc35826': 'Student', '5e8ab4b84d3d6775b807e9ba': nan}, 'sleep_today': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 8.0}, 'sleep_usual': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'know_partner_1': {'5e52af8dd120e7000bc35826': 2.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'how_know_partner': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'realtime': {'5e52af8dd120e7000bc35826': False, '5e8ab4b84d3d6775b807e9ba': False}, 'did': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'guided': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'age': {'5e52af8dd120e7000bc35826': 20.0, '5e8ab4b84d3d6775b807e9ba': 21.0}, 'conversation_count_past24': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'conversation_hours_past24': {'5e52af8dd120e7000bc35826': 25.0, '5e8ab4b84d3d6775b807e9ba': 25.0}, 'convo_who_family': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'convo_who_romantic_partner': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'convo_who_friends': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'convo_who_work_colleagues': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'convo_who_other': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'convo_format_in_person': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'convo_format_video_chat': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'convo_format_phone_call': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'convo_format_text': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'convo_format_other': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'my_isolation_pre_covid': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'my_isolation_post_covid': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'my_stress_pre_covid': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'my_distracted_pre_covid': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'my_sad_pre_covid': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'my_stress_post_covid': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'my_distracted_post_covid': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'my_sad_post_covid': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'n_living_with_me_pre_covid': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'n_living_with_me_post_covid': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'am_i_sheltering_in_place_now': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'how_long_shelter_in_place': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'i_lack_companionship': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'i_feel_left_out': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'i_feel_isolated': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'shared_reality': {'5e52af8dd120e7000bc35826': 5.5, '5e8ab4b84d3d6775b807e9ba': 3.125}, 'responsive': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 5.666666666666668}, 'my_loneliness': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'your_loneliness': {'5e52af8dd120e7000bc35826': 1.0, '5e8ab4b84d3d6775b807e9ba': 2.333333333333333}, 'RMET_score': {'5e52af8dd120e7000bc35826': 0.0, '5e8ab4b84d3d6775b807e9ba': 0.0}, 'IRI_PT_score': {'5e52af8dd120e7000bc35826': 0.0, '5e8ab4b84d3d6775b807e9ba': 0.0}, 'IRI_EC_score': {'5e52af8dd120e7000bc35826': 0.0, '5e8ab4b84d3d6775b807e9ba': 0.0}, 'AQ_social_skill_score': {'5e52af8dd120e7000bc35826': 0.0, '5e8ab4b84d3d6775b807e9ba': 0.0}, 'AQ_communication_score': {'5e52af8dd120e7000bc35826': 0.0, '5e8ab4b84d3d6775b807e9ba': 0.0}, 'BFNE_score': {'5e52af8dd120e7000bc35826': 0.0, '5e8ab4b84d3d6775b807e9ba': 0.0}, 'my_extraversion': {'5e52af8dd120e7000bc35826': 3.6666666666666665, '5e8ab4b84d3d6775b807e9ba': 3.333333333333333}, 'my_agreeable': {'5e52af8dd120e7000bc35826': 2.0, '5e8ab4b84d3d6775b807e9ba': 2.6666666666666665}, 'my_conscientious': {'5e52af8dd120e7000bc35826': 3.0, '5e8ab4b84d3d6775b807e9ba': 2.6666666666666665}, 'my_neurotic': {'5e52af8dd120e7000bc35826': 2.333333333333333, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'my_open': {'5e52af8dd120e7000bc35826': 3.6666666666666665, '5e8ab4b84d3d6775b807e9ba': 2.6666666666666665}, 'your_extraversion': {'5e52af8dd120e7000bc35826': 3.6666666666666665, '5e8ab4b84d3d6775b807e9ba': 2.333333333333333}, 'your_agreeable': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'your_conscientious': {'5e52af8dd120e7000bc35826': 3.6666666666666665, '5e8ab4b84d3d6775b807e9ba': 3.333333333333333}, 'your_neurotic': {'5e52af8dd120e7000bc35826': 2.333333333333333, '5e8ab4b84d3d6775b807e9ba': 3.333333333333333}, 'your_open': {'5e52af8dd120e7000bc35826': 3.6666666666666665, '5e8ab4b84d3d6775b807e9ba': 2.333333333333333}, 'who_i_talked_to_most_past24': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'most_common_format_past24': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}})" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "convo = CANDOR_corpus.random_conversation()\n", + "convo.meta" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['5e8ab4b84d3d6775b807e9ba', '5e52af8dd120e7000bc35826']" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "convo.get_speaker_ids()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Save the Corpus" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "SAVE_PATH = ''\n", + "CANDOR_corpus.dump(f\"CANDOR-corpus-{transcription_type}\", base_path=SAVE_PATH)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'utterances-index': {'turn_id': [\"\"],\n", + " 'start': [\"\"],\n", + " 'stop': [\"\"],\n", + " 'interval': [\"\"],\n", + " 'delta': [\"\"],\n", + " 'questions': [\"\"],\n", + " 'end_question': [\"\"],\n", + " 'overlap': [\"\"],\n", + " 'n_words': [\"\"]},\n", + " 'speakers-index': {},\n", + " 'conversations-index': {'partner_id': [\"\"],\n", + " 'date': [\"\"],\n", + " 'survey_duration_in_seconds': ['bin'],\n", + " 'time_zone': [\"\"],\n", + " 'pre_affect': [\"\"],\n", + " 'pre_arousal': [\"\"],\n", + " 'technical_quality': [\"\"],\n", + " 'conv_length': [\"\"],\n", + " 'affect': [\"\"],\n", + " 'arousal': [\"\"],\n", + " 'overall_affect': [\"\"],\n", + " 'overall_arousal': [\"\"],\n", + " 'overall_memory_rating': [\"\"],\n", + " 'begin_affect': [\"\"],\n", + " 'begin_arousal': [\"\"],\n", + " 'begin_memory_rating': [\"\"],\n", + " 'begin_memory_text': [\"\"],\n", + " 'middle_affect': [\"\"],\n", + " 'middle_arousal': [\"\"],\n", + " 'middle_memory_rating': [\"\"],\n", + " 'middle_memory_text': [\"\"],\n", + " 'end_affect': [\"\"],\n", + " 'end_arousal': [\"\"],\n", + " 'end_memory_rating': [\"\"],\n", + " 'end_memory_text': [\"\"],\n", + " 'worst_affect': [\"\"],\n", + " 'worst_arousal': [\"\"],\n", + " 'best_affect': [\"\"],\n", + " 'best_arousal': [\"\"],\n", + " 'how_enjoyable': [\"\"],\n", + " 'i_like_you': [\"\"],\n", + " 'you_like_me': [\"\"],\n", + " 'in_common': [\"\"],\n", + " 'conversationalist': [\"\"],\n", + " 'next_seven_days': [\"\"],\n", + " 'my_friends_like_you': [\"\"],\n", + " 'good_for_advice': [\"\"],\n", + " 'i_felt_close_to_my_partner': [\"\"],\n", + " 'i_would_like_to_become_friends': [\"\"],\n", + " 'i_paid_attention_to_my_partner': [\"\"],\n", + " 'my_partner_paid_attention_to_me': [\"\"],\n", + " 'my_partner_was_clear_and_coherent': [\"\"],\n", + " 'interested_in_exchanging_contact_info': [\"\"],\n", + " 'you_are_intelligent': [\"\"],\n", + " 'you_are_quickwitted': [\"\"],\n", + " 'you_are_competent': [\"\"],\n", + " 'you_are_kind': [\"\"],\n", + " 'you_are_friendly': [\"\"],\n", + " 'you_are_warm': [\"\"],\n", + " 'you_think_i_am_intelligent': [\"\"],\n", + " 'you_think_i_am_quickwitted': [\"\"],\n", + " 'you_think_i_am_competent': [\"\"],\n", + " 'you_think_i_am_kind': [\"\"],\n", + " 'you_think_i_am_friendly': [\"\"],\n", + " 'you_think_i_am_warm': [\"\"],\n", + " 'you_are_humble': [\"\"],\n", + " 'you_are_giving': [\"\"],\n", + " 'you_are_fair': [\"\"],\n", + " 'you_are_trustworthy': [\"\"],\n", + " 'you_are_agreeable': [\"\"],\n", + " 'you_are_playful': [\"\"],\n", + " 'i_am_intelligent': [\"\"],\n", + " 'i_am_quickwitted': [\"\"],\n", + " 'i_am_competent': [\"\"],\n", + " 'i_am_kind': [\"\"],\n", + " 'i_am_friendly': [\"\"],\n", + " 'i_am_warm': [\"\"],\n", + " 'i_am_humble': [\"\"],\n", + " 'i_am_giving': [\"\"],\n", + " 'i_am_fair': [\"\"],\n", + " 'i_am_trustworthy': [\"\"],\n", + " 'i_am_agreeable': [\"\"],\n", + " 'i_am_playful': [\"\"],\n", + " 'rest_of_day_open': [\"\"],\n", + " 'critical_positive': [\"\"],\n", + " 'critical_negative': [\"\"],\n", + " 'smiles': [\"\"],\n", + " 'laughter': [\"\"],\n", + " 'questions': [\"\"],\n", + " 'nods': [\"\"],\n", + " 'verbal_feedback': [\"\"],\n", + " 'speak_quickly': [\"\"],\n", + " 'my_turn_length': [\"\"],\n", + " 'your_turn_length': [\"\"],\n", + " 'topic_diversity': [\"\"],\n", + " 'turn_overlap_gap': [\"\"],\n", + " 'i_disclosed': [\"\"],\n", + " 'you_disclosed': [\"\"],\n", + " 'i_am_good_listener': [\"\"],\n", + " 'you_are_good_listener': [\"\"],\n", + " 'conv_leader': [\"\"],\n", + " 'talk_time_100_1': [\"\"],\n", + " 'you_total_talk_time': [\"\"],\n", + " 'conv_pace': [\"\"],\n", + " 'my_mind_wander': [\"\"],\n", + " 'your_mind_wander': [\"\"],\n", + " 'i_am_funny': [\"\"],\n", + " 'you_are_funny': [\"\"],\n", + " 'i_am_polite': [\"\"],\n", + " 'you_are_polite': [\"\"],\n", + " 'i_tried_to_impress': [\"\"],\n", + " 'you_tried_to_impress': [\"\"],\n", + " 'responsive_1': [\"\"],\n", + " 'responsive_2': [\"\"],\n", + " 'responsive_3': [\"\"],\n", + " 'end_you': [\"\"],\n", + " 'end_you_time_1': [\"\"],\n", + " 'longer_self': [\"\"],\n", + " 'how_long_you': [\"\"],\n", + " 'end_other': [\"\"],\n", + " 'end_other_time_1': [\"\"],\n", + " 'longer_other': [\"\"],\n", + " 'how_long_other': [\"\"],\n", + " 'our_thoughts_synced_up_sr1': [\"\"],\n", + " 'developed_joint_perspective_sr2': [\"\"],\n", + " 'shared_thoughts_feels_sr3': [\"\"],\n", + " 'discussed_real_things_sr4': [\"\"],\n", + " 'thoughts_became_more_alike_sr5': [\"\"],\n", + " 'anticipated_each_other_sr6': [\"\"],\n", + " 'became_certain_of_perception_sr7': [\"\"],\n", + " 'saw_world_in_same_way_sr8': [\"\"],\n", + " 'i_think_my_status': [\"\"],\n", + " 'i_think_your_status': [\"\"],\n", + " 'you_think_my_status': [\"\"],\n", + " 'my_bfi_1': [\"\"],\n", + " 'my_bfi_2': [\"\"],\n", + " 'my_bfi_3': [\"\"],\n", + " 'my_bfi_4': [\"\"],\n", + " 'my_bfi_5': [\"\"],\n", + " 'my_bfi_6': [\"\"],\n", + " 'my_bfi_7': [\"\"],\n", + " 'my_bfi_8': [\"\"],\n", + " 'my_bfi_9': [\"\"],\n", + " 'my_bfi_10': [\"\"],\n", + " 'my_bfi_11': [\"\"],\n", + " 'my_bfi_12': [\"\"],\n", + " 'my_bfi_13': [\"\"],\n", + " 'my_bfi_14': [\"\"],\n", + " 'my_bfi_15': [\"\"],\n", + " 'your_bfi_1': [\"\"],\n", + " 'your_bfi_2': [\"\"],\n", + " 'your_bfi_3': [\"\"],\n", + " 'your_bfi_4': [\"\"],\n", + " 'your_bfi_5': [\"\"],\n", + " 'your_bfi_6': [\"\"],\n", + " 'your_bfi_7': [\"\"],\n", + " 'your_bfi_8': [\"\"],\n", + " 'your_bfi_9': [\"\"],\n", + " 'your_bfi_10': [\"\"],\n", + " 'your_bfi_11': [\"\"],\n", + " 'your_bfi_12': [\"\"],\n", + " 'your_bfi_13': [\"\"],\n", + " 'your_bfi_14': [\"\"],\n", + " 'your_bfi_15': [\"\"],\n", + " 'you_lack_companionship': [\"\"],\n", + " 'you_feel_left_out': [\"\"],\n", + " 'you_feel_isolated': [\"\"],\n", + " 'sex': [\"\"],\n", + " 'politics': [\"\"],\n", + " 'race': [\"\"],\n", + " 'edu': [\"\"],\n", + " 'employ': [\"\"],\n", + " 'employ_7_TEXT': [\"\"],\n", + " 'sleep_today': [\"\"],\n", + " 'sleep_usual': [\"\"],\n", + " 'know_partner_1': [\"\"],\n", + " 'how_know_partner': [\"\"],\n", + " 'realtime': ['bin'],\n", + " 'did': [\"\"],\n", + " 'guided': [\"\"],\n", + " 'age': [\"\"],\n", + " 'conversation_count_past24': [\"\"],\n", + " 'conversation_hours_past24': [\"\"],\n", + " 'convo_who_family': [\"\"],\n", + " 'convo_who_romantic_partner': [\"\"],\n", + " 'convo_who_friends': [\"\"],\n", + " 'convo_who_work_colleagues': [\"\"],\n", + " 'convo_who_other': [\"\"],\n", + " 'convo_format_in_person': [\"\"],\n", + " 'convo_format_video_chat': [\"\"],\n", + " 'convo_format_phone_call': [\"\"],\n", + " 'convo_format_text': [\"\"],\n", + " 'convo_format_other': [\"\"],\n", + " 'my_isolation_pre_covid': [\"\"],\n", + " 'my_isolation_post_covid': [\"\"],\n", + " 'my_stress_pre_covid': [\"\"],\n", + " 'my_distracted_pre_covid': [\"\"],\n", + " 'my_sad_pre_covid': [\"\"],\n", + " 'my_stress_post_covid': [\"\"],\n", + " 'my_distracted_post_covid': [\"\"],\n", + " 'my_sad_post_covid': [\"\"],\n", + " 'n_living_with_me_pre_covid': [\"\"],\n", + " 'n_living_with_me_post_covid': [\"\"],\n", + " 'am_i_sheltering_in_place_now': [\"\"],\n", + " 'how_long_shelter_in_place': [\"\"],\n", + " 'i_lack_companionship': [\"\"],\n", + " 'i_feel_left_out': [\"\"],\n", + " 'i_feel_isolated': [\"\"],\n", + " 'shared_reality': [\"\"],\n", + " 'responsive': [\"\"],\n", + " 'my_loneliness': [\"\"],\n", + " 'your_loneliness': [\"\"],\n", + " 'RMET_score': [\"\"],\n", + " 'IRI_PT_score': [\"\"],\n", + " 'IRI_EC_score': [\"\"],\n", + " 'AQ_social_skill_score': [\"\"],\n", + " 'AQ_communication_score': [\"\"],\n", + " 'BFNE_score': [\"\"],\n", + " 'my_extraversion': [\"\"],\n", + " 'my_agreeable': [\"\"],\n", + " 'my_conscientious': [\"\"],\n", + " 'my_neurotic': [\"\"],\n", + " 'my_open': [\"\"],\n", + " 'your_extraversion': [\"\"],\n", + " 'your_agreeable': [\"\"],\n", + " 'your_conscientious': [\"\"],\n", + " 'your_neurotic': [\"\"],\n", + " 'your_open': [\"\"],\n", + " 'who_i_talked_to_most_past24': [\"\"],\n", + " 'most_common_format_past24': [\"\"]},\n", + " 'overall-index': {},\n", + " 'version': 1,\n", + " 'vectors': []}" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from convokit import meta_index\n", + "meta_index(filename = f\"{SAVE_PATH}/CANDOR-corpus-{transcription_type}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Retrieve Corpus" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "my_CANDOR_corpus = Corpus(filename=f\"{SAVE_PATH}/CANDOR-corpus-{transcription_type}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of Speakers: 186\n", + "Number of Utterances: 30075\n", + "Number of Conversations: 99\n" + ] + } + ], + "source": [ + "my_CANDOR_corpus.print_summary_stats()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} From dfee88018b9074b3ee96018cccd4c29f9ea3d1ea Mon Sep 17 00:00:00 2001 From: seanzhangkx8 <106214464+seanzhangkx8@users.noreply.github.com> Date: Tue, 26 Sep 2023 23:37:46 -0400 Subject: [PATCH 19/20] add CANDOR corpus request url --- examples/dataset-examples/CANDOR/candor_to_convokit.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/dataset-examples/CANDOR/candor_to_convokit.ipynb b/examples/dataset-examples/CANDOR/candor_to_convokit.ipynb index 20995bd8..89ce8c47 100644 --- a/examples/dataset-examples/CANDOR/candor_to_convokit.ipynb +++ b/examples/dataset-examples/CANDOR/candor_to_convokit.ipynb @@ -7,7 +7,7 @@ "## Converting the CANDOR Corpus into ConvoKit format \n", "\n", "This notebook is to help people working with CANDOR Corpus to quickly transform it into ConvoKit format.\n", - "You can request CANDOR Corpus seperately from and run through this notebook to have ConvoKit CANDOR Corpus instantly!" + "You can request CANDOR Corpus seperately from: https://betterup-data-requests.herokuapp.com/ and run through this notebook to have ConvoKit CANDOR Corpus instantly!" ] }, { From 485ddec5b673330920350f6299a026e0328d4b29 Mon Sep 17 00:00:00 2001 From: seanzhangkx8 <106214464+seanzhangkx8@users.noreply.github.com> Date: Tue, 3 Oct 2023 15:28:23 -0400 Subject: [PATCH 20/20] CANDOR Corpus documentation and conversion code --- docs/source/candor.rst | 118 +++ docs/source/datasets.rst | 1 + .../CANDOR/candor_to_convokit.ipynb | 696 +++++++++--------- 3 files changed, 451 insertions(+), 364 deletions(-) create mode 100644 docs/source/candor.rst diff --git a/docs/source/candor.rst b/docs/source/candor.rst new file mode 100644 index 00000000..393294c1 --- /dev/null +++ b/docs/source/candor.rst @@ -0,0 +1,118 @@ +CANDOR Corpus +============= +CANDOR corpus is a dataset of 1650 conversations that strangers had over video chat with rich metadata information obtaind from pre-conversation and post-conversation surveys. The corpus is available by request from the authors (`BetterUp CANDOR Corpus `_) and ConvoKit contains code for converting the transcripts into ConvoKit format, as detailed below. + +A full description of the dataset can be found here: `Andrew Reece et al. ,The CANDOR corpus: Insights from a large multimodal dataset of naturalistic conversation. Sci. Adv.9,eadf3197(2023). `_ +Please cite this paper when using CANDOR in your research. + +Usage +----- + +Request CANDOR Corpus from (transcripts only): `BetterUp CANDOR Corpus `_ + +Convert the CANDOR Corpus into ConvoKit format using this notebook `Converting CANDOR Corpus to ConvoKit Format `_ + +You will need pick the transcription type when converting CANDOR corpus to ConvoKit that will impact ConvoKit Utterance metadata. See section Utterance-level information below for more detail. + +Dataset details +--------------- + +All ConvoKit metadata attributes preserve the names used in the original corpus, as detailed here `BetterUp CANDOR Corpus Data Dictionary `_ + +Speaker-level information +^^^^^^^^^^^^^^^^^^^^^^^^^ + +There were 1454 unique participants from a broad range of backgrounds. The following information is recorded in the speaker level metadata: + +Metadata for each speaker include: + * sex: gender of speaker + * politics: political persuasion the speaker most identify (from very conservative to very liberal) + * race: race/ethnicity of speaker + * edu: highest level of school the speaker have completed or received + * employ: current employment situation of speaker + * age: age of speaker + +Utterance-level information +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +According to the paper, utterances are processed in three different algorithms to parse speaker turns into utterances: Audiophile, Cliffhanger, and Backbiter. Please refer back to the paper for more detailed description on how the three algorithms are implemented. + +- Audiophile: A turn is when one speaker starts talking until the other speaker starts speaking +- Cliffhanger: A turns is one full sentence said by one speaker based on terminal punctuation marks (periods, question marks, and exclamation points). +- Backbiter: A turn is what one speaker starts talking until the other speaker speaks a non-backchannel words (example backchannel words: "mhm", "yeah", "exactly", etc.) + +You can pick the transcript processing algorithms in the ConvoKit conversion code by changing the TRANSCRIPTION_TYPE variable. Note that, for different algorithms used to process utterances in transcripts, Utterance-level metadata will be different. + +For each utterance we provide: + +* id: Unique identifier for an utterance. +* conversation_id: Utterance id corresponding to the first utterance of the conversation. +* reply_to: Utterance id of the previous utterance in the conversation. +* speaker: Speaker object corresponding to the author of this utterance. +* text: Textual content of the utterance. + +Metadata for each utterance include: + + * turn_id: The id of the turn in the current conversation. + * speaker: Speaker id of the speaker of this turn. + * start: The time that the turn starts in the conversation (in seconds). + * stop: The time that the turn ends in the conversation (in seconds). + * backchannel: The text of any backchannels that occur during this conversational turn. (For "backbiter" transcription type only) + * backchannel_count: The number of backchannel instances (as defined in the paper) that occur during this conversational turn. Backchannel instances can be multiple tokens. (Method "backbiter" only) + * backchannel_speaker: The user_id of the person backchanneling. (For "backbiter" transcription type only) + * backchannel_start: The start time of the first backchannel during this turn. (For "backbiter" transcription type only) + * backchannel_stop: The end time of the last backchannel during this turn. (For "backbiter" transcription type only) + * interval: The time between the end of the last turn and the start of this turn in seconds. Can be negative if turns overlap. + * delta: The length of the turn (i.e., stop-start) in seconds. + * questions: The number of question marks that appear in the utterance. + * end_question: Indicates if the utterance ends with a question mark. + * overlap: Indicates if interval is negative. + * n_words: The number of words in the utterance. + +Conversation-level information +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Conversation metadata contains surveys from each participants organized by survey field names, and the values being speakers' answer organized by speaker ids: + +For each conversation we provide: + +* id: id of the conversation + +Metadata for each conversation correspond to the answer the two speakers gave in the surveys before and after that conversation. +For each conversation, we got 1 survey from each conversation participant, and as this conversation is 2 people video calling, we got 2 surveys per conversation. We decided to organize the metadata in the following way: + +convo.meta = {"survey field name" : {speaker_id_x : answer by speaker id speaker_id_x, speaker_id_y : answer by speaker id speaker_id_y} ... } + + * i_like_you: How much did you like your conversation partner? + * convo.meta['i_like_you'] = {speaker_id_x : answer by speaker id speaker_id_x, speaker_id_y : answer by speaker id speaker_id_y} + * you_like_me: How much do think your conversation partner liked you? + * i_am_funny: How funny were you in the conversation you just had? + * you_are_funny: How funny was your conversation partner? + * i_am_polite: How polite were you during the conversation? + * you_are_polite: How polite was your conversation partner? + * my_isolation_pre_covid: Prior to the Covid-19 outbreak, how socially isolated did you feel? + * my_isolation_post_covid: SINCE the Covid-19 outbreak, how socially isolated have you felt? + * in_common: How much did you and your partner have in common with one another? + * about 200 other survey fileds detailed in the `BetterUp CANDOR Corpus Data Dictionary `_ + + +Statistics about the dataset +------------------------------ + +* Number of Speakers: 1454 +* Number of Utterances: 527869 (if TRANSCRIPTION_TYPE = "cliffhanger") +* Number of Conversations: 1650 + +Additional note +--------------- +Data License +^^^^^^^^^^^^ + +ConvoKit is not distributing the corpus separately, and thus no additional data license is applicable. The license of the original distribution applies. + +Contact +^^^^^^^ + +Questions about the conversion into ConvoKit format should be directed to Sean Zhang + +Questions about the CANDOR corpus should be directed to the corresponding authors of the original paper. diff --git a/docs/source/datasets.rst b/docs/source/datasets.rst index 77046921..623d4d3e 100644 --- a/docs/source/datasets.rst +++ b/docs/source/datasets.rst @@ -5,6 +5,7 @@ Datasets Conversations Gone Awry Dataset (Wikipedia version) Conversations Gone Awry Dataset (Reddit CMV version) Cornell Movie-Dialogs Corpus + CANDOR Corpus Parliament Question Time Corpus Wikipedia Talk Pages Corpus Tennis Interviews diff --git a/examples/dataset-examples/CANDOR/candor_to_convokit.ipynb b/examples/dataset-examples/CANDOR/candor_to_convokit.ipynb index 89ce8c47..a475e949 100644 --- a/examples/dataset-examples/CANDOR/candor_to_convokit.ipynb +++ b/examples/dataset-examples/CANDOR/candor_to_convokit.ipynb @@ -7,7 +7,10 @@ "## Converting the CANDOR Corpus into ConvoKit format \n", "\n", "This notebook is to help people working with CANDOR Corpus to quickly transform it into ConvoKit format.\n", - "You can request CANDOR Corpus seperately from: https://betterup-data-requests.herokuapp.com/ and run through this notebook to have ConvoKit CANDOR Corpus instantly!" + "You can request CANDOR Corpus from: https://betterup-data-requests.herokuapp.com/ and run through this notebook to get CANDOR Corpus in ConvoKit format!\n", + "\n", + "Details about the construction of the corpus are available in the original paper (pleace cite this paper if you use the corpus):\n", + "`Andrew Reece et al. ,The CANDOR corpus: Insights from a large multimodal dataset of naturalistic conversation. Sci. Adv.9,eadf3197(2023). `_\n" ] }, { @@ -18,8 +21,9 @@ "source": [ "from tqdm import tqdm\n", "from convokit import Corpus, Speaker, Utterance\n", - "from collections import defaultdict\n", - "import pandas as pd" + "from collections import defaultdict, Counter\n", + "import pandas as pd\n", + "import numpy as np" ] }, { @@ -40,28 +44,212 @@ "# ls: raw survey.tsv transcript_backbiter.tsv transcript_cliffhanger.tsv" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, you should pick the transcription type. By default, this is \"cliffhanger\" which in our experience gives the easiest to read version of the transcripts.\n", + "\n", + "According to the paper, utterances are processed in three different algorithms to parse speaker turns into utterances: Audiophile, Cliffhanger, and Backbiter. Please refer back to the paper for more detailed description on how the three algorithms are implemented.\n", + "\n", + "- Audiophile: A turn is when one speaker starts talking until the other speaker starts speaking\n", + "- Cliffhanger: A turns is one full sentence said by one speaker based on terminal punctuation marks (periods, question marks, and exclamation points).\n", + "- Backbiter: A turn is what one speaker starts talking until the other speaker speaks a non-backchannel words (example backchannel words: \"mhm\", \"yeah\", \"exactly\", etc.)\n", + "\n", + "Note that, for different algorithms used to process utterances in transcripts, Utterance-level metadata will be different.\n" + ] + }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], + "source": [ + "TRANSCRIPTION_TYPE = \"cliffhanger\" # or \"backbiter\" or \"audiophile\"" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], "source": [ "survey_path = CANDOR_PATH + \"survey.tsv\"\n", "survey = pd.read_csv(survey_path, delimiter='\\t')" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from datetime import datetime\n", + "# Convert the strings into datetime objects\n", + "date_format = \"%Y-%m-%d\"\n", + "for i, date in enumerate(survey['date']):\n", + " survey['date'][i] = datetime.strptime(date, date_format)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "survey = survey.sort_values(by='date')" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Unnamed: 0user_idpartner_idconvo_iddatesurvey_duration_in_secondstime_zonepre_affectpre_arousaltechnical_quality...my_conscientiousmy_neuroticmy_openyour_extraversionyour_agreeableyour_conscientiousyour_neuroticyour_openwho_i_talked_to_most_past24most_common_format_past24
2205ad7c075c25ea0000188486b5de5538f8fde1c4dbc95149801849238-f5f0-487e-bca4-7b4fe0c9625c2020-01-07 00:00:006001NaN7.07.02.0...2.3333333.04.3333334.3333333.6666673.3333332.3333334.000000NaNNaN
47115d0a731abf09e10001c3f3d85acba4a15cd10500016280ca2673c393-67e0-4880-b56f-d6b2696f16312020-01-07 00:00:002711NaN6.05.01.0...4.0000003.04.0000001.6666674.0000003.3333333.6666673.333333NaNNaN
\n", + "

2 rows × 223 columns

\n", + "
" + ], + "text/plain": [ + " Unnamed: 0 user_id partner_id \\\n", + "22 0 5ad7c075c25ea0000188486b 5de5538f8fde1c4dbc951498 \n", + "471 1 5d0a731abf09e10001c3f3d8 5acba4a15cd10500016280ca \n", + "\n", + " convo_id date \\\n", + "22 01849238-f5f0-487e-bca4-7b4fe0c9625c 2020-01-07 00:00:00 \n", + "471 2673c393-67e0-4880-b56f-d6b2696f1631 2020-01-07 00:00:00 \n", + "\n", + " survey_duration_in_seconds time_zone pre_affect pre_arousal \\\n", + "22 6001 NaN 7.0 7.0 \n", + "471 2711 NaN 6.0 5.0 \n", + "\n", + " technical_quality ... my_conscientious my_neurotic my_open \\\n", + "22 2.0 ... 2.333333 3.0 4.333333 \n", + "471 1.0 ... 4.000000 3.0 4.000000 \n", + "\n", + " your_extraversion your_agreeable your_conscientious your_neurotic \\\n", + "22 4.333333 3.666667 3.333333 2.333333 \n", + "471 1.666667 4.000000 3.333333 3.666667 \n", + "\n", + " your_open who_i_talked_to_most_past24 most_common_format_past24 \n", + "22 4.000000 NaN NaN \n", + "471 3.333333 NaN NaN \n", + "\n", + "[2 rows x 223 columns]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "survey.head(2)" + ] + }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### Creating Speaker List\n", - "\n", - "We create speaker list by going through the survey, and extract all speakers from the survey (survey is filled before and after by every speaker who conducted video calls during the experiment, and it is required when when CANDOR corpus is collecting data from participants!)" + "We create a speaker list by extracting all speakers from the survey, which is filled before and after by every speaker who conducted video calls during the experiment. It is required when when CANDOR corpus is collecting data from participants." ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -70,7 +258,7 @@ "1454" ] }, - "execution_count": 4, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -82,7 +270,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -91,7 +279,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -114,23 +302,23 @@ "\n", "Now, we get extract all utterances from the corpus, conversation by conversation. Here, each conversation is stored as an individual folder in the \"raw\" folder. Thus, we go into it, and extract one by one.\n", "\n", - "Note that, there are three versions of transcripts for each conversation, corresponding to three different ways audio transcriptions are processed. For consistency, we recommend sticking with one type of transcription for corpus construction here. The three types are Audiophile, Cliffhanger, Backbiter. Modify the \"transcription_type\" varible for your intended processing method. Refer back to the paper for details on what each transcription processing method is about. \n", + "Note that, there are three versions of transcripts for each conversation, corresponding to three different ways audio transcriptions are processed. For consistency, we recommend sticking with one type of transcription for corpus construction here. The three types are Audiophile, Cliffhanger, Backbiter. Modify the \"transcription_type\" variable for your intended processing method. Refer back to the paper for details on what each transcription processing method is about. \n", "\n", "CANDOR corpus paper: https://www.science.org/doi/epdf/10.1126/sciadv.adf3197" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "99" + "1650" ] }, - "execution_count": 8, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -139,7 +327,6 @@ "import os\n", "conversations_list_path = CANDOR_PATH + \"raw/\"\n", "conversations = [d for d in os.listdir(conversations_list_path) if os.path.isdir(os.path.join(conversations_list_path, d))]\n", - "transcription_type = \"cliffhanger\" # or \"backbiter\" or \"audiophile\"\n", "len(conversations)" ] }, @@ -153,14 +340,14 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "30075\n" + "527869\n" ] } ], @@ -169,7 +356,7 @@ "corpus_utterances = {}\n", "for convo_id in conversations:\n", " meta_path = f\"{conversations_list_path}{convo_id}/metadata.json\"\n", - " transcription_path = f\"{conversations_list_path}{convo_id}/transcription/transcript_{transcription_type}.csv\"\n", + " transcription_path = f\"{conversations_list_path}{convo_id}/transcription/transcript_{TRANSCRIPTION_TYPE}.csv\"\n", " transcription = pd.read_csv(transcription_path)\n", " for index, row in transcription.iterrows():\n", " reply_to = None if row['turn_id'] == 0 else utt_id_count-1\n", @@ -181,12 +368,12 @@ " corpus_utterances[utt_id_count] = utt\n", " utt_id_count += 1\n", "\n", - "print(utt_id_count)" + "print(\"total number of utterances: \", utt_id_count)" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -195,7 +382,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -208,27 +395,27 @@ "source": [ "### Updating Conversation Info\n", "\n", - "Here, we update the conversation info, especially the metadata from surveys participants filled.\n", + "Here, we update the conversation info, especially the metadata from surveys participants filled. Metadata for each conversation correspond to the answer the two speakers gave in the surveys before and after that conversation.\n", "\n", "For each conversation, we got 1 survey from each conversation participant, and as this conversation is 2 people video calling, we got 2 surveys per conversation. We decided to organize the metadata in the following way:\n", "\n", "convo.meta = {\"survey field name\" : {\"sp_A id\" : \"sp_A survey value\", \"sp_B\" : \"sp_B survey value\"} ... }\n", "\n", - "We choose this way or organizing metadata, as we usually focus on several survey fields, and analysis the values from two participants. This format allow us to quickly extract such information. \n", + "We choose this way or organizing metadata, as we usually focus on several survey fields, and analysis the values from two participants. This format allow us to quickly extract such information. You can also feel free to modify the format to suit your research / work needs.\n", "\n", - "You can also feel free to modify the format to suit your research / work needs." + "The ConvoKit metadata preserve the names from the survey of the original experiment, explained in the paper. For more explaination on what each survey field name is, refer to BetterUp CANDOR Corpus Data Dictionary: https://docs.google.com/spreadsheets/d/1ADoaajRsw63WpM3zS2xyGC1YS5WM_IuhFZ94W84DDls/edit#gid=997152539" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "number of conversations in the dataset = 99\n" + "number of conversations in the dataset = 1650\n" ] } ], @@ -245,7 +432,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -294,50 +481,50 @@ " \n", " \n", " \n", - " 1794\n", + " 1562\n", " 0\n", - " 5b5e7e643bac1d0001f9bf28\n", - " 5f07070d75038e05e9fcf515\n", - " 8bf369ea-ab22-4723-ba24-caeff2204a9e\n", - " 2020-08-13\n", - " 2793\n", + " 5b6cb3049ee1a50001c5ef0f\n", + " 5d3356323e1190001909339b\n", + " 79912e48-076a-4cb0-82e2-e43a932d0cd3\n", + " 2020-08-12 00:00:00\n", + " 3723\n", " 8.0\n", " 5.0\n", - " 5.0\n", + " 1.0\n", " 1.0\n", " ...\n", - " 2.0\n", - " 4.333333\n", - " 5.000000\n", - " 2.333333\n", + " 3.333333\n", + " 4.0\n", " 4.666667\n", - " 3.000000\n", - " 3.000000\n", + " 3.333333\n", " 3.666667\n", + " 3.000000\n", + " 2.666667\n", + " 4.0\n", " NaN\n", " NaN\n", " \n", " \n", - " 1795\n", + " 1563\n", " 1\n", - " 5f07070d75038e05e9fcf515\n", - " 5b5e7e643bac1d0001f9bf28\n", - " 8bf369ea-ab22-4723-ba24-caeff2204a9e\n", - " 2020-08-13\n", - " 5638\n", - " 10.0\n", - " 5.0\n", + " 5d3356323e1190001909339b\n", + " 5b6cb3049ee1a50001c5ef0f\n", + " 79912e48-076a-4cb0-82e2-e43a932d0cd3\n", + " 2020-08-12 00:00:00\n", + " 6264\n", " 5.0\n", + " 7.0\n", + " 7.0\n", " 1.0\n", " ...\n", + " 2.333333\n", + " 3.0\n", + " 3.000000\n", + " 3.333333\n", + " 3.333333\n", + " 2.333333\n", + " 2.333333\n", " 4.0\n", - " 2.000000\n", - " 4.666667\n", - " 3.666667\n", - " 3.666667\n", - " 2.666667\n", - " 3.666667\n", - " 4.000000\n", " NaN\n", " NaN\n", " \n", @@ -348,33 +535,33 @@ ], "text/plain": [ " Unnamed: 0 user_id partner_id \\\n", - "1794 0 5b5e7e643bac1d0001f9bf28 5f07070d75038e05e9fcf515 \n", - "1795 1 5f07070d75038e05e9fcf515 5b5e7e643bac1d0001f9bf28 \n", + "1562 0 5b6cb3049ee1a50001c5ef0f 5d3356323e1190001909339b \n", + "1563 1 5d3356323e1190001909339b 5b6cb3049ee1a50001c5ef0f \n", "\n", - " convo_id date \\\n", - "1794 8bf369ea-ab22-4723-ba24-caeff2204a9e 2020-08-13 \n", - "1795 8bf369ea-ab22-4723-ba24-caeff2204a9e 2020-08-13 \n", + " convo_id date \\\n", + "1562 79912e48-076a-4cb0-82e2-e43a932d0cd3 2020-08-12 00:00:00 \n", + "1563 79912e48-076a-4cb0-82e2-e43a932d0cd3 2020-08-12 00:00:00 \n", "\n", " survey_duration_in_seconds time_zone pre_affect pre_arousal \\\n", - "1794 2793 8.0 5.0 5.0 \n", - "1795 5638 10.0 5.0 5.0 \n", + "1562 3723 8.0 5.0 1.0 \n", + "1563 6264 5.0 7.0 7.0 \n", "\n", " technical_quality ... my_conscientious my_neurotic my_open \\\n", - "1794 1.0 ... 2.0 4.333333 5.000000 \n", - "1795 1.0 ... 4.0 2.000000 4.666667 \n", + "1562 1.0 ... 3.333333 4.0 4.666667 \n", + "1563 1.0 ... 2.333333 3.0 3.000000 \n", "\n", " your_extraversion your_agreeable your_conscientious your_neurotic \\\n", - "1794 2.333333 4.666667 3.000000 3.000000 \n", - "1795 3.666667 3.666667 2.666667 3.666667 \n", + "1562 3.333333 3.666667 3.000000 2.666667 \n", + "1563 3.333333 3.333333 2.333333 2.333333 \n", "\n", " your_open who_i_talked_to_most_past24 most_common_format_past24 \n", - "1794 3.666667 NaN NaN \n", - "1795 4.000000 NaN NaN \n", + "1562 4.0 NaN NaN \n", + "1563 4.0 NaN NaN \n", "\n", "[2 rows x 223 columns]" ] }, - "execution_count": 13, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -386,10 +573,11 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ + "# add conversation level metadata\n", "for convo in CANDOR_corpus.iter_conversations():\n", " convo_id = convo.id\n", " row1 = survey[survey['convo_id'] == convo_id].iloc[0]\n", @@ -401,61 +589,94 @@ " if field != \"convo_id\" and field != 'user_id':\n", " field_values = {sp_A : row1[field], sp_B : row2[field]}\n", " metadata.update({field : field_values})\n", - " convo.meta = metadata\n", + " convo.meta = metadata" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From all the survey fields, most are conversation specific - meaning the speaker fills the survey based on this conversation's experience. However, we also filtered out some demographical information about each speaker from the survey, and store them also in speaker level metadata (refer to sp_meta_lst list for selected speaker level information).\n", "\n", - "# Use Below instead if you want to have metadata formatted in: convo.meta = {sp_A : {sp_A survey with keys to be field, value to be values}, sp_B : {sp_B survey}}\n", - "# for convo in CANDOR_corpus.iter_conversations():\n", - "# convo_id = convo.id\n", - "# row1 = survey[survey['convo_id'] == convo_id].iloc[0]\n", - "# row2 = survey[survey['convo_id'] == convo_id].iloc[1]\n", - "# metadata = {row1['user_id'] : {}, row2['user_id'] : {}}\n", - "# for row in [row1, row2]:\n", - "# for k, v in row.items():\n", - "# if k != \"convo_id\":\n", - "# metadata[row['user_id']].update({k : v})\n", - "# convo.meta = metadata\n", - "# convo.meta.update({\"speaker_A\" : row1['user_id']})" + "Note: In a few cases participants report conflicting values across different surveys for the demographic questions. In those cases the metadata in the Speaker reflects the first given non-Nan answer. The per-survey answers are available in the conversation metadata." ] }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 60, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "ConvoKitMeta({'partner_id': {'5e52af8dd120e7000bc35826': '5e8ab4b84d3d6775b807e9ba', '5e8ab4b84d3d6775b807e9ba': '5e52af8dd120e7000bc35826'}, 'date': {'5e52af8dd120e7000bc35826': '2020-10-20', '5e8ab4b84d3d6775b807e9ba': '2020-10-20'}, 'survey_duration_in_seconds': {'5e52af8dd120e7000bc35826': 3524, '5e8ab4b84d3d6775b807e9ba': 2726}, 'time_zone': {'5e52af8dd120e7000bc35826': 5.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'pre_affect': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'pre_arousal': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'technical_quality': {'5e52af8dd120e7000bc35826': 1.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'conv_length': {'5e52af8dd120e7000bc35826': 32.0, '5e8ab4b84d3d6775b807e9ba': 31.0}, 'affect': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 8.0}, 'arousal': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'overall_affect': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'overall_arousal': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'overall_memory_rating': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 8.0}, 'begin_affect': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'begin_arousal': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'begin_memory_rating': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'begin_memory_text': {'5e52af8dd120e7000bc35826': 'We got to know each other a bit and talked about where we were from and what college we went to and the COVID situations going on at our colleges.', '5e8ab4b84d3d6775b807e9ba': 'I was kinda worried cause he said he was in the military and I am anti military, so I was nervous '}, 'middle_affect': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'middle_arousal': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'middle_memory_rating': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'middle_memory_text': {'5e52af8dd120e7000bc35826': \"We talked about my experiences in Army ROTC and the month-long training that I had to do over the summer. We also talked a bit about our experiences being RA's.\", '5e8ab4b84d3d6775b807e9ba': 'We talked about RA life and how fucked up it is'}, 'end_affect': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 8.0}, 'end_arousal': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 8.0}, 'end_memory_rating': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 8.0}, 'end_memory_text': {'5e52af8dd120e7000bc35826': \"We kept talking about ROTC and also about being gay in the military since we were both LGBT. That led to us talking about our parent's reactions and if we were fully out.\", '5e8ab4b84d3d6775b807e9ba': 'We talked about his intense military camping \"trip\" and how tragic that was'}, 'worst_affect': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'worst_arousal': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'best_affect': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 8.0}, 'best_arousal': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'how_enjoyable': {'5e52af8dd120e7000bc35826': 8.0, '5e8ab4b84d3d6775b807e9ba': 8.0}, 'i_like_you': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'you_like_me': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'in_common': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'conversationalist': {'5e52af8dd120e7000bc35826': 89.0, '5e8ab4b84d3d6775b807e9ba': 71.0}, 'next_seven_days': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'my_friends_like_you': {'5e52af8dd120e7000bc35826': 86.0, '5e8ab4b84d3d6775b807e9ba': 16.0}, 'good_for_advice': {'5e52af8dd120e7000bc35826': 81.0, '5e8ab4b84d3d6775b807e9ba': 35.0}, 'i_felt_close_to_my_partner': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'i_would_like_to_become_friends': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'i_paid_attention_to_my_partner': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'my_partner_paid_attention_to_me': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'my_partner_was_clear_and_coherent': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'interested_in_exchanging_contact_info': {'5e52af8dd120e7000bc35826': 1.0, '5e8ab4b84d3d6775b807e9ba': 1.0}, 'you_are_intelligent': {'5e52af8dd120e7000bc35826': 8.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'you_are_quickwitted': {'5e52af8dd120e7000bc35826': 8.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'you_are_competent': {'5e52af8dd120e7000bc35826': 8.0, '5e8ab4b84d3d6775b807e9ba': 9.0}, 'you_are_kind': {'5e52af8dd120e7000bc35826': 9.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'you_are_friendly': {'5e52af8dd120e7000bc35826': 9.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'you_are_warm': {'5e52af8dd120e7000bc35826': 9.0, '5e8ab4b84d3d6775b807e9ba': 8.0}, 'you_think_i_am_intelligent': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'you_think_i_am_quickwitted': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'you_think_i_am_competent': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'you_think_i_am_kind': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'you_think_i_am_friendly': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'you_think_i_am_warm': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'you_are_humble': {'5e52af8dd120e7000bc35826': 8.0, '5e8ab4b84d3d6775b807e9ba': 8.0}, 'you_are_giving': {'5e52af8dd120e7000bc35826': 8.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'you_are_fair': {'5e52af8dd120e7000bc35826': 8.0, '5e8ab4b84d3d6775b807e9ba': 8.0}, 'you_are_trustworthy': {'5e52af8dd120e7000bc35826': 9.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'you_are_agreeable': {'5e52af8dd120e7000bc35826': 8.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'you_are_playful': {'5e52af8dd120e7000bc35826': 9.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'i_am_intelligent': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 9.0}, 'i_am_quickwitted': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'i_am_competent': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 9.0}, 'i_am_kind': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'i_am_friendly': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'i_am_warm': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'i_am_humble': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'i_am_giving': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'i_am_fair': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'i_am_trustworthy': {'5e52af8dd120e7000bc35826': 8.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'i_am_agreeable': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'i_am_playful': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'rest_of_day_open': {'5e52af8dd120e7000bc35826': \"I do not see it going very well, since I have a lot of stuff to do for school and an upcoming three-day event for ROTC that I do not actually want to go to. I'm also a bit stressed out dealing with other people at my college and the whole COVID situation.\", '5e8ab4b84d3d6775b807e9ba': \"I think I am just going to finish up some homework assignment. I also have some essays and projects due, but I think it'll be a good week and I am going to visit some friends and drink with them, so I am super excited about visiting them this weekend\"}, 'critical_positive': {'5e52af8dd120e7000bc35826': \"I think we had a good amount in common that let us have a good conversation without getting bored of each other's company. I also think we had a pretty good banter going and it made for a very enjoyable conversation. My partner was also very nice and easy to talk to.\", '5e8ab4b84d3d6775b807e9ba': 'I am really glad that he told me he was gay. I was very nervous because you never know who you are going to meet on these chats and he pulled up in a cameo hat, and that is usually not a good sign, but I think he knew that and tried to make me feel as comfortable as possible and I really liked that. '}, 'critical_negative': {'5e52af8dd120e7000bc35826': \"I think our conversation worked really well and I wouldn't say that we had and problems that made the conversation boring or feel too long. I was afraid I was talking a bit too much, but I don't think it was bad enough that the entire conversation was ruined because of it.\", '5e8ab4b84d3d6775b807e9ba': \"I think if I had been a little bit more opened minded, then the beginning of the convo would have been more comfortable. I also assumed he had a good relationship with his parents and it turned out he didn't so just remembering to not make as many judgements about people. \"}, 'smiles': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 1.0}, 'laughter': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'questions': {'5e52af8dd120e7000bc35826': 5.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'nods': {'5e52af8dd120e7000bc35826': 5.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'verbal_feedback': {'5e52af8dd120e7000bc35826': 5.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'speak_quickly': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'my_turn_length': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'your_turn_length': {'5e52af8dd120e7000bc35826': 5.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'topic_diversity': {'5e52af8dd120e7000bc35826': 5.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'turn_overlap_gap': {'5e52af8dd120e7000bc35826': 5.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'i_disclosed': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'you_disclosed': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'i_am_good_listener': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'you_are_good_listener': {'5e52af8dd120e7000bc35826': 8.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'conv_leader': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'talk_time_100_1': {'5e52af8dd120e7000bc35826': 60.0, '5e8ab4b84d3d6775b807e9ba': 45.0}, 'you_total_talk_time': {'5e52af8dd120e7000bc35826': 40.0, '5e8ab4b84d3d6775b807e9ba': 55.0}, 'conv_pace': {'5e52af8dd120e7000bc35826': 5.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'my_mind_wander': {'5e52af8dd120e7000bc35826': 2.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'your_mind_wander': {'5e52af8dd120e7000bc35826': 3.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'i_am_funny': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'you_are_funny': {'5e52af8dd120e7000bc35826': 8.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'i_am_polite': {'5e52af8dd120e7000bc35826': 8.0, '5e8ab4b84d3d6775b807e9ba': 8.0}, 'you_are_polite': {'5e52af8dd120e7000bc35826': 8.0, '5e8ab4b84d3d6775b807e9ba': 8.0}, 'i_tried_to_impress': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'you_tried_to_impress': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'responsive_1': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'responsive_2': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'responsive_3': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'end_you': {'5e52af8dd120e7000bc35826': 5.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'end_you_time_1': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'longer_self': {'5e52af8dd120e7000bc35826': 1.0, '5e8ab4b84d3d6775b807e9ba': nan}, 'how_long_you': {'5e52af8dd120e7000bc35826': 3.0, '5e8ab4b84d3d6775b807e9ba': nan}, 'end_other': {'5e52af8dd120e7000bc35826': 5.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'end_other_time_1': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': 16.0}, 'longer_other': {'5e52af8dd120e7000bc35826': 2.0, '5e8ab4b84d3d6775b807e9ba': nan}, 'how_long_other': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'our_thoughts_synced_up_sr1': {'5e52af8dd120e7000bc35826': 5.0, '5e8ab4b84d3d6775b807e9ba': 5.0}, 'developed_joint_perspective_sr2': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'shared_thoughts_feels_sr3': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'discussed_real_things_sr4': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'thoughts_became_more_alike_sr5': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'anticipated_each_other_sr6': {'5e52af8dd120e7000bc35826': 5.0, '5e8ab4b84d3d6775b807e9ba': 1.0}, 'became_certain_of_perception_sr7': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 1.0}, 'saw_world_in_same_way_sr8': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'i_think_my_status': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'i_think_your_status': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'you_think_my_status': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'my_bfi_1': {'5e52af8dd120e7000bc35826': 2.0, '5e8ab4b84d3d6775b807e9ba': 1.0}, 'my_bfi_2': {'5e52af8dd120e7000bc35826': 2.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'my_bfi_3': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'my_bfi_4': {'5e52af8dd120e7000bc35826': 3.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'my_bfi_5': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'my_bfi_6': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'my_bfi_7': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'my_bfi_8': {'5e52af8dd120e7000bc35826': 3.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'my_bfi_9': {'5e52af8dd120e7000bc35826': 2.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'my_bfi_10': {'5e52af8dd120e7000bc35826': 3.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'my_bfi_11': {'5e52af8dd120e7000bc35826': 3.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'my_bfi_12': {'5e52af8dd120e7000bc35826': 2.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'my_bfi_13': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'my_bfi_14': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'my_bfi_15': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'your_bfi_1': {'5e52af8dd120e7000bc35826': 2.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'your_bfi_2': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'your_bfi_3': {'5e52af8dd120e7000bc35826': 3.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'your_bfi_4': {'5e52af8dd120e7000bc35826': 3.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'your_bfi_5': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'your_bfi_6': {'5e52af8dd120e7000bc35826': 3.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'your_bfi_7': {'5e52af8dd120e7000bc35826': 2.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'your_bfi_8': {'5e52af8dd120e7000bc35826': 2.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'your_bfi_9': {'5e52af8dd120e7000bc35826': 2.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'your_bfi_10': {'5e52af8dd120e7000bc35826': 3.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'your_bfi_11': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'your_bfi_12': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'your_bfi_13': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 4.0}, 'your_bfi_14': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'your_bfi_15': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'you_lack_companionship': {'5e52af8dd120e7000bc35826': 1.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'you_feel_left_out': {'5e52af8dd120e7000bc35826': 1.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'you_feel_isolated': {'5e52af8dd120e7000bc35826': 1.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'sex': {'5e52af8dd120e7000bc35826': 'male', '5e8ab4b84d3d6775b807e9ba': 'female'}, 'politics': {'5e52af8dd120e7000bc35826': 2.0, '5e8ab4b84d3d6775b807e9ba': 6.0}, 'race': {'5e52af8dd120e7000bc35826': 'white', '5e8ab4b84d3d6775b807e9ba': 'black_or_african_american'}, 'edu': {'5e52af8dd120e7000bc35826': 'some_college', '5e8ab4b84d3d6775b807e9ba': 'some_college'}, 'employ': {'5e52af8dd120e7000bc35826': 7.0, '5e8ab4b84d3d6775b807e9ba': 1.0}, 'employ_7_TEXT': {'5e52af8dd120e7000bc35826': 'Student', '5e8ab4b84d3d6775b807e9ba': nan}, 'sleep_today': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 8.0}, 'sleep_usual': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 7.0}, 'know_partner_1': {'5e52af8dd120e7000bc35826': 2.0, '5e8ab4b84d3d6775b807e9ba': 2.0}, 'how_know_partner': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'realtime': {'5e52af8dd120e7000bc35826': False, '5e8ab4b84d3d6775b807e9ba': False}, 'did': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'guided': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'age': {'5e52af8dd120e7000bc35826': 20.0, '5e8ab4b84d3d6775b807e9ba': 21.0}, 'conversation_count_past24': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'conversation_hours_past24': {'5e52af8dd120e7000bc35826': 25.0, '5e8ab4b84d3d6775b807e9ba': 25.0}, 'convo_who_family': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'convo_who_romantic_partner': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'convo_who_friends': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'convo_who_work_colleagues': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'convo_who_other': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'convo_format_in_person': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'convo_format_video_chat': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'convo_format_phone_call': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'convo_format_text': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'convo_format_other': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'my_isolation_pre_covid': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'my_isolation_post_covid': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'my_stress_pre_covid': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'my_distracted_pre_covid': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'my_sad_pre_covid': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'my_stress_post_covid': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'my_distracted_post_covid': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'my_sad_post_covid': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'n_living_with_me_pre_covid': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'n_living_with_me_post_covid': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'am_i_sheltering_in_place_now': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'how_long_shelter_in_place': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'i_lack_companionship': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'i_feel_left_out': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'i_feel_isolated': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'shared_reality': {'5e52af8dd120e7000bc35826': 5.5, '5e8ab4b84d3d6775b807e9ba': 3.125}, 'responsive': {'5e52af8dd120e7000bc35826': 6.0, '5e8ab4b84d3d6775b807e9ba': 5.666666666666668}, 'my_loneliness': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'your_loneliness': {'5e52af8dd120e7000bc35826': 1.0, '5e8ab4b84d3d6775b807e9ba': 2.333333333333333}, 'RMET_score': {'5e52af8dd120e7000bc35826': 0.0, '5e8ab4b84d3d6775b807e9ba': 0.0}, 'IRI_PT_score': {'5e52af8dd120e7000bc35826': 0.0, '5e8ab4b84d3d6775b807e9ba': 0.0}, 'IRI_EC_score': {'5e52af8dd120e7000bc35826': 0.0, '5e8ab4b84d3d6775b807e9ba': 0.0}, 'AQ_social_skill_score': {'5e52af8dd120e7000bc35826': 0.0, '5e8ab4b84d3d6775b807e9ba': 0.0}, 'AQ_communication_score': {'5e52af8dd120e7000bc35826': 0.0, '5e8ab4b84d3d6775b807e9ba': 0.0}, 'BFNE_score': {'5e52af8dd120e7000bc35826': 0.0, '5e8ab4b84d3d6775b807e9ba': 0.0}, 'my_extraversion': {'5e52af8dd120e7000bc35826': 3.6666666666666665, '5e8ab4b84d3d6775b807e9ba': 3.333333333333333}, 'my_agreeable': {'5e52af8dd120e7000bc35826': 2.0, '5e8ab4b84d3d6775b807e9ba': 2.6666666666666665}, 'my_conscientious': {'5e52af8dd120e7000bc35826': 3.0, '5e8ab4b84d3d6775b807e9ba': 2.6666666666666665}, 'my_neurotic': {'5e52af8dd120e7000bc35826': 2.333333333333333, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'my_open': {'5e52af8dd120e7000bc35826': 3.6666666666666665, '5e8ab4b84d3d6775b807e9ba': 2.6666666666666665}, 'your_extraversion': {'5e52af8dd120e7000bc35826': 3.6666666666666665, '5e8ab4b84d3d6775b807e9ba': 2.333333333333333}, 'your_agreeable': {'5e52af8dd120e7000bc35826': 4.0, '5e8ab4b84d3d6775b807e9ba': 3.0}, 'your_conscientious': {'5e52af8dd120e7000bc35826': 3.6666666666666665, '5e8ab4b84d3d6775b807e9ba': 3.333333333333333}, 'your_neurotic': {'5e52af8dd120e7000bc35826': 2.333333333333333, '5e8ab4b84d3d6775b807e9ba': 3.333333333333333}, 'your_open': {'5e52af8dd120e7000bc35826': 3.6666666666666665, '5e8ab4b84d3d6775b807e9ba': 2.333333333333333}, 'who_i_talked_to_most_past24': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}, 'most_common_format_past24': {'5e52af8dd120e7000bc35826': nan, '5e8ab4b84d3d6775b807e9ba': nan}})" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "convo = CANDOR_corpus.random_conversation()\n", - "convo.meta" + "sp_meta_lst = ['sex', 'politics', 'race', 'edu', 'employ', 'employ_7_TEXT', 'age']\n", + "\n", + "for sp in CANDOR_corpus.iter_speakers():\n", + " df = survey[survey['user_id'] == sp.id]\n", + " df = df.sort_values(by='date')\n", + " for field_name in sp_meta_lst:\n", + " field_values = df[field_name].tolist()\n", + " valid = False\n", + " for x in field_values:\n", + " if not valid:\n", + " if not pd.isna(x):\n", + " sp.add_meta(field_name, x)\n", + " valid = True\n", + " if not valid:\n", + " sp.add_meta(field_name, np.nan)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "specially, the 'employ' survey field is multiple choice based with numerical numbers associated to answers in order of the following list. We replace the numerical number with the corresponding answer value. If the participant answered 'other' for the 'employ' field, they will be asked to answer 'employ_7_TEXT', which is a text based answer. Thus, we replace 'employ' with the answer from 'employ_7_TEXT'." + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [], + "source": [ + "employment_lst = ['employed', 'unemployed', 'temp_leave', 'disabled', 'retired', 'homemaker', 'other']\n", + "\n", + "for sp in CANDOR_corpus.iter_speakers():\n", + " if pd.isna(sp.meta['employ']):\n", + " continue\n", + " employ = int(sp.meta['employ'])\n", + " if employ != 7:\n", + " sp.meta['employ'] = employment_lst[employ]\n", + " else:\n", + " sp.meta['employ'] = sp.meta['employ_7_TEXT'] if not pd.isna(sp.meta['employ_7_TEXT']) else 'other'" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [], + "source": [ + "CANDOR_corpus.delete_metadata(obj_type='speaker', attribute='employ_7_TEXT')" ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 72, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['5e8ab4b84d3d6775b807e9ba', '5e52af8dd120e7000bc35826']" + "ConvoKitMeta({'sex': 'male', 'politics': 6.0, 'race': 'white', 'edu': 'some_college', 'employ': 'temp_leave', 'age': 21.0})" ] }, - "execution_count": 26, + "execution_count": 72, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "convo.get_speaker_ids()" + "sp = CANDOR_corpus.random_speaker()\n", + "sp.meta" ] }, { @@ -467,265 +688,22 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "SAVE_PATH = ''\n", - "CANDOR_corpus.dump(f\"CANDOR-corpus-{transcription_type}\", base_path=SAVE_PATH)" + "CANDOR_corpus.dump(f\"CANDOR-corpus-{TRANSCRIPTION_TYPE}\", base_path=SAVE_PATH)" ] }, { "cell_type": "code", - "execution_count": 28, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'utterances-index': {'turn_id': [\"\"],\n", - " 'start': [\"\"],\n", - " 'stop': [\"\"],\n", - " 'interval': [\"\"],\n", - " 'delta': [\"\"],\n", - " 'questions': [\"\"],\n", - " 'end_question': [\"\"],\n", - " 'overlap': [\"\"],\n", - " 'n_words': [\"\"]},\n", - " 'speakers-index': {},\n", - " 'conversations-index': {'partner_id': [\"\"],\n", - " 'date': [\"\"],\n", - " 'survey_duration_in_seconds': ['bin'],\n", - " 'time_zone': [\"\"],\n", - " 'pre_affect': [\"\"],\n", - " 'pre_arousal': [\"\"],\n", - " 'technical_quality': [\"\"],\n", - " 'conv_length': [\"\"],\n", - " 'affect': [\"\"],\n", - " 'arousal': [\"\"],\n", - " 'overall_affect': [\"\"],\n", - " 'overall_arousal': [\"\"],\n", - " 'overall_memory_rating': [\"\"],\n", - " 'begin_affect': [\"\"],\n", - " 'begin_arousal': [\"\"],\n", - " 'begin_memory_rating': [\"\"],\n", - " 'begin_memory_text': [\"\"],\n", - " 'middle_affect': [\"\"],\n", - " 'middle_arousal': [\"\"],\n", - " 'middle_memory_rating': [\"\"],\n", - " 'middle_memory_text': [\"\"],\n", - " 'end_affect': [\"\"],\n", - " 'end_arousal': [\"\"],\n", - " 'end_memory_rating': [\"\"],\n", - " 'end_memory_text': [\"\"],\n", - " 'worst_affect': [\"\"],\n", - " 'worst_arousal': [\"\"],\n", - " 'best_affect': [\"\"],\n", - " 'best_arousal': [\"\"],\n", - " 'how_enjoyable': [\"\"],\n", - " 'i_like_you': [\"\"],\n", - " 'you_like_me': [\"\"],\n", - " 'in_common': [\"\"],\n", - " 'conversationalist': [\"\"],\n", - " 'next_seven_days': [\"\"],\n", - " 'my_friends_like_you': [\"\"],\n", - " 'good_for_advice': [\"\"],\n", - " 'i_felt_close_to_my_partner': [\"\"],\n", - " 'i_would_like_to_become_friends': [\"\"],\n", - " 'i_paid_attention_to_my_partner': [\"\"],\n", - " 'my_partner_paid_attention_to_me': [\"\"],\n", - " 'my_partner_was_clear_and_coherent': [\"\"],\n", - " 'interested_in_exchanging_contact_info': [\"\"],\n", - " 'you_are_intelligent': [\"\"],\n", - " 'you_are_quickwitted': [\"\"],\n", - " 'you_are_competent': [\"\"],\n", - " 'you_are_kind': [\"\"],\n", - " 'you_are_friendly': [\"\"],\n", - " 'you_are_warm': [\"\"],\n", - " 'you_think_i_am_intelligent': [\"\"],\n", - " 'you_think_i_am_quickwitted': [\"\"],\n", - " 'you_think_i_am_competent': [\"\"],\n", - " 'you_think_i_am_kind': [\"\"],\n", - " 'you_think_i_am_friendly': [\"\"],\n", - " 'you_think_i_am_warm': [\"\"],\n", - " 'you_are_humble': [\"\"],\n", - " 'you_are_giving': [\"\"],\n", - " 'you_are_fair': [\"\"],\n", - " 'you_are_trustworthy': [\"\"],\n", - " 'you_are_agreeable': [\"\"],\n", - " 'you_are_playful': [\"\"],\n", - " 'i_am_intelligent': [\"\"],\n", - " 'i_am_quickwitted': [\"\"],\n", - " 'i_am_competent': [\"\"],\n", - " 'i_am_kind': [\"\"],\n", - " 'i_am_friendly': [\"\"],\n", - " 'i_am_warm': [\"\"],\n", - " 'i_am_humble': [\"\"],\n", - " 'i_am_giving': [\"\"],\n", - " 'i_am_fair': [\"\"],\n", - " 'i_am_trustworthy': [\"\"],\n", - " 'i_am_agreeable': [\"\"],\n", - " 'i_am_playful': [\"\"],\n", - " 'rest_of_day_open': [\"\"],\n", - " 'critical_positive': [\"\"],\n", - " 'critical_negative': [\"\"],\n", - " 'smiles': [\"\"],\n", - " 'laughter': [\"\"],\n", - " 'questions': [\"\"],\n", - " 'nods': [\"\"],\n", - " 'verbal_feedback': [\"\"],\n", - " 'speak_quickly': [\"\"],\n", - " 'my_turn_length': [\"\"],\n", - " 'your_turn_length': [\"\"],\n", - " 'topic_diversity': [\"\"],\n", - " 'turn_overlap_gap': [\"\"],\n", - " 'i_disclosed': [\"\"],\n", - " 'you_disclosed': [\"\"],\n", - " 'i_am_good_listener': [\"\"],\n", - " 'you_are_good_listener': [\"\"],\n", - " 'conv_leader': [\"\"],\n", - " 'talk_time_100_1': [\"\"],\n", - " 'you_total_talk_time': [\"\"],\n", - " 'conv_pace': [\"\"],\n", - " 'my_mind_wander': [\"\"],\n", - " 'your_mind_wander': [\"\"],\n", - " 'i_am_funny': [\"\"],\n", - " 'you_are_funny': [\"\"],\n", - " 'i_am_polite': [\"\"],\n", - " 'you_are_polite': [\"\"],\n", - " 'i_tried_to_impress': [\"\"],\n", - " 'you_tried_to_impress': [\"\"],\n", - " 'responsive_1': [\"\"],\n", - " 'responsive_2': [\"\"],\n", - " 'responsive_3': [\"\"],\n", - " 'end_you': [\"\"],\n", - " 'end_you_time_1': [\"\"],\n", - " 'longer_self': [\"\"],\n", - " 'how_long_you': [\"\"],\n", - " 'end_other': [\"\"],\n", - " 'end_other_time_1': [\"\"],\n", - " 'longer_other': [\"\"],\n", - " 'how_long_other': [\"\"],\n", - " 'our_thoughts_synced_up_sr1': [\"\"],\n", - " 'developed_joint_perspective_sr2': [\"\"],\n", - " 'shared_thoughts_feels_sr3': [\"\"],\n", - " 'discussed_real_things_sr4': [\"\"],\n", - " 'thoughts_became_more_alike_sr5': [\"\"],\n", - " 'anticipated_each_other_sr6': [\"\"],\n", - " 'became_certain_of_perception_sr7': [\"\"],\n", - " 'saw_world_in_same_way_sr8': [\"\"],\n", - " 'i_think_my_status': [\"\"],\n", - " 'i_think_your_status': [\"\"],\n", - " 'you_think_my_status': [\"\"],\n", - " 'my_bfi_1': [\"\"],\n", - " 'my_bfi_2': [\"\"],\n", - " 'my_bfi_3': [\"\"],\n", - " 'my_bfi_4': [\"\"],\n", - " 'my_bfi_5': [\"\"],\n", - " 'my_bfi_6': [\"\"],\n", - " 'my_bfi_7': [\"\"],\n", - " 'my_bfi_8': [\"\"],\n", - " 'my_bfi_9': [\"\"],\n", - " 'my_bfi_10': [\"\"],\n", - " 'my_bfi_11': [\"\"],\n", - " 'my_bfi_12': [\"\"],\n", - " 'my_bfi_13': [\"\"],\n", - " 'my_bfi_14': [\"\"],\n", - " 'my_bfi_15': [\"\"],\n", - " 'your_bfi_1': [\"\"],\n", - " 'your_bfi_2': [\"\"],\n", - " 'your_bfi_3': [\"\"],\n", - " 'your_bfi_4': [\"\"],\n", - " 'your_bfi_5': [\"\"],\n", - " 'your_bfi_6': [\"\"],\n", - " 'your_bfi_7': [\"\"],\n", - " 'your_bfi_8': [\"\"],\n", - " 'your_bfi_9': [\"\"],\n", - " 'your_bfi_10': [\"\"],\n", - " 'your_bfi_11': [\"\"],\n", - " 'your_bfi_12': [\"\"],\n", - " 'your_bfi_13': [\"\"],\n", - " 'your_bfi_14': [\"\"],\n", - " 'your_bfi_15': [\"\"],\n", - " 'you_lack_companionship': [\"\"],\n", - " 'you_feel_left_out': [\"\"],\n", - " 'you_feel_isolated': [\"\"],\n", - " 'sex': [\"\"],\n", - " 'politics': [\"\"],\n", - " 'race': [\"\"],\n", - " 'edu': [\"\"],\n", - " 'employ': [\"\"],\n", - " 'employ_7_TEXT': [\"\"],\n", - " 'sleep_today': [\"\"],\n", - " 'sleep_usual': [\"\"],\n", - " 'know_partner_1': [\"\"],\n", - " 'how_know_partner': [\"\"],\n", - " 'realtime': ['bin'],\n", - " 'did': [\"\"],\n", - " 'guided': [\"\"],\n", - " 'age': [\"\"],\n", - " 'conversation_count_past24': [\"\"],\n", - " 'conversation_hours_past24': [\"\"],\n", - " 'convo_who_family': [\"\"],\n", - " 'convo_who_romantic_partner': [\"\"],\n", - " 'convo_who_friends': [\"\"],\n", - " 'convo_who_work_colleagues': [\"\"],\n", - " 'convo_who_other': [\"\"],\n", - " 'convo_format_in_person': [\"\"],\n", - " 'convo_format_video_chat': [\"\"],\n", - " 'convo_format_phone_call': [\"\"],\n", - " 'convo_format_text': [\"\"],\n", - " 'convo_format_other': [\"\"],\n", - " 'my_isolation_pre_covid': [\"\"],\n", - " 'my_isolation_post_covid': [\"\"],\n", - " 'my_stress_pre_covid': [\"\"],\n", - " 'my_distracted_pre_covid': [\"\"],\n", - " 'my_sad_pre_covid': [\"\"],\n", - " 'my_stress_post_covid': [\"\"],\n", - " 'my_distracted_post_covid': [\"\"],\n", - " 'my_sad_post_covid': [\"\"],\n", - " 'n_living_with_me_pre_covid': [\"\"],\n", - " 'n_living_with_me_post_covid': [\"\"],\n", - " 'am_i_sheltering_in_place_now': [\"\"],\n", - " 'how_long_shelter_in_place': [\"\"],\n", - " 'i_lack_companionship': [\"\"],\n", - " 'i_feel_left_out': [\"\"],\n", - " 'i_feel_isolated': [\"\"],\n", - " 'shared_reality': [\"\"],\n", - " 'responsive': [\"\"],\n", - " 'my_loneliness': [\"\"],\n", - " 'your_loneliness': [\"\"],\n", - " 'RMET_score': [\"\"],\n", - " 'IRI_PT_score': [\"\"],\n", - " 'IRI_EC_score': [\"\"],\n", - " 'AQ_social_skill_score': [\"\"],\n", - " 'AQ_communication_score': [\"\"],\n", - " 'BFNE_score': [\"\"],\n", - " 'my_extraversion': [\"\"],\n", - " 'my_agreeable': [\"\"],\n", - " 'my_conscientious': [\"\"],\n", - " 'my_neurotic': [\"\"],\n", - " 'my_open': [\"\"],\n", - " 'your_extraversion': [\"\"],\n", - " 'your_agreeable': [\"\"],\n", - " 'your_conscientious': [\"\"],\n", - " 'your_neurotic': [\"\"],\n", - " 'your_open': [\"\"],\n", - " 'who_i_talked_to_most_past24': [\"\"],\n", - " 'most_common_format_past24': [\"\"]},\n", - " 'overall-index': {},\n", - " 'version': 1,\n", - " 'vectors': []}" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "from convokit import meta_index\n", - "meta_index(filename = f\"{SAVE_PATH}/CANDOR-corpus-{transcription_type}\")" + "meta_index(filename = f\"{SAVE_PATH}/CANDOR-corpus-{TRANSCRIPTION_TYPE}\")" ] }, { @@ -737,28 +715,18 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "my_CANDOR_corpus = Corpus(filename=f\"{SAVE_PATH}/CANDOR-corpus-{transcription_type}\")" + "my_CANDOR_corpus = Corpus(filename=f\"{SAVE_PATH}/CANDOR-corpus-{TRANSCRIPTION_TYPE}\")" ] }, { "cell_type": "code", - "execution_count": 30, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Number of Speakers: 186\n", - "Number of Utterances: 30075\n", - "Number of Conversations: 99\n" - ] - } - ], + "outputs": [], "source": [ "my_CANDOR_corpus.print_summary_stats()" ]