diff --git a/.gitignore b/.gitignore index 8d06e75d..b0f2758a 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,7 @@ .vscode/ .DS_Store src/altk.egg-info - +**/*.pkl # Distribution/build dist/ diff --git a/README.md b/README.md index d71525ef..db0dfa2f 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ First, set up a virtual environment (e.g. via [miniconda](https://docs.conda.io/ ## Getting started -- Check out the [examples](https://github.com/CLMBRs/ultk/tree/main/src/examples), starting with a basic signaling game. The examples folder also contains a simiple efficient communication analysis of [indefinites](https://github.com/CLMBRs/ultk/tree/main/src/examples/indefinites). +- Check out the [examples](https://github.com/CLMBRs/ultk/tree/main/src/examples), starting with a simiple efficient communication analysis of [indefinites](https://github.com/CLMBRs/ultk/tree/main/src/examples/indefinites) and a comparison of two approaches to efficient communication, with modals as a test case. - To see more scaled up usage examples, visit the codebase for an efficient communication analysis of [modals](https://github.com/nathimel/modals-effcomm) or [sim-max games](https://github.com/nathimel/rdsg). - For an introduction to efficient communication research, here is a [survey paper](https://www.annualreviews.org/doi/abs/10.1146/annurev-linguistics-011817-045406) of the field. - For an introduction to the RSA framework, see [this online textbook](http://www.problang.org/). @@ -51,7 +51,7 @@ Unit tests are written in [pytest](https://docs.pytest.org/en/7.3.x/) and execut
Figures: -> Kemp, C. & Regier, T. (2012) Kinship Categories Across Languages Reflect General Communicative Principles. Science. https://www.science.org/doi/10.1126/science.1218811 +> Kemp, C. & Regier, T. (2012). Kinship Categories Across Languages Reflect General Communicative Principles. Science. https://www.science.org/doi/10.1126/science.1218811 > Zaslavsky, N., Kemp, C., Regier, T., & Tishby, N. (2018). Efficient compression in color naming and its evolution. Proceedings of the National Academy of Sciences, 115(31), 7937–7942. https://doi.org/10.1073/pnas.1800521115 @@ -64,7 +64,6 @@ Unit tests are written in [pytest](https://docs.pytest.org/en/7.3.x/) and execut
Links: -> Imel, N. (2023). The evolution of efficient compression in signaling games. PsyArXiv. https://doi.org/10.31234/osf.io/b62de > Imel, N., & Steinert-Threlkeld, S. (2022). Modal semantic universals optimize the simplicity/informativeness trade-off. Semantics and Linguistic Theory, 1(0), Article 0. https://doi.org/10.3765/salt.v1i0.5346 diff --git a/docs/search.js b/docs/search.js index 5cea64cb..d40f31e1 100644 --- a/docs/search.js +++ b/docs/search.js @@ -1,6 +1,6 @@ window.pdocSearch = (function(){ /** elasticlunr - http://weixsong.github.io * Copyright (C) 2017 Oliver Nightingale * Copyright (C) 2017 Wei Song * MIT Licensed */!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.toArray();oThe Unnatural Language ToolKit (ULTK)\n\n

\"Four

\n\n

Introduction

\n\n

ULTK is a software library that aims to support efficient communication analyses of natural language. This is a line of research that aims to explain why natural languages have the structure that they do in terms competing pressures to minimize cognitive complexity and maximize communicative accuracy.

\n\n

Key features:

\n\n
    \n
  • Primitives for constructing semantic spaces, expressions, and languages
  • \n
  • Tools for measuring informativity of languages, communicative success of RSA speakers and listeners
  • \n
  • Language population sampling and optimization w.r.t Pareto fronts
  • \n
  • Rate-Distortion and Information Bottleneck style analyses
  • \n
\n\n

ULTK is a long term project and it is currently in its early stages. It is intended to help lower the barrier to entry for certain research in computational semantics, and to unify methodologies. If you find something confusing, please open an issue. If you have a phenomena of interest in linguistic semantics that you want to run an efficient communication analysis on, please contact the contributors.

\n\n

Read the documentation.

\n\n

Installing ULTK

\n\n

First, set up a virtual environment (e.g. via miniconda, conda create -n ultk python=3.11, and conda activate ultk).

\n\n
    \n
  1. Download or clone this repository and navigate to the root folder.

  2. \n
  3. Install ULTK (We recommend doing this inside a virtual environment)

    \n\n

    pip install -e .

  4. \n
\n\n

Getting started

\n\n
    \n
  • Check out the examples, starting with a basic signaling game. The examples folder also contains a simiple efficient communication analysis of indefinites.
  • \n
  • To see more scaled up usage examples, visit the codebase for an efficient communication analysis of modals or sim-max games.
  • \n
  • For an introduction to efficient communication research, here is a survey paper of the field.
  • \n
  • For an introduction to the RSA framework, see this online textbook.
  • \n
\n\n

Modules

\n\n

There are two modules. The first is ultk.effcomm, which includes methods for measuring informativity of languages and/or communicative success of Rational Speech Act agents, and for language population sampling and optimization w.r.t Pareto fronts.

\n\n

The second module is ultk.language, which contains primitives for constructing semantic spaces, expressions, and languages. It also has a grammar module which can be used for building expressions in a Language of Thought and measuring complexity in terms of minimum description length, as well as for natural language syntax.

\n\n

The source code is available on github here.

\n\n

Testing

\n\n

Unit tests are written in pytest and executed via running pytest in the src/tests folder.

\n\n

References

\n\n

\nFigures:

\n\n
\n

Kinship Categories Across Languages Reflect General Communicative Principles | Science. (n.d.). Retrieved February 27, 2023, from https://www.science.org/doi/10.1126/science.1218811

\n
\n\n
\n

Zaslavsky, N., Kemp, C., Regier, T., & Tishby, N. (2018). Efficient compression in color naming and its evolution. Proceedings of the National Academy of Sciences, 115(31), 7937\u20137942. https://doi.org/10.1073/pnas.1800521115

\n
\n\n
\n

Deni\u0107, M., Steinert-Threlkeld, S., & Szymanik, J. (2022). Indefinite Pronouns Optimize the Simplicity/Informativeness Trade-Off. Cognitive Science, 46(5), e13142. https://doi.org/10.1111/cogs.13142

\n
\n\n
\n

Steinert-Threlkeld, S. (2021). Quantifiers in Natural Language: Efficient Communication and Degrees of Semantic Universals. Entropy, 23(10), Article 10. https://doi.org/10.3390/e23101335

\n
\n\n

\n\n

\nLinks:

\n\n
\n

Imel, N. (2023). The evolution of efficient compression in signaling games. PsyArXiv. https://doi.org/10.31234/osf.io/b62de

\n
\n\n
\n

Imel, N., & Steinert-Threlkeld, S. (2022). Modal semantic universals optimize the simplicity/informativeness trade-off. Semantics and Linguistic Theory, 1(0), Article 0. https://doi.org/10.3765/salt.v1i0.5346

\n
\n\n
\n

Kemp, C., Xu, Y., & Regier, T. (2018). Semantic Typology and Efficient Communication. Annual Review of Linguistics, 4(1), 109\u2013128. https://doi.org/10.1146/annurev-linguistics-011817-045406

\n
\n\n

\n"}, "ultk.effcomm": {"fullname": "ultk.effcomm", "modulename": "ultk.effcomm", "kind": "module", "doc": "

Tools for measuring languages for communicative efficiency.

\n\n

Submodules divide the labor of a computational experiment performing an efficiency analysis of a language into several parts: generating and sampling the space of possible languages, measuring their properties, and determining which languages optimize efficient trade-offs w.r.t these properties.

\n\n

The altk.effcomm.sampling submodule implements several methods for generating hypothetically possible languages of a given type, by sampling from a set of possible expressions, or permuting the expression-meaning mapping of an existing language.

\n\n

The altk.effcomm.optimization submodule contains a general implementation of an evolutionary algorithm, which can be used to estimate a Pareto frontier of optimal solutions to an efficiency trade-off. It can also be used as a technique for randomly exploring the space of possible languages.

\n\n

The altk.effcomm.tradeoff submodule contains tools for measuring a pool of languages for various properties, finding which languages are Pareto dominant with respect to two properties, and setting attributes of the language objects for further analysis.

\n\n

The altk.effcomm.analysis submodule contains tools for performing numerical analyses and producing paradigmatic plots of languages in 2D trade-off space.

\n\n

The altk.effcomm.information submodule contains tools for information theory based analyses of the communicative efficiency of languages. It includes methods for Rate-Distortion style (including the Information Bottleneck) analyses.

\n\n

The altk.effcomm.agent submodule implements classes for constructing various speakers and listeners of a language. These are typically used in static analyses of informativity of a language, and are unified abstractions from the Rational Speech Act framework. They can also be used for dynamic analyses, however (see the signaling game example).

\n\n

The altk.effcomm.informativity submodule implements tools for computing the literal or pragmatic informativity of a language, based on speaker/listener abstractions described above.

\n\n

The altk.effcomm.util submodule contains various helper functions for working with the probability distributions associated with ALTK abstractions.

\n"}, "ultk.effcomm.agent": {"fullname": "ultk.effcomm.agent", "modulename": "ultk.effcomm.agent", "kind": "module", "doc": "

Classes for representing communicative agents, such as Senders and Receivers figuring in Lewis-Skyrms signaling games, literal and pragmatic agents in the Rational Speech Act framework, etc.

\n"}, "ultk.effcomm.agent.CommunicativeAgent": {"fullname": "ultk.effcomm.agent.CommunicativeAgent", "modulename": "ultk.effcomm.agent", "qualname": "CommunicativeAgent", "kind": "class", "doc": "

\n"}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"fullname": "ultk.effcomm.agent.CommunicativeAgent.__init__", "modulename": "ultk.effcomm.agent", "qualname": "CommunicativeAgent.__init__", "kind": "function", "doc": "

An agent that uses a language to communicate, e.g. a RSA pragmatic agent or a Lewis-Skyrms signaler.

\n\n
Arguments:
\n\n
    \n
  • language: a language to construct a agent to define the relation between meanings and expressions, which can be used to initialize the agent matrices (e.g. S or R).
  • \n
  • name: an optional string to name the communicative agent
  • \n
\n", "signature": "(language: ultk.language.language.Language, **kwargs)"}, "ultk.effcomm.agent.CommunicativeAgent.language": {"fullname": "ultk.effcomm.agent.CommunicativeAgent.language", "modulename": "ultk.effcomm.agent", "qualname": "CommunicativeAgent.language", "kind": "variable", "doc": "

\n"}, "ultk.effcomm.agent.CommunicativeAgent.shape": {"fullname": "ultk.effcomm.agent.CommunicativeAgent.shape", "modulename": "ultk.effcomm.agent", "qualname": "CommunicativeAgent.shape", "kind": "variable", "doc": "

\n"}, "ultk.effcomm.agent.CommunicativeAgent.weights": {"fullname": "ultk.effcomm.agent.CommunicativeAgent.weights", "modulename": "ultk.effcomm.agent", "qualname": "CommunicativeAgent.weights", "kind": "variable", "doc": "

\n", "annotation": ": numpy.ndarray"}, "ultk.effcomm.agent.CommunicativeAgent.normalized_weights": {"fullname": "ultk.effcomm.agent.CommunicativeAgent.normalized_weights", "modulename": "ultk.effcomm.agent", "qualname": "CommunicativeAgent.normalized_weights", "kind": "function", "doc": "

Return the normalized weights of a CommunicativeAgent so that each row vector represents a probability distribution.

\n", "signature": "(self) -> None:", "funcdef": "def"}, "ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"fullname": "ultk.effcomm.agent.CommunicativeAgent.initialize_weights", "modulename": "ultk.effcomm.agent", "qualname": "CommunicativeAgent.initialize_weights", "kind": "function", "doc": "

Initialize the agent's weight matrix.

\n\n
Arguments:
\n\n
    \n
  • weights: an np.ndarray representing the weights to initialize the agent with. By default None, and the agent's weights will be initialized uniformly.
  • \n
  • initial: {'ones', 'random'} a str reprsenting the initialization method to use. If 'ones' (default), initialize the weight matrix with np.ones. If 'random', initalize the weight matrix from np.random.uniform.
  • \n
\n", "signature": "(self, weights: numpy.ndarray = None, initial='ones') -> None:", "funcdef": "def"}, "ultk.effcomm.agent.CommunicativeAgent.referent_to_index": {"fullname": "ultk.effcomm.agent.CommunicativeAgent.referent_to_index", "modulename": "ultk.effcomm.agent", "qualname": "CommunicativeAgent.referent_to_index", "kind": "function", "doc": "

\n", "signature": "(self, referent: ultk.language.semantics.Referent) -> int:", "funcdef": "def"}, "ultk.effcomm.agent.CommunicativeAgent.index_to_referent": {"fullname": "ultk.effcomm.agent.CommunicativeAgent.index_to_referent", "modulename": "ultk.effcomm.agent", "qualname": "CommunicativeAgent.index_to_referent", "kind": "function", "doc": "

\n", "signature": "(self, index: int) -> ultk.language.semantics.Referent:", "funcdef": "def"}, "ultk.effcomm.agent.CommunicativeAgent.expression_to_index": {"fullname": "ultk.effcomm.agent.CommunicativeAgent.expression_to_index", "modulename": "ultk.effcomm.agent", "qualname": "CommunicativeAgent.expression_to_index", "kind": "function", "doc": "

\n", "signature": "(self, expression: ultk.language.language.Expression) -> int:", "funcdef": "def"}, "ultk.effcomm.agent.CommunicativeAgent.index_to_expression": {"fullname": "ultk.effcomm.agent.CommunicativeAgent.index_to_expression", "modulename": "ultk.effcomm.agent", "qualname": "CommunicativeAgent.index_to_expression", "kind": "function", "doc": "

\n", "signature": "(self, index: int) -> ultk.language.language.Expression:", "funcdef": "def"}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"fullname": "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices", "modulename": "ultk.effcomm.agent", "qualname": "CommunicativeAgent.strategy_to_indices", "kind": "function", "doc": "

Maps communicative strategies to weights.

\n\n

Given a expression and referent, access the corresponding weight coordinate.

\n\n
Arguments:
\n\n
    \n
  • strategy: a dict of the form {\"referent\": Referent, \"expression\": expression} representing an instance of communicative behavior, which we may call a communicative strategy for this agent.
  • \n
\n", "signature": "(self, strategy: dict[str, typing.Any]) -> tuple[int]:", "funcdef": "def"}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"fullname": "ultk.effcomm.agent.CommunicativeAgent.sample_strategy", "modulename": "ultk.effcomm.agent", "qualname": "CommunicativeAgent.sample_strategy", "kind": "function", "doc": "

Sample a communicative strategy (e.g., a word for Speaker's intended referent, or interpretation for Listener's heard word) by uniformly sampling from a row vector of the agent's weight matrix specified by the index.

\n\n
Arguments:
\n\n
    \n
  • index: the integer index representing a row of the weight matrix.
  • \n
\n\n
Returns:
\n\n
\n

the integer index of the agent's choice

\n
\n", "signature": "(self, index: int) -> int:", "funcdef": "def"}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"fullname": "ultk.effcomm.agent.CommunicativeAgent.to_language", "modulename": "ultk.effcomm.agent", "qualname": "CommunicativeAgent.to_language", "kind": "function", "doc": "

Get a language from the agent, representing its current (possibly learned) communicative behavior.

\n\n
This function uses:
\n\n
\n
    \n
  1. the agent's weight matrix,
  2. \n
  3. the set of expression forms, and
  4. \n
  5. the set of referents
  6. \n
\n
\n\n

from the language the agent was initialized with to generate a new language accurately reflecting the new expression meanings, e.g. how the agent interprets expressions as meaning zero or more referents.

\n\n
Arguments:
\n\n
    \n
  • threshold: a float in [0,1] representing the cutoff for determining if a meaning (referent) can be communicated by a expression. Because weights are not initialized to 0, it is a good idea to set nonzero values as the threshold.
  • \n
\n\n
Returns:
\n\n
\n

a Language corresponding to the form-meaning mapping defined by the communicative agent's weights.

\n
\n", "signature": "(\tself,\tdata: dict = {'complexity': None, 'accuracy': None},\tthreshold: float = 0.1) -> ultk.language.language.Language:", "funcdef": "def"}, "ultk.effcomm.agent.Speaker": {"fullname": "ultk.effcomm.agent.Speaker", "modulename": "ultk.effcomm.agent", "qualname": "Speaker", "kind": "class", "doc": "

\n", "bases": "CommunicativeAgent"}, "ultk.effcomm.agent.Speaker.__init__": {"fullname": "ultk.effcomm.agent.Speaker.__init__", "modulename": "ultk.effcomm.agent", "qualname": "Speaker.__init__", "kind": "function", "doc": "

An agent that uses a language to communicate, e.g. a RSA pragmatic agent or a Lewis-Skyrms signaler.

\n\n
Arguments:
\n\n
    \n
  • language: a language to construct a agent to define the relation between meanings and expressions, which can be used to initialize the agent matrices (e.g. S or R).
  • \n
  • name: an optional string to name the communicative agent
  • \n
\n", "signature": "(language: ultk.language.language.Language, **kwargs)"}, "ultk.effcomm.agent.Speaker.S": {"fullname": "ultk.effcomm.agent.Speaker.S", "modulename": "ultk.effcomm.agent", "qualname": "Speaker.S", "kind": "variable", "doc": "

\n", "annotation": ": numpy.ndarray"}, "ultk.effcomm.agent.Speaker.normalized_weights": {"fullname": "ultk.effcomm.agent.Speaker.normalized_weights", "modulename": "ultk.effcomm.agent", "qualname": "Speaker.normalized_weights", "kind": "function", "doc": "

Get the normalized weights of a Speaker.

\n\n

Each row vector represents a conditional probability distribution over expressions, P(e | m).

\n", "signature": "(self) -> numpy.ndarray:", "funcdef": "def"}, "ultk.effcomm.agent.Listener": {"fullname": "ultk.effcomm.agent.Listener", "modulename": "ultk.effcomm.agent", "qualname": "Listener", "kind": "class", "doc": "

\n", "bases": "CommunicativeAgent"}, "ultk.effcomm.agent.Listener.__init__": {"fullname": "ultk.effcomm.agent.Listener.__init__", "modulename": "ultk.effcomm.agent", "qualname": "Listener.__init__", "kind": "function", "doc": "

An agent that uses a language to communicate, e.g. a RSA pragmatic agent or a Lewis-Skyrms signaler.

\n\n
Arguments:
\n\n
    \n
  • language: a language to construct a agent to define the relation between meanings and expressions, which can be used to initialize the agent matrices (e.g. S or R).
  • \n
  • name: an optional string to name the communicative agent
  • \n
\n", "signature": "(language: ultk.language.language.Language, **kwargs)"}, "ultk.effcomm.agent.Listener.R": {"fullname": "ultk.effcomm.agent.Listener.R", "modulename": "ultk.effcomm.agent", "qualname": "Listener.R", "kind": "variable", "doc": "

\n", "annotation": ": numpy.ndarray"}, "ultk.effcomm.agent.Listener.normalized_weights": {"fullname": "ultk.effcomm.agent.Listener.normalized_weights", "modulename": "ultk.effcomm.agent", "qualname": "Listener.normalized_weights", "kind": "function", "doc": "

Normalize the weights of a Listener so that each row vector for the heard expression e represents a conditional probability distribution over referents P(m | e).

\n", "signature": "(self) -> numpy.ndarray:", "funcdef": "def"}, "ultk.effcomm.agent.LiteralSpeaker": {"fullname": "ultk.effcomm.agent.LiteralSpeaker", "modulename": "ultk.effcomm.agent", "qualname": "LiteralSpeaker", "kind": "class", "doc": "

A literal speaker chooses utterances without any reasoning about other agents. The literal speaker's conditional probability distribution P(e|m) is uniform over all expressions that can be used to communicate a particular meaning. This is in contrast to a pragmatic speaker, whose conditional distribution is not uniform in this way, but instead biased towards choosing expressions that are less likely to be misinterpreted by some listener.

\n", "bases": "Speaker"}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"fullname": "ultk.effcomm.agent.LiteralSpeaker.__init__", "modulename": "ultk.effcomm.agent", "qualname": "LiteralSpeaker.__init__", "kind": "function", "doc": "

An agent that uses a language to communicate, e.g. a RSA pragmatic agent or a Lewis-Skyrms signaler.

\n\n
Arguments:
\n\n
    \n
  • language: a language to construct a agent to define the relation between meanings and expressions, which can be used to initialize the agent matrices (e.g. S or R).
  • \n
  • name: an optional string to name the communicative agent
  • \n
\n", "signature": "(language: ultk.language.language.Language, **kwargs)"}, "ultk.effcomm.agent.LiteralSpeaker.S": {"fullname": "ultk.effcomm.agent.LiteralSpeaker.S", "modulename": "ultk.effcomm.agent", "qualname": "LiteralSpeaker.S", "kind": "variable", "doc": "

\n", "annotation": ": numpy.ndarray"}, "ultk.effcomm.agent.LiteralListener": {"fullname": "ultk.effcomm.agent.LiteralListener", "modulename": "ultk.effcomm.agent", "qualname": "LiteralListener", "kind": "class", "doc": "

A naive literal listener interprets utterances without any reasoning about other agents. Its conditional probability distribution P(m|e) for guessing meanings is uniform over all meanings that can be denoted by the particular expression heard. This is in contrast to a pragmatic listener, whose conditional distribution is biased to guess meanings that a pragmatic speaker most likely intended.

\n", "bases": "Listener"}, "ultk.effcomm.agent.LiteralListener.__init__": {"fullname": "ultk.effcomm.agent.LiteralListener.__init__", "modulename": "ultk.effcomm.agent", "qualname": "LiteralListener.__init__", "kind": "function", "doc": "

An agent that uses a language to communicate, e.g. a RSA pragmatic agent or a Lewis-Skyrms signaler.

\n\n
Arguments:
\n\n
    \n
  • language: a language to construct a agent to define the relation between meanings and expressions, which can be used to initialize the agent matrices (e.g. S or R).
  • \n
  • name: an optional string to name the communicative agent
  • \n
\n", "signature": "(language: ultk.language.language.Language, **kwargs)"}, "ultk.effcomm.agent.LiteralListener.R": {"fullname": "ultk.effcomm.agent.LiteralListener.R", "modulename": "ultk.effcomm.agent", "qualname": "LiteralListener.R", "kind": "variable", "doc": "

\n", "annotation": ": numpy.ndarray"}, "ultk.effcomm.agent.PragmaticSpeaker": {"fullname": "ultk.effcomm.agent.PragmaticSpeaker", "modulename": "ultk.effcomm.agent", "qualname": "PragmaticSpeaker", "kind": "class", "doc": "

A pragmatic speaker chooses utterances based on how a listener would interpret them. A pragmatic speaker may be initialized with any kind of listener, e.g. literal or pragmatic -- meaning the recursive reasoning can be modeled up to arbitrary depth.

\n", "bases": "Speaker"}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"fullname": "ultk.effcomm.agent.PragmaticSpeaker.__init__", "modulename": "ultk.effcomm.agent", "qualname": "PragmaticSpeaker.__init__", "kind": "function", "doc": "

Initialize the |M|-by-|E| matrix, S, corresponding to the pragmatic speaker's conditional probability distribution over expressions given meanings.

\n\n

The pragmatic speaker chooses expressions to communicate their intended meaning according to:

\n\n

$P(e | m) \\propto \\exp(t * u(e,m))$

\n\n

where $t \\in [0,1]$ is a temperature parameter and utility $u$ is defined

\n\n

$u(e , m) := \\log(P_{\\text{Listener}}(m | e))$

\n\n
Arguments:
\n\n
    \n
  • language: the language with |M| meanings and |E| expressions defining the size of S.
  • \n
  • listener: a communicative agent storing a matrix R representing the conditional distribution over expressions given meanings.
  • \n
  • temperature: a float \\in [0,1], representing how `optimally rational' the pragmatic speaker is; 1.0 is chosen when no particular assumptions about rationality are made.
  • \n
\n", "signature": "(\tlanguage: ultk.language.language.Language,\tlistener: ultk.effcomm.agent.Listener,\ttemperature: float = 1.0,\t**kwargs)"}, "ultk.effcomm.agent.PragmaticSpeaker.S": {"fullname": "ultk.effcomm.agent.PragmaticSpeaker.S", "modulename": "ultk.effcomm.agent", "qualname": "PragmaticSpeaker.S", "kind": "variable", "doc": "

\n", "annotation": ": numpy.ndarray"}, "ultk.effcomm.agent.PragmaticListener": {"fullname": "ultk.effcomm.agent.PragmaticListener", "modulename": "ultk.effcomm.agent", "qualname": "PragmaticListener", "kind": "class", "doc": "

A pragmatic listener interprets utterances based on their expectations about a pragmatic speaker's decisions. A pragmatic listener may be initialized with any kind of speaker, e.g. literal or pragmatic -- meaning the recursive reasoning can be modeled up to arbitrary depth.

\n", "bases": "Listener"}, "ultk.effcomm.agent.PragmaticListener.__init__": {"fullname": "ultk.effcomm.agent.PragmaticListener.__init__", "modulename": "ultk.effcomm.agent", "qualname": "PragmaticListener.__init__", "kind": "function", "doc": "

Initialize the |E|-by-|M| matrix, R, corresponding to the pragmatic listener's conditional probability distribution over meanings given expressions.

\n\n

The pragmatic listener chooses meanings as their best guesses of the expression they heard according to:

\n\n

$P(m | e) \\propto P_{\\text{PragmaticSpeaker}}(e | m)$

\n\n
Arguments:
\n\n
    \n
  • language: the language with |M| meanings and |E| expressions defining the size of R.
  • \n
  • speaker: a communicative agent storing a matrix S representing the conditional distribution over expressions given meanings.
  • \n
  • prior: a diagonal matrix of size |M|-by-|M| representing the communicative need probabilities for meanings.
  • \n
\n", "signature": "(\tlanguage: ultk.language.language.Language,\tspeaker: ultk.effcomm.agent.Speaker,\tprior: numpy.ndarray,\t**kwargs)"}, "ultk.effcomm.agent.PragmaticListener.R": {"fullname": "ultk.effcomm.agent.PragmaticListener.R", "modulename": "ultk.effcomm.agent", "qualname": "PragmaticListener.R", "kind": "variable", "doc": "

\n", "annotation": ": numpy.ndarray"}, "ultk.effcomm.agent.BayesianListener": {"fullname": "ultk.effcomm.agent.BayesianListener", "modulename": "ultk.effcomm.agent", "qualname": "BayesianListener", "kind": "class", "doc": "

A Bayesian reciever chooses an interpretation according to p(meaning | word), where

\n\n

BUG: This is extremely misleading since we basically only use this function for IB, and IB assumes a DETERMINISTIC bayes-derived listener.

\n\n

$P(m | w) = \\frac{P(M | W) \\cdot P(M)} { P(W) }$

\n\n

Furthermore, we sometimes require that each word w is deterministically interpreted as meaning $\\hat{m}$ as follows:

\n\n

BUG: This says nothing about determinism.

\n\n

$\\hat{m}_{w}(u) = \\sum_m p(m|w) \\cdot m(u)$

\n\n

See ultk.effcomm.information for more details.

\n", "bases": "Listener"}, "ultk.effcomm.agent.BayesianListener.__init__": {"fullname": "ultk.effcomm.agent.BayesianListener.__init__", "modulename": "ultk.effcomm.agent", "qualname": "BayesianListener.__init__", "kind": "function", "doc": "

An agent that uses a language to communicate, e.g. a RSA pragmatic agent or a Lewis-Skyrms signaler.

\n\n
Arguments:
\n\n
    \n
  • language: a language to construct a agent to define the relation between meanings and expressions, which can be used to initialize the agent matrices (e.g. S or R).
  • \n
  • name: an optional string to name the communicative agent
  • \n
\n", "signature": "(\tspeaker: ultk.effcomm.agent.Speaker,\tprior: numpy.ndarray,\tname: str = None)"}, "ultk.effcomm.analysis": {"fullname": "ultk.effcomm.analysis", "modulename": "ultk.effcomm.analysis", "kind": "module", "doc": "

Functions for analyzing and formatting the results of the simplicity/informativeness trade-off.

\n"}, "ultk.effcomm.analysis.get_dataframe": {"fullname": "ultk.effcomm.analysis.get_dataframe", "modulename": "ultk.effcomm.analysis", "qualname": "get_dataframe", "kind": "function", "doc": "

Get a pandas DataFrame for a list of languages containing efficient communication data.

\n\n
Arguments:
\n\n
    \n
  • languages: the list of languages to map into a dataframe.
  • \n
  • columns: the list of keys to a language's data dictionary attribute, which will comprise the columns of the resulting dataframe. By default will use all items of each language's data dictionary.
  • \n
  • subset: the columns to subset for duplicates
  • \n
  • duplicates: {\"drop\", \"count\", \"leave\"} whether to drop, count, or do nothing with duplicates. By default is set to \"leave\" which will leave duplicates in the dataframe.
  • \n
\n\n
Returns:
\n\n
\n
    \n
  • data: a pandas DataFrame with rows as individual languages, with the columns specifying their data.
  • \n
\n
\n", "signature": "(\tlanguages: list[ultk.language.language.Language],\tcolumns: list[str] = None,\tsubset: list[str] = ['complexity', 'comm_cost'],\tduplicates: str = 'leave') -> pandas.core.frame.DataFrame:", "funcdef": "def"}, "ultk.effcomm.analysis.pearson_analysis": {"fullname": "ultk.effcomm.analysis.pearson_analysis", "modulename": "ultk.effcomm.analysis", "qualname": "pearson_analysis", "kind": "function", "doc": "

Measures pearson correlation coefficient for naturalness with a property.

\n\n

Use nonparametric bootstrap for confidence intervals.

\n\n
Arguments:
\n\n
    \n
  • data: a DataFrame representing the pool of measured languages
  • \n
  • predictor: a string representing the column to measure pearson r with
  • \n
  • property: a string representing a column to measure pearson r with the predictor column
  • \n
  • num_bootstrap_samples: how many samples to bootstrap from the original data
  • \n
\n\n
Returns:
\n\n
\n

a dict of the pearson correlation coefficient for the predictor and the property, and bootstrapped confidence intervals for this coefficient, e.g.

\n\n
{\n\"rho\": (a float between -1 and 1),\n\"confidence_intervals\": (a pandas Dataframe with the columns [\n    'bootstrap_sample_percent', 'low', 'high'\n])\n}\n
\n
\n", "signature": "(\tdata,\tpredictor: str,\tproperty: str,\tnum_bootstrap_samples=100) -> dict[str, typing.Any]:", "funcdef": "def"}, "ultk.effcomm.analysis.trade_off_means": {"fullname": "ultk.effcomm.analysis.trade_off_means", "modulename": "ultk.effcomm.analysis", "qualname": "trade_off_means", "kind": "function", "doc": "

Get a dataframe with the mean tradeoff data.

\n\n
Arguments:
\n\n
    \n
  • name: a str representing the subset of the population to observe mean properties for, e.g. \"natural\" or \"population\".
  • \n
  • df: a pandas DataFrame containing data of a language population to take the means of.
  • \n
  • prperties: the properties to take means of, corresponding to columns of df.
  • \n
\n\n

Examples:

\n\n
\n
>>> natural_means = trade_off_means("natural_means", natural_data, properties)\n>>> population_means = trade_off_means("population_means", data, properties)\n>>> means_df = pd.concat([natural_means, dlsav_means, population_means]).set_index("name")\n>>> means_df\n                    simplicity  complexity  informativity  optimality\n    name\n    natural_means       0.772222     16.4000       0.746296    0.952280\n    population_means    0.681068     22.9631       0.525118    0.832010\n
\n
\n", "signature": "(\tname: str,\tdf: pandas.core.frame.DataFrame,\tproperties: list) -> pandas.core.frame.DataFrame:", "funcdef": "def"}, "ultk.effcomm.analysis.trade_off_ttest": {"fullname": "ultk.effcomm.analysis.trade_off_ttest", "modulename": "ultk.effcomm.analysis", "qualname": "trade_off_ttest", "kind": "function", "doc": "

Get a dataframe with a single-samples t-test results for a subpopulation against the full population.

\n\n

This is useful if we want to compare the optimality of natural languages to the full population of languages in an experiment. Because the property of 'being a natural language' is categorical, we use a single-samples T test.

\n\n
Arguments:
\n\n
    \n
  • sub_population: a pandas DataFrame representing a subset of the population to take ttests against the full language population for properties.
  • \n
  • population_means: a dict containing properties as keys and the mean value of the full language population for that property.
  • \n
  • properties: a list of strings corresponding to columns of the sub_population DataFrame and keys of the population_means dict.
  • \n
\n\n
Examples:
\n\n
\n
\n
>>> df = trade_off_ttest(natural_data, population_means, properties)\n>>> df\n                        simplicity  complexity  informativity  optimality\n    stat\n    t-statistic          4.101937   -4.101937       3.126855    4.031027\n    Two-sided p-value    0.014830    0.014830       0.035292    0.015720\n
\n
\n
\n", "signature": "(\tsub_population: pandas.core.frame.DataFrame,\tpopulation_means: dict,\tproperties: list) -> pandas.core.frame.DataFrame:", "funcdef": "def"}, "ultk.effcomm.information": {"fullname": "ultk.effcomm.information", "modulename": "ultk.effcomm.information", "kind": "module", "doc": "

Helper functions for Rate-Distortion based (including Information Bottleneck) efficient communication analyses.

\n"}, "ultk.effcomm.information.information_rate": {"fullname": "ultk.effcomm.information.information_rate", "modulename": "ultk.effcomm.information", "qualname": "information_rate", "kind": "function", "doc": "

Compute the information rate / complexity of the encoder q(w|m) as $I[W:M]$.

\n", "signature": "(source: numpy.ndarray, encoder: numpy.ndarray) -> float:", "funcdef": "def"}, "ultk.effcomm.information.get_rd_curve": {"fullname": "ultk.effcomm.information.get_rd_curve", "modulename": "ultk.effcomm.information", "qualname": "get_rd_curve", "kind": "function", "doc": "

Use the Blahut Arimoto algorithm to obtain a list of (rate, distortion) points.

\n", "signature": "(\tprior: numpy.ndarray,\tdist_mat: numpy.ndarray,\tbetas: numpy.ndarray = None) -> list[tuple[float]]:", "funcdef": "def"}, "ultk.effcomm.information.expected_distortion": {"fullname": "ultk.effcomm.information.expected_distortion", "modulename": "ultk.effcomm.information", "qualname": "expected_distortion", "kind": "function", "doc": "

$D[X, \\hat{X}] = \\sum_x p(x) \\sum_{\\hat{x}} p(\\hat{x}|x) \\cdot d(x, \\hat{x})$

\n", "signature": "(\tp_x: numpy.ndarray,\tp_xhat_x: numpy.ndarray,\tdist_mat: numpy.ndarray) -> float:", "funcdef": "def"}, "ultk.effcomm.information.compute_rate_distortion": {"fullname": "ultk.effcomm.information.compute_rate_distortion", "modulename": "ultk.effcomm.information", "qualname": "compute_rate_distortion", "kind": "function", "doc": "

Compute the information rate $I(X;\\hat{X})$ and total distortion $D[X, \\hat{X}]$ of a joint distribution defind by $P(X)$ and $P(\\hat{X}|X)$.

\n\n
Arguments:
\n\n
    \n
  • p_x: array of shape |X| the prior probability of an input symbol (i.e., the source)
  • \n
  • p_xhat_x: array of shape (|X|, |X_hat|) the probability of an output symbol given the input
  • \n
  • dist_mat: array of shape (|X|, |X_hat|) representing the distoriton matrix between the input alphabet and the reconstruction alphabet.
  • \n
\n\n
Returns:
\n\n
\n

a (rate, distortion) tuple containing the information rate (in bits) of compressing X into X_hat and the expected distortion between X, X_hat

\n
\n", "signature": "(p_x, p_xhat_x, dist_mat) -> tuple[numpy.ndarray]:", "funcdef": "def"}, "ultk.effcomm.information.blahut_arimoto": {"fullname": "ultk.effcomm.information.blahut_arimoto", "modulename": "ultk.effcomm.information", "qualname": "blahut_arimoto", "kind": "function", "doc": "

Compute the rate-distortion function of an i.i.d distribution

\n\n
Arguments:
\n\n
    \n
  • dist_mat: array of shape (|X|, |X_hat|) representing the distortion matrix between the input alphabet and the reconstruction alphabet. dist_mat[i,j] = dist(x[i],x_hat[j]). In this context, X is a random variable representing the a speaker's meaning (target referent), and X_hat is a random variable representing a listener's meaning (guessed referent).
  • \n
  • p_x: (1D array of shape |X|) representing the probability mass function of the source. In this context, the prior over states of nature.
  • \n
  • beta: (scalar) the slope of the rate-distoriton function at the point where evaluation is required
  • \n
  • max_it: max number of iterations
  • \n
  • eps: accuracy required by the algorithm: the algorithm stops if there is no change in distoriton value of more than 'eps' between consequtive iterations
  • \n
  • ignore_converge: whether to run the optimization until max_it, ignoring the stopping criterion specified by eps.
  • \n
\n\n
Returns:
\n\n
\n

a dict of the form

\n\n
{\n    'final': a tuple of (rate, distortion) values. This is the rate (in bits) of compressing X into X_hat, and distortion between X, X_hat\n\n    'trajectory': a list of the (rate, distortion) points discovered during optimization\n}\n
\n
\n", "signature": "(\tdist_mat: numpy.ndarray,\tp_x: numpy.ndarray,\tbeta: float,\tmax_it: int = 200,\teps: float = 1e-05,\tignore_converge: bool = False) -> tuple[float]:", "funcdef": "def"}, "ultk.effcomm.information.get_ib_curve": {"fullname": "ultk.effcomm.information.get_ib_curve", "modulename": "ultk.effcomm.information", "qualname": "get_ib_curve", "kind": "function", "doc": "

Get a list of (complexity, accuracy) or (complexity, distortion) points. A minimal wrapper of get_bottleneck.

\n\n
Arguments:
\n\n
    \n
  • prior: array of shape |meanings|
  • \n
  • meaning_dists: array of shape (|meanings|, |meanings|) representing the distribution over world states given meanings.
  • \n
  • curve_type: {'informativity', 'comm_cost'} specifies whether to return the (classic) IB axes of informativity vs. complexity, or the more Rate-Distortion Theory aligned axes of comm_cost vs. complexity. The latter can be obtained easily from the former by subtracting each informativity value from I[M:U], which is a constant for all languages in the same domain.
  • \n
  • maxbeta: the maximum value of beta to use to compute the curve.
  • \n
  • minbeta: the minimum value of beta to use.
  • \n
  • numbeta: the number of (equally-spaced) beta values to consider to compute the curve.
  • \n
  • processes: number of cpu threads to run in parallel (default = 1)
  • \n
\n\n
Returns:
\n\n
\n

an array of shape (num_points, 2) representing the list of (accuracy/comm_cost, complexity) points on the information plane.

\n
\n", "signature": "(\tprior: numpy.ndarray,\tmeaning_dists: numpy.ndarray,\tmaxbeta: float,\tminbeta: float,\tnumbeta: float,\tprocesses: int = 1,\tcurve_type: str = 'informativity') -> tuple[float]:", "funcdef": "def"}, "ultk.effcomm.information.get_bottleneck": {"fullname": "ultk.effcomm.information.get_bottleneck", "modulename": "ultk.effcomm.information", "qualname": "get_bottleneck", "kind": "function", "doc": "

Compute the IB curve bound (I[M:W] vs. I[W:U]). We use the embo package, which has support for smoothing any non-monotonicity in the bound resulting from BA optimization getting stuck in local minima.

\n\n
Arguments:
\n\n
    \n
  • prior: array of shape |meanings|
  • \n
  • meaning_dists: array of shape (|meanings|, |meanings|) representing the distribution over world states given meanings.
  • \n
  • curve_type: {'informativity', 'comm_cost'} specifies whether to return the (classic) IB axes of informativity vs. complexity, or the more Rate-Distortion Theory aligned axes of comm_cost vs. complexity. The comm_cost can be obtained easily from informativity by subtracting each informativity value from I[M:U], which is a constant for all languages in the same domain.
  • \n
  • maxbeta: the maximum value of beta to use to compute the curve.
  • \n
  • minbeta: the minimum value of beta to use.
  • \n
  • numbeta: the number of (equally-spaced) beta values to consider to compute the curve.
  • \n
  • processes: number of cpu threads to run in parallel (default = 1)
  • \n
\n\n
Returns:
\n\n
\n

a dict containing the coordinates and encoders corresponding to IB optima, of the form

\n\n
{\n\"encoders\": an array of shape `(num_meanings, num_words)`,\n\n\"coordinates\": a tuple of arrays `(complexity, accuracy, comm_cost)` each of shape (`numbeta`,)\n\"beta\": an array of shape (`numbeta`,) corresponding to the actually used betas after non-monotonicity corrections.\n}\n
\n
\n", "signature": "(\tprior: numpy.ndarray,\tmeaning_dists: numpy.ndarray,\tmaxbeta: float,\tminbeta: float,\tnumbeta: float,\tprocesses: int = 1) -> numpy.ndarray:", "funcdef": "def"}, "ultk.effcomm.information.ib_complexity": {"fullname": "ultk.effcomm.information.ib_complexity", "modulename": "ultk.effcomm.information", "qualname": "ib_complexity", "kind": "function", "doc": "

Compute the IB encoder complexity of a language $I[M:W]$.

\n", "signature": "(language: ultk.language.language.Language, prior: numpy.ndarray) -> float:", "funcdef": "def"}, "ultk.effcomm.information.ib_informativity": {"fullname": "ultk.effcomm.information.ib_informativity", "modulename": "ultk.effcomm.information", "qualname": "ib_informativity", "kind": "function", "doc": "

Compute the expected informativity (accuracy) $I[W:U]$ of a lexicon.

\n\n
Arguments:
\n\n
    \n
  • language: the Language to measure for informativity
  • \n
  • prior: communicative need distribution
  • \n
  • meaning_dists: array of shape (|meanings|, |meanings|) representing the distribution over world states given meanings.
  • \n
\n\n
Returns:
\n\n
\n

the informativity of the language I[W:U] in bits.

\n
\n", "signature": "(\tlanguage: ultk.language.language.Language,\tprior: numpy.ndarray,\tmeaning_dists: numpy.ndarray) -> float:", "funcdef": "def"}, "ultk.effcomm.information.ib_comm_cost": {"fullname": "ultk.effcomm.information.ib_comm_cost", "modulename": "ultk.effcomm.information", "qualname": "ib_comm_cost", "kind": "function", "doc": "

Compute the IB communicative cost, i.e. expected KL-divergence betweeen speaker and listener meanings, for a language.

\n\n
Arguments:
\n\n
    \n
  • language: the Language to measure for communicative cost
  • \n
  • prior: communicative need distribution
  • \n
  • meaning_dists: array of shape (|meanings|, |meanings|) representing the distribution over world states given meanings.
  • \n
\n\n
Returns:
\n\n
\n

the communicative cost, $\\mathbb{E}[D_{KL}[M || \\hat{M}]] = I[M:U] - I[W:U]$ in bits.

\n
\n", "signature": "(\tlanguage: ultk.language.language.Language,\tprior: numpy.ndarray,\tmeaning_dists: numpy.ndarray) -> float:", "funcdef": "def"}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"fullname": "ultk.effcomm.information.language_to_ib_encoder_decoder", "modulename": "ultk.effcomm.information", "qualname": "language_to_ib_encoder_decoder", "kind": "function", "doc": "

Convert a Language, a mapping of words to meanings, to IB encoder, q(w|m) and IB decoder q(m|w).

\n\n
Arguments:
\n\n
    \n
  • language: the lexicon from which to infer a speaker (encoder).
  • \n
  • prior: communicative need distribution
  • \n
\n\n
Returns:
\n\n
\n

a dict of the form\n {\n \"encoder\": np.ndarray of shape (|meanings|, |words|),\n \"decoder\": np.ndarray of shape (|words|, |meanings|),\n }

\n
\n", "signature": "(\tlanguage: ultk.language.language.Language,\tprior: numpy.ndarray) -> dict[str, numpy.ndarray]:", "funcdef": "def"}, "ultk.effcomm.information.ib_accuracy": {"fullname": "ultk.effcomm.information.ib_accuracy", "modulename": "ultk.effcomm.information", "qualname": "ib_accuracy", "kind": "function", "doc": "

Return the accuracy of the lexicon I[W:U]

\n\n
Arguments:
\n\n
    \n
  • encoder: array of shape (|M|, |W|) representing P(W | M)
  • \n
  • decoder: array of shape (|W|, |M|) representing P(M | W)
  • \n
  • meaning_dists: array of shape (|M|, |U|) representing P(U | M)
  • \n
  • prior: array of shape |M| representing P(M)
  • \n
\n\n
Returns:
\n\n
\n

the accuracy of the lexicon I[W:U]

\n
\n", "signature": "(\tencoder: numpy.ndarray,\tprior: numpy.ndarray,\tmeaning_dists: numpy.ndarray) -> float:", "funcdef": "def"}, "ultk.effcomm.information.ib_distortion": {"fullname": "ultk.effcomm.information.ib_distortion", "modulename": "ultk.effcomm.information", "qualname": "ib_distortion", "kind": "function", "doc": "

Return the IB distortion measure E[DKL[ M || M_hat ]]

\n\n
Arguments:
\n\n
    \n
  • encoder: array of shape (|M|, |W|) representing P(W | M)
  • \n
  • decoder: array of shape (|W|, |M|) representing P(M | W)
  • \n
  • meaning_dists: array of shape (|M|, |U|) representing P(U | M)
  • \n
  • prior: array of shape |M| representing P(M)
  • \n
\n\n
Returns:
\n\n
\n

the distortion E[DKL[ M || M_hat ]] = I[M:U] - I[W:U]

\n
\n", "signature": "(\tencoder: numpy.ndarray,\tprior: numpy.ndarray,\tmeaning_dists: numpy.ndarray) -> float:", "funcdef": "def"}, "ultk.effcomm.information.ib_encoder_to_point": {"fullname": "ultk.effcomm.information.ib_encoder_to_point", "modulename": "ultk.effcomm.information", "qualname": "ib_encoder_to_point", "kind": "function", "doc": "

Return (complexity, accuracy, comm_cost) IB coordinates.

\n\n
Arguments:
\n\n
    \n
  • meaning_dists: array of shape (|meanings|, |meanings|) representing the distribution over world states given meanings.
  • \n
  • prior: array of shape |M| representing the cognitive source
  • \n
  • encoder: array of shape (|M|, |W|) representing P(W | M)
  • \n
  • decoder: array of shape (|W|, |M|) representing P(M | W). By default is None, and the Bayesian optimal decoder will be inferred.
  • \n
\n", "signature": "(\tmeaning_dists: numpy.ndarray,\tprior: numpy.ndarray,\tencoder: numpy.ndarray,\tdecoder: numpy.ndarray = None) -> tuple[float]:", "funcdef": "def"}, "ultk.effcomm.information.ib_optimal_decoder": {"fullname": "ultk.effcomm.information.ib_optimal_decoder", "modulename": "ultk.effcomm.information", "qualname": "ib_optimal_decoder", "kind": "function", "doc": "

Compute the bayesian optimal decoder. See https://github.com/nogazs/ib-color-naming/blob/master/src/ib_naming_model.py#L40

\n\n
Arguments:
\n\n
    \n
  • encoder: array of shape (|words|, |meanings|)
  • \n
  • prior: array of shape (|meanings|,)
  • \n
  • meaning_dists: array of shape (|meanings|, |meanings|)
  • \n
\n\n
Returns:
\n\n
\n

array of shape (|words|, |meanings|) representing the 'optimal' deterministic decoder

\n
\n", "signature": "(\tencoder: numpy.ndarray,\tprior: numpy.ndarray,\tmeaning_dists: numpy.ndarray) -> numpy.ndarray:", "funcdef": "def"}, "ultk.effcomm.informativity": {"fullname": "ultk.effcomm.informativity", "modulename": "ultk.effcomm.informativity", "kind": "module", "doc": "

Functions for measuring informativity in efficient communication analyses of languages.

\n"}, "ultk.effcomm.informativity.indicator_utility": {"fullname": "ultk.effcomm.informativity.indicator_utility", "modulename": "ultk.effcomm.informativity", "qualname": "indicator_utility", "kind": "function", "doc": "

Indicator utility function, i.e. delta. Returns 1.0 iff ref1 equals ref2.

\n", "signature": "(\tref1: ultk.language.semantics.Referent,\tref2: ultk.language.semantics.Referent) -> float:", "funcdef": "def"}, "ultk.effcomm.informativity.informativity": {"fullname": "ultk.effcomm.informativity.informativity", "modulename": "ultk.effcomm.informativity", "qualname": "informativity", "kind": "function", "doc": "

The informativity of a language is identified with the successful communication between a speaker and a listener.

\n\n

This function is a wrapper for communicative_success.

\n\n
Arguments:
\n\n
    \n
  • language: the language to compute informativity of.
  • \n
  • prior: a probability distribution representing communicative need (frequency) for Referents.
  • \n
  • utility: a function representing the usefulness of listener guesses about speaker Referents, e.g. Referent similarity. To reward only exact recovery of meanings, use the indicator function (default).
  • \n
  • kind: {\"literal, pragmatic\"} Whether to measure informativity using literal or pragmatic agents, as canonically described in the Rational Speech Act framework. The default is \"literal\".
  • \n
\n\n

Concepts:\n The speaker can be thought of as a conditional distribution over expressions given meanings. The listener is likewise a conditional distribution over meanings given expressions. The communicative need, or cognitive source, is a prior probability over meanings representing how frequently agents need to use certain meanings in communication. The utility function represents the similarity, or appropriateness, of the listener's guess m' about the speaker's intended meaning m.

\n\n

Formula:\n The informativity of a language $L$ with meaning space $M$ is defined:

\n\n

$I(L) := \\sum_{m \\in M} p(m) \\sum_{i \\in L} p(i|m) \\sum_{\\hat{m} \\in i} p(\\hat{m}|i) \\cdot u(m, \\hat{m})$

\n\n

Bounds:\n A perfectly informative (=1.0) language can be constructed with a exactly one expression for each meaning.

\n\n
For u() = indicator(), every language has nonzero informativity because a language must contain at least one expression, and an expression must contain at least one meaning.\n
\n", "signature": "(\tlanguage: ultk.language.language.Language,\tprior: numpy.ndarray,\tutility: Callable[[ultk.language.semantics.Referent, ultk.language.semantics.Referent], float] = <function indicator_utility>,\tagent_type: str = 'literal') -> float:", "funcdef": "def"}, "ultk.effcomm.informativity.communicative_success": {"fullname": "ultk.effcomm.informativity.communicative_success", "modulename": "ultk.effcomm.informativity", "qualname": "communicative_success", "kind": "function", "doc": "

Helper function to compute the literal informativity of a language.

\n\n

$I(L) = \\sum_{m, \\hat{m}} P(m, \\hat{m}) \\cdot u(m, \\hat{m})$

\n\n

$ = \\sum_{m \\in M} p(m) \\sum_{i \\in L} p(i|m) \\sum_{\\hat{m} \\in i} p(\\hat{m} |i) \\cdot u(m, m')$

\n\n

$ = \\sum \\text{diag}(p)SR \\odot U $

\n\n

For more details, see docs/vectorized_informativity.

\n\n
Arguments:
\n\n
    \n
  • speaker: a literal or pragmatic speaker, containing a matrix S for P(e | m)
  • \n
  • listener: a literal or pragmatic listener, containing a matrix R for P(m | e)
  • \n
  • prior: p(m), distribution over meanings representing communicative need
  • \n
  • utility: a function u(m, m') representing similarity of meanings, or pair-wise usefulness of listener guesses about speaker meanings.
  • \n
\n", "signature": "(\tspeaker: ultk.effcomm.agent.Speaker,\tlistener: ultk.effcomm.agent.Listener,\tprior: numpy.ndarray,\tutility: Callable[[ultk.language.semantics.Referent, ultk.language.semantics.Referent], float]) -> float:", "funcdef": "def"}, "ultk.effcomm.optimization": {"fullname": "ultk.effcomm.optimization", "modulename": "ultk.effcomm.optimization", "kind": "module", "doc": "

Classes and functions for generating languages that optimize the simplicity/informativeness trade-off, e.g. via an iterative evolutionary algorithm.

\n"}, "ultk.effcomm.optimization.Mutation": {"fullname": "ultk.effcomm.optimization.Mutation", "modulename": "ultk.effcomm.optimization", "qualname": "Mutation", "kind": "class", "doc": "

\n"}, "ultk.effcomm.optimization.Mutation.precondition": {"fullname": "ultk.effcomm.optimization.Mutation.precondition", "modulename": "ultk.effcomm.optimization", "qualname": "Mutation.precondition", "kind": "function", "doc": "

Whether a mutation is allowed to apply to a language.

\n", "signature": "(language: ultk.language.language.Language, **kwargs) -> bool:", "funcdef": "def"}, "ultk.effcomm.optimization.Mutation.mutate": {"fullname": "ultk.effcomm.optimization.Mutation.mutate", "modulename": "ultk.effcomm.optimization", "qualname": "Mutation.mutate", "kind": "function", "doc": "

Mutate the language, possibly using a list of expressions.

\n", "signature": "(\tlanguage: ultk.language.language.Language,\texpressions: list[ultk.language.language.Expression],\t**kwargs) -> ultk.language.language.Language:", "funcdef": "def"}, "ultk.effcomm.optimization.RemoveExpression": {"fullname": "ultk.effcomm.optimization.RemoveExpression", "modulename": "ultk.effcomm.optimization", "qualname": "RemoveExpression", "kind": "class", "doc": "

\n", "bases": "Mutation"}, "ultk.effcomm.optimization.RemoveExpression.precondition": {"fullname": "ultk.effcomm.optimization.RemoveExpression.precondition", "modulename": "ultk.effcomm.optimization", "qualname": "RemoveExpression.precondition", "kind": "function", "doc": "

Whether a mutation is allowed to apply to a language.

\n", "signature": "(language: ultk.language.language.Language, **kwargs) -> bool:", "funcdef": "def"}, "ultk.effcomm.optimization.RemoveExpression.mutate": {"fullname": "ultk.effcomm.optimization.RemoveExpression.mutate", "modulename": "ultk.effcomm.optimization", "qualname": "RemoveExpression.mutate", "kind": "function", "doc": "

Mutate the language, possibly using a list of expressions.

\n", "signature": "(\tlanguage: ultk.language.language.Language,\texpressions: list[ultk.language.language.Expression],\t**kwargs) -> ultk.language.language.Language:", "funcdef": "def"}, "ultk.effcomm.optimization.AddExpression": {"fullname": "ultk.effcomm.optimization.AddExpression", "modulename": "ultk.effcomm.optimization", "qualname": "AddExpression", "kind": "class", "doc": "

\n", "bases": "Mutation"}, "ultk.effcomm.optimization.AddExpression.precondition": {"fullname": "ultk.effcomm.optimization.AddExpression.precondition", "modulename": "ultk.effcomm.optimization", "qualname": "AddExpression.precondition", "kind": "function", "doc": "

Whether a mutation is allowed to apply to a language.

\n", "signature": "(language: ultk.language.language.Language, **kwargs) -> bool:", "funcdef": "def"}, "ultk.effcomm.optimization.AddExpression.mutate": {"fullname": "ultk.effcomm.optimization.AddExpression.mutate", "modulename": "ultk.effcomm.optimization", "qualname": "AddExpression.mutate", "kind": "function", "doc": "

Mutate the language, possibly using a list of expressions.

\n", "signature": "(\tlanguage: ultk.language.language.Language,\texpressions: list[ultk.language.language.Expression],\t**kwargs) -> ultk.language.language.Language:", "funcdef": "def"}, "ultk.effcomm.optimization.EvolutionaryOptimizer": {"fullname": "ultk.effcomm.optimization.EvolutionaryOptimizer", "modulename": "ultk.effcomm.optimization", "qualname": "EvolutionaryOptimizer", "kind": "class", "doc": "

Class for approximating the Pareto frontier of languages optimizing the simplicity/informativity trade-off.

\n"}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"fullname": "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__", "modulename": "ultk.effcomm.optimization", "qualname": "EvolutionaryOptimizer.__init__", "kind": "function", "doc": "

Initialize the evolutionary algorithm configurations.

\n\n

The measures of complexity and informativity, the expressions, and the mutations are all specific to the particular semantic domain.

\n\n
Arguments:
\n\n
    \n
  • objectives: a dict of the two objectives to optimize for, e.g. simplicity and informativeness, of the form, e.g.\n{\n \"complexity\": comp_measure,\n \"comm_cost\": lambda l: 1 - inf_measure(l)\n}
  • \n
  • expressions: a list of expressions from which to apply mutations to languages.
  • \n
  • sample_size: the size of the population at every generation.
  • \n
  • max_muatations: between 1 and this number of mutations will be applied to a subset of the population at the end of each generation.
  • \n
  • generations: how many iterations to run the evolutionary algorithm for.
  • \n
  • lang_size: between 1 and this number of expressions comprise a language.
  • \n
  • mutations: (optional) a list of Mutation objects, defaults to add/remove expression
  • \n
\n", "signature": "(\tobjectives: list[typing.Callable[[ultk.language.language.Language], typing.Any]],\texpressions: list[ultk.language.language.Expression],\tsample_size: int,\tmax_mutations: int,\tgenerations: int,\tlang_size: int = None,\tmutations: list[ultk.effcomm.optimization.Mutation] = [<class 'ultk.effcomm.optimization.AddExpression'>, <class 'ultk.effcomm.optimization.RemoveExpression'>])"}, "ultk.effcomm.optimization.EvolutionaryOptimizer.objectives": {"fullname": "ultk.effcomm.optimization.EvolutionaryOptimizer.objectives", "modulename": "ultk.effcomm.optimization", "qualname": "EvolutionaryOptimizer.objectives", "kind": "variable", "doc": "

\n"}, "ultk.effcomm.optimization.EvolutionaryOptimizer.expressions": {"fullname": "ultk.effcomm.optimization.EvolutionaryOptimizer.expressions", "modulename": "ultk.effcomm.optimization", "qualname": "EvolutionaryOptimizer.expressions", "kind": "variable", "doc": "

\n"}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutations": {"fullname": "ultk.effcomm.optimization.EvolutionaryOptimizer.mutations", "modulename": "ultk.effcomm.optimization", "qualname": "EvolutionaryOptimizer.mutations", "kind": "variable", "doc": "

\n"}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_size": {"fullname": "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_size", "modulename": "ultk.effcomm.optimization", "qualname": "EvolutionaryOptimizer.sample_size", "kind": "variable", "doc": "

\n"}, "ultk.effcomm.optimization.EvolutionaryOptimizer.max_mutations": {"fullname": "ultk.effcomm.optimization.EvolutionaryOptimizer.max_mutations", "modulename": "ultk.effcomm.optimization", "qualname": "EvolutionaryOptimizer.max_mutations", "kind": "variable", "doc": "

\n"}, "ultk.effcomm.optimization.EvolutionaryOptimizer.generations": {"fullname": "ultk.effcomm.optimization.EvolutionaryOptimizer.generations", "modulename": "ultk.effcomm.optimization", "qualname": "EvolutionaryOptimizer.generations", "kind": "variable", "doc": "

\n"}, "ultk.effcomm.optimization.EvolutionaryOptimizer.lang_size": {"fullname": "ultk.effcomm.optimization.EvolutionaryOptimizer.lang_size", "modulename": "ultk.effcomm.optimization", "qualname": "EvolutionaryOptimizer.lang_size", "kind": "variable", "doc": "

\n"}, "ultk.effcomm.optimization.EvolutionaryOptimizer.dominating_languages": {"fullname": "ultk.effcomm.optimization.EvolutionaryOptimizer.dominating_languages", "modulename": "ultk.effcomm.optimization", "qualname": "EvolutionaryOptimizer.dominating_languages", "kind": "variable", "doc": "

\n"}, "ultk.effcomm.optimization.EvolutionaryOptimizer.explored_languages": {"fullname": "ultk.effcomm.optimization.EvolutionaryOptimizer.explored_languages", "modulename": "ultk.effcomm.optimization", "qualname": "EvolutionaryOptimizer.explored_languages", "kind": "variable", "doc": "

\n"}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"fullname": "ultk.effcomm.optimization.EvolutionaryOptimizer.fit", "modulename": "ultk.effcomm.optimization", "qualname": "EvolutionaryOptimizer.fit", "kind": "function", "doc": "

Computes the Pareto frontier, a set languages which cannot be both more simple and more informative.

\n\n

Uses pygmo's nondominated_front method for computing a population's best solutions to a multi-objective optimization problem.

\n\n
Arguments:
\n\n
    \n
  • seed_population: a list of languages representing the population at generation 0 of the algorithm.
  • \n
  • explore: a float in [0,1] representing how much to optimize for fitness\n(optimality wrt pareto front of complexity and comm_cost), and how much to randomly explore.
  • \n
\n\n
Returns:
\n\n
\n

a dict of the estimated optimization solutions, as well as points explored along the way; of the form

\n\n
{\n\"dominating_languages\": list of languages as estimated solutions,\n\"explored_languages\": list of all the languages explored during the evolutionary algorithm,\n}\n
\n
\n", "signature": "(\tself,\tseed_population: list[ultk.language.language.Language],\texplore: float = 0.0) -> dict[str, list[ultk.language.language.Language]]:", "funcdef": "def"}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"fullname": "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated", "modulename": "ultk.effcomm.optimization", "qualname": "EvolutionaryOptimizer.sample_mutated", "kind": "function", "doc": "
Arguments:
\n\n
    \n
  • languages: dominating languages of a generation
  • \n
  • amount: sample_size.
  • \n
  • expressions: the list of expressions
  • \n
\n\n
Returns:
\n\n
\n

list of updated languages

\n
\n", "signature": "(\tself,\tlanguages: list[ultk.language.language.Language]) -> list[ultk.language.language.Language]:", "funcdef": "def"}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"fullname": "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate", "modulename": "ultk.effcomm.optimization", "qualname": "EvolutionaryOptimizer.mutate", "kind": "function", "doc": "

Randomly selects a mutation that is allowed to apply and applies it to a language.

\n\n
Arguments:
\n\n
    \n
  • language: the Language to mutate
  • \n
  • expressions: the list of all possible expressions.\nSome mutations need access to this list, so it is part of the mutation api.
  • \n
\n\n
Returns:
\n\n
\n

the mutated Language

\n
\n", "signature": "(\tself,\tlanguage: ultk.language.language.Language) -> ultk.language.language.Language:", "funcdef": "def"}, "ultk.effcomm.optimization.sample_parents": {"fullname": "ultk.effcomm.optimization.sample_parents", "modulename": "ultk.effcomm.optimization", "qualname": "sample_parents", "kind": "function", "doc": "

Use the explore parameter to explore possibly suboptimal areas of the language space.

\n\n
Arguments:
\n\n
    \n
  • dominating_languages: a list of the languages with current best fitness with respect to the objectives.
  • \n
  • explored_languages: a list of all languages encountered during the evolutionary algorithm.
  • \n
  • explore: a float in [0,1] specifying how much to explore possibly suboptimal languages.\nIf set to 0, parent_languages is just dominating_languages.
  • \n
\n\n
Returns:
\n\n
\n

the languages to serve as the next generation (after possible mutations)

\n
\n", "signature": "(\tdominating_languages: set[ultk.language.language.Language],\texplored_languages: set[ultk.language.language.Language],\texplore: float) -> list[ultk.language.language.Language]:", "funcdef": "def"}, "ultk.effcomm.sampling": {"fullname": "ultk.effcomm.sampling", "modulename": "ultk.effcomm.sampling", "kind": "module", "doc": "

Functions for sampling expressions into languages.

\n"}, "ultk.effcomm.sampling.get_hypothetical_variants": {"fullname": "ultk.effcomm.sampling.get_hypothetical_variants", "modulename": "ultk.effcomm.sampling", "qualname": "get_hypothetical_variants", "kind": "function", "doc": "

For each system (parameterized by a language or else a speaker), generate num hypothetical variants by permuting the signals that the system assigns to states.

\n\n
Arguments:
\n\n
    \n
  • languages: a list of languages to permute, by constructing LiteralSpeakers and permuting their weights.
  • \n
  • speakers: a list of speakers of a language, whose weights can be directly permuted. Should be used instead of languages if possible, because it can be more finegrained (every language can be associated with multiple speakers).
  • \n
  • total: the total number of hypothetical variants to obtain
  • \n
\n\n
Returns:
\n\n
\n

hypothetical_variants: a list of type either Language or np.ndarray depending on whether languages or speakers was passed, representing hypothetical variants of the systems passed. If speakers was passed, a list of speakers is returned.

\n
\n", "signature": "(\tlanguages: list[ultk.language.language.Language] = None,\tspeakers: list[ultk.effcomm.agent.Speaker] = None,\ttotal: int = 0) -> list[typing.Any]:", "funcdef": "def"}, "ultk.effcomm.tradeoff": {"fullname": "ultk.effcomm.tradeoff", "modulename": "ultk.effcomm.tradeoff", "kind": "module", "doc": "

Functions for constructing an efficient communication analysis by measuring the simplicity/informativeness trade-off languages and formatting results as a dataframe or a plot.

\n"}, "ultk.effcomm.tradeoff.dominates": {"fullname": "ultk.effcomm.tradeoff.dominates", "modulename": "ultk.effcomm.tradeoff", "qualname": "dominates", "kind": "function", "doc": "

Determine whether p1 dominates p2,\ni.e. whether for every i p1[i] <= p2[i]\nand for some i p1[i] < p2[i].

\n\n
Arguments:
\n\n
    \n
  • p1: a point
  • \n
  • p2: another point
  • \n
\n\n
Returns:
\n\n
\n

whether or not p1 dominates p2

\n
\n", "signature": "(p1: list[float], p2: list[float]) -> bool:", "funcdef": "def"}, "ultk.effcomm.tradeoff.non_dominated_2d": {"fullname": "ultk.effcomm.tradeoff.non_dominated_2d", "modulename": "ultk.effcomm.tradeoff", "qualname": "non_dominated_2d", "kind": "function", "doc": "

Return the non-dominated (Pareto) front of a list of 2-D points, using Kung's algorithm.

\n\n
Arguments:
\n\n
    \n
  • points: A list of 2-D points
  • \n
\n\n
Returns:
\n\n
\n

a list, the indices of points for which no other point is as good on all dimensions\n and better on at least one

\n
\n", "signature": "(points: list[tuple[float, float]]) -> list[int]:", "funcdef": "def"}, "ultk.effcomm.tradeoff.pareto_optimal_languages": {"fullname": "ultk.effcomm.tradeoff.pareto_optimal_languages", "modulename": "ultk.effcomm.tradeoff", "qualname": "pareto_optimal_languages", "kind": "function", "doc": "

Use non_dominated_2d to compute the Pareto languages.

\n", "signature": "(\tlanguages: list[ultk.language.language.Language],\tobjectives: list[typing.Callable[[ultk.language.language.Language], typing.Any]],\tunique: bool = False) -> list[ultk.language.language.Language]:", "funcdef": "def"}, "ultk.effcomm.tradeoff.pareto_min_distances": {"fullname": "ultk.effcomm.tradeoff.pareto_min_distances", "modulename": "ultk.effcomm.tradeoff", "qualname": "pareto_min_distances", "kind": "function", "doc": "

Measure the Pareto optimality of each language by measuring its Euclidean closeness to the frontier. The frontier is a line (list of points) interpolated from the pareto points.

\n\n
Arguments:
\n\n
    \n
  • points: the list of all language (x, y) pairs, where x and y are usually communicative cost and complexity.
  • \n
  • pareto_points: the list of all dominant language (x, y) pairs to constitute the Pareto frontier. The points should have been measured by pygmo's non_dominated_front_2d function.
  • \n
\n\n
Returns:
\n\n
\n

min_distances: an array of shape len(points) Euclidean distances for each language to the closest point on the Pareto frontier.

\n
\n", "signature": "(points: list[tuple], pareto_points: list[tuple]) -> numpy.ndarray:", "funcdef": "def"}, "ultk.effcomm.tradeoff.interpolate_data": {"fullname": "ultk.effcomm.tradeoff.interpolate_data", "modulename": "ultk.effcomm.tradeoff", "qualname": "interpolate_data", "kind": "function", "doc": "

Interpolate the points yielded by the pareto optimal languages into a continuous (though not necessarily smooth) curve.

\n\n
Arguments:
\n\n
    \n
  • points: an list of (comm_cost, complexity) pairs of size [dominating_languages], a possibly non-smooth set of solutions to the trade-off.
  • \n
  • min_cost: the minimum communicative cost value possible to interpolate from.
  • \n
  • max_cost: the maximum communicative cost value possible to interpolate from. A natural assumption is to let complexity=0.0 if max_cost=1.0, which will result in a Pareto curve that spans the entire 2d space, and consequently the plot with x and y limits both ranging [0.0, 1.0].
  • \n
  • num: the number of x-axis points (cost) to interpolate. Controls smoothness of curve.
  • \n
\n\n
Returns:
\n\n
\n

interpolated_points: an array of size (num, num)

\n
\n", "signature": "(\tpoints: list[tuple[float]],\tmin_cost: float = 0.0,\tmax_cost: float = 1.0,\tnum=5000) -> numpy.ndarray:", "funcdef": "def"}, "ultk.effcomm.tradeoff.tradeoff": {"fullname": "ultk.effcomm.tradeoff.tradeoff", "modulename": "ultk.effcomm.tradeoff", "qualname": "tradeoff", "kind": "function", "doc": "

Builds a final efficient communication analysis by measuring a list of languages, updating their internal data, and returning the results.

\n\n

This function measures possibly many graded or categorical properties of each language, but minimally the properties of commmunicative cost and complexity. These two measures fully define the results of an efficiency analysis, in the sense they define the optimal solutions.

\n\n
Arguments:
\n\n
    \n
  • languages: A list representing the pool of all languages to be measured for an efficient communication analysis.
  • \n
  • x: the first pressure to measure, e.g. communicative cost.
  • \n
  • y: the second pressure to measure, e.g. cognitive complexity.
  • \n
  • frontier: a list of (comm_cost, complexity) points representing a Pareto frontier to measure optimality w.r.t.
  • \n
\n\n
Returns:
\n\n
\n

a dictionary of the population and the pareto front, of the form

\n\n
{\n    \"languages\": the list of languages, with their internal efficient communication data updated,\n\n    \"dominating_languages\": the list of the languages dominating the population w.r.t. comm_cost and complexity. If no `frontier` is none, this can be considered the Pareto frontier.\n}\n
\n
\n", "signature": "(\tlanguages: list[ultk.language.language.Language],\tproperties: dict[str, typing.Callable[[ultk.language.language.Language], typing.Any]],\tx: str = 'comm_cost',\ty: str = 'complexity',\tfrontier: list[tuple] = None) -> dict[str, list[ultk.language.language.Language]]:", "funcdef": "def"}, "ultk.effcomm.util": {"fullname": "ultk.effcomm.util", "modulename": "ultk.effcomm.util", "kind": "module", "doc": "

Various helper functions for computing complexity and informativity.

\n"}, "ultk.effcomm.util.rows_zero_to_uniform": {"fullname": "ultk.effcomm.util.rows_zero_to_uniform", "modulename": "ultk.effcomm.util", "qualname": "rows_zero_to_uniform", "kind": "function", "doc": "

Ensure that mat encodes a probability distribution, i.e. each row (indexed by a meaning) is a distribution over expressions: sums to exactly 1.0.

\n\n

This is necessary when exploring mathematically possible languages (including natural languages, like Hausa in the case of modals) which sometimes have that a row of the matrix p(word|meaning) is a vector of 0s.

\n\n
Arguments:
\n\n
    \n
  • mat: a 2D numpy array that should be normalized so that each row is a probability distribution.
  • \n
\n", "signature": "(mat: numpy.ndarray) -> numpy.ndarray:", "funcdef": "def"}, "ultk.effcomm.util.build_utility_matrix": {"fullname": "ultk.effcomm.util.build_utility_matrix", "modulename": "ultk.effcomm.util", "qualname": "build_utility_matrix", "kind": "function", "doc": "

Construct the square matrix specifying the utility function defined for pairs of meanings, used for computing communicative success.

\n", "signature": "(\tuniverse: ultk.language.semantics.Universe,\tutility: Callable[[ultk.language.semantics.Referent, ultk.language.semantics.Referent], float]) -> numpy.ndarray:", "funcdef": "def"}, "ultk.effcomm.util.PRECISION": {"fullname": "ultk.effcomm.util.PRECISION", "modulename": "ultk.effcomm.util", "qualname": "PRECISION", "kind": "variable", "doc": "

\n", "default_value": "1e-16"}, "ultk.effcomm.util.marginal": {"fullname": "ultk.effcomm.util.marginal", "modulename": "ultk.effcomm.util", "qualname": "marginal", "kind": "function", "doc": "

Compute $p(x) = \\sum_x p(x,y)$

\n\n
Arguments:
\n\n
    \n
  • pXY: a numpy array of shape (|X|, |Y|)
  • \n
\n\n
Returns:
\n\n
\n

pY: (axis = 0) or pX (default, axis = 1)

\n
\n", "signature": "(pXY, axis=1):", "funcdef": "def"}, "ultk.effcomm.util.conditional": {"fullname": "ultk.effcomm.util.conditional", "modulename": "ultk.effcomm.util", "qualname": "conditional", "kind": "function", "doc": "

Compute $p(y|x) = \\frac{p(x,y)}{p(x)}$

\n\n
Arguments:
\n\n
    \n
  • pXY: a numpy array of shape (|X|, |Y|)
  • \n
\n\n
Returns:
\n\n
\n

pY_X: a numpy array of shape (|X|, |Y|)

\n
\n", "signature": "(pXY):", "funcdef": "def"}, "ultk.effcomm.util.joint": {"fullname": "ultk.effcomm.util.joint", "modulename": "ultk.effcomm.util", "qualname": "joint", "kind": "function", "doc": "

Compute $p(x,y) = p(y|x) \\cdot p(x) $

\n\n
Arguments:
\n\n
    \n
  • pY_X: a numpy array of shape (|X|, |Y|)
  • \n
  • pX: a numpy array |X|
  • \n
\n\n
Returns:
\n\n
\n

pXY: a numpy array of the shape (|X|, |Y|)

\n
\n", "signature": "(pY_X, pX):", "funcdef": "def"}, "ultk.effcomm.util.marginalize": {"fullname": "ultk.effcomm.util.marginalize", "modulename": "ultk.effcomm.util", "qualname": "marginalize", "kind": "function", "doc": "

Compute $p(y) = \\sum_x p(y|x) \\cdot p(x)$

\n\n
Arguments:
\n\n
    \n
  • pY_X: a numpy array of shape (|X|, |Y|)
  • \n
  • pX: a numpy array of shape |X|
  • \n
\n\n
Returns:
\n\n
\n

pY: a numpy array of shape |Y|

\n
\n", "signature": "(pY_X, pX):", "funcdef": "def"}, "ultk.effcomm.util.bayes": {"fullname": "ultk.effcomm.util.bayes", "modulename": "ultk.effcomm.util", "qualname": "bayes", "kind": "function", "doc": "

Compute $p(x|y) = \\frac{p(y|x) \\cdot p(x)}{p(y)}$

\n\n
Arguments:
\n\n
    \n
  • pY_X: a numpy array of shape (|X|, |Y|)
  • \n
\n", "signature": "(pY_X, pX):", "funcdef": "def"}, "ultk.effcomm.util.xlogx": {"fullname": "ultk.effcomm.util.xlogx", "modulename": "ultk.effcomm.util", "qualname": "xlogx", "kind": "function", "doc": "

Compute $x \\log p(x)$

\n", "signature": "(p):", "funcdef": "def"}, "ultk.effcomm.util.H": {"fullname": "ultk.effcomm.util.H", "modulename": "ultk.effcomm.util", "qualname": "H", "kind": "function", "doc": "

Compute the entropy of p, $H(X) = - \\sum_x x \\log p(x)$

\n", "signature": "(p, axis=None):", "funcdef": "def"}, "ultk.effcomm.util.MI": {"fullname": "ultk.effcomm.util.MI", "modulename": "ultk.effcomm.util", "qualname": "MI", "kind": "function", "doc": "

Compute mutual information, $I[X:Y]$

\n", "signature": "(pXY):", "funcdef": "def"}, "ultk.effcomm.util.DKL": {"fullname": "ultk.effcomm.util.DKL", "modulename": "ultk.effcomm.util", "qualname": "DKL", "kind": "function", "doc": "

Compute KL divergences, $D_{KL}[p~||~q]$

\n", "signature": "(p, q, axis=None):", "funcdef": "def"}, "ultk.effcomm.util.gNID": {"fullname": "ultk.effcomm.util.gNID", "modulename": "ultk.effcomm.util", "qualname": "gNID", "kind": "function", "doc": "

Compute Generalized Normalized Informational Distance between two encoders.

\n\n
Arguments:
\n\n
    \n
  • pW_X: first encoder of shape (|meanings|, |words|)
  • \n
  • pV_X: second encoder of shape (|meanings|, |words|)
  • \n
  • pX: prior over source variables of shape (|meanings|,)
  • \n
\n", "signature": "(pW_X, pV_X, pX):", "funcdef": "def"}, "ultk.language": {"fullname": "ultk.language", "modulename": "ultk.language", "kind": "module", "doc": "

Classes for modeling (natural or hypothetical) languagese.

\n\n

At the current stage of development, ULTK focuses on supporting abstractions to model the mapping between expressions and meanings of a language. So far, we leave almost everything besides this basic mapping (morphosyntax, phonology, phonetic inventories, among other features of human languages) to future work.

\n\n

The ultk.language.language submodule contains classes for constructing a language, which can contain one or more expressions.

\n\n

The ultk.language.semantics submodule contains classes for defining a universe (meaning space) of referents (denotations) and meanings (categories).

\n"}, "ultk.language.grammar": {"fullname": "ultk.language.grammar", "modulename": "ultk.language.grammar", "kind": "module", "doc": "

\n"}, "ultk.language.grammar.Rule": {"fullname": "ultk.language.grammar.Rule", "modulename": "ultk.language.grammar", "qualname": "Rule", "kind": "class", "doc": "

Basic class for a grammar rule. Grammar rules in ULTK correspond\nto functions. One can think of a grammar as generating complex functions from\nmore basic ones.

\n\n
Attributes:
\n\n
    \n
  • lhs: left-hand side of the rule (can be anything)\nconceptually, the output type of a function
  • \n
  • rhs: right-hand side; assumed to be an iterable\nconceptually, a list of types of inputs
  • \n
  • func: a callable, the function to be computed when a node with this rule is executed
  • \n
  • name: name of the function
  • \n
  • weight: a relative weight to assign to this rule\nwhen added to a grammar, all rules with the same LHS will be weighted together
  • \n
\n"}, "ultk.language.grammar.Rule.__init__": {"fullname": "ultk.language.grammar.Rule.__init__", "modulename": "ultk.language.grammar", "qualname": "Rule.__init__", "kind": "function", "doc": "

\n", "signature": "(\tname: str,\tlhs: Any,\trhs: collections.abc.Sequence | None,\tfunction: Callable = <function Rule.<lambda>>,\tweight: float = 1.0)"}, "ultk.language.grammar.Rule.lhs": {"fullname": "ultk.language.grammar.Rule.lhs", "modulename": "ultk.language.grammar", "qualname": "Rule.lhs", "kind": "variable", "doc": "

\n"}, "ultk.language.grammar.Rule.rhs": {"fullname": "ultk.language.grammar.Rule.rhs", "modulename": "ultk.language.grammar", "qualname": "Rule.rhs", "kind": "variable", "doc": "

\n"}, "ultk.language.grammar.Rule.func": {"fullname": "ultk.language.grammar.Rule.func", "modulename": "ultk.language.grammar", "qualname": "Rule.func", "kind": "variable", "doc": "

\n"}, "ultk.language.grammar.Rule.name": {"fullname": "ultk.language.grammar.Rule.name", "modulename": "ultk.language.grammar", "qualname": "Rule.name", "kind": "variable", "doc": "

\n"}, "ultk.language.grammar.Rule.weight": {"fullname": "ultk.language.grammar.Rule.weight", "modulename": "ultk.language.grammar", "qualname": "Rule.weight", "kind": "variable", "doc": "

\n"}, "ultk.language.grammar.Rule.is_terminal": {"fullname": "ultk.language.grammar.Rule.is_terminal", "modulename": "ultk.language.grammar", "qualname": "Rule.is_terminal", "kind": "function", "doc": "

Whether this is a terminal rule. In our framework, this means that RHS is empty,\ni.e. there are no arguments to the function.

\n", "signature": "(self) -> bool:", "funcdef": "def"}, "ultk.language.grammar.GrammaticalExpression": {"fullname": "ultk.language.grammar.GrammaticalExpression", "modulename": "ultk.language.grammar", "qualname": "GrammaticalExpression", "kind": "class", "doc": "

A GrammaticalExpression has been built up from a Grammar by applying a sequence of Rules.\nCrucially, it is _callable_, using the functions corresponding to each rule.

\n\n

A GrammaticalExpression, when called, takes in a Referent. Because of this, a Meaning can\nbe generated by specifying a Universe (which contains Referents).

\n\n
Attributes:
\n\n
    \n
  • name: name of the top-most function
  • \n
  • func: the function
  • \n
  • children: child expressions (possibly empty)
  • \n
\n", "bases": "ultk.language.language.Expression"}, "ultk.language.grammar.GrammaticalExpression.__init__": {"fullname": "ultk.language.grammar.GrammaticalExpression.__init__", "modulename": "ultk.language.grammar", "qualname": "GrammaticalExpression.__init__", "kind": "function", "doc": "

\n", "signature": "(\trule_name: str,\tfunc: Callable,\tchildren: tuple | None,\tmeaning: ultk.language.semantics.Meaning | None = None,\tform: str | None = None)"}, "ultk.language.grammar.GrammaticalExpression.rule_name": {"fullname": "ultk.language.grammar.GrammaticalExpression.rule_name", "modulename": "ultk.language.grammar", "qualname": "GrammaticalExpression.rule_name", "kind": "variable", "doc": "

\n"}, "ultk.language.grammar.GrammaticalExpression.func": {"fullname": "ultk.language.grammar.GrammaticalExpression.func", "modulename": "ultk.language.grammar", "qualname": "GrammaticalExpression.func", "kind": "variable", "doc": "

\n"}, "ultk.language.grammar.GrammaticalExpression.children": {"fullname": "ultk.language.grammar.GrammaticalExpression.children", "modulename": "ultk.language.grammar", "qualname": "GrammaticalExpression.children", "kind": "variable", "doc": "

\n"}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"fullname": "ultk.language.grammar.GrammaticalExpression.yield_string", "modulename": "ultk.language.grammar", "qualname": "GrammaticalExpression.yield_string", "kind": "function", "doc": "

Get the 'yield' string of this term, i.e. the concatenation\nof the leaf nodes.

\n\n

This is useful for thinking of a Grammar as generating derivation trees for\nan underlying CFG. This method will then generate the strings generated by\nthe corresponding CFG.

\n", "signature": "(self) -> str:", "funcdef": "def"}, "ultk.language.grammar.GrammaticalExpression.evaluate": {"fullname": "ultk.language.grammar.GrammaticalExpression.evaluate", "modulename": "ultk.language.grammar", "qualname": "GrammaticalExpression.evaluate", "kind": "function", "doc": "

\n", "signature": "(\tself,\tuniverse: ultk.language.semantics.Universe) -> ultk.language.semantics.Meaning:", "funcdef": "def"}, "ultk.language.grammar.GrammaticalExpression.add_child": {"fullname": "ultk.language.grammar.GrammaticalExpression.add_child", "modulename": "ultk.language.grammar", "qualname": "GrammaticalExpression.add_child", "kind": "function", "doc": "

\n", "signature": "(self, child) -> None:", "funcdef": "def"}, "ultk.language.grammar.GrammaticalExpression.to_dict": {"fullname": "ultk.language.grammar.GrammaticalExpression.to_dict", "modulename": "ultk.language.grammar", "qualname": "GrammaticalExpression.to_dict", "kind": "function", "doc": "

\n", "signature": "(self) -> dict:", "funcdef": "def"}, "ultk.language.grammar.UniquenessArgs": {"fullname": "ultk.language.grammar.UniquenessArgs", "modulename": "ultk.language.grammar", "qualname": "UniquenessArgs", "kind": "class", "doc": "

Arguments for specifying uniqueness of GrammaticalExpressions in a Grammar.

\n\n
Attributes:
\n\n
    \n
  • unique_expressions: a dictionary in which to store unique Expressions
  • \n
  • key: a function used to evaluate uniqueness
  • \n
  • compare_func: a comparison function, used to decide which Expression to add to the dict\nnew Expressions will be added as values to unique_dict only if they are minimal\namong those sharing the same key (by unique_key) according to this func
  • \n
\n", "bases": "typing.TypedDict"}, "ultk.language.grammar.UniquenessArgs.unique_expressions": {"fullname": "ultk.language.grammar.UniquenessArgs.unique_expressions", "modulename": "ultk.language.grammar", "qualname": "UniquenessArgs.unique_expressions", "kind": "variable", "doc": "

\n", "annotation": ": dict[typing.Any, dict[typing.Any, ultk.language.grammar.GrammaticalExpression]]"}, "ultk.language.grammar.UniquenessArgs.key": {"fullname": "ultk.language.grammar.UniquenessArgs.key", "modulename": "ultk.language.grammar", "qualname": "UniquenessArgs.key", "kind": "variable", "doc": "

\n", "annotation": ": Callable[[ultk.language.grammar.GrammaticalExpression], Any]"}, "ultk.language.grammar.UniquenessArgs.compare_func": {"fullname": "ultk.language.grammar.UniquenessArgs.compare_func", "modulename": "ultk.language.grammar", "qualname": "UniquenessArgs.compare_func", "kind": "variable", "doc": "

\n", "annotation": ": Callable[[ultk.language.grammar.GrammaticalExpression, ultk.language.grammar.GrammaticalExpression], bool]"}, "ultk.language.grammar.Grammar": {"fullname": "ultk.language.grammar.Grammar", "modulename": "ultk.language.grammar", "qualname": "Grammar", "kind": "class", "doc": "

At its core, a Grammar is a set of Rules with methods for generating GrammaticalExpressions.

\n"}, "ultk.language.grammar.Grammar.__init__": {"fullname": "ultk.language.grammar.Grammar.__init__", "modulename": "ultk.language.grammar", "qualname": "Grammar.__init__", "kind": "function", "doc": "

\n", "signature": "(start: Any)"}, "ultk.language.grammar.Grammar.add_rule": {"fullname": "ultk.language.grammar.Grammar.add_rule", "modulename": "ultk.language.grammar", "qualname": "Grammar.add_rule", "kind": "function", "doc": "

\n", "signature": "(self, rule: ultk.language.grammar.Rule):", "funcdef": "def"}, "ultk.language.grammar.Grammar.parse": {"fullname": "ultk.language.grammar.Grammar.parse", "modulename": "ultk.language.grammar", "qualname": "Grammar.parse", "kind": "function", "doc": "

Parse a string representation of an expression of a grammar.\nNote that this is not a general-purpose parsing algorithm. We assume that the strings are of the form\n parent_name(child1_name, ..., childn_name)\nwhere parent_name is the name of a rule of this grammar that has a length-n RHS, and that\nchildi_name is the name of a rule for each child i.

\n\n
Arguments:
\n\n
    \n
  • expression: string in the above format
  • \n
\n\n
Returns:
\n\n
\n

the corresponding GrammaticalExpression

\n
\n", "signature": "(\tself,\texpression: str,\topener: str = '(',\tcloser: str = ')',\tdelimiter: str = ',') -> ultk.language.grammar.GrammaticalExpression:", "funcdef": "def"}, "ultk.language.grammar.Grammar.generate": {"fullname": "ultk.language.grammar.Grammar.generate", "modulename": "ultk.language.grammar", "qualname": "Grammar.generate", "kind": "function", "doc": "

Generate an expression from a given lhs.

\n", "signature": "(self, lhs: Any = None) -> ultk.language.grammar.GrammaticalExpression:", "funcdef": "def"}, "ultk.language.grammar.Grammar.enumerate": {"fullname": "ultk.language.grammar.Grammar.enumerate", "modulename": "ultk.language.grammar", "qualname": "Grammar.enumerate", "kind": "function", "doc": "

Enumerate all expressions from the grammar up to a given depth from a given LHS.\nThis method also can update a specified dictionary to store only _unique_ expressions, with\na user-specified criterion of uniqueness.

\n\n
Arguments:
\n\n
    \n
  • depth: how deep the trees should be
  • \n
  • lhs: left hand side to start from; defaults to the grammar's start symbol
  • \n
  • uniqueness_args: a dictionary specifying the parameters for uniqueness:\nunique_dict: a dictionary in which to store unique Expressions\nkey: a function used to evaluate uniqueness\ncompare_func: a comparison function, used to decide which Expression to add to the dict\n new Expressions will be added as values to unique_dict only if they are _minimal_\n among those sharing the same key (by unique_key) according to this func
  • \n
\n\n
Yields:
\n\n
\n

all GrammaticalExpressions up to depth

\n
\n", "signature": "(\tself,\tdepth: int = 8,\tlhs: Any = None,\tuniqueness_args: ultk.language.grammar.UniquenessArgs | None = None) -> Generator[ultk.language.grammar.GrammaticalExpression, NoneType, NoneType]:", "funcdef": "def"}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"fullname": "ultk.language.grammar.Grammar.enumerate_at_depth", "modulename": "ultk.language.grammar", "qualname": "Grammar.enumerate_at_depth", "kind": "function", "doc": "

Enumerate GrammaticalExpressions for this Grammar _at_ a fixed depth.

\n", "signature": "(\tself,\tdepth: int,\tlhs: Any,\tuniqueness_args: ultk.language.grammar.UniquenessArgs | None = None,\tcache: dict | None = None) -> Generator[ultk.language.grammar.GrammaticalExpression, NoneType, NoneType]:", "funcdef": "def"}, "ultk.language.grammar.Grammar.get_unique_expressions": {"fullname": "ultk.language.grammar.Grammar.get_unique_expressions", "modulename": "ultk.language.grammar", "qualname": "Grammar.get_unique_expressions", "kind": "function", "doc": "

Get all unique GrammaticalExpressions, up to a certain depth, with a user-specified criterion\nof uniqueness, and a specified comparison function for determining which Expression to save when there's a clash.\nThis can be used, for instance, to measure the minimum description length of some\nMeanings, by using expression.evaluate(), which produces a Meaning for an Expression, as the\nkey for determining uniqueness, and length of the expression as comparison.

\n\n

This is a wrapper around enumerate, but which produces the dictionary of key->Expression entries\nand returns it. (enumerate is a generator with side effects).

\n\n

For Args, see the docstring for enumerate.

\n\n

Note: if you additionally want to store _all_ expressions, and not just the unique ones, you should\ndirectly use enumerate.

\n\n
Returns:
\n\n
\n

dictionary of {key: GrammaticalExpression}, where the keys are generated by unique_key\n The GrammticalExpression which is the value will be the one that is minimum among\n compare_func amongst all Expressions up to depth which share the same key

\n
\n", "signature": "(\tself,\tdepth: int,\tunique_key: Callable[[ultk.language.grammar.GrammaticalExpression], Any],\tcompare_func: Callable[[ultk.language.grammar.GrammaticalExpression, ultk.language.grammar.GrammaticalExpression], bool],\tlhs: Any = None,\tmax_size: float = inf) -> dict[ultk.language.grammar.GrammaticalExpression, typing.Any]:", "funcdef": "def"}, "ultk.language.grammar.Grammar.get_all_rules": {"fullname": "ultk.language.grammar.Grammar.get_all_rules", "modulename": "ultk.language.grammar", "qualname": "Grammar.get_all_rules", "kind": "function", "doc": "

Get all rules as a list.

\n", "signature": "(self) -> list[ultk.language.grammar.Rule]:", "funcdef": "def"}, "ultk.language.grammar.Grammar.from_yaml": {"fullname": "ultk.language.grammar.Grammar.from_yaml", "modulename": "ultk.language.grammar", "qualname": "Grammar.from_yaml", "kind": "function", "doc": "

Read a grammar specified in a simple YAML format.

\n\n

Expected format:

\n\n
start: bool\nrules:\n- lhs: bool\n  rhs:\n  - bool\n  - bool\n  name: \"and\"\n  function: \"lambda p1, p2 : p1 and p2\"\n- lhs: bool\n  rhs:\n  - bool\n  - bool\n  name: \"or\"\n  function: \"lambda p1, p2 : p1 or p2\"\n
\n\n

Note that for each fule, the value for function will be passed to\neval, so be careful!

\n\n
Arguments:
\n\n
    \n
  • filename: file containing a grammar in the above format
  • \n
\n", "signature": "(cls, filename: str):", "funcdef": "def"}, "ultk.language.language": {"fullname": "ultk.language.language", "modulename": "ultk.language.language", "kind": "module", "doc": "

Classes for modeling languages as form-meaning mappings, most important among them the Language and Expression classes.

\n\n
Example usage:
\n\n
\n
\n
>>> from ultk.language.language import Expression, Language\n>>> # assuming the meaning `a_few_meaning` has already been constructed\n>>> # define the expression\n>>> a_few = NumeralExpression(form="a few", meaning=a_few_meaning)\n>>> # define a very small language\n>>> lang_1 = Language([a_few])\n>>> # or a slightly larger one with synonymy\n>>> lang_2 = Language([a_few] * 3)\n
\n
\n
\n"}, "ultk.language.language.Expression": {"fullname": "ultk.language.language.Expression", "modulename": "ultk.language.language", "qualname": "Expression", "kind": "class", "doc": "

Minimally contains a form and a meaning.

\n"}, "ultk.language.language.Expression.__init__": {"fullname": "ultk.language.language.Expression.__init__", "modulename": "ultk.language.language", "qualname": "Expression.__init__", "kind": "function", "doc": "

\n", "signature": "(\tform: str | None = None,\tmeaning: ultk.language.semantics.Meaning | None = None)"}, "ultk.language.language.Expression.form": {"fullname": "ultk.language.language.Expression.form", "modulename": "ultk.language.language", "qualname": "Expression.form", "kind": "variable", "doc": "

\n"}, "ultk.language.language.Expression.meaning": {"fullname": "ultk.language.language.Expression.meaning", "modulename": "ultk.language.language", "qualname": "Expression.meaning", "kind": "variable", "doc": "

\n"}, "ultk.language.language.Expression.can_express": {"fullname": "ultk.language.language.Expression.can_express", "modulename": "ultk.language.language", "qualname": "Expression.can_express", "kind": "function", "doc": "

Return True if the expression can express the input single meaning point and false otherwise.

\n", "signature": "(self, referent: ultk.language.semantics.Referent) -> bool:", "funcdef": "def"}, "ultk.language.language.Expression.to_dict": {"fullname": "ultk.language.language.Expression.to_dict", "modulename": "ultk.language.language", "qualname": "Expression.to_dict", "kind": "function", "doc": "

\n", "signature": "(self) -> dict:", "funcdef": "def"}, "ultk.language.language.Language": {"fullname": "ultk.language.language.Language", "modulename": "ultk.language.language", "qualname": "Language", "kind": "class", "doc": "

Minimally contains Expression objects.

\n"}, "ultk.language.language.Language.__init__": {"fullname": "ultk.language.language.Language.__init__", "modulename": "ultk.language.language", "qualname": "Language.__init__", "kind": "function", "doc": "

\n", "signature": "(expressions: tuple[ultk.language.language.Expression, ...], **kwargs)"}, "ultk.language.language.Language.expressions": {"fullname": "ultk.language.language.Language.expressions", "modulename": "ultk.language.language", "qualname": "Language.expressions", "kind": "variable", "doc": "

\n", "annotation": ": tuple[ultk.language.language.Expression, ...]"}, "ultk.language.language.Language.universe": {"fullname": "ultk.language.language.Language.universe", "modulename": "ultk.language.language", "qualname": "Language.universe", "kind": "variable", "doc": "

\n", "annotation": ": ultk.language.semantics.Universe"}, "ultk.language.language.Language.add_expression": {"fullname": "ultk.language.language.Language.add_expression", "modulename": "ultk.language.language", "qualname": "Language.add_expression", "kind": "function", "doc": "

Add an expression to the list of expressions in a language.

\n", "signature": "(self, e: ultk.language.language.Expression):", "funcdef": "def"}, "ultk.language.language.Language.pop": {"fullname": "ultk.language.language.Language.pop", "modulename": "ultk.language.language", "qualname": "Language.pop", "kind": "function", "doc": "

Removes an expression at the specified index of the list of expressions, and returns it.

\n", "signature": "(self, index: int) -> ultk.language.language.Expression:", "funcdef": "def"}, "ultk.language.language.Language.is_natural": {"fullname": "ultk.language.language.Language.is_natural", "modulename": "ultk.language.language", "qualname": "Language.is_natural", "kind": "function", "doc": "

Whether a language represents a human natural language.

\n", "signature": "(self) -> bool:", "funcdef": "def"}, "ultk.language.language.Language.degree_property": {"fullname": "ultk.language.language.Language.degree_property", "modulename": "ultk.language.language", "qualname": "Language.degree_property", "kind": "function", "doc": "

Count what percentage of expressions in a language have a given property.

\n", "signature": "(\tself,\tproperty: Callable[[ultk.language.language.Expression], bool]) -> float:", "funcdef": "def"}, "ultk.language.language.Language.binary_matrix": {"fullname": "ultk.language.language.Language.binary_matrix", "modulename": "ultk.language.language", "qualname": "Language.binary_matrix", "kind": "function", "doc": "

Get a binary matrix of shape (num_meanings, num_expressions)\nspecifying which expressions can express which meanings.

\n", "signature": "(self) -> numpy.ndarray:", "funcdef": "def"}, "ultk.language.language.Language.to_dict": {"fullname": "ultk.language.language.Language.to_dict", "modulename": "ultk.language.language", "qualname": "Language.to_dict", "kind": "function", "doc": "

\n", "signature": "(self, **kwargs) -> dict:", "funcdef": "def"}, "ultk.language.language.aggregate_expression_complexity": {"fullname": "ultk.language.language.aggregate_expression_complexity", "modulename": "ultk.language.language", "qualname": "aggregate_expression_complexity", "kind": "function", "doc": "

Aggregate complexities for individual Expressions into a complexity for a Language.

\n\n
Arguments:
\n\n
    \n
  • language: the Language to measure
  • \n
  • expression_complexity_func: the function that returns the complexity of an individual expression
  • \n
  • aggregator: (optional, default = sum) the function that aggregates individual complexities
  • \n
\n\n
Returns:
\n\n
\n

a float, the complexity of a language

\n
\n", "signature": "(\tlanguage: ultk.language.language.Language,\texpression_complexity_func: Callable[[ultk.language.language.Expression], float],\taggregator: Callable[[Iterable[float]], float] = <built-in function sum>) -> float:", "funcdef": "def"}, "ultk.language.sampling": {"fullname": "ultk.language.sampling", "modulename": "ultk.language.sampling", "kind": "module", "doc": "

\n"}, "ultk.language.sampling.powerset": {"fullname": "ultk.language.sampling.powerset", "modulename": "ultk.language.sampling", "qualname": "powerset", "kind": "function", "doc": "

Enumerate all _non-empty_ subsets of an iterable up to a given maximum size, e.g.:\npowerset([1,2,3]) --> (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)

\n\n

lightly adapted from itertools Recipes at\nhttps://docs.python.org/3/library/itertools.html#itertools-recipes

\n\n
Arguments:
\n\n
    \n
  • iterable: elements from which to form subsets
  • \n
  • max_size: largest subsets (inclusive) to return
  • \n
\n\n
Returns:
\n\n
\n

iterator over all subsets from size 1 to max_size of elements from iterable

\n
\n", "signature": "(iterable: Iterable, max_size: int = None) -> Iterable:", "funcdef": "def"}, "ultk.language.sampling.all_meanings": {"fullname": "ultk.language.sampling.all_meanings", "modulename": "ultk.language.sampling", "qualname": "all_meanings", "kind": "function", "doc": "

Generate all Meanings (sets of Referents) from a given Universe.

\n", "signature": "(\tuniverse: ultk.language.semantics.Universe) -> Generator[ultk.language.semantics.Meaning, NoneType, NoneType]:", "funcdef": "def"}, "ultk.language.sampling.all_expressions": {"fullname": "ultk.language.sampling.all_expressions", "modulename": "ultk.language.sampling", "qualname": "all_expressions", "kind": "function", "doc": "

Generate Expressions from an iterable of Meanings.

\n", "signature": "(\tmeanings: Iterable[ultk.language.semantics.Meaning]) -> Generator[ultk.language.language.Expression, NoneType, NoneType]:", "funcdef": "def"}, "ultk.language.sampling.all_languages": {"fullname": "ultk.language.sampling.all_languages", "modulename": "ultk.language.sampling", "qualname": "all_languages", "kind": "function", "doc": "

Generate all Languages (sets of Expressions) from a given set of Expressions.

\n\n
Arguments:
\n\n
    \n
  • expressions: iterable of all possible expressions
  • \n
  • language_class: the type of language to generate
  • \n
  • max_size: largest size for a language; if None, all subsets of expressions will be used
  • \n
\n\n
Yields:
\n\n
\n

Languages with subsets of Expressions from expressions

\n
\n", "signature": "(\texpressions: Iterable[ultk.language.language.Expression],\tlanguage_class: Type[ultk.language.language.Language] = <class 'ultk.language.language.Language'>,\tmax_size: int = None) -> Generator[ultk.language.language.Language, NoneType, NoneType]:", "funcdef": "def"}, "ultk.language.sampling.upto_comb": {"fullname": "ultk.language.sampling.upto_comb", "modulename": "ultk.language.sampling", "qualname": "upto_comb", "kind": "function", "doc": "

Return the number of ways of choosing _up to max_k_ items from\nn items without repetition. Just an iterator of math.comb for n from\n1 to max_k.

\n", "signature": "(num: int, max_k: int) -> int:", "funcdef": "def"}, "ultk.language.sampling.random_languages": {"fullname": "ultk.language.sampling.random_languages", "modulename": "ultk.language.sampling", "qualname": "random_languages", "kind": "function", "doc": "

Generate unique Languages by randomly sampling subsets of Expressions, either in a uniform or stratified way.\nIf there are fewer than sample_size possible Languages up to size max_size,\nthis method will just return all languages up to that size (and so the sample may\nbe smaller than sample_size).

\n\n

Some use cases:

\n\n

With sample_size=None, get all languages.

\n\n
\n
>>> random_languages(expressions)\n
\n
\n\n

With sample_size and uniform sampling, get random languages:

\n\n
\n
>>> random_languages(expressions, sample_size=1000)\n
\n
\n\n

Stratified sampling, with and without a max_size:

\n\n
\n
>>> random_languages(expressions, sample_size=1000, sampling_strategy="stratified")\n>>> random_languages(expressions, sample_size=1000, sampling_strategy="stratified", max_size=10)\n
\n
\n\n
Arguments:
\n\n
    \n
  • expressions: all possible expressions
  • \n
  • sampling_strategy: how to sample subsets of expressions\nuniform: for every expression, choose whether or not to include it in a given language\nstratified: first sample a size for a Language, then choose that many random Expressions\n (i) this has the effect of \"upsampling\" from smaller Language sizes\n (ii) this can be used with max_size to only generate Languages up to a given number of expressions
  • \n
  • sample_size: how many languages to return\nif None, will return all languages up to max_size
  • \n
  • language_class: type of Language
  • \n
  • max_size: largest possible Language to generate\nif None, will be the length of expressions\nNB: this argument has no effect when sampling_strategy is \"uniform\"
  • \n
\n\n
Returns:
\n\n
\n

a list of randomly sampled Languages

\n
\n", "signature": "(\texpressions: Iterable[ultk.language.language.Expression],\tsampling_strategy: str = 'uniform',\tsample_size: int = None,\tlanguage_class: Type[ultk.language.language.Language] = <class 'ultk.language.language.Language'>,\tmax_size: int = None) -> list[ultk.language.language.Language]:", "funcdef": "def"}, "ultk.language.sampling.generate_languages": {"fullname": "ultk.language.sampling.generate_languages", "modulename": "ultk.language.sampling", "qualname": "generate_languages", "kind": "function", "doc": "

Generate languages by randomly sampling vocabularies as bags of expressions.

\n\n

A predicate (binary-valued property) of expressions may be supplied, which can be used to adjust the composition of vocabularies (e.g., by the percent of expressions satisfying the predicate).

\n\n

If sample size <= nCr, then take a random sample_size set of combinations. Otherwise, to prevent repeat languages, treat nCr as the sample size.

\n\n
Arguments:
\n\n
    \n
  • expressions: a list of the possible expressions to sample from.
  • \n
  • lang_size: the maximum (or exact) number of expressions in each language.
  • \n
  • sample_size: the number of languages to generate.
  • \n
  • criterion: the predicate, (e.g. semantic universal) by which to split the expressions into those satisfying and those not, and then sample languages with degrees of naturalness based on the percentage from those satisfying. Must apply at the expression level. By default is a trivial criterion, so that all expressions are 'quasi-natural'.
  • \n
  • fixed_wordcount: whether to vary the language size from 1 to lang_size.
  • \n
  • verbose: How detailed the progress of sampling should be, printed to stdout.
  • \n
  • dummy_name: the default name to give to each sampled language, e.g. sampled_lang_42. These should not collide with any actual natural language names if the efficient communication experiment does use natural language data.
  • \n
  • id_start: an integer representing the number of languages already generated in an experiment. Languages sampled will be named according to this number. For example, if id_start is 0, the first language sampled will be named sampled_lang_0. Note that the largest id does not necessarily track the actual size of languages saved for the experiment, but it does track how many languages have been generated.
  • \n
  • exact_sample: a boolean representing whether to sample until the exact sample size is filled. If True, the resulting pool of languages may not be unique.
  • \n
  • verbose: a boolean representing how verbose output should be during sampling.
  • \n
\n\n
Returns:
\n\n
\n

a dict representing the generated pool of languages and the updated id_start, of the form

\n\n
{\n    \"languages\": (list of updated languages)\n    \"id_start\": (updated length of languages)\n}\n
\n
\n\n
Examples:
\n\n
\n
\n
>>> # Turn the knob on a universal property for modals\n>>> expressions = load_expressions(expressions_file)\n>>> universal_property = iff\n>>> result = generate_languages(\n...    ModalLanguage,\n...    expressions,\n...    lang_size,\n...    sample_size,\n...    universal_property,\n...)\n>>> languages = result["languages"]\n>>> id_start = result["id_start"]\n
\n
\n
\n", "signature": "(\tlanguage_class: Type[ultk.language.language.Language],\texpressions: list[ultk.language.language.Expression],\tlang_size: int,\tsample_size: int,\tcriterion: Callable[[ultk.language.language.Expression], bool] = <function <lambda>>,\tfixed_wordcount=False,\tdummy_name='sampled_lang_',\tid_start: int = 0,\texact_sample=False,\tverbose=False) -> dict[str, typing.Any]:", "funcdef": "def"}, "ultk.language.sampling.sample_lang_size": {"fullname": "ultk.language.sampling.sample_lang_size", "modulename": "ultk.language.sampling", "qualname": "sample_lang_size", "kind": "function", "doc": "

Get a sample of languages each of exactly lang_size.

\n\n
Arguments:
\n\n
    \n
  • language_class: a subclass of ultk.Language
  • \n
  • expressions: a list of Expressions to sample from
  • \n
  • lang_size: int representing the maximum language size to sample
  • \n
  • sample_size: int representing the number of total languages to return
  • \n
  • id_start: an int representing the number of languages already generated in an experiment.
  • \n
\n\n
Returns:
\n\n
\n

a dict containing the randomly sampled languages and the updated id_start, of the form

\n\n
{\n    \"languages\": (list of updated languages)\n    \"id_start\": (updated length of languages)\n}\n
\n
\n", "signature": "(\tlanguage_class: Type[ultk.language.language.Language],\texpressions: list[ultk.language.language.Expression],\tlang_size: int,\tsample_size: int,\tid_start: int = 0,\tverbose=False,\tdummy_name='sampled_lang_id') -> list[ultk.language.language.Language]:", "funcdef": "def"}, "ultk.language.sampling.sample_quasi_natural": {"fullname": "ultk.language.sampling.sample_quasi_natural", "modulename": "ultk.language.sampling", "qualname": "sample_quasi_natural", "kind": "function", "doc": "

Turn the knob on degree quasi-naturalness for a sample of languages, either by enumerating or randomly sampling unique subsets of all possible combinations.

\n\n
Arguments:
\n\n
    \n
  • natural_terms: expressions satisfying some criteria of quasi-naturalness, e.g, a semantic universal.
  • \n
  • unnatural_terms: expressions not satisfying the criteria.
  • \n
  • lang_size: the exact number of expressions a language must have.
  • \n
  • sample_size: how many languages to sample.
  • \n
\n\n
Returns:
\n\n
\n

a dict containing the randomly sampled quasi-natural languages and the updated id_start, of the form

\n\n
{\n    \"languages\": (list of updated languages)\n    \"id_start\": (updated length of languages)\n}\n
\n
\n", "signature": "(\tlanguage_class: Type[ultk.language.language.Language],\tnatural_terms: list[ultk.language.language.Expression],\tunnatural_terms: list[ultk.language.language.Expression],\tlang_size: int,\tsample_size: int,\tid_start: int,\tdummy_name='sampled_lang_id',\tverbose=False) -> dict[str, typing.Any]:", "funcdef": "def"}, "ultk.language.sampling.rename_id": {"fullname": "ultk.language.sampling.rename_id", "modulename": "ultk.language.sampling", "qualname": "rename_id", "kind": "function", "doc": "

Updates a string of form sampled_lang_X with a new id for X.

\n", "signature": "(name: str, id: int) -> str:", "funcdef": "def"}, "ultk.language.sampling.enumerate_all_languages": {"fullname": "ultk.language.sampling.enumerate_all_languages", "modulename": "ultk.language.sampling", "qualname": "enumerate_all_languages", "kind": "function", "doc": "

When the sample size requested is greater than the size of all possible languages, just enumerate all the possible languages.

\n\n
Arguments:
\n\n
    \n
  • language_class: the kind of Language to construct
  • \n
  • id_start: a number to start counting from for assigning names with numerical ids to languages.
  • \n
  • natural_indices: the indices of quasi-natural languages already seen
  • \n
  • num_natural: the number of quasi-natural languages to sample
  • \n
  • natural_terms: the list of quasi-natural terms to sample from
  • \n
  • unnatural_indices: the indices of non-quasi-natural languages already seen
  • \n
  • num_unnatural: the number of non-quasi-natural languages to sample; 0 by default
  • \n
  • unnatural_terms: the list of non-quasi-natural terms to sample from; empty by default.
  • \n
  • dummy_name: the format of the string to name each language constructed.
  • \n
\n\n
Returns:
\n\n
\n

a dict containing a set of languages and the updated id_start, of the form

\n\n
{\n    \"languages\": (list of updated languages)\n    \"id_start\": (updated length of languages)\n}\n
\n
\n", "signature": "(\tlanguage_class: Type[ultk.language.language.Language],\tid_start: int,\tnatural_terms: list[ultk.language.language.Expression],\tnatural_indices: list[int],\tnum_natural: int = 0,\tunnatural_terms: list[ultk.language.language.Expression] = [],\tunnatural_indices: list[int] = [],\tnum_unnatural: int = 0,\tdummy_name='sampled_lang_id',\tverbose=False) -> dict[str, typing.Any]:", "funcdef": "def"}, "ultk.language.sampling.random_combination_vocabulary": {"fullname": "ultk.language.sampling.random_combination_vocabulary", "modulename": "ultk.language.sampling", "qualname": "random_combination_vocabulary", "kind": "function", "doc": "

Get a single vocabulary for a specific language size by choosing a random combination of natural and unnatural terms.

\n\n
Arguments:
\n\n
    \n
  • seen: the list of language indices already seen
  • \n
  • num_natural: int
  • \n
  • natural_terms: list[Expression]
  • \n
  • num_unnatural: int=0
  • \n
  • unnatural_terms: list[Expression]=[]
  • \n
\n\n
Returns:
\n\n
\n

languages: the extended list of input languages.

\n
\n", "signature": "(\tseen: set,\tnum_natural: int,\tnatural_terms: list[ultk.language.language.Expression],\tnum_unnatural: int = 0,\tunnatural_terms: list[ultk.language.language.Expression] = []) -> list[ultk.language.language.Language]:", "funcdef": "def"}, "ultk.language.semantics": {"fullname": "ultk.language.semantics", "modulename": "ultk.language.semantics", "kind": "module", "doc": "

Classes for modeling the meanings of a language.

\n\n

Meanings are modeled as things which map linguistic forms to objects of reference. The linguistic forms and objects of reference can in principle be very detailed, and future work may elaborate the meaning classes and implement a Form class.

\n\n

In efficient communication analyses, simplicity and informativeness can be measured as properties of semantic aspects of a language. E.g., a meaning is simple if it is easy to represent, or to compress into some code; a meaning is informative if it is easy for a listener to recover a speaker's intended literal meaning.

\n\n
Examples:
\n\n
\n
\n
>>> from ultk.language.semantics import Referent, Meaning, Universe\n>>> from ultk.language.language import Expression\n>>> # construct the meaning space for numerals\n>>> numerals_universe = NumeralUniverse(referents=[NumeralReferent(str(i)) for i in range(1, 100)])\n>>> # construct a list of referents for the expression 'a few'\n>>> a_few_refs = [NumeralReferent(name=str(i)) for i in range(2, 6)]\n>>> a_few_meaning = NumeralMeaning(referents=a_few_refs, universe=numerals_universe)\n>>> # define the expression\n>>> a_few = NumeralExpression(form="a few", meaning=a_few_meaning)\n
\n
\n
\n"}, "ultk.language.semantics.Referent": {"fullname": "ultk.language.semantics.Referent", "modulename": "ultk.language.semantics", "qualname": "Referent", "kind": "class", "doc": "

A referent is some object in the universe for a language.

\n"}, "ultk.language.semantics.Referent.__init__": {"fullname": "ultk.language.semantics.Referent.__init__", "modulename": "ultk.language.semantics", "qualname": "Referent.__init__", "kind": "function", "doc": "

Initialize a referent.

\n\n
Arguments:
\n\n
    \n
  • name: a string representing the name of the referent
  • \n
\n", "signature": "(name: str, properties: dict = {}, **kwargs)"}, "ultk.language.semantics.Referent.name": {"fullname": "ultk.language.semantics.Referent.name", "modulename": "ultk.language.semantics", "qualname": "Referent.name", "kind": "variable", "doc": "

\n"}, "ultk.language.semantics.Referent.to_dict": {"fullname": "ultk.language.semantics.Referent.to_dict", "modulename": "ultk.language.semantics", "qualname": "Referent.to_dict", "kind": "function", "doc": "

\n", "signature": "(self) -> dict:", "funcdef": "def"}, "ultk.language.semantics.Universe": {"fullname": "ultk.language.semantics.Universe", "modulename": "ultk.language.semantics", "qualname": "Universe", "kind": "class", "doc": "

The universe is the set of possible referent objects for a meaning.

\n"}, "ultk.language.semantics.Universe.__init__": {"fullname": "ultk.language.semantics.Universe.__init__", "modulename": "ultk.language.semantics", "qualname": "Universe.__init__", "kind": "function", "doc": "

\n", "signature": "(\treferents: Iterable[ultk.language.semantics.Referent],\tprior: dict[str, float] = None)"}, "ultk.language.semantics.Universe.referents": {"fullname": "ultk.language.semantics.Universe.referents", "modulename": "ultk.language.semantics", "qualname": "Universe.referents", "kind": "variable", "doc": "

\n"}, "ultk.language.semantics.Universe.set_prior": {"fullname": "ultk.language.semantics.Universe.set_prior", "modulename": "ultk.language.semantics", "qualname": "Universe.set_prior", "kind": "function", "doc": "

\n", "signature": "(self, prior: dict[str, float]):", "funcdef": "def"}, "ultk.language.semantics.Universe.prior_numpy": {"fullname": "ultk.language.semantics.Universe.prior_numpy", "modulename": "ultk.language.semantics", "qualname": "Universe.prior_numpy", "kind": "function", "doc": "

\n", "signature": "(self) -> numpy.ndarray:", "funcdef": "def"}, "ultk.language.semantics.Universe.from_dataframe": {"fullname": "ultk.language.semantics.Universe.from_dataframe", "modulename": "ultk.language.semantics", "qualname": "Universe.from_dataframe", "kind": "function", "doc": "

Build a Universe from a DataFrame.\nIt's assumed that each row specifies one Referent, and each column will be a property\nof that Referent. We assume that name is one of the columns of the DataFrame.

\n\n
Arguments:
\n\n
    \n
  • a DataFrame representing the meaning space of interest, assumed to have a column name
  • \n
\n", "signature": "(cls, df: pandas.core.frame.DataFrame):", "funcdef": "def"}, "ultk.language.semantics.Universe.from_csv": {"fullname": "ultk.language.semantics.Universe.from_csv", "modulename": "ultk.language.semantics", "qualname": "Universe.from_csv", "kind": "function", "doc": "

Build a Universe from a CSV file. This is a small wrapper around\nUniverse.from_dataframe, so see that documentation for more information.

\n", "signature": "(cls, filename: str):", "funcdef": "def"}, "ultk.language.semantics.Meaning": {"fullname": "ultk.language.semantics.Meaning", "modulename": "ultk.language.semantics", "qualname": "Meaning", "kind": "class", "doc": "

A meaning picks out a set of objects from the universe.

\n\n

On one tradition (from formal semantics), we might model an underspecified meaning as a subset of the universe.\nSometimes these different referents are not equally likely,\nin which it can be helpful to define a meaning explicitly as a distribution over the universe.

\n"}, "ultk.language.semantics.Meaning.__init__": {"fullname": "ultk.language.semantics.Meaning.__init__", "modulename": "ultk.language.semantics", "qualname": "Meaning.__init__", "kind": "function", "doc": "

A meaning is the set of things it refers to.

\n\n

The objects of reference are a subset of the universe of discourse. Sometimes it is natural to construe the meaning as as a probability distribution over the universe, instead of just a binary predicate.

\n\n
Arguments:
\n\n
    \n
  • referents: a list of Referent objects, which must be a subset of the referents in universe.
  • \n
  • universe: a Universe object that defines the probability space for a meaning.
  • \n
  • dist: a dict of with Referent names as keys and weights or probabilities as values, representing the distribution over referents to associate with the meaning. By default is None, and the distribution will be uniform over the passed referents, and any remaining referents are assigned 0 probability.
  • \n
\n", "signature": "(\treferents: Iterable[ultk.language.semantics.Referent],\tuniverse: ultk.language.semantics.Universe,\tdist: dict[str, float] = None)"}, "ultk.language.semantics.Meaning.referents": {"fullname": "ultk.language.semantics.Meaning.referents", "modulename": "ultk.language.semantics", "qualname": "Meaning.referents", "kind": "variable", "doc": "

\n"}, "ultk.language.semantics.Meaning.universe": {"fullname": "ultk.language.semantics.Meaning.universe", "modulename": "ultk.language.semantics", "qualname": "Meaning.universe", "kind": "variable", "doc": "

\n"}, "ultk.language.semantics.Meaning.to_dict": {"fullname": "ultk.language.semantics.Meaning.to_dict", "modulename": "ultk.language.semantics", "qualname": "Meaning.to_dict", "kind": "function", "doc": "

\n", "signature": "(self) -> dict:", "funcdef": "def"}}, "docInfo": {"ultk": {"qualname": 0, "fullname": 1, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 771}, "ultk.effcomm": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 361}, "ultk.effcomm.agent": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 30}, "ultk.effcomm.agent.CommunicativeAgent": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 36, "bases": 0, "doc": 80}, "ultk.effcomm.agent.CommunicativeAgent.language": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.effcomm.agent.CommunicativeAgent.shape": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.effcomm.agent.CommunicativeAgent.weights": {"qualname": 2, "fullname": 5, "annotation": 3, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.effcomm.agent.CommunicativeAgent.normalized_weights": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 19}, "ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 50, "bases": 0, "doc": 87}, "ultk.effcomm.agent.CommunicativeAgent.referent_to_index": {"qualname": 4, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 39, "bases": 0, "doc": 3}, "ultk.effcomm.agent.CommunicativeAgent.index_to_referent": {"qualname": 4, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 39, "bases": 0, "doc": 3}, "ultk.effcomm.agent.CommunicativeAgent.expression_to_index": {"qualname": 4, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 39, "bases": 0, "doc": 3}, "ultk.effcomm.agent.CommunicativeAgent.index_to_expression": {"qualname": 4, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 39, "bases": 0, "doc": 3}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"qualname": 4, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 47, "bases": 0, "doc": 62}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 24, "bases": 0, "doc": 80}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 95, "bases": 0, "doc": 163}, "ultk.effcomm.agent.Speaker": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 3}, "ultk.effcomm.agent.Speaker.__init__": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 36, "bases": 0, "doc": 80}, "ultk.effcomm.agent.Speaker.S": {"qualname": 2, "fullname": 5, "annotation": 3, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.effcomm.agent.Speaker.normalized_weights": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 19, "bases": 0, "doc": 27}, "ultk.effcomm.agent.Listener": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 3}, "ultk.effcomm.agent.Listener.__init__": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 36, "bases": 0, "doc": 80}, "ultk.effcomm.agent.Listener.R": {"qualname": 2, "fullname": 5, "annotation": 3, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.effcomm.agent.Listener.normalized_weights": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 19, "bases": 0, "doc": 30}, "ultk.effcomm.agent.LiteralSpeaker": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 70}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 36, "bases": 0, "doc": 80}, "ultk.effcomm.agent.LiteralSpeaker.S": {"qualname": 2, "fullname": 5, "annotation": 3, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.effcomm.agent.LiteralListener": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 61}, "ultk.effcomm.agent.LiteralListener.__init__": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 36, "bases": 0, "doc": 80}, "ultk.effcomm.agent.LiteralListener.R": {"qualname": 2, "fullname": 5, "annotation": 3, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.effcomm.agent.PragmaticSpeaker": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 43}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 83, "bases": 0, "doc": 158}, "ultk.effcomm.agent.PragmaticSpeaker.S": {"qualname": 2, "fullname": 5, "annotation": 3, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.effcomm.agent.PragmaticListener": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 45}, "ultk.effcomm.agent.PragmaticListener.__init__": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 80, "bases": 0, "doc": 122}, "ultk.effcomm.agent.PragmaticListener.R": {"qualname": 2, "fullname": 5, "annotation": 3, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.effcomm.agent.BayesianListener": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 108}, "ultk.effcomm.agent.BayesianListener.__init__": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 64, "bases": 0, "doc": 80}, "ultk.effcomm.analysis": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 15}, "ultk.effcomm.analysis.get_dataframe": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 145, "bases": 0, "doc": 153}, "ultk.effcomm.analysis.pearson_analysis": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 67, "bases": 0, "doc": 153}, "ultk.effcomm.analysis.trade_off_means": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 72, "bases": 0, "doc": 294}, "ultk.effcomm.analysis.trade_off_ttest": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 74, "bases": 0, "doc": 257}, "ultk.effcomm.information": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 15}, "ultk.effcomm.information.information_rate": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 39, "bases": 0, "doc": 16}, "ultk.effcomm.information.get_rd_curve": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 75, "bases": 0, "doc": 16}, "ultk.effcomm.information.expected_distortion": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 61, "bases": 0, "doc": 17}, "ultk.effcomm.information.compute_rate_distortion": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 39, "bases": 0, "doc": 148}, "ultk.effcomm.information.blahut_arimoto": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 117, "bases": 0, "doc": 260}, "ultk.effcomm.information.get_ib_curve": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 122, "bases": 0, "doc": 225}, "ultk.effcomm.information.get_bottleneck": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 98, "bases": 0, "doc": 282}, "ultk.effcomm.information.ib_complexity": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 49, "bases": 0, "doc": 12}, "ultk.effcomm.information.ib_informativity": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 68, "bases": 0, "doc": 80}, "ultk.effcomm.information.ib_comm_cost": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 68, "bases": 0, "doc": 93}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"qualname": 5, "fullname": 8, "annotation": 0, "default_value": 0, "signature": 68, "bases": 0, "doc": 92}, "ultk.effcomm.information.ib_accuracy": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 58, "bases": 0, "doc": 107}, "ultk.effcomm.information.ib_distortion": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 58, "bases": 0, "doc": 115}, "ultk.effcomm.information.ib_encoder_to_point": {"qualname": 4, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 87, "bases": 0, "doc": 108}, "ultk.effcomm.information.ib_optimal_decoder": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 63, "bases": 0, "doc": 89}, "ultk.effcomm.informativity": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 13}, "ultk.effcomm.informativity.indicator_utility": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 61, "bases": 0, "doc": 16}, "ultk.effcomm.informativity.informativity": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 152, "bases": 0, "doc": 306}, "ultk.effcomm.informativity.communicative_success": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 136, "bases": 0, "doc": 161}, "ultk.effcomm.optimization": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 22}, "ultk.effcomm.optimization.Mutation": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.effcomm.optimization.Mutation.precondition": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 41, "bases": 0, "doc": 13}, "ultk.effcomm.optimization.Mutation.mutate": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 90, "bases": 0, "doc": 12}, "ultk.effcomm.optimization.RemoveExpression": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 3}, "ultk.effcomm.optimization.RemoveExpression.precondition": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 41, "bases": 0, "doc": 13}, "ultk.effcomm.optimization.RemoveExpression.mutate": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 90, "bases": 0, "doc": 12}, "ultk.effcomm.optimization.AddExpression": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 3}, "ultk.effcomm.optimization.AddExpression.precondition": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 41, "bases": 0, "doc": 13}, "ultk.effcomm.optimization.AddExpression.mutate": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 90, "bases": 0, "doc": 12}, "ultk.effcomm.optimization.EvolutionaryOptimizer": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 16}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 170, "bases": 0, "doc": 184}, "ultk.effcomm.optimization.EvolutionaryOptimizer.objectives": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.effcomm.optimization.EvolutionaryOptimizer.expressions": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutations": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_size": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.effcomm.optimization.EvolutionaryOptimizer.max_mutations": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.effcomm.optimization.EvolutionaryOptimizer.generations": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.effcomm.optimization.EvolutionaryOptimizer.lang_size": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.effcomm.optimization.EvolutionaryOptimizer.dominating_languages": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.effcomm.optimization.EvolutionaryOptimizer.explored_languages": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 98, "bases": 0, "doc": 157}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 68, "bases": 0, "doc": 47}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 56, "bases": 0, "doc": 73}, "ultk.effcomm.optimization.sample_parents": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 107, "bases": 0, "doc": 117}, "ultk.effcomm.sampling": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 9}, "ultk.effcomm.sampling.get_hypothetical_variants": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 116, "bases": 0, "doc": 164}, "ultk.effcomm.tradeoff": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 26}, "ultk.effcomm.tradeoff.dominates": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 41, "bases": 0, "doc": 60}, "ultk.effcomm.tradeoff.non_dominated_2d": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 41, "bases": 0, "doc": 72}, "ultk.effcomm.tradeoff.pareto_optimal_languages": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 132, "bases": 0, "doc": 12}, "ultk.effcomm.tradeoff.pareto_min_distances": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 47, "bases": 0, "doc": 131}, "ultk.effcomm.tradeoff.interpolate_data": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 86, "bases": 0, "doc": 169}, "ultk.effcomm.tradeoff.tradeoff": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 199, "bases": 0, "doc": 219}, "ultk.effcomm.util": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 11}, "ultk.effcomm.util.rows_zero_to_uniform": {"qualname": 4, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 29, "bases": 0, "doc": 96}, "ultk.effcomm.util.build_utility_matrix": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 99, "bases": 0, "doc": 21}, "ultk.effcomm.util.PRECISION": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 2, "signature": 0, "bases": 0, "doc": 3}, "ultk.effcomm.util.marginal": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 52}, "ultk.effcomm.util.conditional": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 56}, "ultk.effcomm.util.joint": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 17, "bases": 0, "doc": 69}, "ultk.effcomm.util.marginalize": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 17, "bases": 0, "doc": 68}, "ultk.effcomm.util.bayes": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 17, "bases": 0, "doc": 37}, "ultk.effcomm.util.xlogx": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 8}, "ultk.effcomm.util.H": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 16}, "ultk.effcomm.util.MI": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 6}, "ultk.effcomm.util.DKL": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 26, "bases": 0, "doc": 7}, "ultk.effcomm.util.gNID": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 23, "bases": 0, "doc": 66}, "ultk.language": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 105}, "ultk.language.grammar": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.language.grammar.Rule": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 135}, "ultk.language.grammar.Rule.__init__": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 108, "bases": 0, "doc": 3}, "ultk.language.grammar.Rule.lhs": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.language.grammar.Rule.rhs": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.language.grammar.Rule.func": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.language.grammar.Rule.name": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.language.grammar.Rule.weight": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.language.grammar.Rule.is_terminal": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 27}, "ultk.language.grammar.GrammaticalExpression": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 4, "doc": 90}, "ultk.language.grammar.GrammaticalExpression.__init__": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 107, "bases": 0, "doc": 3}, "ultk.language.grammar.GrammaticalExpression.rule_name": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.language.grammar.GrammaticalExpression.func": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.language.grammar.GrammaticalExpression.children": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 51}, "ultk.language.grammar.GrammaticalExpression.evaluate": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 56, "bases": 0, "doc": 3}, "ultk.language.grammar.GrammaticalExpression.add_child": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 19, "bases": 0, "doc": 3}, "ultk.language.grammar.GrammaticalExpression.to_dict": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 3}, "ultk.language.grammar.UniquenessArgs": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 2, "doc": 95}, "ultk.language.grammar.UniquenessArgs.unique_expressions": {"qualname": 3, "fullname": 6, "annotation": 9, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.language.grammar.UniquenessArgs.key": {"qualname": 2, "fullname": 5, "annotation": 6, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.language.grammar.UniquenessArgs.compare_func": {"qualname": 3, "fullname": 6, "annotation": 10, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.language.grammar.Grammar": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 18}, "ultk.language.grammar.Grammar.__init__": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 3}, "ultk.language.grammar.Grammar.add_rule": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 36, "bases": 0, "doc": 3}, "ultk.language.grammar.Grammar.parse": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 104, "bases": 0, "doc": 99}, "ultk.language.grammar.Grammar.generate": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 46, "bases": 0, "doc": 10}, "ultk.language.grammar.Grammar.enumerate": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 124, "bases": 0, "doc": 165}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"qualname": 4, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 134, "bases": 0, "doc": 12}, "ultk.language.grammar.Grammar.get_unique_expressions": {"qualname": 4, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 194, "bases": 0, "doc": 197}, "ultk.language.grammar.Grammar.get_all_rules": {"qualname": 4, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 35, "bases": 0, "doc": 9}, "ultk.language.grammar.Grammar.from_yaml": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 97}, "ultk.language.language": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 234}, "ultk.language.language.Expression": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 10}, "ultk.language.language.Expression.__init__": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 67, "bases": 0, "doc": 3}, "ultk.language.language.Expression.form": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.language.language.Expression.meaning": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.language.language.Expression.can_express": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 39, "bases": 0, "doc": 18}, "ultk.language.language.Expression.to_dict": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 3}, "ultk.language.language.Language": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 7}, "ultk.language.language.Language.__init__": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 49, "bases": 0, "doc": 3}, "ultk.language.language.Language.expressions": {"qualname": 2, "fullname": 5, "annotation": 6, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.language.language.Language.universe": {"qualname": 2, "fullname": 5, "annotation": 5, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.language.language.Language.add_expression": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 36, "bases": 0, "doc": 14}, "ultk.language.language.Language.pop": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 39, "bases": 0, "doc": 18}, "ultk.language.language.Language.is_natural": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 11}, "ultk.language.language.Language.degree_property": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 53, "bases": 0, "doc": 15}, "ultk.language.language.Language.binary_matrix": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 19, "bases": 0, "doc": 24}, "ultk.language.language.Language.to_dict": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 3}, "ultk.language.language.aggregate_expression_complexity": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 128, "bases": 0, "doc": 81}, "ultk.language.sampling": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.language.sampling.powerset": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 37, "bases": 0, "doc": 108}, "ultk.language.sampling.all_meanings": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 68, "bases": 0, "doc": 13}, "ultk.language.sampling.all_expressions": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 74, "bases": 0, "doc": 10}, "ultk.language.sampling.all_languages": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 111, "bases": 0, "doc": 82}, "ultk.language.sampling.upto_comb": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 30, "bases": 0, "doc": 33}, "ultk.language.sampling.random_languages": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 141, "bases": 0, "doc": 457}, "ultk.language.sampling.generate_languages": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 247, "bases": 0, "doc": 639}, "ultk.language.sampling.sample_lang_size": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 167, "bases": 0, "doc": 135}, "ultk.language.sampling.sample_quasi_natural": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 190, "bases": 0, "doc": 139}, "ultk.language.sampling.rename_id": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 29, "bases": 0, "doc": 19}, "ultk.language.sampling.enumerate_all_languages": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 254, "bases": 0, "doc": 220}, "ultk.language.sampling.random_combination_vocabulary": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 145, "bases": 0, "doc": 88}, "ultk.language.semantics": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 456}, "ultk.language.semantics.Referent": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 14}, "ultk.language.semantics.Referent.__init__": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 38, "bases": 0, "doc": 26}, "ultk.language.semantics.Referent.name": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.language.semantics.Referent.to_dict": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 3}, "ultk.language.semantics.Universe": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 15}, "ultk.language.semantics.Universe.__init__": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 66, "bases": 0, "doc": 3}, "ultk.language.semantics.Universe.referents": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.language.semantics.Universe.set_prior": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 33, "bases": 0, "doc": 3}, "ultk.language.semantics.Universe.prior_numpy": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 19, "bases": 0, "doc": 3}, "ultk.language.semantics.Universe.from_dataframe": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 36, "bases": 0, "doc": 67}, "ultk.language.semantics.Universe.from_csv": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 28}, "ultk.language.semantics.Meaning": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 60}, "ultk.language.semantics.Meaning.__init__": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 92, "bases": 0, "doc": 149}, "ultk.language.semantics.Meaning.referents": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.language.semantics.Meaning.universe": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "ultk.language.semantics.Meaning.to_dict": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 3}}, "length": 193, "save": true}, "index": {"qualname": {"root": {"2": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}}, "df": 1}}, "docs": {"ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.language.grammar.Rule.__init__": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.__init__": {"tf": 1}, "ultk.language.grammar.Grammar.__init__": {"tf": 1}, "ultk.language.language.Expression.__init__": {"tf": 1}, "ultk.language.language.Language.__init__": {"tf": 1}, "ultk.language.semantics.Referent.__init__": {"tf": 1}, "ultk.language.semantics.Universe.__init__": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 17, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "m": {"docs": {"ultk.effcomm.information.ib_comm_cost": {"tf": 1}}, "df": 1, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.informativity.communicative_success": {"tf": 1}}, "df": 1, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.agent.CommunicativeAgent": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.language": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.shape": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.referent_to_index": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_referent": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.expression_to_index": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_expression": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}}, "df": 14}}}}}}}}}}}}}}}, "p": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.information.compute_rate_distortion": {"tf": 1}}, "df": 1}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.information.ib_complexity": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1}}, "df": 2}}}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.UniquenessArgs.compare_func": {"tf": 1}}, "df": 1}}}}, "b": {"docs": {"ultk.language.sampling.upto_comb": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.sampling.random_combination_vocabulary": {"tf": 1}}, "df": 1}}}}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.information.ib_comm_cost": {"tf": 1}}, "df": 1}}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.util.conditional": {"tf": 1}}, "df": 1}}}}}}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.information.get_rd_curve": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}}, "df": 2}}}}, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"ultk.language.grammar.GrammaticalExpression.add_child": {"tf": 1}}, "df": 1, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.grammar.GrammaticalExpression.children": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.language.Expression.can_express": {"tf": 1}}, "df": 1}}, "s": {"docs": {}, "df": 0, "v": {"docs": {"ultk.language.semantics.Universe.from_csv": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.language.grammar.Rule.__init__": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.__init__": {"tf": 1}, "ultk.language.grammar.Grammar.__init__": {"tf": 1}, "ultk.language.language.Expression.__init__": {"tf": 1}, "ultk.language.language.Language.__init__": {"tf": 1}, "ultk.language.semantics.Referent.__init__": {"tf": 1}, "ultk.language.semantics.Universe.__init__": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 17, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}}, "df": 1}}}}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.referent_to_index": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_referent": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.expression_to_index": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_expression": {"tf": 1}}, "df": 4}}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.informativity.indicator_utility": {"tf": 1}}, "df": 1}}}}}}}, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.information.information_rate": {"tf": 1}}, "df": 1}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}}, "df": 2}}}}}}}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}}, "df": 1}}}}}}}}}}, "b": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.ib_complexity": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.effcomm.information.ib_accuracy": {"tf": 1}, "ultk.effcomm.information.ib_distortion": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}}, "df": 9}, "s": {"docs": {"ultk.language.grammar.Rule.is_terminal": {"tf": 1}, "ultk.language.language.Language.is_natural": {"tf": 1}}, "df": 2}, "d": {"docs": {"ultk.language.sampling.rename_id": {"tf": 1}}, "df": 1}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.lang_size": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1}}, "df": 2, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.language": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.language.language.Language": {"tf": 1}, "ultk.language.language.Language.__init__": {"tf": 1}, "ultk.language.language.Language.expressions": {"tf": 1}, "ultk.language.language.Language.universe": {"tf": 1}, "ultk.language.language.Language.add_expression": {"tf": 1}, "ultk.language.language.Language.pop": {"tf": 1}, "ultk.language.language.Language.is_natural": {"tf": 1}, "ultk.language.language.Language.degree_property": {"tf": 1}, "ultk.language.language.Language.binary_matrix": {"tf": 1}, "ultk.language.language.Language.to_dict": {"tf": 1}}, "df": 13, "s": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.dominating_languages": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.explored_languages": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 7}}}}}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.Listener": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.R": {"tf": 1}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}}, "df": 4}}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.S": {"tf": 1}}, "df": 3}}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.R": {"tf": 1}}, "df": 3}}}}}}}}}}}}}}, "h": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.grammar.Rule.lhs": {"tf": 1}}, "df": 1}}}, "s": {"docs": {"ultk.effcomm.agent.Speaker.S": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.S": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.S": {"tf": 1}}, "df": 3, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.shape": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}}, "df": 2}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_size": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}}, "df": 6}}}}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.Speaker": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Speaker.S": {"tf": 1}, "ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1}}, "df": 4}}}}}}, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.informativity.communicative_success": {"tf": 1}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.sample_size": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.lang_size": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1}}, "df": 3}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.semantics.Universe.set_prior": {"tf": 1}}, "df": 1}}}, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.grammar.Rule.weight": {"tf": 1}}, "df": 1, "s": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}, "ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}}, "df": 5}}}}}}}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}}, "df": 3}}}}}}}}, "n": {"docs": {"ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.Rule.name": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.rule_name": {"tf": 1}, "ultk.language.semantics.Referent.name": {"tf": 1}}, "df": 3}}, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.language.language.Language.is_natural": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}}, "df": 2}}}}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "y": {"docs": {"ultk.language.semantics.Universe.prior_numpy": {"tf": 1}}, "df": 1}}}}}, "r": {"docs": {"ultk.effcomm.agent.Listener.R": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.R": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.R": {"tf": 1}}, "df": 3, "e": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.referent_to_index": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_referent": {"tf": 1}, "ultk.language.semantics.Referent": {"tf": 1}, "ultk.language.semantics.Referent.__init__": {"tf": 1}, "ultk.language.semantics.Referent.name": {"tf": 1}, "ultk.language.semantics.Referent.to_dict": {"tf": 1}}, "df": 6, "s": {"docs": {"ultk.language.semantics.Universe.referents": {"tf": 1}, "ultk.language.semantics.Meaning.referents": {"tf": 1}}, "df": 2}}}}}}}, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.optimization.RemoveExpression": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.precondition": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.mutate": {"tf": 1}}, "df": 3}}}}}}}}}}}}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.sampling.rename_id": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.information.information_rate": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1}}, "df": 2}}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {"ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1}}, "df": 2}}}}}, "d": {"docs": {"ultk.effcomm.information.get_rd_curve": {"tf": 1}}, "df": 1}, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.grammar.Rule.__init__": {"tf": 1}, "ultk.language.grammar.Rule.lhs": {"tf": 1}, "ultk.language.grammar.Rule.rhs": {"tf": 1}, "ultk.language.grammar.Rule.func": {"tf": 1}, "ultk.language.grammar.Rule.name": {"tf": 1}, "ultk.language.grammar.Rule.weight": {"tf": 1}, "ultk.language.grammar.Rule.is_terminal": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.rule_name": {"tf": 1}, "ultk.language.grammar.Grammar.add_rule": {"tf": 1}}, "df": 10, "s": {"docs": {"ultk.language.grammar.Grammar.get_all_rules": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.grammar.Rule.rhs": {"tf": 1}}, "df": 1}}}, "t": {"docs": {}, "df": 0, "o": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.referent_to_index": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_referent": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.expression_to_index": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_expression": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.to_dict": {"tf": 1}, "ultk.language.language.Expression.to_dict": {"tf": 1}, "ultk.language.language.Language.to_dict": {"tf": 1}, "ultk.language.semantics.Referent.to_dict": {"tf": 1}, "ultk.language.semantics.Meaning.to_dict": {"tf": 1}}, "df": 14}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}}, "df": 2, "o": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "f": {"docs": {"ultk.effcomm.tradeoff.tradeoff": {"tf": 1}}, "df": 1}}}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.language.grammar.Rule.is_terminal": {"tf": 1}}, "df": 1}}}}}}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.language.Expression.can_express": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.expression_to_index": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_expression": {"tf": 1}, "ultk.language.language.Expression": {"tf": 1}, "ultk.language.language.Expression.__init__": {"tf": 1}, "ultk.language.language.Expression.form": {"tf": 1}, "ultk.language.language.Expression.meaning": {"tf": 1}, "ultk.language.language.Expression.can_express": {"tf": 1}, "ultk.language.language.Expression.to_dict": {"tf": 1}, "ultk.language.language.Language.add_expression": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1}}, "df": 10, "s": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.expressions": {"tf": 1}, "ultk.language.grammar.UniquenessArgs.unique_expressions": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.language.Language.expressions": {"tf": 1}, "ultk.language.sampling.all_expressions": {"tf": 1}}, "df": 5}}}}}}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.information.expected_distortion": {"tf": 1}}, "df": 1}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.explored_languages": {"tf": 1}}, "df": 1}}}}}}}, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}}, "df": 2}}}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 3}}}}}}}}, "v": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.objectives": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.expressions": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutations": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_size": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.max_mutations": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.generations": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.lang_size": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.dominating_languages": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.explored_languages": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1}}, "df": 14}}}}}}}}}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.GrammaticalExpression.evaluate": {"tf": 1}}, "df": 1}}}}}}}}, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.S": {"tf": 1}}, "df": 3}}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.PragmaticListener": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.R": {"tf": 1}}, "df": 3}}}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.optimization.Mutation.precondition": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.precondition": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.precondition": {"tf": 1}}, "df": 3}}}}}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.util.PRECISION": {"tf": 1}}, "df": 1}}}}}}}, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"ultk.language.language.Language.degree_property": {"tf": 1}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"ultk.language.semantics.Universe.set_prior": {"tf": 1}, "ultk.language.semantics.Universe.prior_numpy": {"tf": 1}}, "df": 2}}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 1}}, "df": 1}}}}}}, "o": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}}, "df": 1}}}, "p": {"docs": {"ultk.language.language.Language.pop": {"tf": 1}}, "df": 1}, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.sampling.powerset": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.optimization.sample_parents": {"tf": 1}}, "df": 1}}}, "t": {"docs": {}, "df": 0, "o": {"docs": {"ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}}, "df": 2}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.Grammar.parse": {"tf": 1}}, "df": 1}}}}}, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.util.bayes": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.BayesianListener": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}}, "df": 2}}}}}}}}}}}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 1}}}}}}}}}, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.util.build_utility_matrix": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"ultk.language.language.Language.binary_matrix": {"tf": 1}}, "df": 1}}}}}}, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.information.get_rd_curve": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.grammar.Grammar.get_all_rules": {"tf": 1}}, "df": 7}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.generations": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {"ultk.language.grammar.Grammar.generate": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 2}}}}}}}, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.util.gNID": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.__init__": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.rule_name": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.func": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.children": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.evaluate": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.add_child": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.to_dict": {"tf": 1}}, "df": 9}}}}}}}}}}}}}}}, "r": {"docs": {"ultk.language.grammar.Grammar": {"tf": 1}, "ultk.language.grammar.Grammar.__init__": {"tf": 1}, "ultk.language.grammar.Grammar.add_rule": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.grammar.Grammar.generate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.grammar.Grammar.get_all_rules": {"tf": 1}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1}}, "df": 10}}}}}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}}, "df": 1, "f": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}}, "df": 2}}}}}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.information.expected_distortion": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.ib_distortion": {"tf": 1}}, "df": 3}}}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}}, "df": 1}}}}}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.grammar.GrammaticalExpression.to_dict": {"tf": 1}, "ultk.language.language.Expression.to_dict": {"tf": 1}, "ultk.language.language.Language.to_dict": {"tf": 1}, "ultk.language.semantics.Referent.to_dict": {"tf": 1}, "ultk.language.semantics.Meaning.to_dict": {"tf": 1}}, "df": 5}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}}, "df": 2}}}}}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1}}, "df": 1}}}, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.language.Language.degree_property": {"tf": 1}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.dominating_languages": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.tradeoff.dominates": {"tf": 1}}, "df": 1}, "d": {"docs": {"ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}}, "df": 1}}}}}}}}, "k": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.util.DKL": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 1}}, "df": 1}}}}}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1}}}}}}, "c": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.information.ib_accuracy": {"tf": 1}}, "df": 1}}}}}}}, "d": {"docs": {}, "df": 0, "d": {"docs": {"ultk.language.grammar.GrammaticalExpression.add_child": {"tf": 1}, "ultk.language.grammar.Grammar.add_rule": {"tf": 1}, "ultk.language.language.Language.add_expression": {"tf": 1}}, "df": 3, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.optimization.AddExpression": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.precondition": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.mutate": {"tf": 1}}, "df": 3}}}}}}}}}}}}, "t": {"docs": {"ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1}}, "df": 1}, "l": {"docs": {}, "df": 0, "l": {"docs": {"ultk.language.grammar.Grammar.get_all_rules": {"tf": 1}, "ultk.language.sampling.all_meanings": {"tf": 1}, "ultk.language.sampling.all_expressions": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 5}}, "g": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.language.aggregate_expression_complexity": {"tf": 1}}, "df": 1}}}}}}}}}, "o": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "f": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}}, "df": 2}}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 1}}, "df": 2}}}}}}, "b": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.objectives": {"tf": 1}}, "df": 1}}}}}}}}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 1}}, "df": 1}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.language.language.Expression.meaning": {"tf": 1}, "ultk.language.semantics.Meaning": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}, "ultk.language.semantics.Meaning.referents": {"tf": 1}, "ultk.language.semantics.Meaning.universe": {"tf": 1}, "ultk.language.semantics.Meaning.to_dict": {"tf": 1}}, "df": 6, "s": {"docs": {"ultk.language.sampling.all_meanings": {"tf": 1}}, "df": 1}}}}}}}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.optimization.Mutation": {"tf": 1}, "ultk.effcomm.optimization.Mutation.precondition": {"tf": 1}, "ultk.effcomm.optimization.Mutation.mutate": {"tf": 1}}, "df": 3, "s": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.mutations": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.max_mutations": {"tf": 1}}, "df": 2}}}}, "e": {"docs": {"ultk.effcomm.optimization.Mutation.mutate": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1}}, "df": 4, "d": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "x": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.max_mutations": {"tf": 1}}, "df": 1}, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "x": {"docs": {"ultk.effcomm.util.build_utility_matrix": {"tf": 1}, "ultk.language.language.Language.binary_matrix": {"tf": 1}}, "df": 2}}}}, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.util.marginal": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.util.marginalize": {"tf": 1}}, "df": 1}}}}}}}}}}, "i": {"docs": {"ultk.effcomm.util.MI": {"tf": 1}}, "df": 1, "n": {"docs": {"ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.informativity.indicator_utility": {"tf": 1}, "ultk.effcomm.util.build_utility_matrix": {"tf": 1}}, "df": 2}}}}}}, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {"ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}}, "df": 1}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.UniquenessArgs.unique_expressions": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 2, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.UniquenessArgs.unique_expressions": {"tf": 1}, "ultk.language.grammar.UniquenessArgs.key": {"tf": 1}, "ultk.language.grammar.UniquenessArgs.compare_func": {"tf": 1}}, "df": 4}}}}}}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.language.Language.universe": {"tf": 1}, "ultk.language.semantics.Universe": {"tf": 1}, "ultk.language.semantics.Universe.__init__": {"tf": 1}, "ultk.language.semantics.Universe.referents": {"tf": 1}, "ultk.language.semantics.Universe.set_prior": {"tf": 1}, "ultk.language.semantics.Universe.prior_numpy": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}, "ultk.language.semantics.Universe.from_csv": {"tf": 1}, "ultk.language.semantics.Meaning.universe": {"tf": 1}}, "df": 9}}}}}}}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {"ultk.language.sampling.upto_comb": {"tf": 1}}, "df": 1}}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}}, "df": 1}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {"ultk.language.grammar.Rule.func": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.func": {"tf": 1}, "ultk.language.grammar.UniquenessArgs.compare_func": {"tf": 1}}, "df": 3}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {"ultk.language.grammar.Grammar.from_yaml": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}, "ultk.language.semantics.Universe.from_csv": {"tf": 1}}, "df": 3}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {"ultk.language.language.Expression.form": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {"ultk.effcomm.util.H": {"tf": 1}}, "df": 1, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}}, "df": 1}}}}}}}}}}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}}, "df": 1}}}}}}}, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"ultk.language.sampling.random_combination_vocabulary": {"tf": 1}}, "df": 1}}}}}}}}}}, "z": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {"ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}}, "df": 1}}}}, "j": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.util.joint": {"tf": 1}}, "df": 1}}}}}, "x": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "x": {"docs": {"ultk.effcomm.util.xlogx": {"tf": 1}}, "df": 1}}}}}, "y": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "l": {"docs": {"ultk.language.grammar.Grammar.from_yaml": {"tf": 1}}, "df": 1}}}}, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "y": {"docs": {"ultk.language.grammar.UniquenessArgs.key": {"tf": 1}}, "df": 1}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {"ultk.language.sampling.sample_quasi_natural": {"tf": 1}}, "df": 1}}}}}}}, "fullname": {"root": {"2": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}}, "df": 1}}, "docs": {"ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.language.grammar.Rule.__init__": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.__init__": {"tf": 1}, "ultk.language.grammar.Grammar.__init__": {"tf": 1}, "ultk.language.language.Expression.__init__": {"tf": 1}, "ultk.language.language.Language.__init__": {"tf": 1}, "ultk.language.semantics.Referent.__init__": {"tf": 1}, "ultk.language.semantics.Universe.__init__": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 17, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "k": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm": {"tf": 1}, "ultk.effcomm.agent": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.language": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.shape": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.referent_to_index": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_referent": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.expression_to_index": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_expression": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.Speaker": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Speaker.S": {"tf": 1}, "ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Listener": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.R": {"tf": 1}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.S": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.R": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.S": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.R": {"tf": 1}, "ultk.effcomm.agent.BayesianListener": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.analysis": {"tf": 1}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.information": {"tf": 1}, "ultk.effcomm.information.information_rate": {"tf": 1}, "ultk.effcomm.information.get_rd_curve": {"tf": 1}, "ultk.effcomm.information.expected_distortion": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.ib_complexity": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.effcomm.information.ib_accuracy": {"tf": 1}, "ultk.effcomm.information.ib_distortion": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}, "ultk.effcomm.informativity": {"tf": 1}, "ultk.effcomm.informativity.indicator_utility": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.informativity.communicative_success": {"tf": 1}, "ultk.effcomm.optimization": {"tf": 1}, "ultk.effcomm.optimization.Mutation": {"tf": 1}, "ultk.effcomm.optimization.Mutation.precondition": {"tf": 1}, "ultk.effcomm.optimization.Mutation.mutate": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.precondition": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.AddExpression": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.precondition": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.objectives": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.expressions": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutations": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_size": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.max_mutations": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.generations": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.lang_size": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.dominating_languages": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.explored_languages": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}, "ultk.effcomm.sampling": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.effcomm.tradeoff": {"tf": 1}, "ultk.effcomm.tradeoff.dominates": {"tf": 1}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.effcomm.util": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.effcomm.util.build_utility_matrix": {"tf": 1}, "ultk.effcomm.util.PRECISION": {"tf": 1}, "ultk.effcomm.util.marginal": {"tf": 1}, "ultk.effcomm.util.conditional": {"tf": 1}, "ultk.effcomm.util.joint": {"tf": 1}, "ultk.effcomm.util.marginalize": {"tf": 1}, "ultk.effcomm.util.bayes": {"tf": 1}, "ultk.effcomm.util.xlogx": {"tf": 1}, "ultk.effcomm.util.H": {"tf": 1}, "ultk.effcomm.util.MI": {"tf": 1}, "ultk.effcomm.util.DKL": {"tf": 1}, "ultk.effcomm.util.gNID": {"tf": 1}, "ultk.language": {"tf": 1}, "ultk.language.grammar": {"tf": 1}, "ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.grammar.Rule.__init__": {"tf": 1}, "ultk.language.grammar.Rule.lhs": {"tf": 1}, "ultk.language.grammar.Rule.rhs": {"tf": 1}, "ultk.language.grammar.Rule.func": {"tf": 1}, "ultk.language.grammar.Rule.name": {"tf": 1}, "ultk.language.grammar.Rule.weight": {"tf": 1}, "ultk.language.grammar.Rule.is_terminal": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.__init__": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.rule_name": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.func": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.children": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.evaluate": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.add_child": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.to_dict": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.UniquenessArgs.unique_expressions": {"tf": 1}, "ultk.language.grammar.UniquenessArgs.key": {"tf": 1}, "ultk.language.grammar.UniquenessArgs.compare_func": {"tf": 1}, "ultk.language.grammar.Grammar": {"tf": 1}, "ultk.language.grammar.Grammar.__init__": {"tf": 1}, "ultk.language.grammar.Grammar.add_rule": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.grammar.Grammar.generate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.grammar.Grammar.get_all_rules": {"tf": 1}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1}, "ultk.language.language": {"tf": 1}, "ultk.language.language.Expression": {"tf": 1}, "ultk.language.language.Expression.__init__": {"tf": 1}, "ultk.language.language.Expression.form": {"tf": 1}, "ultk.language.language.Expression.meaning": {"tf": 1}, "ultk.language.language.Expression.can_express": {"tf": 1}, "ultk.language.language.Expression.to_dict": {"tf": 1}, "ultk.language.language.Language": {"tf": 1}, "ultk.language.language.Language.__init__": {"tf": 1}, "ultk.language.language.Language.expressions": {"tf": 1}, "ultk.language.language.Language.universe": {"tf": 1}, "ultk.language.language.Language.add_expression": {"tf": 1}, "ultk.language.language.Language.pop": {"tf": 1}, "ultk.language.language.Language.is_natural": {"tf": 1}, "ultk.language.language.Language.degree_property": {"tf": 1}, "ultk.language.language.Language.binary_matrix": {"tf": 1}, "ultk.language.language.Language.to_dict": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1}, "ultk.language.sampling": {"tf": 1}, "ultk.language.sampling.powerset": {"tf": 1}, "ultk.language.sampling.all_meanings": {"tf": 1}, "ultk.language.sampling.all_expressions": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.upto_comb": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.rename_id": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1}, "ultk.language.semantics": {"tf": 1}, "ultk.language.semantics.Referent": {"tf": 1}, "ultk.language.semantics.Referent.__init__": {"tf": 1}, "ultk.language.semantics.Referent.name": {"tf": 1}, "ultk.language.semantics.Referent.to_dict": {"tf": 1}, "ultk.language.semantics.Universe": {"tf": 1}, "ultk.language.semantics.Universe.__init__": {"tf": 1}, "ultk.language.semantics.Universe.referents": {"tf": 1}, "ultk.language.semantics.Universe.set_prior": {"tf": 1}, "ultk.language.semantics.Universe.prior_numpy": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}, "ultk.language.semantics.Universe.from_csv": {"tf": 1}, "ultk.language.semantics.Meaning": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}, "ultk.language.semantics.Meaning.referents": {"tf": 1}, "ultk.language.semantics.Meaning.universe": {"tf": 1}, "ultk.language.semantics.Meaning.to_dict": {"tf": 1}}, "df": 193}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.util": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.effcomm.util.build_utility_matrix": {"tf": 1}, "ultk.effcomm.util.PRECISION": {"tf": 1}, "ultk.effcomm.util.marginal": {"tf": 1}, "ultk.effcomm.util.conditional": {"tf": 1}, "ultk.effcomm.util.joint": {"tf": 1}, "ultk.effcomm.util.marginalize": {"tf": 1}, "ultk.effcomm.util.bayes": {"tf": 1}, "ultk.effcomm.util.xlogx": {"tf": 1}, "ultk.effcomm.util.H": {"tf": 1}, "ultk.effcomm.util.MI": {"tf": 1}, "ultk.effcomm.util.DKL": {"tf": 1}, "ultk.effcomm.util.gNID": {"tf": 1}}, "df": 14, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.informativity.indicator_utility": {"tf": 1}, "ultk.effcomm.util.build_utility_matrix": {"tf": 1}}, "df": 2}}}}}}, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {"ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}}, "df": 1}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.UniquenessArgs.unique_expressions": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 2, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.UniquenessArgs.unique_expressions": {"tf": 1}, "ultk.language.grammar.UniquenessArgs.key": {"tf": 1}, "ultk.language.grammar.UniquenessArgs.compare_func": {"tf": 1}}, "df": 4}}}}}}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.language.Language.universe": {"tf": 1}, "ultk.language.semantics.Universe": {"tf": 1}, "ultk.language.semantics.Universe.__init__": {"tf": 1}, "ultk.language.semantics.Universe.referents": {"tf": 1}, "ultk.language.semantics.Universe.set_prior": {"tf": 1}, "ultk.language.semantics.Universe.prior_numpy": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}, "ultk.language.semantics.Universe.from_csv": {"tf": 1}, "ultk.language.semantics.Meaning.universe": {"tf": 1}}, "df": 9}}}}}}}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {"ultk.language.sampling.upto_comb": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "m": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.agent": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.language": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.shape": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.referent_to_index": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_referent": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.expression_to_index": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_expression": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.Speaker": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Speaker.S": {"tf": 1}, "ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Listener": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.R": {"tf": 1}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.S": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.R": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.S": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.R": {"tf": 1}, "ultk.effcomm.agent.BayesianListener": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.analysis": {"tf": 1}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.information": {"tf": 1}, "ultk.effcomm.information.information_rate": {"tf": 1}, "ultk.effcomm.information.get_rd_curve": {"tf": 1}, "ultk.effcomm.information.expected_distortion": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.ib_complexity": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.effcomm.information.ib_accuracy": {"tf": 1}, "ultk.effcomm.information.ib_distortion": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}, "ultk.effcomm.informativity": {"tf": 1}, "ultk.effcomm.informativity.indicator_utility": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.informativity.communicative_success": {"tf": 1}, "ultk.effcomm.optimization": {"tf": 1}, "ultk.effcomm.optimization.Mutation": {"tf": 1}, "ultk.effcomm.optimization.Mutation.precondition": {"tf": 1}, "ultk.effcomm.optimization.Mutation.mutate": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.precondition": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.AddExpression": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.precondition": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.objectives": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.expressions": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutations": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_size": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.max_mutations": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.generations": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.lang_size": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.dominating_languages": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.explored_languages": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}, "ultk.effcomm.sampling": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.effcomm.tradeoff": {"tf": 1}, "ultk.effcomm.tradeoff.dominates": {"tf": 1}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.effcomm.util": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.effcomm.util.build_utility_matrix": {"tf": 1}, "ultk.effcomm.util.PRECISION": {"tf": 1}, "ultk.effcomm.util.marginal": {"tf": 1}, "ultk.effcomm.util.conditional": {"tf": 1}, "ultk.effcomm.util.joint": {"tf": 1}, "ultk.effcomm.util.marginalize": {"tf": 1}, "ultk.effcomm.util.bayes": {"tf": 1}, "ultk.effcomm.util.xlogx": {"tf": 1}, "ultk.effcomm.util.H": {"tf": 1}, "ultk.effcomm.util.MI": {"tf": 1}, "ultk.effcomm.util.DKL": {"tf": 1}, "ultk.effcomm.util.gNID": {"tf": 1}}, "df": 111}}}}}}, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.language.Expression.can_express": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.expression_to_index": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_expression": {"tf": 1}, "ultk.language.language.Expression": {"tf": 1}, "ultk.language.language.Expression.__init__": {"tf": 1}, "ultk.language.language.Expression.form": {"tf": 1}, "ultk.language.language.Expression.meaning": {"tf": 1}, "ultk.language.language.Expression.can_express": {"tf": 1}, "ultk.language.language.Expression.to_dict": {"tf": 1}, "ultk.language.language.Language.add_expression": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1}}, "df": 10, "s": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.expressions": {"tf": 1}, "ultk.language.grammar.UniquenessArgs.unique_expressions": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.language.Language.expressions": {"tf": 1}, "ultk.language.sampling.all_expressions": {"tf": 1}}, "df": 5}}}}}}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.information.expected_distortion": {"tf": 1}}, "df": 1}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.explored_languages": {"tf": 1}}, "df": 1}}}}}}}, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}}, "df": 2}}}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 3}}}}}}}}, "v": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.objectives": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.expressions": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutations": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_size": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.max_mutations": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.generations": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.lang_size": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.dominating_languages": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.explored_languages": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1}}, "df": 14}}}}}}}}}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.GrammaticalExpression.evaluate": {"tf": 1}}, "df": 1}}}}}}}}, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.agent": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.language": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.shape": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.referent_to_index": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_referent": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.expression_to_index": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_expression": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.Speaker": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Speaker.S": {"tf": 1}, "ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Listener": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.R": {"tf": 1}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.S": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.R": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.S": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.R": {"tf": 1}, "ultk.effcomm.agent.BayesianListener": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}}, "df": 37}}}, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.language.aggregate_expression_complexity": {"tf": 1}}, "df": 1}}}}}}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.analysis": {"tf": 1}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}}, "df": 5}}}}}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1}}}}}}, "c": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.information.ib_accuracy": {"tf": 1}}, "df": 1}}}}}}}, "d": {"docs": {}, "df": 0, "d": {"docs": {"ultk.language.grammar.GrammaticalExpression.add_child": {"tf": 1}, "ultk.language.grammar.Grammar.add_rule": {"tf": 1}, "ultk.language.language.Language.add_expression": {"tf": 1}}, "df": 3, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.optimization.AddExpression": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.precondition": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.mutate": {"tf": 1}}, "df": 3}}}}}}}}}}}}, "t": {"docs": {"ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1}}, "df": 1}, "l": {"docs": {}, "df": 0, "l": {"docs": {"ultk.language.grammar.Grammar.get_all_rules": {"tf": 1}, "ultk.language.sampling.all_meanings": {"tf": 1}, "ultk.language.sampling.all_expressions": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 5}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "m": {"docs": {"ultk.effcomm.information.ib_comm_cost": {"tf": 1}}, "df": 1, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.informativity.communicative_success": {"tf": 1}}, "df": 1, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.agent.CommunicativeAgent": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.language": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.shape": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.referent_to_index": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_referent": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.expression_to_index": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_expression": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}}, "df": 14}}}}}}}}}}}}}}}, "p": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.information.compute_rate_distortion": {"tf": 1}}, "df": 1}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.information.ib_complexity": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1}}, "df": 2}}}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.UniquenessArgs.compare_func": {"tf": 1}}, "df": 1}}}}, "b": {"docs": {"ultk.language.sampling.upto_comb": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.sampling.random_combination_vocabulary": {"tf": 1}}, "df": 1}}}}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.information.ib_comm_cost": {"tf": 1}}, "df": 1}}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.util.conditional": {"tf": 1}}, "df": 1}}}}}}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.information.get_rd_curve": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}}, "df": 2}}}}, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"ultk.language.grammar.GrammaticalExpression.add_child": {"tf": 1}}, "df": 1, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.grammar.GrammaticalExpression.children": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.language.Expression.can_express": {"tf": 1}}, "df": 1}}, "s": {"docs": {}, "df": 0, "v": {"docs": {"ultk.language.semantics.Universe.from_csv": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.language.grammar.Rule.__init__": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.__init__": {"tf": 1}, "ultk.language.grammar.Grammar.__init__": {"tf": 1}, "ultk.language.language.Expression.__init__": {"tf": 1}, "ultk.language.language.Language.__init__": {"tf": 1}, "ultk.language.semantics.Referent.__init__": {"tf": 1}, "ultk.language.semantics.Universe.__init__": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 17, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}}, "df": 1}}}}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.referent_to_index": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_referent": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.expression_to_index": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_expression": {"tf": 1}}, "df": 4}}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.informativity.indicator_utility": {"tf": 1}}, "df": 1}}}}}}}, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.information": {"tf": 1}, "ultk.effcomm.information.information_rate": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_rd_curve": {"tf": 1}, "ultk.effcomm.information.expected_distortion": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.ib_complexity": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.effcomm.information.ib_accuracy": {"tf": 1}, "ultk.effcomm.information.ib_distortion": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}}, "df": 16}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.informativity": {"tf": 1}, "ultk.effcomm.informativity.indicator_utility": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.communicative_success": {"tf": 1}}, "df": 5}}}}}}}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}}, "df": 1}}}}}}}}}}, "b": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.ib_complexity": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.effcomm.information.ib_accuracy": {"tf": 1}, "ultk.effcomm.information.ib_distortion": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}}, "df": 9}, "s": {"docs": {"ultk.language.grammar.Rule.is_terminal": {"tf": 1}, "ultk.language.language.Language.is_natural": {"tf": 1}}, "df": 2}, "d": {"docs": {"ultk.language.sampling.rename_id": {"tf": 1}}, "df": 1}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.lang_size": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1}}, "df": 2, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.language": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.language": {"tf": 1}, "ultk.language.grammar": {"tf": 1}, "ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.grammar.Rule.__init__": {"tf": 1}, "ultk.language.grammar.Rule.lhs": {"tf": 1}, "ultk.language.grammar.Rule.rhs": {"tf": 1}, "ultk.language.grammar.Rule.func": {"tf": 1}, "ultk.language.grammar.Rule.name": {"tf": 1}, "ultk.language.grammar.Rule.weight": {"tf": 1}, "ultk.language.grammar.Rule.is_terminal": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.__init__": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.rule_name": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.func": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.children": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.evaluate": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.add_child": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.to_dict": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.UniquenessArgs.unique_expressions": {"tf": 1}, "ultk.language.grammar.UniquenessArgs.key": {"tf": 1}, "ultk.language.grammar.UniquenessArgs.compare_func": {"tf": 1}, "ultk.language.grammar.Grammar": {"tf": 1}, "ultk.language.grammar.Grammar.__init__": {"tf": 1}, "ultk.language.grammar.Grammar.add_rule": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.grammar.Grammar.generate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.grammar.Grammar.get_all_rules": {"tf": 1}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1}, "ultk.language.language": {"tf": 1.4142135623730951}, "ultk.language.language.Expression": {"tf": 1.4142135623730951}, "ultk.language.language.Expression.__init__": {"tf": 1.4142135623730951}, "ultk.language.language.Expression.form": {"tf": 1.4142135623730951}, "ultk.language.language.Expression.meaning": {"tf": 1.4142135623730951}, "ultk.language.language.Expression.can_express": {"tf": 1.4142135623730951}, "ultk.language.language.Expression.to_dict": {"tf": 1.4142135623730951}, "ultk.language.language.Language": {"tf": 1.7320508075688772}, "ultk.language.language.Language.__init__": {"tf": 1.7320508075688772}, "ultk.language.language.Language.expressions": {"tf": 1.7320508075688772}, "ultk.language.language.Language.universe": {"tf": 1.7320508075688772}, "ultk.language.language.Language.add_expression": {"tf": 1.7320508075688772}, "ultk.language.language.Language.pop": {"tf": 1.7320508075688772}, "ultk.language.language.Language.is_natural": {"tf": 1.7320508075688772}, "ultk.language.language.Language.degree_property": {"tf": 1.7320508075688772}, "ultk.language.language.Language.binary_matrix": {"tf": 1.7320508075688772}, "ultk.language.language.Language.to_dict": {"tf": 1.7320508075688772}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1.4142135623730951}, "ultk.language.sampling": {"tf": 1}, "ultk.language.sampling.powerset": {"tf": 1}, "ultk.language.sampling.all_meanings": {"tf": 1}, "ultk.language.sampling.all_expressions": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.upto_comb": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.rename_id": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1}, "ultk.language.semantics": {"tf": 1}, "ultk.language.semantics.Referent": {"tf": 1}, "ultk.language.semantics.Referent.__init__": {"tf": 1}, "ultk.language.semantics.Referent.name": {"tf": 1}, "ultk.language.semantics.Referent.to_dict": {"tf": 1}, "ultk.language.semantics.Universe": {"tf": 1}, "ultk.language.semantics.Universe.__init__": {"tf": 1}, "ultk.language.semantics.Universe.referents": {"tf": 1}, "ultk.language.semantics.Universe.set_prior": {"tf": 1}, "ultk.language.semantics.Universe.prior_numpy": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}, "ultk.language.semantics.Universe.from_csv": {"tf": 1}, "ultk.language.semantics.Meaning": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}, "ultk.language.semantics.Meaning.referents": {"tf": 1}, "ultk.language.semantics.Meaning.universe": {"tf": 1}, "ultk.language.semantics.Meaning.to_dict": {"tf": 1}}, "df": 84, "s": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.dominating_languages": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.explored_languages": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 7}}}}}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.Listener": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.R": {"tf": 1}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}}, "df": 4}}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.S": {"tf": 1}}, "df": 3}}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.R": {"tf": 1}}, "df": 3}}}}}}}}}}}}}}, "h": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.grammar.Rule.lhs": {"tf": 1}}, "df": 1}}}, "s": {"docs": {"ultk.effcomm.agent.Speaker.S": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.S": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.S": {"tf": 1}}, "df": 3, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.shape": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}}, "df": 2}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_size": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}}, "df": 6}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.sampling": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.language.sampling": {"tf": 1}, "ultk.language.sampling.powerset": {"tf": 1}, "ultk.language.sampling.all_meanings": {"tf": 1}, "ultk.language.sampling.all_expressions": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.upto_comb": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.rename_id": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1}}, "df": 15}}}}}}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.Speaker": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Speaker.S": {"tf": 1}, "ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1}}, "df": 4}}}}}}, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.informativity.communicative_success": {"tf": 1}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.sample_size": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.lang_size": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1}}, "df": 3}}}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.semantics": {"tf": 1}, "ultk.language.semantics.Referent": {"tf": 1}, "ultk.language.semantics.Referent.__init__": {"tf": 1}, "ultk.language.semantics.Referent.name": {"tf": 1}, "ultk.language.semantics.Referent.to_dict": {"tf": 1}, "ultk.language.semantics.Universe": {"tf": 1}, "ultk.language.semantics.Universe.__init__": {"tf": 1}, "ultk.language.semantics.Universe.referents": {"tf": 1}, "ultk.language.semantics.Universe.set_prior": {"tf": 1}, "ultk.language.semantics.Universe.prior_numpy": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}, "ultk.language.semantics.Universe.from_csv": {"tf": 1}, "ultk.language.semantics.Meaning": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}, "ultk.language.semantics.Meaning.referents": {"tf": 1}, "ultk.language.semantics.Meaning.universe": {"tf": 1}, "ultk.language.semantics.Meaning.to_dict": {"tf": 1}}, "df": 17}}}}}}}, "t": {"docs": {"ultk.language.semantics.Universe.set_prior": {"tf": 1}}, "df": 1}}}, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.grammar.Rule.weight": {"tf": 1}}, "df": 1, "s": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}, "ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}}, "df": 5}}}}}}}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}}, "df": 3}}}}}}}}, "n": {"docs": {"ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.Rule.name": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.rule_name": {"tf": 1}, "ultk.language.semantics.Referent.name": {"tf": 1}}, "df": 3}}, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.language.language.Language.is_natural": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}}, "df": 2}}}}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "y": {"docs": {"ultk.language.semantics.Universe.prior_numpy": {"tf": 1}}, "df": 1}}}}}, "r": {"docs": {"ultk.effcomm.agent.Listener.R": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.R": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.R": {"tf": 1}}, "df": 3, "e": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.referent_to_index": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_referent": {"tf": 1}, "ultk.language.semantics.Referent": {"tf": 1}, "ultk.language.semantics.Referent.__init__": {"tf": 1}, "ultk.language.semantics.Referent.name": {"tf": 1}, "ultk.language.semantics.Referent.to_dict": {"tf": 1}}, "df": 6, "s": {"docs": {"ultk.language.semantics.Universe.referents": {"tf": 1}, "ultk.language.semantics.Meaning.referents": {"tf": 1}}, "df": 2}}}}}}}, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.optimization.RemoveExpression": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.precondition": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.mutate": {"tf": 1}}, "df": 3}}}}}}}}}}}}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.sampling.rename_id": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.information.information_rate": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1}}, "df": 2}}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {"ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1}}, "df": 2}}}}}, "d": {"docs": {"ultk.effcomm.information.get_rd_curve": {"tf": 1}}, "df": 1}, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.grammar.Rule.__init__": {"tf": 1}, "ultk.language.grammar.Rule.lhs": {"tf": 1}, "ultk.language.grammar.Rule.rhs": {"tf": 1}, "ultk.language.grammar.Rule.func": {"tf": 1}, "ultk.language.grammar.Rule.name": {"tf": 1}, "ultk.language.grammar.Rule.weight": {"tf": 1}, "ultk.language.grammar.Rule.is_terminal": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.rule_name": {"tf": 1}, "ultk.language.grammar.Grammar.add_rule": {"tf": 1}}, "df": 10, "s": {"docs": {"ultk.language.grammar.Grammar.get_all_rules": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.grammar.Rule.rhs": {"tf": 1}}, "df": 1}}}, "t": {"docs": {}, "df": 0, "o": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.referent_to_index": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_referent": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.expression_to_index": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_expression": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.to_dict": {"tf": 1}, "ultk.language.language.Expression.to_dict": {"tf": 1}, "ultk.language.language.Language.to_dict": {"tf": 1}, "ultk.language.semantics.Referent.to_dict": {"tf": 1}, "ultk.language.semantics.Meaning.to_dict": {"tf": 1}}, "df": 14}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}}, "df": 2, "o": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "f": {"docs": {"ultk.effcomm.tradeoff": {"tf": 1}, "ultk.effcomm.tradeoff.dominates": {"tf": 1}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1.4142135623730951}}, "df": 7}}}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.language.grammar.Rule.is_terminal": {"tf": 1}}, "df": 1}}}}}}}}, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.S": {"tf": 1}}, "df": 3}}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.PragmaticListener": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.R": {"tf": 1}}, "df": 3}}}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.optimization.Mutation.precondition": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.precondition": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.precondition": {"tf": 1}}, "df": 3}}}}}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.util.PRECISION": {"tf": 1}}, "df": 1}}}}}}}, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"ultk.language.language.Language.degree_property": {"tf": 1}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"ultk.language.semantics.Universe.set_prior": {"tf": 1}, "ultk.language.semantics.Universe.prior_numpy": {"tf": 1}}, "df": 2}}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 1}}, "df": 1}}}}}}, "o": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}}, "df": 1}}}, "p": {"docs": {"ultk.language.language.Language.pop": {"tf": 1}}, "df": 1}, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.sampling.powerset": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.optimization.sample_parents": {"tf": 1}}, "df": 1}}}, "t": {"docs": {}, "df": 0, "o": {"docs": {"ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}}, "df": 2}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.Grammar.parse": {"tf": 1}}, "df": 1}}}}}, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.util.bayes": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.BayesianListener": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}}, "df": 2}}}}}}}}}}}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 1}}}}}}}}}, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.util.build_utility_matrix": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"ultk.language.language.Language.binary_matrix": {"tf": 1}}, "df": 1}}}}}}, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.information.get_rd_curve": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.grammar.Grammar.get_all_rules": {"tf": 1}}, "df": 7}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.generations": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {"ultk.language.grammar.Grammar.generate": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 2}}}}}}}, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.util.gNID": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {"ultk.language.grammar": {"tf": 1}, "ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.grammar.Rule.__init__": {"tf": 1}, "ultk.language.grammar.Rule.lhs": {"tf": 1}, "ultk.language.grammar.Rule.rhs": {"tf": 1}, "ultk.language.grammar.Rule.func": {"tf": 1}, "ultk.language.grammar.Rule.name": {"tf": 1}, "ultk.language.grammar.Rule.weight": {"tf": 1}, "ultk.language.grammar.Rule.is_terminal": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.__init__": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.rule_name": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.func": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.children": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.evaluate": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.add_child": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.to_dict": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.UniquenessArgs.unique_expressions": {"tf": 1}, "ultk.language.grammar.UniquenessArgs.key": {"tf": 1}, "ultk.language.grammar.UniquenessArgs.compare_func": {"tf": 1}, "ultk.language.grammar.Grammar": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.__init__": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.add_rule": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.parse": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.generate": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.get_all_rules": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1.4142135623730951}}, "df": 32}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.__init__": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.rule_name": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.func": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.children": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.evaluate": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.add_child": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.to_dict": {"tf": 1}}, "df": 9}}}}}}}}}}}}}}}}}}}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}}, "df": 1, "f": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}}, "df": 2}}}}}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.information.expected_distortion": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.ib_distortion": {"tf": 1}}, "df": 3}}}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}}, "df": 1}}}}}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.grammar.GrammaticalExpression.to_dict": {"tf": 1}, "ultk.language.language.Expression.to_dict": {"tf": 1}, "ultk.language.language.Language.to_dict": {"tf": 1}, "ultk.language.semantics.Referent.to_dict": {"tf": 1}, "ultk.language.semantics.Meaning.to_dict": {"tf": 1}}, "df": 5}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}}, "df": 2}}}}}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1}}, "df": 1}}}, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.language.Language.degree_property": {"tf": 1}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.dominating_languages": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.tradeoff.dominates": {"tf": 1}}, "df": 1}, "d": {"docs": {"ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}}, "df": 1}}}}}}}}, "k": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.util.DKL": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "f": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}}, "df": 2}}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 1}}, "df": 2}}, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.optimization": {"tf": 1}, "ultk.effcomm.optimization.Mutation": {"tf": 1}, "ultk.effcomm.optimization.Mutation.precondition": {"tf": 1}, "ultk.effcomm.optimization.Mutation.mutate": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.precondition": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.AddExpression": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.precondition": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.objectives": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.expressions": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutations": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_size": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.max_mutations": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.generations": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.lang_size": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.dominating_languages": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.explored_languages": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}}, "df": 25}}}}}}}}}}}, "b": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.objectives": {"tf": 1}}, "df": 1}}}}}}}}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 1}}, "df": 1}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.language.language.Expression.meaning": {"tf": 1}, "ultk.language.semantics.Meaning": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}, "ultk.language.semantics.Meaning.referents": {"tf": 1}, "ultk.language.semantics.Meaning.universe": {"tf": 1}, "ultk.language.semantics.Meaning.to_dict": {"tf": 1}}, "df": 6, "s": {"docs": {"ultk.language.sampling.all_meanings": {"tf": 1}}, "df": 1}}}}}}}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.optimization.Mutation": {"tf": 1}, "ultk.effcomm.optimization.Mutation.precondition": {"tf": 1}, "ultk.effcomm.optimization.Mutation.mutate": {"tf": 1}}, "df": 3, "s": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.mutations": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.max_mutations": {"tf": 1}}, "df": 2}}}}, "e": {"docs": {"ultk.effcomm.optimization.Mutation.mutate": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1}}, "df": 4, "d": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "x": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.max_mutations": {"tf": 1}}, "df": 1}, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "x": {"docs": {"ultk.effcomm.util.build_utility_matrix": {"tf": 1}, "ultk.language.language.Language.binary_matrix": {"tf": 1}}, "df": 2}}}}, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.util.marginal": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.util.marginalize": {"tf": 1}}, "df": 1}}}}}}}}}}, "i": {"docs": {"ultk.effcomm.util.MI": {"tf": 1}}, "df": 1, "n": {"docs": {"ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}}, "df": 1}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}}, "df": 1}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {"ultk.language.grammar.Rule.func": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.func": {"tf": 1}, "ultk.language.grammar.UniquenessArgs.compare_func": {"tf": 1}}, "df": 3}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {"ultk.language.grammar.Grammar.from_yaml": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}, "ultk.language.semantics.Universe.from_csv": {"tf": 1}}, "df": 3}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {"ultk.language.language.Expression.form": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {"ultk.effcomm.util.H": {"tf": 1}}, "df": 1, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}}, "df": 1}}}}}}}}}}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}}, "df": 1}}}}}}}, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"ultk.language.sampling.random_combination_vocabulary": {"tf": 1}}, "df": 1}}}}}}}}}}, "z": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {"ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}}, "df": 1}}}}, "j": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.util.joint": {"tf": 1}}, "df": 1}}}}}, "x": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "x": {"docs": {"ultk.effcomm.util.xlogx": {"tf": 1}}, "df": 1}}}}}, "y": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "l": {"docs": {"ultk.language.grammar.Grammar.from_yaml": {"tf": 1}}, "df": 1}}}}, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "y": {"docs": {"ultk.language.grammar.UniquenessArgs.key": {"tf": 1}}, "df": 1}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {"ultk.language.sampling.sample_quasi_natural": {"tf": 1}}, "df": 1}}}}}}}, "annotation": {"root": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.weights": {"tf": 1}, "ultk.effcomm.agent.Speaker.S": {"tf": 1}, "ultk.effcomm.agent.Listener.R": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.S": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.R": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.S": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.R": {"tf": 1}, "ultk.language.grammar.UniquenessArgs.unique_expressions": {"tf": 1}, "ultk.language.grammar.UniquenessArgs.key": {"tf": 1}, "ultk.language.grammar.UniquenessArgs.compare_func": {"tf": 1}, "ultk.language.language.Language.expressions": {"tf": 1.4142135623730951}, "ultk.language.language.Language.universe": {"tf": 1}}, "df": 12, "n": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.weights": {"tf": 1}, "ultk.effcomm.agent.Speaker.S": {"tf": 1}, "ultk.effcomm.agent.Listener.R": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.S": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.R": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.S": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.R": {"tf": 1}}, "df": 7}}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.weights": {"tf": 1}, "ultk.effcomm.agent.Speaker.S": {"tf": 1}, "ultk.effcomm.agent.Listener.R": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.S": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.R": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.S": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.R": {"tf": 1}}, "df": 7}}}}}}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "[": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.language.grammar.UniquenessArgs.unique_expressions": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "y": {"docs": {"ultk.language.grammar.UniquenessArgs.unique_expressions": {"tf": 1.4142135623730951}, "ultk.language.grammar.UniquenessArgs.key": {"tf": 1}}, "df": 2}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "k": {"docs": {"ultk.language.grammar.UniquenessArgs.unique_expressions": {"tf": 1}, "ultk.language.grammar.UniquenessArgs.compare_func": {"tf": 1}, "ultk.language.language.Language.universe": {"tf": 1}}, "df": 3}}}, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.language.Language.universe": {"tf": 1}}, "df": 1}}}}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.UniquenessArgs.unique_expressions": {"tf": 1}, "ultk.language.grammar.UniquenessArgs.key": {"tf": 1}, "ultk.language.grammar.UniquenessArgs.compare_func": {"tf": 1.4142135623730951}, "ultk.language.language.Language.expressions": {"tf": 1.4142135623730951}, "ultk.language.language.Language.universe": {"tf": 1}}, "df": 5}}}}}}}}, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {"ultk.language.grammar.UniquenessArgs.unique_expressions": {"tf": 1}, "ultk.language.grammar.UniquenessArgs.key": {"tf": 1}, "ultk.language.grammar.UniquenessArgs.compare_func": {"tf": 1.4142135623730951}}, "df": 3}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.grammar.UniquenessArgs.unique_expressions": {"tf": 1}, "ultk.language.grammar.UniquenessArgs.key": {"tf": 1}, "ultk.language.grammar.UniquenessArgs.compare_func": {"tf": 1.4142135623730951}}, "df": 3}}}}}}}}}}}}}}}}}}}}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "[": {"docs": {}, "df": 0, "[": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "k": {"docs": {"ultk.language.grammar.UniquenessArgs.key": {"tf": 1}, "ultk.language.grammar.UniquenessArgs.compare_func": {"tf": 1}}, "df": 2}}}}}}}}}}}}}}, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"ultk.language.grammar.UniquenessArgs.compare_func": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "[": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "k": {"docs": {"ultk.language.language.Language.expressions": {"tf": 1}}, "df": 1}}}}}}}}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.language.Language.expressions": {"tf": 1}}, "df": 1}}}}}}}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.language.Language.universe": {"tf": 1}}, "df": 1}}}}}}}}}}}, "default_value": {"root": {"1": {"6": {"docs": {"ultk.effcomm.util.PRECISION": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.util.PRECISION": {"tf": 1}}, "df": 1}}, "docs": {}, "df": 0}}, "signature": {"root": {"0": {"5": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1}, "docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1.4142135623730951}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1.7320508075688772}, "ultk.language.grammar.Rule.__init__": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1}}, "df": 10}, "1": {"0": {"0": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.effcomm.util.marginal": {"tf": 1}, "ultk.language.grammar.Rule.__init__": {"tf": 1}}, "df": 7, "e": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1}}, "2": {"0": {"0": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "3": {"9": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 2}, "ultk.effcomm.analysis.get_dataframe": {"tf": 2.449489742783178}, "ultk.effcomm.information.get_ib_curve": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 2}, "ultk.language.grammar.Grammar.parse": {"tf": 2.449489742783178}, "ultk.language.sampling.random_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.sample_lang_size": {"tf": 1.4142135623730951}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1.4142135623730951}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1.4142135623730951}}, "df": 12}, "docs": {}, "df": 0}, "5": {"0": {"0": {"0": {"docs": {"ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "8": {"docs": {"ultk.language.grammar.Grammar.enumerate": {"tf": 1}}, "df": 1}, "docs": {"ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 5.477225575051661}, "ultk.effcomm.agent.CommunicativeAgent.normalized_weights": {"tf": 3.4641016151377544}, "ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 6.324555320336759}, "ultk.effcomm.agent.CommunicativeAgent.referent_to_index": {"tf": 5.656854249492381}, "ultk.effcomm.agent.CommunicativeAgent.index_to_referent": {"tf": 5.656854249492381}, "ultk.effcomm.agent.CommunicativeAgent.expression_to_index": {"tf": 5.656854249492381}, "ultk.effcomm.agent.CommunicativeAgent.index_to_expression": {"tf": 5.656854249492381}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 6.244997998398398}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 4.47213595499958}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 8.717797887081348}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 5.477225575051661}, "ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 4}, "ultk.effcomm.agent.Listener.__init__": {"tf": 5.477225575051661}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 4}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 5.477225575051661}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 5.477225575051661}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 8.246211251235321}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 8.12403840463596}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 7.280109889280518}, "ultk.effcomm.analysis.get_dataframe": {"tf": 10.770329614269007}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 7.3484692283495345}, "ultk.effcomm.analysis.trade_off_means": {"tf": 7.681145747868608}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 7.681145747868608}, "ultk.effcomm.information.information_rate": {"tf": 5.656854249492381}, "ultk.effcomm.information.get_rd_curve": {"tf": 7.810249675906654}, "ultk.effcomm.information.expected_distortion": {"tf": 6.855654600401044}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 5.385164807134504}, "ultk.effcomm.information.blahut_arimoto": {"tf": 9.643650760992955}, "ultk.effcomm.information.get_ib_curve": {"tf": 9.899494936611665}, "ultk.effcomm.information.get_bottleneck": {"tf": 8.94427190999916}, "ultk.effcomm.information.ib_complexity": {"tf": 6.324555320336759}, "ultk.effcomm.information.ib_informativity": {"tf": 7.416198487095663}, "ultk.effcomm.information.ib_comm_cost": {"tf": 7.416198487095663}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 7.483314773547883}, "ultk.effcomm.information.ib_accuracy": {"tf": 6.855654600401044}, "ultk.effcomm.information.ib_distortion": {"tf": 6.855654600401044}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 8.426149773176359}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 7.14142842854285}, "ultk.effcomm.informativity.indicator_utility": {"tf": 7.0710678118654755}, "ultk.effcomm.informativity.informativity": {"tf": 11}, "ultk.effcomm.informativity.communicative_success": {"tf": 10.535653752852738}, "ultk.effcomm.optimization.Mutation.precondition": {"tf": 5.830951894845301}, "ultk.effcomm.optimization.Mutation.mutate": {"tf": 8.602325267042627}, "ultk.effcomm.optimization.RemoveExpression.precondition": {"tf": 5.830951894845301}, "ultk.effcomm.optimization.RemoveExpression.mutate": {"tf": 8.602325267042627}, "ultk.effcomm.optimization.AddExpression.precondition": {"tf": 5.830951894845301}, "ultk.effcomm.optimization.AddExpression.mutate": {"tf": 8.602325267042627}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 10.908712114635714}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 8.888194417315589}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"tf": 7.483314773547883}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 6.782329983125268}, "ultk.effcomm.optimization.sample_parents": {"tf": 9.273618495495704}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 9.797958971132712}, "ultk.effcomm.tradeoff.dominates": {"tf": 5.830951894845301}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 5.830951894845301}, "ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 10.392304845413264}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 6.164414002968976}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 8.246211251235321}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 12.649110640673518}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 4.898979485566356}, "ultk.effcomm.util.build_utility_matrix": {"tf": 9}, "ultk.effcomm.util.marginal": {"tf": 4.242640687119285}, "ultk.effcomm.util.conditional": {"tf": 3.1622776601683795}, "ultk.effcomm.util.joint": {"tf": 3.7416573867739413}, "ultk.effcomm.util.marginalize": {"tf": 3.7416573867739413}, "ultk.effcomm.util.bayes": {"tf": 3.7416573867739413}, "ultk.effcomm.util.xlogx": {"tf": 3.1622776601683795}, "ultk.effcomm.util.H": {"tf": 4.242640687119285}, "ultk.effcomm.util.MI": {"tf": 3.1622776601683795}, "ultk.effcomm.util.DKL": {"tf": 4.69041575982343}, "ultk.effcomm.util.gNID": {"tf": 4.242640687119285}, "ultk.language.grammar.Rule.__init__": {"tf": 9.273618495495704}, "ultk.language.grammar.Rule.is_terminal": {"tf": 3.4641016151377544}, "ultk.language.grammar.GrammaticalExpression.__init__": {"tf": 9.38083151964686}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 3.4641016151377544}, "ultk.language.grammar.GrammaticalExpression.evaluate": {"tf": 6.782329983125268}, "ultk.language.grammar.GrammaticalExpression.add_child": {"tf": 4}, "ultk.language.grammar.GrammaticalExpression.to_dict": {"tf": 3.4641016151377544}, "ultk.language.grammar.Grammar.__init__": {"tf": 3.4641016151377544}, "ultk.language.grammar.Grammar.add_rule": {"tf": 5.477225575051661}, "ultk.language.grammar.Grammar.parse": {"tf": 9.219544457292887}, "ultk.language.grammar.Grammar.generate": {"tf": 6.164414002968976}, "ultk.language.grammar.Grammar.enumerate": {"tf": 10.099504938362077}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 10.488088481701515}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 12.529964086141668}, "ultk.language.grammar.Grammar.get_all_rules": {"tf": 5.385164807134504}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 4.242640687119285}, "ultk.language.language.Expression.__init__": {"tf": 7.483314773547883}, "ultk.language.language.Expression.can_express": {"tf": 5.656854249492381}, "ultk.language.language.Expression.to_dict": {"tf": 3.4641016151377544}, "ultk.language.language.Language.__init__": {"tf": 6.48074069840786}, "ultk.language.language.Language.add_expression": {"tf": 5.477225575051661}, "ultk.language.language.Language.pop": {"tf": 5.656854249492381}, "ultk.language.language.Language.is_natural": {"tf": 3.4641016151377544}, "ultk.language.language.Language.degree_property": {"tf": 6.6332495807108}, "ultk.language.language.Language.binary_matrix": {"tf": 4}, "ultk.language.language.Language.to_dict": {"tf": 4.242640687119285}, "ultk.language.language.aggregate_expression_complexity": {"tf": 10.099504938362077}, "ultk.language.sampling.powerset": {"tf": 5.477225575051661}, "ultk.language.sampling.all_meanings": {"tf": 7.483314773547883}, "ultk.language.sampling.all_expressions": {"tf": 7.810249675906654}, "ultk.language.sampling.all_languages": {"tf": 8.888194417315589}, "ultk.language.sampling.upto_comb": {"tf": 4.898979485566356}, "ultk.language.sampling.random_languages": {"tf": 10.04987562112089}, "ultk.language.sampling.generate_languages": {"tf": 13.892443989449804}, "ultk.language.sampling.sample_lang_size": {"tf": 11.40175425099138}, "ultk.language.sampling.sample_quasi_natural": {"tf": 12.12435565298214}, "ultk.language.sampling.rename_id": {"tf": 4.898979485566356}, "ultk.language.sampling.enumerate_all_languages": {"tf": 14.177446878757825}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 10.816653826391969}, "ultk.language.semantics.Referent.__init__": {"tf": 5.744562646538029}, "ultk.language.semantics.Referent.to_dict": {"tf": 3.4641016151377544}, "ultk.language.semantics.Universe.__init__": {"tf": 7.416198487095663}, "ultk.language.semantics.Universe.set_prior": {"tf": 5.291502622129181}, "ultk.language.semantics.Universe.prior_numpy": {"tf": 4}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 5.477225575051661}, "ultk.language.semantics.Universe.from_csv": {"tf": 4.242640687119285}, "ultk.language.semantics.Meaning.__init__": {"tf": 8.717797887081348}, "ultk.language.semantics.Meaning.to_dict": {"tf": 3.4641016151377544}}, "df": 119, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.sample_lang_size": {"tf": 1.4142135623730951}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1.4142135623730951}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 5, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 2}, "ultk.effcomm.agent.CommunicativeAgent.referent_to_index": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_referent": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.expression_to_index": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.index_to_expression": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 2}, "ultk.effcomm.agent.Listener.__init__": {"tf": 2}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 2}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 2}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 2}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 2}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1.7320508075688772}, "ultk.effcomm.information.ib_complexity": {"tf": 2}, "ultk.effcomm.information.ib_informativity": {"tf": 2}, "ultk.effcomm.information.ib_comm_cost": {"tf": 2}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 2}, "ultk.effcomm.informativity.indicator_utility": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.informativity": {"tf": 2.449489742783178}, "ultk.effcomm.informativity.communicative_success": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.Mutation.precondition": {"tf": 2}, "ultk.effcomm.optimization.Mutation.mutate": {"tf": 3}, "ultk.effcomm.optimization.RemoveExpression.precondition": {"tf": 2}, "ultk.effcomm.optimization.RemoveExpression.mutate": {"tf": 3}, "ultk.effcomm.optimization.AddExpression.precondition": {"tf": 2}, "ultk.effcomm.optimization.AddExpression.mutate": {"tf": 3}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 2.23606797749979}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 2.449489742783178}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"tf": 2.449489742783178}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 2.6457513110645907}, "ultk.effcomm.optimization.sample_parents": {"tf": 3}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1.7320508075688772}, "ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 3}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 3}, "ultk.effcomm.util.build_utility_matrix": {"tf": 1.7320508075688772}, "ultk.language.grammar.GrammaticalExpression.__init__": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.evaluate": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.add_rule": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.grammar.Grammar.generate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 2}, "ultk.language.grammar.Grammar.get_all_rules": {"tf": 1}, "ultk.language.language.Expression.__init__": {"tf": 1}, "ultk.language.language.Expression.can_express": {"tf": 1}, "ultk.language.language.Language.__init__": {"tf": 1.4142135623730951}, "ultk.language.language.Language.add_expression": {"tf": 1.4142135623730951}, "ultk.language.language.Language.pop": {"tf": 1.4142135623730951}, "ultk.language.language.Language.degree_property": {"tf": 1.4142135623730951}, "ultk.language.language.aggregate_expression_complexity": {"tf": 2.449489742783178}, "ultk.language.sampling.all_meanings": {"tf": 1.4142135623730951}, "ultk.language.sampling.all_expressions": {"tf": 1.7320508075688772}, "ultk.language.sampling.all_languages": {"tf": 3.4641016151377544}, "ultk.language.sampling.random_languages": {"tf": 3.4641016151377544}, "ultk.language.sampling.generate_languages": {"tf": 2.8284271247461903}, "ultk.language.sampling.sample_lang_size": {"tf": 3}, "ultk.language.sampling.sample_quasi_natural": {"tf": 2.8284271247461903}, "ultk.language.sampling.enumerate_all_languages": {"tf": 2.8284271247461903}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 2.6457513110645907}, "ultk.language.semantics.Universe.__init__": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1.4142135623730951}}, "df": 62, "s": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1.4142135623730951}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}}, "df": 6}}}}}}}, "m": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {"ultk.language.grammar.Rule.__init__": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 2}}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1.7320508075688772}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.information.get_rd_curve": {"tf": 1}, "ultk.effcomm.optimization.Mutation.mutate": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1.7320508075688772}, "ultk.effcomm.tradeoff.dominates": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 1.7320508075688772}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1.7320508075688772}, "ultk.language.grammar.Grammar.get_all_rules": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1.4142135623730951}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1.4142135623730951}, "ultk.language.sampling.enumerate_all_languages": {"tf": 2}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1.7320508075688772}}, "df": 25, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.communicative_success": {"tf": 1.4142135623730951}}, "df": 2}}}}, "[": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "k": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}}, "df": 1}}}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1.4142135623730951}, "ultk.language.grammar.Rule.__init__": {"tf": 1.4142135623730951}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}}, "df": 7}, "h": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.grammar.Rule.__init__": {"tf": 1}, "ultk.language.grammar.Grammar.generate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 5}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "k": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.referent_to_index": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_referent": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.expression_to_index": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_expression": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.information.ib_complexity": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.effcomm.informativity.indicator_utility": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.informativity": {"tf": 1.7320508075688772}, "ultk.effcomm.informativity.communicative_success": {"tf": 2}, "ultk.effcomm.optimization.Mutation.precondition": {"tf": 1}, "ultk.effcomm.optimization.Mutation.mutate": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.RemoveExpression.precondition": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.mutate": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.AddExpression.precondition": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.mutate": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 2}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.sample_parents": {"tf": 1.7320508075688772}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 1.7320508075688772}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1.7320508075688772}, "ultk.effcomm.util.build_utility_matrix": {"tf": 1.7320508075688772}, "ultk.language.grammar.GrammaticalExpression.__init__": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.evaluate": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.add_rule": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.grammar.Grammar.generate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 2}, "ultk.language.grammar.Grammar.get_all_rules": {"tf": 1}, "ultk.language.language.Expression.__init__": {"tf": 1}, "ultk.language.language.Expression.can_express": {"tf": 1}, "ultk.language.language.Language.__init__": {"tf": 1}, "ultk.language.language.Language.add_expression": {"tf": 1}, "ultk.language.language.Language.pop": {"tf": 1}, "ultk.language.language.Language.degree_property": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1.4142135623730951}, "ultk.language.sampling.all_meanings": {"tf": 1.4142135623730951}, "ultk.language.sampling.all_expressions": {"tf": 1.4142135623730951}, "ultk.language.sampling.all_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.random_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.generate_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.sample_lang_size": {"tf": 1.7320508075688772}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1.7320508075688772}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1.7320508075688772}, "ultk.language.semantics.Universe.__init__": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1.4142135623730951}}, "df": 63}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.communicative_success": {"tf": 1}, "ultk.effcomm.util.build_utility_matrix": {"tf": 1}}, "df": 3}}}}}}, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 2, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1}}, "df": 2, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1}}, "df": 2}}}}}}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.util.build_utility_matrix": {"tf": 1.4142135623730951}, "ultk.language.grammar.GrammaticalExpression.evaluate": {"tf": 1.4142135623730951}, "ultk.language.sampling.all_meanings": {"tf": 1.4142135623730951}, "ultk.language.semantics.Meaning.__init__": {"tf": 1.4142135623730951}}, "df": 4}}}}}, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {"ultk.language.sampling.random_languages": {"tf": 1}}, "df": 1}}}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1.4142135623730951}}, "df": 3}}}}}}}}}, "k": {"docs": {"ultk.language.sampling.upto_comb": {"tf": 1}}, "df": 1, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.optimization.Mutation.precondition": {"tf": 1}, "ultk.effcomm.optimization.Mutation.mutate": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.precondition": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.precondition": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.mutate": {"tf": 1}, "ultk.language.language.Language.__init__": {"tf": 1}, "ultk.language.language.Language.to_dict": {"tf": 1}, "ultk.language.semantics.Referent.__init__": {"tf": 1}}, "df": 16}}}}}, "e": {"docs": {}, "df": 0, "y": {"docs": {"ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 1}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "f": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.referent_to_index": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_referent": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.expression_to_index": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_expression": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1}, "ultk.language.grammar.Rule.is_terminal": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.evaluate": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.add_child": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.to_dict": {"tf": 1}, "ultk.language.grammar.Grammar.add_rule": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.grammar.Grammar.generate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.grammar.Grammar.get_all_rules": {"tf": 1}, "ultk.language.language.Expression.can_express": {"tf": 1}, "ultk.language.language.Expression.to_dict": {"tf": 1}, "ultk.language.language.Language.add_expression": {"tf": 1}, "ultk.language.language.Language.pop": {"tf": 1}, "ultk.language.language.Language.is_natural": {"tf": 1}, "ultk.language.language.Language.degree_property": {"tf": 1}, "ultk.language.language.Language.binary_matrix": {"tf": 1}, "ultk.language.language.Language.to_dict": {"tf": 1}, "ultk.language.semantics.Referent.to_dict": {"tf": 1}, "ultk.language.semantics.Universe.set_prior": {"tf": 1}, "ultk.language.semantics.Universe.prior_numpy": {"tf": 1}, "ultk.language.semantics.Meaning.to_dict": {"tf": 1}}, "df": 38}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.referent_to_index": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_referent": {"tf": 1}, "ultk.effcomm.informativity.indicator_utility": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.communicative_success": {"tf": 1.4142135623730951}, "ultk.effcomm.util.build_utility_matrix": {"tf": 1.7320508075688772}, "ultk.language.grammar.GrammaticalExpression.__init__": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.evaluate": {"tf": 1.4142135623730951}, "ultk.language.language.Expression.__init__": {"tf": 1}, "ultk.language.language.Expression.can_express": {"tf": 1}, "ultk.language.sampling.all_meanings": {"tf": 1.4142135623730951}, "ultk.language.sampling.all_expressions": {"tf": 1}, "ultk.language.semantics.Universe.__init__": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1.4142135623730951}}, "df": 14}}}}}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}}, "df": 1}, "n": {"docs": {"ultk.language.sampling.random_combination_vocabulary": {"tf": 1}}, "df": 1}}, "t": {"docs": {"ultk.effcomm.optimization.sample_parents": {"tf": 1.4142135623730951}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1}}, "df": 2}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.Rule.__init__": {"tf": 1}}, "df": 1}}}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1.7320508075688772}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1.7320508075688772}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 2}, "ultk.language.grammar.Rule.__init__": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.__init__": {"tf": 1.4142135623730951}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 2}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1}, "ultk.language.language.Expression.__init__": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.rename_id": {"tf": 1.4142135623730951}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}, "ultk.language.semantics.Referent.__init__": {"tf": 1}, "ultk.language.semantics.Universe.__init__": {"tf": 1}, "ultk.language.semantics.Universe.set_prior": {"tf": 1}, "ultk.language.semantics.Universe.from_csv": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 26, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}}, "df": 2}}}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.grammar.Grammar.__init__": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 5}}}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.communicative_success": {"tf": 1.4142135623730951}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}}, "df": 4, "s": {"docs": {"ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}}, "df": 1}}}}}}}, "u": {"docs": {}, "df": 0, "b": {"docs": {"ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}}, "df": 1, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1}}, "df": 1}}}}, "m": {"docs": {"ultk.language.language.aggregate_expression_complexity": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}}, "df": 5, "s": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 1}}, "df": 1}, "d": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 4}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.language.sampling.random_languages": {"tf": 1}}, "df": 1}}}}}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.information.information_rate": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.sampling.powerset": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.sample_lang_size": {"tf": 1.4142135623730951}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1.4142135623730951}}, "df": 8}}}}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.information.get_rd_curve": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.effcomm.util.H": {"tf": 1}, "ultk.effcomm.util.DKL": {"tf": 1}, "ultk.language.grammar.Rule.__init__": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.__init__": {"tf": 2.23606797749979}, "ultk.language.grammar.GrammaticalExpression.add_child": {"tf": 1}, "ultk.language.grammar.Grammar.generate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1.7320508075688772}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 2}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.language.Expression.__init__": {"tf": 2}, "ultk.language.sampling.powerset": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1.4142135623730951}, "ultk.language.semantics.Universe.__init__": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 25, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.Grammar.enumerate": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1.4142135623730951}, "ultk.language.sampling.all_meanings": {"tf": 1.4142135623730951}, "ultk.language.sampling.all_expressions": {"tf": 1.4142135623730951}, "ultk.language.sampling.all_languages": {"tf": 1.4142135623730951}}, "df": 5}}}}}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.language.sampling.upto_comb": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1.4142135623730951}}, "df": 5, "p": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}, "ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.information.information_rate": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_rd_curve": {"tf": 1.7320508075688772}, "ultk.effcomm.information.expected_distortion": {"tf": 1.7320508075688772}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_ib_curve": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_bottleneck": {"tf": 1.7320508075688772}, "ultk.effcomm.information.ib_complexity": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1.4142135623730951}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1.4142135623730951}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1.4142135623730951}, "ultk.effcomm.information.ib_accuracy": {"tf": 1.7320508075688772}, "ultk.effcomm.information.ib_distortion": {"tf": 1.7320508075688772}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 2}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 2}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.informativity.communicative_success": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1.4142135623730951}, "ultk.effcomm.util.build_utility_matrix": {"tf": 1}, "ultk.language.language.Language.binary_matrix": {"tf": 1}, "ultk.language.semantics.Universe.prior_numpy": {"tf": 1}}, "df": 28}}, "b": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 2}}}}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}, "ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.information.information_rate": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_rd_curve": {"tf": 1.7320508075688772}, "ultk.effcomm.information.expected_distortion": {"tf": 1.7320508075688772}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_ib_curve": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_bottleneck": {"tf": 1.7320508075688772}, "ultk.effcomm.information.ib_complexity": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1.4142135623730951}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1.4142135623730951}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1.4142135623730951}, "ultk.effcomm.information.ib_accuracy": {"tf": 1.7320508075688772}, "ultk.effcomm.information.ib_distortion": {"tf": 1.7320508075688772}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 2}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 2}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.informativity.communicative_success": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1.4142135623730951}, "ultk.effcomm.util.build_utility_matrix": {"tf": 1}, "ultk.language.language.Language.binary_matrix": {"tf": 1}, "ultk.language.semantics.Universe.prior_numpy": {"tf": 1}}, "df": 28}}}}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.language.grammar.Rule.__init__": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.__init__": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.rename_id": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}, "ultk.language.semantics.Referent.__init__": {"tf": 1}}, "df": 10}}, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1.4142135623730951}}, "df": 3}}}}}}}, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.grammar.Rule.__init__": {"tf": 1}}, "df": 1, "s": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}}, "df": 1}}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 1}}}}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.language.aggregate_expression_complexity": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.referent_to_index": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_referent": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.expression_to_index": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_expression": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1.4142135623730951}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 2}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.language.Language.pop": {"tf": 1}, "ultk.language.sampling.powerset": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.upto_comb": {"tf": 1.7320508075688772}, "ultk.language.sampling.random_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.generate_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.sample_lang_size": {"tf": 1.7320508075688772}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1.7320508075688772}, "ultk.language.sampling.rename_id": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 2.23606797749979}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1.4142135623730951}}, "df": 26}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.index_to_referent": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.index_to_expression": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}, "ultk.language.language.Language.pop": {"tf": 1}}, "df": 4}}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.sampling.enumerate_all_languages": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "f": {"docs": {"ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 1, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}}, "df": 1}}}}}}}}}}}}, "t": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.language.aggregate_expression_complexity": {"tf": 1}, "ultk.language.sampling.powerset": {"tf": 1.7320508075688772}, "ultk.language.sampling.all_expressions": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.semantics.Universe.__init__": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 7}}}}}}}, "g": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1}}}}}, "d": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1.4142135623730951}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1.4142135623730951}, "ultk.language.sampling.rename_id": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1.4142135623730951}}, "df": 5}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}}, "df": 1}}}, "b": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 1}}, "df": 2}}}}}}}}}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1.7320508075688772}}, "df": 1}}}}}}}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.language.grammar.Grammar.parse": {"tf": 1}}, "df": 1}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "f": {"1": {"docs": {"ultk.effcomm.informativity.indicator_utility": {"tf": 1}}, "df": 1}, "2": {"docs": {"ultk.effcomm.informativity.indicator_utility": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.referent_to_index": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.index_to_referent": {"tf": 1}, "ultk.effcomm.informativity.indicator_utility": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.communicative_success": {"tf": 1.4142135623730951}, "ultk.effcomm.util.build_utility_matrix": {"tf": 1.4142135623730951}, "ultk.language.language.Expression.can_express": {"tf": 1.4142135623730951}, "ultk.language.semantics.Universe.__init__": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 9, "s": {"docs": {"ultk.language.semantics.Universe.__init__": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 2}}}}}}}, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}, "h": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.grammar.Rule.__init__": {"tf": 1}}, "df": 1}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.Rule.__init__": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.__init__": {"tf": 1}, "ultk.language.grammar.Grammar.add_rule": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.get_all_rules": {"tf": 1}}, "df": 4}}}}, "e": {"docs": {"ultk.language.language.Language.add_expression": {"tf": 1}}, "df": 1, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.expression_to_index": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.index_to_expression": {"tf": 1}, "ultk.effcomm.optimization.Mutation.mutate": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.language.Language.__init__": {"tf": 1}, "ultk.language.language.Language.add_expression": {"tf": 1}, "ultk.language.language.Language.pop": {"tf": 1}, "ultk.language.language.Language.degree_property": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1.4142135623730951}, "ultk.language.sampling.all_expressions": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1.4142135623730951}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1.4142135623730951}}, "df": 20, "s": {"docs": {"ultk.effcomm.optimization.Mutation.mutate": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.language.language.Language.__init__": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1}}, "df": 9}}}}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}}, "df": 2, "d": {"docs": {"ultk.effcomm.optimization.sample_parents": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 1}}}}, "f": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "m": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.informativity.communicative_success": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1.7320508075688772}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}}, "df": 6}}}}}}, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.information.information_rate": {"tf": 1}, "ultk.effcomm.information.ib_accuracy": {"tf": 1}, "ultk.effcomm.information.ib_distortion": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}}, "df": 5}}}}}}, "p": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1}}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1.4142135623730951}, "ultk.language.grammar.GrammaticalExpression.to_dict": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.language.Expression.to_dict": {"tf": 1}, "ultk.language.language.Language.to_dict": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}, "ultk.language.semantics.Referent.__init__": {"tf": 1}, "ultk.language.semantics.Referent.to_dict": {"tf": 1}, "ultk.language.semantics.Universe.__init__": {"tf": 1}, "ultk.language.semantics.Universe.set_prior": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}, "ultk.language.semantics.Meaning.to_dict": {"tf": 1}}, "df": 21}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.information.get_rd_curve": {"tf": 1}, "ultk.effcomm.information.expected_distortion": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 5, "s": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.ib_accuracy": {"tf": 1}, "ultk.effcomm.information.ib_distortion": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}}, "df": 8}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1}}, "df": 2, "f": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1.4142135623730951}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}}, "df": 4}}}}}}}}, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1}}, "df": 1}}}}}}}}, "m": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "y": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 4}}}}, "f": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}}, "df": 2}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}}, "df": 1}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.language.grammar.Grammar.parse": {"tf": 1}}, "df": 1}}}}}}}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 3}}}}, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.optimization.sample_parents": {"tf": 1}}, "df": 1}}}}}}}}}}, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 10}}}, "e": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 6, "[": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "k": {"docs": {"ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}}, "df": 2}}}}}}}}, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.information.get_rd_curve": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.__init__": {"tf": 1}, "ultk.language.language.Language.__init__": {"tf": 1}}, "df": 12}}}}, "h": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}}, "df": 1}}}}}}}}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}}, "df": 1}}}}}}}}}, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.sampling.sample_quasi_natural": {"tf": 1.4142135623730951}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1.4142135623730951}}, "df": 3}}}}, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.language.grammar.Rule.__init__": {"tf": 1}, "ultk.language.grammar.Grammar.__init__": {"tf": 1}, "ultk.language.grammar.Grammar.generate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1.7320508075688772}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 15}}, "c": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}}, "df": 1}}}}}}}, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.informativity.communicative_success": {"tf": 1.4142135623730951}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}}, "df": 6}}}, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"ultk.language.language.aggregate_expression_complexity": {"tf": 1}}, "df": 1}}}}}}}}}, "d": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}}}, "x": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.util.marginal": {"tf": 1}, "ultk.effcomm.util.H": {"tf": 1}, "ultk.effcomm.util.DKL": {"tf": 1}}, "df": 3}}}, "b": {"docs": {}, "df": 0, "c": {"docs": {"ultk.language.grammar.Rule.__init__": {"tf": 1}}, "df": 1}}, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1}}, "df": 2}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1}}, "df": 4}}}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 1}}}}, "m": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}}, "df": 2}}, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.grammar.Rule.__init__": {"tf": 1}}, "df": 1}}}}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}}, "df": 3}}, "r": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1.4142135623730951}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}}, "df": 4}}, "n": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1}}}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.informativity.communicative_success": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.effcomm.util.build_utility_matrix": {"tf": 1}, "ultk.language.grammar.Rule.__init__": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.__init__": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1.4142135623730951}, "ultk.language.language.Language.degree_property": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1.4142135623730951}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 12}}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1.4142135623730951}, "ultk.language.sampling.all_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.random_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 7}}}, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.language.grammar.Grammar.parse": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {"ultk.language.grammar.Grammar.from_yaml": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}, "ultk.language.semantics.Universe.from_csv": {"tf": 1}}, "df": 3}}, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"ultk.language.grammar.GrammaticalExpression.add_child": {"tf": 1}}, "df": 1, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.grammar.GrammaticalExpression.__init__": {"tf": 1}}, "df": 1}}}}}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 1}}}}}}}}}, "f": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.information.information_rate": {"tf": 1}, "ultk.effcomm.information.get_rd_curve": {"tf": 1}, "ultk.effcomm.information.expected_distortion": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1.7320508075688772}, "ultk.effcomm.information.get_ib_curve": {"tf": 2}, "ultk.effcomm.information.get_bottleneck": {"tf": 1.7320508075688772}, "ultk.effcomm.information.ib_complexity": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.ib_accuracy": {"tf": 1}, "ultk.effcomm.information.ib_distortion": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.informativity.indicator_utility": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.communicative_success": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}, "ultk.effcomm.tradeoff.dominates": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1.7320508075688772}, "ultk.effcomm.util.build_utility_matrix": {"tf": 1}, "ultk.language.grammar.Rule.__init__": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.language.Language.degree_property": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 2}, "ultk.language.semantics.Universe.__init__": {"tf": 1}, "ultk.language.semantics.Universe.set_prior": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 30}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1.4142135623730951}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}}, "df": 4}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.tradeoff.tradeoff": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 6}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {"ultk.language.grammar.GrammaticalExpression.__init__": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1}}, "df": 3, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.language.grammar.Rule.__init__": {"tf": 1.4142135623730951}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 4}}}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {"ultk.language.grammar.GrammaticalExpression.__init__": {"tf": 1}, "ultk.language.language.Expression.__init__": {"tf": 1}}, "df": 2}}}, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.Grammar.from_yaml": {"tf": 1}, "ultk.language.semantics.Universe.from_csv": {"tf": 1}}, "df": 2}}}}}}, "x": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 1}}}}}, "p": {"1": {"docs": {"ultk.effcomm.tradeoff.dominates": {"tf": 1}}, "df": 1}, "2": {"docs": {"ultk.effcomm.tradeoff.dominates": {"tf": 1}}, "df": 1}, "docs": {"ultk.effcomm.information.expected_distortion": {"tf": 1.4142135623730951}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1.4142135623730951}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.util.xlogx": {"tf": 1}, "ultk.effcomm.util.H": {"tf": 1}, "ultk.effcomm.util.DKL": {"tf": 1}}, "df": 6, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.information.get_rd_curve": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.ib_complexity": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.effcomm.information.ib_accuracy": {"tf": 1}, "ultk.effcomm.information.ib_distortion": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.informativity.communicative_success": {"tf": 1}, "ultk.language.semantics.Universe.__init__": {"tf": 1}, "ultk.language.semantics.Universe.set_prior": {"tf": 1}}, "df": 17}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 1}}, "df": 1}}}}}}}, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 1}, "ultk.language.language.Language.degree_property": {"tf": 1}}, "df": 2}, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.language.semantics.Referent.__init__": {"tf": 1}}, "df": 4}}}}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 2}}}}}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1.4142135623730951}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}}, "df": 4}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {"ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.analysis.trade_off_ttest": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}}, "df": 2}}}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}}, "df": 3}}}}}, "x": {"docs": {"ultk.effcomm.util.joint": {"tf": 1}, "ultk.effcomm.util.marginalize": {"tf": 1}, "ultk.effcomm.util.bayes": {"tf": 1}, "ultk.effcomm.util.gNID": {"tf": 1}}, "df": 4, "y": {"docs": {"ultk.effcomm.util.marginal": {"tf": 1}, "ultk.effcomm.util.conditional": {"tf": 1}, "ultk.effcomm.util.MI": {"tf": 1}}, "df": 3}}, "y": {"docs": {"ultk.effcomm.util.joint": {"tf": 1}, "ultk.effcomm.util.marginalize": {"tf": 1}, "ultk.effcomm.util.bayes": {"tf": 1}}, "df": 3}, "w": {"docs": {"ultk.effcomm.util.gNID": {"tf": 1}}, "df": 1}, "v": {"docs": {"ultk.effcomm.util.gNID": {"tf": 1}}, "df": 1}}, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 1}}, "df": 1}}}}}}, "l": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.optimization.Mutation.precondition": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.precondition": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.precondition": {"tf": 1}, "ultk.effcomm.tradeoff.dominates": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 1}, "ultk.language.grammar.Rule.is_terminal": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.language.Expression.can_express": {"tf": 1}, "ultk.language.language.Language.is_natural": {"tf": 1}, "ultk.language.language.Language.degree_property": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 12}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1, "s": {"docs": {"ultk.effcomm.information.get_rd_curve": {"tf": 1}}, "df": 1}}}}, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.language.aggregate_expression_complexity": {"tf": 1}}, "df": 1}}}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}}, "df": 1}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.ib_accuracy": {"tf": 1}, "ultk.effcomm.information.ib_distortion": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.__init__": {"tf": 1.4142135623730951}, "ultk.language.grammar.GrammaticalExpression.evaluate": {"tf": 1}, "ultk.language.language.Expression.__init__": {"tf": 1.4142135623730951}, "ultk.language.sampling.all_meanings": {"tf": 1}, "ultk.language.sampling.all_expressions": {"tf": 1}}, "df": 13, "s": {"docs": {"ultk.language.sampling.all_expressions": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.information.get_rd_curve": {"tf": 1}, "ultk.effcomm.information.expected_distortion": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}}, "df": 5}, "x": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.sampling.powerset": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.upto_comb": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}}, "df": 8, "b": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 2}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}}, "df": 1, "b": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 2}}}}}}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}}, "df": 1, "s": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}}, "x": {"2": {"7": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 2}, "ultk.language.sampling.all_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.random_languages": {"tf": 1.4142135623730951}}, "df": 3}, "docs": {}, "df": 0}, "docs": {"ultk.effcomm.information.expected_distortion": {"tf": 1.4142135623730951}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1.4142135623730951}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.effcomm.util.joint": {"tf": 1}, "ultk.effcomm.util.marginalize": {"tf": 1}, "ultk.effcomm.util.bayes": {"tf": 1}, "ultk.effcomm.util.gNID": {"tf": 1.4142135623730951}}, "df": 8, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.information.expected_distortion": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1}}, "df": 2}}}}, "g": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1.4142135623730951}, "ultk.language.grammar.Rule.__init__": {"tf": 1.4142135623730951}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}}, "df": 7}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {"ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1}, "ultk.language.sampling.all_meanings": {"tf": 1}, "ultk.language.sampling.all_expressions": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}}, "df": 5}}}}}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {"ultk.language.grammar.Grammar.add_rule": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.grammar.Grammar.generate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 2}, "ultk.language.grammar.Grammar.get_all_rules": {"tf": 1}}, "df": 7}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.grammar.Grammar.generate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 2}}, "df": 5}}}}}}}}}}}}}}}}}}}}}, "y": {"docs": {"ultk.effcomm.tradeoff.tradeoff": {"tf": 1}}, "df": 1}, "q": {"docs": {"ultk.effcomm.util.DKL": {"tf": 1}}, "df": 1}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 4}}}}}}}}}, "bases": {"root": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.agent.Speaker": {"tf": 1}, "ultk.effcomm.agent.Listener": {"tf": 1}}, "df": 2}}}}}}}}}}}}}}}}}}, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}}, "df": 2}}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}, "ultk.effcomm.agent.BayesianListener": {"tf": 1}}, "df": 3}}}}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.GrammaticalExpression": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "m": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.optimization.RemoveExpression": {"tf": 1}, "ultk.effcomm.optimization.AddExpression": {"tf": 1}}, "df": 2}}}}}}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "k": {"docs": {"ultk.language.grammar.GrammaticalExpression": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.grammar.GrammaticalExpression": {"tf": 1}}, "df": 1}}}}}}}}}}, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.language.grammar.UniquenessArgs": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.grammar.UniquenessArgs": {"tf": 1}}, "df": 1}}}}}}}}}}}, "doc": {"root": {"0": {"1": {"1": {"8": {"1": {"7": {"docs": {"ultk": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "4": {"8": {"3": {"0": {"docs": {"ultk.effcomm.analysis.trade_off_ttest": {"tf": 1.4142135623730951}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "5": {"7": {"2": {"0": {"docs": {"ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "3": {"1": {"0": {"2": {"7": {"docs": {"ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "5": {"2": {"9": {"2": {"docs": {"ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "4": {"5": {"4": {"0": {"6": {"docs": {"ultk": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1.7320508075688772}, "ultk.effcomm.analysis.trade_off_means": {"tf": 2.449489742783178}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 2}, "ultk.effcomm.informativity.indicator_utility": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.sample_parents": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 2.449489742783178}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.effcomm.util.marginal": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 16, "s": {"docs": {"ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}}, "df": 1}}, "1": {"0": {"0": {"0": {"docs": {"ultk.language.sampling.random_languages": {"tf": 1.7320508075688772}}, "df": 1}, "docs": {"ultk.language.semantics": {"tf": 1}}, "df": 1}, "1": {"9": {"3": {"7": {"docs": {"ultk.effcomm.analysis.trade_off_ttest": {"tf": 1.4142135623730951}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "7": {"3": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}, "docs": {}, "df": 0}, "9": {"docs": {}, "df": 0, "\u2013": {"1": {"2": {"8": {"docs": {"ultk": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}}, "docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.language.sampling.random_languages": {"tf": 1}}, "df": 2}, "1": {"1": {"1": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}, "docs": {}, "df": 0}, "2": {"6": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}}}}, "docs": {}, "df": 0}, "4": {"6": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "v": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}}}}, "docs": {}, "df": 0}, "5": {"docs": {"ultk": {"tf": 1}}, "df": 1}, "docs": {"ultk": {"tf": 1}}, "df": 1}, "2": {"1": {"8": {"8": {"1": {"1": {"docs": {"ultk": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "6": {"8": {"5": {"5": {"docs": {"ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "3": {"1": {"4": {"2": {"docs": {"ultk": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "6": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 1}}, "df": 1}, "8": {"0": {"0": {"5": {"2": {"1": {"1": {"1": {"5": {"docs": {"ultk": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1.7320508075688772}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.informativity.indicator_utility": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1.4142135623730951}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.effcomm.util.marginal": {"tf": 1}, "ultk.language.language": {"tf": 1}, "ultk.language.sampling.powerset": {"tf": 2.449489742783178}, "ultk.language.sampling.upto_comb": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.semantics": {"tf": 1}}, "df": 19, "d": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1}}, "2": {"0": {"1": {"8": {"docs": {"ultk": {"tf": 1.4142135623730951}}, "df": 1}, "docs": {}, "df": 0}, "2": {"1": {"docs": {"ultk": {"tf": 1}}, "df": 1}, "2": {"docs": {"ultk": {"tf": 1.4142135623730951}}, "df": 1}, "3": {"docs": {"ultk": {"tf": 1.4142135623730951}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "2": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 1}}, "df": 1}, "3": {"docs": {"ultk": {"tf": 1}}, "df": 1}, "7": {"docs": {"ultk": {"tf": 1}}, "df": 1}, "docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1.4142135623730951}, "ultk.language.language": {"tf": 1}, "ultk.language.sampling.powerset": {"tf": 2.23606797749979}, "ultk.language.semantics": {"tf": 1}}, "df": 5, "d": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}}, "df": 5}}, "3": {"1": {"2": {"3": {"4": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "f": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {"ultk": {"tf": 1}}, "df": 1}, "3": {"9": {"0": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "e": {"2": {"3": {"1": {"0": {"1": {"3": {"3": {"5": {"docs": {"ultk": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}}}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "7": {"6": {"5": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "9": {"docs": {"ultk.language.semantics": {"tf": 1.4142135623730951}}, "df": 1}, "docs": {"ultk": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.language.language": {"tf": 1}, "ultk.language.sampling.powerset": {"tf": 2.23606797749979}}, "df": 4}, "4": {"0": {"0": {"0": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "2": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 1}, "6": {"docs": {"ultk": {"tf": 1}}, "df": 1}, "docs": {"ultk": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1.7320508075688772}}, "df": 2}, "5": {"2": {"5": {"1": {"1": {"8": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "3": {"4": {"6": {"docs": {"ultk": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {"ultk": {"tf": 1}}, "df": 1}, "6": {"8": {"1": {"0": {"6": {"8": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {"ultk.language.semantics": {"tf": 1}}, "df": 1}, "7": {"4": {"6": {"2": {"9": {"6": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "7": {"2": {"2": {"2": {"2": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "9": {"3": {"7": {"docs": {}, "df": 0, "\u2013": {"7": {"9": {"4": {"2": {"docs": {"ultk": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "8": {"3": {"2": {"0": {"1": {"0": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "9": {"5": {"2": {"2": {"8": {"0": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "6": {"3": {"1": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {"ultk": {"tf": 14.317821063276353}, "ultk.effcomm": {"tf": 6.928203230275509}, "ultk.effcomm.agent": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.CommunicativeAgent": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 4.69041575982343}, "ultk.effcomm.agent.CommunicativeAgent.language": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.CommunicativeAgent.shape": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.CommunicativeAgent.weights": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.CommunicativeAgent.normalized_weights": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 5}, "ultk.effcomm.agent.CommunicativeAgent.referent_to_index": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.CommunicativeAgent.index_to_referent": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.CommunicativeAgent.expression_to_index": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.CommunicativeAgent.index_to_expression": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 4.47213595499958}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 4.69041575982343}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 6.557438524302}, "ultk.effcomm.agent.Speaker": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 4.69041575982343}, "ultk.effcomm.agent.Speaker.S": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 2.6457513110645907}, "ultk.effcomm.agent.Listener": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.Listener.__init__": {"tf": 4.69041575982343}, "ultk.effcomm.agent.Listener.R": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 2}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 4.69041575982343}, "ultk.effcomm.agent.LiteralSpeaker.S": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.LiteralListener": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 4.69041575982343}, "ultk.effcomm.agent.LiteralListener.R": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 6.164414002968976}, "ultk.effcomm.agent.PragmaticSpeaker.S": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 5.5677643628300215}, "ultk.effcomm.agent.PragmaticListener.R": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.BayesianListener": {"tf": 4.898979485566356}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 4.69041575982343}, "ultk.effcomm.analysis": {"tf": 1.7320508075688772}, "ultk.effcomm.analysis.get_dataframe": {"tf": 6.855654600401044}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 6.928203230275509}, "ultk.effcomm.analysis.trade_off_means": {"tf": 12.68857754044952}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 9.746794344808963}, "ultk.effcomm.information": {"tf": 1.7320508075688772}, "ultk.effcomm.information.information_rate": {"tf": 2}, "ultk.effcomm.information.get_rd_curve": {"tf": 1.7320508075688772}, "ultk.effcomm.information.expected_distortion": {"tf": 1.7320508075688772}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 6.6332495807108}, "ultk.effcomm.information.blahut_arimoto": {"tf": 7.874007874011811}, "ultk.effcomm.information.get_ib_curve": {"tf": 8.12403840463596}, "ultk.effcomm.information.get_bottleneck": {"tf": 8.54400374531753}, "ultk.effcomm.information.ib_complexity": {"tf": 1.7320508075688772}, "ultk.effcomm.information.ib_informativity": {"tf": 5.916079783099616}, "ultk.effcomm.information.ib_comm_cost": {"tf": 6}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 6.164414002968976}, "ultk.effcomm.information.ib_accuracy": {"tf": 7.280109889280518}, "ultk.effcomm.information.ib_distortion": {"tf": 7.54983443527075}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 6.6332495807108}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 6.782329983125268}, "ultk.effcomm.informativity": {"tf": 1.7320508075688772}, "ultk.effcomm.informativity.indicator_utility": {"tf": 1.7320508075688772}, "ultk.effcomm.informativity.informativity": {"tf": 7.681145747868608}, "ultk.effcomm.informativity.communicative_success": {"tf": 6.782329983125268}, "ultk.effcomm.optimization": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.Mutation": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.Mutation.precondition": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.Mutation.mutate": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.RemoveExpression": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.RemoveExpression.precondition": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.RemoveExpression.mutate": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.AddExpression": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.AddExpression.precondition": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.AddExpression.mutate": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.EvolutionaryOptimizer": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 7}, "ultk.effcomm.optimization.EvolutionaryOptimizer.objectives": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.EvolutionaryOptimizer.expressions": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutations": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_size": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.EvolutionaryOptimizer.max_mutations": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.EvolutionaryOptimizer.generations": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.EvolutionaryOptimizer.lang_size": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.EvolutionaryOptimizer.dominating_languages": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.EvolutionaryOptimizer.explored_languages": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 6.244997998398398}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"tf": 5.196152422706632}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 5.0990195135927845}, "ultk.effcomm.optimization.sample_parents": {"tf": 6.244997998398398}, "ultk.effcomm.sampling": {"tf": 1.7320508075688772}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 6.48074069840786}, "ultk.effcomm.tradeoff": {"tf": 1.7320508075688772}, "ultk.effcomm.tradeoff.dominates": {"tf": 5}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 4.795831523312719}, "ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 1.7320508075688772}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 5.5677643628300215}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 6.4031242374328485}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 7}, "ultk.effcomm.util": {"tf": 1.7320508075688772}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 4.358898943540674}, "ultk.effcomm.util.build_utility_matrix": {"tf": 1.7320508075688772}, "ultk.effcomm.util.PRECISION": {"tf": 1.7320508075688772}, "ultk.effcomm.util.marginal": {"tf": 5.0990195135927845}, "ultk.effcomm.util.conditional": {"tf": 5.385164807134504}, "ultk.effcomm.util.joint": {"tf": 5.916079783099616}, "ultk.effcomm.util.marginalize": {"tf": 5.744562646538029}, "ultk.effcomm.util.bayes": {"tf": 4.123105625617661}, "ultk.effcomm.util.xlogx": {"tf": 1.7320508075688772}, "ultk.effcomm.util.H": {"tf": 1.7320508075688772}, "ultk.effcomm.util.MI": {"tf": 1.4142135623730951}, "ultk.effcomm.util.DKL": {"tf": 1.4142135623730951}, "ultk.effcomm.util.gNID": {"tf": 5.744562646538029}, "ultk.language": {"tf": 4}, "ultk.language.grammar": {"tf": 1.7320508075688772}, "ultk.language.grammar.Rule": {"tf": 5.385164807134504}, "ultk.language.grammar.Rule.__init__": {"tf": 1.7320508075688772}, "ultk.language.grammar.Rule.lhs": {"tf": 1.7320508075688772}, "ultk.language.grammar.Rule.rhs": {"tf": 1.7320508075688772}, "ultk.language.grammar.Rule.func": {"tf": 1.7320508075688772}, "ultk.language.grammar.Rule.name": {"tf": 1.7320508075688772}, "ultk.language.grammar.Rule.weight": {"tf": 1.7320508075688772}, "ultk.language.grammar.Rule.is_terminal": {"tf": 1.7320508075688772}, "ultk.language.grammar.GrammaticalExpression": {"tf": 5}, "ultk.language.grammar.GrammaticalExpression.__init__": {"tf": 1.7320508075688772}, "ultk.language.grammar.GrammaticalExpression.rule_name": {"tf": 1.7320508075688772}, "ultk.language.grammar.GrammaticalExpression.func": {"tf": 1.7320508075688772}, "ultk.language.grammar.GrammaticalExpression.children": {"tf": 1.7320508075688772}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 2.8284271247461903}, "ultk.language.grammar.GrammaticalExpression.evaluate": {"tf": 1.7320508075688772}, "ultk.language.grammar.GrammaticalExpression.add_child": {"tf": 1.7320508075688772}, "ultk.language.grammar.GrammaticalExpression.to_dict": {"tf": 1.7320508075688772}, "ultk.language.grammar.UniquenessArgs": {"tf": 5}, "ultk.language.grammar.UniquenessArgs.unique_expressions": {"tf": 1.7320508075688772}, "ultk.language.grammar.UniquenessArgs.key": {"tf": 1.7320508075688772}, "ultk.language.grammar.UniquenessArgs.compare_func": {"tf": 1.7320508075688772}, "ultk.language.grammar.Grammar": {"tf": 1.7320508075688772}, "ultk.language.grammar.Grammar.__init__": {"tf": 1.7320508075688772}, "ultk.language.grammar.Grammar.add_rule": {"tf": 1.7320508075688772}, "ultk.language.grammar.Grammar.parse": {"tf": 4.58257569495584}, "ultk.language.grammar.Grammar.generate": {"tf": 1.7320508075688772}, "ultk.language.grammar.Grammar.enumerate": {"tf": 5.744562646538029}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1.7320508075688772}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 5.830951894845301}, "ultk.language.grammar.Grammar.get_all_rules": {"tf": 1.7320508075688772}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 5.291502622129181}, "ultk.language.language": {"tf": 11.661903789690601}, "ultk.language.language.Expression": {"tf": 1.7320508075688772}, "ultk.language.language.Expression.__init__": {"tf": 1.7320508075688772}, "ultk.language.language.Expression.form": {"tf": 1.7320508075688772}, "ultk.language.language.Expression.meaning": {"tf": 1.7320508075688772}, "ultk.language.language.Expression.can_express": {"tf": 1.7320508075688772}, "ultk.language.language.Expression.to_dict": {"tf": 1.7320508075688772}, "ultk.language.language.Language": {"tf": 1.7320508075688772}, "ultk.language.language.Language.__init__": {"tf": 1.7320508075688772}, "ultk.language.language.Language.expressions": {"tf": 1.7320508075688772}, "ultk.language.language.Language.universe": {"tf": 1.7320508075688772}, "ultk.language.language.Language.add_expression": {"tf": 1.7320508075688772}, "ultk.language.language.Language.pop": {"tf": 1.7320508075688772}, "ultk.language.language.Language.is_natural": {"tf": 1.7320508075688772}, "ultk.language.language.Language.degree_property": {"tf": 1.7320508075688772}, "ultk.language.language.Language.binary_matrix": {"tf": 2.6457513110645907}, "ultk.language.language.Language.to_dict": {"tf": 1.7320508075688772}, "ultk.language.language.aggregate_expression_complexity": {"tf": 5.656854249492381}, "ultk.language.sampling": {"tf": 1.7320508075688772}, "ultk.language.sampling.powerset": {"tf": 5.916079783099616}, "ultk.language.sampling.all_meanings": {"tf": 1.7320508075688772}, "ultk.language.sampling.all_expressions": {"tf": 1.7320508075688772}, "ultk.language.sampling.all_languages": {"tf": 5.5677643628300215}, "ultk.language.sampling.upto_comb": {"tf": 1.7320508075688772}, "ultk.language.sampling.random_languages": {"tf": 14.352700094407323}, "ultk.language.sampling.generate_languages": {"tf": 15.394804318340652}, "ultk.language.sampling.sample_lang_size": {"tf": 6.855654600401044}, "ultk.language.sampling.sample_quasi_natural": {"tf": 6.782329983125268}, "ultk.language.sampling.rename_id": {"tf": 2.23606797749979}, "ultk.language.sampling.enumerate_all_languages": {"tf": 8.06225774829855}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 6.244997998398398}, "ultk.language.semantics": {"tf": 15.556349186104045}, "ultk.language.semantics.Referent": {"tf": 1.7320508075688772}, "ultk.language.semantics.Referent.__init__": {"tf": 3.605551275463989}, "ultk.language.semantics.Referent.name": {"tf": 1.7320508075688772}, "ultk.language.semantics.Referent.to_dict": {"tf": 1.7320508075688772}, "ultk.language.semantics.Universe": {"tf": 1.7320508075688772}, "ultk.language.semantics.Universe.__init__": {"tf": 1.7320508075688772}, "ultk.language.semantics.Universe.referents": {"tf": 1.7320508075688772}, "ultk.language.semantics.Universe.set_prior": {"tf": 1.7320508075688772}, "ultk.language.semantics.Universe.prior_numpy": {"tf": 1.7320508075688772}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 3.872983346207417}, "ultk.language.semantics.Universe.from_csv": {"tf": 2.23606797749979}, "ultk.language.semantics.Meaning": {"tf": 2.449489742783178}, "ultk.language.semantics.Meaning.__init__": {"tf": 5.385164807134504}, "ultk.language.semantics.Meaning.referents": {"tf": 1.7320508075688772}, "ultk.language.semantics.Meaning.universe": {"tf": 1.7320508075688772}, "ultk.language.semantics.Meaning.to_dict": {"tf": 1.7320508075688772}}, "df": 193, "t": {"docs": {"ultk": {"tf": 2}, "ultk.effcomm": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1.7320508075688772}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1.4142135623730951}}, "df": 5, "h": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 4.358898943540674}, "ultk.effcomm": {"tf": 4.358898943540674}, "ultk.effcomm.agent": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.CommunicativeAgent.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 2.6457513110645907}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 2.449489742783178}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 3.4641016151377544}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 2.6457513110645907}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 2.8284271247461903}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1.7320508075688772}, "ultk.effcomm.analysis": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.get_dataframe": {"tf": 2.6457513110645907}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 2.8284271247461903}, "ultk.effcomm.analysis.trade_off_means": {"tf": 2.23606797749979}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 3.1622776601683795}, "ultk.effcomm.information.information_rate": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_rd_curve": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 3.1622776601683795}, "ultk.effcomm.information.blahut_arimoto": {"tf": 4.242640687119285}, "ultk.effcomm.information.get_ib_curve": {"tf": 3.605551275463989}, "ultk.effcomm.information.get_bottleneck": {"tf": 4}, "ultk.effcomm.information.ib_complexity": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 2.23606797749979}, "ultk.effcomm.information.ib_comm_cost": {"tf": 2}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1.4142135623730951}, "ultk.effcomm.information.ib_accuracy": {"tf": 2}, "ultk.effcomm.information.ib_distortion": {"tf": 1.4142135623730951}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1.7320508075688772}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.informativity": {"tf": 3.872983346207417}, "ultk.effcomm.informativity.communicative_success": {"tf": 1}, "ultk.effcomm.optimization": {"tf": 1}, "ultk.effcomm.optimization.Mutation.mutate": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 3.4641016151377544}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 2.8284271247461903}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 2}, "ultk.effcomm.optimization.sample_parents": {"tf": 2.6457513110645907}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 2}, "ultk.effcomm.tradeoff": {"tf": 1}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 3.1622776601683795}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 2.8284271247461903}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 4}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1.4142135623730951}, "ultk.effcomm.util.build_utility_matrix": {"tf": 1.4142135623730951}, "ultk.effcomm.util.joint": {"tf": 1}, "ultk.effcomm.util.H": {"tf": 1}, "ultk.language": {"tf": 2}, "ultk.language.grammar.Rule": {"tf": 2.23606797749979}, "ultk.language.grammar.Rule.is_terminal": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1.7320508075688772}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 2.23606797749979}, "ultk.language.grammar.UniquenessArgs": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.parse": {"tf": 2.449489742783178}, "ultk.language.grammar.Grammar.enumerate": {"tf": 2.449489742783178}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 3.3166247903554}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1.4142135623730951}, "ultk.language.language": {"tf": 1.7320508075688772}, "ultk.language.language.Expression.can_express": {"tf": 1.4142135623730951}, "ultk.language.language.Language.add_expression": {"tf": 1}, "ultk.language.language.Language.pop": {"tf": 1.4142135623730951}, "ultk.language.language.aggregate_expression_complexity": {"tf": 2.23606797749979}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.upto_comb": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.generate_languages": {"tf": 5.0990195135927845}, "ultk.language.sampling.sample_lang_size": {"tf": 2.449489742783178}, "ultk.language.sampling.sample_quasi_natural": {"tf": 2.449489742783178}, "ultk.language.sampling.enumerate_all_languages": {"tf": 3.7416573867739413}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1.4142135623730951}, "ultk.language.semantics": {"tf": 2.449489742783178}, "ultk.language.semantics.Referent": {"tf": 1}, "ultk.language.semantics.Referent.__init__": {"tf": 1.4142135623730951}, "ultk.language.semantics.Universe": {"tf": 1.4142135623730951}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1.7320508075688772}, "ultk.language.semantics.Meaning": {"tf": 1.7320508075688772}, "ultk.language.semantics.Meaning.__init__": {"tf": 3.3166247903554}}, "df": 94, "y": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}}, "df": 6}, "r": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.language.grammar.Rule.is_terminal": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}}, "df": 5}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 4}}}, "i": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1.4142135623730951}}, "df": 7}}, "s": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.semantics.Meaning": {"tf": 1}}, "df": 4}}, "m": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.language.language": {"tf": 1}}, "df": 2}, "n": {"docs": {"ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}}, "df": 3}}, "a": {"docs": {}, "df": 0, "t": {"docs": {"ultk": {"tf": 2}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.optimization": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 2}, "ultk.language.grammar.Rule.is_terminal": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 2}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1.4142135623730951}, "ultk.language.sampling.random_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1.7320508075688772}, "ultk.language.semantics.Universe.from_csv": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 28}, "n": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 3}}, "i": {"docs": {}, "df": 0, "s": {"docs": {"ultk": {"tf": 2}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.agent.BayesianListener": {"tf": 1.7320508075688772}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1.7320508075688772}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1.4142135623730951}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.language": {"tf": 1}, "ultk.language.grammar.Rule": {"tf": 1.4142135623730951}, "ultk.language.grammar.Rule.is_terminal": {"tf": 1.4142135623730951}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1.7320508075688772}, "ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1.4142135623730951}, "ultk.language.sampling.random_languages": {"tf": 2}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.semantics.Universe.from_csv": {"tf": 1}}, "df": 27}, "n": {"docs": {}, "df": 0, "k": {"docs": {"ultk.language.grammar.Rule": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}}, "df": 1}}}}, "g": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.semantics": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 2}}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "h": {"docs": {"ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}}, "df": 1, "t": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}}, "df": 2}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.7320508075688772}}, "df": 3}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"ultk": {"tf": 1.7320508075688772}}, "df": 1}}}}}, "s": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 2}}}}}}, "o": {"docs": {"ultk": {"tf": 3.3166247903554}, "ultk.effcomm": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 2.23606797749979}, "ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 2}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 2.23606797749979}, "ultk.effcomm.agent.Listener.__init__": {"tf": 2.23606797749979}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 2.23606797749979}, "ultk.effcomm.agent.LiteralListener": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 2.23606797749979}, "ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.BayesianListener": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 2.23606797749979}, "ultk.effcomm.analysis.get_dataframe": {"tf": 2.23606797749979}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1.7320508075688772}, "ultk.effcomm.analysis.trade_off_means": {"tf": 2}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 2}, "ultk.effcomm.information.get_rd_curve": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 2.6457513110645907}, "ultk.effcomm.information.get_bottleneck": {"tf": 3}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1.7320508075688772}, "ultk.effcomm.informativity.informativity": {"tf": 2}, "ultk.effcomm.informativity.communicative_success": {"tf": 1}, "ultk.effcomm.optimization.Mutation.precondition": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.RemoveExpression.precondition": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.AddExpression.precondition": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 2.6457513110645907}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 2}, "ultk.effcomm.optimization.sample_parents": {"tf": 2.23606797749979}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1.7320508075688772}, "ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1.7320508075688772}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 2.23606797749979}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 2}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.language": {"tf": 1.4142135623730951}, "ultk.language.grammar.Rule": {"tf": 2.449489742783178}, "ultk.language.grammar.Rule.is_terminal": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 2.6457513110645907}, "ultk.language.grammar.Grammar.enumerate": {"tf": 3.4641016151377544}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 2.23606797749979}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1}, "ultk.language.language.Language.add_expression": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1}, "ultk.language.sampling.powerset": {"tf": 2}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.upto_comb": {"tf": 1.4142135623730951}, "ultk.language.sampling.random_languages": {"tf": 3}, "ultk.language.sampling.generate_languages": {"tf": 3.4641016151377544}, "ultk.language.sampling.sample_lang_size": {"tf": 1.7320508075688772}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 2.8284271247461903}, "ultk.language.semantics": {"tf": 2}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}, "ultk.language.semantics.Meaning": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1.7320508075688772}}, "df": 66, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}, "s": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm": {"tf": 2.23606797749979}}, "df": 2}}}, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1.4142135623730951}, "ultk.language.sampling.sample_lang_size": {"tf": 1}}, "df": 3}}}, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.language.grammar.Rule": {"tf": 1}}, "df": 1}}}}}}, "p": {"docs": {"ultk.language.grammar.GrammaticalExpression": {"tf": 1}}, "df": 1}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {"ultk": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}}, "df": 2, "s": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1.4142135623730951}, "ultk.language.sampling.enumerate_all_languages": {"tf": 2}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1.7320508075688772}}, "df": 4}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.language.grammar.Rule.is_terminal": {"tf": 1}}, "df": 1}}}}}}, "x": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "k": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}, "{": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}}, "df": 1}}}}}}}}, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.informativity.communicative_success": {"tf": 1}}, "df": 1}}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.analysis.trade_off_ttest": {"tf": 1.4142135623730951}}, "df": 1, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}, "s": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm": {"tf": 1}}, "df": 1}}}}}}}, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}}}, "w": {"docs": {}, "df": 0, "o": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.effcomm.util.gNID": {"tf": 1}}, "df": 6}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "y": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm": {"tf": 1.7320508075688772}, "ultk.effcomm.analysis": {"tf": 1}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.optimization": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer": {"tf": 1}, "ultk.effcomm.tradeoff": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}}, "df": 9, "o": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "f": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1}}, "df": 2}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.semantics.Meaning": {"tf": 1}}, "df": 1}}}}}}, "j": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1}}}}}}}, "c": {"docs": {}, "df": 0, "k": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}}, "df": 2}}, "a": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.language.Expression.can_express": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 2}}, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 1}}}}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "y": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}}, "df": 7, "s": {"docs": {"ultk.language.grammar.Rule": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm": {"tf": 1}}, "df": 1}}}}}}}}, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 3, "s": {"docs": {"ultk.language.grammar.GrammaticalExpression": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}}, "df": 1, "s": {"docs": {"ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 3}}}, "r": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}}, "df": 2}}}}, "u": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.BayesianListener": {"tf": 1.4142135623730951}, "ultk.effcomm.information.ib_accuracy": {"tf": 1.4142135623730951}, "ultk.effcomm.information.ib_distortion": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.communicative_success": {"tf": 2}}, "df": 6, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1.7320508075688772}}, "df": 4}}}}}}}, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "y": {"docs": {"ultk": {"tf": 1}}, "df": 1}, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 2}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 5, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}}, "df": 2}}}}}}, "t": {"docs": {"ultk": {"tf": 1}}, "df": 1}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 2}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}}, "df": 2, "s": {"docs": {"ultk": {"tf": 1.4142135623730951}}, "df": 1}}}, "e": {"docs": {"ultk.language": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.sampling.all_meanings": {"tf": 1}, "ultk.language.semantics": {"tf": 2}, "ultk.language.semantics.Referent": {"tf": 1}, "ultk.language.semantics.Universe": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}, "ultk.language.semantics.Universe.from_csv": {"tf": 1.4142135623730951}, "ultk.language.semantics.Meaning": {"tf": 1.7320508075688772}, "ultk.language.semantics.Meaning.__init__": {"tf": 2.23606797749979}}, "df": 10}}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.UniquenessArgs": {"tf": 2}, "ultk.language.grammar.Grammar.enumerate": {"tf": 2.23606797749979}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1.7320508075688772}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}}, "df": 6, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.grammar.UniquenessArgs": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.enumerate": {"tf": 2}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1.4142135623730951}}, "df": 3}}}}}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 2}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}}, "df": 1}}}}}, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.language.semantics.Meaning": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "k": {"docs": {"ultk": {"tf": 3}, "ultk.effcomm.agent.BayesianListener": {"tf": 1}, "ultk.language": {"tf": 1.7320508075688772}, "ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.language": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.semantics": {"tf": 1.4142135623730951}}, "df": 7}}}, "p": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1.4142135623730951}, "ultk.language.sampling.powerset": {"tf": 1}, "ultk.language.sampling.upto_comb": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 2}}, "df": 9, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.Grammar.enumerate": {"tf": 1}}, "df": 1, "d": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.sample_lang_size": {"tf": 1.7320508075688772}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1.7320508075688772}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1.7320508075688772}}, "df": 6}, "s": {"docs": {"ultk.language.sampling.rename_id": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.tradeoff.tradeoff": {"tf": 1}}, "df": 1}}}}}}, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.language.sampling.random_languages": {"tf": 1}}, "df": 1}}}}}}}}}, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1}, "ultk.language.language": {"tf": 1}}, "df": 2}}}, "e": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}, "ultk.effcomm.agent.BayesianListener": {"tf": 1}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.information.get_rd_curve": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_bottleneck": {"tf": 1.7320508075688772}, "ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 14, "d": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm": {"tf": 2}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.effcomm.util.build_utility_matrix": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 18}, "s": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}}, "df": 8}, "f": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}}, "df": 2, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.informativity.communicative_success": {"tf": 1}}, "df": 2}}}}}}}, "r": {"docs": {"ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 2}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.optimization.Mutation.mutate": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.mutate": {"tf": 1}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 7}}}, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.informativity.indicator_utility": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.communicative_success": {"tf": 1}, "ultk.effcomm.util.build_utility_matrix": {"tf": 1}}, "df": 5}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}}, "df": 4}}}}}}}}}}, "l": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1.7320508075688772}, "ultk.effcomm.informativity.communicative_success": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1.4142135623730951}}, "df": 3, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.language.language": {"tf": 1.4142135623730951}, "ultk.language.sampling.generate_languages": {"tf": 2.23606797749979}, "ultk.language.sampling.sample_lang_size": {"tf": 1.4142135623730951}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.rename_id": {"tf": 1}}, "df": 6, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 2.8284271247461903}, "ultk.effcomm": {"tf": 2.449489742783178}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 2}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1.7320508075688772}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1.7320508075688772}, "ultk.effcomm.information.ib_complexity": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1.7320508075688772}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1.7320508075688772}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.informativity": {"tf": 2.6457513110645907}, "ultk.effcomm.informativity.communicative_success": {"tf": 1}, "ultk.effcomm.optimization.Mutation.precondition": {"tf": 1}, "ultk.effcomm.optimization.Mutation.mutate": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.precondition": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.precondition": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 2}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 2}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 2}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.language": {"tf": 2.23606797749979}, "ultk.language.language": {"tf": 2.6457513110645907}, "ultk.language.language.Language.add_expression": {"tf": 1}, "ultk.language.language.Language.is_natural": {"tf": 1.4142135623730951}, "ultk.language.language.Language.degree_property": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 2}, "ultk.language.sampling.all_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.random_languages": {"tf": 2.449489742783178}, "ultk.language.sampling.generate_languages": {"tf": 2.449489742783178}, "ultk.language.sampling.sample_lang_size": {"tf": 1.7320508075688772}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1.4142135623730951}, "ultk.language.semantics": {"tf": 2.23606797749979}, "ultk.language.semantics.Referent": {"tf": 1}}, "df": 47, "s": {"docs": {"ultk": {"tf": 2.449489742783178}, "ultk.effcomm": {"tf": 3}, "ultk.effcomm.analysis.get_dataframe": {"tf": 2}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.informativity": {"tf": 1}, "ultk.effcomm.optimization": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 2.449489742783178}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.sample_parents": {"tf": 2.8284271247461903}, "ultk.effcomm.sampling": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 2}, "ultk.effcomm.tradeoff": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 2.6457513110645907}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1.4142135623730951}, "ultk.language": {"tf": 1}, "ultk.language.language": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.random_languages": {"tf": 3.605551275463989}, "ultk.language.sampling.generate_languages": {"tf": 4}, "ultk.language.sampling.sample_lang_size": {"tf": 2.6457513110645907}, "ultk.language.sampling.sample_quasi_natural": {"tf": 2.449489742783178}, "ultk.language.sampling.enumerate_all_languages": {"tf": 3.3166247903554}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1.4142135623730951}}, "df": 30, "e": {"docs": {"ultk.language": {"tf": 1}}, "df": 1}}}}}}}}, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm": {"tf": 1}}, "df": 1}}}, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}}, "df": 1}}}}, "m": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1.4142135623730951}}, "df": 2}}}}, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.language.language": {"tf": 1}}, "df": 1}, "s": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.sampling.powerset": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 4}}}}}}, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}, "n": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}}, "df": 2}, "g": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.language.semantics": {"tf": 1.4142135623730951}}, "df": 2, "s": {"docs": {"ultk": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "k": {"docs": {}, "df": 0, "s": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1.7320508075688772}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.information.get_rd_curve": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.Mutation.mutate": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.sample_parents": {"tf": 1.4142135623730951}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 2}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1.7320508075688772}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1.7320508075688772}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 2.23606797749979}, "ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.grammar.Grammar.get_all_rules": {"tf": 1}, "ultk.language.language.Language.add_expression": {"tf": 1}, "ultk.language.language.Language.pop": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.sample_lang_size": {"tf": 1.4142135623730951}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1.4142135623730951}, "ultk.language.semantics": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 30, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.BayesianListener": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 2}, "ultk.effcomm.informativity.communicative_success": {"tf": 1.7320508075688772}, "ultk.language.semantics": {"tf": 1}}, "df": 14, "s": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm": {"tf": 1}}, "df": 2}}}}}, "[": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.sampling.random_combination_vocabulary": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.agent": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1.7320508075688772}, "ultk.effcomm.informativity.communicative_success": {"tf": 1.7320508075688772}, "ultk.language.semantics": {"tf": 1}}, "df": 9, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "k": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}}, "df": 1, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.language.semantics.Meaning": {"tf": 1}}, "df": 3}}, "w": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1}}, "df": 1}}}}}}, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}}, "df": 1}}}}, "g": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk.language.sampling.powerset": {"tf": 1}}, "df": 1}}}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk": {"tf": 1}}, "df": 1}}, "w": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}, "g": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.util.xlogx": {"tf": 1}, "ultk.effcomm.util.H": {"tf": 1}}, "df": 3}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "d": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}}, "df": 1, "g": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"ultk": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1.4142135623730951}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 8}}}}, "w": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.agent": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}}, "df": 7}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}}, "df": 1}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1.7320508075688772}, "ultk.language": {"tf": 1}}, "df": 2}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}}, "df": 2}}, "f": {"docs": {"ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}}, "df": 1}}, "s": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}}, "df": 1}}, "x": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.effcomm.information.ib_accuracy": {"tf": 1.4142135623730951}}, "df": 3}}}}}, "t": {"docs": {"ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}}, "df": 1}, "f": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}}, "df": 2}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {"ultk.effcomm.tradeoff.dominates": {"tf": 1.4142135623730951}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 2}, "h": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.grammar.Rule": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.generate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1.4142135623730951}}, "df": 4}}}, "i": {"docs": {"ultk.effcomm.information.compute_rate_distortion": {"tf": 1.4142135623730951}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1.4142135623730951}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.informativity.indicator_utility": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1.7320508075688772}, "ultk.effcomm.informativity.communicative_success": {"tf": 2}, "ultk.effcomm.tradeoff.dominates": {"tf": 1.7320508075688772}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.language.grammar.Rule.is_terminal": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.semantics": {"tf": 2}}, "df": 13, "n": {"docs": {"ultk": {"tf": 3.3166247903554}, "ultk.effcomm": {"tf": 1.4142135623730951}, "ultk.effcomm.agent": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 2}, "ultk.effcomm.information.get_ib_curve": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_bottleneck": {"tf": 2}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.informativity": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 2.23606797749979}, "ultk.effcomm.informativity.communicative_success": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.grammar.Rule.is_terminal": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1.4142135623730951}, "ultk.language.language.Language.add_expression": {"tf": 1}, "ultk.language.language.Language.degree_property": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.semantics": {"tf": 2}, "ultk.language.semantics.Referent": {"tf": 1}, "ultk.language.semantics.Meaning": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 39, "t": {"docs": {"ultk.language.sampling.sample_lang_size": {"tf": 1.7320508075688772}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1.4142135623730951}}, "df": 2, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk": {"tf": 1.7320508075688772}}, "df": 1}}}}}}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.language.semantics": {"tf": 1}}, "df": 6}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"ultk": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}}, "df": 2}}}, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}}, "df": 1, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}, "ultk.effcomm.agent.BayesianListener": {"tf": 1}}, "df": 2}}}}}, "s": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}}, "df": 3}, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.agent.BayesianListener": {"tf": 1}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.tradeoff.interpolate_data": {"tf": 2}}, "df": 1, "d": {"docs": {"ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}}, "df": 2}}}}}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 1.7320508075688772}}, "df": 1}}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.tradeoff.tradeoff": {"tf": 1.4142135623730951}}, "df": 1}}}}, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1.4142135623730951}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 2}}}}, "o": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.sampling": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.semantics": {"tf": 1}}, "df": 9}}, "f": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}}, "df": 1, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm": {"tf": 1.7320508075688772}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1.7320508075688772}, "ultk.effcomm.information.get_bottleneck": {"tf": 2}, "ultk.effcomm.information.ib_informativity": {"tf": 1.7320508075688772}, "ultk.effcomm.informativity": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 2.23606797749979}, "ultk.effcomm.informativity.communicative_success": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.util": {"tf": 1}}, "df": 12}}}, "e": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.language.semantics": {"tf": 1}}, "df": 3, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.language.semantics": {"tf": 1}}, "df": 2}}}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.BayesianListener": {"tf": 1}, "ultk.effcomm.information": {"tf": 1}, "ultk.effcomm.information.information_rate": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.util.MI": {"tf": 1}, "ultk.language.semantics.Universe.from_csv": {"tf": 1}}, "df": 9, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.util.gNID": {"tf": 1}}, "df": 1}}}}}}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}}, "df": 1, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}}, "df": 1}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"ultk": {"tf": 1.4142135623730951}}, "df": 1, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 2}}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 3}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1}}, "df": 1, "s": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}}, "x": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 2}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.language.language.Language.pop": {"tf": 1}}, "df": 3, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1.7320508075688772}}, "df": 2}}}}}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.informativity.indicator_utility": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}}, "df": 2}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 2}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1}}, "df": 3}}}}}, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.sampling.random_languages": {"tf": 1}}, "df": 1, "s": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm": {"tf": 1}}, "df": 2}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.information": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}}, "df": 3}}}}, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.sampling.powerset": {"tf": 1}}, "df": 1}}}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.language.semantics.Referent.__init__": {"tf": 1}}, "df": 11, "d": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}}, "df": 4}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}}, "df": 1}}}}}}}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}}, "df": 1}}}}}}}, "p": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.information.compute_rate_distortion": {"tf": 1.7320508075688772}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.language.language.Expression.can_express": {"tf": 1}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1}}, "df": 4, "s": {"docs": {"ultk.language.grammar.Rule": {"tf": 1}}, "df": 1}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language": {"tf": 1}}, "df": 1}}}}}}}}}}, "s": {"docs": {"ultk": {"tf": 3}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.LiteralListener": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 2}, "ultk.effcomm.agent.BayesianListener": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1.4142135623730951}, "ultk.effcomm.information.blahut_arimoto": {"tf": 2.23606797749979}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 2.449489742783178}, "ultk.effcomm.optimization.Mutation.precondition": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.precondition": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.precondition": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 2}, "ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.grammar.Rule.is_terminal": {"tf": 1.4142135623730951}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}, "ultk.language.grammar.Grammar": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1.7320508075688772}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 2}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}, "ultk.language.semantics": {"tf": 2}, "ultk.language.semantics.Referent": {"tf": 1}, "ultk.language.semantics.Universe": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}, "ultk.language.semantics.Universe.from_csv": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1.7320508075688772}}, "df": 40, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {"ultk": {"tf": 1.7320508075688772}, "ultk.effcomm": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1.4142135623730951}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.language.Language.pop": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.semantics": {"tf": 1.4142135623730951}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}, "ultk.language.semantics.Meaning": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1.4142135623730951}}, "df": 15, "s": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.language.grammar.Grammar": {"tf": 1}}, "df": 5}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.language.sampling.upto_comb": {"tf": 1.4142135623730951}}, "df": 2}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}}, "df": 2}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.optimization": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {"ultk.language.sampling.powerset": {"tf": 1}, "ultk.language.sampling.upto_comb": {"tf": 1}}, "df": 2}}}, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.sampling.powerset": {"tf": 1.7320508075688772}, "ultk.language.sampling.all_expressions": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}}, "df": 4}}}}, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.sampling.powerset": {"tf": 1}}, "df": 1}}}}}}}}, "f": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.language.Expression.can_express": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.generate_languages": {"tf": 2}, "ultk.language.semantics": {"tf": 1.4142135623730951}}, "df": 17, "f": {"docs": {"ultk.effcomm.informativity.indicator_utility": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 2}}, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"ultk": {"tf": 1.4142135623730951}}, "df": 1}}, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.semantics": {"tf": 1}}, "df": 1, "s": {"docs": {"ultk.effcomm": {"tf": 1.7320508075688772}}, "df": 1}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm": {"tf": 1}}, "df": 1}}}}}}}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.language": {"tf": 1}, "ultk.language.semantics": {"tf": 1.4142135623730951}}, "df": 2, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.language": {"tf": 1}}, "df": 1}}}}}}}}, "o": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "b": {"6": {"2": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}, "docs": {}, "df": 0}, "docs": {}, "df": 0}}}, "d": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 2.6457513110645907}, "ultk.language.sampling.sample_lang_size": {"tf": 1.7320508075688772}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1.4142135623730951}, "ultk.language.sampling.rename_id": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1.7320508075688772}}, "df": 5, "e": {"docs": {}, "df": 0, "a": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}}, "df": 1}, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1}}, "df": 1}}}}}}}}, "s": {"docs": {"ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 1}}, "b": {"docs": {"ultk.effcomm.agent.BayesianListener": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1.7320508075688772}, "ultk.effcomm.information.ib_complexity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1.4142135623730951}, "ultk.effcomm.information.ib_distortion": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}}, "df": 8}, "[": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, ":": {"docs": {}, "df": 0, "m": {"docs": {"ultk.effcomm.information.information_rate": {"tf": 1}}, "df": 1}, "u": {"docs": {"ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1.4142135623730951}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.ib_accuracy": {"tf": 1.4142135623730951}, "ultk.effcomm.information.ib_distortion": {"tf": 1}}, "df": 5}}}, "m": {"docs": {}, "df": 0, ":": {"docs": {}, "df": 0, "u": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.ib_distortion": {"tf": 1}}, "df": 4}, "w": {"docs": {"ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.ib_complexity": {"tf": 1}}, "df": 2}}}, "x": {"docs": {}, "df": 0, ":": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.util.MI": {"tf": 1}}, "df": 1}}}}, "g": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1}}}}}}}, "|": {"docs": {}, "df": 0, "m": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.informativity.communicative_success": {"tf": 1}}, "df": 2}}, "i": {"docs": {"ultk.language.sampling.random_languages": {"tf": 1}}, "df": 1}}, "a": {"docs": {"ultk": {"tf": 3.3166247903554}, "ultk.effcomm": {"tf": 3.3166247903554}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 2.23606797749979}, "ultk.effcomm.agent.CommunicativeAgent.normalized_weights": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 2}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 2.6457513110645907}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 2.23606797749979}, "ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.Listener.__init__": {"tf": 2.23606797749979}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 2.23606797749979}, "ultk.effcomm.agent.LiteralListener": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 2.23606797749979}, "ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 2}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.BayesianListener": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 2.23606797749979}, "ultk.effcomm.analysis.get_dataframe": {"tf": 2.23606797749979}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 2.8284271247461903}, "ultk.effcomm.analysis.trade_off_means": {"tf": 2}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 3}, "ultk.effcomm.information.get_rd_curve": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1.4142135623730951}, "ultk.effcomm.information.blahut_arimoto": {"tf": 2.6457513110645907}, "ultk.effcomm.information.get_ib_curve": {"tf": 1.7320508075688772}, "ultk.effcomm.information.get_bottleneck": {"tf": 1.7320508075688772}, "ultk.effcomm.information.ib_complexity": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 2}, "ultk.effcomm.informativity.informativity": {"tf": 3.605551275463989}, "ultk.effcomm.informativity.communicative_success": {"tf": 2.449489742783178}, "ultk.effcomm.optimization.Mutation.precondition": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.Mutation.mutate": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.precondition": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.RemoveExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.precondition": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.AddExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 2.23606797749979}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 2.449489742783178}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.sample_parents": {"tf": 1.7320508075688772}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 2.6457513110645907}, "ultk.effcomm.tradeoff": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.dominates": {"tf": 1}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1.7320508075688772}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 2}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 2.449489742783178}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 2.6457513110645907}, "ultk.effcomm.util.marginal": {"tf": 1}, "ultk.effcomm.util.conditional": {"tf": 1.4142135623730951}, "ultk.effcomm.util.joint": {"tf": 1.7320508075688772}, "ultk.effcomm.util.marginalize": {"tf": 1.7320508075688772}, "ultk.effcomm.util.bayes": {"tf": 1}, "ultk.language": {"tf": 1.7320508075688772}, "ultk.language.grammar.Rule": {"tf": 2.8284271247461903}, "ultk.language.grammar.Rule.is_terminal": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression": {"tf": 2.6457513110645907}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 2}, "ultk.language.grammar.Grammar": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.parse": {"tf": 2.449489742783178}, "ultk.language.grammar.Grammar.generate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 2.8284271247461903}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 2.6457513110645907}, "ultk.language.grammar.Grammar.get_all_rules": {"tf": 1}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1.7320508075688772}, "ultk.language.language": {"tf": 2.8284271247461903}, "ultk.language.language.Expression": {"tf": 1.4142135623730951}, "ultk.language.language.Language.add_expression": {"tf": 1}, "ultk.language.language.Language.is_natural": {"tf": 1.4142135623730951}, "ultk.language.language.Language.degree_property": {"tf": 1.4142135623730951}, "ultk.language.language.Language.binary_matrix": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 2}, "ultk.language.sampling.powerset": {"tf": 1}, "ultk.language.sampling.all_meanings": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.random_languages": {"tf": 2.6457513110645907}, "ultk.language.sampling.generate_languages": {"tf": 2.8284271247461903}, "ultk.language.sampling.sample_lang_size": {"tf": 2}, "ultk.language.sampling.sample_quasi_natural": {"tf": 2}, "ultk.language.sampling.rename_id": {"tf": 1.4142135623730951}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1.7320508075688772}, "ultk.language.semantics": {"tf": 3.872983346207417}, "ultk.language.semantics.Referent": {"tf": 1.4142135623730951}, "ultk.language.semantics.Referent.__init__": {"tf": 1.4142135623730951}, "ultk.language.semantics.Universe": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 2.23606797749979}, "ultk.language.semantics.Universe.from_csv": {"tf": 1.7320508075688772}, "ultk.language.semantics.Meaning": {"tf": 2.23606797749979}, "ultk.language.semantics.Meaning.__init__": {"tf": 3}}, "df": 100, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "s": {"docs": {"ultk": {"tf": 1.4142135623730951}}, "df": 1}}}, "n": {"docs": {"ultk": {"tf": 2.23606797749979}, "ultk.effcomm": {"tf": 2}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.BayesianListener": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1.4142135623730951}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.optimization": {"tf": 1}, "ultk.effcomm.tradeoff": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1.4142135623730951}, "ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.grammar.Grammar.generate": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.language.Language.add_expression": {"tf": 1}, "ultk.language.language.Language.pop": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1}, "ultk.language.sampling.powerset": {"tf": 1}, "ultk.language.sampling.all_expressions": {"tf": 1}, "ultk.language.sampling.upto_comb": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.sample_lang_size": {"tf": 1.4142135623730951}, "ultk.language.semantics.Meaning": {"tf": 1}}, "df": 36, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm": {"tf": 2.23606797749979}, "ultk.effcomm.information": {"tf": 1}, "ultk.effcomm.informativity": {"tf": 1}, "ultk.language.semantics": {"tf": 1}}, "df": 5}}, "i": {"docs": {}, "df": 0, "s": {"docs": {"ultk": {"tf": 1.7320508075688772}, "ultk.effcomm": {"tf": 1.7320508075688772}, "ultk.effcomm.tradeoff": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1.7320508075688772}}, "df": 4}}}, "z": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.analysis": {"tf": 1}}, "df": 1}}}}}}}, "d": {"docs": {"ultk": {"tf": 4.242640687119285}, "ultk.effcomm": {"tf": 2.449489742783178}, "ultk.effcomm.agent": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.analysis": {"tf": 1}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1.7320508075688772}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1.4142135623730951}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 2}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1.7320508075688772}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 2.23606797749979}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.effcomm.tradeoff": {"tf": 1}, "ultk.effcomm.tradeoff.dominates": {"tf": 1}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 2}, "ultk.effcomm.util": {"tf": 1}, "ultk.language": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 2}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1.4142135623730951}, "ultk.language.language": {"tf": 1}, "ultk.language.language.Expression": {"tf": 1}, "ultk.language.language.Expression.can_express": {"tf": 1}, "ultk.language.language.Language.pop": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.generate_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1}, "ultk.language.semantics": {"tf": 2}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1.7320508075688772}}, "df": 54, "/": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}, "n": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}, "y": {"docs": {"ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 7, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.language.grammar.Rule": {"tf": 1}}, "df": 1}}}}}}, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.tradeoff.dominates": {"tf": 1}}, "df": 1}}}}}}, "c": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "y": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_accuracy": {"tf": 1.4142135623730951}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}}, "df": 7, "/": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "m": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}}, "df": 1}}}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}}, "df": 1}}}}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1}}, "df": 2}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 6}}}}}}}, "t": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm": {"tf": 1}, "ultk.effcomm.agent": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}}, "df": 4, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}}, "df": 1, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 1}}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "y": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}, "l": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}}, "df": 3}}, "t": {"docs": {}, "df": 0, "k": {"docs": {"ultk.effcomm": {"tf": 3}}, "df": 1}}, "g": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "m": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.information.get_rd_curve": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1}}, "df": 9}}}}}}}, "l": {"docs": {"ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1.7320508075688772}, "ultk.language.grammar.Grammar.get_all_rules": {"tf": 1}, "ultk.language.sampling.powerset": {"tf": 1.4142135623730951}, "ultk.language.sampling.all_meanings": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.random_languages": {"tf": 2}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1.4142135623730951}}, "df": 23, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.optimization.Mutation.precondition": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.precondition": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.precondition": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1}}, "df": 4}}}}}, "p": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.information.compute_rate_distortion": {"tf": 1.4142135623730951}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1.4142135623730951}}, "df": 2}}}}}}, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 2}}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}}, "df": 1}}}, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "y": {"docs": {"ultk.language.language": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1}}, "df": 5}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.language.grammar.Rule.is_terminal": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.semantics": {"tf": 1}, "ultk.language.semantics.Meaning": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1.4142135623730951}}, "df": 17, "a": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.optimization.sample_parents": {"tf": 1}}, "df": 1}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "g": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.sampling.random_languages": {"tf": 1}}, "df": 1, "s": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.effcomm.information.ib_accuracy": {"tf": 1}, "ultk.effcomm.information.ib_distortion": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.informativity.communicative_success": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.effcomm.tradeoff.dominates": {"tf": 1}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.effcomm.util.marginal": {"tf": 1}, "ultk.effcomm.util.conditional": {"tf": 1}, "ultk.effcomm.util.joint": {"tf": 1}, "ultk.effcomm.util.marginalize": {"tf": 1}, "ultk.effcomm.util.bayes": {"tf": 1}, "ultk.effcomm.util.gNID": {"tf": 1}, "ultk.language.grammar.Rule.is_terminal": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1}, "ultk.language.sampling.powerset": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1}, "ultk.language.semantics.Referent.__init__": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 64}}}}}}, "s": {"docs": {"ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 2}}, "b": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}}, "df": 2}}}}}}}, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {"ultk.effcomm.information.get_rd_curve": {"tf": 1}}, "df": 1}}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.information.compute_rate_distortion": {"tf": 1.7320508075688772}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_ib_curve": {"tf": 1.7320508075688772}, "ultk.effcomm.information.get_bottleneck": {"tf": 2}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.ib_accuracy": {"tf": 2}, "ultk.effcomm.information.ib_distortion": {"tf": 2}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 2}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 2}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.effcomm.util.marginal": {"tf": 1}, "ultk.effcomm.util.conditional": {"tf": 1.4142135623730951}, "ultk.effcomm.util.joint": {"tf": 1.7320508075688772}, "ultk.effcomm.util.marginalize": {"tf": 1.7320508075688772}, "ultk.effcomm.util.bayes": {"tf": 1}}, "df": 18, "s": {"docs": {"ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.semantics.Universe.from_csv": {"tf": 1}}, "df": 2}}}}}, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 2.23606797749979}, "ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 2.23606797749979}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 2.23606797749979}, "ultk.effcomm.agent.Listener.__init__": {"tf": 2.23606797749979}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 2.23606797749979}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 2.23606797749979}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 2.23606797749979}}, "df": 13, "s": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm.agent": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}}, "df": 5}}}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.analysis.trade_off_ttest": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.language.aggregate_expression_complexity": {"tf": 1}}, "df": 1, "s": {"docs": {"ultk.language.language.aggregate_expression_complexity": {"tf": 1}}, "df": 1}}, "o": {"docs": {}, "df": 0, "r": {"docs": {"ultk.language.language.aggregate_expression_complexity": {"tf": 1}}, "df": 1}}}}}}}}}, "s": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm": {"tf": 1}, "ultk.effcomm.agent": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.information.information_rate": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}, "ultk.effcomm.tradeoff": {"tf": 1}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}, "ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.get_all_rules": {"tf": 1}, "ultk.language.language": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}, "ultk.language.semantics": {"tf": 1.4142135623730951}, "ultk.language.semantics.Meaning": {"tf": 1.4142135623730951}, "ultk.language.semantics.Meaning.__init__": {"tf": 2}}, "df": 25, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 1, "d": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}}, "df": 2}}}}}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}}, "df": 1, "s": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {"ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}}, "df": 2, "s": {"docs": {"ultk.effcomm.agent.BayesianListener": {"tf": 1}}, "df": 1}, "d": {"docs": {"ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1.4142135623730951}}, "df": 2}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.language.language": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.grammar.Rule": {"tf": 1}}, "df": 1, "s": {"docs": {"ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}}, "df": 1}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 1}}}}}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.semantics": {"tf": 1}}, "df": 1}}}}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}}}, "m": {"docs": {}, "df": 0, "p": {"docs": {"ultk": {"tf": 2}}, "df": 1}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"tf": 1}}, "df": 1}}}, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.language": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.language": {"tf": 1}}, "df": 5, "s": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}, "ultk.language": {"tf": 1}, "ultk.language.grammar.Grammar": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1}, "ultk.language.language.Language.pop": {"tf": 1}, "ultk.language.sampling.powerset": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 11, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1}}, "df": 1, "s": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1}}, "df": 4}}}}}}}}}, "b": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm": {"tf": 1.7320508075688772}, "ultk.language": {"tf": 1}}, "df": 2}}}}}}}}}}, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1}}, "df": 3}}, "u": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}, "ultk.effcomm.agent.BayesianListener": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.communicative_success": {"tf": 1}}, "df": 7}}}}, "x": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_bottleneck": {"tf": 1.4142135623730951}}, "df": 2}}, "i": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.effcomm.util.marginal": {"tf": 1.4142135623730951}}, "df": 2}}}, "f": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}}, "df": 2}}}}, "p": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1}}, "df": 1}}}}}}}}}}, "x": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer": {"tf": 1}}, "df": 1}}}}}}}}}}, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.optimization.Mutation.precondition": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.precondition": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.precondition": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 6, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.language.grammar.GrammaticalExpression": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}}, "df": 1}, "s": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1}}, "df": 1}}, "d": {"docs": {}, "df": 0, "d": {"docs": {"ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.language.Language.add_expression": {"tf": 1}}, "df": 3, "/": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}}, "df": 1}}}}}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}}, "df": 3}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 1}}}}}}}}}}, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.language.sampling.powerset": {"tf": 1}}, "df": 1}}}}}, "j": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 1}}}}}}, "s": {"docs": {"ultk": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 2}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1.4142135623730951}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.communicative_success": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1}, "ultk.language.semantics": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}}, "df": 26, "o": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.language": {"tf": 1}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.semantics.Universe.from_csv": {"tf": 1}}, "df": 9, "f": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1}, "ultk.effcomm.tradeoff.dominates": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.semantics": {"tf": 1}, "ultk.language.semantics.Referent": {"tf": 1}}, "df": 8, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.agent.BayesianListener": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.language.semantics.Meaning": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 4}}}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.util.gNID": {"tf": 1}}, "df": 6}}}}, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1.7320508075688772}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}}, "df": 4}}}}}}}}, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 2, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.language": {"tf": 1}}, "df": 1}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 1}}}}}}, "c": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.util.build_utility_matrix": {"tf": 1}}, "df": 3, "f": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1}}, "df": 1}}}}}}}, "h": {"docs": {"ultk.effcomm.agent": {"tf": 1}}, "df": 1}}, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "y": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}, "b": {"docs": {"ultk.effcomm.analysis.trade_off_ttest": {"tf": 1.4142135623730951}}, "df": 1, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm": {"tf": 2.8284271247461903}, "ultk.language": {"tf": 1.4142135623730951}}, "df": 2, "s": {"docs": {"ultk.effcomm": {"tf": 1}}, "df": 1}}}}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.language.semantics.Meaning": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1.4142135623730951}}, "df": 6, "s": {"docs": {"ultk.language.sampling.powerset": {"tf": 2}, "ultk.language.sampling.all_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.random_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}}, "df": 4}}}}, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}}, "df": 1}}}}}}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 2}}}}}}}}, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.optimization.sample_parents": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.sampling.sample_lang_size": {"tf": 1}}, "df": 1}}}}}}, "m": {"docs": {"ultk.effcomm.agent.BayesianListener": {"tf": 1}, "ultk.effcomm.information.expected_distortion": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.informativity": {"tf": 1.7320508075688772}, "ultk.effcomm.informativity.communicative_success": {"tf": 2.23606797749979}, "ultk.effcomm.util.marginal": {"tf": 1}, "ultk.effcomm.util.marginalize": {"tf": 1}, "ultk.effcomm.util.H": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1}}, "df": 8, "s": {"docs": {"ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}}, "df": 1}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.language.semantics": {"tf": 1.4142135623730951}}, "df": 3, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1.4142135623730951}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1.4142135623730951}, "ultk.language.sampling.rename_id": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}, "ultk.language.semantics.Referent.__init__": {"tf": 1}}, "df": 12, "s": {"docs": {"ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1}}, "df": 3}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}}, "df": 1}}}, "y": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 2}}, "df": 3}}}, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.language.sampling.random_languages": {"tf": 2.23606797749979}}, "df": 1}}}}}}}}, "y": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm": {"tf": 1}}, "df": 2}}}, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language": {"tf": 1}}, "df": 1, "s": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.grammar.Grammar.enumerate": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 2.449489742783178}, "ultk.language.sampling.sample_lang_size": {"tf": 1.7320508075688772}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1.4142135623730951}, "ultk.language.sampling.enumerate_all_languages": {"tf": 2}}, "df": 6, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {"ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "c": {"docs": {"ultk.effcomm": {"tf": 1}}, "df": 1}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}}, "df": 7}}}}, "e": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"ultk": {"tf": 1.7320508075688772}}, "df": 1}}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}}, "df": 2}}}, "e": {"docs": {"ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 3}}, "p": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1}, "p": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1}}}}}}, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 1}}}, "d": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"ultk": {"tf": 2.23606797749979}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.semantics": {"tf": 1}}, "df": 5, "s": {"docs": {"ultk": {"tf": 1.7320508075688772}, "ultk.language": {"tf": 1}, "ultk.language.semantics": {"tf": 1}, "ultk.language.semantics.Meaning": {"tf": 1}}, "df": 4}}}}}}}, "t": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1.7320508075688772}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.language.grammar.Grammar": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}, "ultk.language.semantics.Universe": {"tf": 1}, "ultk.language.semantics.Meaning": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 15, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {"ultk.language.sampling.all_meanings": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}}, "df": 2}}, "e": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm": {"tf": 1}, "ultk.effcomm.agent.BayesianListener": {"tf": 1}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}, "ultk.effcomm.informativity.communicative_success": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.semantics.Universe.from_csv": {"tf": 1}}, "df": 7, "d": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}}, "df": 1}, "n": {"docs": {"ultk.language.sampling.enumerate_all_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1.4142135623730951}}, "df": 2}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.effcomm.util.gNID": {"tf": 1}}, "df": 3}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.agent": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.tradeoff.tradeoff": {"tf": 1}}, "df": 1}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1}}, "df": 1}}}}}, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.optimization.sample_parents": {"tf": 1}}, "df": 1}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.GrammaticalExpression": {"tf": 1}}, "df": 1}}}}}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm": {"tf": 1.7320508075688772}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.language": {"tf": 1}, "ultk.language.semantics": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 8, "s": {"docs": {"ultk": {"tf": 1.4142135623730951}}, "df": 1}, "d": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 2}}}, "n": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}, "ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 2}, "ultk.effcomm.informativity.communicative_success": {"tf": 1.7320508075688772}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.language.semantics": {"tf": 1}}, "df": 15, "s": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 2.449489742783178}}, "df": 3}, "/": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm": {"tf": 1}, "ultk.effcomm.agent": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}}, "df": 4}}}, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1}, "ultk.language.language.Language.pop": {"tf": 1}}, "df": 6}, "s": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}}, "df": 3}}, "c": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1}}, "df": 2}}, "y": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}, "ultk.effcomm.util.build_utility_matrix": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.language.Language.binary_matrix": {"tf": 1}}, "df": 7}}}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}, "ultk.effcomm.sampling": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 2.6457513110645907}, "ultk.language.sampling.generate_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}}, "df": 7}}}, "e": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 3.3166247903554}, "ultk.language.sampling.generate_languages": {"tf": 3.1622776601683795}, "ultk.language.sampling.sample_lang_size": {"tf": 2}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1.7320508075688772}, "ultk.language.sampling.enumerate_all_languages": {"tf": 2.23606797749979}}, "df": 9, "s": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1.4142135623730951}}, "df": 2}, "d": {"docs": {"ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 2.23606797749979}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.rename_id": {"tf": 1}}, "df": 5}}}}, "e": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 6}}, "y": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.agent.BayesianListener": {"tf": 1}}, "df": 1}}, "v": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 1, "d": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 1}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1.4142135623730951}}, "df": 2}}}}}}}}}, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm": {"tf": 1}, "ultk.effcomm.agent": {"tf": 1}}, "df": 3}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}}, "df": 6}}, "s": {"docs": {"ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}}, "df": 1}}}}}, "m": {"docs": {"ultk": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.communicative_success": {"tf": 1}}, "df": 2}}}}}}}, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.language.semantics": {"tf": 1}}, "df": 4, "/": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis": {"tf": 1}, "ultk.effcomm.optimization": {"tf": 1}, "ultk.effcomm.tradeoff": {"tf": 1}}, "df": 4}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}}}}, "e": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1}, "ultk.language.semantics": {"tf": 1}}, "df": 3}}}}, "z": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1.4142135623730951}, "ultk.language.sampling.powerset": {"tf": 2}, "ultk.language.sampling.all_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.random_languages": {"tf": 4.123105625617661}, "ultk.language.sampling.generate_languages": {"tf": 3.3166247903554}, "ultk.language.sampling.sample_lang_size": {"tf": 2}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1.4142135623730951}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1}}, "df": 13, "s": {"docs": {"ultk.language.sampling.random_languages": {"tf": 1}}, "df": 1}}}, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.BayesianListener": {"tf": 1}}, "df": 1}}, "g": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.analysis.trade_off_ttest": {"tf": 1.4142135623730951}, "ultk.language.language.Expression.can_express": {"tf": 1}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1}}, "df": 3}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.Rule": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 3, "d": {"docs": {"ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1.7320508075688772}}, "df": 1, "s": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}}, "y": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "x": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "y": {"docs": {"ultk.language.language": {"tf": 1}}, "df": 1}}}}}}, "m": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.information.compute_rate_distortion": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}}, "df": 2}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {"ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1.4142135623730951}}, "df": 1, "s": {"docs": {"ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}}, "df": 1}}}}}}, "r": {"docs": {"ultk.effcomm.informativity.communicative_success": {"tf": 1}}, "df": 1, "c": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}}}, "z": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "k": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}}, "k": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.agent": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}}, "df": 7}}}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.information.compute_rate_distortion": {"tf": 1.7320508075688772}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_ib_curve": {"tf": 1.7320508075688772}, "ultk.effcomm.information.get_bottleneck": {"tf": 2.23606797749979}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1.4142135623730951}, "ultk.effcomm.information.ib_accuracy": {"tf": 2}, "ultk.effcomm.information.ib_distortion": {"tf": 2}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 2}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 2}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.effcomm.util.marginal": {"tf": 1}, "ultk.effcomm.util.conditional": {"tf": 1.4142135623730951}, "ultk.effcomm.util.joint": {"tf": 1.4142135623730951}, "ultk.effcomm.util.marginalize": {"tf": 1.7320508075688772}, "ultk.effcomm.util.bayes": {"tf": 1}, "ultk.effcomm.util.gNID": {"tf": 1.7320508075688772}, "ultk.language.language.Language.binary_matrix": {"tf": 1}}, "df": 19}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}}, "df": 2}}}, "e": {"docs": {"ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.7320508075688772}}, "df": 6}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk.language.language": {"tf": 1}}, "df": 1}}}}}}}, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"ultk.effcomm.tradeoff.interpolate_data": {"tf": 1.4142135623730951}}, "df": 1, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 1}}}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}}, "df": 1}}}}}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"ultk.language.language": {"tf": 1}, "ultk.language.semantics.Universe.from_csv": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.language.sampling.random_languages": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.util.build_utility_matrix": {"tf": 1}}, "df": 1}}}}}}, "e": {"1": {"3": {"1": {"4": {"2": {"docs": {"ultk": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 2.449489742783178}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 2}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.informativity.indicator_utility": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.informativity.communicative_success": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.dominates": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1.4142135623730951}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.language.grammar.Rule.is_terminal": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}, "ultk.language.sampling.powerset": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.semantics": {"tf": 1}}, "df": 33, "f": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk": {"tf": 3}, "ultk.effcomm": {"tf": 1}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.information": {"tf": 1}, "ultk.effcomm.informativity": {"tf": 1}, "ultk.effcomm.tradeoff": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1.7320508075688772}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.semantics": {"tf": 1}}, "df": 9}, "c": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm": {"tf": 2}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}}, "df": 2}}}}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "m": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm": {"tf": 2.8284271247461903}, "ultk.effcomm.agent.BayesianListener": {"tf": 1}}, "df": 3}}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.sampling.random_languages": {"tf": 1.4142135623730951}}, "df": 1, "s": {"docs": {"ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 1}}}}}}, "x": {"docs": {}, "df": 0, "p": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}}, "df": 1, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}}, "df": 2}}}, "e": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.sample_parents": {"tf": 2}}, "df": 2, "d": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}}, "df": 2}}}}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk.language.semantics.Meaning": {"tf": 1}}, "df": 1}}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.language.Expression.can_express": {"tf": 1}, "ultk.language.language.Language.binary_matrix": {"tf": 1}}, "df": 2, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.generate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 2.23606797749979}, "ultk.language.language": {"tf": 1.7320508075688772}, "ultk.language.language.Expression.can_express": {"tf": 1}, "ultk.language.language.Language": {"tf": 1}, "ultk.language.language.Language.add_expression": {"tf": 1}, "ultk.language.language.Language.pop": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1.7320508075688772}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.semantics": {"tf": 1.7320508075688772}}, "df": 22, "s": {"docs": {"ultk": {"tf": 1.7320508075688772}, "ultk.effcomm": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 2}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.Mutation.mutate": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 2}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1.4142135623730951}, "ultk.effcomm.sampling": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.language": {"tf": 1.4142135623730951}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1.7320508075688772}, "ultk.language.grammar.Grammar.enumerate": {"tf": 2}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1.4142135623730951}, "ultk.language.language.Language.add_expression": {"tf": 1}, "ultk.language.language.Language.pop": {"tf": 1}, "ultk.language.language.Language.degree_property": {"tf": 1}, "ultk.language.language.Language.binary_matrix": {"tf": 1.4142135623730951}, "ultk.language.sampling.all_expressions": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 2.6457513110645907}, "ultk.language.sampling.random_languages": {"tf": 3.3166247903554}, "ultk.language.sampling.generate_languages": {"tf": 3.4641016151377544}, "ultk.language.sampling.sample_lang_size": {"tf": 1.4142135623730951}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1.7320508075688772}}, "df": 37}}}}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.sample_lang_size": {"tf": 1}}, "df": 4}}}}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.agent.PragmaticListener": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1}}, "df": 4}}}}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.language.language": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 3, "s": {"docs": {"ultk": {"tf": 1.7320508075688772}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.semantics": {"tf": 1}}, "df": 5}}}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}}, "df": 3, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1}}, "df": 3}}}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk": {"tf": 1}, "ultk.language.grammar.Rule": {"tf": 1}}, "df": 2}}}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.agent.BayesianListener": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.language.sampling.random_combination_vocabulary": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.BayesianListener": {"tf": 1}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1.4142135623730951}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1.4142135623730951}}, "df": 20}}, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 2}}}, "y": {"docs": {"ultk.language.semantics": {"tf": 1.4142135623730951}}, "df": 1}}}, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"ultk": {"tf": 1}}, "df": 1}, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "y": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm.util.H": {"tf": 1}}, "df": 2}}}, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}}, "df": 1}}}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.information.information_rate": {"tf": 1}, "ultk.effcomm.information.ib_complexity": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1.7320508075688772}, "ultk.effcomm.information.ib_accuracy": {"tf": 1}, "ultk.effcomm.information.ib_distortion": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}, "ultk.effcomm.util.gNID": {"tf": 1.4142135623730951}}, "df": 8, "s": {"docs": {"ultk.effcomm.information.get_bottleneck": {"tf": 1.4142135623730951}, "ultk.effcomm.util.gNID": {"tf": 1}}, "df": 2}}, "s": {"docs": {"ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.optimization.sample_parents": {"tf": 1}}, "df": 1}}}}}}}}}, "d": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}}, "df": 1}, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}}, "df": 1}}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 2}, "ultk.language.sampling.powerset": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 5}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.language.sampling.sample_quasi_natural": {"tf": 1}}, "df": 1}}}}}}}}}}, "v": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk": {"tf": 1.4142135623730951}}, "df": 1, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.optimization": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}}, "df": 5}}}}}}}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.language.grammar.Grammar.from_yaml": {"tf": 1}}, "df": 1, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1}}}, "e": {"docs": {"ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 3}}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.effcomm.tradeoff.dominates": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}}, "df": 5, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.language": {"tf": 1}}, "df": 1}}}}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm": {"tf": 1}}, "df": 1, "d": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "t": {"docs": {}, "df": 0, "c": {"docs": {"ultk.effcomm.agent": {"tf": 1}}, "df": 1}}, "|": {"docs": {}, "df": 0, "m": {"docs": {"ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}}, "df": 1}}, "p": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1.7320508075688772}}, "df": 1}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.language.semantics.Meaning": {"tf": 1}}, "df": 3}}, "s": {"docs": {"ultk.effcomm.informativity.indicator_utility": {"tf": 1}}, "df": 1}}}}}, "m": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "o": {"docs": {"ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 1}}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"ultk.language.grammar.Rule.is_terminal": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.sampling.powerset": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 4}}}}, "[": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.information.ib_distortion": {"tf": 1.4142135623730951}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}}, "df": 1}}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.sampling.powerset": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.semantics": {"tf": 1}}, "df": 1}}}}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}}, "df": 3}}}}}, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}}, "c": {"docs": {"ultk": {"tf": 1.4142135623730951}}, "df": 1, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "m": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_bottleneck": {"tf": 2}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1.4142135623730951}}, "df": 7, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk": {"tf": 2.6457513110645907}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.information": {"tf": 1}, "ultk.effcomm.informativity": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1.7320508075688772}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.semantics": {"tf": 1}}, "df": 9}}, "v": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 2}, "ultk.effcomm": {"tf": 1.4142135623730951}, "ultk.effcomm.agent": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 2}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1.7320508075688772}, "ultk.effcomm.informativity.communicative_success": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.effcomm.util.build_utility_matrix": {"tf": 1}}, "df": 23, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.normalized_weights": {"tf": 1}}, "df": 1}}}}}}}}, "e": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}}, "df": 8, "d": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}}, "df": 1}}}}}}}}, "m": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.tradeoff.tradeoff": {"tf": 1}}, "df": 1}}}}}}}}}}}, "p": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {"ultk.language.grammar.Rule": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.information.information_rate": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 2.23606797749979}, "ultk.effcomm.information.get_bottleneck": {"tf": 1.7320508075688772}, "ultk.effcomm.information.ib_complexity": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 2}, "ultk.effcomm.util": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 2}}, "df": 15}, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.language.aggregate_expression_complexity": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm": {"tf": 1}}, "df": 2}}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.util": {"tf": 1}, "ultk.effcomm.util.build_utility_matrix": {"tf": 1}}, "df": 4}}}, "e": {"docs": {"ultk.effcomm.information.information_rate": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_bottleneck": {"tf": 1.7320508075688772}, "ultk.effcomm.information.ib_complexity": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.informativity.communicative_success": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 1}, "ultk.effcomm.util.marginal": {"tf": 1}, "ultk.effcomm.util.conditional": {"tf": 1}, "ultk.effcomm.util.joint": {"tf": 1}, "ultk.effcomm.util.marginalize": {"tf": 1}, "ultk.effcomm.util.bayes": {"tf": 1}, "ultk.effcomm.util.xlogx": {"tf": 1}, "ultk.effcomm.util.H": {"tf": 1}, "ultk.effcomm.util.MI": {"tf": 1}, "ultk.effcomm.util.DKL": {"tf": 1}, "ultk.effcomm.util.gNID": {"tf": 1}}, "df": 22, "s": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}}, "df": 1}, "d": {"docs": {"ultk.language.grammar.Rule": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.semantics": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk": {"tf": 1.4142135623730951}}, "df": 1}}, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 2}}}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}}, "df": 2}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 4}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1.4142135623730951}}, "df": 3}}}}}}, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 1}}}}}}}}, "/": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {"ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}}, "df": 1}}}}}}}}}}, "b": {"docs": {"ultk.language.sampling.upto_comb": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.sampling.random_combination_vocabulary": {"tf": 1}}, "df": 1, "s": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}}, "df": 2}}}}}}}}}}, "g": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}}, "df": 4}}}}}}}, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.util.build_utility_matrix": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}, "ultk.language.semantics": {"tf": 1.4142135623730951}}, "df": 9, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.effcomm.tradeoff": {"tf": 1}, "ultk.language": {"tf": 1}}, "df": 5}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.language.language": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 3}}}}, "e": {"docs": {"ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 2}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {}, "df": 0, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}}, "df": 1}}}}}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.tradeoff.tradeoff": {"tf": 1}}, "df": 1}}}}}}}, "f": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 1.7320508075688772}}, "df": 1}}}}}, "g": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"ultk": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}, "ultk.language": {"tf": 1}}, "df": 2, "s": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm": {"tf": 2.23606797749979}, "ultk.language": {"tf": 1.4142135623730951}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.language.Expression": {"tf": 1}, "ultk.language.language.Language": {"tf": 1}}, "df": 6}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.informativity.communicative_success": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 10}}}}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}}, "df": 2}}}, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1.4142135623730951}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}}, "df": 1}}}}}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {"ultk": {"tf": 1.4142135623730951}}, "df": 1}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.LiteralListener": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}}, "df": 7}}}}}}}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}}, "df": 1}}}}}}}}}, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1}}, "df": 1}, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk.language.grammar.Rule": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1}}, "t": {"docs": {"ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}}, "df": 1}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1}, "ultk.language.semantics": {"tf": 1}}, "df": 2, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}}, "df": 2}}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 1.7320508075688772}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1.4142135623730951}}, "df": 2, "s": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 2}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}}, "df": 5}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 1}}}}}, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"ultk.language.grammar.Rule": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1.4142135623730951}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1}}, "df": 10}}}}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 1}}}}}}}}, "e": {"docs": {"ultk.language.grammar.Grammar": {"tf": 1}}, "df": 1}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}}, "df": 1, "s": {"docs": {"ultk.effcomm.information.get_bottleneck": {"tf": 1.4142135623730951}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}}, "df": 2}}}}}}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1.4142135623730951}, "ultk.language.language.Language.degree_property": {"tf": 1}}, "df": 2, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 1.7320508075688772}}, "df": 1}}}}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1.7320508075688772}, "ultk.effcomm.information.get_bottleneck": {"tf": 2}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1.7320508075688772}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 2.6457513110645907}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 2}}, "df": 9}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}, "ultk.language": {"tf": 1}}, "df": 3, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1.7320508075688772}, "ultk.effcomm.information.get_bottleneck": {"tf": 2}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1.7320508075688772}}, "df": 3}}}, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "f": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 3}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}}, "df": 4}}, "a": {"docs": {"ultk.language.sampling.sample_quasi_natural": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk.language.grammar.GrammaticalExpression": {"tf": 1}}, "df": 1}}}}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1}}, "df": 1}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer": {"tf": 1}, "ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}, "ultk.language.semantics": {"tf": 1}}, "df": 7, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.agent": {"tf": 1}, "ultk.effcomm.optimization": {"tf": 1}, "ultk.language": {"tf": 1.7320508075688772}, "ultk.language.language": {"tf": 1.4142135623730951}, "ultk.language.semantics": {"tf": 1.4142135623730951}}, "df": 6}}, "i": {"docs": {}, "df": 0, "c": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 2}}}, "h": {"docs": {"ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.sampling.random_languages": {"tf": 1.4142135623730951}}, "df": 1, "s": {"docs": {"ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener": {"tf": 1}}, "df": 5}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.language.sampling.upto_comb": {"tf": 1}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1}}, "df": 3}}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"1": {"docs": {"ultk.language.grammar.Grammar.parse": {"tf": 1}}, "df": 1}, "docs": {"ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1}}, "df": 2, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.grammar.GrammaticalExpression": {"tf": 1}}, "df": 1}}}, "n": {"docs": {"ultk.language.grammar.Grammar.parse": {"tf": 1}}, "df": 1}, "i": {"docs": {"ultk.language.grammar.Grammar.parse": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1.7320508075688772}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.language": {"tf": 1}, "ultk.language.grammar.Rule": {"tf": 1.4142135623730951}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.language.Expression.can_express": {"tf": 1}, "ultk.language.language.Language.binary_matrix": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.semantics": {"tf": 1.4142135623730951}, "ultk.language.semantics.Meaning": {"tf": 1}}, "df": 29, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1}}, "df": 1}}}}}}}}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk": {"tf": 1}, "ultk.language": {"tf": 1}}, "df": 2}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}}, "df": 2}}}}}}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}}, "df": 1, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}}, "df": 2}}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.language.grammar.GrammaticalExpression": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}}, "df": 1, "s": {"docs": {"ultk.language.sampling.random_languages": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {"ultk.language.grammar.Grammar.from_yaml": {"tf": 1}}, "df": 1}}}}}}, "d": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.agent.BayesianListener": {"tf": 1.4142135623730951}, "ultk.effcomm.information.expected_distortion": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.informativity.communicative_success": {"tf": 1.4142135623730951}, "ultk.effcomm.util.joint": {"tf": 1}, "ultk.effcomm.util.marginalize": {"tf": 1}, "ultk.effcomm.util.bayes": {"tf": 1}}, "df": 7}}}, "p": {"docs": {}, "df": 0, "u": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 2}}, "f": {"docs": {}, "df": 0, "g": {"docs": {"ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1.4142135623730951}}, "df": 1}}, "s": {"docs": {}, "df": 0, "v": {"docs": {"ultk.language.semantics.Universe.from_csv": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "f": {"docs": {"ultk": {"tf": 4.123105625617661}, "ultk.effcomm": {"tf": 4.242640687119285}, "ultk.effcomm.agent.CommunicativeAgent.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1.7320508075688772}, "ultk.effcomm.analysis": {"tf": 1}, "ultk.effcomm.analysis.get_dataframe": {"tf": 2.23606797749979}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.trade_off_means": {"tf": 2.23606797749979}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 2.8284271247461903}, "ultk.effcomm.information.information_rate": {"tf": 1}, "ultk.effcomm.information.get_rd_curve": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 2.6457513110645907}, "ultk.effcomm.information.blahut_arimoto": {"tf": 3.4641016151377544}, "ultk.effcomm.information.get_ib_curve": {"tf": 3.4641016151377544}, "ultk.effcomm.information.get_bottleneck": {"tf": 3.605551275463989}, "ultk.effcomm.information.ib_complexity": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1.7320508075688772}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 2}, "ultk.effcomm.information.ib_accuracy": {"tf": 2.449489742783178}, "ultk.effcomm.information.ib_distortion": {"tf": 2}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 2}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 2}, "ultk.effcomm.informativity": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 2.6457513110645907}, "ultk.effcomm.informativity.communicative_success": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.Mutation.mutate": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 3.1622776601683795}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 2.6457513110645907}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.sample_parents": {"tf": 1.7320508075688772}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 2.8284271247461903}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 2}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 2.23606797749979}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 2.449489742783178}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 3.1622776601683795}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1.7320508075688772}, "ultk.effcomm.util.build_utility_matrix": {"tf": 1}, "ultk.effcomm.util.marginal": {"tf": 1}, "ultk.effcomm.util.conditional": {"tf": 1.4142135623730951}, "ultk.effcomm.util.joint": {"tf": 1.4142135623730951}, "ultk.effcomm.util.marginalize": {"tf": 1.7320508075688772}, "ultk.effcomm.util.bayes": {"tf": 1}, "ultk.effcomm.util.H": {"tf": 1}, "ultk.effcomm.util.gNID": {"tf": 1.7320508075688772}, "ultk.language": {"tf": 2}, "ultk.language.grammar.Rule": {"tf": 2.449489742783178}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1.7320508075688772}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1.7320508075688772}, "ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 2.449489742783178}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 2.23606797749979}, "ultk.language.language.Language.add_expression": {"tf": 1}, "ultk.language.language.Language.pop": {"tf": 1.4142135623730951}, "ultk.language.language.Language.degree_property": {"tf": 1}, "ultk.language.language.Language.binary_matrix": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1.4142135623730951}, "ultk.language.sampling.powerset": {"tf": 1.4142135623730951}, "ultk.language.sampling.all_meanings": {"tf": 1}, "ultk.language.sampling.all_expressions": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 2.449489742783178}, "ultk.language.sampling.upto_comb": {"tf": 1.7320508075688772}, "ultk.language.sampling.random_languages": {"tf": 2.6457513110645907}, "ultk.language.sampling.generate_languages": {"tf": 4.123105625617661}, "ultk.language.sampling.sample_lang_size": {"tf": 3}, "ultk.language.sampling.sample_quasi_natural": {"tf": 2.6457513110645907}, "ultk.language.sampling.rename_id": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 3.605551275463989}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1.7320508075688772}, "ultk.language.semantics": {"tf": 2.449489742783178}, "ultk.language.semantics.Referent.__init__": {"tf": 1}, "ultk.language.semantics.Universe": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 2}, "ultk.language.semantics.Meaning": {"tf": 1.4142135623730951}, "ultk.language.semantics.Meaning.__init__": {"tf": 2.8284271247461903}}, "df": 89, "f": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis": {"tf": 1}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.optimization": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer": {"tf": 1}, "ultk.effcomm.tradeoff": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}}, "df": 9, "s": {"docs": {"ultk.effcomm": {"tf": 1}}, "df": 1}}}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1.4142135623730951}}, "df": 5}}}}}, "e": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm": {"tf": 1}, "ultk.effcomm.optimization": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}}, "df": 5}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {"ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 1, "l": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}}, "df": 5, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}}, "df": 5}}}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1}}, "df": 8}}}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}, "n": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.language": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.semantics.Meaning": {"tf": 1}}, "df": 12, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}, "y": {"docs": {"ultk.effcomm.agent.BayesianListener": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1.4142135623730951}, "ultk.language.sampling.random_languages": {"tf": 1}}, "df": 5}}, "e": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1.7320508075688772}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}, "ultk.language": {"tf": 1}, "ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.language": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1.4142135623730951}, "ultk.language.semantics.Meaning": {"tf": 1}}, "df": 8, "s": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1.7320508075688772}, "ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 3}}}, "r": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1.7320508075688772}, "ultk.effcomm.informativity.communicative_success": {"tf": 1.7320508075688772}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1.7320508075688772}, "ultk.effcomm.tradeoff": {"tf": 1}, "ultk.effcomm.tradeoff.dominates": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.effcomm.util.marginal": {"tf": 1}, "ultk.language": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1.4142135623730951}, "ultk.language.language": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.semantics": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 31, "g": {"docs": {}, "df": 0, "/": {"1": {"0": {"docs": {"ultk": {"tf": 2.449489742783178}}, "df": 1}, "docs": {}, "df": 0}, "3": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.sampling.powerset": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}}}}, "docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "/": {"1": {"0": {"docs": {"ultk": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}}}}}}, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 1}}, "df": 1}}}}}}}, "u": {"docs": {}, "df": 0, "t": {"docs": {"ultk": {"tf": 1}, "ultk.language.semantics.Meaning": {"tf": 1}}, "df": 2, "p": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 3}}}}, "r": {"docs": {"ultk.language.grammar.Rule.is_terminal": {"tf": 1}}, "df": 1}}, "b": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.semantics.Referent": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 2, "s": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.language.language.Language": {"tf": 1}, "ultk.language.semantics": {"tf": 1.4142135623730951}, "ultk.language.semantics.Universe": {"tf": 1}, "ultk.language.semantics.Meaning": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1.4142135623730951}}, "df": 7}, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}}, "df": 1, "s": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}}, "df": 2}}}}}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.information.get_rd_curve": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 2}}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1.7320508075688772}, "ultk.effcomm.informativity.communicative_success": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.effcomm.util.gNID": {"tf": 1}, "ultk.language.sampling.powerset": {"tf": 1}, "ultk.language.semantics.Meaning": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1.7320508075688772}}, "df": 19}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}, "ultk.language": {"tf": 1}}, "df": 4, "w": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.language.Expression.can_express": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 2}}}}}}}}, "d": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.informativity.communicative_success": {"tf": 1}}, "df": 1}}}}, "n": {"docs": {"ultk": {"tf": 2.449489742783178}, "ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.sampling.upto_comb": {"tf": 1.4142135623730951}}, "df": 3, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk": {"tf": 2}, "ultk.effcomm.analysis.trade_off_means": {"tf": 2.449489742783178}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1.7320508075688772}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.language": {"tf": 1}, "ultk.language.language.Language.is_natural": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1.4142135623730951}, "ultk.language.sampling.enumerate_all_languages": {"tf": 3}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1.7320508075688772}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 12, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1.4142135623730951}}, "df": 3}}}}}}, "e": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}}, "df": 2, "/": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {"ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}}}}}}}, "e": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1.7320508075688772}, "ultk.language.grammar.Rule": {"tf": 1.4142135623730951}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.parse": {"tf": 2.6457513110645907}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1.4142135623730951}, "ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1.4142135623730951}, "ultk.language.semantics": {"tf": 1}, "ultk.language.semantics.Referent.__init__": {"tf": 1.4142135623730951}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1.4142135623730951}}, "df": 16, "s": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 3}, "d": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.LiteralListener": {"tf": 1}}, "df": 1}}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1.4142135623730951}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1.7320508075688772}, "ultk.language.language.Language.binary_matrix": {"tf": 1.4142135623730951}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1.4142135623730951}}, "df": 8, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 2}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.language": {"tf": 1}, "ultk.language.semantics": {"tf": 1}}, "df": 2}}}}}}}}}}, "s": {"docs": {"ultk.language.semantics": {"tf": 1.7320508075688772}}, "df": 1}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.semantics": {"tf": 1}}, "df": 1}}}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.semantics": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.language.semantics": {"tf": 1}}, "df": 1}}}}}}}}}}}, "b": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_bottleneck": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.language.sampling.upto_comb": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 2}, "ultk.language.sampling.sample_lang_size": {"tf": 1.4142135623730951}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1.7320508075688772}}, "df": 12}, "t": {"docs": {}, "df": 0, "a": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1.7320508075688772}}, "df": 2}}}}, "p": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.effcomm.util.marginal": {"tf": 1}, "ultk.effcomm.util.conditional": {"tf": 1.4142135623730951}, "ultk.effcomm.util.joint": {"tf": 1.7320508075688772}, "ultk.effcomm.util.marginalize": {"tf": 1.7320508075688772}, "ultk.effcomm.util.bayes": {"tf": 1}}, "df": 6}}}}, "o": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.language.grammar.Rule.is_terminal": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}}, "df": 6, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}}, "df": 1, "d": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.effcomm.util.gNID": {"tf": 1}}, "df": 4}}}}}}}}, "n": {"docs": {"ultk.effcomm.information.get_bottleneck": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.language.sampling.powerset": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1.7320508075688772}}, "df": 7, "e": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1.7320508075688772}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 6}, "z": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}}, "df": 2}}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 1}}, "df": 1}}}}}}}}}}, "d": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}}, "df": 1}}}}}}}}}}, "t": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.tradeoff.dominates": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 2}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.semantics.Meaning": {"tf": 1}}, "df": 10, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.agent.BayesianListener": {"tf": 1}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1}}, "df": 2}}}}, "e": {"docs": {"ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 4}}, "d": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.Rule": {"tf": 1}}, "df": 1, "s": {"docs": {"ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}}, "df": 1}}}}, "p": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1.7320508075688772}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1.4142135623730951}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}}, "df": 3}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1.4142135623730951}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}}, "df": 3}}}}}}, "e": {"docs": {}, "df": 0, "w": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1.4142135623730951}, "ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.sampling.rename_id": {"tf": 1}}, "df": 4}, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1.7320508075688772}, "ultk.effcomm.informativity.communicative_success": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1}}, "df": 7}}, "x": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.optimization.sample_parents": {"tf": 1}}, "df": 1}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 2}}}, "y": {"docs": {"ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}}, "df": 1}}}}}}}}, "b": {"docs": {"ultk.language.sampling.random_languages": {"tf": 1}}, "df": 1}, "c": {"docs": {}, "df": 0, "r": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}}, "df": 1}}}, "r": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.communicative_success": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1.4142135623730951}}, "df": 13, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"ultk": {"tf": 1.7320508075688772}}, "df": 1}}}}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}}, "df": 2}}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.7320508075688772}}, "df": 2, "s": {"docs": {"ultk.effcomm.analysis": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.tradeoff": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1.4142135623730951}}, "df": 4}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 3}}}}}}}, "a": {"docs": {}, "df": 0, "d": {"docs": {"ultk": {"tf": 1}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1}}, "df": 2}, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}}, "df": 4}}}}}}}, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.semantics": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.agent": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1.7320508075688772}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 2}, "ultk.effcomm.information.get_ib_curve": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.ib_accuracy": {"tf": 2}, "ultk.effcomm.information.ib_distortion": {"tf": 2}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 2}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1.7320508075688772}, "ultk.effcomm.informativity.communicative_success": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1.4142135623730951}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1.4142135623730951}, "ultk.language.sampling.generate_languages": {"tf": 2}, "ultk.language.sampling.sample_lang_size": {"tf": 1.7320508075688772}, "ultk.language.semantics.Referent.__init__": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 30}}}, "s": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.language.language.Language.is_natural": {"tf": 1}}, "df": 5}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.grammar.Grammar.parse": {"tf": 1}}, "df": 1}}}}}}}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}}, "df": 1}}}}}}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.sampling.upto_comb": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 2}}}}}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.language.semantics": {"tf": 1}}, "df": 1, "y": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.agent": {"tf": 1}}, "df": 1}}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}}, "df": 2}}}}}}, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.BayesianListener": {"tf": 1}}, "df": 1}}}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.sampling.powerset": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "f": {"1": {"docs": {"ultk.effcomm.informativity.indicator_utility": {"tf": 1}}, "df": 1}, "2": {"docs": {"ultk.effcomm.informativity.indicator_utility": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.semantics": {"tf": 1.4142135623730951}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 2, "s": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}, "t": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.semantics": {"tf": 1}, "ultk.language.semantics.Referent": {"tf": 1}, "ultk.language.semantics.Referent.__init__": {"tf": 1.4142135623730951}, "ultk.language.semantics.Universe": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1.4142135623730951}, "ultk.language.semantics.Meaning.__init__": {"tf": 1.4142135623730951}}, "df": 12, "s": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}, "ultk.language": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.sampling.all_meanings": {"tf": 1}, "ultk.language.semantics": {"tf": 1.7320508075688772}, "ultk.language.semantics.Meaning": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 2.23606797749979}}, "df": 9}}}}, "s": {"docs": {"ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 1}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"ultk": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}}, "df": 1}}}}}}}, "s": {"docs": {"ultk.language.semantics": {"tf": 1.4142135623730951}}, "df": 1}}, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.normalized_weights": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.ib_accuracy": {"tf": 1}, "ultk.effcomm.information.ib_distortion": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}, "ultk.language.language.Expression.can_express": {"tf": 1}, "ultk.language.sampling.powerset": {"tf": 1}, "ultk.language.sampling.upto_comb": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.sample_lang_size": {"tf": 1}}, "df": 12, "s": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.effcomm.information.ib_accuracy": {"tf": 1}, "ultk.effcomm.information.ib_distortion": {"tf": 1}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}, "ultk.effcomm.informativity.indicator_utility": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.effcomm.tradeoff.dominates": {"tf": 1}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.effcomm.util.marginal": {"tf": 1}, "ultk.effcomm.util.conditional": {"tf": 1}, "ultk.effcomm.util.joint": {"tf": 1}, "ultk.effcomm.util.marginalize": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1.4142135623730951}, "ultk.language.language.Language.pop": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1.4142135623730951}, "ultk.language.sampling.powerset": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1}}, "df": 40}, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.tradeoff.tradeoff": {"tf": 1}}, "df": 1}}}}}}}, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk": {"tf": 1.4142135623730951}}, "df": 1}}}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "w": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}}, "df": 6}}, "v": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.Rule": {"tf": 1}}, "df": 1}}}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.BayesianListener": {"tf": 1}}, "df": 1, "d": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1.4142135623730951}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 1}}}}}}}, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1}}, "df": 1}}}}, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.language.Language.pop": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 1}}}}}}}}, "s": {"docs": {}, "df": 0, "a": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}}, "df": 7}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm": {"tf": 1}, "ultk.effcomm.information": {"tf": 1}, "ultk.effcomm.information.information_rate": {"tf": 1}, "ultk.effcomm.information.get_rd_curve": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1.7320508075688772}, "ultk.effcomm.information.blahut_arimoto": {"tf": 2.23606797749979}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 9}, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm": {"tf": 1}, "ultk.effcomm.agent": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}}, "df": 5, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}}, "df": 1}}}}}}}}}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1.7320508075688772}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1.4142135623730951}, "ultk.language.sampling.random_languages": {"tf": 2.449489742783178}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1}}, "df": 5, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1.4142135623730951}}, "df": 7}}}}}, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}}, "df": 1}}}, "e": {"docs": {"ultk.language.semantics": {"tf": 1.4142135623730951}}, "df": 1}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}}, "df": 5, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.Rule": {"tf": 2}, "ultk.language.grammar.Rule.is_terminal": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1.4142135623730951}}, "df": 4, "s": {"docs": {"ultk.language.grammar.Rule": {"tf": 1.4142135623730951}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.grammar.Grammar": {"tf": 1}, "ultk.language.grammar.Grammar.get_all_rules": {"tf": 1}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1}}, "df": 5}}}}, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {"ultk": {"tf": 1}}, "df": 1}}, "w": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1.7320508075688772}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}}, "df": 6, "s": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1}}, "df": 1}}}, "h": {"docs": {}, "df": 0, "o": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 1}}, "df": 1}, "s": {"docs": {"ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.grammar.Rule.is_terminal": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1.4142135623730951}}, "df": 4}}, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.grammar.Rule": {"tf": 1}}, "df": 1}}}}}, "w": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm": {"tf": 1}, "ultk.effcomm.agent.BayesianListener": {"tf": 2.23606797749979}, "ultk.effcomm.information.ib_accuracy": {"tf": 2}, "ultk.effcomm.information.ib_distortion": {"tf": 2}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 2}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1.4142135623730951}}, "df": 7, "h": {"docs": {}, "df": 0, "y": {"docs": {"ultk": {"tf": 1}}, "df": 1}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"ultk": {"tf": 1.7320508075688772}, "ultk.effcomm": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1.4142135623730951}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.language": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 2.23606797749979}, "ultk.language.language.Language.binary_matrix": {"tf": 1.4142135623730951}, "ultk.language.sampling.powerset": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}, "ultk.language.semantics": {"tf": 1}, "ultk.language.semantics.Meaning": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 29}}}, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}}, "df": 3}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 6}}, "n": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.language.grammar.Rule": {"tf": 1.4142135623730951}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 7}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.optimization.Mutation.precondition": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.precondition": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.precondition": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.effcomm.tradeoff.dominates": {"tf": 1.7320508075688772}, "ultk.language.grammar.Rule.is_terminal": {"tf": 1}, "ultk.language.language.Language.is_natural": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}}, "df": 14}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.language.Language.degree_property": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 3}}, "s": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1.4142135623730951}}, "df": 2}, "y": {"docs": {"ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}}, "df": 3, "s": {"docs": {"ultk.language.sampling.upto_comb": {"tf": 1}}, "df": 1}}}, "e": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.agent.BayesianListener": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.language": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}, "ultk.language.semantics.Meaning": {"tf": 1}}, "df": 9, "l": {"docs": {}, "df": 0, "l": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}}, "df": 2}}, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.language.grammar.Rule": {"tf": 1.4142135623730951}}, "df": 5, "s": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1.4142135623730951}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 8}, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.language.grammar.Rule": {"tf": 1}}, "df": 1}}}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1.7320508075688772}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 2}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.sample_parents": {"tf": 1.4142135623730951}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.language.grammar.Rule": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1.4142135623730951}, "ultk.language.language": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 2}, "ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.rename_id": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1.4142135623730951}}, "df": 28, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.language.sampling.upto_comb": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}}, "df": 4}}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1.7320508075688772}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 16}}, "s": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.informativity.communicative_success": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.semantics.Universe.from_csv": {"tf": 1}}, "df": 4}}}}}, "t": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}}, "df": 1}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "k": {"docs": {"ultk.language": {"tf": 1}, "ultk.language.semantics": {"tf": 1}}, "df": 2, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm": {"tf": 1}}, "df": 1}}}}, "d": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.BayesianListener": {"tf": 1.4142135623730951}}, "df": 2, "s": {"docs": {"ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1.7320508075688772}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 1.4142135623730951}, "ultk.effcomm.util.gNID": {"tf": 1.4142135623730951}}, "df": 4}, "|": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}}, "df": 1}}}}}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 1}}}}}}, "l": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}}, "df": 5}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}}, "df": 1}}}}, "|": {"docs": {}, "df": 0, "m": {"docs": {"ultk.effcomm.information.information_rate": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}}, "df": 2}}}, "h": {"docs": {"ultk.effcomm.util.H": {"tf": 1}}, "df": 1, "a": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.language.language.Language.degree_property": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}}, "df": 7}}, "s": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.language": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1.4142135623730951}}, "df": 7}, "t": {"docs": {"ultk.effcomm.information.compute_rate_distortion": {"tf": 2}, "ultk.effcomm.information.blahut_arimoto": {"tf": 2}, "ultk.effcomm.information.ib_distortion": {"tf": 1.4142135623730951}}, "df": 3, "{": {"docs": {}, "df": 0, "m": {"docs": {"ultk.effcomm.agent.BayesianListener": {"tf": 1.4142135623730951}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.communicative_success": {"tf": 2.23606797749979}}, "df": 4, "}": {"docs": {}, "df": 0, "|": {"docs": {}, "df": 0, "i": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1}}, "df": 1}}}}, "x": {"docs": {"ultk.effcomm.information.expected_distortion": {"tf": 1.7320508075688772}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1.4142135623730951}}, "df": 2, "}": {"docs": {}, "df": 0, "|": {"docs": {}, "df": 0, "x": {"docs": {"ultk.effcomm.information.expected_distortion": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1}}, "df": 2}}}}}, "[": {"docs": {}, "df": 0, "j": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {"ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}}, "df": 1}}}, "n": {"docs": {}, "df": 0, "d": {"docs": {"ultk.language.grammar.Rule": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}}, "df": 2}}}, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "p": {"docs": {"ultk": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.information": {"tf": 1}, "ultk.effcomm.informativity.communicative_success": {"tf": 1}, "ultk.effcomm.util": {"tf": 1}}, "df": 4}}, "f": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {"ultk.language.semantics.Meaning": {"tf": 1}}, "df": 1}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1.4142135623730951}}, "df": 1}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}}, "df": 4}}}}, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, ":": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "w": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}, "d": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "i": {"docs": {"ultk": {"tf": 2.449489742783178}}, "df": 1}, "c": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.sampling.powerset": {"tf": 1}}, "df": 1}}}}, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "b": {"docs": {"ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}}, "df": 1}}}}}}}}}}}}, "m": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "#": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.sampling.powerset": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 2}, "ultk.language": {"tf": 1}}, "df": 2, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "o": {"docs": {}, "df": 0, "w": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.generate_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}}, "df": 12, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm": {"tf": 1}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "h": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 1}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language": {"tf": 1}, "ultk.language.language.Language.is_natural": {"tf": 1}}, "df": 2}}}}}, "d": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm.information.expected_distortion": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1.4142135623730951}, "ultk.effcomm.util.DKL": {"tf": 1}}, "df": 5, "o": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1}}, "df": 2, "c": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk": {"tf": 1}, "ultk.language.semantics.Universe.from_csv": {"tf": 1}}, "df": 2}}}}}}}}}}, "s": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.informativity.communicative_success": {"tf": 1}}, "df": 1}}}}}}}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 1}}}}}}}, "w": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}}, "df": 2}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1.4142135623730951}}, "df": 5}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.tradeoff.dominates": {"tf": 1.4142135623730951}}, "df": 1}, "d": {"docs": {"ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}}, "df": 3}}}}}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}}, "df": 3}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1.7320508075688772}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1.7320508075688772}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 3, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm": {"tf": 1}, "ultk.effcomm.information": {"tf": 1}, "ultk.effcomm.information.get_rd_curve": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1.7320508075688772}, "ultk.effcomm.information.blahut_arimoto": {"tf": 2.23606797749979}, "ultk.effcomm.information.get_ib_curve": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.ib_distortion": {"tf": 1.4142135623730951}}, "df": 9}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1.4142135623730951}}, "df": 2}}}}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.LiteralListener": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1.4142135623730951}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1.4142135623730951}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1.7320508075688772}, "ultk.effcomm.informativity.communicative_success": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1.7320508075688772}, "ultk.language.semantics.Meaning": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1.7320508075688772}}, "df": 20, "s": {"docs": {"ultk.effcomm": {"tf": 1}}, "df": 1}}}}}}}}}, "s": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.ib_accuracy": {"tf": 1}, "ultk.effcomm.information.ib_distortion": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}}, "df": 8}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.util.gNID": {"tf": 1}}, "df": 1, "s": {"docs": {"ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 1}}}}}}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.information.ib_comm_cost": {"tf": 1}}, "df": 1, "s": {"docs": {"ultk.effcomm.util.DKL": {"tf": 1}}, "df": 1}}}}}}}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1.4142135623730951}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1.7320508075688772}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 15, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1.7320508075688772}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1.4142135623730951}}, "df": 5}}}}}}}}, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}}, "df": 1}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 2}}}}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}}, "df": 1}}}}}}}}, "f": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.semantics.Meaning": {"tf": 1}}, "df": 1}}}}}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 2}}}}}, "b": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}}, "df": 2}}}}}}}, "n": {"docs": {}, "df": 0, "i": {"docs": {"ultk": {"tf": 1}}, "df": 1}, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.agent.LiteralListener": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language": {"tf": 1}}, "df": 1}}}}}}}}}, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.sampling.sample_quasi_natural": {"tf": 1}}, "df": 1, "s": {"docs": {"ultk": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 2}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1.4142135623730951}}, "df": 3}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"ultk.effcomm.agent.BayesianListener": {"tf": 1}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}}, "df": 2, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.agent.BayesianListener": {"tf": 1}}, "df": 1}}}}}}}, "m": {"docs": {"ultk.effcomm.agent.BayesianListener": {"tf": 1}}, "df": 1}}}, "e": {"docs": {"ultk.effcomm.tradeoff.dominates": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.agent.BayesianListener": {"tf": 1}, "ultk.effcomm.informativity.communicative_success": {"tf": 1}}, "df": 2}, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.semantics": {"tf": 1}}, "df": 2}}}}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1.4142135623730951}, "ultk.language.language": {"tf": 1.4142135623730951}, "ultk.language.semantics": {"tf": 1}, "ultk.language.semantics.Meaning": {"tf": 1}}, "df": 10, "d": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.util.build_utility_matrix": {"tf": 1}}, "df": 4}, "s": {"docs": {"ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.language": {"tf": 1}}, "df": 3}}}, "d": {"docs": {"ultk.effcomm.information.compute_rate_distortion": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}, "ultk.effcomm.util.marginal": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1.4142135623730951}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 11, "s": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}}, "df": 2}}}}}}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1.7320508075688772}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1.4142135623730951}}, "df": 5}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}}, "df": 1}}}}}}}, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.agent.PragmaticListener": {"tf": 1}}, "df": 1}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}}, "df": 2}}}, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1.4142135623730951}, "ultk.effcomm.information.ib_accuracy": {"tf": 1}, "ultk.effcomm.information.ib_distortion": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1.4142135623730951}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 1.4142135623730951}}, "df": 5}}}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.agent.BayesianListener": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}}, "df": 1}}}}}}}}, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"ultk.effcomm.informativity.indicator_utility": {"tf": 1}}, "df": 1}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language": {"tf": 1}}, "df": 1}}}}}}}}}, "e": {"docs": {}, "df": 0, "p": {"docs": {"ultk.language.grammar.Grammar.enumerate": {"tf": 1}}, "df": 1}}}, "y": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"ultk.effcomm": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 2.23606797749979}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.trade_off_means": {"tf": 2}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1.4142135623730951}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 6, "f": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 2.23606797749979}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1.7320508075688772}, "ultk.effcomm.tradeoff": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1.7320508075688772}, "ultk.language.semantics.Universe.from_csv": {"tf": 1}}, "df": 7}}}}}}}}, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 2}}, "df": 1}}}}}}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 4}}}}, "m": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "y": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 2}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1.4142135623730951}}, "df": 1}}}, "f": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 2}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1.4142135623730951}}, "df": 2}, "l": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "v": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 1}}, "df": 1}}}}, "[": {"docs": {}, "df": 0, "x": {"docs": {"ultk.effcomm.information.expected_distortion": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1}}, "df": 2}}}, "p": {"1": {"docs": {"ultk.effcomm.tradeoff.dominates": {"tf": 1.7320508075688772}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 2}}, "df": 2, "[": {"docs": {}, "df": 0, "i": {"docs": {"ultk.effcomm.tradeoff.dominates": {"tf": 1.4142135623730951}}, "df": 1}}}, "2": {"docs": {"ultk.effcomm.tradeoff.dominates": {"tf": 1.7320508075688772}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 2}}, "df": 2, "[": {"docs": {}, "df": 0, "i": {"docs": {"ultk.effcomm.tradeoff.dominates": {"tf": 1.4142135623730951}}, "df": 1}}}, "docs": {"ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.BayesianListener": {"tf": 2.23606797749979}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.information.expected_distortion": {"tf": 1.4142135623730951}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 2}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.ib_accuracy": {"tf": 2}, "ultk.effcomm.information.ib_distortion": {"tf": 2}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.informativity": {"tf": 1.7320508075688772}, "ultk.effcomm.informativity.communicative_success": {"tf": 2.8284271247461903}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.effcomm.util.marginal": {"tf": 1.4142135623730951}, "ultk.effcomm.util.conditional": {"tf": 1.4142135623730951}, "ultk.effcomm.util.joint": {"tf": 1.7320508075688772}, "ultk.effcomm.util.marginalize": {"tf": 1.7320508075688772}, "ultk.effcomm.util.bayes": {"tf": 1.7320508075688772}, "ultk.effcomm.util.xlogx": {"tf": 1}, "ultk.effcomm.util.H": {"tf": 1.4142135623730951}}, "df": 24, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.tradeoff.tradeoff": {"tf": 1.4142135623730951}}, "df": 1, "s": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 1.7320508075688772}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1.7320508075688772}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 2}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.semantics": {"tf": 1}}, "df": 1, "s": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.effcomm.information.ib_accuracy": {"tf": 1}, "ultk.effcomm.information.ib_distortion": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.communicative_success": {"tf": 1}, "ultk.effcomm.util.gNID": {"tf": 1}}, "df": 15}}}, "o": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 2}}}}}}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm": {"tf": 2}, "ultk.effcomm.analysis.trade_off_means": {"tf": 2}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 2}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1.4142135623730951}, "ultk.language.semantics": {"tf": 1}}, "df": 5}}}, "y": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 1.7320508075688772}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1.4142135623730951}, "ultk.language.language.Language.degree_property": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 2}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}}, "df": 5}}}}, "t": {"docs": {}, "df": 0, "o": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}}, "df": 2}}}, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1.4142135623730951}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1.4142135623730951}, "ultk.language.semantics.Meaning.__init__": {"tf": 1.7320508075688772}}, "df": 13}, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 2}}}}}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}}, "df": 1}}}}, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.agent": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.PragmaticListener": {"tf": 2}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity.communicative_success": {"tf": 1.4142135623730951}}, "df": 16}}}}}}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 1}}, "df": 1}}}}}}}}, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.trade_off_means": {"tf": 2.6457513110645907}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 3.1622776601683795}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1.7320508075688772}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1.4142135623730951}}, "df": 6}}}}}}}}, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm": {"tf": 2}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1.4142135623730951}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1.4142135623730951}, "ultk.language.semantics.Universe": {"tf": 1}}, "df": 12}, "y": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.optimization.Mutation.mutate": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}}, "df": 8}}}}}}, "o": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}}, "df": 4}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.tradeoff.dominates": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.language.language.Expression.can_express": {"tf": 1}}, "df": 5, "s": {"docs": {"ultk.effcomm.information.get_rd_curve": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 2}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 2.449489742783178}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 2}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}}, "df": 8}}}}, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.sampling.powerset": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_optimal_languages": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 2.23606797749979}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1.7320508075688772}}, "df": 9}}, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.optimization.sample_parents": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1.4142135623730951}}, "df": 2}}}, "t": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1}}, "df": 1, "s": {"docs": {"ultk.effcomm": {"tf": 1}}, "df": 1}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}}, "df": 4}}}}}}}, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"ultk.effcomm": {"tf": 1}}, "df": 1}}}}}}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}}, "df": 2, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {"ultk.language.grammar.Grammar.enumerate": {"tf": 1}}, "df": 1}}}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 2}}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.Grammar.parse": {"tf": 1}}, "df": 1}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.language.grammar.Grammar.parse": {"tf": 1}}, "df": 1}}}}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}}, "df": 4}}}}, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.informativity.communicative_success": {"tf": 1}}, "df": 1, "s": {"docs": {"ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.effcomm.util.build_utility_matrix": {"tf": 1}}, "df": 3}}}, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1.7320508075688772}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 3}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1.4142135623730951}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.tradeoff": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}}, "df": 2, "s": {"docs": {"ultk.effcomm": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "y": {"docs": {"ultk.language": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"ultk.language": {"tf": 1}}, "df": 1}}}}}}}, "y": {"docs": {"ultk.effcomm.util.marginal": {"tf": 1}, "ultk.effcomm.util.conditional": {"tf": 1}, "ultk.effcomm.util.joint": {"tf": 1}, "ultk.effcomm.util.marginalize": {"tf": 1.4142135623730951}, "ultk.effcomm.util.bayes": {"tf": 1}}, "df": 5, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk": {"tf": 1}, "ultk.language.sampling.powerset": {"tf": 1}}, "df": 2}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"ultk": {"tf": 1.4142135623730951}}, "df": 1}}}}, "#": {"docs": {}, "df": 0, "l": {"4": {"0": {"docs": {"ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}}, "g": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}}, "df": 2}}}}, "i": {"docs": {}, "df": 0, "p": {"docs": {"ultk": {"tf": 1}}, "df": 1}, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.semantics.Meaning": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1}}, "df": 1}}}}}}, "m": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1.4142135623730951}}, "df": 2}}}, "e": {"docs": {"ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}}, "df": 1, "d": {"docs": {"ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}}, "df": 1}}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 2, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.language.Language.degree_property": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 2}}}}}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 2}}, "df": 1}}}}}}, "d": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 1}}, "df": 1}, "x": {"docs": {"ultk.effcomm.util.marginal": {"tf": 1}, "ultk.effcomm.util.joint": {"tf": 1}, "ultk.effcomm.util.marginalize": {"tf": 1}, "ultk.effcomm.util.gNID": {"tf": 1}}, "df": 4, "y": {"docs": {"ultk.effcomm.util.marginal": {"tf": 1}, "ultk.effcomm.util.conditional": {"tf": 1}, "ultk.effcomm.util.joint": {"tf": 1}}, "df": 3}}, "w": {"docs": {"ultk.effcomm.util.gNID": {"tf": 1}}, "df": 1}, "v": {"docs": {"ultk.effcomm.util.gNID": {"tf": 1}}, "df": 1}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.Grammar.parse": {"tf": 1}}, "df": 1}}}}}}}, "m": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 2.449489742783178}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 2.449489742783178}, "ultk.effcomm.agent.BayesianListener": {"tf": 2.23606797749979}, "ultk.effcomm.information.ib_accuracy": {"tf": 2.8284271247461903}, "ultk.effcomm.information.ib_distortion": {"tf": 3.4641016151377544}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 2.23606797749979}, "ultk.effcomm.informativity.informativity": {"tf": 2.6457513110645907}, "ultk.effcomm.informativity.communicative_success": {"tf": 3.605551275463989}}, "df": 11, "i": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}}, "df": 2, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1.4142135623730951}}, "df": 5}}, "a": {"docs": {"ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 1, "l": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}}, "df": 3, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.language.language.Expression": {"tf": 1}, "ultk.language.language.Language": {"tf": 1}}, "df": 3}}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}, "b": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 2}}}}}, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}}, "df": 1}}}}}}}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.agent.BayesianListener": {"tf": 1}}, "df": 1}}}}}}}}, "g": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.semantics.Meaning": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "x": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1.4142135623730951}, "ultk.language.sampling.powerset": {"tf": 1.4142135623730951}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.upto_comb": {"tf": 1.4142135623730951}, "ultk.language.sampling.random_languages": {"tf": 2.449489742783178}}, "df": 8, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.language.sampling.powerset": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1}}, "df": 6}}}}, "b": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 2}}}}}, "p": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.language.semantics": {"tf": 1}}, "df": 2, "p": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.language": {"tf": 1.4142135623730951}}, "df": 4, "s": {"docs": {"ultk.language.language": {"tf": 1}}, "df": 1}}}}}, "s": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}}, "df": 1}}, "t": {"docs": {"ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1.4142135623730951}}, "df": 3, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}}, "df": 6}}}, "x": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1.7320508075688772}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.informativity.communicative_success": {"tf": 1.4142135623730951}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.effcomm.util.build_utility_matrix": {"tf": 1}, "ultk.language.language.Language.binary_matrix": {"tf": 1}}, "df": 11}}}, "[": {"docs": {}, "df": 0, "i": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1}}, "h": {"docs": {"ultk.language.sampling.upto_comb": {"tf": 1}}, "df": 1, "b": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "{": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "}": {"docs": {}, "df": 0, "[": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.information.ib_comm_cost": {"tf": 1}}, "df": 1}}}}}}}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}}, "df": 1}}}}}}}}}}}}, "y": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}, "ultk.language.semantics": {"tf": 1}}, "df": 6}, "d": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}}, "df": 1}}, "n": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}}, "df": 6}}, "s": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk": {"tf": 1.7320508075688772}, "ultk.effcomm": {"tf": 1.7320508075688772}, "ultk.effcomm.informativity": {"tf": 1}, "ultk.effcomm.tradeoff": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}}, "df": 6}}}, "e": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 1.4142135623730951}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.ib_distortion": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1.7320508075688772}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1}}, "df": 10, "s": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1.4142135623730951}}, "df": 3}, "d": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.language.semantics": {"tf": 1}}, "df": 4}}}}}, "n": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}}, "df": 2, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}, "ultk.effcomm.agent.BayesianListener": {"tf": 1.4142135623730951}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.ib_accuracy": {"tf": 1}, "ultk.effcomm.information.ib_distortion": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 2}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.language": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.language": {"tf": 2.23606797749979}, "ultk.language.language.Expression": {"tf": 1}, "ultk.language.language.Expression.can_express": {"tf": 1}, "ultk.language.semantics": {"tf": 3}, "ultk.language.semantics.Universe": {"tf": 1}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}, "ultk.language.semantics.Meaning": {"tf": 1.7320508075688772}, "ultk.language.semantics.Meaning.__init__": {"tf": 2}}, "df": 29, "s": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 2.23606797749979}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 2}, "ultk.effcomm.information.get_bottleneck": {"tf": 2.23606797749979}, "ultk.effcomm.information.ib_informativity": {"tf": 1.7320508075688772}, "ultk.effcomm.information.ib_comm_cost": {"tf": 2}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1.7320508075688772}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1.7320508075688772}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 2.23606797749979}, "ultk.effcomm.informativity.informativity": {"tf": 2.23606797749979}, "ultk.effcomm.informativity.communicative_success": {"tf": 1.7320508075688772}, "ultk.effcomm.util.build_utility_matrix": {"tf": 1}, "ultk.effcomm.util.gNID": {"tf": 1.7320508075688772}, "ultk.language": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.language.Language.binary_matrix": {"tf": 1.4142135623730951}, "ultk.language.sampling.all_meanings": {"tf": 1}, "ultk.language.sampling.all_expressions": {"tf": 1}, "ultk.language.semantics": {"tf": 1.4142135623730951}}, "df": 27}}}}, "s": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 3.872983346207417}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1.7320508075688772}, "ultk.language.grammar.Rule.is_terminal": {"tf": 1}}, "df": 3}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}}, "df": 5, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}}, "s": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar": {"tf": 1}}, "df": 3}}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.BayesianListener": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.informativity.communicative_success": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1.4142135623730951}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.language": {"tf": 1}, "ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.semantics.Universe.from_csv": {"tf": 1}}, "df": 12}, "p": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "x": {"docs": {"ultk.language": {"tf": 1}}, "df": 1}}}}}}}}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk": {"tf": 1}}, "df": 1, "s": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 3}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 1}}}}}}}}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1.4142135623730951}}, "df": 1, "s": {"docs": {"ultk": {"tf": 1.4142135623730951}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}, "ultk.language": {"tf": 1}, "ultk.language.semantics.Meaning": {"tf": 1}}, "df": 3, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}, "ultk.language.semantics": {"tf": 1}}, "df": 3}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.language": {"tf": 1}, "ultk.language.language": {"tf": 1}, "ultk.language.semantics": {"tf": 1}}, "df": 3}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.language": {"tf": 1}}, "df": 3}}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.information.get_bottleneck": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}}}}, "|": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.LiteralListener": {"tf": 1}}, "df": 1}, "w": {"docs": {"ultk.effcomm.agent.BayesianListener": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}}, "df": 2}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 4}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.optimization.Mutation.precondition": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.precondition": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.precondition": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1.4142135623730951}}, "df": 5, "s": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 2}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}}, "df": 3}}}}, "e": {"docs": {"ultk.effcomm.optimization.Mutation.mutate": {"tf": 1}, "ultk.effcomm.optimization.RemoveExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.AddExpression.mutate": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1}}, "df": 4, "d": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.mutate": {"tf": 1}}, "df": 1}}}}, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.util.MI": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}}, "df": 1}}}}}}}}, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}}, "df": 1, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}}, "df": 1}}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}}, "df": 2}}}}, "k": {"docs": {"ultk.language.sampling.upto_comb": {"tf": 1.4142135623730951}}, "df": 1, "e": {"docs": {}, "df": 0, "y": {"docs": {"ultk": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1.7320508075688772}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1.7320508075688772}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 2.23606797749979}}, "df": 4, "s": {"docs": {"ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 4}}, "m": {"docs": {}, "df": 0, "p": {"docs": {"ultk": {"tf": 1.4142135623730951}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}, "d": {"docs": {"ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 4}}}, "l": {"docs": {"ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.util.DKL": {"tf": 1}}, "df": 2, "}": {"docs": {}, "df": 0, "[": {"docs": {}, "df": 0, "m": {"docs": {"ultk.effcomm.information.ib_comm_cost": {"tf": 1}}, "df": 1}, "p": {"docs": {}, "df": 0, "~": {"docs": {}, "df": 0, "|": {"docs": {}, "df": 0, "|": {"docs": {}, "df": 0, "~": {"docs": {}, "df": 0, "q": {"docs": {"ultk.effcomm.util.DKL": {"tf": 1}}, "df": 1}}}}}}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}}, "df": 1}}}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "b": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}}, "df": 2}}}}, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk": {"tf": 1}, "ultk.language": {"tf": 1}}, "df": 2}}}}}}, "b": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}, "w": {"docs": {"ultk.language.language": {"tf": 2.449489742783178}, "ultk.language.semantics": {"tf": 2.6457513110645907}}, "df": 2, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.language.sampling.random_languages": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {"ultk": {"tf": 3.3166247903554}, "ultk.effcomm": {"tf": 3.7416573867739413}, "ultk.effcomm.agent": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis": {"tf": 1}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 2}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1.7320508075688772}, "ultk.effcomm.information": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1.4142135623730951}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1.4142135623730951}, "ultk.effcomm.informativity": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 2}, "ultk.effcomm.informativity.communicative_success": {"tf": 1.7320508075688772}, "ultk.effcomm.optimization": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1.4142135623730951}, "ultk.effcomm.sampling": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.effcomm.tradeoff": {"tf": 1}, "ultk.effcomm.tradeoff.dominates": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.effcomm.util": {"tf": 1}, "ultk.effcomm.util.build_utility_matrix": {"tf": 1.4142135623730951}, "ultk.language": {"tf": 1.7320508075688772}, "ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1.4142135623730951}, "ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 2.449489742783178}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1.4142135623730951}, "ultk.language.language": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1.4142135623730951}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.upto_comb": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.generate_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.rename_id": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1}, "ultk.language.semantics": {"tf": 2.449489742783178}, "ultk.language.semantics.Referent": {"tf": 1}, "ultk.language.semantics.Universe": {"tf": 1}, "ultk.language.semantics.Universe.from_csv": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 61, "m": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.language": {"tf": 1.4142135623730951}, "ultk.language.language.Expression": {"tf": 1}, "ultk.language.sampling.powerset": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.rename_id": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}, "ultk.language.semantics": {"tf": 1.4142135623730951}}, "df": 18, "s": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.language.semantics": {"tf": 1.4142135623730951}}, "df": 2}, "a": {"docs": {}, "df": 0, "t": {"docs": {"ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1.7320508075688772}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 3, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.analysis": {"tf": 1}, "ultk.effcomm.tradeoff": {"tf": 1}}, "df": 2}}}}}, "l": {"docs": {"ultk.language.semantics.Meaning": {"tf": 1}}, "df": 1}}, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1}}, "df": 1}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1}}, "df": 1}}}}}, "l": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk": {"tf": 1.7320508075688772}}, "df": 1}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.agent.BayesianListener": {"tf": 1}}, "df": 1}}}}}, "c": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language": {"tf": 1}}, "df": 1}}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}}, "df": 4, "s": {"docs": {"ultk": {"tf": 1.4142135623730951}}, "df": 1}, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 2}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 2}}, "df": 5}}}}}, "m": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_bottleneck": {"tf": 1.7320508075688772}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1.4142135623730951}, "ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.grammar.Grammar.generate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1.7320508075688772}, "ultk.language.language": {"tf": 1}, "ultk.language.sampling.powerset": {"tf": 2}, "ultk.language.sampling.all_meanings": {"tf": 1}, "ultk.language.sampling.all_expressions": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.upto_comb": {"tf": 1.4142135623730951}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1.7320508075688772}, "ultk.language.semantics": {"tf": 1.4142135623730951}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}, "ultk.language.semantics.Universe.from_csv": {"tf": 1.4142135623730951}, "ultk.language.semantics.Meaning": {"tf": 1.4142135623730951}}, "df": 30}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "k": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm": {"tf": 1}, "ultk.effcomm.agent": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.language.grammar.Rule.is_terminal": {"tf": 1}}, "df": 5}}}}}}, "c": {"docs": {}, "df": 0, "{": {"docs": {}, "df": 0, "p": {"docs": {"ultk.effcomm.agent.BayesianListener": {"tf": 1}, "ultk.effcomm.util.conditional": {"tf": 1}, "ultk.effcomm.util.bayes": {"tf": 1}}, "df": 3}}}}, "e": {"docs": {}, "df": 0, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1}}, "df": 1}}, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1}}, "df": 1}}}}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"ultk": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}}, "df": 2}}, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}}, "df": 1}}}}}}}}}, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.effcomm.util.gNID": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 5}}}, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}, "g": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.agent": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}}, "df": 2}}}}}, "x": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 2}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.Grammar.from_yaml": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.semantics.Universe.from_csv": {"tf": 1}}, "df": 3, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.grammar.Grammar.from_yaml": {"tf": 1}}, "df": 1}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm": {"tf": 1}}, "df": 1, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.BayesianListener": {"tf": 1}}, "df": 1}}}}}}}}}, "n": {"docs": {}, "df": 0, "c": {"docs": {"ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1}}, "df": 6, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.BayesianListener": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1.7320508075688772}, "ultk.effcomm.informativity.indicator_utility": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 2}, "ultk.effcomm.informativity.communicative_success": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.effcomm.util.build_utility_matrix": {"tf": 1}, "ultk.language.grammar.Rule": {"tf": 1.7320508075688772}, "ultk.language.grammar.Rule.is_terminal": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1.4142135623730951}, "ultk.language.grammar.UniquenessArgs": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1.7320508075688772}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1.4142135623730951}}, "df": 17, "s": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.analysis": {"tf": 1}, "ultk.effcomm.information": {"tf": 1}, "ultk.effcomm.informativity": {"tf": 1}, "ultk.effcomm.optimization": {"tf": 1}, "ultk.effcomm.sampling": {"tf": 1}, "ultk.effcomm.tradeoff": {"tf": 1}, "ultk.effcomm.util": {"tf": 1}, "ultk.language.grammar.Rule": {"tf": 1.4142135623730951}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}}, "df": 10}}}}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"ultk.effcomm.analysis.trade_off_ttest": {"tf": 2}}, "df": 1, "y": {"docs": {"ultk.effcomm.tradeoff.tradeoff": {"tf": 1}}, "df": 1}}, "e": {"docs": {"ultk.language.grammar.Grammar.from_yaml": {"tf": 1}}, "df": 1}}, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language": {"tf": 1}, "ultk.language.semantics": {"tf": 1}}, "df": 2}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}, "ultk.language.language.aggregate_expression_complexity": {"tf": 1}}, "df": 6}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {"ultk.language": {"tf": 1}}, "df": 1}, "l": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.language.Expression.can_express": {"tf": 1}}, "df": 1}}}}}, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm": {"tf": 1}, "ultk.effcomm.information": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}}, "df": 4}}}}}}}, "h": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}}, "df": 2}}, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 2}}, "df": 1, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.analysis.pearson_analysis": {"tf": 1}}, "df": 1}}}}}}}}}, "l": {"docs": {"ultk.language.grammar.Grammar.from_yaml": {"tf": 2.6457513110645907}}, "df": 1, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.information.get_bottleneck": {"tf": 1.4142135623730951}}, "df": 1, "s": {"docs": {"ultk.effcomm.informativity.informativity": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {"ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 1, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"ultk": {"tf": 1}, "ultk.language": {"tf": 1}, "ultk.language.grammar.Rule": {"tf": 1.4142135623730951}}, "df": 3, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.agent.BayesianListener": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}, "ultk.effcomm.information": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 5}}}, "y": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.agent.BayesianListener": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.agent.BayesianListener": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.information.ib_optimal_decoder": {"tf": 1}}, "df": 3}}}}}}, "g": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 1}}}, "e": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm": {"tf": 1.7320508075688772}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 2}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1.4142135623730951}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.language.grammar.Rule": {"tf": 2}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1.4142135623730951}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.generate_languages": {"tf": 2.6457513110645907}, "ultk.language.semantics": {"tf": 1.4142135623730951}, "ultk.language.semantics.Universe.from_dataframe": {"tf": 1}, "ultk.language.semantics.Meaning": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1.4142135623730951}}, "df": 36, "t": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1.4142135623730951}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1.7320508075688772}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.util.gNID": {"tf": 1}, "ultk.language": {"tf": 1}}, "df": 13}, "e": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.information.ib_comm_cost": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1.7320508075688772}, "ultk.effcomm.information.get_bottleneck": {"tf": 2}}, "df": 3, "s": {"docs": {"ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 1}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}}, "df": 2}}}}}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}}, "df": 5}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}}, "df": 3}, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.language": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 4}}}, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"ultk.language.semantics.Universe.from_dataframe": {"tf": 1}, "ultk.language.semantics.Universe.from_csv": {"tf": 1}}, "df": 2, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}, "s": {"docs": {"ultk.effcomm.tradeoff.tradeoff": {"tf": 1}}, "df": 1}}, "t": {"docs": {"ultk.language.grammar.GrammaticalExpression": {"tf": 1}}, "df": 1}}}, "t": {"docs": {"ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 4}, "g": {"docs": {"ultk.effcomm.agent.BayesianListener": {"tf": 1.4142135623730951}}, "df": 1}}, "y": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.initialize_weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1.4142135623730951}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1.7320508075688772}, "ultk.effcomm.tradeoff": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1.4142135623730951}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1.4142135623730951}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 2}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 31}, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.agent.LiteralSpeaker": {"tf": 1}, "ultk.effcomm.agent.LiteralListener": {"tf": 1}}, "df": 2}}}}, "t": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}}, "df": 4}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"ultk.language.language.Language.binary_matrix": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 3}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.information.get_rd_curve": {"tf": 1}}, "df": 1}}}}}}, "y": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1.7320508075688772}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.effcomm.util.marginal": {"tf": 1.4142135623730951}, "ultk.effcomm.util.conditional": {"tf": 1.7320508075688772}, "ultk.effcomm.util.joint": {"tf": 1.7320508075688772}, "ultk.effcomm.util.marginalize": {"tf": 1.7320508075688772}, "ultk.effcomm.util.bayes": {"tf": 1.4142135623730951}}, "df": 9, "o": {"docs": {}, "df": 0, "u": {"docs": {"ultk": {"tf": 1.7320508075688772}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1.4142135623730951}}, "df": 2}}, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.tradeoff.interpolate_data": {"tf": 1}}, "df": 1}}, "s": {"docs": {"ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}}, "df": 2}}}}}, "|": {"docs": {}, "df": 0, "x": {"docs": {"ultk.effcomm.util.conditional": {"tf": 1}, "ultk.effcomm.util.joint": {"tf": 1}, "ultk.effcomm.util.marginalize": {"tf": 1}, "ultk.effcomm.util.bayes": {"tf": 1}}, "df": 4}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "l": {"docs": {"ultk.language.grammar.Grammar.from_yaml": {"tf": 1}}, "df": 1}}}}, "v": {"1": {"docs": {}, "df": 0, "i": {"0": {"docs": {"ultk": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}}, "docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "a": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization": {"tf": 1}}, "df": 2}, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm": {"tf": 1.7320508075688772}, "ultk.effcomm.util": {"tf": 1}}, "df": 2}}}, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1.4142135623730951}}, "df": 1, "s": {"docs": {"ultk.effcomm.util.gNID": {"tf": 1}}, "df": 1}}}}, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 2}}, "df": 1}}}}}, "y": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 1}}, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"ultk.effcomm.analysis.trade_off_ttest": {"tf": 1.4142135623730951}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1.7320508075688772}, "ultk.effcomm.information.get_bottleneck": {"tf": 1.7320508075688772}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1}}, "df": 7, "s": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 7}, "d": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}, "ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1}, "ultk.effcomm.agent.Listener.normalized_weights": {"tf": 1}, "ultk.effcomm.util.rows_zero_to_uniform": {"tf": 1}}, "df": 5}}}}, "r": {"docs": {}, "df": 0, "y": {"docs": {"ultk.language.language": {"tf": 1}, "ultk.language.semantics": {"tf": 1}}, "df": 2}, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1.7320508075688772}}, "df": 1}}}}}}, "s": {"docs": {"ultk.effcomm.information.get_ib_curve": {"tf": 1.4142135623730951}, "ultk.effcomm.information.get_bottleneck": {"tf": 1.7320508075688772}}, "df": 2}, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1.4142135623730951}}, "df": 1}}}, "y": {"docs": {"ultk.language.sampling.random_combination_vocabulary": {"tf": 1}}, "df": 1}}}}}}}}}}, "g": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.CommunicativeAgent.sample_strategy": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.Speaker.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.Listener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.LiteralSpeaker.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.LiteralListener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.PragmaticSpeaker": {"tf": 1}, "ultk.effcomm.agent.PragmaticListener": {"tf": 1}, "ultk.effcomm.agent.BayesianListener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.analysis.pearson_analysis": {"tf": 1}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.optimization": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1.4142135623730951}, "ultk.language.sampling.powerset": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1}, "ultk.language.semantics": {"tf": 1}}, "df": 21, "e": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.agent.Speaker.normalized_weights": {"tf": 1}, "ultk.effcomm.analysis.get_dataframe": {"tf": 1}, "ultk.effcomm.analysis.trade_off_means": {"tf": 1}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1.4142135623730951}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.grammar.Grammar.get_all_rules": {"tf": 1}, "ultk.language.language.Language.binary_matrix": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.sample_lang_size": {"tf": 1}, "ultk.language.sampling.random_combination_vocabulary": {"tf": 1}}, "df": 13, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}}, "df": 2}}}}}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1}}, "df": 3, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.util.gNID": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization": {"tf": 1}, "ultk.language.grammar.Rule": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}, "ultk.language.grammar.Grammar": {"tf": 1}}, "df": 5}}, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.optimization.EvolutionaryOptimizer.fit": {"tf": 1}, "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated": {"tf": 1}, "ultk.effcomm.optimization.sample_parents": {"tf": 1}}, "df": 4, "s": {"docs": {"ultk.effcomm.optimization.EvolutionaryOptimizer.__init__": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.sampling.get_hypothetical_variants": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}, "ultk.language.grammar.Grammar.generate": {"tf": 1}, "ultk.language.sampling.all_meanings": {"tf": 1}, "ultk.language.sampling.all_expressions": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1.4142135623730951}, "ultk.language.sampling.random_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.generate_languages": {"tf": 1.7320508075688772}}, "df": 9, "d": {"docs": {"ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.sampling.generate_languages": {"tf": 1.7320508075688772}, "ultk.language.sampling.sample_lang_size": {"tf": 1}}, "df": 5}}, "o": {"docs": {}, "df": 0, "r": {"docs": {"ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 1}}}}}}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm": {"tf": 1}}, "df": 2, "s": {"docs": {"ultk": {"tf": 1.4142135623730951}, "ultk.effcomm.agent": {"tf": 1}}, "df": 2}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {"ultk": {"tf": 1}, "ultk.language.grammar.Rule": {"tf": 2}, "ultk.language.grammar.GrammaticalExpression": {"tf": 1}, "ultk.language.grammar.GrammaticalExpression.yield_string": {"tf": 1}, "ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar": {"tf": 1}, "ultk.language.grammar.Grammar.parse": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1}, "ultk.language.grammar.Grammar.from_yaml": {"tf": 1.4142135623730951}}, "df": 10}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.grammar.GrammaticalExpression": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.parse": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 3, "s": {"docs": {"ultk.language.grammar.UniquenessArgs": {"tf": 1}, "ultk.language.grammar.Grammar": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate_at_depth": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 5}}}}}}}}}}}}}}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.tradeoff.tradeoff": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"ultk.language.sampling.enumerate_all_languages": {"tf": 1}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "b": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}}, "df": 1, "n": {"docs": {"ultk.effcomm": {"tf": 1}, "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices": {"tf": 1}, "ultk.effcomm.agent.PragmaticSpeaker.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1.4142135623730951}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 1}, "ultk.effcomm.information.get_ib_curve": {"tf": 1}, "ultk.effcomm.information.get_bottleneck": {"tf": 1}, "ultk.effcomm.information.ib_informativity": {"tf": 1}, "ultk.effcomm.information.ib_comm_cost": {"tf": 1}, "ultk.effcomm.information.ib_encoder_to_point": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1.4142135623730951}, "ultk.language.grammar.Grammar.generate": {"tf": 1}, "ultk.language.grammar.Grammar.enumerate": {"tf": 1.4142135623730951}, "ultk.language.language.Language.degree_property": {"tf": 1}, "ultk.language.sampling.powerset": {"tf": 1}, "ultk.language.sampling.all_meanings": {"tf": 1}, "ultk.language.sampling.all_languages": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1.4142135623730951}}, "df": 18}}}}, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}, "ultk.effcomm.tradeoff.non_dominated_2d": {"tf": 1}}, "df": 2}}}, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.agent.LiteralListener": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}}, "df": 2, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"ultk.effcomm.agent.LiteralListener": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {"ultk.effcomm.agent.PragmaticListener.__init__": {"tf": 1}, "ultk.effcomm.informativity.informativity": {"tf": 1}, "ultk.effcomm.informativity.communicative_success": {"tf": 1}}, "df": 3}, "d": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 3.4641016151377544}, "ultk.effcomm.analysis.trade_off_ttest": {"tf": 2.449489742783178}, "ultk.language.language": {"tf": 4.898979485566356}, "ultk.language.sampling.random_languages": {"tf": 3.4641016151377544}, "ultk.language.sampling.generate_languages": {"tf": 4.242640687119285}, "ultk.language.semantics": {"tf": 5.196152422706632}}, "df": 6}}, "z": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "y": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {"ultk.effcomm.agent.CommunicativeAgent.to_language": {"tf": 1}}, "df": 1}}}}, "j": {"docs": {"ultk": {"tf": 1}, "ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 2, "o": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.information.compute_rate_distortion": {"tf": 1}}, "df": 1}}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.optimization.sample_parents": {"tf": 1}, "ultk.language.grammar.Grammar.get_unique_expressions": {"tf": 1}, "ultk.language.sampling.upto_comb": {"tf": 1}, "ultk.language.sampling.random_languages": {"tf": 1}, "ultk.language.sampling.enumerate_all_languages": {"tf": 1}, "ultk.language.semantics.Meaning.__init__": {"tf": 1}}, "df": 6}}}}, "q": {"docs": {"ultk.effcomm.information.information_rate": {"tf": 1}, "ultk.effcomm.information.language_to_ib_encoder_decoder": {"tf": 1.4142135623730951}}, "df": 2, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"ultk": {"tf": 1}}, "df": 1}}}}}}}}, "s": {"docs": {}, "df": 0, "i": {"docs": {"ultk.language.sampling.generate_languages": {"tf": 1}, "ultk.language.sampling.sample_quasi_natural": {"tf": 1.7320508075688772}, "ultk.language.sampling.enumerate_all_languages": {"tf": 2.449489742783178}}, "df": 3}}}, "o": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.analysis.trade_off_means": {"tf": 2.449489742783178}, "ultk.language.language": {"tf": 1.4142135623730951}, "ultk.language.sampling.random_languages": {"tf": 2}, "ultk.language.sampling.generate_languages": {"tf": 2}, "ultk.language.semantics": {"tf": 1.4142135623730951}}, "df": 5}}}}, "x": {"docs": {"ultk.effcomm.information.expected_distortion": {"tf": 1.7320508075688772}, "ultk.effcomm.information.compute_rate_distortion": {"tf": 3.605551275463989}, "ultk.effcomm.information.blahut_arimoto": {"tf": 3.3166247903554}, "ultk.effcomm.tradeoff.pareto_min_distances": {"tf": 1.7320508075688772}, "ultk.effcomm.tradeoff.interpolate_data": {"tf": 1.4142135623730951}, "ultk.effcomm.tradeoff.tradeoff": {"tf": 1}, "ultk.effcomm.util.marginal": {"tf": 2}, "ultk.effcomm.util.conditional": {"tf": 2.23606797749979}, "ultk.effcomm.util.joint": {"tf": 2.449489742783178}, "ultk.effcomm.util.marginalize": {"tf": 2.23606797749979}, "ultk.effcomm.util.bayes": {"tf": 1.7320508075688772}, "ultk.effcomm.util.xlogx": {"tf": 1.4142135623730951}, "ultk.effcomm.util.H": {"tf": 2}, "ultk.effcomm.util.gNID": {"tf": 1.4142135623730951}, "ultk.language.sampling.rename_id": {"tf": 1.4142135623730951}}, "df": 15, "u": {"docs": {"ultk": {"tf": 1}}, "df": 1}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"ultk.effcomm.information.compute_rate_distortion": {"tf": 1}}, "df": 1}}}, "[": {"docs": {}, "df": 0, "i": {"docs": {"ultk.effcomm.information.blahut_arimoto": {"tf": 1}}, "df": 1}}, "|": {"docs": {}, "df": 0, "y": {"docs": {"ultk.effcomm.util.bayes": {"tf": 1}}, "df": 1}}}}}}, "pipeline": ["trimmer"], "_isPrebuiltIndex": true}; + /** pdoc search index */const docs = [{"fullname": "ultk", "modulename": "ultk", "kind": "module", "doc": "

The Unnatural Language ToolKit (ULTK)

\n\n

\"Four

\n\n

Introduction

\n\n

ULTK is a software library that aims to support efficient communication analyses of natural language. This is a line of research that aims to explain why natural languages have the structure that they do in terms competing pressures to minimize cognitive complexity and maximize communicative accuracy.

\n\n

Key features:

\n\n
    \n
  • Primitives for constructing semantic spaces, expressions, and languages
  • \n
  • Tools for measuring informativity of languages, communicative success of RSA speakers and listeners
  • \n
  • Language population sampling and optimization w.r.t Pareto fronts
  • \n
  • Rate-Distortion and Information Bottleneck style analyses
  • \n
\n\n

ULTK is a long term project and it is currently in its early stages. It is intended to help lower the barrier to entry for certain research in computational semantics, and to unify methodologies. If you find something confusing, please open an issue. If you have a phenomena of interest in linguistic semantics that you want to run an efficient communication analysis on, please contact the contributors.

\n\n

Read the documentation.

\n\n

Installing ULTK

\n\n

First, set up a virtual environment (e.g. via miniconda, conda create -n ultk python=3.11, and conda activate ultk).

\n\n
    \n
  1. Download or clone this repository and navigate to the root folder.

  2. \n
  3. Install ULTK (We recommend doing this inside a virtual environment)

    \n\n

    pip install -e .

  4. \n
\n\n

Getting started

\n\n
    \n
  • Check out the examples, starting with a simiple efficient communication analysis of indefinites and a comparison of two approaches to efficient communication, with modals as a test case.
  • \n
  • To see more scaled up usage examples, visit the codebase for an efficient communication analysis of modals or sim-max games.
  • \n
  • For an introduction to efficient communication research, here is a survey paper of the field.
  • \n
  • For an introduction to the RSA framework, see this online textbook.
  • \n
\n\n

Modules

\n\n

There are two modules. The first is ultk.effcomm, which includes methods for measuring informativity of languages and/or communicative success of Rational Speech Act agents, and for language population sampling and optimization w.r.t Pareto fronts.

\n\n

The second module is ultk.language, which contains primitives for constructing semantic spaces, expressions, and languages. It also has a grammar module which can be used for building expressions in a Language of Thought and measuring complexity in terms of minimum description length, as well as for natural language syntax.

\n\n

The source code is available on github here.

\n\n

Testing

\n\n

Unit tests are written in pytest and executed via running pytest in the src/tests folder.

\n\n

References

\n\n

\nFigures:

\n\n
\n

Kemp, C. & Regier, T. (2012) Kinship Categories Across Languages Reflect General Communicative Principles. Science. https://www.science.org/doi/10.1126/science.1218811

\n
\n\n
\n

Zaslavsky, N., Kemp, C., Regier, T., & Tishby, N. (2018). Efficient compression in color naming and its evolution. Proceedings of the National Academy of Sciences, 115(31), 7937\u20137942. https://doi.org/10.1073/pnas.1800521115

\n
\n\n
\n

Deni\u0107, M., Steinert-Threlkeld, S., & Szymanik, J. (2022). Indefinite Pronouns Optimize the Simplicity/Informativeness Trade-Off. Cognitive Science, 46(5), e13142. https://doi.org/10.1111/cogs.13142

\n
\n\n
\n

Steinert-Threlkeld, S. (2021). Quantifiers in Natural Language: Efficient Communication and Degrees of Semantic Universals. Entropy, 23(10), Article 10. https://doi.org/10.3390/e23101335

\n
\n\n

\n\n

\nLinks:

\n\n
\n

Imel, N., & Steinert-Threlkeld, S. (2022). Modal semantic universals optimize the simplicity/informativeness trade-off. Semantics and Linguistic Theory, 1(0), Article 0. https://doi.org/10.3765/salt.v1i0.5346

\n
\n\n
\n

Kemp, C., Xu, Y., & Regier, T. (2018). Semantic Typology and Efficient Communication. Annual Review of Linguistics, 4(1), 109\u2013128. https://doi.org/10.1146/annurev-linguistics-011817-045406

\n
\n\n

\n"}, {"fullname": "ultk.effcomm", "modulename": "ultk.effcomm", "kind": "module", "doc": "

Tools for measuring languages for communicative efficiency.

\n\n

Submodules divide the labor of a computational experiment performing an efficiency analysis of a language into several parts: generating and sampling the space of possible languages, measuring their properties, and determining which languages optimize efficient trade-offs w.r.t these properties.

\n\n

The ultk.effcomm.sampling submodule implements several methods for generating hypothetically possible languages of a given type, by sampling from a set of possible expressions, or permuting the expression-meaning mapping of an existing language.

\n\n

The ultk.effcomm.optimization submodule contains a general implementation of an evolutionary algorithm, which can be used to estimate a Pareto frontier of optimal solutions to an efficiency trade-off. It can also be used as a technique for randomly exploring the space of possible languages.

\n\n

The ultk.effcomm.tradeoff submodule contains tools for measuring a pool of languages for various properties, finding which languages are Pareto dominant with respect to two properties, and setting attributes of the language objects for further analysis.

\n\n

The ultk.effcomm.analysis submodule contains tools for performing numerical analyses and producing paradigmatic plots of languages in 2D trade-off space.

\n\n

The ultk.effcomm.information_bottleneck submodule contains tools for Information Bottleneck based analyses of the communicative efficiency of languages. Specificially, it includes an implementation of the IB-BA algorithm and code for evaluating the efficiency of semantic category systems.

\n\n

The ultk.effcomm.agent submodule implements classes for constructing various speakers and listeners of a language. These are unified abstractions from the Rational Speech Act framework.

\n\n

The ultk.effcomm.informativity submodule implements tools for computing the literal or pragmatic informativity of a language, based on speaker/listener abstractions described above.

\n"}, {"fullname": "ultk.effcomm.agent", "modulename": "ultk.effcomm.agent", "kind": "module", "doc": "

Classes for representing communicative agents, such as Senders and Receivers figuring in Lewis-Skyrms signaling games, literal and pragmatic agents in the Rational Speech Act framework, etc.

\n"}, {"fullname": "ultk.effcomm.agent.CommunicativeAgent", "modulename": "ultk.effcomm.agent", "qualname": "CommunicativeAgent", "kind": "class", "doc": "

\n"}, {"fullname": "ultk.effcomm.agent.CommunicativeAgent.__init__", "modulename": "ultk.effcomm.agent", "qualname": "CommunicativeAgent.__init__", "kind": "function", "doc": "

An agent that uses a language to communicate, e.g. a RSA pragmatic agent or a Lewis-Skyrms signaler.

\n\n
Arguments:
\n\n
    \n
  • language: a language to construct a agent to define the relation between meanings and expressions, which can be used to initialize the agent matrices (e.g. S or R).
  • \n
  • name: an optional string to name the communicative agent
  • \n
\n", "signature": "(language: ultk.language.language.Language, **kwargs)"}, {"fullname": "ultk.effcomm.agent.CommunicativeAgent.language", "modulename": "ultk.effcomm.agent", "qualname": "CommunicativeAgent.language", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.agent.CommunicativeAgent.shape", "modulename": "ultk.effcomm.agent", "qualname": "CommunicativeAgent.shape", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.agent.CommunicativeAgent.weights", "modulename": "ultk.effcomm.agent", "qualname": "CommunicativeAgent.weights", "kind": "variable", "doc": "

\n", "annotation": ": numpy.ndarray"}, {"fullname": "ultk.effcomm.agent.CommunicativeAgent.normalized_weights", "modulename": "ultk.effcomm.agent", "qualname": "CommunicativeAgent.normalized_weights", "kind": "function", "doc": "

Return the normalized weights of a CommunicativeAgent so that each row vector represents a probability distribution.

\n", "signature": "(self) -> None:", "funcdef": "def"}, {"fullname": "ultk.effcomm.agent.CommunicativeAgent.initialize_weights", "modulename": "ultk.effcomm.agent", "qualname": "CommunicativeAgent.initialize_weights", "kind": "function", "doc": "

Initialize the agent's weight matrix.

\n\n
Arguments:
\n\n
    \n
  • weights: an np.ndarray representing the weights to initialize the agent with. By default None, and the agent's weights will be initialized uniformly.
  • \n
  • initial: {'ones', 'random'} a str reprsenting the initialization method to use. If 'ones' (default), initialize the weight matrix with np.ones. If 'random', initalize the weight matrix from np.random.uniform.
  • \n
\n", "signature": "(self, weights: numpy.ndarray = None, initial='ones') -> None:", "funcdef": "def"}, {"fullname": "ultk.effcomm.agent.CommunicativeAgent.referent_to_index", "modulename": "ultk.effcomm.agent", "qualname": "CommunicativeAgent.referent_to_index", "kind": "function", "doc": "

\n", "signature": "(self, referent: ultk.language.semantics.Referent) -> int:", "funcdef": "def"}, {"fullname": "ultk.effcomm.agent.CommunicativeAgent.index_to_referent", "modulename": "ultk.effcomm.agent", "qualname": "CommunicativeAgent.index_to_referent", "kind": "function", "doc": "

\n", "signature": "(self, index: int) -> ultk.language.semantics.Referent:", "funcdef": "def"}, {"fullname": "ultk.effcomm.agent.CommunicativeAgent.expression_to_index", "modulename": "ultk.effcomm.agent", "qualname": "CommunicativeAgent.expression_to_index", "kind": "function", "doc": "

\n", "signature": "(self, expression: ultk.language.language.Expression) -> int:", "funcdef": "def"}, {"fullname": "ultk.effcomm.agent.CommunicativeAgent.index_to_expression", "modulename": "ultk.effcomm.agent", "qualname": "CommunicativeAgent.index_to_expression", "kind": "function", "doc": "

\n", "signature": "(self, index: int) -> ultk.language.language.Expression:", "funcdef": "def"}, {"fullname": "ultk.effcomm.agent.CommunicativeAgent.strategy_to_indices", "modulename": "ultk.effcomm.agent", "qualname": "CommunicativeAgent.strategy_to_indices", "kind": "function", "doc": "

Maps communicative strategies to weights.

\n\n

Given a expression and referent, access the corresponding weight coordinate.

\n\n
Arguments:
\n\n
    \n
  • strategy: a dict of the form {\"referent\": Referent, \"expression\": expression} representing an instance of communicative behavior, which we may call a communicative strategy for this agent.
  • \n
\n", "signature": "(self, strategy: dict[str, typing.Any]) -> tuple[int]:", "funcdef": "def"}, {"fullname": "ultk.effcomm.agent.CommunicativeAgent.sample_strategy", "modulename": "ultk.effcomm.agent", "qualname": "CommunicativeAgent.sample_strategy", "kind": "function", "doc": "

Sample a communicative strategy (e.g., a word for Speaker's intended referent, or interpretation for Listener's heard word) by uniformly sampling from a row vector of the agent's weight matrix specified by the index.

\n\n
Arguments:
\n\n
    \n
  • index: the integer index representing a row of the weight matrix.
  • \n
\n\n
Returns:
\n\n
\n

the integer index of the agent's choice

\n
\n", "signature": "(self, index: int) -> int:", "funcdef": "def"}, {"fullname": "ultk.effcomm.agent.CommunicativeAgent.to_language", "modulename": "ultk.effcomm.agent", "qualname": "CommunicativeAgent.to_language", "kind": "function", "doc": "

Get a language from the agent, representing its current (possibly learned) communicative behavior.

\n\n
This function uses:
\n\n
\n
    \n
  1. the agent's weight matrix,
  2. \n
  3. the set of expression forms, and
  4. \n
  5. the set of referents
  6. \n
\n
\n\n

from the language the agent was initialized with to generate a new language accurately reflecting the new expression meanings, e.g. how the agent interprets expressions as meaning zero or more referents.

\n\n
Arguments:
\n\n
    \n
  • threshold: a float in [0,1] representing the cutoff for determining if a meaning (referent) can be communicated by a expression. Because weights are not initialized to 0, it is a good idea to set nonzero values as the threshold.
  • \n
\n\n
Returns:
\n\n
\n

a Language corresponding to the form-meaning mapping defined by the communicative agent's weights.

\n
\n", "signature": "(\tself,\tdata: dict = {'complexity': None, 'accuracy': None},\tthreshold: float = 0.1) -> ultk.language.language.Language:", "funcdef": "def"}, {"fullname": "ultk.effcomm.agent.Speaker", "modulename": "ultk.effcomm.agent", "qualname": "Speaker", "kind": "class", "doc": "

\n", "bases": "CommunicativeAgent"}, {"fullname": "ultk.effcomm.agent.Speaker.__init__", "modulename": "ultk.effcomm.agent", "qualname": "Speaker.__init__", "kind": "function", "doc": "

An agent that uses a language to communicate, e.g. a RSA pragmatic agent or a Lewis-Skyrms signaler.

\n\n
Arguments:
\n\n
    \n
  • language: a language to construct a agent to define the relation between meanings and expressions, which can be used to initialize the agent matrices (e.g. S or R).
  • \n
  • name: an optional string to name the communicative agent
  • \n
\n", "signature": "(language: ultk.language.language.Language, **kwargs)"}, {"fullname": "ultk.effcomm.agent.Speaker.S", "modulename": "ultk.effcomm.agent", "qualname": "Speaker.S", "kind": "variable", "doc": "

\n", "annotation": ": numpy.ndarray"}, {"fullname": "ultk.effcomm.agent.Speaker.normalized_weights", "modulename": "ultk.effcomm.agent", "qualname": "Speaker.normalized_weights", "kind": "function", "doc": "

Get the normalized weights of a Speaker.

\n\n

Each row vector represents a conditional probability distribution over expressions, P(e | m).

\n", "signature": "(self) -> numpy.ndarray:", "funcdef": "def"}, {"fullname": "ultk.effcomm.agent.Listener", "modulename": "ultk.effcomm.agent", "qualname": "Listener", "kind": "class", "doc": "

\n", "bases": "CommunicativeAgent"}, {"fullname": "ultk.effcomm.agent.Listener.__init__", "modulename": "ultk.effcomm.agent", "qualname": "Listener.__init__", "kind": "function", "doc": "

An agent that uses a language to communicate, e.g. a RSA pragmatic agent or a Lewis-Skyrms signaler.

\n\n
Arguments:
\n\n
    \n
  • language: a language to construct a agent to define the relation between meanings and expressions, which can be used to initialize the agent matrices (e.g. S or R).
  • \n
  • name: an optional string to name the communicative agent
  • \n
\n", "signature": "(language: ultk.language.language.Language, **kwargs)"}, {"fullname": "ultk.effcomm.agent.Listener.R", "modulename": "ultk.effcomm.agent", "qualname": "Listener.R", "kind": "variable", "doc": "

\n", "annotation": ": numpy.ndarray"}, {"fullname": "ultk.effcomm.agent.Listener.normalized_weights", "modulename": "ultk.effcomm.agent", "qualname": "Listener.normalized_weights", "kind": "function", "doc": "

Normalize the weights of a Listener so that each row vector for the heard expression e represents a conditional probability distribution over referents P(m | e).

\n", "signature": "(self) -> numpy.ndarray:", "funcdef": "def"}, {"fullname": "ultk.effcomm.agent.LiteralSpeaker", "modulename": "ultk.effcomm.agent", "qualname": "LiteralSpeaker", "kind": "class", "doc": "

A literal speaker chooses utterances without any reasoning about other agents. The literal speaker's conditional probability distribution P(e|m) is uniform over all expressions that can be used to communicate a particular meaning. This is in contrast to a pragmatic speaker, whose conditional distribution is not uniform in this way, but instead biased towards choosing expressions that are less likely to be misinterpreted by some listener.

\n", "bases": "Speaker"}, {"fullname": "ultk.effcomm.agent.LiteralSpeaker.__init__", "modulename": "ultk.effcomm.agent", "qualname": "LiteralSpeaker.__init__", "kind": "function", "doc": "

An agent that uses a language to communicate, e.g. a RSA pragmatic agent or a Lewis-Skyrms signaler.

\n\n
Arguments:
\n\n
    \n
  • language: a language to construct a agent to define the relation between meanings and expressions, which can be used to initialize the agent matrices (e.g. S or R).
  • \n
  • name: an optional string to name the communicative agent
  • \n
\n", "signature": "(language: ultk.language.language.Language, **kwargs)"}, {"fullname": "ultk.effcomm.agent.LiteralSpeaker.S", "modulename": "ultk.effcomm.agent", "qualname": "LiteralSpeaker.S", "kind": "variable", "doc": "

\n", "annotation": ": numpy.ndarray"}, {"fullname": "ultk.effcomm.agent.LiteralListener", "modulename": "ultk.effcomm.agent", "qualname": "LiteralListener", "kind": "class", "doc": "

A naive literal listener interprets utterances without any reasoning about other agents. Its conditional probability distribution P(m|e) for guessing meanings is uniform over all meanings that can be denoted by the particular expression heard. This is in contrast to a pragmatic listener, whose conditional distribution is biased to guess meanings that a pragmatic speaker most likely intended.

\n", "bases": "Listener"}, {"fullname": "ultk.effcomm.agent.LiteralListener.__init__", "modulename": "ultk.effcomm.agent", "qualname": "LiteralListener.__init__", "kind": "function", "doc": "

An agent that uses a language to communicate, e.g. a RSA pragmatic agent or a Lewis-Skyrms signaler.

\n\n
Arguments:
\n\n
    \n
  • language: a language to construct a agent to define the relation between meanings and expressions, which can be used to initialize the agent matrices (e.g. S or R).
  • \n
  • name: an optional string to name the communicative agent
  • \n
\n", "signature": "(language: ultk.language.language.Language, **kwargs)"}, {"fullname": "ultk.effcomm.agent.LiteralListener.R", "modulename": "ultk.effcomm.agent", "qualname": "LiteralListener.R", "kind": "variable", "doc": "

\n", "annotation": ": numpy.ndarray"}, {"fullname": "ultk.effcomm.agent.PragmaticSpeaker", "modulename": "ultk.effcomm.agent", "qualname": "PragmaticSpeaker", "kind": "class", "doc": "

A pragmatic speaker chooses utterances based on how a listener would interpret them. A pragmatic speaker may be initialized with any kind of listener, e.g. literal or pragmatic -- meaning the recursive reasoning can be modeled up to arbitrary depth.

\n", "bases": "Speaker"}, {"fullname": "ultk.effcomm.agent.PragmaticSpeaker.__init__", "modulename": "ultk.effcomm.agent", "qualname": "PragmaticSpeaker.__init__", "kind": "function", "doc": "

Initialize the |M|-by-|E| matrix, S, corresponding to the pragmatic speaker's conditional probability distribution over expressions given meanings.

\n\n

The pragmatic speaker chooses expressions to communicate their intended meaning according to:

\n\n

$P(e | m) \\propto \\exp(t * u(e,m))$

\n\n

where $t \\in [0,1]$ is a temperature parameter and utility $u$ is defined

\n\n

$u(e , m) := \\log(P_{\\text{Listener}}(m | e))$

\n\n
Arguments:
\n\n
    \n
  • language: the language with |M| meanings and |E| expressions defining the size of S.
  • \n
  • listener: a communicative agent storing a matrix R representing the conditional distribution over expressions given meanings.
  • \n
  • temperature: a float \\in [0,1], representing how `optimally rational' the pragmatic speaker is; 1.0 is chosen when no particular assumptions about rationality are made.
  • \n
\n", "signature": "(\tlanguage: ultk.language.language.Language,\tlistener: ultk.effcomm.agent.Listener,\ttemperature: float = 1.0,\t**kwargs)"}, {"fullname": "ultk.effcomm.agent.PragmaticSpeaker.S", "modulename": "ultk.effcomm.agent", "qualname": "PragmaticSpeaker.S", "kind": "variable", "doc": "

\n", "annotation": ": numpy.ndarray"}, {"fullname": "ultk.effcomm.agent.PragmaticListener", "modulename": "ultk.effcomm.agent", "qualname": "PragmaticListener", "kind": "class", "doc": "

A pragmatic listener interprets utterances based on their expectations about a pragmatic speaker's decisions. A pragmatic listener may be initialized with any kind of speaker, e.g. literal or pragmatic -- meaning the recursive reasoning can be modeled up to arbitrary depth.

\n", "bases": "Listener"}, {"fullname": "ultk.effcomm.agent.PragmaticListener.__init__", "modulename": "ultk.effcomm.agent", "qualname": "PragmaticListener.__init__", "kind": "function", "doc": "

Initialize the |E|-by-|M| matrix, R, corresponding to the pragmatic listener's conditional probability distribution over meanings given expressions.

\n\n

The pragmatic listener chooses meanings as their best guesses of the expression they heard according to:

\n\n

$P(m | e) \\propto P_{\\text{PragmaticSpeaker}}(e | m)$

\n\n
Arguments:
\n\n
    \n
  • language: the language with |M| meanings and |E| expressions defining the size of R.
  • \n
  • speaker: a communicative agent storing a matrix S representing the conditional distribution over expressions given meanings.
  • \n
  • prior: a diagonal matrix of size |M|-by-|M| representing the communicative need probabilities for meanings.
  • \n
\n", "signature": "(\tlanguage: ultk.language.language.Language,\tspeaker: ultk.effcomm.agent.Speaker,\tprior: numpy.ndarray,\t**kwargs)"}, {"fullname": "ultk.effcomm.agent.PragmaticListener.R", "modulename": "ultk.effcomm.agent", "qualname": "PragmaticListener.R", "kind": "variable", "doc": "

\n", "annotation": ": numpy.ndarray"}, {"fullname": "ultk.effcomm.analysis", "modulename": "ultk.effcomm.analysis", "kind": "module", "doc": "

Functions for analyzing and formatting the results of the simplicity/informativeness trade-off.

\n"}, {"fullname": "ultk.effcomm.analysis.get_dataframe", "modulename": "ultk.effcomm.analysis", "qualname": "get_dataframe", "kind": "function", "doc": "

Get a pandas DataFrame for a list of languages containing efficient communication data.

\n\n
Arguments:
\n\n
    \n
  • languages: the list of languages to map into a dataframe.
  • \n
  • columns: the list of keys to a language's data dictionary attribute, which will comprise the columns of the resulting dataframe. By default will use all items of each language's data dictionary.
  • \n
  • subset: the columns to subset for duplicates
  • \n
  • duplicates: {\"drop\", \"count\", \"leave\"} whether to drop, count, or do nothing with duplicates. By default is set to \"leave\" which will leave duplicates in the dataframe.
  • \n
\n\n
Returns:
\n\n
\n
    \n
  • data: a pandas DataFrame with rows as individual languages, with the columns specifying their data.
  • \n
\n
\n", "signature": "(\tlanguages: list[ultk.language.language.Language],\tcolumns: list[str] = None,\tsubset: list[str] = ['complexity', 'comm_cost'],\tduplicates: str = 'leave') -> pandas.core.frame.DataFrame:", "funcdef": "def"}, {"fullname": "ultk.effcomm.analysis.pearson_analysis", "modulename": "ultk.effcomm.analysis", "qualname": "pearson_analysis", "kind": "function", "doc": "

Measures pearson correlation coefficient for naturalness with a property.

\n\n

Use nonparametric bootstrap for confidence intervals.

\n\n
Arguments:
\n\n
    \n
  • data: a DataFrame representing the pool of measured languages
  • \n
  • predictor: a string representing the column to measure pearson r with
  • \n
  • property: a string representing a column to measure pearson r with the predictor column
  • \n
  • num_bootstrap_samples: how many samples to bootstrap from the original data
  • \n
\n\n
Returns:
\n\n
\n

a dict of the pearson correlation coefficient for the predictor and the property, and bootstrapped confidence intervals for this coefficient, e.g.

\n\n
{\n\"rho\": (a float between -1 and 1),\n\"confidence_intervals\": (a pandas Dataframe with the columns [\n    'bootstrap_sample_percent', 'low', 'high'\n])\n}\n
\n
\n", "signature": "(\tdata,\tpredictor: str,\tproperty: str,\tnum_bootstrap_samples=100) -> dict[str, typing.Any]:", "funcdef": "def"}, {"fullname": "ultk.effcomm.analysis.trade_off_means", "modulename": "ultk.effcomm.analysis", "qualname": "trade_off_means", "kind": "function", "doc": "

Get a dataframe with the mean tradeoff data.

\n\n
Arguments:
\n\n
    \n
  • name: a str representing the subset of the population to observe mean properties for, e.g. \"natural\" or \"population\".
  • \n
  • df: a pandas DataFrame containing data of a language population to take the means of.
  • \n
  • prperties: the properties to take means of, corresponding to columns of df.
  • \n
\n\n

Examples:

\n\n
\n
>>> natural_means = trade_off_means("natural_means", natural_data, properties)\n>>> population_means = trade_off_means("population_means", data, properties)\n>>> means_df = pd.concat([natural_means, dlsav_means, population_means]).set_index("name")\n>>> means_df\n                    simplicity  complexity  informativity  optimality\n    name\n    natural_means       0.772222     16.4000       0.746296    0.952280\n    population_means    0.681068     22.9631       0.525118    0.832010\n
\n
\n", "signature": "(\tname: str,\tdf: pandas.core.frame.DataFrame,\tproperties: list) -> pandas.core.frame.DataFrame:", "funcdef": "def"}, {"fullname": "ultk.effcomm.analysis.trade_off_ttest", "modulename": "ultk.effcomm.analysis", "qualname": "trade_off_ttest", "kind": "function", "doc": "

Get a dataframe with a single-samples t-test results for a subpopulation against the full population.

\n\n

This is useful if we want to compare the optimality of natural languages to the full population of languages in an experiment. Because the property of 'being a natural language' is categorical, we use a single-samples T test.

\n\n
Arguments:
\n\n
    \n
  • sub_population: a pandas DataFrame representing a subset of the population to take ttests against the full language population for properties.
  • \n
  • population_means: a dict containing properties as keys and the mean value of the full language population for that property.
  • \n
  • properties: a list of strings corresponding to columns of the sub_population DataFrame and keys of the population_means dict.
  • \n
\n\n
Examples:
\n\n
\n
\n
>>> df = trade_off_ttest(natural_data, population_means, properties)\n>>> df\n                        simplicity  complexity  informativity  optimality\n    stat\n    t-statistic          4.101937   -4.101937       3.126855    4.031027\n    Two-sided p-value    0.014830    0.014830       0.035292    0.015720\n
\n
\n
\n", "signature": "(\tsub_population: pandas.core.frame.DataFrame,\tpopulation_means: dict,\tproperties: list) -> pandas.core.frame.DataFrame:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck", "modulename": "ultk.effcomm.information_bottleneck", "kind": "module", "doc": "

Submodule for Information Bottleneck based analyses of the efficiency of semantic category systems.

\n\n

The ultk.effcomm.information_bottleneck.modeling includes a friendly API for obtaining IB theoretical bounds and naming models given a specification of the statistics of the semantic domain. This is likely the only submodule you need to import.

\n\n

The ultk.effcomm.information_bottlneck.ib implements the IB update equations, and includes an optimizer object that inherits from the base object in ba.

\n\n

The ultk.effcomm.information_bottleneck.ba submodule implements the Blahut-Arimoto algorithm for computing the theoretical bounds of efficient compression. It includes code for simulated annealing (reverse or not) of $\\beta$.

\n\n

The ultk.effcomm.information_bottleneck.tools submodule includes helper methods for computing informational quantities and dealing with numerical instability.

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.ba", "modulename": "ultk.effcomm.information_bottleneck.ba", "kind": "module", "doc": "

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.ba.BaseRDOptimizer", "modulename": "ultk.effcomm.information_bottleneck.ba", "qualname": "BaseRDOptimizer", "kind": "class", "doc": "

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.ba.BaseRDOptimizer.__init__", "modulename": "ultk.effcomm.information_bottleneck.ba", "qualname": "BaseRDOptimizer.__init__", "kind": "function", "doc": "

Base initializer for a Blahut-Arimoto-based optimizer of the Rate Distortion function.

\n\n
Arguments:
\n\n
    \n
  • betas: 1D array, values of beta to search
  • \n
  • max_it: max number of iterations
  • \n
  • args: propagated to self.beta_iterate as *kwargs
  • \n
  • eps: accuracy required by the algorithm: the algorithm stops if there is no change in distortion value of more than eps between consecutive iterations
  • \n
  • ignore_converge: whether to run the optimization until max_it, ignoring the stopping criterion specified by eps.
  • \n
  • xhat_size: the size of the output alphabet. The resulting encoders will be of shape (x, xhat)
  • \n
  • kwargs: propagated to self.beta_iterate as **kwargs
  • \n
\n", "signature": "(\tbetas: numpy.ndarray,\t*args,\tmax_it: int = 1000,\teps: float = 1e-15,\tignore_converge: bool = False,\txhat_size=None,\t**kwargs)"}, {"fullname": "ultk.effcomm.information_bottleneck.ba.BaseRDOptimizer.betas", "modulename": "ultk.effcomm.information_bottleneck.ba", "qualname": "BaseRDOptimizer.betas", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.ba.BaseRDOptimizer.max_it", "modulename": "ultk.effcomm.information_bottleneck.ba", "qualname": "BaseRDOptimizer.max_it", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.ba.BaseRDOptimizer.eps", "modulename": "ultk.effcomm.information_bottleneck.ba", "qualname": "BaseRDOptimizer.eps", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.ba.BaseRDOptimizer.ignore_converge", "modulename": "ultk.effcomm.information_bottleneck.ba", "qualname": "BaseRDOptimizer.ignore_converge", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.ba.BaseRDOptimizer.init_args", "modulename": "ultk.effcomm.information_bottleneck.ba", "qualname": "BaseRDOptimizer.init_args", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.ba.BaseRDOptimizer.init_kwargs", "modulename": "ultk.effcomm.information_bottleneck.ba", "qualname": "BaseRDOptimizer.init_kwargs", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.ba.BaseRDOptimizer.ln_px", "modulename": "ultk.effcomm.information_bottleneck.ba", "qualname": "BaseRDOptimizer.ln_px", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.ba.BaseRDOptimizer.ln_qxhat_x", "modulename": "ultk.effcomm.information_bottleneck.ba", "qualname": "BaseRDOptimizer.ln_qxhat_x", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.ba.BaseRDOptimizer.dist_mat", "modulename": "ultk.effcomm.information_bottleneck.ba", "qualname": "BaseRDOptimizer.dist_mat", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.ba.BaseRDOptimizer.xhat_size", "modulename": "ultk.effcomm.information_bottleneck.ba", "qualname": "BaseRDOptimizer.xhat_size", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.ba.BaseRDOptimizer.result", "modulename": "ultk.effcomm.information_bottleneck.ba", "qualname": "BaseRDOptimizer.result", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.ba.BaseRDOptimizer.results", "modulename": "ultk.effcomm.information_bottleneck.ba", "qualname": "BaseRDOptimizer.results", "kind": "variable", "doc": "

\n", "annotation": ": list[typing.Any]"}, {"fullname": "ultk.effcomm.information_bottleneck.ba.BaseRDOptimizer.get_results", "modulename": "ultk.effcomm.information_bottleneck.ba", "qualname": "BaseRDOptimizer.get_results", "kind": "function", "doc": "

\n", "signature": "(self) -> list[typing.Any]:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.ba.BaseRDOptimizer.update_eqs", "modulename": "ultk.effcomm.information_bottleneck.ba", "qualname": "BaseRDOptimizer.update_eqs", "kind": "function", "doc": "

Main Blahut-Arimoto update steps.

\n", "signature": "(self, *args, **kwargs) -> None:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.ba.BaseRDOptimizer.next_result", "modulename": "ultk.effcomm.information_bottleneck.ba", "qualname": "BaseRDOptimizer.next_result", "kind": "function", "doc": "

Get the result of the converged BA iteration.

\n", "signature": "(self, beta, *args, **kwargs) -> None:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.ba.BaseRDOptimizer.beta_iterate", "modulename": "ultk.effcomm.information_bottleneck.ba", "qualname": "BaseRDOptimizer.beta_iterate", "kind": "function", "doc": "

Iterate the BA algorithm for an array of values of beta, using reverse deterministic annealing.

\n\n
Arguments:
\n\n
    \n
  • num_restarts: number of times to restart each beta-optimization
  • \n
  • ensure_monotonicity: whether to remove points that would make a rate distortion curve non-monotonic
  • \n
  • reverse_annealing: whether to use reverse annealing or regular annealing. If self.output_size < len(self.ln_px), then this is set to false.
  • \n
\n", "signature": "(\tself,\t*args,\tnum_restarts: int = 0,\tensure_monotonicity: bool = True,\tdisable_tqdm: bool = False,\treverse_annealing: bool = True,\t**kwargs) -> None:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.ba.BaseRDOptimizer.anneal", "modulename": "ultk.effcomm.information_bottleneck.ba", "qualname": "BaseRDOptimizer.anneal", "kind": "function", "doc": "

\n", "signature": "(\tself,\t*args,\treverse: bool = True,\tnum_restarts: int = 0,\tdisable_tqdm: bool = False,\t**kwargs) -> list:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.ba.BaseRDOptimizer.blahut_arimoto", "modulename": "ultk.effcomm.information_bottleneck.ba", "qualname": "BaseRDOptimizer.blahut_arimoto", "kind": "function", "doc": "

Update the self-consistent equations for a Rate Distortion objective.

\n\n
Arguments:
\n\n
    \n
  • beta: (scalar) the slope of the rate-distoriton function at the point where evaluation is required
  • \n
\n", "signature": "(self, beta, *args, **kwargs) -> None:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.ba.BaseRDOptimizer.compute_distortion", "modulename": "ultk.effcomm.information_bottleneck.ba", "qualname": "BaseRDOptimizer.compute_distortion", "kind": "function", "doc": "

Compute the expected distortion for the current p(x), q(xhat|x) and dist_mat.

\n", "signature": "(self, *args, **kwargs) -> float:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.ba.BaseRDOptimizer.compute_rate", "modulename": "ultk.effcomm.information_bottleneck.ba", "qualname": "BaseRDOptimizer.compute_rate", "kind": "function", "doc": "

Compute the information rate for the current p(x), q(xhat|x).

\n", "signature": "(self, *args, **kwargs) -> float:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.ib", "modulename": "ultk.effcomm.information_bottleneck.ib", "kind": "module", "doc": "

Information Bottleneck optimizer.

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.ib.ib_kl", "modulename": "ultk.effcomm.information_bottleneck.ib", "qualname": "ib_kl", "kind": "function", "doc": "

Compute the IB distortion matrix, the KL divergence between p(y|x) and q(y|xhat), in nats.

\n", "signature": "(py_x: numpy.ndarray, qy_xhat: numpy.ndarray) -> numpy.ndarray:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.ib.IBResult", "modulename": "ultk.effcomm.information_bottleneck.ib", "qualname": "IBResult", "kind": "class", "doc": "

IBResult(qxhat_x, rate, distortion, accuracy, beta)

\n", "bases": "builtins.tuple"}, {"fullname": "ultk.effcomm.information_bottleneck.ib.IBResult.__init__", "modulename": "ultk.effcomm.information_bottleneck.ib", "qualname": "IBResult.__init__", "kind": "function", "doc": "

Create new instance of IBResult(qxhat_x, rate, distortion, accuracy, beta)

\n", "signature": "(qxhat_x, rate, distortion, accuracy, beta)"}, {"fullname": "ultk.effcomm.information_bottleneck.ib.IBResult.qxhat_x", "modulename": "ultk.effcomm.information_bottleneck.ib", "qualname": "IBResult.qxhat_x", "kind": "variable", "doc": "

Alias for field number 0

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.ib.IBResult.rate", "modulename": "ultk.effcomm.information_bottleneck.ib", "qualname": "IBResult.rate", "kind": "variable", "doc": "

Alias for field number 1

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.ib.IBResult.distortion", "modulename": "ultk.effcomm.information_bottleneck.ib", "qualname": "IBResult.distortion", "kind": "variable", "doc": "

Alias for field number 2

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.ib.IBResult.accuracy", "modulename": "ultk.effcomm.information_bottleneck.ib", "qualname": "IBResult.accuracy", "kind": "variable", "doc": "

Alias for field number 3

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.ib.IBResult.beta", "modulename": "ultk.effcomm.information_bottleneck.ib", "qualname": "IBResult.beta", "kind": "variable", "doc": "

Alias for field number 4

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.ib.next_ln_qxhat", "modulename": "ultk.effcomm.information_bottleneck.ib", "qualname": "next_ln_qxhat", "kind": "function", "doc": "

\n", "signature": "(ln_px: numpy.ndarray, ln_qxhat_x: numpy.ndarray) -> numpy.ndarray:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.ib.next_ln_qxhat_x", "modulename": "ultk.effcomm.information_bottleneck.ib", "qualname": "next_ln_qxhat_x", "kind": "function", "doc": "

\n", "signature": "(ln_qxhat: numpy.ndarray, beta: float, dist_mat: numpy.ndarray):", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.ib.next_ln_qy_xhat", "modulename": "ultk.effcomm.information_bottleneck.ib", "qualname": "next_ln_qy_xhat", "kind": "function", "doc": "

\n", "signature": "(ln_pxy: numpy.ndarray, ln_qxhat_x: numpy.ndarray) -> numpy.ndarray:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.ib.next_ln_qx_xhat", "modulename": "ultk.effcomm.information_bottleneck.ib", "qualname": "next_ln_qx_xhat", "kind": "function", "doc": "

\n", "signature": "(ln_px: numpy.ndarray, ln_qxhat_x: numpy.ndarray) -> numpy.ndarray:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.ib.IBOptimizer", "modulename": "ultk.effcomm.information_bottleneck.ib", "qualname": "IBOptimizer", "kind": "class", "doc": "

\n", "bases": "ultk.effcomm.information_bottleneck.ba.BaseRDOptimizer"}, {"fullname": "ultk.effcomm.information_bottleneck.ib.IBOptimizer.__init__", "modulename": "ultk.effcomm.information_bottleneck.ib", "qualname": "IBOptimizer.__init__", "kind": "function", "doc": "

Estimate the optimal encoder for a given value of beta for the Information Bottleneck objective [Tishby et al., 1999]:

\n\n

$\\min_{q} I[X:\\hat{X}] + \\beta \\mathbb{E}[D_{KL}[p(y|x) || p(y|\\hat{x})]].$

\n\n
Arguments:
\n\n
    \n
  • pxy: 2D array of shape (|X|, |Y|) representing the joint probability mass function of the source and relevance variables.
  • \n
  • betas: 1D array of values of beta, where each beta is a float corresponding to the slope of the rate-distoriton function at the point where evaluation is required
  • \n
\n", "signature": "(pxy: numpy.ndarray, betas: numpy.ndarray, *args, **kwargs)"}, {"fullname": "ultk.effcomm.information_bottleneck.ib.IBOptimizer.ln_pxy", "modulename": "ultk.effcomm.information_bottleneck.ib", "qualname": "IBOptimizer.ln_pxy", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.ib.IBOptimizer.ln_px", "modulename": "ultk.effcomm.information_bottleneck.ib", "qualname": "IBOptimizer.ln_px", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.ib.IBOptimizer.px", "modulename": "ultk.effcomm.information_bottleneck.ib", "qualname": "IBOptimizer.px", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.ib.IBOptimizer.ln_py_x", "modulename": "ultk.effcomm.information_bottleneck.ib", "qualname": "IBOptimizer.ln_py_x", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.ib.IBOptimizer.results", "modulename": "ultk.effcomm.information_bottleneck.ib", "qualname": "IBOptimizer.results", "kind": "variable", "doc": "

\n", "annotation": ": list[ultk.effcomm.information_bottleneck.ib.IBResult]"}, {"fullname": "ultk.effcomm.information_bottleneck.ib.IBOptimizer.get_results", "modulename": "ultk.effcomm.information_bottleneck.ib", "qualname": "IBOptimizer.get_results", "kind": "function", "doc": "

\n", "signature": "(self) -> list[ultk.effcomm.information_bottleneck.ib.IBResult]:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.ib.IBOptimizer.next_dist_mat", "modulename": "ultk.effcomm.information_bottleneck.ib", "qualname": "IBOptimizer.next_dist_mat", "kind": "function", "doc": "

IB distortion matrix.

\n", "signature": "(self, *args, **kwargs) -> None:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.ib.IBOptimizer.update_eqs", "modulename": "ultk.effcomm.information_bottleneck.ib", "qualname": "IBOptimizer.update_eqs", "kind": "function", "doc": "

Iterate the IB update equations.

\n", "signature": "(self, beta, *args, **kwargs) -> None:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.ib.IBOptimizer.compute_distortion", "modulename": "ultk.effcomm.information_bottleneck.ib", "qualname": "IBOptimizer.compute_distortion", "kind": "function", "doc": "

Compute the expected distortion for the current p(x), q(xhat|x) and dist_mat.

\n", "signature": "(self, *args, **kwargs) -> float:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.ib.IBOptimizer.compute_accuracy", "modulename": "ultk.effcomm.information_bottleneck.ib", "qualname": "IBOptimizer.compute_accuracy", "kind": "function", "doc": "

\n", "signature": "(self, *args, **kwargs) -> float:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.ib.IBOptimizer.next_result", "modulename": "ultk.effcomm.information_bottleneck.ib", "qualname": "IBOptimizer.next_result", "kind": "function", "doc": "

Get the result of the converged BA iteration for the IB objective.

\n\n
Returns:
\n\n
\n

an IBResult namedtuple of (qxhat_x, rate, distortion, accuracy, beta) values. This is:

\n\n
`qxhat_x`, the optimal encoder, such that the\n\n`rate` (in bits) of compressing X into X_hat, is minimized for the level of\n\n`distortion` between X, X_hat with respect to Y, i.e. the\n\n`accuracy` I[X_hat:Y] is maximized, for the specified\n\n`beta` trade-off parameter\n
\n
\n", "signature": "(\tself,\tbeta,\t*args,\t**kwargs) -> ultk.effcomm.information_bottleneck.ib.IBResult:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.modeling", "modulename": "ultk.effcomm.information_bottleneck.modeling", "kind": "module", "doc": "

Re-implementation of the IBNamingModel at https://github.com/nogazs/ib-color-naming/blob/master/src/ib_naming_model.py.

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.modeling.IBNamingModel", "modulename": "ultk.effcomm.information_bottleneck.modeling", "qualname": "IBNamingModel", "kind": "class", "doc": "

A model for simulating Information Bottleneck (IB) naming systems.

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.modeling.IBNamingModel.__init__", "modulename": "ultk.effcomm.information_bottleneck.modeling", "qualname": "IBNamingModel.__init__", "kind": "function", "doc": "

Initializes the IBNamingModel with given parameters.

\n\n
Arguments:
\n\n
    \n
  • pM (np.ndarray): Prior distribution over meanings. Expected shape is (n, 1).
  • \n
  • pU_M (np.ndarray): Conditional distribution of observations given meanings.
  • \n
  • betas (np.ndarray): Array of beta values used for the IB curve.
  • \n
  • IB_curve (tuple[np.ndarray, np.ndarray]): tuple containing complexity and accuracy values along the IB curve.
  • \n
  • qW_M (np.ndarray): Initial encoder (naming system) matrix.
  • \n
\n", "signature": "(\tpM: numpy.ndarray,\tpU_M: numpy.ndarray,\tbetas: numpy.ndarray,\tIB_curve: tuple[numpy.ndarray, numpy.ndarray],\tqW_M: numpy.ndarray)"}, {"fullname": "ultk.effcomm.information_bottleneck.modeling.IBNamingModel.pM", "modulename": "ultk.effcomm.information_bottleneck.modeling", "qualname": "IBNamingModel.pM", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.modeling.IBNamingModel.pU_M", "modulename": "ultk.effcomm.information_bottleneck.modeling", "qualname": "IBNamingModel.pU_M", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.modeling.IBNamingModel.I_MU", "modulename": "ultk.effcomm.information_bottleneck.modeling", "qualname": "IBNamingModel.I_MU", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.modeling.IBNamingModel.betas", "modulename": "ultk.effcomm.information_bottleneck.modeling", "qualname": "IBNamingModel.betas", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.modeling.IBNamingModel.IB_curve", "modulename": "ultk.effcomm.information_bottleneck.modeling", "qualname": "IBNamingModel.IB_curve", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.modeling.IBNamingModel.qW_M", "modulename": "ultk.effcomm.information_bottleneck.modeling", "qualname": "IBNamingModel.qW_M", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.modeling.IBNamingModel.qW_M_orig", "modulename": "ultk.effcomm.information_bottleneck.modeling", "qualname": "IBNamingModel.qW_M_orig", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.modeling.IBNamingModel.F", "modulename": "ultk.effcomm.information_bottleneck.modeling", "qualname": "IBNamingModel.F", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.modeling.IBNamingModel.m_hat", "modulename": "ultk.effcomm.information_bottleneck.modeling", "qualname": "IBNamingModel.m_hat", "kind": "function", "doc": "

Computes the optimal Bayesian listener corresponding to the encoder.

\n\n
Arguments:
\n\n
    \n
  • qW_M (np.ndarray): Encoder (naming system) matrix.
  • \n
\n\n
Returns:
\n\n
\n

np.ndarray: Optimal decoder that corresponds to the given encoder.

\n
\n", "signature": "(self, qW_M: numpy.ndarray) -> numpy.ndarray:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.modeling.IBNamingModel.complexity", "modulename": "ultk.effcomm.information_bottleneck.modeling", "qualname": "IBNamingModel.complexity", "kind": "function", "doc": "

Calculates the mutual information I(M;W) for a given encoder.

\n\n
Arguments:
\n\n
    \n
  • pW_M (np.ndarray): Encoder (naming system) matrix.
  • \n
\n\n
Returns:
\n\n
\n

float: Mutual information I(M;W).

\n
\n", "signature": "(self, pW_M: numpy.ndarray) -> float:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.modeling.IBNamingModel.accuracy", "modulename": "ultk.effcomm.information_bottleneck.modeling", "qualname": "IBNamingModel.accuracy", "kind": "function", "doc": "

Calculates the mutual information I(W;U) for a given encoder.

\n\n
Arguments:
\n\n
    \n
  • pW_M (np.ndarray): Encoder (naming system) matrix.
  • \n
\n\n
Returns:
\n\n
\n

float: Mutual information I(W;U).

\n
\n", "signature": "(self, pW_M: numpy.ndarray) -> float:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.modeling.IBNamingModel.d_IB", "modulename": "ultk.effcomm.information_bottleneck.modeling", "qualname": "IBNamingModel.d_IB", "kind": "function", "doc": "

Calculates the IB distortion for a given encoder, i.e. the KL divergence between speaker and listener meanings, $\n\\mathbb{E}\\left[D[m||\\hat{m}]\night] = I(M;U) - I(W;U)$.

\n\n
Arguments:
\n\n
    \n
  • pW_M (np.ndarray): Encoder (naming system) matrix.
  • \n
\n\n
Returns:
\n\n
\n

float: Deviation from the optimal IB solution.

\n
\n", "signature": "(self, pW_M: numpy.ndarray) -> float:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.modeling.IBNamingModel.fit", "modulename": "ultk.effcomm.information_bottleneck.modeling", "qualname": "IBNamingModel.fit", "kind": "function", "doc": "

Fits the naming system to the IB curve.

\n\n
Arguments:
\n\n
    \n
  • pW_M (np.ndarray): Encoder (naming system) matrix.
  • \n
\n\n
Returns:
\n\n
\n

tuple containing:\n - epsilon (float): Deviation from optimality of pW_M.\n - gnid (float): Generalized normalized information distance (gNID) between qW_M and qW_M_fit.\n - bl (float): Fitted value of beta.\n - qW_M_fit (np.ndarray): Optimal IB system at bl.

\n
\n", "signature": "(self, pW_M: numpy.ndarray) -> tuple[float, float, float, numpy.ndarray]:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.modeling.IBNamingModel.save", "modulename": "ultk.effcomm.information_bottleneck.modeling", "qualname": "IBNamingModel.save", "kind": "function", "doc": "

Save as pickle binary.

\n", "signature": "(self, fn: str = 'ib_naming_model.pkl') -> None:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.modeling.IBNamingModel.from_pickle", "modulename": "ultk.effcomm.information_bottleneck.modeling", "qualname": "IBNamingModel.from_pickle", "kind": "function", "doc": "

\n", "signature": "(cls, fn: str):", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.modeling.gNID", "modulename": "ultk.effcomm.information_bottleneck.modeling", "qualname": "gNID", "kind": "function", "doc": "

Compute Generalized Normalized Informational Distance (gNID, in Zaslavsky et al. 2018, SI, Section 3.2) between two encoders. Code credit: https://github.com/nogazs/ib-color-naming/blob/master/src/tools.py#L94

\n\n
Arguments:
\n\n
    \n
  • pW_X: first encoder of shape (|meanings|, |words|)
  • \n
  • pV_X: second encoder of shape (|meanings|, |words|)
  • \n
  • pX: prior over source variables of shape (|meanings|,)
  • \n
\n", "signature": "(pW_X: numpy.ndarray, pV_X: numpy.ndarray, pX: numpy.ndarray):", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.modeling.compute_bound", "modulename": "ultk.effcomm.information_bottleneck.modeling", "qualname": "compute_bound", "kind": "function", "doc": "

Computes the IB bound based on input distributions.

\n\n
Arguments:
\n\n
    \n
  • pU_M (np.ndarray): Conditional distribution of observations given meanings.
  • \n
  • pM (np.ndarray, optional): Prior distribution over meanings. Defaults to None.
  • \n
  • betas (np.ndarray, optional): Range of beta values for the IB curve. Defaults to logspace(0, 10, 100).
  • \n
  • **kwargs: Additional parameters for the IB optimizer.
  • \n
\n\n
Returns:
\n\n
\n

list[IBResult]: List of results from the IB optimizer.

\n
\n", "signature": "(\tpU_M: numpy.ndarray,\tpM: numpy.ndarray,\tbetas: numpy.ndarray = array([1.00000000e+00, 1.26185688e+00, 1.59228279e+00, 2.00923300e+00,\n 2.53536449e+00, 3.19926714e+00, 4.03701726e+00, 5.09413801e+00,\n 6.42807312e+00, 8.11130831e+00, 1.02353102e+01, 1.29154967e+01,\n 1.62975083e+01, 2.05651231e+01, 2.59502421e+01, 3.27454916e+01,\n 4.13201240e+01, 5.21400829e+01, 6.57933225e+01, 8.30217568e+01,\n 1.04761575e+02, 1.32194115e+02, 1.66810054e+02, 2.10490414e+02,\n 2.65608778e+02, 3.35160265e+02, 4.22924287e+02, 5.33669923e+02,\n 6.73415066e+02, 8.49753436e+02, 1.07226722e+03, 1.35304777e+03,\n 1.70735265e+03, 2.15443469e+03, 2.71858824e+03, 3.43046929e+03,\n 4.32876128e+03, 5.46227722e+03, 6.89261210e+03, 8.69749003e+03,\n 1.09749877e+04, 1.38488637e+04, 1.74752840e+04, 2.20513074e+04,\n 2.78255940e+04, 3.51119173e+04, 4.43062146e+04, 5.59081018e+04,\n 7.05480231e+04, 8.90215085e+04, 1.12332403e+05, 1.41747416e+05,\n 1.78864953e+05, 2.25701972e+05, 2.84803587e+05, 3.59381366e+05,\n 4.53487851e+05, 5.72236766e+05, 7.22080902e+05, 9.11162756e+05,\n 1.14975700e+06, 1.45082878e+06, 1.83073828e+06, 2.31012970e+06,\n 2.91505306e+06, 3.67837977e+06, 4.64158883e+06, 5.85702082e+06,\n 7.39072203e+06, 9.32603347e+06, 1.17681195e+07, 1.48496826e+07,\n 1.87381742e+07, 2.36448941e+07, 2.98364724e+07, 3.76493581e+07,\n 4.75081016e+07, 5.99484250e+07, 7.56463328e+07, 9.54548457e+07,\n 1.20450354e+08, 1.51991108e+08, 1.91791026e+08, 2.42012826e+08,\n 3.05385551e+08, 3.85352859e+08, 4.86260158e+08, 6.13590727e+08,\n 7.74263683e+08, 9.77009957e+08, 1.23284674e+09, 1.55567614e+09,\n 1.96304065e+09, 2.47707636e+09, 3.12571585e+09, 3.94420606e+09,\n 4.97702356e+09, 6.28029144e+09, 7.92482898e+09, 1.00000000e+10]),\t**kwargs) -> list[ultk.effcomm.information_bottleneck.ib.IBResult]:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.modeling.get_ib_naming_model", "modulename": "ultk.effcomm.information_bottleneck.modeling", "qualname": "get_ib_naming_model", "kind": "function", "doc": "

Constructs an IBNamingModel by constructing the IB bound for the domain distribution P(M,U).

\n\n
Arguments:
\n\n
    \n
  • pU_M (np.ndarray): Conditional distribution of observations given meanings.
  • \n
  • pM (np.ndarray, optional): Prior distribution over meanings. Defaults to None.
  • \n
  • gammas (np.ndarray, optional): Range of gamma values for similarity selection. Defaults to logspace(-2, 2, 1000).
  • \n
  • **bound_kwargs: Additional parameters for IB bound computation. See compute_bound kwargs.
  • \n
\n\n
Returns:
\n\n
\n

IBNamingModel: An IBNamingModel instance configured with the computed IB bound.

\n
\n", "signature": "(\tpU_M: numpy.ndarray,\tpM: numpy.ndarray = None,\t**bound_kwargs) -> ultk.effcomm.information_bottleneck.modeling.IBNamingModel:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.modeling.encoder_to_language", "modulename": "ultk.effcomm.information_bottleneck.modeling", "qualname": "encoder_to_language", "kind": "function", "doc": "

Convert a stochastic encoder to a ULTK Language using an IBNamingModel bayesian decoder.

\n\n
Arguments:
\n\n
    \n
  • qW_M (np.ndarray): A stochastic matrix where rows correspond to meanings\nand columns correspond to words, defining the encoder.
  • \n
  • naming_model (IBNamingModel): An instance of the IBNamingModel used to \ndecode the encoder into a language.
  • \n
  • universe (Universe): The universe containing referents and the structure \nin which the meanings are defined.
  • \n
  • words (list[str], optional): A list of word forms to use. If None, default \nnumeric indices are used. Defaults to None.
  • \n
  • name (str, optional): The name of the resulting Language. Defaults to None.
  • \n
  • natural (bool, optional): Whether the resulting Language is a natural \nlanguage. Defaults to False.
  • \n
\n\n
Returns:
\n\n
\n

Language: The constructed Language object, where each expression maps a \n word form to its corresponding meaning.

\n
\n", "signature": "(\tqW_M: numpy.ndarray,\tnaming_model: ultk.effcomm.information_bottleneck.modeling.IBNamingModel,\tuniverse: ultk.language.semantics.Universe,\twords: list[str] = None,\tname: str = None,\tnatural: bool = False) -> ultk.language.language.Language:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.modeling.pU_M_from_similarity", "modulename": "ultk.effcomm.information_bottleneck.modeling", "qualname": "pU_M_from_similarity", "kind": "function", "doc": "

Computes the conditional distribution p(U|M) based on similarity.

\n\n
Arguments:
\n\n
    \n
  • gamma (float): Scaling factor for the similarity matrix.
  • \n
  • sim_mat (np.ndarray): Similarity matrix representing similarity between meanings (M) and referents (U).
  • \n
\n\n
Returns:
\n\n
\n

np.ndarray: Conditional distribution p(U|M).

\n
\n", "signature": "(gamma: float, sim_mat: numpy.ndarray) -> numpy.ndarray:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.modeling.get_imu", "modulename": "ultk.effcomm.information_bottleneck.modeling", "qualname": "get_imu", "kind": "function", "doc": "

Calculates the mutual information I(M;U) for a distribution p(U|M) \u221d exp(gamma * sim(u, m)).

\n\n
Arguments:
\n\n
    \n
  • gamma (float): Scaling factor for the similarity matrix.
  • \n
  • sim_mat (np.ndarray): Similarity matrix representing similarity between meanings (M) and referents (U).
  • \n
  • pM (np.ndarray, optional): Prior distribution over meanings (M). Defaults to a uniform distribution.
  • \n
\n\n
Returns:
\n\n
\n

np.ndarray: Mutual information I(M;U).

\n
\n", "signature": "(\tgamma: float,\tsim_mat: numpy.ndarray,\tpM: numpy.ndarray = None) -> numpy.ndarray:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.modeling.select_gamma", "modulename": "ultk.effcomm.information_bottleneck.modeling", "qualname": "select_gamma", "kind": "function", "doc": "

Selects the gamma value that corresponds to the midpoint of I(M;U) for a distribution p(U|M) \u221d exp(gamma * sim(u, m)).

\n\n
Arguments:
\n\n
    \n
  • similarity_matrix (np.ndarray): Matrix encoding pairwise similarities between meanings (M) and referents (U).
  • \n
  • pM (np.ndarray, optional): Communicative need distribution over meanings (M). Defaults to None.
  • \n
  • gammas (np.ndarray, optional): Range of gamma values to sample. Defaults to logspace(-2, 2, 1000).
  • \n
\n\n
Returns:
\n\n
\n

tuple: A tuple containing:\n - float: Gamma value corresponding to the midpoint of I(M;U).\n - float: Midpoint of I(M;U).\n - int: Index of the midpoint in the gamma array.\n - np.ndarray: Array of gamma values used.\n - np.ndarray: Array of computed I(M;U) values.

\n
\n", "signature": "(\tsimilarity_matrix: numpy.ndarray,\tpM: numpy.ndarray = None,\tgammas: numpy.ndarray = array([1.00000000e-02, 1.00926219e-02, 1.01861017e-02, 1.02804473e-02,\n 1.03756668e-02, 1.04717682e-02, 1.05687597e-02, 1.06666496e-02,\n 1.07654461e-02, 1.08651577e-02, 1.09657929e-02, 1.10673602e-02,\n 1.11698682e-02, 1.12733256e-02, 1.13777413e-02, 1.14831241e-02,\n 1.15894830e-02, 1.16968270e-02, 1.18051653e-02, 1.19145070e-02,\n 1.20248614e-02, 1.21362380e-02, 1.22486461e-02, 1.23620954e-02,\n 1.24765955e-02, 1.25921561e-02, 1.27087871e-02, 1.28264983e-02,\n 1.29452998e-02, 1.30652016e-02, 1.31862140e-02, 1.33083472e-02,\n 1.34316117e-02, 1.35560179e-02, 1.36815763e-02, 1.38082977e-02,\n 1.39361927e-02, 1.40652724e-02, 1.41955477e-02, 1.43270295e-02,\n 1.44597292e-02, 1.45936580e-02, 1.47288272e-02, 1.48652484e-02,\n 1.50029332e-02, 1.51418933e-02, 1.52821404e-02, 1.54236865e-02,\n 1.55665436e-02, 1.57107239e-02, 1.58562396e-02, 1.60031031e-02,\n 1.61513269e-02, 1.63009236e-02, 1.64519059e-02, 1.66042866e-02,\n 1.67580786e-02, 1.69132952e-02, 1.70699493e-02, 1.72280545e-02,\n 1.73876240e-02, 1.75486715e-02, 1.77112106e-02, 1.78752553e-02,\n 1.80408193e-02, 1.82079168e-02, 1.83765620e-02, 1.85467692e-02,\n 1.87185529e-02, 1.88919278e-02, 1.90669084e-02, 1.92435098e-02,\n 1.94217468e-02, 1.96016347e-02, 1.97831888e-02, 1.99664245e-02,\n 2.01513573e-02, 2.03380031e-02, 2.05263775e-02, 2.07164968e-02,\n 2.09083769e-02, 2.11020343e-02, 2.12974854e-02, 2.14947467e-02,\n 2.16938352e-02, 2.18947676e-02, 2.20975611e-02, 2.23022330e-02,\n 2.25088005e-02, 2.27172813e-02, 2.29276931e-02, 2.31400538e-02,\n 2.33543814e-02, 2.35706941e-02, 2.37890104e-02, 2.40093488e-02,\n 2.42317279e-02, 2.44561668e-02, 2.46826845e-02, 2.49113003e-02,\n 2.51420335e-02, 2.53749038e-02, 2.56099310e-02, 2.58471351e-02,\n 2.60865362e-02, 2.63281547e-02, 2.65720111e-02, 2.68181261e-02,\n 2.70665207e-02, 2.73172160e-02, 2.75702333e-02, 2.78255940e-02,\n 2.80833200e-02, 2.83434331e-02, 2.86059554e-02, 2.88709092e-02,\n 2.91383170e-02, 2.94082017e-02, 2.96805861e-02, 2.99554933e-02,\n 3.02329468e-02, 3.05129702e-02, 3.07955871e-02, 3.10808217e-02,\n 3.13686982e-02, 3.16592411e-02, 3.19524751e-02, 3.22484250e-02,\n 3.25471161e-02, 3.28485737e-02, 3.31528234e-02, 3.34598912e-02,\n 3.37698031e-02, 3.40825855e-02, 3.43982649e-02, 3.47168682e-02,\n 3.50384225e-02, 3.53629550e-02, 3.56904935e-02, 3.60210656e-02,\n 3.63546996e-02, 3.66914238e-02, 3.70312668e-02, 3.73742574e-02,\n 3.77204249e-02, 3.80697987e-02, 3.84224085e-02, 3.87782841e-02,\n 3.91374560e-02, 3.94999546e-02, 3.98658107e-02, 4.02350555e-02,\n 4.06077203e-02, 4.09838367e-02, 4.13634368e-02, 4.17465529e-02,\n 4.21332174e-02, 4.25234633e-02, 4.29173238e-02, 4.33148322e-02,\n 4.37160225e-02, 4.41209286e-02, 4.45295851e-02, 4.49420266e-02,\n 4.53582883e-02, 4.57784054e-02, 4.62024137e-02, 4.66303493e-02,\n 4.70622485e-02, 4.74981480e-02, 4.79380850e-02, 4.83820966e-02,\n 4.88302209e-02, 4.92824957e-02, 4.97389596e-02, 5.01996513e-02,\n 5.06646101e-02, 5.11338754e-02, 5.16074871e-02, 5.20854855e-02,\n 5.25679112e-02, 5.30548053e-02, 5.35462090e-02, 5.40421642e-02,\n 5.45427131e-02, 5.50478981e-02, 5.55577622e-02, 5.60723488e-02,\n 5.65917016e-02, 5.71158648e-02, 5.76448828e-02, 5.81788007e-02,\n 5.87176639e-02, 5.92615181e-02, 5.98104096e-02, 6.03643851e-02,\n 6.09234915e-02, 6.14877765e-02, 6.20572881e-02, 6.26320745e-02,\n 6.32121848e-02, 6.37976681e-02, 6.43885743e-02, 6.49849535e-02,\n 6.55868566e-02, 6.61943346e-02, 6.68074392e-02, 6.74262224e-02,\n 6.80507370e-02, 6.86810359e-02, 6.93171728e-02, 6.99592017e-02,\n 7.06071771e-02, 7.12611543e-02, 7.19211887e-02, 7.25873365e-02,\n 7.32596543e-02, 7.39381992e-02, 7.46230289e-02, 7.53142017e-02,\n 7.60117762e-02, 7.67158118e-02, 7.74263683e-02, 7.81435061e-02,\n 7.88672862e-02, 7.95977700e-02, 8.03350198e-02, 8.10790981e-02,\n 8.18300682e-02, 8.25879939e-02, 8.33529397e-02, 8.41249705e-02,\n 8.49041520e-02, 8.56905505e-02, 8.64842328e-02, 8.72852662e-02,\n 8.80937190e-02, 8.89096599e-02, 8.97331581e-02, 9.05642838e-02,\n 9.14031075e-02, 9.22497005e-02, 9.31041349e-02, 9.39664831e-02,\n 9.48368187e-02, 9.57152154e-02, 9.66017480e-02, 9.74964918e-02,\n 9.83995230e-02, 9.93109181e-02, 1.00230755e-01, 1.01159111e-01,\n 1.02096066e-01, 1.03041699e-01, 1.03996091e-01, 1.04959323e-01,\n 1.05931476e-01, 1.06912634e-01, 1.07902879e-01, 1.08902296e-01,\n 1.09910970e-01, 1.10928986e-01, 1.11956432e-01, 1.12993394e-01,\n 1.14039960e-01, 1.15096220e-01, 1.16162263e-01, 1.17238180e-01,\n 1.18324063e-01, 1.19420003e-01, 1.20526094e-01, 1.21642429e-01,\n 1.22769105e-01, 1.23906216e-01, 1.25053859e-01, 1.26212131e-01,\n 1.27381132e-01, 1.28560961e-01, 1.29751717e-01, 1.30953502e-01,\n 1.32166418e-01, 1.33390569e-01, 1.34626058e-01, 1.35872990e-01,\n 1.37131472e-01, 1.38401610e-01, 1.39683512e-01, 1.40977287e-01,\n 1.42283046e-01, 1.43600898e-01, 1.44930957e-01, 1.46273336e-01,\n 1.47628147e-01, 1.48995507e-01, 1.50375532e-01, 1.51768339e-01,\n 1.53174046e-01, 1.54592774e-01, 1.56024641e-01, 1.57469771e-01,\n 1.58928287e-01, 1.60400311e-01, 1.61885969e-01, 1.63385388e-01,\n 1.64898694e-01, 1.66426018e-01, 1.67967487e-01, 1.69523234e-01,\n 1.71093391e-01, 1.72678090e-01, 1.74277468e-01, 1.75891659e-01,\n 1.77520801e-01, 1.79165033e-01, 1.80824493e-01, 1.82499324e-01,\n 1.84189668e-01, 1.85895668e-01, 1.87617469e-01, 1.89355218e-01,\n 1.91109062e-01, 1.92879151e-01, 1.94665634e-01, 1.96468665e-01,\n 1.98288395e-01, 2.00124980e-01, 2.01978576e-01, 2.03849340e-01,\n 2.05737431e-01, 2.07643011e-01, 2.09566240e-01, 2.11507282e-01,\n 2.13466303e-01, 2.15443469e-01, 2.17438948e-01, 2.19452909e-01,\n 2.21485523e-01, 2.23536965e-01, 2.25607407e-01, 2.27697026e-01,\n 2.29805999e-01, 2.31934506e-01, 2.34082728e-01, 2.36250847e-01,\n 2.38439047e-01, 2.40647515e-01, 2.42876438e-01, 2.45126006e-01,\n 2.47396410e-01, 2.49687843e-01, 2.52000499e-01, 2.54334576e-01,\n 2.56690272e-01, 2.59067786e-01, 2.61467321e-01, 2.63889081e-01,\n 2.66333273e-01, 2.68800102e-01, 2.71289780e-01, 2.73802518e-01,\n 2.76338529e-01, 2.78898029e-01, 2.81481236e-01, 2.84088369e-01,\n 2.86719650e-01, 2.89375302e-01, 2.92055551e-01, 2.94760626e-01,\n 2.97490755e-01, 3.00246171e-01, 3.03027108e-01, 3.05833803e-01,\n 3.08666494e-01, 3.11525422e-01, 3.14410830e-01, 3.17322963e-01,\n 3.20262069e-01, 3.23228398e-01, 3.26222201e-01, 3.29243733e-01,\n 3.32293252e-01, 3.35371015e-01, 3.38477286e-01, 3.41612327e-01,\n 3.44776405e-01, 3.47969790e-01, 3.51192753e-01, 3.54445567e-01,\n 3.57728510e-01, 3.61041860e-01, 3.64385898e-01, 3.67760910e-01,\n 3.71167182e-01, 3.74605003e-01, 3.78074666e-01, 3.81576466e-01,\n 3.85110700e-01, 3.88677669e-01, 3.92277676e-01, 3.95911027e-01,\n 3.99578030e-01, 4.03278998e-01, 4.07014245e-01, 4.10784089e-01,\n 4.14588850e-01, 4.18428851e-01, 4.22304419e-01, 4.26215883e-01,\n 4.30163576e-01, 4.34147833e-01, 4.38168993e-01, 4.42227398e-01,\n 4.46323393e-01, 4.50457325e-01, 4.54629547e-01, 4.58840413e-01,\n 4.63090280e-01, 4.67379511e-01, 4.71708469e-01, 4.76077523e-01,\n 4.80487044e-01, 4.84937407e-01, 4.89428990e-01, 4.93962174e-01,\n 4.98537346e-01, 5.03154895e-01, 5.07815211e-01, 5.12518693e-01,\n 5.17265739e-01, 5.22056753e-01, 5.26892142e-01, 5.31772318e-01,\n 5.36697695e-01, 5.41668691e-01, 5.46685730e-01, 5.51749238e-01,\n 5.56859644e-01, 5.62017385e-01, 5.67222897e-01, 5.72476624e-01,\n 5.77779012e-01, 5.83130511e-01, 5.88531578e-01, 5.93982669e-01,\n 5.99484250e-01, 6.05036788e-01, 6.10640754e-01, 6.16296626e-01,\n 6.22004883e-01, 6.27766011e-01, 6.33580499e-01, 6.39448843e-01,\n 6.45371540e-01, 6.51349095e-01, 6.57382014e-01, 6.63470812e-01,\n 6.69616005e-01, 6.75818117e-01, 6.82077673e-01, 6.88395207e-01,\n 6.94771255e-01, 7.01206359e-01, 7.07701066e-01, 7.14255929e-01,\n 7.20871503e-01, 7.27548353e-01, 7.34287045e-01, 7.41088152e-01,\n 7.47952252e-01, 7.54879928e-01, 7.61871770e-01, 7.68928372e-01,\n 7.76050334e-01, 7.83238260e-01, 7.90492762e-01, 7.97814457e-01,\n 8.05203967e-01, 8.12661920e-01, 8.20188950e-01, 8.27785697e-01,\n 8.35452806e-01, 8.43190929e-01, 8.51000725e-01, 8.58882856e-01,\n 8.66837993e-01, 8.74866812e-01, 8.82969996e-01, 8.91148232e-01,\n 8.99402217e-01, 9.07732653e-01, 9.16140246e-01, 9.24625712e-01,\n 9.33189772e-01, 9.41833153e-01, 9.50556592e-01, 9.59360829e-01,\n 9.68246612e-01, 9.77214697e-01, 9.86265846e-01, 9.95400829e-01,\n 1.00462042e+00, 1.01392541e+00, 1.02331658e+00, 1.03279473e+00,\n 1.04236067e+00, 1.05201522e+00, 1.06175918e+00, 1.07159340e+00,\n 1.08151870e+00, 1.09153594e+00, 1.10164595e+00, 1.11184960e+00,\n 1.12214777e+00, 1.13254132e+00, 1.14303113e+00, 1.15361810e+00,\n 1.16430313e+00, 1.17508713e+00, 1.18597101e+00, 1.19695570e+00,\n 1.20804213e+00, 1.21923125e+00, 1.23052400e+00, 1.24192135e+00,\n 1.25342427e+00, 1.26503372e+00, 1.27675070e+00, 1.28857621e+00,\n 1.30051125e+00, 1.31255684e+00, 1.32471399e+00, 1.33698374e+00,\n 1.34936714e+00, 1.36186524e+00, 1.37447909e+00, 1.38720978e+00,\n 1.40005838e+00, 1.41302599e+00, 1.42611371e+00, 1.43932264e+00,\n 1.45265393e+00, 1.46610868e+00, 1.47968806e+00, 1.49339322e+00,\n 1.50722531e+00, 1.52118552e+00, 1.53527503e+00, 1.54949504e+00,\n 1.56384676e+00, 1.57833141e+00, 1.59295021e+00, 1.60770442e+00,\n 1.62259529e+00, 1.63762407e+00, 1.65279206e+00, 1.66810054e+00,\n 1.68355080e+00, 1.69914417e+00, 1.71488197e+00, 1.73076553e+00,\n 1.74679622e+00, 1.76297538e+00, 1.77930439e+00, 1.79578465e+00,\n 1.81241755e+00, 1.82920450e+00, 1.84614695e+00, 1.86324631e+00,\n 1.88050406e+00, 1.89792164e+00, 1.91550056e+00, 1.93324229e+00,\n 1.95114835e+00, 1.96922026e+00, 1.98745955e+00, 2.00586778e+00,\n 2.02444651e+00, 2.04319732e+00, 2.06212180e+00, 2.08122157e+00,\n 2.10049824e+00, 2.11995346e+00, 2.13958887e+00, 2.15940615e+00,\n 2.17940698e+00, 2.19959307e+00, 2.21996612e+00, 2.24052787e+00,\n 2.26128007e+00, 2.28222447e+00, 2.30336287e+00, 2.32469706e+00,\n 2.34622885e+00, 2.36796007e+00, 2.38989257e+00, 2.41202821e+00,\n 2.43436887e+00, 2.45691646e+00, 2.47967289e+00, 2.50264010e+00,\n 2.52582003e+00, 2.54921465e+00, 2.57282597e+00, 2.59665597e+00,\n 2.62070670e+00, 2.64498018e+00, 2.66947849e+00, 2.69420371e+00,\n 2.71915794e+00, 2.74434330e+00, 2.76976194e+00, 2.79541600e+00,\n 2.82130768e+00, 2.84743917e+00, 2.87381269e+00, 2.90043049e+00,\n 2.92729484e+00, 2.95440800e+00, 2.98177229e+00, 3.00939003e+00,\n 3.03726358e+00, 3.06539530e+00, 3.09378757e+00, 3.12244282e+00,\n 3.15136348e+00, 3.18055202e+00, 3.21001090e+00, 3.23974263e+00,\n 3.26974974e+00, 3.30003479e+00, 3.33060034e+00, 3.36144900e+00,\n 3.39258338e+00, 3.42400614e+00, 3.45571994e+00, 3.48772747e+00,\n 3.52003147e+00, 3.55263468e+00, 3.58553986e+00, 3.61874981e+00,\n 3.65226736e+00, 3.68609536e+00, 3.72023668e+00, 3.75469422e+00,\n 3.78947092e+00, 3.82456972e+00, 3.85999362e+00, 3.89574562e+00,\n 3.93182876e+00, 3.96824610e+00, 4.00500076e+00, 4.04209584e+00,\n 4.07953450e+00, 4.11731993e+00, 4.15545533e+00, 4.19394396e+00,\n 4.23278907e+00, 4.27199397e+00, 4.31156199e+00, 4.35149650e+00,\n 4.39180089e+00, 4.43247859e+00, 4.47353305e+00, 4.51496777e+00,\n 4.55678627e+00, 4.59899209e+00, 4.64158883e+00, 4.68458012e+00,\n 4.72796959e+00, 4.77176095e+00, 4.81595791e+00, 4.86056423e+00,\n 4.90558371e+00, 4.95102016e+00, 4.99687745e+00, 5.04315949e+00,\n 5.08987019e+00, 5.13701354e+00, 5.18459354e+00, 5.23261424e+00,\n 5.28107971e+00, 5.32999408e+00, 5.37936150e+00, 5.42918618e+00,\n 5.47947234e+00, 5.53022426e+00, 5.58144625e+00, 5.63314267e+00,\n 5.68531791e+00, 5.73797641e+00, 5.79112265e+00, 5.84476113e+00,\n 5.89889643e+00, 5.95353313e+00, 6.00867589e+00, 6.06432940e+00,\n 6.12049837e+00, 6.17718760e+00, 6.23440189e+00, 6.29214611e+00,\n 6.35042517e+00, 6.40924402e+00, 6.46860766e+00, 6.52852114e+00,\n 6.58898955e+00, 6.65001803e+00, 6.71161177e+00, 6.77377600e+00,\n 6.83651600e+00, 6.89983712e+00, 6.96374473e+00, 7.02824426e+00,\n 7.09334120e+00, 7.15904109e+00, 7.22534949e+00, 7.29227206e+00,\n 7.35981448e+00, 7.42798248e+00, 7.49678187e+00, 7.56621850e+00,\n 7.63629826e+00, 7.70702711e+00, 7.77841107e+00, 7.85045620e+00,\n 7.92316862e+00, 7.99655453e+00, 8.07062014e+00, 8.14537177e+00,\n 8.22081576e+00, 8.29695852e+00, 8.37380654e+00, 8.45136633e+00,\n 8.52964450e+00, 8.60864770e+00, 8.68838264e+00, 8.76885609e+00,\n 8.85007491e+00, 8.93204600e+00, 9.01477631e+00, 9.09827289e+00,\n 9.18254284e+00, 9.26759330e+00, 9.35343152e+00, 9.44006479e+00,\n 9.52750047e+00, 9.61574600e+00, 9.70480888e+00, 9.79469667e+00,\n 9.88541702e+00, 9.97697764e+00, 1.00693863e+01, 1.01626509e+01,\n 1.02567793e+01, 1.03517796e+01, 1.04476597e+01, 1.05444279e+01,\n 1.06420924e+01, 1.07406615e+01, 1.08401436e+01, 1.09405471e+01,\n 1.10418805e+01, 1.11441525e+01, 1.12473718e+01, 1.13515471e+01,\n 1.14566873e+01, 1.15628013e+01, 1.16698982e+01, 1.17779870e+01,\n 1.18870770e+01, 1.19971774e+01, 1.21082975e+01, 1.22204469e+01,\n 1.23336350e+01, 1.24478715e+01, 1.25631660e+01, 1.26795285e+01,\n 1.27969687e+01, 1.29154967e+01, 1.30351224e+01, 1.31558562e+01,\n 1.32777083e+01, 1.34006890e+01, 1.35248087e+01, 1.36500781e+01,\n 1.37765077e+01, 1.39041083e+01, 1.40328908e+01, 1.41628662e+01,\n 1.42940453e+01, 1.44264395e+01, 1.45600600e+01, 1.46949180e+01,\n 1.48310251e+01, 1.49683929e+01, 1.51070330e+01, 1.52469573e+01,\n 1.53881775e+01, 1.55307057e+01, 1.56745541e+01, 1.58197348e+01,\n 1.59662602e+01, 1.61141428e+01, 1.62633950e+01, 1.64140297e+01,\n 1.65660596e+01, 1.67194976e+01, 1.68743568e+01, 1.70306503e+01,\n 1.71883914e+01, 1.73475936e+01, 1.75082703e+01, 1.76704353e+01,\n 1.78341022e+01, 1.79992851e+01, 1.81659979e+01, 1.83342548e+01,\n 1.85040702e+01, 1.86754584e+01, 1.88484341e+01, 1.90230119e+01,\n 1.91992067e+01, 1.93770334e+01, 1.95565072e+01, 1.97376433e+01,\n 1.99204571e+01, 2.01049642e+01, 2.02911802e+01, 2.04791210e+01,\n 2.06688025e+01, 2.08602409e+01, 2.10534524e+01, 2.12484535e+01,\n 2.14452608e+01, 2.16438909e+01, 2.18443607e+01, 2.20466874e+01,\n 2.22508880e+01, 2.24569800e+01, 2.26649808e+01, 2.28749082e+01,\n 2.30867799e+01, 2.33006141e+01, 2.35164288e+01, 2.37342425e+01,\n 2.39540736e+01, 2.41759408e+01, 2.43998630e+01, 2.46258592e+01,\n 2.48539486e+01, 2.50841506e+01, 2.53164848e+01, 2.55509709e+01,\n 2.57876289e+01, 2.60264788e+01, 2.62675410e+01, 2.65108360e+01,\n 2.67563844e+01, 2.70042072e+01, 2.72543253e+01, 2.75067601e+01,\n 2.77615329e+01, 2.80186656e+01, 2.82781798e+01, 2.85400977e+01,\n 2.88044415e+01, 2.90712338e+01, 2.93404971e+01, 2.96122544e+01,\n 2.98865287e+01, 3.01633435e+01, 3.04427221e+01, 3.07246884e+01,\n 3.10092664e+01, 3.12964801e+01, 3.15863541e+01, 3.18789129e+01,\n 3.21741815e+01, 3.24721849e+01, 3.27729485e+01, 3.30764978e+01,\n 3.33828586e+01, 3.36920571e+01, 3.40041193e+01, 3.43190720e+01,\n 3.46369418e+01, 3.49577557e+01, 3.52815412e+01, 3.56083255e+01,\n 3.59381366e+01, 3.62710025e+01, 3.66069515e+01, 3.69460121e+01,\n 3.72882131e+01, 3.76335836e+01, 3.79821531e+01, 3.83339510e+01,\n 3.86890074e+01, 3.90473524e+01, 3.94090164e+01, 3.97740302e+01,\n 4.01424249e+01, 4.05142317e+01, 4.08894823e+01, 4.12682085e+01,\n 4.16504425e+01, 4.20362168e+01, 4.24255643e+01, 4.28185180e+01,\n 4.32151113e+01, 4.36153779e+01, 4.40193519e+01, 4.44270675e+01,\n 4.48385595e+01, 4.52538628e+01, 4.56730127e+01, 4.60960449e+01,\n 4.65229952e+01, 4.69539001e+01, 4.73887961e+01, 4.78277202e+01,\n 4.82707097e+01, 4.87178022e+01, 4.91690358e+01, 4.96244488e+01,\n 5.00840799e+01, 5.05479682e+01, 5.10161531e+01, 5.14886745e+01,\n 5.19655724e+01, 5.24468875e+01, 5.29326606e+01, 5.34229330e+01,\n 5.39177464e+01, 5.44171429e+01, 5.49211648e+01, 5.54298552e+01,\n 5.59432571e+01, 5.64614142e+01, 5.69843706e+01, 5.75121707e+01,\n 5.80448594e+01, 5.85824820e+01, 5.91250841e+01, 5.96727120e+01,\n 6.02254120e+01, 6.07832313e+01, 6.13462172e+01, 6.19144176e+01,\n 6.24878807e+01, 6.30666554e+01, 6.36507908e+01, 6.42403366e+01,\n 6.48353429e+01, 6.54358602e+01, 6.60419396e+01, 6.66536327e+01,\n 6.72709914e+01, 6.78940681e+01, 6.85229160e+01, 6.91575883e+01,\n 6.97981391e+01, 7.04446228e+01, 7.10970943e+01, 7.17556092e+01,\n 7.24202233e+01, 7.30909933e+01, 7.37679760e+01, 7.44512291e+01,\n 7.51408106e+01, 7.58367791e+01, 7.65391939e+01, 7.72481145e+01,\n 7.79636013e+01, 7.86857151e+01, 7.94145172e+01, 8.01500696e+01,\n 8.08924349e+01, 8.16416760e+01, 8.23978568e+01, 8.31610415e+01,\n 8.39312950e+01, 8.47086827e+01, 8.54932707e+01, 8.62851257e+01,\n 8.70843150e+01, 8.78909065e+01, 8.87049689e+01, 8.95265713e+01,\n 9.03557835e+01, 9.11926760e+01, 9.20373200e+01, 9.28897872e+01,\n 9.37501502e+01, 9.46184819e+01, 9.54948564e+01, 9.63793480e+01,\n 9.72720319e+01, 9.81729841e+01, 9.90822810e+01, 1.00000000e+02])) -> tuple[float, float, int, numpy.ndarray, numpy.ndarray]:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.tools", "modulename": "ultk.effcomm.information_bottleneck.tools", "kind": "module", "doc": "

\n"}, {"fullname": "ultk.effcomm.information_bottleneck.tools.PRECISION", "modulename": "ultk.effcomm.information_bottleneck.tools", "qualname": "PRECISION", "kind": "variable", "doc": "

\n", "default_value": "1e-15"}, {"fullname": "ultk.effcomm.information_bottleneck.tools.get_gaussian_noise", "modulename": "ultk.effcomm.information_bottleneck.tools", "qualname": "get_gaussian_noise", "kind": "function", "doc": "

Small Gaussian noise.

\n", "signature": "(shape):", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.tools.add_noise_to_stochastic_matrix", "modulename": "ultk.effcomm.information_bottleneck.tools", "qualname": "add_noise_to_stochastic_matrix", "kind": "function", "doc": "

Given an input stochastic matrix q, sample a stochastic matrix p and\nmix it with the input with a small weight weight, i.e., return q + weight * p.

\n", "signature": "(q, weight=0.01):", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.tools.random_stochastic_matrix", "modulename": "ultk.effcomm.information_bottleneck.tools", "qualname": "random_stochastic_matrix", "kind": "function", "doc": "

Initialize a stochastic matrix (2D array) that sums to 1 along the rows.

\n\n
Arguments:
\n\n
    \n
  • shape: tuple, the desired shape of the stochastic matrix (e.g., (rows, cols)).
  • \n
  • gamma: float, scaling factor for the random normal initialization.
  • \n
\n\n
Returns:
\n\n
\n

A stochastic matrix with rows summing to 1.

\n
\n", "signature": "(shape, gamma=1e-10):", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.tools.entropy_bits", "modulename": "ultk.effcomm.information_bottleneck.tools", "qualname": "entropy_bits", "kind": "function", "doc": "

Compute entropy of p, $H(X) = - \\sum_x p(x) \\log p(x)$, in bits.

\n", "signature": "(p: numpy.ndarray, axis=None) -> float:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.tools.mutual_info", "modulename": "ultk.effcomm.information_bottleneck.tools", "qualname": "mutual_info", "kind": "function", "doc": "

Compute mutual information, $I(X;Y)$ in bits.

\n\n
Arguments:
\n\n
    \n
  • pxy: 2D numpy array of shape (x, y)
  • \n
\n", "signature": "(pxy: numpy.ndarray) -> float:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.tools.kl_divergence", "modulename": "ultk.effcomm.information_bottleneck.tools", "qualname": "kl_divergence", "kind": "function", "doc": "

Compute KL divergence (in nats by defaut) between p and q, $D_{KL}[p \\| q]$.

\n\n
Arguments:
\n\n
    \n
  • p: np.ndarray, lhs of KL divergence
  • \n
  • q: np.ndarray, rhs of KL divergence
  • \n
\n", "signature": "(\tp: numpy.ndarray,\tq: numpy.ndarray,\taxis=None,\tbase=2.718281828459045) -> float:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.tools.information_cond", "modulename": "ultk.effcomm.information_bottleneck.tools", "qualname": "information_cond", "kind": "function", "doc": "

Compute the mutual information $I(A;B)$ from a joint distribution defind by $P(A)$ and $P(B|A)$

\n\n
Arguments:
\n\n
    \n
  • pA: array of shape |A| the prior probability of an input symbol (i.e., the source)
  • \n
  • pB_A: array of shape (|A|, |B|) the probability of an output symbol given the input
  • \n
\n", "signature": "(pA: numpy.ndarray, pB_A: numpy.ndarray) -> float:", "funcdef": "def"}, {"fullname": "ultk.effcomm.information_bottleneck.tools.compute_lower_bound", "modulename": "ultk.effcomm.information_bottleneck.tools", "qualname": "compute_lower_bound", "kind": "function", "doc": "

Remove all points in a rate-distortion curve that would make it nonmonotonic and\nreturn only the resulting monotonic indices.

\n\n

This is required to remove the random fluctuations in the result induced by the BA algorithm getting stuck in local minima.

\n\n

Acknowledgement: https://github.com/epiasini/embo-github-mirror/blob/master/embo/utils.py#L77.

\n\n
Arguments:
\n\n
    \n
  • rd_points: list of pairs of floats, where each pair represents an estimated (rate, distortion) pair,\nand ordered by increasing rate.
  • \n
\n\n
Returns:
\n\n
\n

selected_indices: 1D numpy array containing the indices of the points selected to ensure monotonically decreasing values.

\n
\n", "signature": "(rd_points):", "funcdef": "def"}, {"fullname": "ultk.effcomm.informativity", "modulename": "ultk.effcomm.informativity", "kind": "module", "doc": "

Functions for measuring informativity in efficient communication analyses of languages.

\n"}, {"fullname": "ultk.effcomm.informativity.build_utility_matrix", "modulename": "ultk.effcomm.informativity", "qualname": "build_utility_matrix", "kind": "function", "doc": "

Construct the square matrix specifying the utility function defined for pairs of meanings, used for computing communicative success.

\n", "signature": "(\tuniverse: ultk.language.semantics.Universe,\tutility: Callable[[ultk.language.semantics.Referent, ultk.language.semantics.Referent], float]) -> numpy.ndarray:", "funcdef": "def"}, {"fullname": "ultk.effcomm.informativity.indicator_utility", "modulename": "ultk.effcomm.informativity", "qualname": "indicator_utility", "kind": "function", "doc": "

Indicator utility function, i.e. delta. Returns 1.0 iff ref1 equals ref2.

\n", "signature": "(\tref1: ultk.language.semantics.Referent,\tref2: ultk.language.semantics.Referent) -> float:", "funcdef": "def"}, {"fullname": "ultk.effcomm.informativity.informativity", "modulename": "ultk.effcomm.informativity", "qualname": "informativity", "kind": "function", "doc": "

The informativity of a language is identified with the successful communication between a speaker and a listener.

\n\n

This function is a wrapper for communicative_success.

\n\n
Arguments:
\n\n
    \n
  • language: the language to compute informativity of.
  • \n
  • prior: a probability distribution representing communicative need (frequency) for Referents.
  • \n
  • utility: a function representing the usefulness of listener guesses about speaker Referents, e.g. Referent similarity. To reward only exact recovery of meanings, use the indicator function (default).
  • \n
  • kind: {\"literal, pragmatic\"} Whether to measure informativity using literal or pragmatic agents, as canonically described in the Rational Speech Act framework. The default is \"literal\".
  • \n
\n\n

Concepts:\n The speaker can be thought of as a conditional distribution over expressions given meanings. The listener is likewise a conditional distribution over meanings given expressions. The communicative need, or cognitive source, is a prior probability over meanings representing how frequently agents need to use certain meanings in communication. The utility function represents the similarity, or appropriateness, of the listener's guess m' about the speaker's intended meaning m.

\n\n

Formula:\n The informativity of a language $L$ with meaning space $M$ is defined:

\n\n

$I(L) := \\sum_{m \\in M} p(m) \\sum_{i \\in L} p(i|m) \\sum_{\\hat{m} \\in i} p(\\hat{m}|i) \\cdot u(m, \\hat{m})$

\n\n

Bounds:\n A perfectly informative (=1.0) language can be constructed with a exactly one expression for each meaning.

\n\n
For u() = indicator(), every language has nonzero informativity because a language must contain at least one expression, and an expression must contain at least one meaning.\n
\n", "signature": "(\tlanguage: ultk.language.language.Language,\tprior: numpy.ndarray,\tutility: Callable[[ultk.language.semantics.Referent, ultk.language.semantics.Referent], float] = <function indicator_utility>,\tagent_type: str = 'literal') -> float:", "funcdef": "def"}, {"fullname": "ultk.effcomm.informativity.communicative_success", "modulename": "ultk.effcomm.informativity", "qualname": "communicative_success", "kind": "function", "doc": "

Helper function to compute the literal informativity of a language.

\n\n

$I(L) = \\sum_{m, \\hat{m}} P(m, \\hat{m}) \\cdot u(m, \\hat{m})$

\n\n

$ = \\sum_{m \\in M} p(m) \\sum_{i \\in L} p(i|m) \\sum_{\\hat{m} \\in i} p(\\hat{m} |i) \\cdot u(m, m')$

\n\n

$ = \\sum \\text{diag}(p)SR \\odot U $

\n\n

For more details, see docs/vectorized_informativity.

\n\n
Arguments:
\n\n
    \n
  • speaker: a literal or pragmatic speaker, containing a matrix S for P(e | m)
  • \n
  • listener: a literal or pragmatic listener, containing a matrix R for P(m | e)
  • \n
  • prior: p(m), distribution over meanings representing communicative need
  • \n
  • utility: a function u(m, m') representing similarity of meanings, or pair-wise usefulness of listener guesses about speaker meanings.
  • \n
\n", "signature": "(\tspeaker: ultk.effcomm.agent.Speaker,\tlistener: ultk.effcomm.agent.Listener,\tprior: numpy.ndarray,\tutility: Callable[[ultk.language.semantics.Referent, ultk.language.semantics.Referent], float]) -> float:", "funcdef": "def"}, {"fullname": "ultk.effcomm.optimization", "modulename": "ultk.effcomm.optimization", "kind": "module", "doc": "

Classes and functions for generating languages that optimize the simplicity/informativeness trade-off, e.g. via an iterative evolutionary algorithm.

\n"}, {"fullname": "ultk.effcomm.optimization.Mutation", "modulename": "ultk.effcomm.optimization", "qualname": "Mutation", "kind": "class", "doc": "

\n"}, {"fullname": "ultk.effcomm.optimization.Mutation.precondition", "modulename": "ultk.effcomm.optimization", "qualname": "Mutation.precondition", "kind": "function", "doc": "

Whether a mutation is allowed to apply to a language.

\n", "signature": "(language: ultk.language.language.Language, **kwargs) -> bool:", "funcdef": "def"}, {"fullname": "ultk.effcomm.optimization.Mutation.mutate", "modulename": "ultk.effcomm.optimization", "qualname": "Mutation.mutate", "kind": "function", "doc": "

Mutate the language, possibly using a list of expressions.

\n", "signature": "(\tlanguage: ultk.language.language.Language,\texpressions: list[ultk.language.language.Expression],\t**kwargs) -> ultk.language.language.Language:", "funcdef": "def"}, {"fullname": "ultk.effcomm.optimization.RemoveExpression", "modulename": "ultk.effcomm.optimization", "qualname": "RemoveExpression", "kind": "class", "doc": "

\n", "bases": "Mutation"}, {"fullname": "ultk.effcomm.optimization.RemoveExpression.precondition", "modulename": "ultk.effcomm.optimization", "qualname": "RemoveExpression.precondition", "kind": "function", "doc": "

Whether a mutation is allowed to apply to a language.

\n", "signature": "(language: ultk.language.language.Language, **kwargs) -> bool:", "funcdef": "def"}, {"fullname": "ultk.effcomm.optimization.RemoveExpression.mutate", "modulename": "ultk.effcomm.optimization", "qualname": "RemoveExpression.mutate", "kind": "function", "doc": "

Mutate the language, possibly using a list of expressions.

\n", "signature": "(\tlanguage: ultk.language.language.Language,\texpressions: list[ultk.language.language.Expression],\t**kwargs) -> ultk.language.language.Language:", "funcdef": "def"}, {"fullname": "ultk.effcomm.optimization.AddExpression", "modulename": "ultk.effcomm.optimization", "qualname": "AddExpression", "kind": "class", "doc": "

\n", "bases": "Mutation"}, {"fullname": "ultk.effcomm.optimization.AddExpression.precondition", "modulename": "ultk.effcomm.optimization", "qualname": "AddExpression.precondition", "kind": "function", "doc": "

Whether a mutation is allowed to apply to a language.

\n", "signature": "(language: ultk.language.language.Language, **kwargs) -> bool:", "funcdef": "def"}, {"fullname": "ultk.effcomm.optimization.AddExpression.mutate", "modulename": "ultk.effcomm.optimization", "qualname": "AddExpression.mutate", "kind": "function", "doc": "

Mutate the language, possibly using a list of expressions.

\n", "signature": "(\tlanguage: ultk.language.language.Language,\texpressions: list[ultk.language.language.Expression],\t**kwargs) -> ultk.language.language.Language:", "funcdef": "def"}, {"fullname": "ultk.effcomm.optimization.EvolutionaryOptimizer", "modulename": "ultk.effcomm.optimization", "qualname": "EvolutionaryOptimizer", "kind": "class", "doc": "

Class for approximating the Pareto frontier of languages optimizing the simplicity/informativity trade-off.

\n"}, {"fullname": "ultk.effcomm.optimization.EvolutionaryOptimizer.__init__", "modulename": "ultk.effcomm.optimization", "qualname": "EvolutionaryOptimizer.__init__", "kind": "function", "doc": "

Initialize the evolutionary algorithm configurations.

\n\n

The measures of complexity and informativity, the expressions, and the mutations are all specific to the particular semantic domain.

\n\n
Arguments:
\n\n
    \n
  • objectives: a dict of the two objectives to optimize for, e.g. simplicity and informativeness, of the form, e.g.\n{\n \"complexity\": comp_measure,\n \"comm_cost\": lambda l: 1 - inf_measure(l)\n}
  • \n
  • expressions: a list of expressions from which to apply mutations to languages.
  • \n
  • sample_size: the size of the population at every generation.
  • \n
  • max_muatations: between 1 and this number of mutations will be applied to a subset of the population at the end of each generation.
  • \n
  • generations: how many iterations to run the evolutionary algorithm for.
  • \n
  • lang_size: between 1 and this number of expressions comprise a language.
  • \n
  • mutations: (optional) a list of Mutation objects, defaults to add/remove expression
  • \n
\n", "signature": "(\tobjectives: list[typing.Callable[[ultk.language.language.Language], typing.Any]],\texpressions: list[ultk.language.language.Expression],\tsample_size: int,\tmax_mutations: int,\tgenerations: int,\tlang_size: int | None = None,\tmutations: tuple[typing.Type[ultk.effcomm.optimization.Mutation], ...] = (<class 'ultk.effcomm.optimization.AddExpression'>, <class 'ultk.effcomm.optimization.RemoveExpression'>))"}, {"fullname": "ultk.effcomm.optimization.EvolutionaryOptimizer.objectives", "modulename": "ultk.effcomm.optimization", "qualname": "EvolutionaryOptimizer.objectives", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.optimization.EvolutionaryOptimizer.expressions", "modulename": "ultk.effcomm.optimization", "qualname": "EvolutionaryOptimizer.expressions", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.optimization.EvolutionaryOptimizer.mutations", "modulename": "ultk.effcomm.optimization", "qualname": "EvolutionaryOptimizer.mutations", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_size", "modulename": "ultk.effcomm.optimization", "qualname": "EvolutionaryOptimizer.sample_size", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.optimization.EvolutionaryOptimizer.max_mutations", "modulename": "ultk.effcomm.optimization", "qualname": "EvolutionaryOptimizer.max_mutations", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.optimization.EvolutionaryOptimizer.generations", "modulename": "ultk.effcomm.optimization", "qualname": "EvolutionaryOptimizer.generations", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.optimization.EvolutionaryOptimizer.lang_size", "modulename": "ultk.effcomm.optimization", "qualname": "EvolutionaryOptimizer.lang_size", "kind": "variable", "doc": "

\n", "annotation": ": int"}, {"fullname": "ultk.effcomm.optimization.EvolutionaryOptimizer.dominating_languages", "modulename": "ultk.effcomm.optimization", "qualname": "EvolutionaryOptimizer.dominating_languages", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.optimization.EvolutionaryOptimizer.explored_languages", "modulename": "ultk.effcomm.optimization", "qualname": "EvolutionaryOptimizer.explored_languages", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.effcomm.optimization.EvolutionaryOptimizer.fit", "modulename": "ultk.effcomm.optimization", "qualname": "EvolutionaryOptimizer.fit", "kind": "function", "doc": "

Computes the Pareto frontier, a set languages which cannot be both more simple and more informative.

\n\n

Uses pygmo's nondominated_front method for computing a population's best solutions to a multi-objective optimization problem.

\n\n
Arguments:
\n\n
    \n
  • seed_population: a list of languages representing the population at generation 0 of the algorithm.
  • \n
  • explore: a float in [0,1] representing how much to optimize for fitness\n(optimality wrt pareto front of complexity and comm_cost), and how much to randomly explore.
  • \n
\n\n
Returns:
\n\n
\n

a dict of the estimated optimization solutions, as well as points explored along the way; of the form

\n\n
{\n\"dominating_languages\": list of languages as estimated solutions,\n\"explored_languages\": list of all the languages explored during the evolutionary algorithm,\n}\n
\n
\n", "signature": "(\tself,\tseed_population: list[ultk.language.language.Language],\texplore: float = 0.0) -> dict[str, list[ultk.language.language.Language]]:", "funcdef": "def"}, {"fullname": "ultk.effcomm.optimization.EvolutionaryOptimizer.sample_mutated", "modulename": "ultk.effcomm.optimization", "qualname": "EvolutionaryOptimizer.sample_mutated", "kind": "function", "doc": "
Arguments:
\n\n
    \n
  • languages: dominating languages of a generation
  • \n
  • amount: sample_size.
  • \n
  • expressions: the list of expressions
  • \n
\n\n
Returns:
\n\n
\n

list of updated languages

\n
\n", "signature": "(\tself,\tlanguages: list[ultk.language.language.Language]) -> list[ultk.language.language.Language]:", "funcdef": "def"}, {"fullname": "ultk.effcomm.optimization.EvolutionaryOptimizer.mutate", "modulename": "ultk.effcomm.optimization", "qualname": "EvolutionaryOptimizer.mutate", "kind": "function", "doc": "

Randomly selects a mutation that is allowed to apply and applies it to a language.

\n\n
Arguments:
\n\n
    \n
  • language: the Language to mutate
  • \n
  • expressions: the list of all possible expressions.\nSome mutations need access to this list, so it is part of the mutation api.
  • \n
\n\n
Returns:
\n\n
\n

the mutated Language

\n
\n", "signature": "(\tself,\tlanguage: ultk.language.language.Language) -> ultk.language.language.Language:", "funcdef": "def"}, {"fullname": "ultk.effcomm.optimization.sample_parents", "modulename": "ultk.effcomm.optimization", "qualname": "sample_parents", "kind": "function", "doc": "

Use the explore parameter to explore possibly suboptimal areas of the language space.

\n\n
Arguments:
\n\n
    \n
  • dominating_languages: a list of the languages with current best fitness with respect to the objectives.
  • \n
  • explored_languages: a list of all languages encountered during the evolutionary algorithm.
  • \n
  • explore: a float in [0,1] specifying how much to explore possibly suboptimal languages.\nIf set to 0, parent_languages is just dominating_languages.
  • \n
\n\n
Returns:
\n\n
\n

the languages to serve as the next generation (after possible mutations)

\n
\n", "signature": "(\tdominating_languages: set[ultk.language.language.Language],\texplored_languages: set[ultk.language.language.Language],\texplore: float) -> list[ultk.language.language.Language]:", "funcdef": "def"}, {"fullname": "ultk.effcomm.probability", "modulename": "ultk.effcomm.probability", "kind": "module", "doc": "

\n"}, {"fullname": "ultk.effcomm.probability.PRECISION", "modulename": "ultk.effcomm.probability", "qualname": "PRECISION", "kind": "variable", "doc": "

\n", "default_value": "1e-12"}, {"fullname": "ultk.effcomm.probability.marginal", "modulename": "ultk.effcomm.probability", "qualname": "marginal", "kind": "function", "doc": "

Computer marginals of a joint distribution.

\n\n
Arguments:
\n\n
    \n
  • pXY: a joint distribution of shape (|X|, |Y|), corresponding to p(x, y)
  • \n
  • axis: the axis along which to compute the marginal
  • \n
\n\n
Returns:
\n\n
\n

either pY (axis = 0) or pX (default, axis = 1)

\n
\n", "signature": "(pXY: numpy.ndarray, axis: int = 1) -> numpy.ndarray:", "funcdef": "def"}, {"fullname": "ultk.effcomm.probability.joint", "modulename": "ultk.effcomm.probability", "qualname": "joint", "kind": "function", "doc": "

Compute a joint distribution from a conditional and a prior.

\n\n
Arguments:
\n\n
    \n
  • pY_X: a conditional distribution of shape (|X|, |Y|), corresponding to p(y|x)
  • \n
  • pX: a prior distribution of shape (|X|,), corresponding to p(x)
  • \n
\n\n
Returns:
\n\n
\n

a joint distribution of shape (|X|, |Y|), corresponding to p(x, y)

\n
\n", "signature": "(pY_X: numpy.ndarray, pX: numpy.ndarray) -> numpy.ndarray:", "funcdef": "def"}, {"fullname": "ultk.effcomm.probability.marginalize", "modulename": "ultk.effcomm.probability", "qualname": "marginalize", "kind": "function", "doc": "

Marginalize a conditional distribution (without a detour through the joint).

\n\n
Arguments:
\n\n
    \n
  • pY_X: a conditional distribution of shape (|X|, |Y|), corresponding to p(y|x)
  • \n
  • pX: a prior distribution of shape (|X|,), corresponding to p(x)
  • \n
\n\n
Returns:
\n\n
\n

a marginal distribution of shape (|Y|,), corresponding to p(y)

\n
\n", "signature": "(pY_X: numpy.ndarray, pX: numpy.ndarray) -> numpy.ndarray:", "funcdef": "def"}, {"fullname": "ultk.effcomm.probability.bayes", "modulename": "ultk.effcomm.probability", "qualname": "bayes", "kind": "function", "doc": "

Perform Bayesian inference, computing p(x|y) from p(y|x) and p(x).

\n\n
Arguments:
\n\n
    \n
  • pY_X: a conditional distribution of shape (|X|, |Y|), corresponding to p(y|x)
  • \n
  • pX: a prior distribution of shape (|X|,), corresponding to p(x)
  • \n
\n\n
Returns:
\n\n
\n

a posterior distribution of shape (|Y|, |X|), corresponding to p(x|y)

\n
\n", "signature": "(pY_X: numpy.ndarray, pX: numpy.ndarray) -> numpy.ndarray:", "funcdef": "def"}, {"fullname": "ultk.effcomm.sampling", "modulename": "ultk.effcomm.sampling", "kind": "module", "doc": "

Functions for sampling expressions into languages.

\n"}, {"fullname": "ultk.effcomm.sampling.get_hypothetical_variants", "modulename": "ultk.effcomm.sampling", "qualname": "get_hypothetical_variants", "kind": "function", "doc": "

For each system (parameterized by a language or else a speaker), generate num hypothetical variants by permuting the signals that the system assigns to states.

\n\n
Arguments:
\n\n
    \n
  • languages: a list of languages to permute, by constructing LiteralSpeakers and permuting their weights.
  • \n
  • speakers: a list of speakers of a language, whose weights can be directly permuted. Should be used instead of languages if possible, because it can be more finegrained (every language can be associated with multiple speakers).
  • \n
  • total: the total number of hypothetical variants to obtain. Should be greater than the number of languages.
  • \n
\n\n
Returns:
\n\n
\n

hypothetical_variants: a list of type either Language or np.ndarray depending on whether languages or speakers was passed, representing hypothetical variants of the systems passed. If speakers was passed, a list of speakers is returned.

\n
\n", "signature": "(\tlanguages: list[ultk.language.language.Language] = None,\tspeakers: list[ultk.effcomm.agent.Speaker] = None,\ttotal: int = 0) -> list[typing.Any]:", "funcdef": "def"}, {"fullname": "ultk.effcomm.tradeoff", "modulename": "ultk.effcomm.tradeoff", "kind": "module", "doc": "

Functions for constructing an efficient communication analysis by measuring the simplicity/informativeness trade-off languages and formatting results as a dataframe or a plot.

\n"}, {"fullname": "ultk.effcomm.tradeoff.dominates", "modulename": "ultk.effcomm.tradeoff", "qualname": "dominates", "kind": "function", "doc": "

Determine whether p1 dominates p2,\ni.e. whether for every i p1[i] <= p2[i]\nand for some i p1[i] < p2[i].

\n\n
Arguments:
\n\n
    \n
  • p1: a point
  • \n
  • p2: another point
  • \n
\n\n
Returns:
\n\n
\n

whether or not p1 dominates p2

\n
\n", "signature": "(p1: tuple[float, ...], p2: tuple[float, ...]) -> bool:", "funcdef": "def"}, {"fullname": "ultk.effcomm.tradeoff.non_dominated_2d", "modulename": "ultk.effcomm.tradeoff", "qualname": "non_dominated_2d", "kind": "function", "doc": "

Return the non-dominated (Pareto) front of a list of 2-D points, using Kung's algorithm.

\n\n
Arguments:
\n\n
    \n
  • points: A list of 2-D points
  • \n
\n\n
Returns:
\n\n
\n

a list, the indices of points for which no other point is as good on all dimensions\n and better on at least one

\n
\n", "signature": "(points: Sequence[tuple[float, float]]) -> list[int]:", "funcdef": "def"}, {"fullname": "ultk.effcomm.tradeoff.pareto_optimal_languages", "modulename": "ultk.effcomm.tradeoff", "qualname": "pareto_optimal_languages", "kind": "function", "doc": "

Use non_dominated_2d to compute the Pareto languages.

\n", "signature": "(\tlanguages: list[ultk.language.language.Language],\tobjectives: list[typing.Callable[[ultk.language.language.Language], typing.Any]],\tunique: bool = False) -> list[ultk.language.language.Language]:", "funcdef": "def"}, {"fullname": "ultk.effcomm.tradeoff.pareto_min_distances", "modulename": "ultk.effcomm.tradeoff", "qualname": "pareto_min_distances", "kind": "function", "doc": "

Measure the Pareto optimality of each language by measuring its Euclidean closeness to the frontier. The frontier is a line (list of points) interpolated from the pareto points.

\n\n
Arguments:
\n\n
    \n
  • points: the list of all language (x, y) pairs, where x and y are usually communicative cost and complexity.
  • \n
  • pareto_points: the list of all dominant language (x, y) pairs to constitute the Pareto frontier. The points should have been measured by pygmo's non_dominated_front_2d function.
  • \n
\n\n
Returns:
\n\n
\n

min_distances: an array of shape len(points) Euclidean distances for each language to the closest point on the Pareto frontier.

\n
\n", "signature": "(points: list[tuple], pareto_points: list[tuple]) -> numpy.ndarray:", "funcdef": "def"}, {"fullname": "ultk.effcomm.tradeoff.interpolate_data", "modulename": "ultk.effcomm.tradeoff", "qualname": "interpolate_data", "kind": "function", "doc": "

Interpolate the points yielded by the pareto optimal languages into a continuous (though not necessarily smooth) curve.

\n\n
Arguments:
\n\n
    \n
  • points: an list of (comm_cost, complexity) pairs of size [dominating_languages], a possibly non-smooth set of solutions to the trade-off.
  • \n
  • min_cost: the minimum communicative cost value possible to interpolate from.
  • \n
  • max_cost: the maximum communicative cost value possible to interpolate from. A natural assumption is to let complexity=0.0 if max_cost=1.0, which will result in a Pareto curve that spans the entire 2d space, and consequently the plot with x and y limits both ranging [0.0, 1.0].
  • \n
  • num: the number of x-axis points (cost) to interpolate. Controls smoothness of curve.
  • \n
\n\n
Returns:
\n\n
\n

interpolated_points: an array of size (num, num)

\n
\n", "signature": "(\tpoints: list[tuple[float]],\tmin_cost: float = 0.0,\tmax_cost: float = 1.0,\tnum=5000) -> numpy.ndarray:", "funcdef": "def"}, {"fullname": "ultk.effcomm.tradeoff.tradeoff", "modulename": "ultk.effcomm.tradeoff", "qualname": "tradeoff", "kind": "function", "doc": "

Builds a final efficient communication analysis by measuring a list of languages, updating their internal data, and returning the results.

\n\n

This function measures possibly many graded or categorical properties of each language, but minimally the properties of commmunicative cost and complexity. These two measures fully define the results of an efficiency analysis, in the sense they define the optimal solutions.

\n\n
Arguments:
\n\n
    \n
  • languages: A list representing the pool of all languages to be measured for an efficient communication analysis.
  • \n
  • x: the first pressure to measure, e.g. communicative cost.
  • \n
  • y: the second pressure to measure, e.g. cognitive complexity.
  • \n
  • frontier: a list of (comm_cost, complexity) points representing a Pareto frontier to measure optimality w.r.t.
  • \n
\n\n
Returns:
\n\n
\n

a dictionary of the population and the pareto front, of the form

\n\n
{\n    \"languages\": the list of languages, with their internal efficient communication data updated,\n\n    \"dominating_languages\": the list of the languages dominating the population w.r.t. comm_cost and complexity. If no `frontier` is none, this can be considered the Pareto frontier.\n}\n
\n
\n", "signature": "(\tlanguages: list[ultk.language.language.Language],\tproperties: dict[str, typing.Callable[[ultk.language.language.Language], typing.Any]],\tx: str = 'comm_cost',\ty: str = 'complexity',\tfrontier: list[tuple] = None) -> dict[str, list[ultk.language.language.Language]]:", "funcdef": "def"}, {"fullname": "ultk.language", "modulename": "ultk.language", "kind": "module", "doc": "

Classes for modeling (natural or hypothetical) languagese.

\n\n

At the current stage of development, ULTK focuses on supporting abstractions to model the mapping between expressions and meanings of a language. So far, we leave almost everything besides this basic mapping (morphosyntax, phonology, phonetic inventories, among other features of human languages) to future work.

\n\n

The ultk.language.language submodule contains classes for constructing a language, which can contain one or more expressions.

\n\n

The ultk.language.semantics submodule contains classes for defining a universe (meaning space) of referents (denotations) and meanings (categories).

\n"}, {"fullname": "ultk.language.grammar", "modulename": "ultk.language.grammar", "kind": "module", "doc": "

\n"}, {"fullname": "ultk.language.grammar.Rule", "modulename": "ultk.language.grammar", "qualname": "Rule", "kind": "class", "doc": "

Basic class for a grammar rule. Grammar rules in ULTK correspond\nto functions. One can think of a grammar as generating complex functions from\nmore basic ones.

\n\n
Attributes:
\n\n
    \n
  • lhs: left-hand side of the rule (can be anything)\nconceptually, the output type of a function
  • \n
  • rhs: right-hand side; assumed to be an iterable\nconceptually, a list of types of inputs
  • \n
  • func: a callable, the function to be computed when a node with this rule is executed
  • \n
  • name: name of the function
  • \n
  • weight: a relative weight to assign to this rule\nwhen added to a grammar, all rules with the same LHS will be weighted together
  • \n
\n"}, {"fullname": "ultk.language.grammar.Rule.__init__", "modulename": "ultk.language.grammar", "qualname": "Rule.__init__", "kind": "function", "doc": "

\n", "signature": "(\tname: str,\tlhs: Any,\trhs: Sequence | None,\tfunc: Callable = <function Rule.<lambda>>,\tweight: float = 1.0)"}, {"fullname": "ultk.language.grammar.Rule.name", "modulename": "ultk.language.grammar", "qualname": "Rule.name", "kind": "variable", "doc": "

\n", "annotation": ": str"}, {"fullname": "ultk.language.grammar.Rule.lhs", "modulename": "ultk.language.grammar", "qualname": "Rule.lhs", "kind": "variable", "doc": "

\n", "annotation": ": Any"}, {"fullname": "ultk.language.grammar.Rule.rhs", "modulename": "ultk.language.grammar", "qualname": "Rule.rhs", "kind": "variable", "doc": "

\n", "annotation": ": Sequence | None"}, {"fullname": "ultk.language.grammar.Rule.func", "modulename": "ultk.language.grammar", "qualname": "Rule.func", "kind": "function", "doc": "

\n", "signature": "(*args):", "funcdef": "def"}, {"fullname": "ultk.language.grammar.Rule.weight", "modulename": "ultk.language.grammar", "qualname": "Rule.weight", "kind": "variable", "doc": "

\n", "annotation": ": float", "default_value": "1.0"}, {"fullname": "ultk.language.grammar.Rule.is_terminal", "modulename": "ultk.language.grammar", "qualname": "Rule.is_terminal", "kind": "function", "doc": "

Whether this is a terminal rule. In our framework, this means that RHS is empty,\ni.e. there are no arguments to the function.

\n", "signature": "(self) -> bool:", "funcdef": "def"}, {"fullname": "ultk.language.grammar.Rule.from_callable", "modulename": "ultk.language.grammar", "qualname": "Rule.from_callable", "kind": "function", "doc": "

Create a Rule from the type-annotations of a function.

\n\n

For example, given the following method definition:

\n\n
\n
def _and(p1: bool, p2: bool) -> bool:\n    return p1 and p2\n
\n
\n\n

This class method will return the Rule:

\n\n
Rule(name=\"_and\", lhs=bool, rhs=(bool, bool), func=_and)\n
\n\n

There are two special kwargs that can be used in the function definition:

\n\n
    \n
  • weight: a float, which will be used as the weight of the rule
  • \n
  • name: a string, which will be used as the name of the rule, if you want it to be different than the name of the method
  • \n
\n", "signature": "(cls, func: Callable) -> ultk.language.grammar.Rule:", "funcdef": "def"}, {"fullname": "ultk.language.grammar.GrammaticalExpression", "modulename": "ultk.language.grammar", "qualname": "GrammaticalExpression", "kind": "class", "doc": "

A GrammaticalExpression has been built up from a Grammar by applying a sequence of Rules.\nCrucially, it is _callable_, using the functions corresponding to each rule.

\n\n

A GrammaticalExpression, when called, takes in a Referent. Because of this, a Meaning can\nbe generated by specifying a Universe (which contains Referents).

\n\n
Attributes:
\n\n
    \n
  • rule_name: name of the top-most function
  • \n
  • func: the function
  • \n
  • children: child expressions (possibly empty)
  • \n
\n", "bases": "ultk.language.language.Expression[~T]"}, {"fullname": "ultk.language.grammar.GrammaticalExpression.__init__", "modulename": "ultk.language.grammar", "qualname": "GrammaticalExpression.__init__", "kind": "function", "doc": "

\n", "signature": "(\tform: str = '',\tmeaning: ultk.language.semantics.Meaning[~T] = Meaning(mapping=FrozenDict({}), universe=Universe(referents=(), prior=())),\t*,\trule_name: str,\tfunc: Callable,\tchildren: tuple | None,\tterm_expression: str = '')"}, {"fullname": "ultk.language.grammar.GrammaticalExpression.rule_name", "modulename": "ultk.language.grammar", "qualname": "GrammaticalExpression.rule_name", "kind": "variable", "doc": "

\n", "annotation": ": str"}, {"fullname": "ultk.language.grammar.GrammaticalExpression.func", "modulename": "ultk.language.grammar", "qualname": "GrammaticalExpression.func", "kind": "variable", "doc": "

\n", "annotation": ": Callable"}, {"fullname": "ultk.language.grammar.GrammaticalExpression.children", "modulename": "ultk.language.grammar", "qualname": "GrammaticalExpression.children", "kind": "variable", "doc": "

\n", "annotation": ": tuple | None"}, {"fullname": "ultk.language.grammar.GrammaticalExpression.term_expression", "modulename": "ultk.language.grammar", "qualname": "GrammaticalExpression.term_expression", "kind": "variable", "doc": "

\n", "annotation": ": str", "default_value": "''"}, {"fullname": "ultk.language.grammar.GrammaticalExpression.yield_string", "modulename": "ultk.language.grammar", "qualname": "GrammaticalExpression.yield_string", "kind": "function", "doc": "

Get the 'yield' string of this term, i.e. the concatenation\nof the leaf nodes.

\n\n

This is useful for thinking of a Grammar as generating derivation trees for\nan underlying CFG. This method will then generate the strings generated by\nthe corresponding CFG.

\n", "signature": "(self) -> str:", "funcdef": "def"}, {"fullname": "ultk.language.grammar.GrammaticalExpression.evaluate", "modulename": "ultk.language.grammar", "qualname": "GrammaticalExpression.evaluate", "kind": "function", "doc": "

\n", "signature": "(\tself,\tuniverse: ultk.language.semantics.Universe) -> ultk.language.semantics.Meaning:", "funcdef": "def"}, {"fullname": "ultk.language.grammar.GrammaticalExpression.add_child", "modulename": "ultk.language.grammar", "qualname": "GrammaticalExpression.add_child", "kind": "function", "doc": "

\n", "signature": "(self, child) -> None:", "funcdef": "def"}, {"fullname": "ultk.language.grammar.GrammaticalExpression.to_dict", "modulename": "ultk.language.grammar", "qualname": "GrammaticalExpression.to_dict", "kind": "function", "doc": "

Return a dictionary representation of the expression.

\n", "signature": "(self) -> dict:", "funcdef": "def"}, {"fullname": "ultk.language.grammar.GrammaticalExpression.from_dict", "modulename": "ultk.language.grammar", "qualname": "GrammaticalExpression.from_dict", "kind": "function", "doc": "

\n", "signature": "(\tcls,\tthe_dict: dict,\tgrammar: ultk.language.grammar.Grammar) -> ultk.language.grammar.GrammaticalExpression:", "funcdef": "def"}, {"fullname": "ultk.language.grammar.UniquenessArgs", "modulename": "ultk.language.grammar", "qualname": "UniquenessArgs", "kind": "class", "doc": "

Arguments for specifying uniqueness of GrammaticalExpressions in a Grammar.

\n\n
Attributes:
\n\n
    \n
  • unique_expressions: a dictionary in which to store unique Expressions
  • \n
  • key: a function used to evaluate uniqueness
  • \n
  • compare_func: a comparison function, used to decide which Expression to add to the dict\nnew Expressions will be added as values to unique_dict only if they are minimal\namong those sharing the same key (by unique_key) according to this func
  • \n
\n", "bases": "typing.TypedDict"}, {"fullname": "ultk.language.grammar.UniquenessArgs.unique_expressions", "modulename": "ultk.language.grammar", "qualname": "UniquenessArgs.unique_expressions", "kind": "variable", "doc": "

\n", "annotation": ": dict[typing.Any, dict[typing.Any, ultk.language.grammar.GrammaticalExpression]]"}, {"fullname": "ultk.language.grammar.UniquenessArgs.key", "modulename": "ultk.language.grammar", "qualname": "UniquenessArgs.key", "kind": "variable", "doc": "

\n", "annotation": ": Callable[[ultk.language.grammar.GrammaticalExpression], Any]"}, {"fullname": "ultk.language.grammar.UniquenessArgs.compare_func", "modulename": "ultk.language.grammar", "qualname": "UniquenessArgs.compare_func", "kind": "variable", "doc": "

\n", "annotation": ": Callable[[ultk.language.grammar.GrammaticalExpression, ultk.language.grammar.GrammaticalExpression], bool]"}, {"fullname": "ultk.language.grammar.Grammar", "modulename": "ultk.language.grammar", "qualname": "Grammar", "kind": "class", "doc": "

At its core, a Grammar is a set of Rules with methods for generating GrammaticalExpressions.

\n"}, {"fullname": "ultk.language.grammar.Grammar.__init__", "modulename": "ultk.language.grammar", "qualname": "Grammar.__init__", "kind": "function", "doc": "

\n", "signature": "(start: Any)"}, {"fullname": "ultk.language.grammar.Grammar.add_rule", "modulename": "ultk.language.grammar", "qualname": "Grammar.add_rule", "kind": "function", "doc": "

\n", "signature": "(self, rule: ultk.language.grammar.Rule):", "funcdef": "def"}, {"fullname": "ultk.language.grammar.Grammar.parse", "modulename": "ultk.language.grammar", "qualname": "Grammar.parse", "kind": "function", "doc": "

Parse a string representation of an expression of a grammar.\nNote that this is not a general-purpose parsing algorithm. We assume that the strings are of the form\n parent_name(child1_name, ..., childn_name)\nwhere parent_name is the name of a rule of this grammar that has a length-n RHS, and that\nchildi_name is the name of a rule for each child i.

\n\n
Arguments:
\n\n
    \n
  • expression: string in the above format
  • \n
\n\n
Returns:
\n\n
\n

the corresponding GrammaticalExpression

\n
\n", "signature": "(\tself,\texpression: str,\topener: str = '(',\tcloser: str = ')',\tdelimiter: str = ',') -> ultk.language.grammar.GrammaticalExpression:", "funcdef": "def"}, {"fullname": "ultk.language.grammar.Grammar.generate", "modulename": "ultk.language.grammar", "qualname": "Grammar.generate", "kind": "function", "doc": "

Generate an expression from a given lhs.

\n", "signature": "(self, lhs: Any = None) -> ultk.language.grammar.GrammaticalExpression:", "funcdef": "def"}, {"fullname": "ultk.language.grammar.Grammar.enumerate", "modulename": "ultk.language.grammar", "qualname": "Grammar.enumerate", "kind": "function", "doc": "

Enumerate all expressions from the grammar up to a given depth from a given LHS.\nThis method also can update a specified dictionary to store only _unique_ expressions, with\na user-specified criterion of uniqueness.

\n\n
Arguments:
\n\n
    \n
  • depth: how deep the trees should be
  • \n
  • lhs: left hand side to start from; defaults to the grammar's start symbol
  • \n
  • uniqueness_args: a dictionary specifying the parameters for uniqueness:\nunique_dict: a dictionary in which to store unique Expressions\nkey: a function used to evaluate uniqueness\ncompare_func: a comparison function, used to decide which Expression to add to the dict\n new Expressions will be added as values to unique_dict only if they are _minimal_\n among those sharing the same key (by unique_key) according to this func
  • \n
\n\n
Yields:
\n\n
\n

all GrammaticalExpressions up to depth

\n
\n", "signature": "(\tself,\tdepth: int = 8,\tlhs: Any = None,\tuniqueness_args: ultk.language.grammar.UniquenessArgs | None = None) -> Generator[ultk.language.grammar.GrammaticalExpression, NoneType, NoneType]:", "funcdef": "def"}, {"fullname": "ultk.language.grammar.Grammar.enumerate_at_depth", "modulename": "ultk.language.grammar", "qualname": "Grammar.enumerate_at_depth", "kind": "function", "doc": "

Enumerate GrammaticalExpressions for this Grammar _at_ a fixed depth.

\n", "signature": "(\tself,\tdepth: int,\tlhs: Any,\tuniqueness_args: ultk.language.grammar.UniquenessArgs | None = None,\tcache: dict | None = None) -> Generator[ultk.language.grammar.GrammaticalExpression, NoneType, NoneType]:", "funcdef": "def"}, {"fullname": "ultk.language.grammar.Grammar.get_unique_expressions", "modulename": "ultk.language.grammar", "qualname": "Grammar.get_unique_expressions", "kind": "function", "doc": "

Get all unique GrammaticalExpressions, up to a certain depth, with a user-specified criterion\nof uniqueness, and a specified comparison function for determining which Expression to save when there's a clash.\nThis can be used, for instance, to measure the minimum description length of some\nMeanings, by using expression.evaluate(), which produces a Meaning for an Expression, as the\nkey for determining uniqueness, and length of the expression as comparison.

\n\n

This is a wrapper around enumerate, but which produces the dictionary of key->Expression entries\nand returns it. (enumerate is a generator with side effects).

\n\n

For Args, see the docstring for enumerate.

\n\n

Note: if you additionally want to store _all_ expressions, and not just the unique ones, you should\ndirectly use enumerate.

\n\n
Returns:
\n\n
\n

dictionary of {key: GrammaticalExpression}, where the keys are generated by unique_key\n The GrammticalExpression which is the value will be the one that is minimum among\n compare_func amongst all Expressions up to depth which share the same key

\n
\n", "signature": "(\tself,\tdepth: int,\tunique_key: Callable[[ultk.language.grammar.GrammaticalExpression], Any],\tcompare_func: Callable[[ultk.language.grammar.GrammaticalExpression, ultk.language.grammar.GrammaticalExpression], bool],\tlhs: Any = None,\tmax_size: float = inf) -> dict[typing.Any, ultk.language.grammar.GrammaticalExpression]:", "funcdef": "def"}, {"fullname": "ultk.language.grammar.Grammar.get_all_rules", "modulename": "ultk.language.grammar", "qualname": "Grammar.get_all_rules", "kind": "function", "doc": "

Get all rules as a list.

\n", "signature": "(self) -> list[ultk.language.grammar.Rule]:", "funcdef": "def"}, {"fullname": "ultk.language.grammar.Grammar.from_yaml", "modulename": "ultk.language.grammar", "qualname": "Grammar.from_yaml", "kind": "function", "doc": "

Read a grammar specified in a simple YAML format.

\n\n

Expected format:

\n\n
start: bool\nrules:\n- lhs: bool\n  rhs:\n  - bool\n  - bool\n  name: \"and\"\n  func: \"lambda p1, p2 : p1 and p2\"\n- lhs: bool\n  rhs:\n  - bool\n  - bool\n  name: \"or\"\n  func: \"lambda p1, p2 : p1 or p2\"\n
\n\n

Note that for each fule, the value for func will be passed to\neval, so be careful!

\n\n
Arguments:
\n\n
    \n
  • filename: file containing a grammar in the above format
  • \n
\n", "signature": "(cls, filename: str):", "funcdef": "def"}, {"fullname": "ultk.language.grammar.Grammar.from_module", "modulename": "ultk.language.grammar", "qualname": "Grammar.from_module", "kind": "function", "doc": "

Read a grammar from a module.

\n\n

The module should have a list of type-annotated method definitions, each of which will correspond to one Rule in the new Grammar.\nSee the docstring for Rule.from_callable for more information on how that step works.

\n\n

The start symbol of the grammar can either be specified by start = XXX somewhere in the module,\nor will default to the LHS of the first rule in the module (aka the return type annotation of the first method definition).

\n\n
Arguments:
\n\n
    \n
  • module_name: name of the module
  • \n
\n", "signature": "(cls, module_name: str) -> ultk.language.grammar.Grammar:", "funcdef": "def"}, {"fullname": "ultk.language.language", "modulename": "ultk.language.language", "kind": "module", "doc": "

Classes for modeling languages as form-meaning mappings, most important among them the Language and Expression classes.

\n\n
Example usage:
\n\n
\n
\n
>>> from ultk.language.language import Expression, Language\n>>> # assuming the meaning `a_few_meaning` has already been constructed\n>>> # define the expression\n>>> a_few = NumeralExpression(form="a few", meaning=a_few_meaning)\n>>> # define a very small language\n>>> lang_1 = Language([a_few])\n>>> # or a slightly larger one with synonymy\n>>> lang_2 = Language([a_few] * 3)\n
\n
\n
\n"}, {"fullname": "ultk.language.language.Expression", "modulename": "ultk.language.language", "qualname": "Expression", "kind": "class", "doc": "

Minimally contains a form and a meaning.

\n", "bases": "typing.Generic[~T]"}, {"fullname": "ultk.language.language.Expression.__init__", "modulename": "ultk.language.language", "qualname": "Expression.__init__", "kind": "function", "doc": "

\n", "signature": "(\tform: str = '',\tmeaning: ultk.language.semantics.Meaning[~T] = Meaning(mapping=FrozenDict({}), universe=Universe(referents=(), prior=())))"}, {"fullname": "ultk.language.language.Expression.form", "modulename": "ultk.language.language", "qualname": "Expression.form", "kind": "variable", "doc": "

\n", "annotation": ": str", "default_value": "''"}, {"fullname": "ultk.language.language.Expression.meaning", "modulename": "ultk.language.language", "qualname": "Expression.meaning", "kind": "variable", "doc": "

\n", "annotation": ": ultk.language.semantics.Meaning[~T]", "default_value": "Meaning(mapping=FrozenDict({}), universe=Universe(referents=(), prior=()))"}, {"fullname": "ultk.language.language.Expression.can_express", "modulename": "ultk.language.language", "qualname": "Expression.can_express", "kind": "function", "doc": "

Return True if the expression can express the input single meaning point and false otherwise.

\n", "signature": "(self, referent: ultk.language.semantics.Referent) -> bool:", "funcdef": "def"}, {"fullname": "ultk.language.language.Expression.to_dict", "modulename": "ultk.language.language", "qualname": "Expression.to_dict", "kind": "function", "doc": "

Return a dictionary representation of the expression.

\n", "signature": "(self) -> dict:", "funcdef": "def"}, {"fullname": "ultk.language.language.Language", "modulename": "ultk.language.language", "qualname": "Language", "kind": "class", "doc": "

Minimally contains Expression objects.

\n"}, {"fullname": "ultk.language.language.Language.__init__", "modulename": "ultk.language.language", "qualname": "Language.__init__", "kind": "function", "doc": "

\n", "signature": "(expressions: tuple[ultk.language.language.Expression, ...], **kwargs)"}, {"fullname": "ultk.language.language.Language.universe", "modulename": "ultk.language.language", "qualname": "Language.universe", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.language.language.Language.expressions", "modulename": "ultk.language.language", "qualname": "Language.expressions", "kind": "variable", "doc": "

\n", "annotation": ": frozenset[ultk.language.language.Expression]"}, {"fullname": "ultk.language.language.Language.add_expression", "modulename": "ultk.language.language", "qualname": "Language.add_expression", "kind": "function", "doc": "

Add an expression to the list of expressions in a language.

\n", "signature": "(self, e: ultk.language.language.Expression):", "funcdef": "def"}, {"fullname": "ultk.language.language.Language.is_natural", "modulename": "ultk.language.language", "qualname": "Language.is_natural", "kind": "function", "doc": "

Whether a language represents a human natural language.

\n", "signature": "(self) -> bool:", "funcdef": "def"}, {"fullname": "ultk.language.language.Language.degree_property", "modulename": "ultk.language.language", "qualname": "Language.degree_property", "kind": "function", "doc": "

Count what percentage of expressions in a language have a given property.

\n", "signature": "(\tself,\tproperty: Callable[[ultk.language.language.Expression], bool]) -> float:", "funcdef": "def"}, {"fullname": "ultk.language.language.Language.binary_matrix", "modulename": "ultk.language.language", "qualname": "Language.binary_matrix", "kind": "function", "doc": "

Get a binary matrix of shape (num_meanings, num_expressions)\nspecifying which expressions can express which meanings.

\n", "signature": "(self) -> numpy.ndarray:", "funcdef": "def"}, {"fullname": "ultk.language.language.Language.as_dict_with_properties", "modulename": "ultk.language.language", "qualname": "Language.as_dict_with_properties", "kind": "function", "doc": "

Return a dictionary representation of the language, including additional properties as keyword arguments.

\n\n

This is used in some examples to serialize the language to outputs.

\n", "signature": "(self, **kwargs) -> dict:", "funcdef": "def"}, {"fullname": "ultk.language.language.aggregate_expression_complexity", "modulename": "ultk.language.language", "qualname": "aggregate_expression_complexity", "kind": "function", "doc": "

Aggregate complexities for individual Expressions into a complexity for a Language.

\n\n
Arguments:
\n\n
    \n
  • language: the Language to measure
  • \n
  • expression_complexity_func: the function that returns the complexity of an individual expression
  • \n
  • aggregator: (optional, default = sum) the function that aggregates individual complexities
  • \n
\n\n
Returns:
\n\n
\n

a float, the complexity of a language

\n
\n", "signature": "(\tlanguage: ultk.language.language.Language,\texpression_complexity_func: Callable[[ultk.language.language.Expression], float],\taggregator: Callable[[Iterable[float]], float] = <built-in function sum>) -> float:", "funcdef": "def"}, {"fullname": "ultk.language.sampling", "modulename": "ultk.language.sampling", "kind": "module", "doc": "

\n"}, {"fullname": "ultk.language.sampling.powerset", "modulename": "ultk.language.sampling", "qualname": "powerset", "kind": "function", "doc": "

Enumerate all _non-empty_ subsets of an iterable up to a given maximum size, e.g.:\npowerset([1,2,3]) --> (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)

\n\n

lightly adapted from itertools Recipes at\nhttps://docs.python.org/3/library/itertools.html#itertools-recipes

\n\n
Arguments:
\n\n
    \n
  • iterable: elements from which to form subsets
  • \n
  • max_size: largest subsets (inclusive) to return
  • \n
\n\n
Returns:
\n\n
\n

iterator over all subsets from size 1 to max_size of elements from iterable

\n
\n", "signature": "(iterable: Iterable, max_size: int | None = None) -> Iterable:", "funcdef": "def"}, {"fullname": "ultk.language.sampling.all_meanings", "modulename": "ultk.language.sampling", "qualname": "all_meanings", "kind": "function", "doc": "

Generate all Meanings (sets of Referents) from a given Universe.

\n", "signature": "(\tuniverse: ultk.language.semantics.Universe) -> Generator[ultk.language.semantics.Meaning, NoneType, NoneType]:", "funcdef": "def"}, {"fullname": "ultk.language.sampling.all_expressions", "modulename": "ultk.language.sampling", "qualname": "all_expressions", "kind": "function", "doc": "

Generate Expressions from an iterable of Meanings.

\n", "signature": "(\tmeanings: Iterable[ultk.language.semantics.Meaning]) -> Generator[ultk.language.language.Expression, NoneType, NoneType]:", "funcdef": "def"}, {"fullname": "ultk.language.sampling.all_languages", "modulename": "ultk.language.sampling", "qualname": "all_languages", "kind": "function", "doc": "

Generate all Languages (sets of Expressions) from a given set of Expressions.

\n\n
Arguments:
\n\n
    \n
  • expressions: iterable of all possible expressions
  • \n
  • language_class: the type of language to generate
  • \n
  • max_size: largest size for a language; if None, all subsets of expressions will be used
  • \n
\n\n
Yields:
\n\n
\n

Languages with subsets of Expressions from expressions

\n
\n", "signature": "(\texpressions: Iterable[ultk.language.language.Expression],\tlanguage_class: Type[ultk.language.language.Language] = <class 'ultk.language.language.Language'>,\tmax_size: int | None = None) -> Generator[ultk.language.language.Language, NoneType, NoneType]:", "funcdef": "def"}, {"fullname": "ultk.language.sampling.upto_comb", "modulename": "ultk.language.sampling", "qualname": "upto_comb", "kind": "function", "doc": "

Return the number of ways of choosing _up to max_k_ items from\nn items without repetition. Just an iterator of math.comb for n from\n1 to max_k.

\n", "signature": "(num: int, max_k: int) -> int:", "funcdef": "def"}, {"fullname": "ultk.language.sampling.random_languages", "modulename": "ultk.language.sampling", "qualname": "random_languages", "kind": "function", "doc": "

Generate unique Languages by randomly sampling subsets of Expressions, either in a uniform or stratified way.\nIf there are fewer than sample_size possible Languages up to size max_size,\nthis method will just return all languages up to that size (and so the sample may\nbe smaller than sample_size).

\n\n

Some use cases:

\n\n

With sample_size=None, get all languages.

\n\n
\n
>>> random_languages(expressions)\n
\n
\n\n

With sample_size and uniform sampling, get random languages:

\n\n
\n
>>> random_languages(expressions, sample_size=1000)\n
\n
\n\n

Stratified sampling, with and without a max_size:

\n\n
\n
>>> random_languages(expressions, sample_size=1000, sampling_strategy="stratified")\n>>> random_languages(expressions, sample_size=1000, sampling_strategy="stratified", max_size=10)\n
\n
\n\n
Arguments:
\n\n
    \n
  • expressions: all possible expressions
  • \n
  • sampling_strategy: how to sample subsets of expressions\nuniform: for every expression, choose whether or not to include it in a given language\nstratified: first sample a size for a Language, then choose that many random Expressions\n (i) this has the effect of \"upsampling\" from smaller Language sizes\n (ii) this can be used with max_size to only generate Languages up to a given number of expressions
  • \n
  • sample_size: how many languages to return\nif None, will return all languages up to max_size
  • \n
  • language_class: type of Language
  • \n
  • max_size: largest possible Language to generate\nif None, will be the length of expressions\nNB: this argument has no effect when sampling_strategy is \"uniform\"
  • \n
\n\n
Returns:
\n\n
\n

a list of randomly sampled Languages

\n
\n", "signature": "(\texpressions: Iterable[ultk.language.language.Expression],\tsampling_strategy: str = 'uniform',\tsample_size: int | None = None,\tlanguage_class: Type[ultk.language.language.Language] = <class 'ultk.language.language.Language'>,\tmax_size: int | None = None) -> list[ultk.language.language.Language]:", "funcdef": "def"}, {"fullname": "ultk.language.sampling.generate_languages", "modulename": "ultk.language.sampling", "qualname": "generate_languages", "kind": "function", "doc": "

Generate languages by randomly sampling vocabularies as bags of expressions.

\n\n

A predicate (binary-valued property) of expressions may be supplied, which can be used to adjust the composition of vocabularies (e.g., by the percent of expressions satisfying the predicate).

\n\n

If sample size <= nCr, then take a random sample_size set of combinations. Otherwise, to prevent repeat languages, treat nCr as the sample size.

\n\n
Arguments:
\n\n
    \n
  • expressions: a list of the possible expressions to sample from.
  • \n
  • lang_size: the maximum (or exact) number of expressions in each language.
  • \n
  • sample_size: the number of languages to generate.
  • \n
  • criterion: the predicate, (e.g. semantic universal) by which to split the expressions into those satisfying and those not, and then sample languages with degrees of naturalness based on the percentage from those satisfying. Must apply at the expression level. By default is a trivial criterion, so that all expressions are 'quasi-natural'.
  • \n
  • fixed_wordcount: whether to vary the language size from 1 to lang_size.
  • \n
  • verbose: How detailed the progress of sampling should be, printed to stdout.
  • \n
  • dummy_name: the default name to give to each sampled language, e.g. sampled_lang_42. These should not collide with any actual natural language names if the efficient communication experiment does use natural language data.
  • \n
  • id_start: an integer representing the number of languages already generated in an experiment. Languages sampled will be named according to this number. For example, if id_start is 0, the first language sampled will be named sampled_lang_0. Note that the largest id does not necessarily track the actual size of languages saved for the experiment, but it does track how many languages have been generated.
  • \n
  • exact_sample: a boolean representing whether to sample until the exact sample size is filled. If True, the resulting pool of languages may not be unique.
  • \n
  • verbose: a boolean representing how verbose output should be during sampling.
  • \n
\n\n
Returns:
\n\n
\n

a dict representing the generated pool of languages and the updated id_start, of the form

\n\n
{\n    \"languages\": (list of updated languages)\n    \"id_start\": (updated length of languages)\n}\n
\n
\n\n
Examples:
\n\n
\n
\n
>>> # Turn the knob on a universal property for modals\n>>> expressions = load_expressions(expressions_file)\n>>> universal_property = iff\n>>> result = generate_languages(\n...    ModalLanguage,\n...    expressions,\n...    lang_size,\n...    sample_size,\n...    universal_property,\n...)\n>>> languages = result["languages"]\n>>> id_start = result["id_start"]\n
\n
\n
\n", "signature": "(\tlanguage_class: Type[ultk.language.language.Language],\texpressions: list[ultk.language.language.Expression],\tlang_size: int,\tsample_size: int,\tcriterion: Callable[[ultk.language.language.Expression], bool] = <function <lambda>>,\tfixed_wordcount=False,\tdummy_name='sampled_lang_',\tid_start: int = 0,\texact_sample=False,\tverbose=False) -> dict[str, typing.Any]:", "funcdef": "def"}, {"fullname": "ultk.language.sampling.sample_lang_size", "modulename": "ultk.language.sampling", "qualname": "sample_lang_size", "kind": "function", "doc": "

Get a sample of languages each of exactly lang_size.

\n\n
Arguments:
\n\n
    \n
  • language_class: a subclass of ultk.Language
  • \n
  • expressions: a list of Expressions to sample from
  • \n
  • lang_size: int representing the maximum language size to sample
  • \n
  • sample_size: int representing the number of total languages to return
  • \n
  • id_start: an int representing the number of languages already generated in an experiment.
  • \n
\n\n
Returns:
\n\n
\n

a dict containing the randomly sampled languages and the updated id_start, of the form

\n\n
{\n    \"languages\": (list of updated languages)\n    \"id_start\": (updated length of languages)\n}\n
\n
\n", "signature": "(\tlanguage_class: Type[ultk.language.language.Language],\texpressions: list[ultk.language.language.Expression],\tlang_size: int,\tsample_size: int,\tid_start: int = 0,\tverbose=False,\tdummy_name='sampled_lang_id') -> dict[str, typing.Any]:", "funcdef": "def"}, {"fullname": "ultk.language.sampling.sample_quasi_natural", "modulename": "ultk.language.sampling", "qualname": "sample_quasi_natural", "kind": "function", "doc": "

Turn the knob on degree quasi-naturalness for a sample of languages, either by enumerating or randomly sampling unique subsets of all possible combinations.

\n\n
Arguments:
\n\n
    \n
  • natural_terms: expressions satisfying some criteria of quasi-naturalness, e.g, a semantic universal.
  • \n
  • unnatural_terms: expressions not satisfying the criteria.
  • \n
  • lang_size: the exact number of expressions a language must have.
  • \n
  • sample_size: how many languages to sample.
  • \n
\n\n
Returns:
\n\n
\n

a dict containing the randomly sampled quasi-natural languages and the updated id_start, of the form

\n\n
{\n    \"languages\": (list of updated languages)\n    \"id_start\": (updated length of languages)\n}\n
\n
\n", "signature": "(\tlanguage_class: Type[ultk.language.language.Language],\tnatural_terms: list[ultk.language.language.Expression],\tunnatural_terms: list[ultk.language.language.Expression],\tlang_size: int,\tsample_size: int,\tid_start: int,\tdummy_name='sampled_lang_id',\tverbose=False) -> dict[str, typing.Any]:", "funcdef": "def"}, {"fullname": "ultk.language.sampling.rename_id", "modulename": "ultk.language.sampling", "qualname": "rename_id", "kind": "function", "doc": "

Updates a string of form sampled_lang_X with a new id for X.

\n", "signature": "(name: str, id: int) -> str:", "funcdef": "def"}, {"fullname": "ultk.language.sampling.enumerate_all_languages", "modulename": "ultk.language.sampling", "qualname": "enumerate_all_languages", "kind": "function", "doc": "

When the sample size requested is greater than the size of all possible languages, just enumerate all the possible languages.

\n\n
Arguments:
\n\n
    \n
  • language_class: the kind of Language to construct
  • \n
  • id_start: a number to start counting from for assigning names with numerical ids to languages.
  • \n
  • natural_indices: the indices of quasi-natural languages already seen
  • \n
  • num_natural: the number of quasi-natural languages to sample
  • \n
  • natural_terms: the list of quasi-natural terms to sample from
  • \n
  • unnatural_indices: the indices of non-quasi-natural languages already seen
  • \n
  • num_unnatural: the number of non-quasi-natural languages to sample; 0 by default
  • \n
  • unnatural_terms: the list of non-quasi-natural terms to sample from; empty by default.
  • \n
  • dummy_name: the format of the string to name each language constructed.
  • \n
\n\n
Returns:
\n\n
\n

a dict containing a set of languages and the updated id_start, of the form

\n\n
{\n    \"languages\": (list of updated languages)\n    \"id_start\": (updated length of languages)\n}\n
\n
\n", "signature": "(\tlanguage_class: Type[ultk.language.language.Language],\tid_start: int,\tnatural_terms: list[ultk.language.language.Expression],\tnatural_indices: list[int],\tnum_natural: int = 0,\tunnatural_terms: list[ultk.language.language.Expression] = [],\tunnatural_indices: list[int] = [],\tnum_unnatural: int = 0,\tdummy_name='sampled_lang_id',\tverbose=False) -> dict[str, typing.Any]:", "funcdef": "def"}, {"fullname": "ultk.language.sampling.random_combination_vocabulary", "modulename": "ultk.language.sampling", "qualname": "random_combination_vocabulary", "kind": "function", "doc": "

Get a single vocabulary for a specific language size by choosing a random combination of natural and unnatural terms.

\n\n
Arguments:
\n\n
    \n
  • seen: the list of language indices already seen
  • \n
  • num_natural: int
  • \n
  • natural_terms: list[Expression]
  • \n
  • num_unnatural: int=0
  • \n
  • unnatural_terms: list[Expression]=[]
  • \n
\n\n
Returns:
\n\n
\n

languages: the extended list of input languages.

\n
\n", "signature": "(\tseen: set,\tnum_natural: int,\tnatural_terms: list[ultk.language.language.Expression],\tnum_unnatural: int = 0,\tunnatural_terms: list[ultk.language.language.Expression] = []) -> list[ultk.language.language.Expression]:", "funcdef": "def"}, {"fullname": "ultk.language.semantics", "modulename": "ultk.language.semantics", "kind": "module", "doc": "

Classes for modeling the meanings of a language.

\n\n

Meanings are modeled as things which map linguistic forms to objects of reference. The linguistic forms and objects of reference can in principle be very detailed, and future work may elaborate the meaning classes and implement a Form class.

\n\n

In efficient communication analyses, simplicity and informativeness can be measured as properties of semantic aspects of a language. E.g., a meaning is simple if it is easy to represent, or to compress into some code; a meaning is informative if it is easy for a listener to recover a speaker's intended literal meaning.

\n\n
Examples:
\n\n
\n
\n
>>> from ultk.language.semantics import Referent, Meaning, Universe\n>>> from ultk.language.language import Expression\n>>> # construct the meaning space for numerals\n>>> numerals_universe = NumeralUniverse(referents=[NumeralReferent(str(i)) for i in range(1, 100)])\n>>> # construct a list of referents for the expression 'a few'\n>>> a_few_refs = [NumeralReferent(name=str(i)) for i in range(2, 6)]\n>>> a_few_meaning = NumeralMeaning(referents=a_few_refs, universe=numerals_universe)\n>>> # define the expression\n>>> a_few = NumeralExpression(form="a few", meaning=a_few_meaning)\n
\n
\n
\n"}, {"fullname": "ultk.language.semantics.Referent", "modulename": "ultk.language.semantics", "qualname": "Referent", "kind": "class", "doc": "

A referent is some object in the universe for a language.

\n\n

Conceptually, a Referent can be any kind of object. This functions like a generic python object that is _immutable_ after initialization.\nAt initialization, properties can be specified either by passing a dictionary or by keyword arguments.

\n"}, {"fullname": "ultk.language.semantics.Referent.__init__", "modulename": "ultk.language.semantics", "qualname": "Referent.__init__", "kind": "function", "doc": "

Initialize a referent.

\n\n
Arguments:
\n\n
    \n
  • name: a string representing the name of the referent
  • \n
\n", "signature": "(name: str, properties: dict[str, typing.Any] = {}, **kwargs)"}, {"fullname": "ultk.language.semantics.Referent.name", "modulename": "ultk.language.semantics", "qualname": "Referent.name", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.language.semantics.Universe", "modulename": "ultk.language.semantics", "qualname": "Universe", "kind": "class", "doc": "

The universe is the collection of possible referent objects for a meaning.

\n"}, {"fullname": "ultk.language.semantics.Universe.__init__", "modulename": "ultk.language.semantics", "qualname": "Universe.__init__", "kind": "function", "doc": "

\n", "signature": "(\treferents: tuple[ultk.language.semantics.Referent, ...],\tprior: tuple[float, ...])"}, {"fullname": "ultk.language.semantics.Universe.referents", "modulename": "ultk.language.semantics", "qualname": "Universe.referents", "kind": "variable", "doc": "

\n", "annotation": ": tuple[ultk.language.semantics.Referent, ...]"}, {"fullname": "ultk.language.semantics.Universe.prior", "modulename": "ultk.language.semantics", "qualname": "Universe.prior", "kind": "variable", "doc": "

\n", "annotation": ": tuple[float, ...]"}, {"fullname": "ultk.language.semantics.Universe.size", "modulename": "ultk.language.semantics", "qualname": "Universe.size", "kind": "variable", "doc": "

\n"}, {"fullname": "ultk.language.semantics.Universe.prior_numpy", "modulename": "ultk.language.semantics", "qualname": "Universe.prior_numpy", "kind": "variable", "doc": "

\n", "annotation": ": numpy.ndarray"}, {"fullname": "ultk.language.semantics.Universe.from_dataframe", "modulename": "ultk.language.semantics", "qualname": "Universe.from_dataframe", "kind": "function", "doc": "

Build a Universe from a DataFrame.\nIt's assumed that each row specifies one Referent, and each column will be a property\nof that Referent. We assume that name is one of the columns of the DataFrame.

\n\n
Arguments:
\n\n
    \n
  • a DataFrame representing the meaning space of interest, assumed to have a column name
  • \n
\n", "signature": "(cls, df: pandas.core.frame.DataFrame):", "funcdef": "def"}, {"fullname": "ultk.language.semantics.Universe.from_csv", "modulename": "ultk.language.semantics", "qualname": "Universe.from_csv", "kind": "function", "doc": "

Build a Universe from a CSV file. This is a small wrapper around\nUniverse.from_dataframe, so see that documentation for more information.

\n", "signature": "(cls, filename: str):", "funcdef": "def"}, {"fullname": "ultk.language.semantics.Meaning", "modulename": "ultk.language.semantics", "qualname": "Meaning", "kind": "class", "doc": "

A meaning maps Referents to any type of object.

\n\n

For instance, sentence meanings are often modeled as sets of points (e.g. possible worlds).\nThese correspond to mappings from points (i.e. Referents) to truth values, corresponding to the characteristic function of a set.\nBut, in general, meanings can have a different output type for, e.g. sub-sentential meanings..

\n\n
Properties:
\n\n
\n

mapping: a FrozenDict with Referent keys, but arbitrary type T as values.

\n \n

universe: a Universe object. The Referents in the keys of mapping are expected to be exactly those in universe.

\n \n

_dist: a mapping representing a probability distribution over referents to associate with the meaning. By default, will be assumed to be uniform over the \"true-like\" Referents in mapping (see .dist).

\n
\n", "bases": "typing.Generic[~T]"}, {"fullname": "ultk.language.semantics.Meaning.__init__", "modulename": "ultk.language.semantics", "qualname": "Meaning.__init__", "kind": "function", "doc": "

\n", "signature": "(\tmapping: ultk.util.frozendict.FrozenDict[ultk.language.semantics.Referent, ~T],\tuniverse: ultk.language.semantics.Universe)"}, {"fullname": "ultk.language.semantics.Meaning.mapping", "modulename": "ultk.language.semantics", "qualname": "Meaning.mapping", "kind": "variable", "doc": "

\n", "annotation": ": ultk.util.frozendict.FrozenDict[ultk.language.semantics.Referent, ~T]"}, {"fullname": "ultk.language.semantics.Meaning.universe", "modulename": "ultk.language.semantics", "qualname": "Meaning.universe", "kind": "variable", "doc": "

\n", "annotation": ": ultk.language.semantics.Universe"}, {"fullname": "ultk.language.semantics.Meaning.dist", "modulename": "ultk.language.semantics", "qualname": "Meaning.dist", "kind": "variable", "doc": "

\n", "annotation": ": ultk.util.frozendict.FrozenDict[ultk.language.semantics.Referent, float]"}, {"fullname": "ultk.language.semantics.Meaning.is_uniformly_false", "modulename": "ultk.language.semantics", "qualname": "Meaning.is_uniformly_false", "kind": "function", "doc": "

Return True if all referents in the meaning are mapped to False (or coercible to False).In the case where the meaning type is boolean, this corresponds to the characteristic function of the empty set.

\n", "signature": "(self) -> bool:", "funcdef": "def"}, {"fullname": "ultk.util", "modulename": "ultk.util", "kind": "module", "doc": "

Various utility classes and helper functions for the ULTK package.

\n\n

Submodules:

\n\n
    \n
  • frozendict: An immutable dictionary, so that various mappings (e.g. Meanings) can be hashed, serialized, etc.
  • \n
  • io: some basic input/output functions.
  • \n
\n"}, {"fullname": "ultk.util.frozendict", "modulename": "ultk.util.frozendict", "kind": "module", "doc": "

\n"}, {"fullname": "ultk.util.frozendict.FrozenDict", "modulename": "ultk.util.frozendict", "qualname": "FrozenDict", "kind": "class", "doc": "

\n", "bases": "dict[~K, ~V], typing.Generic[~K, ~V], yaml.YAMLObject"}, {"fullname": "ultk.util.frozendict.FrozenDict.clear", "modulename": "ultk.util.frozendict", "qualname": "FrozenDict.clear", "kind": "function", "doc": "

D.clear() -> None. Remove all items from D.

\n", "signature": "(self):", "funcdef": "def"}, {"fullname": "ultk.util.frozendict.FrozenDict.pop", "modulename": "ultk.util.frozendict", "qualname": "FrozenDict.pop", "kind": "function", "doc": "

D.pop(k[,d]) -> v, remove specified key and return the corresponding value.

\n\n

If the key is not found, return the default if given; otherwise,\nraise a KeyError.

\n", "signature": "(self, key, default=None):", "funcdef": "def"}, {"fullname": "ultk.util.frozendict.FrozenDict.popitem", "modulename": "ultk.util.frozendict", "qualname": "FrozenDict.popitem", "kind": "function", "doc": "

Remove and return a (key, value) pair as a 2-tuple.

\n\n

Pairs are returned in LIFO (last-in, first-out) order.\nRaises KeyError if the dict is empty.

\n", "signature": "(self):", "funcdef": "def"}, {"fullname": "ultk.util.frozendict.FrozenDict.setdefault", "modulename": "ultk.util.frozendict", "qualname": "FrozenDict.setdefault", "kind": "function", "doc": "

Insert key with a value of default if key is not in the dictionary.

\n\n

Return the value for key if key is in the dictionary, else default.

\n", "signature": "(self, key, default=None):", "funcdef": "def"}, {"fullname": "ultk.util.frozendict.FrozenDict.update", "modulename": "ultk.util.frozendict", "qualname": "FrozenDict.update", "kind": "function", "doc": "

D.update([E, ]**F) -> None. Update D from dict/iterable E and F.\nIf E is present and has a .keys() method, then does: for k in E: D[k] = E[k]\nIf E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v\nIn either case, this is followed by: for k in F: D[k] = F[k]

\n", "signature": "(self, *args, **kwargs):", "funcdef": "def"}, {"fullname": "ultk.util.io", "modulename": "ultk.util.io", "kind": "module", "doc": "

\n"}, {"fullname": "ultk.util.io.write_expressions", "modulename": "ultk.util.io", "qualname": "write_expressions", "kind": "function", "doc": "

Write expressions to a YAML file.

\n\n

This is particularly useful for writing GrammaticalExpressions, which have a func field that can't be serialized. This function uses to_dict to determine which properties of the Expression to write.

\n\n
Arguments:
\n\n
    \n
  • expressions: the expressions to write
  • \n
  • filename: the file to write to
  • \n
\n", "signature": "(\texpressions: Iterable[ultk.language.language.Expression],\tfilename: str) -> None:", "funcdef": "def"}, {"fullname": "ultk.util.io.read_grammatical_expressions", "modulename": "ultk.util.io", "qualname": "read_grammatical_expressions", "kind": "function", "doc": "

Read grammatical expressions from a YAML file.

\n\n

Optionally re-parse and (re-)evaluate the expressions using the provided grammar and universe.

\n\n
Arguments:
\n\n
    \n
  • filename: the file to read
  • \n
  • grammar: the grammar to use for parsing (and for re-populating the .func attribute of each GrammaticalExpression)
  • \n
  • re_parse: whether to re-parse the expressions
  • \n
  • universe: the universe to use for evaluation
  • \n
  • return_by_meaning: whether to return a dictionary mapping meanings to expressions or not
  • \n
\n\n
Returns:
\n\n
\n

a list of GrammaticalExpressions and a dictionary mapping meanings to expressions (empty if return_by_meaning is False)

\n
\n", "signature": "(\tfilename: str,\tgrammar: ultk.language.grammar.Grammar,\tre_parse: bool = False,\tuniverse: ultk.language.semantics.Universe | None = None,\treturn_by_meaning=True) -> tuple[list[ultk.language.grammar.GrammaticalExpression], dict[ultk.language.semantics.Meaning, ultk.language.grammar.GrammaticalExpression]]:", "funcdef": "def"}, {"fullname": "ultk.util.io.write_pickle", "modulename": "ultk.util.io", "qualname": "write_pickle", "kind": "function", "doc": "

\n", "signature": "(fn: str, data):", "funcdef": "def"}, {"fullname": "ultk.util.io.read_pickle", "modulename": "ultk.util.io", "qualname": "read_pickle", "kind": "function", "doc": "

\n", "signature": "(fn: str):", "funcdef": "def"}]; // mirrored in build-search-index.js (part 1) // Also split on html tags. this is a cheap heuristic, but good enough. diff --git a/docs/ultk.html b/docs/ultk.html index 2db877df..6c71f5aa 100644 --- a/docs/ultk.html +++ b/docs/ultk.html @@ -3,14 +3,14 @@ - + ultk API documentation - + - - - - + + + + + +
+
+

+ultk.effcomm.information_bottleneck

+ +

Submodule for Information Bottleneck based analyses of the efficiency of semantic category systems.

+ +

The ultk.effcomm.information_bottleneck.modeling includes a friendly API for obtaining IB theoretical bounds and naming models given a specification of the statistics of the semantic domain. This is likely the only submodule you need to import.

+ +

The ultk.effcomm.information_bottlneck.ib implements the IB update equations, and includes an optimizer object that inherits from the base object in ba.

+ +

The ultk.effcomm.information_bottleneck.ba submodule implements the Blahut-Arimoto algorithm for computing the theoretical bounds of efficient compression. It includes code for simulated annealing (reverse or not) of $\beta$.

+ +

The ultk.effcomm.information_bottleneck.tools submodule includes helper methods for computing informational quantities and dealing with numerical instability.

+
+ + + + + +
 1"""Submodule for Information Bottleneck based analyses of the efficiency of semantic category systems. 
+ 2
+ 3The `ultk.effcomm.information_bottleneck.modeling` includes a friendly API for obtaining IB theoretical bounds and naming models given a specification of the statistics of the semantic domain. This is likely the only submodule you need to import.
+ 4
+ 5The `ultk.effcomm.information_bottlneck.ib` implements the IB update equations, and includes an optimizer object that inherits from the base object in `ba`.
+ 6
+ 7The `ultk.effcomm.information_bottleneck.ba` submodule implements the Blahut-Arimoto algorithm for computing the theoretical bounds of efficient compression. It includes code for simulated annealing (reverse or not) of $\\beta$. 
+ 8
+ 9The `ultk.effcomm.information_bottleneck.tools` submodule includes helper methods for computing informational quantities and dealing with numerical instability.
+10"""
+
+ + +
+
+ + \ No newline at end of file diff --git a/docs/ultk/effcomm/information_bottleneck/ba.html b/docs/ultk/effcomm/information_bottleneck/ba.html new file mode 100644 index 00000000..438f82b4 --- /dev/null +++ b/docs/ultk/effcomm/information_bottleneck/ba.html @@ -0,0 +1,1305 @@ + + + + + + + ultk.effcomm.information_bottleneck.ba API documentation + + + + + + + + + + + + +
+
+

+ultk.effcomm.information_bottleneck.ba

+ + + + + + +
  1import numpy as np
+  2
+  3from typing import Any
+  4from tqdm import tqdm
+  5from .tools import information_cond, random_stochastic_matrix, add_noise_to_stochastic_matrix, compute_lower_bound
+  6
+  7
+  8##############################################################################
+  9# Base Rate Distortion class
+ 10##############################################################################
+ 11
+ 12
+ 13class BaseRDOptimizer:
+ 14    def __init__(
+ 15        self,
+ 16        betas: np.ndarray,
+ 17        *args,
+ 18        max_it: int = 1000,
+ 19        eps: float = 1e-15,
+ 20        ignore_converge: bool = False,
+ 21        xhat_size = None,
+ 22        **kwargs,
+ 23    ) -> None:
+ 24        """Base initializer for a Blahut-Arimoto-based optimizer of the Rate Distortion function.
+ 25
+ 26        Args:
+ 27            betas: 1D array, values of beta to search
+ 28
+ 29            max_it: max number of iterations
+ 30
+ 31            args: propagated to `self.beta_iterate` as *kwargs
+ 32
+ 33            eps: accuracy required by the algorithm: the algorithm stops if there is no change in distortion value of more than `eps` between consecutive iterations
+ 34
+ 35            ignore_converge: whether to run the optimization until `max_it`, ignoring the stopping criterion specified by `eps`.
+ 36
+ 37            xhat_size: the size of the output alphabet. The resulting encoders will be of shape (x, xhat)
+ 38
+ 39            kwargs: propagated to `self.beta_iterate` as **kwargs
+ 40        """
+ 41        self.betas = betas
+ 42        self.max_it = max_it
+ 43        self.eps = eps
+ 44        self.ignore_converge = ignore_converge
+ 45
+ 46        self.init_args = args
+ 47        self.init_kwargs = kwargs
+ 48
+ 49        self.ln_px = None  # shape `(x)`
+ 50        self.ln_qxhat_x = None  # shape `(x, xhat)`
+ 51        self.dist_mat = None  # shape `(x, xhat)`
+ 52
+ 53        self.xhat_size = xhat_size
+ 54        # if xhat_size is None:
+ 55            # self.xhat_size = len(self.ln_px)
+ 56
+ 57        self.result = None  # namedtuple
+ 58        self.results: list[Any] = []  # list of namedtuples
+ 59
+ 60    def get_results(self) -> list[Any]:
+ 61        # Re-initialize results
+ 62        self.result = None
+ 63        self.results = []
+ 64
+ 65        self.beta_iterate(*self.init_args, **self.init_kwargs)
+ 66        return self.results
+ 67
+ 68    def update_eqs(
+ 69        self,
+ 70        *args,
+ 71        **kwargs,
+ 72    ) -> None:
+ 73        """Main Blahut-Arimoto update steps."""
+ 74        raise NotImplementedError
+ 75
+ 76    def next_result(self, beta, *args, **kwargs) -> None:
+ 77        """Get the result of the converged BA iteration."""
+ 78        raise NotImplementedError
+ 79
+ 80    def beta_iterate(
+ 81        self,
+ 82        *args,
+ 83        num_restarts: int = 0,
+ 84        ensure_monotonicity: bool = True,
+ 85        disable_tqdm: bool = False,
+ 86        reverse_annealing: bool = True,
+ 87        **kwargs,
+ 88    ) -> None:
+ 89        """Iterate the BA algorithm for an array of values of beta, using reverse deterministic annealing.
+ 90
+ 91        Args:
+ 92            num_restarts: number of times to restart each beta-optimization
+ 93
+ 94            ensure_monotonicity: whether to remove points that would make a rate distortion curve non-monotonic
+ 95
+ 96            reverse_annealing: whether to use reverse annealing or regular annealing. If self.output_size < len(self.ln_px), then this is set to false.
+ 97        """
+ 98        if (self.xhat_size is not None and self.xhat_size < len(self.ln_px)) or not reverse_annealing:
+ 99            reverse = False
+100        else:
+101            reverse = True
+102
+103        results = self.anneal(
+104            *args,
+105            reverse=reverse,
+106            num_restarts=num_restarts,
+107            ensure_monotonicity=ensure_monotonicity,
+108            disable_tqdm=disable_tqdm,
+109            **kwargs,
+110        )
+111
+112        # Postprocessing
+113        if ensure_monotonicity:
+114            indices = compute_lower_bound(
+115                [(item.rate, item.distortion) for item in results]
+116            )
+117            results = [x if i in indices else None for i, x in enumerate(results)]
+118            self.results = results
+119
+120    def anneal(
+121        self,
+122        *args,
+123        reverse: bool = True,
+124        num_restarts: int = 0,
+125        disable_tqdm: bool = False,
+126        **kwargs,
+127    ) -> list:
+128
+129        results = []
+130        betas = np.sort(self.betas)
+131
+132        if reverse:
+133            # sort betas in decreasing order
+134            betas = betas[::-1]
+135            # start with bijective mapping
+136            init_q = np.eye(
+137                len(self.ln_px)
+138            )
+139        else:
+140            # Random degenerate initialization
+141            xhat = random_stochastic_matrix(shape=(1, self.xhat_size), gamma=1e-2)
+142            init_q = np.stack([xhat.squeeze()] * len(self.ln_px))
+143
+144        pbar = tqdm(
+145            betas,
+146            disable=disable_tqdm,
+147            desc=f"{'reverse ' if reverse else ''}annealing beta",
+148        )
+149        for beta in pbar:
+150            pbar.set_description(f"beta={beta:.5f}")
+151            candidates = []
+152            for _ in range(num_restarts+1):
+153                self.blahut_arimoto(beta, *args, init_q=init_q, **kwargs)
+154                cand = self.results[-1]
+155                init_q = cand.qxhat_x
+156                candidates.append(cand)
+157            best = min(candidates, key=lambda x: x.rate + beta * x.distortion)
+158            results.append(best)
+159
+160        if reverse:
+161            results = results[::-1]
+162
+163        return results
+164
+165    ############################################################################
+166    # Blahut Arimoto iteration
+167    ############################################################################
+168
+169    def blahut_arimoto(
+170        self,
+171        beta,
+172        *args,
+173        **kwargs,
+174    ) -> None:
+175        """Update the self-consistent equations for a Rate Distortion objective.
+176
+177        Args:
+178            beta: (scalar) the slope of the rate-distoriton function at the point where evaluation is required
+179        """
+180        len_x = len(self.ln_px)
+181        if "init_q" in kwargs:
+182            init_q: np.ndarray = kwargs["init_q"]
+183            # Add small value for working in logspace
+184            # init_q_precision = init_q + PRECISION
+185            init_q_precision = add_noise_to_stochastic_matrix(init_q, weight=1e-2)
+186            init_q_precision /= init_q_precision.sum(axis=1, keepdims=True)
+187            self.ln_qxhat_x = np.log(init_q_precision)
+188        else:
+189            self.ln_qxhat_x = np.log(random_stochastic_matrix((len_x, len_x)))
+190
+191        it = 0
+192        converged = False
+193        while not converged:
+194            it += 1
+195            prev_q = np.copy(self.ln_qxhat_x)
+196
+197            # Main BA update
+198            self.update_eqs(beta, *args, **kwargs)
+199
+200            # convergence check
+201            # TODO: consider updating the Result tuple to include convergence field. if converged, record the iteration. If not, record False/None
+202            if self.ignore_converge:
+203                converged = it >= self.max_it
+204            else:
+205                converged = (
+206                    it == self.max_it
+207                    or np.sum(np.abs(np.exp(self.ln_qxhat_x) - np.exp(prev_q)))
+208                    < self.eps
+209                )
+210
+211        self.results.append(self.next_result(beta, *args, **kwargs))
+212
+213    def compute_distortion(self, *args, **kwargs) -> float:
+214        """Compute the expected distortion for the current p(x), q(xhat|x) and dist_mat."""
+215        raise NotImplementedError
+216
+217    def compute_rate(
+218        self,
+219        *args,
+220        **kwargs,
+221    ) -> float:
+222        """Compute the information rate for the current p(x), q(xhat|x)."""
+223        return information_cond(np.exp(self.ln_px), np.exp(self.ln_qxhat_x))
+
+ + +
+
+ +
+ + class + BaseRDOptimizer: + + + +
+ +
 14class BaseRDOptimizer:
+ 15    def __init__(
+ 16        self,
+ 17        betas: np.ndarray,
+ 18        *args,
+ 19        max_it: int = 1000,
+ 20        eps: float = 1e-15,
+ 21        ignore_converge: bool = False,
+ 22        xhat_size = None,
+ 23        **kwargs,
+ 24    ) -> None:
+ 25        """Base initializer for a Blahut-Arimoto-based optimizer of the Rate Distortion function.
+ 26
+ 27        Args:
+ 28            betas: 1D array, values of beta to search
+ 29
+ 30            max_it: max number of iterations
+ 31
+ 32            args: propagated to `self.beta_iterate` as *kwargs
+ 33
+ 34            eps: accuracy required by the algorithm: the algorithm stops if there is no change in distortion value of more than `eps` between consecutive iterations
+ 35
+ 36            ignore_converge: whether to run the optimization until `max_it`, ignoring the stopping criterion specified by `eps`.
+ 37
+ 38            xhat_size: the size of the output alphabet. The resulting encoders will be of shape (x, xhat)
+ 39
+ 40            kwargs: propagated to `self.beta_iterate` as **kwargs
+ 41        """
+ 42        self.betas = betas
+ 43        self.max_it = max_it
+ 44        self.eps = eps
+ 45        self.ignore_converge = ignore_converge
+ 46
+ 47        self.init_args = args
+ 48        self.init_kwargs = kwargs
+ 49
+ 50        self.ln_px = None  # shape `(x)`
+ 51        self.ln_qxhat_x = None  # shape `(x, xhat)`
+ 52        self.dist_mat = None  # shape `(x, xhat)`
+ 53
+ 54        self.xhat_size = xhat_size
+ 55        # if xhat_size is None:
+ 56            # self.xhat_size = len(self.ln_px)
+ 57
+ 58        self.result = None  # namedtuple
+ 59        self.results: list[Any] = []  # list of namedtuples
+ 60
+ 61    def get_results(self) -> list[Any]:
+ 62        # Re-initialize results
+ 63        self.result = None
+ 64        self.results = []
+ 65
+ 66        self.beta_iterate(*self.init_args, **self.init_kwargs)
+ 67        return self.results
+ 68
+ 69    def update_eqs(
+ 70        self,
+ 71        *args,
+ 72        **kwargs,
+ 73    ) -> None:
+ 74        """Main Blahut-Arimoto update steps."""
+ 75        raise NotImplementedError
+ 76
+ 77    def next_result(self, beta, *args, **kwargs) -> None:
+ 78        """Get the result of the converged BA iteration."""
+ 79        raise NotImplementedError
+ 80
+ 81    def beta_iterate(
+ 82        self,
+ 83        *args,
+ 84        num_restarts: int = 0,
+ 85        ensure_monotonicity: bool = True,
+ 86        disable_tqdm: bool = False,
+ 87        reverse_annealing: bool = True,
+ 88        **kwargs,
+ 89    ) -> None:
+ 90        """Iterate the BA algorithm for an array of values of beta, using reverse deterministic annealing.
+ 91
+ 92        Args:
+ 93            num_restarts: number of times to restart each beta-optimization
+ 94
+ 95            ensure_monotonicity: whether to remove points that would make a rate distortion curve non-monotonic
+ 96
+ 97            reverse_annealing: whether to use reverse annealing or regular annealing. If self.output_size < len(self.ln_px), then this is set to false.
+ 98        """
+ 99        if (self.xhat_size is not None and self.xhat_size < len(self.ln_px)) or not reverse_annealing:
+100            reverse = False
+101        else:
+102            reverse = True
+103
+104        results = self.anneal(
+105            *args,
+106            reverse=reverse,
+107            num_restarts=num_restarts,
+108            ensure_monotonicity=ensure_monotonicity,
+109            disable_tqdm=disable_tqdm,
+110            **kwargs,
+111        )
+112
+113        # Postprocessing
+114        if ensure_monotonicity:
+115            indices = compute_lower_bound(
+116                [(item.rate, item.distortion) for item in results]
+117            )
+118            results = [x if i in indices else None for i, x in enumerate(results)]
+119            self.results = results
+120
+121    def anneal(
+122        self,
+123        *args,
+124        reverse: bool = True,
+125        num_restarts: int = 0,
+126        disable_tqdm: bool = False,
+127        **kwargs,
+128    ) -> list:
+129
+130        results = []
+131        betas = np.sort(self.betas)
+132
+133        if reverse:
+134            # sort betas in decreasing order
+135            betas = betas[::-1]
+136            # start with bijective mapping
+137            init_q = np.eye(
+138                len(self.ln_px)
+139            )
+140        else:
+141            # Random degenerate initialization
+142            xhat = random_stochastic_matrix(shape=(1, self.xhat_size), gamma=1e-2)
+143            init_q = np.stack([xhat.squeeze()] * len(self.ln_px))
+144
+145        pbar = tqdm(
+146            betas,
+147            disable=disable_tqdm,
+148            desc=f"{'reverse ' if reverse else ''}annealing beta",
+149        )
+150        for beta in pbar:
+151            pbar.set_description(f"beta={beta:.5f}")
+152            candidates = []
+153            for _ in range(num_restarts+1):
+154                self.blahut_arimoto(beta, *args, init_q=init_q, **kwargs)
+155                cand = self.results[-1]
+156                init_q = cand.qxhat_x
+157                candidates.append(cand)
+158            best = min(candidates, key=lambda x: x.rate + beta * x.distortion)
+159            results.append(best)
+160
+161        if reverse:
+162            results = results[::-1]
+163
+164        return results
+165
+166    ############################################################################
+167    # Blahut Arimoto iteration
+168    ############################################################################
+169
+170    def blahut_arimoto(
+171        self,
+172        beta,
+173        *args,
+174        **kwargs,
+175    ) -> None:
+176        """Update the self-consistent equations for a Rate Distortion objective.
+177
+178        Args:
+179            beta: (scalar) the slope of the rate-distoriton function at the point where evaluation is required
+180        """
+181        len_x = len(self.ln_px)
+182        if "init_q" in kwargs:
+183            init_q: np.ndarray = kwargs["init_q"]
+184            # Add small value for working in logspace
+185            # init_q_precision = init_q + PRECISION
+186            init_q_precision = add_noise_to_stochastic_matrix(init_q, weight=1e-2)
+187            init_q_precision /= init_q_precision.sum(axis=1, keepdims=True)
+188            self.ln_qxhat_x = np.log(init_q_precision)
+189        else:
+190            self.ln_qxhat_x = np.log(random_stochastic_matrix((len_x, len_x)))
+191
+192        it = 0
+193        converged = False
+194        while not converged:
+195            it += 1
+196            prev_q = np.copy(self.ln_qxhat_x)
+197
+198            # Main BA update
+199            self.update_eqs(beta, *args, **kwargs)
+200
+201            # convergence check
+202            # TODO: consider updating the Result tuple to include convergence field. if converged, record the iteration. If not, record False/None
+203            if self.ignore_converge:
+204                converged = it >= self.max_it
+205            else:
+206                converged = (
+207                    it == self.max_it
+208                    or np.sum(np.abs(np.exp(self.ln_qxhat_x) - np.exp(prev_q)))
+209                    < self.eps
+210                )
+211
+212        self.results.append(self.next_result(beta, *args, **kwargs))
+213
+214    def compute_distortion(self, *args, **kwargs) -> float:
+215        """Compute the expected distortion for the current p(x), q(xhat|x) and dist_mat."""
+216        raise NotImplementedError
+217
+218    def compute_rate(
+219        self,
+220        *args,
+221        **kwargs,
+222    ) -> float:
+223        """Compute the information rate for the current p(x), q(xhat|x)."""
+224        return information_cond(np.exp(self.ln_px), np.exp(self.ln_qxhat_x))
+
+ + + + +
+ +
+ + BaseRDOptimizer( betas: numpy.ndarray, *args, max_it: int = 1000, eps: float = 1e-15, ignore_converge: bool = False, xhat_size=None, **kwargs) + + + +
+ +
15    def __init__(
+16        self,
+17        betas: np.ndarray,
+18        *args,
+19        max_it: int = 1000,
+20        eps: float = 1e-15,
+21        ignore_converge: bool = False,
+22        xhat_size = None,
+23        **kwargs,
+24    ) -> None:
+25        """Base initializer for a Blahut-Arimoto-based optimizer of the Rate Distortion function.
+26
+27        Args:
+28            betas: 1D array, values of beta to search
+29
+30            max_it: max number of iterations
+31
+32            args: propagated to `self.beta_iterate` as *kwargs
+33
+34            eps: accuracy required by the algorithm: the algorithm stops if there is no change in distortion value of more than `eps` between consecutive iterations
+35
+36            ignore_converge: whether to run the optimization until `max_it`, ignoring the stopping criterion specified by `eps`.
+37
+38            xhat_size: the size of the output alphabet. The resulting encoders will be of shape (x, xhat)
+39
+40            kwargs: propagated to `self.beta_iterate` as **kwargs
+41        """
+42        self.betas = betas
+43        self.max_it = max_it
+44        self.eps = eps
+45        self.ignore_converge = ignore_converge
+46
+47        self.init_args = args
+48        self.init_kwargs = kwargs
+49
+50        self.ln_px = None  # shape `(x)`
+51        self.ln_qxhat_x = None  # shape `(x, xhat)`
+52        self.dist_mat = None  # shape `(x, xhat)`
+53
+54        self.xhat_size = xhat_size
+55        # if xhat_size is None:
+56            # self.xhat_size = len(self.ln_px)
+57
+58        self.result = None  # namedtuple
+59        self.results: list[Any] = []  # list of namedtuples
+
+ + +

Base initializer for a Blahut-Arimoto-based optimizer of the Rate Distortion function.

+ +
Arguments:
+ +
    +
  • betas: 1D array, values of beta to search
  • +
  • max_it: max number of iterations
  • +
  • args: propagated to self.beta_iterate as *kwargs
  • +
  • eps: accuracy required by the algorithm: the algorithm stops if there is no change in distortion value of more than eps between consecutive iterations
  • +
  • ignore_converge: whether to run the optimization until max_it, ignoring the stopping criterion specified by eps.
  • +
  • xhat_size: the size of the output alphabet. The resulting encoders will be of shape (x, xhat)
  • +
  • kwargs: propagated to self.beta_iterate as **kwargs
  • +
+
+ + +
+
+
+ betas + + +
+ + + + +
+
+
+ max_it + + +
+ + + + +
+
+
+ eps + + +
+ + + + +
+
+
+ ignore_converge + + +
+ + + + +
+
+
+ init_args + + +
+ + + + +
+
+
+ init_kwargs + + +
+ + + + +
+
+
+ ln_px + + +
+ + + + +
+
+
+ ln_qxhat_x + + +
+ + + + +
+
+
+ dist_mat + + +
+ + + + +
+
+
+ xhat_size + + +
+ + + + +
+
+
+ result + + +
+ + + + +
+
+
+ results: list[typing.Any] + + +
+ + + + +
+
+ +
+ + def + get_results(self) -> list[typing.Any]: + + + +
+ +
61    def get_results(self) -> list[Any]:
+62        # Re-initialize results
+63        self.result = None
+64        self.results = []
+65
+66        self.beta_iterate(*self.init_args, **self.init_kwargs)
+67        return self.results
+
+ + + + +
+
+ +
+ + def + update_eqs(self, *args, **kwargs) -> None: + + + +
+ +
69    def update_eqs(
+70        self,
+71        *args,
+72        **kwargs,
+73    ) -> None:
+74        """Main Blahut-Arimoto update steps."""
+75        raise NotImplementedError
+
+ + +

Main Blahut-Arimoto update steps.

+
+ + +
+
+ +
+ + def + next_result(self, beta, *args, **kwargs) -> None: + + + +
+ +
77    def next_result(self, beta, *args, **kwargs) -> None:
+78        """Get the result of the converged BA iteration."""
+79        raise NotImplementedError
+
+ + +

Get the result of the converged BA iteration.

+
+ + +
+
+ +
+ + def + beta_iterate( self, *args, num_restarts: int = 0, ensure_monotonicity: bool = True, disable_tqdm: bool = False, reverse_annealing: bool = True, **kwargs) -> None: + + + +
+ +
 81    def beta_iterate(
+ 82        self,
+ 83        *args,
+ 84        num_restarts: int = 0,
+ 85        ensure_monotonicity: bool = True,
+ 86        disable_tqdm: bool = False,
+ 87        reverse_annealing: bool = True,
+ 88        **kwargs,
+ 89    ) -> None:
+ 90        """Iterate the BA algorithm for an array of values of beta, using reverse deterministic annealing.
+ 91
+ 92        Args:
+ 93            num_restarts: number of times to restart each beta-optimization
+ 94
+ 95            ensure_monotonicity: whether to remove points that would make a rate distortion curve non-monotonic
+ 96
+ 97            reverse_annealing: whether to use reverse annealing or regular annealing. If self.output_size < len(self.ln_px), then this is set to false.
+ 98        """
+ 99        if (self.xhat_size is not None and self.xhat_size < len(self.ln_px)) or not reverse_annealing:
+100            reverse = False
+101        else:
+102            reverse = True
+103
+104        results = self.anneal(
+105            *args,
+106            reverse=reverse,
+107            num_restarts=num_restarts,
+108            ensure_monotonicity=ensure_monotonicity,
+109            disable_tqdm=disable_tqdm,
+110            **kwargs,
+111        )
+112
+113        # Postprocessing
+114        if ensure_monotonicity:
+115            indices = compute_lower_bound(
+116                [(item.rate, item.distortion) for item in results]
+117            )
+118            results = [x if i in indices else None for i, x in enumerate(results)]
+119            self.results = results
+
+ + +

Iterate the BA algorithm for an array of values of beta, using reverse deterministic annealing.

+ +
Arguments:
+ +
    +
  • num_restarts: number of times to restart each beta-optimization
  • +
  • ensure_monotonicity: whether to remove points that would make a rate distortion curve non-monotonic
  • +
  • reverse_annealing: whether to use reverse annealing or regular annealing. If self.output_size < len(self.ln_px), then this is set to false.
  • +
+
+ + +
+
+ +
+ + def + anneal( self, *args, reverse: bool = True, num_restarts: int = 0, disable_tqdm: bool = False, **kwargs) -> list: + + + +
+ +
121    def anneal(
+122        self,
+123        *args,
+124        reverse: bool = True,
+125        num_restarts: int = 0,
+126        disable_tqdm: bool = False,
+127        **kwargs,
+128    ) -> list:
+129
+130        results = []
+131        betas = np.sort(self.betas)
+132
+133        if reverse:
+134            # sort betas in decreasing order
+135            betas = betas[::-1]
+136            # start with bijective mapping
+137            init_q = np.eye(
+138                len(self.ln_px)
+139            )
+140        else:
+141            # Random degenerate initialization
+142            xhat = random_stochastic_matrix(shape=(1, self.xhat_size), gamma=1e-2)
+143            init_q = np.stack([xhat.squeeze()] * len(self.ln_px))
+144
+145        pbar = tqdm(
+146            betas,
+147            disable=disable_tqdm,
+148            desc=f"{'reverse ' if reverse else ''}annealing beta",
+149        )
+150        for beta in pbar:
+151            pbar.set_description(f"beta={beta:.5f}")
+152            candidates = []
+153            for _ in range(num_restarts+1):
+154                self.blahut_arimoto(beta, *args, init_q=init_q, **kwargs)
+155                cand = self.results[-1]
+156                init_q = cand.qxhat_x
+157                candidates.append(cand)
+158            best = min(candidates, key=lambda x: x.rate + beta * x.distortion)
+159            results.append(best)
+160
+161        if reverse:
+162            results = results[::-1]
+163
+164        return results
+
+ + + + +
+
+ +
+ + def + blahut_arimoto(self, beta, *args, **kwargs) -> None: + + + +
+ +
170    def blahut_arimoto(
+171        self,
+172        beta,
+173        *args,
+174        **kwargs,
+175    ) -> None:
+176        """Update the self-consistent equations for a Rate Distortion objective.
+177
+178        Args:
+179            beta: (scalar) the slope of the rate-distoriton function at the point where evaluation is required
+180        """
+181        len_x = len(self.ln_px)
+182        if "init_q" in kwargs:
+183            init_q: np.ndarray = kwargs["init_q"]
+184            # Add small value for working in logspace
+185            # init_q_precision = init_q + PRECISION
+186            init_q_precision = add_noise_to_stochastic_matrix(init_q, weight=1e-2)
+187            init_q_precision /= init_q_precision.sum(axis=1, keepdims=True)
+188            self.ln_qxhat_x = np.log(init_q_precision)
+189        else:
+190            self.ln_qxhat_x = np.log(random_stochastic_matrix((len_x, len_x)))
+191
+192        it = 0
+193        converged = False
+194        while not converged:
+195            it += 1
+196            prev_q = np.copy(self.ln_qxhat_x)
+197
+198            # Main BA update
+199            self.update_eqs(beta, *args, **kwargs)
+200
+201            # convergence check
+202            # TODO: consider updating the Result tuple to include convergence field. if converged, record the iteration. If not, record False/None
+203            if self.ignore_converge:
+204                converged = it >= self.max_it
+205            else:
+206                converged = (
+207                    it == self.max_it
+208                    or np.sum(np.abs(np.exp(self.ln_qxhat_x) - np.exp(prev_q)))
+209                    < self.eps
+210                )
+211
+212        self.results.append(self.next_result(beta, *args, **kwargs))
+
+ + +

Update the self-consistent equations for a Rate Distortion objective.

+ +
Arguments:
+ +
    +
  • beta: (scalar) the slope of the rate-distoriton function at the point where evaluation is required
  • +
+
+ + +
+
+ +
+ + def + compute_distortion(self, *args, **kwargs) -> float: + + + +
+ +
214    def compute_distortion(self, *args, **kwargs) -> float:
+215        """Compute the expected distortion for the current p(x), q(xhat|x) and dist_mat."""
+216        raise NotImplementedError
+
+ + +

Compute the expected distortion for the current p(x), q(xhat|x) and dist_mat.

+
+ + +
+
+ +
+ + def + compute_rate(self, *args, **kwargs) -> float: + + + +
+ +
218    def compute_rate(
+219        self,
+220        *args,
+221        **kwargs,
+222    ) -> float:
+223        """Compute the information rate for the current p(x), q(xhat|x)."""
+224        return information_cond(np.exp(self.ln_px), np.exp(self.ln_qxhat_x))
+
+ + +

Compute the information rate for the current p(x), q(xhat|x).

+
+ + +
+
+
+ + \ No newline at end of file diff --git a/docs/ultk/effcomm/information_bottleneck/ib.html b/docs/ultk/effcomm/information_bottleneck/ib.html new file mode 100644 index 00000000..dab6d945 --- /dev/null +++ b/docs/ultk/effcomm/information_bottleneck/ib.html @@ -0,0 +1,1174 @@ + + + + + + + ultk.effcomm.information_bottleneck.ib API documentation + + + + + + + + + + + + +
+
+

+ultk.effcomm.information_bottleneck.ib

+ +

Information Bottleneck optimizer.

+
+ + + + + +
  1"""Information Bottleneck optimizer."""
+  2
+  3import numpy as np
+  4
+  5from collections import namedtuple
+  6from scipy.special import logsumexp, log_softmax
+  7
+  8from .ba import BaseRDOptimizer
+  9from .tools import PRECISION, information_cond, mutual_info, kl_divergence
+ 10
+ 11
+ 12def ib_kl(py_x: np.ndarray, qy_xhat: np.ndarray) -> np.ndarray:
+ 13    """Compute the IB distortion matrix, the KL divergence between p(y|x) and q(y|xhat), in nats."""
+ 14    # D[p(y|x) || q(y|xhat)],
+ 15    # input shape `(x, xhat, y)`, output shape `(x, xhat)`
+ 16    return kl_divergence(py_x[:, None, :], qy_xhat[None, :, :], axis=2)
+ 17
+ 18
+ 19##############################################################################
+ 20# Return type of each item in `get_results()`
+ 21##############################################################################
+ 22
+ 23IBResult = namedtuple(
+ 24    "IBResult",
+ 25    [
+ 26        "qxhat_x",
+ 27        "rate",
+ 28        "distortion",
+ 29        "accuracy",
+ 30        "beta",
+ 31    ],
+ 32)
+ 33
+ 34##############################################################################
+ 35# Update equations
+ 36##############################################################################
+ 37
+ 38
+ 39def next_ln_qxhat(ln_px: np.ndarray, ln_qxhat_x: np.ndarray) -> np.ndarray:
+ 40    # q(xhat) = sum_x p(x) q(xhat | x),
+ 41    # shape `(xhat)`
+ 42    return logsumexp(ln_px[:, None] + ln_qxhat_x, axis=0)
+ 43
+ 44
+ 45def next_ln_qxhat_x(ln_qxhat: np.ndarray, beta: float, dist_mat: np.ndarray):
+ 46    # q(x_hat | x) = q(x_hat) exp(- beta * d(x, x_hat)) / Z(x)
+ 47    return log_softmax(ln_qxhat[None, :] - beta * dist_mat, axis=1)
+ 48
+ 49
+ 50def next_ln_qy_xhat(ln_pxy: np.ndarray, ln_qxhat_x: np.ndarray) -> np.ndarray:
+ 51    # p(x),
+ 52    # shape `(x)`
+ 53    ln_px = logsumexp(ln_pxy, axis=1)
+ 54
+ 55    # p(y|x),
+ 56    # shape `(x,y)`
+ 57    ln_py_x = ln_pxy - ln_px[:, None]
+ 58
+ 59    ln_qx_xhat = next_ln_qx_xhat(ln_px, ln_qxhat_x)  # `(xhat, x)`
+ 60
+ 61    # p(y|xhat) = sum_x p(y|x) p(x|xhat),
+ 62    # shape `(xhat, y)`
+ 63    ln_qy_xhat = logsumexp(
+ 64        ln_py_x[None, :, :] + ln_qx_xhat[:, :, None],  # `(xhat, x, y)`
+ 65        axis=1,
+ 66    )
+ 67
+ 68    return ln_qy_xhat
+ 69
+ 70
+ 71def next_ln_qx_xhat(ln_px: np.ndarray, ln_qxhat_x: np.ndarray) -> np.ndarray:
+ 72    # q(xhat),
+ 73    # shape `(xhat)`
+ 74    ln_qxhat = next_ln_qxhat(ln_px, ln_qxhat_x)
+ 75
+ 76    # q(x,xhat) = p(x) q(xhat|x),
+ 77    # shape `(x, xhat)`
+ 78    ln_qxxhat = ln_px[:, None] + ln_qxhat_x
+ 79
+ 80    # p(x|xhat) = q(x, xhat) / q(xhat),
+ 81    # shape `(xhat, x)`
+ 82    ln_qx_xhat = ln_qxxhat.T - ln_qxhat[:, None]
+ 83
+ 84    return ln_qx_xhat
+ 85
+ 86
+ 87##############################################################################
+ 88# IB Optimizer
+ 89##############################################################################
+ 90
+ 91
+ 92class IBOptimizer(BaseRDOptimizer):
+ 93    def __init__(
+ 94        self,
+ 95        pxy: np.ndarray,
+ 96        betas: np.ndarray,
+ 97        *args,
+ 98        **kwargs,
+ 99    ) -> None:
+100        """Estimate the optimal encoder for a given value of `beta` for the Information Bottleneck objective [Tishby et al., 1999]:
+101
+102        $\min_{q} I[X:\hat{X}] + \\beta \mathbb{E}[D_{KL}[p(y|x) || p(y|\hat{x})]].$
+103
+104        Args:
+105            pxy: 2D array of shape `(|X|, |Y|)` representing the joint probability mass function of the source and relevance variables.
+106
+107            betas: 1D array of values of beta, where each beta is a float corresponding to the slope of the rate-distoriton function at the point where evaluation is required
+108        """
+109        super().__init__(betas, *args, **kwargs)
+110
+111        # Add small value for working in logspace
+112        pxy_precision = pxy + PRECISION
+113        pxy_precision /= pxy_precision.sum()
+114        self.ln_pxy = np.log(pxy_precision)
+115
+116        self.ln_px = logsumexp(self.ln_pxy, axis=1)  # `(x)`
+117        self.px = np.exp(self.ln_px)
+118        self.ln_py_x = self.ln_pxy - logsumexp(
+119            self.ln_pxy, axis=1, keepdims=True
+120        )  # `(x, y)`
+121        self.results: list[IBResult] = None
+122
+123    def get_results(self) -> list[IBResult]:
+124        return super().get_results()
+125
+126    def next_dist_mat(
+127        self,
+128        *args,
+129        **kwargs,
+130    ) -> None:
+131        """IB distortion matrix."""
+132        self.dist_mat = ib_kl(np.exp(self.ln_py_x), np.exp(self.ln_qy_xhat))
+133
+134    def update_eqs(
+135        self,
+136        beta,
+137        *args,
+138        **kwargs,
+139    ) -> None:
+140        """Iterate the IB update equations."""
+141        self.ln_qxhat = next_ln_qxhat(self.ln_px, self.ln_qxhat_x)
+142        self.ln_qy_xhat = next_ln_qy_xhat(self.ln_pxy, self.ln_qxhat_x)
+143        self.next_dist_mat(*args, **kwargs)
+144        self.ln_qxhat_x = next_ln_qxhat_x(self.ln_qxhat, beta, self.dist_mat)
+145
+146    def compute_distortion(self, *args, **kwargs) -> float:
+147        # NOTE: we may still need to debug this; watch out for negative values
+148        # return np.exp(logsumexp(self.ln_px + self.ln_qxhat_x + np.log(self.dist_mat)))
+149        I_xy = mutual_info(np.exp(self.ln_pxy))
+150        edkl = I_xy - self.compute_accuracy()
+151        return edkl
+152
+153    def compute_accuracy(self, *args, **kwargs) -> float:
+154        return information_cond(
+155            np.exp(self.ln_qxhat),
+156            np.exp(self.ln_qy_xhat),
+157        )
+158
+159    def next_result(self, beta, *args, **kwargs) -> IBResult:
+160        """Get the result of the converged BA iteration for the IB objective.
+161
+162        Returns:
+163            an IBResult namedtuple of `(qxhat_x, rate, distortion, accuracy, beta)` values. This is:
+164
+165                `qxhat_x`, the optimal encoder, such that the
+166
+167                `rate` (in bits) of compressing X into X_hat, is minimized for the level of
+168
+169                `distortion` between X, X_hat with respect to Y, i.e. the
+170
+171                `accuracy` I[X_hat:Y] is maximized, for the specified
+172
+173                `beta` trade-off parameter
+174        """
+175        return IBResult(
+176            np.exp(self.ln_qxhat_x),
+177            self.compute_rate(),
+178            self.compute_distortion(),
+179            self.compute_accuracy(),
+180            beta,
+181        )
+
+ + +
+
+ +
+ + def + ib_kl(py_x: numpy.ndarray, qy_xhat: numpy.ndarray) -> numpy.ndarray: + + + +
+ +
13def ib_kl(py_x: np.ndarray, qy_xhat: np.ndarray) -> np.ndarray:
+14    """Compute the IB distortion matrix, the KL divergence between p(y|x) and q(y|xhat), in nats."""
+15    # D[p(y|x) || q(y|xhat)],
+16    # input shape `(x, xhat, y)`, output shape `(x, xhat)`
+17    return kl_divergence(py_x[:, None, :], qy_xhat[None, :, :], axis=2)
+
+ + +

Compute the IB distortion matrix, the KL divergence between p(y|x) and q(y|xhat), in nats.

+
+ + +
+
+
+ + class + IBResult(builtins.tuple): + + +
+ + +

IBResult(qxhat_x, rate, distortion, accuracy, beta)

+
+ + +
+
+ + IBResult(qxhat_x, rate, distortion, accuracy, beta) + + +
+ + +

Create new instance of IBResult(qxhat_x, rate, distortion, accuracy, beta)

+
+ + +
+
+
+ qxhat_x + + +
+ + +

Alias for field number 0

+
+ + +
+
+
+ rate + + +
+ + +

Alias for field number 1

+
+ + +
+
+
+ distortion + + +
+ + +

Alias for field number 2

+
+ + +
+
+
+ accuracy + + +
+ + +

Alias for field number 3

+
+ + +
+
+
+ beta + + +
+ + +

Alias for field number 4

+
+ + +
+
+
+ +
+ + def + next_ln_qxhat(ln_px: numpy.ndarray, ln_qxhat_x: numpy.ndarray) -> numpy.ndarray: + + + +
+ +
40def next_ln_qxhat(ln_px: np.ndarray, ln_qxhat_x: np.ndarray) -> np.ndarray:
+41    # q(xhat) = sum_x p(x) q(xhat | x),
+42    # shape `(xhat)`
+43    return logsumexp(ln_px[:, None] + ln_qxhat_x, axis=0)
+
+ + + + +
+
+ +
+ + def + next_ln_qxhat_x(ln_qxhat: numpy.ndarray, beta: float, dist_mat: numpy.ndarray): + + + +
+ +
46def next_ln_qxhat_x(ln_qxhat: np.ndarray, beta: float, dist_mat: np.ndarray):
+47    # q(x_hat | x) = q(x_hat) exp(- beta * d(x, x_hat)) / Z(x)
+48    return log_softmax(ln_qxhat[None, :] - beta * dist_mat, axis=1)
+
+ + + + +
+
+ +
+ + def + next_ln_qy_xhat(ln_pxy: numpy.ndarray, ln_qxhat_x: numpy.ndarray) -> numpy.ndarray: + + + +
+ +
51def next_ln_qy_xhat(ln_pxy: np.ndarray, ln_qxhat_x: np.ndarray) -> np.ndarray:
+52    # p(x),
+53    # shape `(x)`
+54    ln_px = logsumexp(ln_pxy, axis=1)
+55
+56    # p(y|x),
+57    # shape `(x,y)`
+58    ln_py_x = ln_pxy - ln_px[:, None]
+59
+60    ln_qx_xhat = next_ln_qx_xhat(ln_px, ln_qxhat_x)  # `(xhat, x)`
+61
+62    # p(y|xhat) = sum_x p(y|x) p(x|xhat),
+63    # shape `(xhat, y)`
+64    ln_qy_xhat = logsumexp(
+65        ln_py_x[None, :, :] + ln_qx_xhat[:, :, None],  # `(xhat, x, y)`
+66        axis=1,
+67    )
+68
+69    return ln_qy_xhat
+
+ + + + +
+
+ +
+ + def + next_ln_qx_xhat(ln_px: numpy.ndarray, ln_qxhat_x: numpy.ndarray) -> numpy.ndarray: + + + +
+ +
72def next_ln_qx_xhat(ln_px: np.ndarray, ln_qxhat_x: np.ndarray) -> np.ndarray:
+73    # q(xhat),
+74    # shape `(xhat)`
+75    ln_qxhat = next_ln_qxhat(ln_px, ln_qxhat_x)
+76
+77    # q(x,xhat) = p(x) q(xhat|x),
+78    # shape `(x, xhat)`
+79    ln_qxxhat = ln_px[:, None] + ln_qxhat_x
+80
+81    # p(x|xhat) = q(x, xhat) / q(xhat),
+82    # shape `(xhat, x)`
+83    ln_qx_xhat = ln_qxxhat.T - ln_qxhat[:, None]
+84
+85    return ln_qx_xhat
+
+ + + + +
+
+ +
+ + class + IBOptimizer(ultk.effcomm.information_bottleneck.ba.BaseRDOptimizer): + + + +
+ +
 93class IBOptimizer(BaseRDOptimizer):
+ 94    def __init__(
+ 95        self,
+ 96        pxy: np.ndarray,
+ 97        betas: np.ndarray,
+ 98        *args,
+ 99        **kwargs,
+100    ) -> None:
+101        """Estimate the optimal encoder for a given value of `beta` for the Information Bottleneck objective [Tishby et al., 1999]:
+102
+103        $\min_{q} I[X:\hat{X}] + \\beta \mathbb{E}[D_{KL}[p(y|x) || p(y|\hat{x})]].$
+104
+105        Args:
+106            pxy: 2D array of shape `(|X|, |Y|)` representing the joint probability mass function of the source and relevance variables.
+107
+108            betas: 1D array of values of beta, where each beta is a float corresponding to the slope of the rate-distoriton function at the point where evaluation is required
+109        """
+110        super().__init__(betas, *args, **kwargs)
+111
+112        # Add small value for working in logspace
+113        pxy_precision = pxy + PRECISION
+114        pxy_precision /= pxy_precision.sum()
+115        self.ln_pxy = np.log(pxy_precision)
+116
+117        self.ln_px = logsumexp(self.ln_pxy, axis=1)  # `(x)`
+118        self.px = np.exp(self.ln_px)
+119        self.ln_py_x = self.ln_pxy - logsumexp(
+120            self.ln_pxy, axis=1, keepdims=True
+121        )  # `(x, y)`
+122        self.results: list[IBResult] = None
+123
+124    def get_results(self) -> list[IBResult]:
+125        return super().get_results()
+126
+127    def next_dist_mat(
+128        self,
+129        *args,
+130        **kwargs,
+131    ) -> None:
+132        """IB distortion matrix."""
+133        self.dist_mat = ib_kl(np.exp(self.ln_py_x), np.exp(self.ln_qy_xhat))
+134
+135    def update_eqs(
+136        self,
+137        beta,
+138        *args,
+139        **kwargs,
+140    ) -> None:
+141        """Iterate the IB update equations."""
+142        self.ln_qxhat = next_ln_qxhat(self.ln_px, self.ln_qxhat_x)
+143        self.ln_qy_xhat = next_ln_qy_xhat(self.ln_pxy, self.ln_qxhat_x)
+144        self.next_dist_mat(*args, **kwargs)
+145        self.ln_qxhat_x = next_ln_qxhat_x(self.ln_qxhat, beta, self.dist_mat)
+146
+147    def compute_distortion(self, *args, **kwargs) -> float:
+148        # NOTE: we may still need to debug this; watch out for negative values
+149        # return np.exp(logsumexp(self.ln_px + self.ln_qxhat_x + np.log(self.dist_mat)))
+150        I_xy = mutual_info(np.exp(self.ln_pxy))
+151        edkl = I_xy - self.compute_accuracy()
+152        return edkl
+153
+154    def compute_accuracy(self, *args, **kwargs) -> float:
+155        return information_cond(
+156            np.exp(self.ln_qxhat),
+157            np.exp(self.ln_qy_xhat),
+158        )
+159
+160    def next_result(self, beta, *args, **kwargs) -> IBResult:
+161        """Get the result of the converged BA iteration for the IB objective.
+162
+163        Returns:
+164            an IBResult namedtuple of `(qxhat_x, rate, distortion, accuracy, beta)` values. This is:
+165
+166                `qxhat_x`, the optimal encoder, such that the
+167
+168                `rate` (in bits) of compressing X into X_hat, is minimized for the level of
+169
+170                `distortion` between X, X_hat with respect to Y, i.e. the
+171
+172                `accuracy` I[X_hat:Y] is maximized, for the specified
+173
+174                `beta` trade-off parameter
+175        """
+176        return IBResult(
+177            np.exp(self.ln_qxhat_x),
+178            self.compute_rate(),
+179            self.compute_distortion(),
+180            self.compute_accuracy(),
+181            beta,
+182        )
+
+ + + + +
+ +
+ + IBOptimizer(pxy: numpy.ndarray, betas: numpy.ndarray, *args, **kwargs) + + + +
+ +
 94    def __init__(
+ 95        self,
+ 96        pxy: np.ndarray,
+ 97        betas: np.ndarray,
+ 98        *args,
+ 99        **kwargs,
+100    ) -> None:
+101        """Estimate the optimal encoder for a given value of `beta` for the Information Bottleneck objective [Tishby et al., 1999]:
+102
+103        $\min_{q} I[X:\hat{X}] + \\beta \mathbb{E}[D_{KL}[p(y|x) || p(y|\hat{x})]].$
+104
+105        Args:
+106            pxy: 2D array of shape `(|X|, |Y|)` representing the joint probability mass function of the source and relevance variables.
+107
+108            betas: 1D array of values of beta, where each beta is a float corresponding to the slope of the rate-distoriton function at the point where evaluation is required
+109        """
+110        super().__init__(betas, *args, **kwargs)
+111
+112        # Add small value for working in logspace
+113        pxy_precision = pxy + PRECISION
+114        pxy_precision /= pxy_precision.sum()
+115        self.ln_pxy = np.log(pxy_precision)
+116
+117        self.ln_px = logsumexp(self.ln_pxy, axis=1)  # `(x)`
+118        self.px = np.exp(self.ln_px)
+119        self.ln_py_x = self.ln_pxy - logsumexp(
+120            self.ln_pxy, axis=1, keepdims=True
+121        )  # `(x, y)`
+122        self.results: list[IBResult] = None
+
+ + +

Estimate the optimal encoder for a given value of beta for the Information Bottleneck objective [Tishby et al., 1999]:

+ +

$\min_{q} I[X:\hat{X}] + \beta \mathbb{E}[D_{KL}[p(y|x) || p(y|\hat{x})]].$

+ +
Arguments:
+ +
    +
  • pxy: 2D array of shape (|X|, |Y|) representing the joint probability mass function of the source and relevance variables.
  • +
  • betas: 1D array of values of beta, where each beta is a float corresponding to the slope of the rate-distoriton function at the point where evaluation is required
  • +
+
+ + +
+
+
+ ln_pxy + + +
+ + + + +
+
+
+ ln_px + + +
+ + + + +
+
+
+ px + + +
+ + + + +
+
+
+ ln_py_x + + +
+ + + + +
+
+
+ results: list[IBResult] + + +
+ + + + +
+
+ +
+ + def + get_results(self) -> list[IBResult]: + + + +
+ +
124    def get_results(self) -> list[IBResult]:
+125        return super().get_results()
+
+ + + + +
+
+ +
+ + def + next_dist_mat(self, *args, **kwargs) -> None: + + + +
+ +
127    def next_dist_mat(
+128        self,
+129        *args,
+130        **kwargs,
+131    ) -> None:
+132        """IB distortion matrix."""
+133        self.dist_mat = ib_kl(np.exp(self.ln_py_x), np.exp(self.ln_qy_xhat))
+
+ + +

IB distortion matrix.

+
+ + +
+
+ +
+ + def + update_eqs(self, beta, *args, **kwargs) -> None: + + + +
+ +
135    def update_eqs(
+136        self,
+137        beta,
+138        *args,
+139        **kwargs,
+140    ) -> None:
+141        """Iterate the IB update equations."""
+142        self.ln_qxhat = next_ln_qxhat(self.ln_px, self.ln_qxhat_x)
+143        self.ln_qy_xhat = next_ln_qy_xhat(self.ln_pxy, self.ln_qxhat_x)
+144        self.next_dist_mat(*args, **kwargs)
+145        self.ln_qxhat_x = next_ln_qxhat_x(self.ln_qxhat, beta, self.dist_mat)
+
+ + +

Iterate the IB update equations.

+
+ + +
+
+ +
+ + def + compute_distortion(self, *args, **kwargs) -> float: + + + +
+ +
147    def compute_distortion(self, *args, **kwargs) -> float:
+148        # NOTE: we may still need to debug this; watch out for negative values
+149        # return np.exp(logsumexp(self.ln_px + self.ln_qxhat_x + np.log(self.dist_mat)))
+150        I_xy = mutual_info(np.exp(self.ln_pxy))
+151        edkl = I_xy - self.compute_accuracy()
+152        return edkl
+
+ + +

Compute the expected distortion for the current p(x), q(xhat|x) and dist_mat.

+
+ + +
+
+ +
+ + def + compute_accuracy(self, *args, **kwargs) -> float: + + + +
+ +
154    def compute_accuracy(self, *args, **kwargs) -> float:
+155        return information_cond(
+156            np.exp(self.ln_qxhat),
+157            np.exp(self.ln_qy_xhat),
+158        )
+
+ + + + +
+
+ +
+ + def + next_result( self, beta, *args, **kwargs) -> IBResult: + + + +
+ +
160    def next_result(self, beta, *args, **kwargs) -> IBResult:
+161        """Get the result of the converged BA iteration for the IB objective.
+162
+163        Returns:
+164            an IBResult namedtuple of `(qxhat_x, rate, distortion, accuracy, beta)` values. This is:
+165
+166                `qxhat_x`, the optimal encoder, such that the
+167
+168                `rate` (in bits) of compressing X into X_hat, is minimized for the level of
+169
+170                `distortion` between X, X_hat with respect to Y, i.e. the
+171
+172                `accuracy` I[X_hat:Y] is maximized, for the specified
+173
+174                `beta` trade-off parameter
+175        """
+176        return IBResult(
+177            np.exp(self.ln_qxhat_x),
+178            self.compute_rate(),
+179            self.compute_distortion(),
+180            self.compute_accuracy(),
+181            beta,
+182        )
+
+ + +

Get the result of the converged BA iteration for the IB objective.

+ +
Returns:
+ +
+

an IBResult namedtuple of (qxhat_x, rate, distortion, accuracy, beta) values. This is:

+ +
`qxhat_x`, the optimal encoder, such that the
+
+`rate` (in bits) of compressing X into X_hat, is minimized for the level of
+
+`distortion` between X, X_hat with respect to Y, i.e. the
+
+`accuracy` I[X_hat:Y] is maximized, for the specified
+
+`beta` trade-off parameter
+
+
+
+ + +
+ +
+
+ + \ No newline at end of file diff --git a/docs/ultk/effcomm/information_bottleneck/modeling.html b/docs/ultk/effcomm/information_bottleneck/modeling.html new file mode 100644 index 00000000..a0fe40a5 --- /dev/null +++ b/docs/ultk/effcomm/information_bottleneck/modeling.html @@ -0,0 +1,1928 @@ + + + + + + + ultk.effcomm.information_bottleneck.modeling API documentation + + + + + + + + + + + + +
+
+

+ultk.effcomm.information_bottleneck.modeling

+ + + + + + + +
  1"""Re-implementation of the IBNamingModel at https://github.com/nogazs/ib-color-naming/blob/master/src/ib_naming_model.py."""
+  2
+  3import numpy as np
+  4import warnings
+  5from ultk.util.io import read_pickle, write_pickle
+  6from ultk.language.language import Language, Expression, Meaning, FrozenDict, Universe
+  7from .tools import mutual_info, information_cond
+  8from .ib import IBOptimizer, IBResult
+  9from ..probability import joint
+ 10
+ 11##############################################################################
+ 12# Base IBNamingModel class
+ 13##############################################################################
+ 14
+ 15class IBNamingModel:
+ 16    """A model for simulating Information Bottleneck (IB) naming systems."""
+ 17
+ 18    def __init__(
+ 19        self, 
+ 20        pM: np.ndarray, 
+ 21        pU_M: np.ndarray, 
+ 22        betas: np.ndarray, 
+ 23        IB_curve: tuple[np.ndarray, np.ndarray], 
+ 24        qW_M: np.ndarray,
+ 25    ):
+ 26        """
+ 27        Initializes the IBNamingModel with given parameters.
+ 28
+ 29        Args:
+ 30            pM (np.ndarray): Prior distribution over meanings. Expected shape is (n, 1).
+ 31            pU_M (np.ndarray): Conditional distribution of observations given meanings.
+ 32            betas (np.ndarray): Array of beta values used for the IB curve.
+ 33            IB_curve (tuple[np.ndarray, np.ndarray]): tuple containing complexity and accuracy values along the IB curve.
+ 34            qW_M (np.ndarray): Initial encoder (naming system) matrix.
+ 35        """
+ 36        self.pM = pM if len(pM.shape) == 2 else pM[:, None]
+ 37        self.pU_M = pU_M
+ 38        self.I_MU = mutual_info(pU_M * self.pM)
+ 39        self.betas = betas
+ 40        self.IB_curve = np.array(IB_curve)
+ 41        self.qW_M = qW_M
+ 42        self.qW_M_orig = None
+ 43        self.F = IB_curve[0] - betas * IB_curve[1]
+ 44
+ 45    def m_hat(self, qW_M: np.ndarray) -> np.ndarray:
+ 46        """
+ 47        Computes the optimal Bayesian listener corresponding to the encoder.
+ 48
+ 49        Args:
+ 50            qW_M (np.ndarray): Encoder (naming system) matrix.
+ 51
+ 52        Returns:
+ 53            np.ndarray: Optimal decoder that corresponds to the given encoder.
+ 54        """
+ 55        pMW = qW_M * self.pM
+ 56        pM_W = pMW.T / pMW.sum(axis=0)[:, None]
+ 57        return pM_W.dot(self.pU_M)
+ 58
+ 59    def complexity(self, pW_M: np.ndarray) -> float:
+ 60        """
+ 61        Calculates the mutual information I(M;W) for a given encoder.
+ 62
+ 63        Args:
+ 64            pW_M (np.ndarray): Encoder (naming system) matrix.
+ 65
+ 66        Returns:
+ 67            float: Mutual information I(M;W).
+ 68        """
+ 69        return mutual_info(pW_M * self.pM)
+ 70
+ 71    def accuracy(self, pW_M: np.ndarray) -> float:
+ 72        """
+ 73        Calculates the mutual information I(W;U) for a given encoder.
+ 74
+ 75        Args:
+ 76            pW_M (np.ndarray): Encoder (naming system) matrix.
+ 77
+ 78        Returns:
+ 79            float: Mutual information I(W;U).
+ 80        """
+ 81        pMW = pW_M * self.pM
+ 82        pWU = pMW.T @ self.pU_M
+ 83        return mutual_info(pWU)
+ 84
+ 85    def d_IB(self, pW_M: np.ndarray) -> float:
+ 86        """
+ 87        Calculates the IB distortion for a given encoder, i.e. the KL divergence between speaker and listener meanings, $
+ 88        \mathbb{E}\left[D[m||\hat{m}]\right] = I(M;U) - I(W;U)$.
+ 89
+ 90        Args:
+ 91            pW_M (np.ndarray): Encoder (naming system) matrix.
+ 92
+ 93        Returns:
+ 94            float: Deviation from the optimal IB solution.
+ 95        """
+ 96        return self.I_MU - self.accuracy(pW_M)
+ 97
+ 98    def fit(self, pW_M: np.ndarray) -> tuple[float, float, float, np.ndarray]:
+ 99        """
+100        Fits the naming system to the IB curve.
+101
+102        Args:
+103            pW_M (np.ndarray): Encoder (naming system) matrix.
+104
+105        Returns:
+106            tuple containing:
+107                - epsilon (float): Deviation from optimality of pW_M.
+108                - gnid (float): Generalized normalized information distance (gNID) between qW_M and qW_M_fit.
+109                - bl (float): Fitted value of beta.
+110                - qW_M_fit (np.ndarray): Optimal IB system at bl.
+111        """
+112        Fl = self.complexity(pW_M) - self.betas * self.accuracy(pW_M)
+113        dFl = Fl - self.F
+114        bl_ind = dFl.argmin()
+115        bl = self.betas[bl_ind]
+116        epsilon = dFl.min() / bl
+117        qW_M_fit = self.qW_M[bl_ind]
+118        gnid = gNID(pW_M, qW_M_fit, self.pM)
+119        return epsilon, gnid, bl, qW_M_fit
+120    
+121    def save(self, fn: str = "ib_naming_model.pkl") -> None:
+122        """Save as pickle binary."""
+123        write_pickle(fn, self)
+124
+125    @classmethod
+126    def from_pickle(cls, fn: str):
+127        breakpoint()
+128        return read_pickle(fn)
+129
+130
+131# Helper
+132def gNID(pW_X: np.ndarray, pV_X: np.ndarray, pX: np.ndarray):
+133    """Compute Generalized Normalized Informational Distance (gNID, in Zaslavsky et al. 2018, SI, Section 3.2) between two encoders. Code credit: https://github.com/nogazs/ib-color-naming/blob/master/src/tools.py#L94
+134
+135    Args:
+136        pW_X: first encoder of shape `(|meanings|, |words|)`
+137
+138        pV_X: second encoder of shape `(|meanings|, |words|)`
+139
+140        pX: prior over source variables of shape `(|meanings|,)`
+141    """
+142    if len(pX.shape) == 1:
+143        pX = pX[:, None]
+144    elif pX.shape[0] == 1 and pX.shape[1] > 1:
+145        pX = pX.T
+146    pXW = pW_X * pX
+147    pWV = pXW.T @ (pV_X)
+148    pWW = pXW.T @ (pW_X)
+149    pVV = (pV_X * pX).T @ (pV_X)
+150    score = 1 - mutual_info(pWV) / (np.max([mutual_info(pWW), mutual_info(pVV)]))
+151    if score < 0:
+152        # N.B.: gNID is not necessarily non-negative (See SI, Section 3.2, paragraph 2.)
+153        warnings.warn(f"Negative gNID: {score}.")    
+154    return score
+155
+156
+157##############################################################################
+158# IB Bound computation
+159##############################################################################
+160
+161def compute_bound(
+162    pU_M: np.ndarray,
+163    pM: np.ndarray,
+164    betas: np.ndarray = np.logspace(0, 10, 100),
+165    **kwargs,
+166) -> list[IBResult]:
+167    """
+168    Computes the IB bound based on input distributions.
+169
+170    Args:
+171        pU_M (np.ndarray): Conditional distribution of observations given meanings.
+172        pM (np.ndarray, optional): Prior distribution over meanings. Defaults to None.
+173        betas (np.ndarray, optional): Range of beta values for the IB curve. Defaults to logspace(0, 10, 100).
+174        **kwargs: Additional parameters for the IB optimizer.
+175
+176    Returns:
+177        list[IBResult]: List of results from the IB optimizer.
+178    """
+179    pxy = joint(pU_M, pM)
+180    optim = IBOptimizer(
+181        pxy,
+182        betas,
+183        **kwargs,
+184    )
+185    results = optim.get_results()
+186    return results
+187
+188def get_ib_naming_model(
+189    pU_M: np.ndarray,
+190    pM: np.ndarray = None,
+191    **bound_kwargs,    
+192) -> IBNamingModel:
+193    """
+194    Constructs an IBNamingModel by constructing the IB bound for the domain distribution P(M,U).
+195
+196    Args:
+197        pU_M (np.ndarray): Conditional distribution of observations given meanings.
+198        pM (np.ndarray, optional): Prior distribution over meanings. Defaults to None.
+199        gammas (np.ndarray, optional): Range of gamma values for similarity selection. Defaults to logspace(-2, 2, 1000).
+200        **bound_kwargs: Additional parameters for IB bound computation. See `compute_bound` kwargs.
+201
+202    Returns:
+203        IBNamingModel: An IBNamingModel instance configured with the computed IB bound.    
+204    
+205    """
+206    results = compute_bound(pU_M, pM, **bound_kwargs)
+207
+208    qW_M, complexity, accuracy, beta = zip(*[(res.qxhat_x, res.rate, res.accuracy, res.beta) for res in results if res is not None])
+209
+210    IB_curve = (np.array(complexity), np.array(accuracy))
+211    
+212    naming_model = IBNamingModel(
+213        pM[:, None],
+214        pU_M,
+215        beta,
+216        IB_curve,
+217        qW_M,
+218    )
+219
+220    return naming_model    
+221
+222
+223##############################################################################
+224# Integration with ULTK Language
+225##############################################################################
+226
+227def encoder_to_language(
+228    qW_M: np.ndarray, 
+229    naming_model: IBNamingModel,
+230    universe: Universe,
+231    words: list[str] = None, 
+232    name: str = None, 
+233    natural: bool = False,
+234    ) -> Language:
+235    """Convert a stochastic encoder to a ULTK Language using an IBNamingModel bayesian decoder.
+236    
+237    Args:
+238        qW_M (np.ndarray): A stochastic matrix where rows correspond to meanings
+239            and columns correspond to words, defining the encoder.
+240        naming_model (IBNamingModel): An instance of the IBNamingModel used to 
+241            decode the encoder into a language.
+242        universe (Universe): The universe containing referents and the structure 
+243            in which the meanings are defined.
+244        words (list[str], optional): A list of word forms to use. If None, default 
+245            numeric indices are used. Defaults to None.
+246        name (str, optional): The name of the resulting Language. Defaults to None.
+247        natural (bool, optional): Whether the resulting Language is a natural 
+248            language. Defaults to False.
+249
+250    Returns:
+251        Language: The constructed Language object, where each expression maps a 
+252        word form to its corresponding meaning.
+253    """
+254
+255    if words is None:
+256        words = range(qW_M.shape[1])
+257
+258    return Language(
+259        expressions=tuple([
+260            Expression(
+261                form=str(words[i]),
+262                meaning=Meaning[float](
+263                    FrozenDict({
+264                        # define each mapping from referent -> probability
+265                        universe.referents[chip_num]: qm[chip_num]
+266                        for chip_num in range(qW_M.shape[0])
+267                    }), 
+268                    universe,
+269                )
+270            )
+271        for i, qm in enumerate(naming_model.m_hat(qW_M))
+272        ]),
+273        name=name,
+274        natural=natural,
+275    )
+276
+277
+278
+279
+280def pU_M_from_similarity(gamma: float, sim_mat: np.ndarray) -> np.ndarray:
+281    """
+282    Computes the conditional distribution p(U|M) based on similarity.
+283
+284    Args:
+285        gamma (float): Scaling factor for the similarity matrix.
+286        sim_mat (np.ndarray): Similarity matrix representing similarity between meanings (M) and referents (U).
+287
+288    Returns:
+289        np.ndarray: Conditional distribution p(U|M).
+290    """
+291    pU_M = np.exp(gamma * sim_mat)
+292    pU_M /= pU_M.sum(axis=1, keepdims=True)
+293    return pU_M
+294
+295
+296def get_imu(gamma: float, sim_mat: np.ndarray, pM: np.ndarray = None) -> np.ndarray:
+297    """
+298    Calculates the mutual information I(M;U) for a distribution p(U|M) ∝ exp(gamma * sim(u, m)).
+299
+300    Args:
+301        gamma (float): Scaling factor for the similarity matrix.
+302        sim_mat (np.ndarray): Similarity matrix representing similarity between meanings (M) and referents (U).
+303        pM (np.ndarray, optional): Prior distribution over meanings (M). Defaults to a uniform distribution.
+304
+305    Returns:
+306        np.ndarray: Mutual information I(M;U).
+307    """
+308    return information_cond(
+309        pB_A=pU_M_from_similarity(gamma, sim_mat),
+310        pA=pM if pM is not None else np.full(sim_mat.shape[0], 1/sim_mat.shape[0])
+311    )
+312
+313
+314def select_gamma(
+315    similarity_matrix: np.ndarray,
+316    pM: np.ndarray = None,
+317    gammas: np.ndarray = np.logspace(-2, 2, 1000)
+318) -> tuple[float, float, int, np.ndarray, np.ndarray]:
+319    """
+320    Selects the gamma value that corresponds to the midpoint of I(M;U) for a distribution p(U|M) ∝ exp(gamma * sim(u, m)).
+321
+322    Args:
+323        similarity_matrix (np.ndarray): Matrix encoding pairwise similarities between meanings (M) and referents (U).
+324        pM (np.ndarray, optional): Communicative need distribution over meanings (M). Defaults to None.
+325        gammas (np.ndarray, optional): Range of gamma values to sample. Defaults to logspace(-2, 2, 1000).
+326
+327    Returns:
+328        tuple: A tuple containing:
+329            - float: Gamma value corresponding to the midpoint of I(M;U).
+330            - float: Midpoint of I(M;U).
+331            - int: Index of the midpoint in the gamma array.
+332            - np.ndarray: Array of gamma values used.
+333            - np.ndarray: Array of computed I(M;U) values.
+334    """
+335    imus = np.array([get_imu(g, similarity_matrix, pM) for g in gammas])
+336    mid = (np.max(imus) - np.min(imus)) / 2
+337    mid_ind = np.argmin((imus - mid) ** 2)
+338    return gammas[mid_ind], mid, mid_ind, gammas, imus
+
+ + +
+
+ +
+ + class + IBNamingModel: + + + +
+ +
 16class IBNamingModel:
+ 17    """A model for simulating Information Bottleneck (IB) naming systems."""
+ 18
+ 19    def __init__(
+ 20        self, 
+ 21        pM: np.ndarray, 
+ 22        pU_M: np.ndarray, 
+ 23        betas: np.ndarray, 
+ 24        IB_curve: tuple[np.ndarray, np.ndarray], 
+ 25        qW_M: np.ndarray,
+ 26    ):
+ 27        """
+ 28        Initializes the IBNamingModel with given parameters.
+ 29
+ 30        Args:
+ 31            pM (np.ndarray): Prior distribution over meanings. Expected shape is (n, 1).
+ 32            pU_M (np.ndarray): Conditional distribution of observations given meanings.
+ 33            betas (np.ndarray): Array of beta values used for the IB curve.
+ 34            IB_curve (tuple[np.ndarray, np.ndarray]): tuple containing complexity and accuracy values along the IB curve.
+ 35            qW_M (np.ndarray): Initial encoder (naming system) matrix.
+ 36        """
+ 37        self.pM = pM if len(pM.shape) == 2 else pM[:, None]
+ 38        self.pU_M = pU_M
+ 39        self.I_MU = mutual_info(pU_M * self.pM)
+ 40        self.betas = betas
+ 41        self.IB_curve = np.array(IB_curve)
+ 42        self.qW_M = qW_M
+ 43        self.qW_M_orig = None
+ 44        self.F = IB_curve[0] - betas * IB_curve[1]
+ 45
+ 46    def m_hat(self, qW_M: np.ndarray) -> np.ndarray:
+ 47        """
+ 48        Computes the optimal Bayesian listener corresponding to the encoder.
+ 49
+ 50        Args:
+ 51            qW_M (np.ndarray): Encoder (naming system) matrix.
+ 52
+ 53        Returns:
+ 54            np.ndarray: Optimal decoder that corresponds to the given encoder.
+ 55        """
+ 56        pMW = qW_M * self.pM
+ 57        pM_W = pMW.T / pMW.sum(axis=0)[:, None]
+ 58        return pM_W.dot(self.pU_M)
+ 59
+ 60    def complexity(self, pW_M: np.ndarray) -> float:
+ 61        """
+ 62        Calculates the mutual information I(M;W) for a given encoder.
+ 63
+ 64        Args:
+ 65            pW_M (np.ndarray): Encoder (naming system) matrix.
+ 66
+ 67        Returns:
+ 68            float: Mutual information I(M;W).
+ 69        """
+ 70        return mutual_info(pW_M * self.pM)
+ 71
+ 72    def accuracy(self, pW_M: np.ndarray) -> float:
+ 73        """
+ 74        Calculates the mutual information I(W;U) for a given encoder.
+ 75
+ 76        Args:
+ 77            pW_M (np.ndarray): Encoder (naming system) matrix.
+ 78
+ 79        Returns:
+ 80            float: Mutual information I(W;U).
+ 81        """
+ 82        pMW = pW_M * self.pM
+ 83        pWU = pMW.T @ self.pU_M
+ 84        return mutual_info(pWU)
+ 85
+ 86    def d_IB(self, pW_M: np.ndarray) -> float:
+ 87        """
+ 88        Calculates the IB distortion for a given encoder, i.e. the KL divergence between speaker and listener meanings, $
+ 89        \mathbb{E}\left[D[m||\hat{m}]\right] = I(M;U) - I(W;U)$.
+ 90
+ 91        Args:
+ 92            pW_M (np.ndarray): Encoder (naming system) matrix.
+ 93
+ 94        Returns:
+ 95            float: Deviation from the optimal IB solution.
+ 96        """
+ 97        return self.I_MU - self.accuracy(pW_M)
+ 98
+ 99    def fit(self, pW_M: np.ndarray) -> tuple[float, float, float, np.ndarray]:
+100        """
+101        Fits the naming system to the IB curve.
+102
+103        Args:
+104            pW_M (np.ndarray): Encoder (naming system) matrix.
+105
+106        Returns:
+107            tuple containing:
+108                - epsilon (float): Deviation from optimality of pW_M.
+109                - gnid (float): Generalized normalized information distance (gNID) between qW_M and qW_M_fit.
+110                - bl (float): Fitted value of beta.
+111                - qW_M_fit (np.ndarray): Optimal IB system at bl.
+112        """
+113        Fl = self.complexity(pW_M) - self.betas * self.accuracy(pW_M)
+114        dFl = Fl - self.F
+115        bl_ind = dFl.argmin()
+116        bl = self.betas[bl_ind]
+117        epsilon = dFl.min() / bl
+118        qW_M_fit = self.qW_M[bl_ind]
+119        gnid = gNID(pW_M, qW_M_fit, self.pM)
+120        return epsilon, gnid, bl, qW_M_fit
+121    
+122    def save(self, fn: str = "ib_naming_model.pkl") -> None:
+123        """Save as pickle binary."""
+124        write_pickle(fn, self)
+125
+126    @classmethod
+127    def from_pickle(cls, fn: str):
+128        breakpoint()
+129        return read_pickle(fn)
+
+ + +

A model for simulating Information Bottleneck (IB) naming systems.

+
+ + +
+ +
+ + IBNamingModel( pM: numpy.ndarray, pU_M: numpy.ndarray, betas: numpy.ndarray, IB_curve: tuple[numpy.ndarray, numpy.ndarray], qW_M: numpy.ndarray) + + + +
+ +
19    def __init__(
+20        self, 
+21        pM: np.ndarray, 
+22        pU_M: np.ndarray, 
+23        betas: np.ndarray, 
+24        IB_curve: tuple[np.ndarray, np.ndarray], 
+25        qW_M: np.ndarray,
+26    ):
+27        """
+28        Initializes the IBNamingModel with given parameters.
+29
+30        Args:
+31            pM (np.ndarray): Prior distribution over meanings. Expected shape is (n, 1).
+32            pU_M (np.ndarray): Conditional distribution of observations given meanings.
+33            betas (np.ndarray): Array of beta values used for the IB curve.
+34            IB_curve (tuple[np.ndarray, np.ndarray]): tuple containing complexity and accuracy values along the IB curve.
+35            qW_M (np.ndarray): Initial encoder (naming system) matrix.
+36        """
+37        self.pM = pM if len(pM.shape) == 2 else pM[:, None]
+38        self.pU_M = pU_M
+39        self.I_MU = mutual_info(pU_M * self.pM)
+40        self.betas = betas
+41        self.IB_curve = np.array(IB_curve)
+42        self.qW_M = qW_M
+43        self.qW_M_orig = None
+44        self.F = IB_curve[0] - betas * IB_curve[1]
+
+ + +

Initializes the IBNamingModel with given parameters.

+ +
Arguments:
+ +
    +
  • pM (np.ndarray): Prior distribution over meanings. Expected shape is (n, 1).
  • +
  • pU_M (np.ndarray): Conditional distribution of observations given meanings.
  • +
  • betas (np.ndarray): Array of beta values used for the IB curve.
  • +
  • IB_curve (tuple[np.ndarray, np.ndarray]): tuple containing complexity and accuracy values along the IB curve.
  • +
  • qW_M (np.ndarray): Initial encoder (naming system) matrix.
  • +
+
+ + +
+
+
+ pM + + +
+ + + + +
+
+
+ pU_M + + +
+ + + + +
+
+
+ I_MU + + +
+ + + + +
+
+
+ betas + + +
+ + + + +
+
+
+ IB_curve + + +
+ + + + +
+
+
+ qW_M + + +
+ + + + +
+
+
+ qW_M_orig + + +
+ + + + +
+
+
+ F + + +
+ + + + +
+
+ +
+ + def + m_hat(self, qW_M: numpy.ndarray) -> numpy.ndarray: + + + +
+ +
46    def m_hat(self, qW_M: np.ndarray) -> np.ndarray:
+47        """
+48        Computes the optimal Bayesian listener corresponding to the encoder.
+49
+50        Args:
+51            qW_M (np.ndarray): Encoder (naming system) matrix.
+52
+53        Returns:
+54            np.ndarray: Optimal decoder that corresponds to the given encoder.
+55        """
+56        pMW = qW_M * self.pM
+57        pM_W = pMW.T / pMW.sum(axis=0)[:, None]
+58        return pM_W.dot(self.pU_M)
+
+ + +

Computes the optimal Bayesian listener corresponding to the encoder.

+ +
Arguments:
+ +
    +
  • qW_M (np.ndarray): Encoder (naming system) matrix.
  • +
+ +
Returns:
+ +
+

np.ndarray: Optimal decoder that corresponds to the given encoder.

+
+
+ + +
+
+ +
+ + def + complexity(self, pW_M: numpy.ndarray) -> float: + + + +
+ +
60    def complexity(self, pW_M: np.ndarray) -> float:
+61        """
+62        Calculates the mutual information I(M;W) for a given encoder.
+63
+64        Args:
+65            pW_M (np.ndarray): Encoder (naming system) matrix.
+66
+67        Returns:
+68            float: Mutual information I(M;W).
+69        """
+70        return mutual_info(pW_M * self.pM)
+
+ + +

Calculates the mutual information I(M;W) for a given encoder.

+ +
Arguments:
+ +
    +
  • pW_M (np.ndarray): Encoder (naming system) matrix.
  • +
+ +
Returns:
+ +
+

float: Mutual information I(M;W).

+
+
+ + +
+
+ +
+ + def + accuracy(self, pW_M: numpy.ndarray) -> float: + + + +
+ +
72    def accuracy(self, pW_M: np.ndarray) -> float:
+73        """
+74        Calculates the mutual information I(W;U) for a given encoder.
+75
+76        Args:
+77            pW_M (np.ndarray): Encoder (naming system) matrix.
+78
+79        Returns:
+80            float: Mutual information I(W;U).
+81        """
+82        pMW = pW_M * self.pM
+83        pWU = pMW.T @ self.pU_M
+84        return mutual_info(pWU)
+
+ + +

Calculates the mutual information I(W;U) for a given encoder.

+ +
Arguments:
+ +
    +
  • pW_M (np.ndarray): Encoder (naming system) matrix.
  • +
+ +
Returns:
+ +
+

float: Mutual information I(W;U).

+
+
+ + +
+
+ +
+ + def + d_IB(self, pW_M: numpy.ndarray) -> float: + + + +
+ +
86    def d_IB(self, pW_M: np.ndarray) -> float:
+87        """
+88        Calculates the IB distortion for a given encoder, i.e. the KL divergence between speaker and listener meanings, $
+89        \mathbb{E}\left[D[m||\hat{m}]\right] = I(M;U) - I(W;U)$.
+90
+91        Args:
+92            pW_M (np.ndarray): Encoder (naming system) matrix.
+93
+94        Returns:
+95            float: Deviation from the optimal IB solution.
+96        """
+97        return self.I_MU - self.accuracy(pW_M)
+
+ + +

Calculates the IB distortion for a given encoder, i.e. the KL divergence between speaker and listener meanings, $ +\mathbb{E}\left[D[m||\hat{m}] +ight] = I(M;U) - I(W;U)$.

+ +
Arguments:
+ +
    +
  • pW_M (np.ndarray): Encoder (naming system) matrix.
  • +
+ +
Returns:
+ +
+

float: Deviation from the optimal IB solution.

+
+
+ + +
+
+ +
+ + def + fit(self, pW_M: numpy.ndarray) -> tuple[float, float, float, numpy.ndarray]: + + + +
+ +
 99    def fit(self, pW_M: np.ndarray) -> tuple[float, float, float, np.ndarray]:
+100        """
+101        Fits the naming system to the IB curve.
+102
+103        Args:
+104            pW_M (np.ndarray): Encoder (naming system) matrix.
+105
+106        Returns:
+107            tuple containing:
+108                - epsilon (float): Deviation from optimality of pW_M.
+109                - gnid (float): Generalized normalized information distance (gNID) between qW_M and qW_M_fit.
+110                - bl (float): Fitted value of beta.
+111                - qW_M_fit (np.ndarray): Optimal IB system at bl.
+112        """
+113        Fl = self.complexity(pW_M) - self.betas * self.accuracy(pW_M)
+114        dFl = Fl - self.F
+115        bl_ind = dFl.argmin()
+116        bl = self.betas[bl_ind]
+117        epsilon = dFl.min() / bl
+118        qW_M_fit = self.qW_M[bl_ind]
+119        gnid = gNID(pW_M, qW_M_fit, self.pM)
+120        return epsilon, gnid, bl, qW_M_fit
+
+ + +

Fits the naming system to the IB curve.

+ +
Arguments:
+ +
    +
  • pW_M (np.ndarray): Encoder (naming system) matrix.
  • +
+ +
Returns:
+ +
+

tuple containing: + - epsilon (float): Deviation from optimality of pW_M. + - gnid (float): Generalized normalized information distance (gNID) between qW_M and qW_M_fit. + - bl (float): Fitted value of beta. + - qW_M_fit (np.ndarray): Optimal IB system at bl.

+
+
+ + +
+
+ +
+ + def + save(self, fn: str = 'ib_naming_model.pkl') -> None: + + + +
+ +
122    def save(self, fn: str = "ib_naming_model.pkl") -> None:
+123        """Save as pickle binary."""
+124        write_pickle(fn, self)
+
+ + +

Save as pickle binary.

+
+ + +
+
+ +
+
@classmethod
+ + def + from_pickle(cls, fn: str): + + + +
+ +
126    @classmethod
+127    def from_pickle(cls, fn: str):
+128        breakpoint()
+129        return read_pickle(fn)
+
+ + + + +
+
+
+ +
+ + def + gNID(pW_X: numpy.ndarray, pV_X: numpy.ndarray, pX: numpy.ndarray): + + + +
+ +
133def gNID(pW_X: np.ndarray, pV_X: np.ndarray, pX: np.ndarray):
+134    """Compute Generalized Normalized Informational Distance (gNID, in Zaslavsky et al. 2018, SI, Section 3.2) between two encoders. Code credit: https://github.com/nogazs/ib-color-naming/blob/master/src/tools.py#L94
+135
+136    Args:
+137        pW_X: first encoder of shape `(|meanings|, |words|)`
+138
+139        pV_X: second encoder of shape `(|meanings|, |words|)`
+140
+141        pX: prior over source variables of shape `(|meanings|,)`
+142    """
+143    if len(pX.shape) == 1:
+144        pX = pX[:, None]
+145    elif pX.shape[0] == 1 and pX.shape[1] > 1:
+146        pX = pX.T
+147    pXW = pW_X * pX
+148    pWV = pXW.T @ (pV_X)
+149    pWW = pXW.T @ (pW_X)
+150    pVV = (pV_X * pX).T @ (pV_X)
+151    score = 1 - mutual_info(pWV) / (np.max([mutual_info(pWW), mutual_info(pVV)]))
+152    if score < 0:
+153        # N.B.: gNID is not necessarily non-negative (See SI, Section 3.2, paragraph 2.)
+154        warnings.warn(f"Negative gNID: {score}.")    
+155    return score
+
+ + +

Compute Generalized Normalized Informational Distance (gNID, in Zaslavsky et al. 2018, SI, Section 3.2) between two encoders. Code credit: https://github.com/nogazs/ib-color-naming/blob/master/src/tools.py#L94

+ +
Arguments:
+ +
    +
  • pW_X: first encoder of shape (|meanings|, |words|)
  • +
  • pV_X: second encoder of shape (|meanings|, |words|)
  • +
  • pX: prior over source variables of shape (|meanings|,)
  • +
+
+ + +
+
+ +
+ + def + compute_bound( pU_M: numpy.ndarray, pM: numpy.ndarray, betas: numpy.ndarray = array([1.00000000e+00, 1.26185688e+00, 1.59228279e+00, 2.00923300e+00, + 2.53536449e+00, 3.19926714e+00, 4.03701726e+00, 5.09413801e+00, + 6.42807312e+00, 8.11130831e+00, 1.02353102e+01, 1.29154967e+01, + 1.62975083e+01, 2.05651231e+01, 2.59502421e+01, 3.27454916e+01, + 4.13201240e+01, 5.21400829e+01, 6.57933225e+01, 8.30217568e+01, + 1.04761575e+02, 1.32194115e+02, 1.66810054e+02, 2.10490414e+02, + 2.65608778e+02, 3.35160265e+02, 4.22924287e+02, 5.33669923e+02, + 6.73415066e+02, 8.49753436e+02, 1.07226722e+03, 1.35304777e+03, + 1.70735265e+03, 2.15443469e+03, 2.71858824e+03, 3.43046929e+03, + 4.32876128e+03, 5.46227722e+03, 6.89261210e+03, 8.69749003e+03, + 1.09749877e+04, 1.38488637e+04, 1.74752840e+04, 2.20513074e+04, + 2.78255940e+04, 3.51119173e+04, 4.43062146e+04, 5.59081018e+04, + 7.05480231e+04, 8.90215085e+04, 1.12332403e+05, 1.41747416e+05, + 1.78864953e+05, 2.25701972e+05, 2.84803587e+05, 3.59381366e+05, + 4.53487851e+05, 5.72236766e+05, 7.22080902e+05, 9.11162756e+05, + 1.14975700e+06, 1.45082878e+06, 1.83073828e+06, 2.31012970e+06, + 2.91505306e+06, 3.67837977e+06, 4.64158883e+06, 5.85702082e+06, + 7.39072203e+06, 9.32603347e+06, 1.17681195e+07, 1.48496826e+07, + 1.87381742e+07, 2.36448941e+07, 2.98364724e+07, 3.76493581e+07, + 4.75081016e+07, 5.99484250e+07, 7.56463328e+07, 9.54548457e+07, + 1.20450354e+08, 1.51991108e+08, 1.91791026e+08, 2.42012826e+08, + 3.05385551e+08, 3.85352859e+08, 4.86260158e+08, 6.13590727e+08, + 7.74263683e+08, 9.77009957e+08, 1.23284674e+09, 1.55567614e+09, + 1.96304065e+09, 2.47707636e+09, 3.12571585e+09, 3.94420606e+09, + 4.97702356e+09, 6.28029144e+09, 7.92482898e+09, 1.00000000e+10]), **kwargs) -> list[ultk.effcomm.information_bottleneck.ib.IBResult]: + + + +
+ +
162def compute_bound(
+163    pU_M: np.ndarray,
+164    pM: np.ndarray,
+165    betas: np.ndarray = np.logspace(0, 10, 100),
+166    **kwargs,
+167) -> list[IBResult]:
+168    """
+169    Computes the IB bound based on input distributions.
+170
+171    Args:
+172        pU_M (np.ndarray): Conditional distribution of observations given meanings.
+173        pM (np.ndarray, optional): Prior distribution over meanings. Defaults to None.
+174        betas (np.ndarray, optional): Range of beta values for the IB curve. Defaults to logspace(0, 10, 100).
+175        **kwargs: Additional parameters for the IB optimizer.
+176
+177    Returns:
+178        list[IBResult]: List of results from the IB optimizer.
+179    """
+180    pxy = joint(pU_M, pM)
+181    optim = IBOptimizer(
+182        pxy,
+183        betas,
+184        **kwargs,
+185    )
+186    results = optim.get_results()
+187    return results
+
+ + +

Computes the IB bound based on input distributions.

+ +
Arguments:
+ +
    +
  • pU_M (np.ndarray): Conditional distribution of observations given meanings.
  • +
  • pM (np.ndarray, optional): Prior distribution over meanings. Defaults to None.
  • +
  • betas (np.ndarray, optional): Range of beta values for the IB curve. Defaults to logspace(0, 10, 100).
  • +
  • **kwargs: Additional parameters for the IB optimizer.
  • +
+ +
Returns:
+ +
+

list[IBResult]: List of results from the IB optimizer.

+
+
+ + +
+
+ +
+ + def + get_ib_naming_model( pU_M: numpy.ndarray, pM: numpy.ndarray = None, **bound_kwargs) -> IBNamingModel: + + + +
+ +
189def get_ib_naming_model(
+190    pU_M: np.ndarray,
+191    pM: np.ndarray = None,
+192    **bound_kwargs,    
+193) -> IBNamingModel:
+194    """
+195    Constructs an IBNamingModel by constructing the IB bound for the domain distribution P(M,U).
+196
+197    Args:
+198        pU_M (np.ndarray): Conditional distribution of observations given meanings.
+199        pM (np.ndarray, optional): Prior distribution over meanings. Defaults to None.
+200        gammas (np.ndarray, optional): Range of gamma values for similarity selection. Defaults to logspace(-2, 2, 1000).
+201        **bound_kwargs: Additional parameters for IB bound computation. See `compute_bound` kwargs.
+202
+203    Returns:
+204        IBNamingModel: An IBNamingModel instance configured with the computed IB bound.    
+205    
+206    """
+207    results = compute_bound(pU_M, pM, **bound_kwargs)
+208
+209    qW_M, complexity, accuracy, beta = zip(*[(res.qxhat_x, res.rate, res.accuracy, res.beta) for res in results if res is not None])
+210
+211    IB_curve = (np.array(complexity), np.array(accuracy))
+212    
+213    naming_model = IBNamingModel(
+214        pM[:, None],
+215        pU_M,
+216        beta,
+217        IB_curve,
+218        qW_M,
+219    )
+220
+221    return naming_model    
+
+ + +

Constructs an IBNamingModel by constructing the IB bound for the domain distribution P(M,U).

+ +
Arguments:
+ +
    +
  • pU_M (np.ndarray): Conditional distribution of observations given meanings.
  • +
  • pM (np.ndarray, optional): Prior distribution over meanings. Defaults to None.
  • +
  • gammas (np.ndarray, optional): Range of gamma values for similarity selection. Defaults to logspace(-2, 2, 1000).
  • +
  • **bound_kwargs: Additional parameters for IB bound computation. See compute_bound kwargs.
  • +
+ +
Returns:
+ +
+

IBNamingModel: An IBNamingModel instance configured with the computed IB bound.

+
+
+ + +
+
+ +
+ + def + encoder_to_language( qW_M: numpy.ndarray, naming_model: IBNamingModel, universe: ultk.language.semantics.Universe, words: list[str] = None, name: str = None, natural: bool = False) -> ultk.language.language.Language: + + + +
+ +
228def encoder_to_language(
+229    qW_M: np.ndarray, 
+230    naming_model: IBNamingModel,
+231    universe: Universe,
+232    words: list[str] = None, 
+233    name: str = None, 
+234    natural: bool = False,
+235    ) -> Language:
+236    """Convert a stochastic encoder to a ULTK Language using an IBNamingModel bayesian decoder.
+237    
+238    Args:
+239        qW_M (np.ndarray): A stochastic matrix where rows correspond to meanings
+240            and columns correspond to words, defining the encoder.
+241        naming_model (IBNamingModel): An instance of the IBNamingModel used to 
+242            decode the encoder into a language.
+243        universe (Universe): The universe containing referents and the structure 
+244            in which the meanings are defined.
+245        words (list[str], optional): A list of word forms to use. If None, default 
+246            numeric indices are used. Defaults to None.
+247        name (str, optional): The name of the resulting Language. Defaults to None.
+248        natural (bool, optional): Whether the resulting Language is a natural 
+249            language. Defaults to False.
+250
+251    Returns:
+252        Language: The constructed Language object, where each expression maps a 
+253        word form to its corresponding meaning.
+254    """
+255
+256    if words is None:
+257        words = range(qW_M.shape[1])
+258
+259    return Language(
+260        expressions=tuple([
+261            Expression(
+262                form=str(words[i]),
+263                meaning=Meaning[float](
+264                    FrozenDict({
+265                        # define each mapping from referent -> probability
+266                        universe.referents[chip_num]: qm[chip_num]
+267                        for chip_num in range(qW_M.shape[0])
+268                    }), 
+269                    universe,
+270                )
+271            )
+272        for i, qm in enumerate(naming_model.m_hat(qW_M))
+273        ]),
+274        name=name,
+275        natural=natural,
+276    )
+
+ + +

Convert a stochastic encoder to a ULTK Language using an IBNamingModel bayesian decoder.

+ +
Arguments:
+ +
    +
  • qW_M (np.ndarray): A stochastic matrix where rows correspond to meanings +and columns correspond to words, defining the encoder.
  • +
  • naming_model (IBNamingModel): An instance of the IBNamingModel used to +decode the encoder into a language.
  • +
  • universe (Universe): The universe containing referents and the structure +in which the meanings are defined.
  • +
  • words (list[str], optional): A list of word forms to use. If None, default +numeric indices are used. Defaults to None.
  • +
  • name (str, optional): The name of the resulting Language. Defaults to None.
  • +
  • natural (bool, optional): Whether the resulting Language is a natural +language. Defaults to False.
  • +
+ +
Returns:
+ +
+

Language: The constructed Language object, where each expression maps a + word form to its corresponding meaning.

+
+
+ + +
+
+ +
+ + def + pU_M_from_similarity(gamma: float, sim_mat: numpy.ndarray) -> numpy.ndarray: + + + +
+ +
281def pU_M_from_similarity(gamma: float, sim_mat: np.ndarray) -> np.ndarray:
+282    """
+283    Computes the conditional distribution p(U|M) based on similarity.
+284
+285    Args:
+286        gamma (float): Scaling factor for the similarity matrix.
+287        sim_mat (np.ndarray): Similarity matrix representing similarity between meanings (M) and referents (U).
+288
+289    Returns:
+290        np.ndarray: Conditional distribution p(U|M).
+291    """
+292    pU_M = np.exp(gamma * sim_mat)
+293    pU_M /= pU_M.sum(axis=1, keepdims=True)
+294    return pU_M
+
+ + +

Computes the conditional distribution p(U|M) based on similarity.

+ +
Arguments:
+ +
    +
  • gamma (float): Scaling factor for the similarity matrix.
  • +
  • sim_mat (np.ndarray): Similarity matrix representing similarity between meanings (M) and referents (U).
  • +
+ +
Returns:
+ +
+

np.ndarray: Conditional distribution p(U|M).

+
+
+ + +
+
+ +
+ + def + get_imu( gamma: float, sim_mat: numpy.ndarray, pM: numpy.ndarray = None) -> numpy.ndarray: + + + +
+ +
297def get_imu(gamma: float, sim_mat: np.ndarray, pM: np.ndarray = None) -> np.ndarray:
+298    """
+299    Calculates the mutual information I(M;U) for a distribution p(U|M) ∝ exp(gamma * sim(u, m)).
+300
+301    Args:
+302        gamma (float): Scaling factor for the similarity matrix.
+303        sim_mat (np.ndarray): Similarity matrix representing similarity between meanings (M) and referents (U).
+304        pM (np.ndarray, optional): Prior distribution over meanings (M). Defaults to a uniform distribution.
+305
+306    Returns:
+307        np.ndarray: Mutual information I(M;U).
+308    """
+309    return information_cond(
+310        pB_A=pU_M_from_similarity(gamma, sim_mat),
+311        pA=pM if pM is not None else np.full(sim_mat.shape[0], 1/sim_mat.shape[0])
+312    )
+
+ + +

Calculates the mutual information I(M;U) for a distribution p(U|M) ∝ exp(gamma * sim(u, m)).

+ +
Arguments:
+ +
    +
  • gamma (float): Scaling factor for the similarity matrix.
  • +
  • sim_mat (np.ndarray): Similarity matrix representing similarity between meanings (M) and referents (U).
  • +
  • pM (np.ndarray, optional): Prior distribution over meanings (M). Defaults to a uniform distribution.
  • +
+ +
Returns:
+ +
+

np.ndarray: Mutual information I(M;U).

+
+
+ + +
+
+ +
+ + def + select_gamma( similarity_matrix: numpy.ndarray, pM: numpy.ndarray = None, gammas: numpy.ndarray = array([1.00000000e-02, 1.00926219e-02, 1.01861017e-02, 1.02804473e-02, + 1.03756668e-02, 1.04717682e-02, 1.05687597e-02, 1.06666496e-02, + 1.07654461e-02, 1.08651577e-02, 1.09657929e-02, 1.10673602e-02, + 1.11698682e-02, 1.12733256e-02, 1.13777413e-02, 1.14831241e-02, + 1.15894830e-02, 1.16968270e-02, 1.18051653e-02, 1.19145070e-02, + 1.20248614e-02, 1.21362380e-02, 1.22486461e-02, 1.23620954e-02, + 1.24765955e-02, 1.25921561e-02, 1.27087871e-02, 1.28264983e-02, + 1.29452998e-02, 1.30652016e-02, 1.31862140e-02, 1.33083472e-02, + 1.34316117e-02, 1.35560179e-02, 1.36815763e-02, 1.38082977e-02, + 1.39361927e-02, 1.40652724e-02, 1.41955477e-02, 1.43270295e-02, + 1.44597292e-02, 1.45936580e-02, 1.47288272e-02, 1.48652484e-02, + 1.50029332e-02, 1.51418933e-02, 1.52821404e-02, 1.54236865e-02, + 1.55665436e-02, 1.57107239e-02, 1.58562396e-02, 1.60031031e-02, + 1.61513269e-02, 1.63009236e-02, 1.64519059e-02, 1.66042866e-02, + 1.67580786e-02, 1.69132952e-02, 1.70699493e-02, 1.72280545e-02, + 1.73876240e-02, 1.75486715e-02, 1.77112106e-02, 1.78752553e-02, + 1.80408193e-02, 1.82079168e-02, 1.83765620e-02, 1.85467692e-02, + 1.87185529e-02, 1.88919278e-02, 1.90669084e-02, 1.92435098e-02, + 1.94217468e-02, 1.96016347e-02, 1.97831888e-02, 1.99664245e-02, + 2.01513573e-02, 2.03380031e-02, 2.05263775e-02, 2.07164968e-02, + 2.09083769e-02, 2.11020343e-02, 2.12974854e-02, 2.14947467e-02, + 2.16938352e-02, 2.18947676e-02, 2.20975611e-02, 2.23022330e-02, + 2.25088005e-02, 2.27172813e-02, 2.29276931e-02, 2.31400538e-02, + 2.33543814e-02, 2.35706941e-02, 2.37890104e-02, 2.40093488e-02, + 2.42317279e-02, 2.44561668e-02, 2.46826845e-02, 2.49113003e-02, + 2.51420335e-02, 2.53749038e-02, 2.56099310e-02, 2.58471351e-02, + 2.60865362e-02, 2.63281547e-02, 2.65720111e-02, 2.68181261e-02, + 2.70665207e-02, 2.73172160e-02, 2.75702333e-02, 2.78255940e-02, + 2.80833200e-02, 2.83434331e-02, 2.86059554e-02, 2.88709092e-02, + 2.91383170e-02, 2.94082017e-02, 2.96805861e-02, 2.99554933e-02, + 3.02329468e-02, 3.05129702e-02, 3.07955871e-02, 3.10808217e-02, + 3.13686982e-02, 3.16592411e-02, 3.19524751e-02, 3.22484250e-02, + 3.25471161e-02, 3.28485737e-02, 3.31528234e-02, 3.34598912e-02, + 3.37698031e-02, 3.40825855e-02, 3.43982649e-02, 3.47168682e-02, + 3.50384225e-02, 3.53629550e-02, 3.56904935e-02, 3.60210656e-02, + 3.63546996e-02, 3.66914238e-02, 3.70312668e-02, 3.73742574e-02, + 3.77204249e-02, 3.80697987e-02, 3.84224085e-02, 3.87782841e-02, + 3.91374560e-02, 3.94999546e-02, 3.98658107e-02, 4.02350555e-02, + 4.06077203e-02, 4.09838367e-02, 4.13634368e-02, 4.17465529e-02, + 4.21332174e-02, 4.25234633e-02, 4.29173238e-02, 4.33148322e-02, + 4.37160225e-02, 4.41209286e-02, 4.45295851e-02, 4.49420266e-02, + 4.53582883e-02, 4.57784054e-02, 4.62024137e-02, 4.66303493e-02, + 4.70622485e-02, 4.74981480e-02, 4.79380850e-02, 4.83820966e-02, + 4.88302209e-02, 4.92824957e-02, 4.97389596e-02, 5.01996513e-02, + 5.06646101e-02, 5.11338754e-02, 5.16074871e-02, 5.20854855e-02, + 5.25679112e-02, 5.30548053e-02, 5.35462090e-02, 5.40421642e-02, + 5.45427131e-02, 5.50478981e-02, 5.55577622e-02, 5.60723488e-02, + 5.65917016e-02, 5.71158648e-02, 5.76448828e-02, 5.81788007e-02, + 5.87176639e-02, 5.92615181e-02, 5.98104096e-02, 6.03643851e-02, + 6.09234915e-02, 6.14877765e-02, 6.20572881e-02, 6.26320745e-02, + 6.32121848e-02, 6.37976681e-02, 6.43885743e-02, 6.49849535e-02, + 6.55868566e-02, 6.61943346e-02, 6.68074392e-02, 6.74262224e-02, + 6.80507370e-02, 6.86810359e-02, 6.93171728e-02, 6.99592017e-02, + 7.06071771e-02, 7.12611543e-02, 7.19211887e-02, 7.25873365e-02, + 7.32596543e-02, 7.39381992e-02, 7.46230289e-02, 7.53142017e-02, + 7.60117762e-02, 7.67158118e-02, 7.74263683e-02, 7.81435061e-02, + 7.88672862e-02, 7.95977700e-02, 8.03350198e-02, 8.10790981e-02, + 8.18300682e-02, 8.25879939e-02, 8.33529397e-02, 8.41249705e-02, + 8.49041520e-02, 8.56905505e-02, 8.64842328e-02, 8.72852662e-02, + 8.80937190e-02, 8.89096599e-02, 8.97331581e-02, 9.05642838e-02, + 9.14031075e-02, 9.22497005e-02, 9.31041349e-02, 9.39664831e-02, + 9.48368187e-02, 9.57152154e-02, 9.66017480e-02, 9.74964918e-02, + 9.83995230e-02, 9.93109181e-02, 1.00230755e-01, 1.01159111e-01, + 1.02096066e-01, 1.03041699e-01, 1.03996091e-01, 1.04959323e-01, + 1.05931476e-01, 1.06912634e-01, 1.07902879e-01, 1.08902296e-01, + 1.09910970e-01, 1.10928986e-01, 1.11956432e-01, 1.12993394e-01, + 1.14039960e-01, 1.15096220e-01, 1.16162263e-01, 1.17238180e-01, + 1.18324063e-01, 1.19420003e-01, 1.20526094e-01, 1.21642429e-01, + 1.22769105e-01, 1.23906216e-01, 1.25053859e-01, 1.26212131e-01, + 1.27381132e-01, 1.28560961e-01, 1.29751717e-01, 1.30953502e-01, + 1.32166418e-01, 1.33390569e-01, 1.34626058e-01, 1.35872990e-01, + 1.37131472e-01, 1.38401610e-01, 1.39683512e-01, 1.40977287e-01, + 1.42283046e-01, 1.43600898e-01, 1.44930957e-01, 1.46273336e-01, + 1.47628147e-01, 1.48995507e-01, 1.50375532e-01, 1.51768339e-01, + 1.53174046e-01, 1.54592774e-01, 1.56024641e-01, 1.57469771e-01, + 1.58928287e-01, 1.60400311e-01, 1.61885969e-01, 1.63385388e-01, + 1.64898694e-01, 1.66426018e-01, 1.67967487e-01, 1.69523234e-01, + 1.71093391e-01, 1.72678090e-01, 1.74277468e-01, 1.75891659e-01, + 1.77520801e-01, 1.79165033e-01, 1.80824493e-01, 1.82499324e-01, + 1.84189668e-01, 1.85895668e-01, 1.87617469e-01, 1.89355218e-01, + 1.91109062e-01, 1.92879151e-01, 1.94665634e-01, 1.96468665e-01, + 1.98288395e-01, 2.00124980e-01, 2.01978576e-01, 2.03849340e-01, + 2.05737431e-01, 2.07643011e-01, 2.09566240e-01, 2.11507282e-01, + 2.13466303e-01, 2.15443469e-01, 2.17438948e-01, 2.19452909e-01, + 2.21485523e-01, 2.23536965e-01, 2.25607407e-01, 2.27697026e-01, + 2.29805999e-01, 2.31934506e-01, 2.34082728e-01, 2.36250847e-01, + 2.38439047e-01, 2.40647515e-01, 2.42876438e-01, 2.45126006e-01, + 2.47396410e-01, 2.49687843e-01, 2.52000499e-01, 2.54334576e-01, + 2.56690272e-01, 2.59067786e-01, 2.61467321e-01, 2.63889081e-01, + 2.66333273e-01, 2.68800102e-01, 2.71289780e-01, 2.73802518e-01, + 2.76338529e-01, 2.78898029e-01, 2.81481236e-01, 2.84088369e-01, + 2.86719650e-01, 2.89375302e-01, 2.92055551e-01, 2.94760626e-01, + 2.97490755e-01, 3.00246171e-01, 3.03027108e-01, 3.05833803e-01, + 3.08666494e-01, 3.11525422e-01, 3.14410830e-01, 3.17322963e-01, + 3.20262069e-01, 3.23228398e-01, 3.26222201e-01, 3.29243733e-01, + 3.32293252e-01, 3.35371015e-01, 3.38477286e-01, 3.41612327e-01, + 3.44776405e-01, 3.47969790e-01, 3.51192753e-01, 3.54445567e-01, + 3.57728510e-01, 3.61041860e-01, 3.64385898e-01, 3.67760910e-01, + 3.71167182e-01, 3.74605003e-01, 3.78074666e-01, 3.81576466e-01, + 3.85110700e-01, 3.88677669e-01, 3.92277676e-01, 3.95911027e-01, + 3.99578030e-01, 4.03278998e-01, 4.07014245e-01, 4.10784089e-01, + 4.14588850e-01, 4.18428851e-01, 4.22304419e-01, 4.26215883e-01, + 4.30163576e-01, 4.34147833e-01, 4.38168993e-01, 4.42227398e-01, + 4.46323393e-01, 4.50457325e-01, 4.54629547e-01, 4.58840413e-01, + 4.63090280e-01, 4.67379511e-01, 4.71708469e-01, 4.76077523e-01, + 4.80487044e-01, 4.84937407e-01, 4.89428990e-01, 4.93962174e-01, + 4.98537346e-01, 5.03154895e-01, 5.07815211e-01, 5.12518693e-01, + 5.17265739e-01, 5.22056753e-01, 5.26892142e-01, 5.31772318e-01, + 5.36697695e-01, 5.41668691e-01, 5.46685730e-01, 5.51749238e-01, + 5.56859644e-01, 5.62017385e-01, 5.67222897e-01, 5.72476624e-01, + 5.77779012e-01, 5.83130511e-01, 5.88531578e-01, 5.93982669e-01, + 5.99484250e-01, 6.05036788e-01, 6.10640754e-01, 6.16296626e-01, + 6.22004883e-01, 6.27766011e-01, 6.33580499e-01, 6.39448843e-01, + 6.45371540e-01, 6.51349095e-01, 6.57382014e-01, 6.63470812e-01, + 6.69616005e-01, 6.75818117e-01, 6.82077673e-01, 6.88395207e-01, + 6.94771255e-01, 7.01206359e-01, 7.07701066e-01, 7.14255929e-01, + 7.20871503e-01, 7.27548353e-01, 7.34287045e-01, 7.41088152e-01, + 7.47952252e-01, 7.54879928e-01, 7.61871770e-01, 7.68928372e-01, + 7.76050334e-01, 7.83238260e-01, 7.90492762e-01, 7.97814457e-01, + 8.05203967e-01, 8.12661920e-01, 8.20188950e-01, 8.27785697e-01, + 8.35452806e-01, 8.43190929e-01, 8.51000725e-01, 8.58882856e-01, + 8.66837993e-01, 8.74866812e-01, 8.82969996e-01, 8.91148232e-01, + 8.99402217e-01, 9.07732653e-01, 9.16140246e-01, 9.24625712e-01, + 9.33189772e-01, 9.41833153e-01, 9.50556592e-01, 9.59360829e-01, + 9.68246612e-01, 9.77214697e-01, 9.86265846e-01, 9.95400829e-01, + 1.00462042e+00, 1.01392541e+00, 1.02331658e+00, 1.03279473e+00, + 1.04236067e+00, 1.05201522e+00, 1.06175918e+00, 1.07159340e+00, + 1.08151870e+00, 1.09153594e+00, 1.10164595e+00, 1.11184960e+00, + 1.12214777e+00, 1.13254132e+00, 1.14303113e+00, 1.15361810e+00, + 1.16430313e+00, 1.17508713e+00, 1.18597101e+00, 1.19695570e+00, + 1.20804213e+00, 1.21923125e+00, 1.23052400e+00, 1.24192135e+00, + 1.25342427e+00, 1.26503372e+00, 1.27675070e+00, 1.28857621e+00, + 1.30051125e+00, 1.31255684e+00, 1.32471399e+00, 1.33698374e+00, + 1.34936714e+00, 1.36186524e+00, 1.37447909e+00, 1.38720978e+00, + 1.40005838e+00, 1.41302599e+00, 1.42611371e+00, 1.43932264e+00, + 1.45265393e+00, 1.46610868e+00, 1.47968806e+00, 1.49339322e+00, + 1.50722531e+00, 1.52118552e+00, 1.53527503e+00, 1.54949504e+00, + 1.56384676e+00, 1.57833141e+00, 1.59295021e+00, 1.60770442e+00, + 1.62259529e+00, 1.63762407e+00, 1.65279206e+00, 1.66810054e+00, + 1.68355080e+00, 1.69914417e+00, 1.71488197e+00, 1.73076553e+00, + 1.74679622e+00, 1.76297538e+00, 1.77930439e+00, 1.79578465e+00, + 1.81241755e+00, 1.82920450e+00, 1.84614695e+00, 1.86324631e+00, + 1.88050406e+00, 1.89792164e+00, 1.91550056e+00, 1.93324229e+00, + 1.95114835e+00, 1.96922026e+00, 1.98745955e+00, 2.00586778e+00, + 2.02444651e+00, 2.04319732e+00, 2.06212180e+00, 2.08122157e+00, + 2.10049824e+00, 2.11995346e+00, 2.13958887e+00, 2.15940615e+00, + 2.17940698e+00, 2.19959307e+00, 2.21996612e+00, 2.24052787e+00, + 2.26128007e+00, 2.28222447e+00, 2.30336287e+00, 2.32469706e+00, + 2.34622885e+00, 2.36796007e+00, 2.38989257e+00, 2.41202821e+00, + 2.43436887e+00, 2.45691646e+00, 2.47967289e+00, 2.50264010e+00, + 2.52582003e+00, 2.54921465e+00, 2.57282597e+00, 2.59665597e+00, + 2.62070670e+00, 2.64498018e+00, 2.66947849e+00, 2.69420371e+00, + 2.71915794e+00, 2.74434330e+00, 2.76976194e+00, 2.79541600e+00, + 2.82130768e+00, 2.84743917e+00, 2.87381269e+00, 2.90043049e+00, + 2.92729484e+00, 2.95440800e+00, 2.98177229e+00, 3.00939003e+00, + 3.03726358e+00, 3.06539530e+00, 3.09378757e+00, 3.12244282e+00, + 3.15136348e+00, 3.18055202e+00, 3.21001090e+00, 3.23974263e+00, + 3.26974974e+00, 3.30003479e+00, 3.33060034e+00, 3.36144900e+00, + 3.39258338e+00, 3.42400614e+00, 3.45571994e+00, 3.48772747e+00, + 3.52003147e+00, 3.55263468e+00, 3.58553986e+00, 3.61874981e+00, + 3.65226736e+00, 3.68609536e+00, 3.72023668e+00, 3.75469422e+00, + 3.78947092e+00, 3.82456972e+00, 3.85999362e+00, 3.89574562e+00, + 3.93182876e+00, 3.96824610e+00, 4.00500076e+00, 4.04209584e+00, + 4.07953450e+00, 4.11731993e+00, 4.15545533e+00, 4.19394396e+00, + 4.23278907e+00, 4.27199397e+00, 4.31156199e+00, 4.35149650e+00, + 4.39180089e+00, 4.43247859e+00, 4.47353305e+00, 4.51496777e+00, + 4.55678627e+00, 4.59899209e+00, 4.64158883e+00, 4.68458012e+00, + 4.72796959e+00, 4.77176095e+00, 4.81595791e+00, 4.86056423e+00, + 4.90558371e+00, 4.95102016e+00, 4.99687745e+00, 5.04315949e+00, + 5.08987019e+00, 5.13701354e+00, 5.18459354e+00, 5.23261424e+00, + 5.28107971e+00, 5.32999408e+00, 5.37936150e+00, 5.42918618e+00, + 5.47947234e+00, 5.53022426e+00, 5.58144625e+00, 5.63314267e+00, + 5.68531791e+00, 5.73797641e+00, 5.79112265e+00, 5.84476113e+00, + 5.89889643e+00, 5.95353313e+00, 6.00867589e+00, 6.06432940e+00, + 6.12049837e+00, 6.17718760e+00, 6.23440189e+00, 6.29214611e+00, + 6.35042517e+00, 6.40924402e+00, 6.46860766e+00, 6.52852114e+00, + 6.58898955e+00, 6.65001803e+00, 6.71161177e+00, 6.77377600e+00, + 6.83651600e+00, 6.89983712e+00, 6.96374473e+00, 7.02824426e+00, + 7.09334120e+00, 7.15904109e+00, 7.22534949e+00, 7.29227206e+00, + 7.35981448e+00, 7.42798248e+00, 7.49678187e+00, 7.56621850e+00, + 7.63629826e+00, 7.70702711e+00, 7.77841107e+00, 7.85045620e+00, + 7.92316862e+00, 7.99655453e+00, 8.07062014e+00, 8.14537177e+00, + 8.22081576e+00, 8.29695852e+00, 8.37380654e+00, 8.45136633e+00, + 8.52964450e+00, 8.60864770e+00, 8.68838264e+00, 8.76885609e+00, + 8.85007491e+00, 8.93204600e+00, 9.01477631e+00, 9.09827289e+00, + 9.18254284e+00, 9.26759330e+00, 9.35343152e+00, 9.44006479e+00, + 9.52750047e+00, 9.61574600e+00, 9.70480888e+00, 9.79469667e+00, + 9.88541702e+00, 9.97697764e+00, 1.00693863e+01, 1.01626509e+01, + 1.02567793e+01, 1.03517796e+01, 1.04476597e+01, 1.05444279e+01, + 1.06420924e+01, 1.07406615e+01, 1.08401436e+01, 1.09405471e+01, + 1.10418805e+01, 1.11441525e+01, 1.12473718e+01, 1.13515471e+01, + 1.14566873e+01, 1.15628013e+01, 1.16698982e+01, 1.17779870e+01, + 1.18870770e+01, 1.19971774e+01, 1.21082975e+01, 1.22204469e+01, + 1.23336350e+01, 1.24478715e+01, 1.25631660e+01, 1.26795285e+01, + 1.27969687e+01, 1.29154967e+01, 1.30351224e+01, 1.31558562e+01, + 1.32777083e+01, 1.34006890e+01, 1.35248087e+01, 1.36500781e+01, + 1.37765077e+01, 1.39041083e+01, 1.40328908e+01, 1.41628662e+01, + 1.42940453e+01, 1.44264395e+01, 1.45600600e+01, 1.46949180e+01, + 1.48310251e+01, 1.49683929e+01, 1.51070330e+01, 1.52469573e+01, + 1.53881775e+01, 1.55307057e+01, 1.56745541e+01, 1.58197348e+01, + 1.59662602e+01, 1.61141428e+01, 1.62633950e+01, 1.64140297e+01, + 1.65660596e+01, 1.67194976e+01, 1.68743568e+01, 1.70306503e+01, + 1.71883914e+01, 1.73475936e+01, 1.75082703e+01, 1.76704353e+01, + 1.78341022e+01, 1.79992851e+01, 1.81659979e+01, 1.83342548e+01, + 1.85040702e+01, 1.86754584e+01, 1.88484341e+01, 1.90230119e+01, + 1.91992067e+01, 1.93770334e+01, 1.95565072e+01, 1.97376433e+01, + 1.99204571e+01, 2.01049642e+01, 2.02911802e+01, 2.04791210e+01, + 2.06688025e+01, 2.08602409e+01, 2.10534524e+01, 2.12484535e+01, + 2.14452608e+01, 2.16438909e+01, 2.18443607e+01, 2.20466874e+01, + 2.22508880e+01, 2.24569800e+01, 2.26649808e+01, 2.28749082e+01, + 2.30867799e+01, 2.33006141e+01, 2.35164288e+01, 2.37342425e+01, + 2.39540736e+01, 2.41759408e+01, 2.43998630e+01, 2.46258592e+01, + 2.48539486e+01, 2.50841506e+01, 2.53164848e+01, 2.55509709e+01, + 2.57876289e+01, 2.60264788e+01, 2.62675410e+01, 2.65108360e+01, + 2.67563844e+01, 2.70042072e+01, 2.72543253e+01, 2.75067601e+01, + 2.77615329e+01, 2.80186656e+01, 2.82781798e+01, 2.85400977e+01, + 2.88044415e+01, 2.90712338e+01, 2.93404971e+01, 2.96122544e+01, + 2.98865287e+01, 3.01633435e+01, 3.04427221e+01, 3.07246884e+01, + 3.10092664e+01, 3.12964801e+01, 3.15863541e+01, 3.18789129e+01, + 3.21741815e+01, 3.24721849e+01, 3.27729485e+01, 3.30764978e+01, + 3.33828586e+01, 3.36920571e+01, 3.40041193e+01, 3.43190720e+01, + 3.46369418e+01, 3.49577557e+01, 3.52815412e+01, 3.56083255e+01, + 3.59381366e+01, 3.62710025e+01, 3.66069515e+01, 3.69460121e+01, + 3.72882131e+01, 3.76335836e+01, 3.79821531e+01, 3.83339510e+01, + 3.86890074e+01, 3.90473524e+01, 3.94090164e+01, 3.97740302e+01, + 4.01424249e+01, 4.05142317e+01, 4.08894823e+01, 4.12682085e+01, + 4.16504425e+01, 4.20362168e+01, 4.24255643e+01, 4.28185180e+01, + 4.32151113e+01, 4.36153779e+01, 4.40193519e+01, 4.44270675e+01, + 4.48385595e+01, 4.52538628e+01, 4.56730127e+01, 4.60960449e+01, + 4.65229952e+01, 4.69539001e+01, 4.73887961e+01, 4.78277202e+01, + 4.82707097e+01, 4.87178022e+01, 4.91690358e+01, 4.96244488e+01, + 5.00840799e+01, 5.05479682e+01, 5.10161531e+01, 5.14886745e+01, + 5.19655724e+01, 5.24468875e+01, 5.29326606e+01, 5.34229330e+01, + 5.39177464e+01, 5.44171429e+01, 5.49211648e+01, 5.54298552e+01, + 5.59432571e+01, 5.64614142e+01, 5.69843706e+01, 5.75121707e+01, + 5.80448594e+01, 5.85824820e+01, 5.91250841e+01, 5.96727120e+01, + 6.02254120e+01, 6.07832313e+01, 6.13462172e+01, 6.19144176e+01, + 6.24878807e+01, 6.30666554e+01, 6.36507908e+01, 6.42403366e+01, + 6.48353429e+01, 6.54358602e+01, 6.60419396e+01, 6.66536327e+01, + 6.72709914e+01, 6.78940681e+01, 6.85229160e+01, 6.91575883e+01, + 6.97981391e+01, 7.04446228e+01, 7.10970943e+01, 7.17556092e+01, + 7.24202233e+01, 7.30909933e+01, 7.37679760e+01, 7.44512291e+01, + 7.51408106e+01, 7.58367791e+01, 7.65391939e+01, 7.72481145e+01, + 7.79636013e+01, 7.86857151e+01, 7.94145172e+01, 8.01500696e+01, + 8.08924349e+01, 8.16416760e+01, 8.23978568e+01, 8.31610415e+01, + 8.39312950e+01, 8.47086827e+01, 8.54932707e+01, 8.62851257e+01, + 8.70843150e+01, 8.78909065e+01, 8.87049689e+01, 8.95265713e+01, + 9.03557835e+01, 9.11926760e+01, 9.20373200e+01, 9.28897872e+01, + 9.37501502e+01, 9.46184819e+01, 9.54948564e+01, 9.63793480e+01, + 9.72720319e+01, 9.81729841e+01, 9.90822810e+01, 1.00000000e+02])) -> tuple[float, float, int, numpy.ndarray, numpy.ndarray]: + + + +
+ +
315def select_gamma(
+316    similarity_matrix: np.ndarray,
+317    pM: np.ndarray = None,
+318    gammas: np.ndarray = np.logspace(-2, 2, 1000)
+319) -> tuple[float, float, int, np.ndarray, np.ndarray]:
+320    """
+321    Selects the gamma value that corresponds to the midpoint of I(M;U) for a distribution p(U|M) ∝ exp(gamma * sim(u, m)).
+322
+323    Args:
+324        similarity_matrix (np.ndarray): Matrix encoding pairwise similarities between meanings (M) and referents (U).
+325        pM (np.ndarray, optional): Communicative need distribution over meanings (M). Defaults to None.
+326        gammas (np.ndarray, optional): Range of gamma values to sample. Defaults to logspace(-2, 2, 1000).
+327
+328    Returns:
+329        tuple: A tuple containing:
+330            - float: Gamma value corresponding to the midpoint of I(M;U).
+331            - float: Midpoint of I(M;U).
+332            - int: Index of the midpoint in the gamma array.
+333            - np.ndarray: Array of gamma values used.
+334            - np.ndarray: Array of computed I(M;U) values.
+335    """
+336    imus = np.array([get_imu(g, similarity_matrix, pM) for g in gammas])
+337    mid = (np.max(imus) - np.min(imus)) / 2
+338    mid_ind = np.argmin((imus - mid) ** 2)
+339    return gammas[mid_ind], mid, mid_ind, gammas, imus
+
+ + +

Selects the gamma value that corresponds to the midpoint of I(M;U) for a distribution p(U|M) ∝ exp(gamma * sim(u, m)).

+ +
Arguments:
+ +
    +
  • similarity_matrix (np.ndarray): Matrix encoding pairwise similarities between meanings (M) and referents (U).
  • +
  • pM (np.ndarray, optional): Communicative need distribution over meanings (M). Defaults to None.
  • +
  • gammas (np.ndarray, optional): Range of gamma values to sample. Defaults to logspace(-2, 2, 1000).
  • +
+ +
Returns:
+ +
+

tuple: A tuple containing: + - float: Gamma value corresponding to the midpoint of I(M;U). + - float: Midpoint of I(M;U). + - int: Index of the midpoint in the gamma array. + - np.ndarray: Array of gamma values used. + - np.ndarray: Array of computed I(M;U) values.

+
+
+ + +
+
+ + \ No newline at end of file diff --git a/docs/ultk/effcomm/information_bottleneck/tools.html b/docs/ultk/effcomm/information_bottleneck/tools.html new file mode 100644 index 00000000..5c7b8dd6 --- /dev/null +++ b/docs/ultk/effcomm/information_bottleneck/tools.html @@ -0,0 +1,729 @@ + + + + + + + ultk.effcomm.information_bottleneck.tools API documentation + + + + + + + + + + + + +
+
+

+ultk.effcomm.information_bottleneck.tools

+ + + + + + +
  1import numpy as np
+  2from scipy.special import softmax
+  3from scipy.stats import entropy
+  4
+  5##############################################################################
+  6# Numerical precision helpers
+  7##############################################################################
+  8
+  9PRECISION = 1e-15
+ 10
+ 11def get_gaussian_noise(shape):
+ 12    """Small Gaussian noise."""
+ 13    return np.random.normal(loc=0.0, scale=1e-15, size=shape)
+ 14
+ 15def add_noise_to_stochastic_matrix(q, weight=1e-2):
+ 16    """
+ 17    Given an input stochastic matrix `q`, sample a stochastic matrix `p` and
+ 18    mix it with the input with a small weight `weight`, i.e., return q + weight * p.
+ 19    """
+ 20    # Generate a stochastic matrix `p` using a Dirichlet distribution
+ 21    p = np.random.dirichlet(np.ones(q.shape[1]), size=q.shape[0])
+ 22    # Mix `q` with `p` using the specified weight
+ 23    noisy_matrix = q + weight * p
+ 24    # Normalize to ensure the rows sum to 1
+ 25    noisy_matrix /= noisy_matrix.sum(axis=1, keepdims=True)
+ 26    return noisy_matrix
+ 27
+ 28def random_stochastic_matrix(shape, gamma=1e-10):
+ 29    """
+ 30    Initialize a stochastic matrix (2D array) that sums to 1 along the rows.
+ 31
+ 32    Args:
+ 33        shape: tuple, the desired shape of the stochastic matrix (e.g., `(rows, cols)`).
+ 34        gamma: float, scaling factor for the random normal initialization.
+ 35
+ 36    Returns:
+ 37        A stochastic matrix with rows summing to 1.
+ 38    """
+ 39    energies = gamma * np.random.randn(*shape)
+ 40    return softmax(energies, axis=1)
+ 41
+ 42##############################################################################
+ 43# Probability and Information
+ 44##############################################################################
+ 45
+ 46def entropy_bits(p: np.ndarray, axis=None) -> float:
+ 47    """Compute entropy of p, $H(X) = - \sum_x p(x) \log p(x)$, in bits."""
+ 48    return entropy(p, base=2, axis=axis)
+ 49
+ 50
+ 51def mutual_info(pxy: np.ndarray) -> float:
+ 52    """Compute mutual information, $I(X;Y)$ in bits.
+ 53
+ 54    Args:
+ 55        pxy: 2D numpy array of shape `(x, y)`
+ 56    """
+ 57    return (
+ 58        entropy_bits(pxy.sum(axis=0))
+ 59        + entropy_bits(pxy.sum(axis=1))
+ 60        - entropy_bits(pxy)
+ 61    )
+ 62
+ 63
+ 64def kl_divergence(p: np.ndarray, q: np.ndarray, axis=None, base=np.e) -> float:
+ 65    """Compute KL divergence (in nats by defaut) between p and q, $D_{KL}[p \| q]$.
+ 66
+ 67    Args:
+ 68        p: np.ndarray, lhs of KL divergence
+ 69
+ 70        q: np.ndarray, rhs of KL divergence
+ 71    """
+ 72    return entropy(
+ 73        p,
+ 74        q,
+ 75        axis=axis,
+ 76        base=base,
+ 77    )
+ 78
+ 79
+ 80# Common pattern for rate-distortion optimizations
+ 81def information_cond(pA: np.ndarray, pB_A: np.ndarray) -> float:
+ 82    """Compute the mutual information $I(A;B)$ from a joint distribution defind by $P(A)$ and $P(B|A)$
+ 83
+ 84    Args:
+ 85        pA: array of shape `|A|` the prior probability of an input symbol (i.e., the source)
+ 86
+ 87        pB_A: array of shape `(|A|, |B|)` the probability of an output symbol given the input
+ 88    """
+ 89    pab = pB_A * pA[:, None]
+ 90    mi = mutual_info(pxy=pab)
+ 91    if mi < 0.0 and not np.isclose(mi, 0.0, atol=1e-5):
+ 92        raise Exception
+ 93    return mi
+ 94
+ 95##############################################################################
+ 96# Postprocessing helper
+ 97##############################################################################
+ 98
+ 99def compute_lower_bound(rd_points):
+100    """
+101    Remove all points in a rate-distortion curve that would make it nonmonotonic and
+102    return only the resulting monotonic indices.
+103
+104    This is required to remove the random fluctuations in the result induced by the BA algorithm getting stuck in local minima.
+105
+106    Acknowledgement: https://github.com/epiasini/embo-github-mirror/blob/master/embo/utils.py#L77.
+107
+108    Args:
+109        rd_points: list of pairs of floats, where each pair represents an estimated (rate, distortion) pair,
+110                   and *ordered by increasing rate*.
+111
+112    Returns:
+113        selected_indices: 1D numpy array containing the indices of the points selected to ensure monotonically decreasing values.
+114    """
+115    pts = np.array(rd_points, dtype=np.float32)
+116    selected_indices = [0]
+117
+118    for idx in range(1, len(pts)):
+119        # Check that each point increases in rate and does not increase in distortion
+120        if (
+121            pts[idx, 0] >= pts[selected_indices[-1], 0]  # Monotonically increasing rate
+122            and pts[idx, 1] <= pts[selected_indices[-1], 1]  # Monotonically decreasing distortion
+123        ):
+124            selected_indices.append(idx)
+125
+126    return np.array(selected_indices, dtype=np.int32)
+
+ + +
+
+
+ PRECISION = +1e-15 + + +
+ + + + +
+
+ +
+ + def + get_gaussian_noise(shape): + + + +
+ +
12def get_gaussian_noise(shape):
+13    """Small Gaussian noise."""
+14    return np.random.normal(loc=0.0, scale=1e-15, size=shape)
+
+ + +

Small Gaussian noise.

+
+ + +
+
+ +
+ + def + add_noise_to_stochastic_matrix(q, weight=0.01): + + + +
+ +
16def add_noise_to_stochastic_matrix(q, weight=1e-2):
+17    """
+18    Given an input stochastic matrix `q`, sample a stochastic matrix `p` and
+19    mix it with the input with a small weight `weight`, i.e., return q + weight * p.
+20    """
+21    # Generate a stochastic matrix `p` using a Dirichlet distribution
+22    p = np.random.dirichlet(np.ones(q.shape[1]), size=q.shape[0])
+23    # Mix `q` with `p` using the specified weight
+24    noisy_matrix = q + weight * p
+25    # Normalize to ensure the rows sum to 1
+26    noisy_matrix /= noisy_matrix.sum(axis=1, keepdims=True)
+27    return noisy_matrix
+
+ + +

Given an input stochastic matrix q, sample a stochastic matrix p and +mix it with the input with a small weight weight, i.e., return q + weight * p.

+
+ + +
+
+ +
+ + def + random_stochastic_matrix(shape, gamma=1e-10): + + + +
+ +
29def random_stochastic_matrix(shape, gamma=1e-10):
+30    """
+31    Initialize a stochastic matrix (2D array) that sums to 1 along the rows.
+32
+33    Args:
+34        shape: tuple, the desired shape of the stochastic matrix (e.g., `(rows, cols)`).
+35        gamma: float, scaling factor for the random normal initialization.
+36
+37    Returns:
+38        A stochastic matrix with rows summing to 1.
+39    """
+40    energies = gamma * np.random.randn(*shape)
+41    return softmax(energies, axis=1)
+
+ + +

Initialize a stochastic matrix (2D array) that sums to 1 along the rows.

+ +
Arguments:
+ +
    +
  • shape: tuple, the desired shape of the stochastic matrix (e.g., (rows, cols)).
  • +
  • gamma: float, scaling factor for the random normal initialization.
  • +
+ +
Returns:
+ +
+

A stochastic matrix with rows summing to 1.

+
+
+ + +
+
+ +
+ + def + entropy_bits(p: numpy.ndarray, axis=None) -> float: + + + +
+ +
47def entropy_bits(p: np.ndarray, axis=None) -> float:
+48    """Compute entropy of p, $H(X) = - \sum_x p(x) \log p(x)$, in bits."""
+49    return entropy(p, base=2, axis=axis)
+
+ + +

Compute entropy of p, $H(X) = - \sum_x p(x) \log p(x)$, in bits.

+
+ + +
+
+ +
+ + def + mutual_info(pxy: numpy.ndarray) -> float: + + + +
+ +
52def mutual_info(pxy: np.ndarray) -> float:
+53    """Compute mutual information, $I(X;Y)$ in bits.
+54
+55    Args:
+56        pxy: 2D numpy array of shape `(x, y)`
+57    """
+58    return (
+59        entropy_bits(pxy.sum(axis=0))
+60        + entropy_bits(pxy.sum(axis=1))
+61        - entropy_bits(pxy)
+62    )
+
+ + +

Compute mutual information, $I(X;Y)$ in bits.

+ +
Arguments:
+ +
    +
  • pxy: 2D numpy array of shape (x, y)
  • +
+
+ + +
+
+ +
+ + def + kl_divergence( p: numpy.ndarray, q: numpy.ndarray, axis=None, base=2.718281828459045) -> float: + + + +
+ +
65def kl_divergence(p: np.ndarray, q: np.ndarray, axis=None, base=np.e) -> float:
+66    """Compute KL divergence (in nats by defaut) between p and q, $D_{KL}[p \| q]$.
+67
+68    Args:
+69        p: np.ndarray, lhs of KL divergence
+70
+71        q: np.ndarray, rhs of KL divergence
+72    """
+73    return entropy(
+74        p,
+75        q,
+76        axis=axis,
+77        base=base,
+78    )
+
+ + +

Compute KL divergence (in nats by defaut) between p and q, $D_{KL}[p \| q]$.

+ +
Arguments:
+ +
    +
  • p: np.ndarray, lhs of KL divergence
  • +
  • q: np.ndarray, rhs of KL divergence
  • +
+
+ + +
+
+ +
+ + def + information_cond(pA: numpy.ndarray, pB_A: numpy.ndarray) -> float: + + + +
+ +
82def information_cond(pA: np.ndarray, pB_A: np.ndarray) -> float:
+83    """Compute the mutual information $I(A;B)$ from a joint distribution defind by $P(A)$ and $P(B|A)$
+84
+85    Args:
+86        pA: array of shape `|A|` the prior probability of an input symbol (i.e., the source)
+87
+88        pB_A: array of shape `(|A|, |B|)` the probability of an output symbol given the input
+89    """
+90    pab = pB_A * pA[:, None]
+91    mi = mutual_info(pxy=pab)
+92    if mi < 0.0 and not np.isclose(mi, 0.0, atol=1e-5):
+93        raise Exception
+94    return mi
+
+ + +

Compute the mutual information $I(A;B)$ from a joint distribution defind by $P(A)$ and $P(B|A)$

+ +
Arguments:
+ +
    +
  • pA: array of shape |A| the prior probability of an input symbol (i.e., the source)
  • +
  • pB_A: array of shape (|A|, |B|) the probability of an output symbol given the input
  • +
+
+ + +
+
+ +
+ + def + compute_lower_bound(rd_points): + + + +
+ +
100def compute_lower_bound(rd_points):
+101    """
+102    Remove all points in a rate-distortion curve that would make it nonmonotonic and
+103    return only the resulting monotonic indices.
+104
+105    This is required to remove the random fluctuations in the result induced by the BA algorithm getting stuck in local minima.
+106
+107    Acknowledgement: https://github.com/epiasini/embo-github-mirror/blob/master/embo/utils.py#L77.
+108
+109    Args:
+110        rd_points: list of pairs of floats, where each pair represents an estimated (rate, distortion) pair,
+111                   and *ordered by increasing rate*.
+112
+113    Returns:
+114        selected_indices: 1D numpy array containing the indices of the points selected to ensure monotonically decreasing values.
+115    """
+116    pts = np.array(rd_points, dtype=np.float32)
+117    selected_indices = [0]
+118
+119    for idx in range(1, len(pts)):
+120        # Check that each point increases in rate and does not increase in distortion
+121        if (
+122            pts[idx, 0] >= pts[selected_indices[-1], 0]  # Monotonically increasing rate
+123            and pts[idx, 1] <= pts[selected_indices[-1], 1]  # Monotonically decreasing distortion
+124        ):
+125            selected_indices.append(idx)
+126
+127    return np.array(selected_indices, dtype=np.int32)
+
+ + +

Remove all points in a rate-distortion curve that would make it nonmonotonic and +return only the resulting monotonic indices.

+ +

This is required to remove the random fluctuations in the result induced by the BA algorithm getting stuck in local minima.

+ +

Acknowledgement: https://github.com/epiasini/embo-github-mirror/blob/master/embo/utils.py#L77.

+ +
Arguments:
+ +
    +
  • rd_points: list of pairs of floats, where each pair represents an estimated (rate, distortion) pair, +and ordered by increasing rate.
  • +
+ +
Returns:
+ +
+

selected_indices: 1D numpy array containing the indices of the points selected to ensure monotonically decreasing values.

+
+
+ + +
+
+ + \ No newline at end of file diff --git a/docs/ultk/effcomm/informativity.html b/docs/ultk/effcomm/informativity.html index 5f55a066..a2ea99d4 100644 --- a/docs/ultk/effcomm/informativity.html +++ b/docs/ultk/effcomm/informativity.html @@ -3,14 +3,14 @@ - + ultk.effcomm.informativity API documentation - + - - + + + + + +
+
+

+ultk.effcomm.probability

+ + + + + + +
 1import numpy as np
+ 2
+ 3# see the utilities in https://github.com/nogazs/ib-color-naming/blob/master/src/tools.py
+ 4PRECISION = 1e-12
+ 5
+ 6
+ 7def marginal(pXY: np.ndarray, axis: int = 1) -> np.ndarray:
+ 8    """Computer marginals of a joint distribution.
+ 9
+10    Args:
+11        pXY: a joint distribution of shape (|X|, |Y|), corresponding to p(x, y)
+12        axis: the axis along which to compute the marginal
+13
+14    Returns:
+15        either pY (axis = 0) or pX (default, axis = 1)
+16    """
+17    return pXY.sum(axis)
+18
+19
+20def joint(pY_X: np.ndarray, pX: np.ndarray) -> np.ndarray:
+21    """Compute a joint distribution from a conditional and a prior.
+22
+23    Args:
+24        pY_X: a conditional distribution of shape (|X|, |Y|), corresponding to p(y|x)
+25        pX: a prior distribution of shape (|X|,), corresponding to p(x)
+26
+27    Returns:
+28        a joint distribution of shape (|X|, |Y|), corresponding to p(x, y)
+29    """
+30    return pY_X * pX[:, None]
+31
+32
+33def marginalize(pY_X: np.ndarray, pX: np.ndarray) -> np.ndarray:
+34    """Marginalize a conditional distribution (without a detour through the joint).
+35
+36    Args:
+37        pY_X: a conditional distribution of shape (|X|, |Y|), corresponding to p(y|x)
+38        pX: a prior distribution of shape (|X|,), corresponding to p(x)
+39
+40    Returns:
+41        a marginal distribution of shape (|Y|,), corresponding to p(y)
+42    """
+43    return pY_X.T @ pX
+44
+45
+46def bayes(pY_X: np.ndarray, pX: np.ndarray) -> np.ndarray:
+47    """Perform Bayesian inference, computing p(x|y) from p(y|x) and p(x).
+48
+49    Args:
+50        pY_X: a conditional distribution of shape (|X|, |Y|), corresponding to p(y|x)
+51        pX: a prior distribution of shape (|X|,), corresponding to p(x)
+52
+53    Returns:
+54        a posterior distribution of shape (|Y|, |X|), corresponding to p(x|y)
+55    """
+56    # (|X|, |Y|)
+57    pXY = joint(pY_X, pX)
+58    print(pXY.shape)
+59    # (|Y|,)
+60    pY = marginalize(pY_X, pX)
+61    print(pY.shape)
+62    # (|Y|, |X|)
+63    return np.where(pY > PRECISION, pXY / pY, 1 / pXY.shape[0]).T
+
+ + +
+
+
+ PRECISION = +1e-12 + + +
+ + + + +
+
+ +
+ + def + marginal(pXY: numpy.ndarray, axis: int = 1) -> numpy.ndarray: + + + +
+ +
 8def marginal(pXY: np.ndarray, axis: int = 1) -> np.ndarray:
+ 9    """Computer marginals of a joint distribution.
+10
+11    Args:
+12        pXY: a joint distribution of shape (|X|, |Y|), corresponding to p(x, y)
+13        axis: the axis along which to compute the marginal
+14
+15    Returns:
+16        either pY (axis = 0) or pX (default, axis = 1)
+17    """
+18    return pXY.sum(axis)
+
+ + +

Computer marginals of a joint distribution.

+ +
Arguments:
+ +
    +
  • pXY: a joint distribution of shape (|X|, |Y|), corresponding to p(x, y)
  • +
  • axis: the axis along which to compute the marginal
  • +
+ +
Returns:
+ +
+

either pY (axis = 0) or pX (default, axis = 1)

+
+
+ + +
+
+ +
+ + def + joint(pY_X: numpy.ndarray, pX: numpy.ndarray) -> numpy.ndarray: + + + +
+ +
21def joint(pY_X: np.ndarray, pX: np.ndarray) -> np.ndarray:
+22    """Compute a joint distribution from a conditional and a prior.
+23
+24    Args:
+25        pY_X: a conditional distribution of shape (|X|, |Y|), corresponding to p(y|x)
+26        pX: a prior distribution of shape (|X|,), corresponding to p(x)
+27
+28    Returns:
+29        a joint distribution of shape (|X|, |Y|), corresponding to p(x, y)
+30    """
+31    return pY_X * pX[:, None]
+
+ + +

Compute a joint distribution from a conditional and a prior.

+ +
Arguments:
+ +
    +
  • pY_X: a conditional distribution of shape (|X|, |Y|), corresponding to p(y|x)
  • +
  • pX: a prior distribution of shape (|X|,), corresponding to p(x)
  • +
+ +
Returns:
+ +
+

a joint distribution of shape (|X|, |Y|), corresponding to p(x, y)

+
+
+ + +
+
+ +
+ + def + marginalize(pY_X: numpy.ndarray, pX: numpy.ndarray) -> numpy.ndarray: + + + +
+ +
34def marginalize(pY_X: np.ndarray, pX: np.ndarray) -> np.ndarray:
+35    """Marginalize a conditional distribution (without a detour through the joint).
+36
+37    Args:
+38        pY_X: a conditional distribution of shape (|X|, |Y|), corresponding to p(y|x)
+39        pX: a prior distribution of shape (|X|,), corresponding to p(x)
+40
+41    Returns:
+42        a marginal distribution of shape (|Y|,), corresponding to p(y)
+43    """
+44    return pY_X.T @ pX
+
+ + +

Marginalize a conditional distribution (without a detour through the joint).

+ +
Arguments:
+ +
    +
  • pY_X: a conditional distribution of shape (|X|, |Y|), corresponding to p(y|x)
  • +
  • pX: a prior distribution of shape (|X|,), corresponding to p(x)
  • +
+ +
Returns:
+ +
+

a marginal distribution of shape (|Y|,), corresponding to p(y)

+
+
+ + +
+
+ +
+ + def + bayes(pY_X: numpy.ndarray, pX: numpy.ndarray) -> numpy.ndarray: + + + +
+ +
47def bayes(pY_X: np.ndarray, pX: np.ndarray) -> np.ndarray:
+48    """Perform Bayesian inference, computing p(x|y) from p(y|x) and p(x).
+49
+50    Args:
+51        pY_X: a conditional distribution of shape (|X|, |Y|), corresponding to p(y|x)
+52        pX: a prior distribution of shape (|X|,), corresponding to p(x)
+53
+54    Returns:
+55        a posterior distribution of shape (|Y|, |X|), corresponding to p(x|y)
+56    """
+57    # (|X|, |Y|)
+58    pXY = joint(pY_X, pX)
+59    print(pXY.shape)
+60    # (|Y|,)
+61    pY = marginalize(pY_X, pX)
+62    print(pY.shape)
+63    # (|Y|, |X|)
+64    return np.where(pY > PRECISION, pXY / pY, 1 / pXY.shape[0]).T
+
+ + +

Perform Bayesian inference, computing p(x|y) from p(y|x) and p(x).

+ +
Arguments:
+ +
    +
  • pY_X: a conditional distribution of shape (|X|, |Y|), corresponding to p(y|x)
  • +
  • pX: a prior distribution of shape (|X|,), corresponding to p(x)
  • +
+ +
Returns:
+ +
+

a posterior distribution of shape (|Y|, |X|), corresponding to p(x|y)

+
+
+ + +
+
+ + \ No newline at end of file diff --git a/docs/ultk/effcomm/sampling.html b/docs/ultk/effcomm/sampling.html index 737929be..92c63eea 100644 --- a/docs/ultk/effcomm/sampling.html +++ b/docs/ultk/effcomm/sampling.html @@ -3,14 +3,14 @@ - + ultk.effcomm.sampling API documentation - + - - - - - - - + + + + + +
+
+

+ultk.util

+ +

Various utility classes and helper functions for the ULTK package.

+ +

Submodules:

+ +
    +
  • frozendict: An immutable dictionary, so that various mappings (e.g. Meanings) can be hashed, serialized, etc.
  • +
  • io: some basic input/output functions.
  • +
+
+ + + + + +
1"""Various utility classes and helper functions for the ULTK package.
+2
+3Submodules:
+4
+5* `frozendict`: An immutable dictionary, so that various mappings (e.g. `Meaning`s) can be hashed, serialized, etc.
+6* `io`: some basic input/output functions.
+7"""
+
+ + +
+
+ + \ No newline at end of file diff --git a/docs/ultk/util/frozendict.html b/docs/ultk/util/frozendict.html new file mode 100644 index 00000000..2363a290 --- /dev/null +++ b/docs/ultk/util/frozendict.html @@ -0,0 +1,500 @@ + + + + + + + ultk.util.frozendict API documentation + + + + + + + + + + + + +
+
+

+ultk.util.frozendict

+ + + + + + +
 1from typing import Generic, TypeVar
+ 2from yaml import YAMLObject
+ 3
+ 4K = TypeVar("K")
+ 5V = TypeVar("V")
+ 6
+ 7
+ 8class FrozenDict(dict[K, V], Generic[K, V], YAMLObject):
+ 9
+10    yaml_tag = "!frozendict"
+11
+12    def __hash__(self):
+13        return hash(frozenset(self.items()))
+14
+15    def __setitem__(self, key, value):
+16        raise TypeError("FrozenDict is immutable")
+17
+18    def __delitem__(self, key):
+19        raise TypeError("FrozenDict is immutable")
+20
+21    def clear(self):
+22        raise TypeError("FrozenDict is immutable")
+23
+24    def pop(self, key, default=None):
+25        raise TypeError("FrozenDict is immutable")
+26
+27    def popitem(self):
+28        raise TypeError("FrozenDict is immutable")
+29
+30    def setdefault(self, key, default=None):
+31        raise TypeError("FrozenDict is immutable")
+32
+33    @classmethod
+34    def to_yaml(cls, dumper, data):
+35        return dumper.represent_mapping(cls.yaml_tag, dict(data))
+36
+37    @classmethod
+38    def from_yaml(cls, loader, node):
+39        return FrozenDict(loader.construct_mapping(node, deep=True))
+40
+41    def update(self, *args, **kwargs):
+42        raise TypeError("FrozenDict is immutable")
+43
+44    def __repr__(self):
+45        return f"FrozenDict({super().__repr__()})"
+
+ + +
+
+ +
+ + class + FrozenDict(dict[~K, ~V], typing.Generic[~K, ~V], yaml.YAMLObject): + + + +
+ +
 9class FrozenDict(dict[K, V], Generic[K, V], YAMLObject):
+10
+11    yaml_tag = "!frozendict"
+12
+13    def __hash__(self):
+14        return hash(frozenset(self.items()))
+15
+16    def __setitem__(self, key, value):
+17        raise TypeError("FrozenDict is immutable")
+18
+19    def __delitem__(self, key):
+20        raise TypeError("FrozenDict is immutable")
+21
+22    def clear(self):
+23        raise TypeError("FrozenDict is immutable")
+24
+25    def pop(self, key, default=None):
+26        raise TypeError("FrozenDict is immutable")
+27
+28    def popitem(self):
+29        raise TypeError("FrozenDict is immutable")
+30
+31    def setdefault(self, key, default=None):
+32        raise TypeError("FrozenDict is immutable")
+33
+34    @classmethod
+35    def to_yaml(cls, dumper, data):
+36        return dumper.represent_mapping(cls.yaml_tag, dict(data))
+37
+38    @classmethod
+39    def from_yaml(cls, loader, node):
+40        return FrozenDict(loader.construct_mapping(node, deep=True))
+41
+42    def update(self, *args, **kwargs):
+43        raise TypeError("FrozenDict is immutable")
+44
+45    def __repr__(self):
+46        return f"FrozenDict({super().__repr__()})"
+
+ + + + +
+ +
+ + def + clear(self): + + + +
+ +
22    def clear(self):
+23        raise TypeError("FrozenDict is immutable")
+
+ + +

D.clear() -> None. Remove all items from D.

+
+ + +
+
+ +
+ + def + pop(self, key, default=None): + + + +
+ +
25    def pop(self, key, default=None):
+26        raise TypeError("FrozenDict is immutable")
+
+ + +

D.pop(k[,d]) -> v, remove specified key and return the corresponding value.

+ +

If the key is not found, return the default if given; otherwise, +raise a KeyError.

+
+ + +
+
+ +
+ + def + popitem(self): + + + +
+ +
28    def popitem(self):
+29        raise TypeError("FrozenDict is immutable")
+
+ + +

Remove and return a (key, value) pair as a 2-tuple.

+ +

Pairs are returned in LIFO (last-in, first-out) order. +Raises KeyError if the dict is empty.

+
+ + +
+
+ +
+ + def + setdefault(self, key, default=None): + + + +
+ +
31    def setdefault(self, key, default=None):
+32        raise TypeError("FrozenDict is immutable")
+
+ + +

Insert key with a value of default if key is not in the dictionary.

+ +

Return the value for key if key is in the dictionary, else default.

+
+ + +
+
+ +
+ + def + update(self, *args, **kwargs): + + + +
+ +
42    def update(self, *args, **kwargs):
+43        raise TypeError("FrozenDict is immutable")
+
+ + +

D.update([E, ]**F) -> None. Update D from dict/iterable E and F. +If E is present and has a .keys() method, then does: for k in E: D[k] = E[k] +If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v +In either case, this is followed by: for k in F: D[k] = F[k]

+
+ + +
+
+
+ + \ No newline at end of file diff --git a/docs/ultk/util/io.html b/docs/ultk/util/io.html new file mode 100644 index 00000000..9d03b7be --- /dev/null +++ b/docs/ultk/util/io.html @@ -0,0 +1,519 @@ + + + + + + + ultk.util.io API documentation + + + + + + + + + + + + +
+
+

+ultk.util.io

+ + + + + + +
 1import pickle
+ 2from ultk.language.language import Expression
+ 3from ultk.language.semantics import Meaning, Universe
+ 4from ultk.language.grammar import Grammar, GrammaticalExpression
+ 5from typing import Iterable
+ 6from yaml import dump, Dumper, load, Loader
+ 7
+ 8
+ 9def write_expressions(expressions: Iterable[Expression], filename: str) -> None:
+10    """Write expressions to a YAML file.
+11
+12    This is particularly useful for writing GrammaticalExpressions, which have a `func` field that can't be serialized. This function uses `to_dict` to determine which properties of the Expression to write.
+13
+14    Args:
+15        expressions: the expressions to write
+16        filename: the file to write to
+17    """
+18    with open(filename, "w") as f:
+19        dump([expr.to_dict() for expr in expressions], f, Dumper=Dumper)
+20
+21
+22def read_grammatical_expressions(
+23    filename: str,
+24    grammar: Grammar,
+25    re_parse: bool = False,
+26    universe: Universe | None = None,
+27    return_by_meaning=True,
+28) -> tuple[list[GrammaticalExpression], dict[Meaning, GrammaticalExpression]]:
+29    """Read grammatical expressions from a YAML file.
+30
+31    Optionally re-parse and (re-)evaluate the expressions using the provided grammar and universe.
+32
+33    Args:
+34        filename: the file to read
+35        grammar: the grammar to use for parsing (and for re-populating the `.func` attribute of each GrammaticalExpression)
+36        re_parse: whether to re-parse the expressions
+37        universe: the universe to use for evaluation
+38        return_by_meaning: whether to return a dictionary mapping meanings to expressions or not
+39
+40    Returns:
+41        a list of GrammaticalExpressions and a dictionary mapping meanings to expressions (empty if `return_by_meaning` is False)
+42    """
+43    if re_parse and (grammar is None or universe is None):
+44        raise ValueError("Must provide grammar and universe if re-parsing expressions.")
+45
+46    with open(filename, "r") as f:
+47        expression_list = load(f, Loader=Loader)
+48
+49    if re_parse:
+50        final_exprs = [
+51            (
+52                grammar.parse(expr_dict["term_expression"])
+53                if re_parse
+54                else GrammaticalExpression(**expr_dict)
+55            )
+56            for expr_dict in expression_list
+57        ]
+58    else:
+59        final_exprs = [
+60            GrammaticalExpression.from_dict(expr_dict, grammar)
+61            for expr_dict in expression_list
+62        ]
+63    if universe is not None:
+64        [expr.evaluate(universe) for expr in final_exprs]
+65    by_meaning = {}
+66    if return_by_meaning:
+67        by_meaning = {expr.meaning: expr for expr in final_exprs}
+68    return final_exprs, by_meaning
+69
+70
+71def write_pickle(fn: str, data):
+72    with open(fn, "wb") as f:
+73        pickle.dump(data, f, protocol=pickle.HIGHEST_PROTOCOL)
+74    print(f"Wrote a pickle binary to {fn}.")
+75
+76def read_pickle(fn: str):
+77    with open(fn, "rb") as f:
+78        data = pickle.load(f)
+79    return data
+
+ + +
+
+ +
+ + def + write_expressions( expressions: Iterable[ultk.language.language.Expression], filename: str) -> None: + + + +
+ +
10def write_expressions(expressions: Iterable[Expression], filename: str) -> None:
+11    """Write expressions to a YAML file.
+12
+13    This is particularly useful for writing GrammaticalExpressions, which have a `func` field that can't be serialized. This function uses `to_dict` to determine which properties of the Expression to write.
+14
+15    Args:
+16        expressions: the expressions to write
+17        filename: the file to write to
+18    """
+19    with open(filename, "w") as f:
+20        dump([expr.to_dict() for expr in expressions], f, Dumper=Dumper)
+
+ + +

Write expressions to a YAML file.

+ +

This is particularly useful for writing GrammaticalExpressions, which have a func field that can't be serialized. This function uses to_dict to determine which properties of the Expression to write.

+ +
Arguments:
+ +
    +
  • expressions: the expressions to write
  • +
  • filename: the file to write to
  • +
+
+ + +
+
+ +
+ + def + read_grammatical_expressions( filename: str, grammar: ultk.language.grammar.Grammar, re_parse: bool = False, universe: ultk.language.semantics.Universe | None = None, return_by_meaning=True) -> tuple[list[ultk.language.grammar.GrammaticalExpression], dict[ultk.language.semantics.Meaning, ultk.language.grammar.GrammaticalExpression]]: + + + +
+ +
23def read_grammatical_expressions(
+24    filename: str,
+25    grammar: Grammar,
+26    re_parse: bool = False,
+27    universe: Universe | None = None,
+28    return_by_meaning=True,
+29) -> tuple[list[GrammaticalExpression], dict[Meaning, GrammaticalExpression]]:
+30    """Read grammatical expressions from a YAML file.
+31
+32    Optionally re-parse and (re-)evaluate the expressions using the provided grammar and universe.
+33
+34    Args:
+35        filename: the file to read
+36        grammar: the grammar to use for parsing (and for re-populating the `.func` attribute of each GrammaticalExpression)
+37        re_parse: whether to re-parse the expressions
+38        universe: the universe to use for evaluation
+39        return_by_meaning: whether to return a dictionary mapping meanings to expressions or not
+40
+41    Returns:
+42        a list of GrammaticalExpressions and a dictionary mapping meanings to expressions (empty if `return_by_meaning` is False)
+43    """
+44    if re_parse and (grammar is None or universe is None):
+45        raise ValueError("Must provide grammar and universe if re-parsing expressions.")
+46
+47    with open(filename, "r") as f:
+48        expression_list = load(f, Loader=Loader)
+49
+50    if re_parse:
+51        final_exprs = [
+52            (
+53                grammar.parse(expr_dict["term_expression"])
+54                if re_parse
+55                else GrammaticalExpression(**expr_dict)
+56            )
+57            for expr_dict in expression_list
+58        ]
+59    else:
+60        final_exprs = [
+61            GrammaticalExpression.from_dict(expr_dict, grammar)
+62            for expr_dict in expression_list
+63        ]
+64    if universe is not None:
+65        [expr.evaluate(universe) for expr in final_exprs]
+66    by_meaning = {}
+67    if return_by_meaning:
+68        by_meaning = {expr.meaning: expr for expr in final_exprs}
+69    return final_exprs, by_meaning
+
+ + +

Read grammatical expressions from a YAML file.

+ +

Optionally re-parse and (re-)evaluate the expressions using the provided grammar and universe.

+ +
Arguments:
+ +
    +
  • filename: the file to read
  • +
  • grammar: the grammar to use for parsing (and for re-populating the .func attribute of each GrammaticalExpression)
  • +
  • re_parse: whether to re-parse the expressions
  • +
  • universe: the universe to use for evaluation
  • +
  • return_by_meaning: whether to return a dictionary mapping meanings to expressions or not
  • +
+ +
Returns:
+ +
+

a list of GrammaticalExpressions and a dictionary mapping meanings to expressions (empty if return_by_meaning is False)

+
+
+ + +
+
+ +
+ + def + write_pickle(fn: str, data): + + + +
+ +
72def write_pickle(fn: str, data):
+73    with open(fn, "wb") as f:
+74        pickle.dump(data, f, protocol=pickle.HIGHEST_PROTOCOL)
+75    print(f"Wrote a pickle binary to {fn}.")
+
+ + + + +
+
+ +
+ + def + read_pickle(fn: str): + + + +
+ +
77def read_pickle(fn: str):
+78    with open(fn, "rb") as f:
+79        data = pickle.load(f)
+80    return data
+
+ + + + +
+
+ + \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index ae8481f3..5039b565 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,7 +28,6 @@ dependencies = [ "plotnine", "pathos", "pytest", - "rdot", ] [project.urls] diff --git a/src/examples/__init__.py b/src/examples/__init__.py index f52229ab..1e064995 100644 --- a/src/examples/__init__.py +++ b/src/examples/__init__.py @@ -1,4 +1,3 @@ """Minimal examples demonstrating how to use ULTK. -See `examples.signaling_game`. """ diff --git a/src/examples/colors/README.md b/src/examples/colors/README.md new file mode 100644 index 00000000..98398315 --- /dev/null +++ b/src/examples/colors/README.md @@ -0,0 +1,56 @@ +# Analyzing the Relationship between Complexity and Informativity across the World's Languages + +Based off [Zaslavsky, Kemp et al's paper on color complexity ](https://www.pnas.org/doi/full/10.1073/pnas.1800521115) and [the corresponding original repo](https://github.com/nogazs/ib-color-naming). + +This example creates a "conceptual" / miniature replication of the above paper using the tools provided by the ULTK library. Right now, the final analysis produces the following plot: +![a plot showing communicative cost and complexity of natural, explored, and dominant languages](https://github.com/CLMBRs/altk/blob/main/src/examples/colors/outputs/plot.png?raw=true) + +This README first explains the contents of this example directory, focusing on what the user has to provide that's specific to the color case study, before then explaining the concrete steps taken to produce the above plot. After that, there is some discussion of what's missing from the above paper and other next steps for this example. + +## Contents +`data` consists of language and color data provided by the [World Color Survey](https://linguistics.berkeley.edu/wcs/data.html). Certain files have been slightly edited in order for simplicity of parsing, such as providing a header row. + +`outputs` contains outputs of various scripts, as outlined below. + + + `lang_colors` consists of per-language color distributions. Major color terms are graphed per language. + +`analyze_data.py` contains functions for graphing the distribution of color terms across language expressions and languages themselves. + +`color_grammar.py` contains class definitions for the ColorLanguage and other utility structures. + +`generate_wcs_languages.py` contains the function for reading and converting the WCS data to ULTK language structures. It also generates + +`complexity.py` calculates the complexity and informativity of the various color WCS color languages, passed in as a pandas DataFrame. + +`graph_colors.py` contains functions for graphing the distribution of color terms across language expressions and languages themselves. + +`util.py` contains utility functions, including the argument parser for running this tool from shell. + +## Usage + +From `ultk/examples` base directory: +1. Run `python -m colors.scripts.read_color_universe`: this generates the color universe (the 330 Munsell chips) to be re-used throughout. It does very light processing of the WCS data to generate a CSV file that can be easily read by ULTK. + - Consumes: `data/cnum-vhcm-lab-new.txt` + - Produces: `outputs/color_universe.csv` +2. Run `python -m colors.scripts.read_natural_languages`: this reads the natural language WCS data and produces ULTK `Language` objects. (NOTE: still a work-in-progress) + - Consumes: `data/data/term.txt`, `outputs/color_universe.csv` + - Produces: `outputs/natural_languages.yaml` +3. Run `python -m colors.scripts.measure_natural_languages`: this reads the ULTK natural languages and calculates the complexity and informativity of each language. + - Consumes: `outputs/natural_languages.yaml` + - Produces: `outputs/natural_language_information_plane.csv` + + +NOTE: below this is +Run `python analyze_data.py` from the `colors` folder. This calls `generate_wcs_languages` to generate the language data, then `complexity.py` to generate the complexity, then Several options are available as command-line settings.: + + +## Remaining Tasks + +At the moment, the density of the probability function per major color term is not factored into the final graphs generated. + +Additionally, the mutual information when probability is taken into account using an assigned probability to the weight matrix gives a large negative value, which should be impossible given the prior is entirely uniform. + +At the moment + + diff --git a/src/examples/colors/grammar.py b/src/examples/colors/__init__.py similarity index 100% rename from src/examples/colors/grammar.py rename to src/examples/colors/__init__.py diff --git a/src/examples/colors/data/lang.txt b/src/examples/colors/data/lang.txt index cf4f5008..0b50934f 100644 --- a/src/examples/colors/data/lang.txt +++ b/src/examples/colors/data/lang.txt @@ -19,15 +19,15 @@ LNUM LNAME LGEO LFW 18 Ucayali Campa Peru Allene Heitzman Jason D. Patent * Campa_DAT_new.txt new 19 Camsa * * * * Camsa_DAT_new.txt new 20 Candoshi * * * * Candoshi_DAT_new.txt new -21 Cavine{\x96}a * * * * Cavinena_DAT_new.txt new +21 Cavinena * * * * Cavinena_DAT_new.txt new 22 Cayapa Ecuador Neil Wiebe Scott Merrifield William R. Merrifield Cayapa_DAT_new.txt new -23 Ch{\x87}cobo * * * * Chacobo_DAT_new.txt new +23 Chacobo * * * * Chacobo_DAT_new.txt new 24 Chavacano * * * * Chavacano_DAT_new.txt new 25 Chayahuita * * * * Chayahuita_DAT_new.txt new 26 Chinanteco Mexico Al & Jeff Anderson Jason D. Patent * Chinantec_DAT_new.txt new 27 Chiquitano Bolivia M. Kr{\x9F}si, L. Rodriguez, E. Lyn (?) Jason Patent * Chiquitano_DAT_new.txt new 28 Chumburu * Hansford Scott Merrifield William R. Merrifield Chumburu_DAT_new.txt new -29 Cof{\x87}n * * * * Cofan_DAT_new.txt new +29 Cofan * * * * Cofan_DAT_new.txt new 30 Colorado * * * * Colorado_DAT_new.txt new 31 Eastern Cree Canada Lieselotte Bartlett Scott Merrifield William R. Merrifield Cree_DAT_new.txt new 32 Culina Peru, Brazil P. Adams and T. Fern{\x87}ndez Jason Patent * Culina_DAT_new.txt new @@ -40,7 +40,7 @@ LNUM LNAME LGEO LFW 39 Guahibo Colombia Riena Kondo Kenneth J. Merrifield William R. Merrifield Guahibo_DAT_new.txt new 40 Guambiano * * * * Guambiano_DAT_new.txt new 41 Guarijio Mexico Ron and Sharon Stoltzfus Kenneth J. Merrifield William R. Merrifield Guarijio_DAT_new.txt new -42 Ng{\x8A}bere Panama Arosemena Patent, Jason * Guaymi_DAT_new.txt new +42 Ngbere Panama Arosemena Patent, Jason * Guaymi_DAT_new.txt new 43 Gunu Cameroon D. Heath Ken Merrifield Ken Merrifield Gunu_DAT_new.txt new 44 Halbi India F. Woods and P. Hopple Jason Patent * Halbi_DAT_new.txt new 45 Huasteco * * * * Huastec_DAT_new.txt new @@ -72,11 +72,11 @@ LNUM LNAME LGEO LFW 71 Mikasuki U S A David West Scott Merrifield Scott Merrifield Mikasuki_DAT_new.txt new 72 Mixteco * * * * Mixtec_DAT_new.txt new 73 Mundu * * * * Mundu_DAT_new.txt new -74 M{\x9C}ra Pirah{\x8B} * * * * Mura-Piraha_DAT_new.txt new +74 Mura Piraha * * * * Mura-Piraha_DAT_new.txt new 75 Murle * * * * Murle_DAT_new.txt new 76 Murinbata * * * * Murrinh-Patha_DAT_new.txt new 77 Nafaanra * * * * Nafaanra_DAT_new.txt new -78 N{\x87}huatl * * * * Nahuatl_DAT_new.txt new +78 Nahuatl * * * * Nahuatl_DAT_new.txt new 79 Ocaina * * * * Ocaina_DAT_new.txt new 80 Papago * * * * Oodham_DAT_new.txt new 81 Patep * * * * Patep_DAT_new.txt new @@ -85,7 +85,7 @@ LNUM LNAME LGEO LFW 84 Saramaccan * * * * Saramaccan_DAT_new.txt new 85 Seri * * * * Seri_DAT_new.txt new 86 Shipibo Peru Guillermo Ramirez Ken Merrifield Ken Merrifield Shipibo_DAT_new.txt new -87 Sirion{\x97} * * * * Siriono_DAT_new.txt new +87 Siriono * * * * Siriono_DAT_new.txt new 88 Slave Canada Monus Jason D. Patent * Slave_DAT_new.txt new 89 Sursurunga * * * * Sursurunga_DAT_new.txt new 90 Tabla * * * * Tabla_DAT_new.txt new diff --git a/src/examples/colors/data/zkrt18_prior.npy b/src/examples/colors/data/zkrt18_prior.npy new file mode 100644 index 00000000..82335893 Binary files /dev/null and b/src/examples/colors/data/zkrt18_prior.npy differ diff --git a/src/examples/colors/demo.ipynb b/src/examples/colors/demo.ipynb new file mode 100644 index 00000000..5bd9fb70 --- /dev/null +++ b/src/examples/colors/demo.ipynb @@ -0,0 +1,355 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Walkthrough of IB Color Naming Model\n", + "\n", + "This notebook contains a walkthrough of an implementation of the color naming model from Zaslavsky, Kemp, Regier and Tishby (2018) in ULTK.\n", + "\n", + "This involves several simplifying assumptions. If you want to apply the actual naming model from the paper, you should add https://github.com/nogazs/ib-color-naming/tree/master as a submodule to your project." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Imports" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import numpy as np\n", + "import pandas as pd\n", + "\n", + "from ultk.effcomm.information_bottleneck import modeling\n", + "from ultk.language.semantics import Universe\n", + "\n", + "from tqdm import tqdm" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Construct the IB model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Load the universe" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "# This assumes you've run the script ./scripts/read_color_universe.py\n", + "color_universe = Universe.from_csv(\"outputs/color_universe.csv\")\n", + "\n", + "# shape `(330, 3)`: L*a*b* values for each Munsell chip\n", + "cielab_points = np.array([(ref.L, ref.a, ref.b) for ref in color_universe.referents])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Define meaning distributions in terms of distance in CIELAB space" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "def meaning_distance(\n", + " center: np.ndarray, other_point: np.ndarray, sigma_squared: float = 64.0\n", + ") -> float:\n", + " \"\"\"Calculate the distance between two points in CIELAB space.\n", + "\n", + " Args:\n", + " center: the first point (e.g. (L, a, b) for a Munsell chip)\n", + " other_point: the second point\n", + " sigma_squared: the variance of the Gaussian kernel\n", + "\n", + " Returns:\n", + " exp(-||center - other_point||^2 / (2 * sigma_squared))\n", + " \"\"\"\n", + " return np.exp(-np.linalg.norm(center - other_point) ** 2 / (2 * sigma_squared))\n", + "\n", + "# shape: `(330, 330)`\n", + "meaning_distributions = np.array(\n", + " [\n", + " [meaning_distance(center, other_point) for other_point in cielab_points]\n", + " for center in cielab_points\n", + " ]\n", + ")\n", + "meaning_distributions /= meaning_distributions.sum(axis=1, keepdims=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "pU_M = meaning_distributions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Load the prior" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "pM = np.load(\"data/zkrt18_prior.npy\").squeeze()\n", + "# pM = np.full(pU_M.shape[0], 1/pU_M.shape[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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WwcA+MIXvpCxff369fj6178OAPj5z38OrTXmz5+PRCKB2bNn41e/+lWfFEtERESDX6/Ch4h87DHRaBRr167F2rVrz7goIiIiOnfx33YhIiKiQDF8EBERUaAYPoiIiChQDB9EREQUKIYPIiIiChTDBxEREQWK4YOIiIgCxfBBREREgWL4ICIiokAxfBAREVGgGD6IiIgoUAwfREREFCiGDyIiIgoUwwcREREFiuGDiIiIAsXwQURERIFi+CAiIqJAMXwQERFRoBg+iIiIKFCfKHzcddddUEphyZIl/rZ4PI6qqiqMHDkSOTk5mD9/PlpaWj5pnURERHSOOOPw8cILL+DXv/41pkyZkrF96dKleOqpp/D444+jrq4OBw8exHXXXfeJCyUiIqJzwxmFj+PHj2PBggV44IEHMHz4cH97W1sbfve73+Gee+7B1VdfjWnTpmH9+vV4/vnnsXXr1j4rmoiIiAavMwofVVVVmDNnDiorKzO2NzQ0IJVKZWyfMGECxo4di/r6+lOeK5FIoL29PeNBRERE5y67t0947LHHsHPnTrzwwgsn7WtubkY4HEZBQUHG9lgshubm5lOer6amBnfeeWdvyyAiIqJBqleffDQ1NeHb3/42Hn74YUSj0T4poLq6Gm1tbf6jqampT85LREREA1OvwkdDQwMOHz6Myy67DLZtw7Zt1NXV4d5774Vt24jFYkgmk2htbc14XktLC4qKik55zkgkgry8vIwHERERnbt69WuXmTNn4qWXXsrYduONN2LChAn43ve+h9LSUoRCIdTW1mL+/PkAgMbGRhw4cAAVFRV9VzURERENWr0KH7m5uZg0aVLGtuzsbIwcOdLffvPNN2PZsmUYMWIE8vLycNttt6GiogKf/exn+65qIiIiGrR6/YXTj/Pzn/8cWmvMnz8fiUQCs2fPxq9+9au+fhkiIiIapD5x+NiyZUvGz9FoFGvXrsXatWs/6amJiIjoHMR/24WIiIgCxfBBREREgWL4ICIiokAxfBAREVGgGD6IiIgoUAwfREREFCiGDyIiIgoUwwcREREFiuGDiIiIAsXwQURERIFi+CAiIqJAMXwQERFRoBg+iIiIKFAMH0RERBQohg8iIiIKFMMHERERBYrhg4iIiALF8EFERESBYvggIiKiQPU6fLzzzjv42te+hpEjRyIrKwuTJ0/Gjh07/P0i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ffv2yV/+8he57LLLZPz48RKPx/1zDJVe3XrrrZKfny9btmyRQ4cO+Y+uri7/mI9bd+l0WiZNmiSzZs2S3bt3y8aNG2X06NFSXV3dH0M6az6uV3v37pVVq1bJjh07ZN++ffLkk0/KBRdcIFdddZV/jqHSq+XLl0tdXZ3s27dPXnzxRVm+fLkopeR//ud/RGTozKkBFz5ERO677z4ZO3ashMNhueKKK2Tr1q39XVK/u/7666W4uFjC4bCcd955cv3118vevXv9/d3d3fKtb31Lhg8fLsOGDZMvf/nLcujQoX6sODh//etfBcBJj4ULF4qI+9dtV6xYIbFYTCKRiMycOVMaGxszznH06FH56le/Kjk5OZKXlyc33nijdHR09MNozq6P6lVXV5fMmjVLRo8eLaFQSMaNGye33HLLScF/qPTqVH0CIOvXr/ePOZ11t3//frn22mslKytLRo0aJd/5zncklUoFPJqz6+N6deDAAbnqqqtkxIgREolE5KKLLpLbb79d2traMs4zFHp10003ybhx4yQcDsvo0aNl5syZfvAQGTpzSomIBPc5CxEREQ11A+o7H0RERHTuY/ggIiKiQDF8EBERUaAYPoiIiChQDB9EREQUKIYPIiIiChTDBxEREQWK4YOIiIgCxfBBREREgWL4ICIiokAxfBAREVGg/j/YryUj3YQcRQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAakAAAGiCAYAAABd6zmYAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOz9aZQlx3Uein4RkWeoea7qGd0NNLobMwiAICxKIiWY4CSLEqVryrQt6fFKz1qg15Ug6dpYz6Z83/JasPX8bF/Zkmn5+oqyNdjWs0lZtEmZBglQEjETAIEG0I1Gz9Vd1TXPZ8iIeD/yZJ4cIjMjMvOc6qG+tXoBVZUZERnT3rFj728TKaXEDnawgx3sYAfXIOh2N2AHO9jBDnawgzjsCKkd7GAHO9jBNYsdIbWDHexgBzu4ZrEjpHawgx3sYAfXLHaE1A52sIMd7OCaxY6Q2sEOdrCDHVyz2BFSO9jBDnawg2sWO0JqBzvYwQ52cM1iR0jtYAc72MEOrlnsCKkd7GAHO9jBNYttE1K/+Zu/iYMHD6JareLhhx/Giy++uF1N2cEOdrCDHVyj2BYh9R//43/EE088gV/7tV/Dd7/7Xdx777147LHHcPXq1e1ozg52sIMd7OAaBdkOgtmHH34YDz30EP7lv/yXAAAhBPbv34+//bf/Nv7u3/273W7ODnawgx3s4BqF1e0KG40GXnnlFTz55JPe7yilePTRR/Hcc88p36nX66jX697PQggsLi5ibGwMhJCOt3kHO9jBDnZQLKSUWFtbw549e0BpvFGv60Jqfn4enHNMTU0Ffj81NYV33nlH+c5TTz2F/+P/+D+60bwd7GAHO9hBF3Hx4kXs27cv9u9dF1JZ8OSTT+KJJ57wfl5ZWcGBAwfwA5Ufw5l/fg9u+U9A6Vuvdb9hlIEwBtlsFFcmIUAXLbDEsiBtG+zorRBnLhb7LXF1ViqQvpOx+iGNflA8Qwf6Qcpl8IVF73dseBB8eVVdBmVgRw+Dv/2uTtOvSZBS2WzcTOdYl+dk1+u7XhDXL9dpf9mw8ef4bxgYGEh8rutCanx8HIwxzM7OBn4/OzuLXbt2Kd+pVCqoVCqR39O6wK3/pQrez1A5egz81HsdaXMsJABbAqRUXJmEoPHRB1H+05c7N/H8k5oDICWwqyvgrf/vOBpCrx4dS27oGVLjQLMB4iufbPLAz+EC2MxSwt9j3iqVITkHBI/8zdq7B/aVWeXfOoKUOahUCkyt5N22qnewPtrXB2nbsYoSGxmBWFuDtO3cdbGpSYjllXSlTBdx/ZK3vyiDdXA/7DPnchZkgNYWlHZl03XvvnK5jAceeABPP/209zshBJ5++mk88sgjRmURy0Lpf76CvlMLkL0VWPv2Ft1cNShz/gHOhl8wKnObhZVl7dsbbaNC+PHllVihSBQKQh7Q3t5Cy/NDtfkknjKkdL7duCIBWi4p+0bWaoAU2kWRUhnE6qC+yLMLSzowAOvQLQU2Jj/owACsgweyF8B5Yp/IRgNSOGuBWBZotZq9rnodEJ095RQyd6QANrfyl9MBbIsL+hNPPIF/82/+DX73d38Xb7/9Nn7hF34BGxsb+Nmf/VmzgojTfH7qPdD5FfDdo6D3HOtAi8PVdlDNkxLylRNKgUEqFbCJCbPySvknMCEk/2L1g7FiytlGSNuGlFKpBfKFRa1TMKlUHAWCEm8udwJ5TgSEUciy4pS2jQ5LsW3ygY2MgN12SPk3Uasl9onY2GifggkFEi7108CXVzpvQi9i7kgJe2Y2/bltwLbcSf3Vv/pXMTc3hy984QuYmZnBfffdh69//esRZ4o0yGbDM3PYl6ZBhwcw98gIxit3Q770hnnDNG27gQneel7rniUnaE8VcvcYMDen9wIhsM+ez14hISBWCaJWA+3tBentcTTDpD7S6EOxtpa9TdcCWt8o63XEfqlGP9CeKngz3uy07aAMYn0DUnHSJIw55s68JukM9yl8eQVIO/2ODWPz9nFUTp/N0Thnj+nGPW0AoT5x743j0PX2dRnbEieVF6urqxgaGsKH8KOwQrZ48tDdwD9eBPnkEsSmmdks6Z4h+UUC65b9sM9diPweQK6FTCyrmM0gS92VCtj4GOzpyx0oPN9lr7azQAculUmpDGk3r8vLahOwwUGgXAKfX9juptzUYBMT4PPzXZlvaQKx/WD+dWXLJp7BH2NlZQWDg4Oxz91w3H3ypTdAPrmEuc/ea2ySkM1GtstuKaMCCgAbHgYbHzcvz4/7j8PauyfxETY4CFIqaxVHe3tBU7xpXMh6vVgBRdtmPjY2GvjZqJhqFY0P36P3cAcWtmw2ihd8lqU9humFkcA9he54+0H7+iAbjWwC6hqPXSSW1b02atZDKpXYuyU+N9c1hUjbNCw9r4dsFRm8d8MJKQAQm5sY+7+ex/T//khxCz8D+NKSM8EygA0OAoRAvvQG7EvTyfWsrmof+cXm5vaZ23wKAJ9fyOz9Jmo1lP7Hy0W1qutgU5OR30nbLs5sI2VgsxFra6B9fc4PlGltEGJjA6JWy1x/V6Gh7LAjh73vlrZdTBvTvNLuOgaq6XQk6/VEAcHGRo0dJGhfH6z98fFHhSBDP7KREWz+2Pu1n78hhRQAQErs+6cv4/RT74O1W+3abgJ63x2FeWCRh+5O9pgjBHx1NftCuhY12WuxTQbwNvkW2MhIvJdiyrfyWT2OyiwKFhsfUzrXiI2N1v9sj+m4KNDeXkeB80ND2eGnz2p/d+pJS9OML06czC7oQ+ALi8YOMGJjA/bFS4XUDwAgBGxkJHcxfGkJvV/RVzJvXCEFxyxz9J+cBd815kxsykD7+sCGh8zLevs97UnCBgeTBdr3TgUuy0mlEjTJpEx+/+Zl7dsb3cwMN6GIwCQkXai4zxAC2tcHet8dyc8XtTFSltklnh29LfMiC99v8uVliK0Yl92CvlWG3KTZ1GSq6ZcvLgcCmQuFoaLheS8WAcqcu8BGAzyLJUBnTAhp30snPa87vjGBt4khGNeqMtdyouLLy8WUZ2BFuaGFFADYM7Og711E7QO3gx27FWKrBrG+YVyOiQeW2NyMbDBJZclGA2JD38lD2s12XfMLgZ+zQDZCZiYp0xei+4yUEFs1kHPTShd1Wq1muhOJheDR9mpCXp6FOLgn1jU5+WUZ/VlKR7MfG83UnlSEFrJYXoFIE0Aig+NPCNYt+9VjZih8ZUNxd0dIJiURgkPazeJMdSpIqe0Qw44fyRaSISVELWEvuVZPuQZ9o4SO4huDG15IAY7QqF5ahegtw9q/p5BI8iSwfXuMAlZppQI2FO/dEoFvoohaLffEZsPDud6H4OCr65A8GsAqucgsVApHswm2uAqsrEf+lPV0Jps2ZNKmUyBkvV6Y+SixnvWNQsaMqOLhpMzeXx3ewGm1qr1uydJq4j4SZ0mhvb1gx27N1L5th6mFxm/hcZXakFOPDm4KIUV7eyFOnQGbW4Hs74W1yyweyxiEJAYAKgfJJEDYd1Fs7d2zrc4hgPM9bGRIefEvm43i44AyBi+Schn88mxmZxYVZLPRvu8pGOG7FzowkO0UYgi+sFggjU90XmcStC2Wl0K9IDOClMqwZ2YzK7sybm/wM9lcizBtW0GkBzeFkELJAgiFff4iML8EMTXa0cVunz2f7EHHgh5WolYzukdwNVRarUJMDIPoskrEeHbxpaX2I319jhlD92je0oyIrga6jRuMbDRizbCxm3LrnsL/szZ0POkS/k4G+gN1075ekCJNp/66OkDLpDTNud9ruOG5c5xYFkgK20RWiFpNS+HQqT9OgInNTYg31dkeCGOpa5mUytuzhggxZtpRrqmQ56kObgohxRcWPS2fz14FOX8Z/PYDneVLS0BeLdX9Frp7CuJ7J7WDlmlfb6pLLDmwB3R4yOhyWNRqel5EhICN+RwXYjaq1HGJu3NJsXuLWs1Hd6MZv2KVwMbbd060p0f7XdpTBbFiNrRWGcQqxfaDPX0ZtK/H+7s9M9vu54Iv2KmJuTkrCPHmH+3TNIe3vl3W64DgQUFi6shhut5j5lOsIDMRvG65vvJ1rA50dBh0dDj+23WdnlT/nwS/cFF9JyHxv8+J61tIZewAvrwC8t23wfYrPOOSqlN5K2W9DOztTZ/Uaa7Ml64kX5KHypdbWxCNZuIz/O13c3F4BTaC8IIJ84PFtJ309OhtKKG2k3IZpJw+nqRU1o9faTbA5+a992RT/+JebGzExj7R/n6v/KQx5Msr0b+HPcRyXEp79eie5PPM2ZZCAyiosXzeooFA5DhhluYlp3rFp2DonEh05xMAx3O4WtG+c3HbzoYG9RWmUhl8bgFicTkyf71v8dG0xd2z0v5+z2yq/X3+9xVjQqyS8/3hZ317ZthUq6s0XN9CKsdFqrRt8EtXcPJf3qvdWVLFWxf6md12SEvwBUgsYytM/r7U4M9Q+dK2o3UWnE4iwmuYYYy00ySEv69edy78UzZS2WwY3Yu4bUnlcTMQFLkCqqV05o8vXqfx2IOdv2sFcs/ZxPda/8KByHHPm94FirU1r33eWCaMmazXIyeb2BAGwR2LhqY5y217OPsA7euLHUdXoXHnL7EsL1g3MC9dXslQ261dUwAh3vrKel8cHhOXus2z6PjWn9+xKxywrmv2u76FVE7IZgNHH38V5M4j8YLF0HbOT581Zw7I4PFSJMKutMSyUttj7dvrBElTpnRXtg4eiAZdZkVLw2bjYw5zgP9PqhixJHNg0s95L63TiHeLvhT31Vf+05c7y2JNGei9x2P/lumexLA/rL17zLMApCEkIOJASmWwO48G7m87AbGxoT2O0raNgnXtmVkzJcJ3QieWFXuPH1F+C1Z8b2ohBbSk+4l30fyBu9XxLiZBZ3GX2pQlb9g+7St2sRdg0omDd6rw0cakaTn25RnYs3OOBqkw3dgXprWDLlP5BFsaNl9YBH8vyOpupBCknILDY52k1eqCTU06G2uS8NSAtWsqORA5wwmGVCr6bCyCQ55wshez4aHgXGxp93GwDh5Q56Qy7A/7yqxDtNohJJ3MJOcQJ7ucVHWbQHt74RHIuqcgzsFXYrJbq8pIEPjG7SmspGsFYW8sDUjbRuW1szj9q0dR/8RDmauODcgVHFwzgDg2MDej6cwIJuUnBY26G7Lu3U2trhfMnHOjN4XYqoEv5NOcxeIyRAHaN19YKpxz0SGQjb+LClMQuYoLX10HpHRO2xqnITFzFeJKAae87aR0Erzj8ZVx2Pj0wx1NFBqG2NqKDV73kKIwi63i4vluPCElZSLbQxz4wiL2/JkNu4cmJk60du+KnzCKC25vMHU31yIWYejkVrjLqiZJqTY0WBKSLrpdyqtEZDG1pZwQdCCbjUI2t3A5xLLSqahSC5WJ3ycbDQjVnUVrrLx1FpoLbHws+Hit1pUg5FgUaGYtlD1FEwMnV7obEK+zB6WZtgtUJm88IQVk7qDKf3sJA++soDHeB3qXWlBJoZ8WfNu0PoPU5boIeApJ0ZFvo9Uq2O0x0fhSxH7XdZgSLTekkIAd7I9E0tssddgpCRnjTrbX8HjQe4/ni5EMr/+iFTZVlW++s22nuGsBN6aQygHx5juozK5j68BARCMEnDirSFxSittt1yGlw6Lu/lhACoiAq2onvokQkP4+NCfVmmrSPZlYW0tXTLpoJtRGns1N8EhQKOntSQw01QnSZiMjypNHoiONOx9a7xVBcKtLU6UlcHxjX9vdD6Lg3NOtL3xvRSiBFgOK4k45KxVXV5Dn9Fnw/rAjpBTgJ06i98UzsI/uT9dMCckUa5AK0w0sSaMz/b0CyvuQAp05SLkMcAH656+p6ykahHR3k6Cs7UVZQMZmFezpy45Lc1wTxkZT56o4uAe0J7SJE+LEGMWh5bkYeS8FEcHnzifKwEY12Oopgzy416jO8tdfinrPUQY2MmxUjgtlWIcChLFIYDftAsWVU7n5+qHVCmhv77Z6HXtt2e4GXAtQDQSfXwB79RQajxxP1SIL56YDwAYGzIRL0qVyi9hR+fusSNtodc0grY1J1uux7r20v98LpA7n+kkcmwRtkA0PgxzJwIaeEWx0GOK+2wG0WCu6DFIqw56+nDpX5asnol5uUkKsrcX2NWEMtFwyjlti+/cGx8i9nBcc9pUZRUWh+SQ4xGtv5d9IBXcEV8p8zXO3q0pqqZtXDNAPfA2+1FovWWIVNzeB2w+CFZCLLy92hBSSebasb72GzU+8L782b/h+XNJDYlmwDh4wr18n/cDIiP5iSPA29Ewwuhewacnj1tbagdSMwdrX1p7jxo729oL/wL2xZfKlpVgOtU6Azy8Az38PQDQ3lQtarcbHAeU8tSpNvv7THZBqNYjra2nbSscINjaauLHbZ89rm2HZxEQsS0jsfY0pK4WUiek33D7s1OlCyRLhCwsxRgaePMAZN1AG8dpbThxWTIxft05ZN7yQYkdvy+fdJjh6/utLuPTkI/k8e3wbcZ7BlbbtLO4Y0GpVmZ5cB3xpqT2pcwSfRqh8MgYrU8VpUtbrWgGMYnMT7JnvGtcZ25bwZteBuDVRqzkM7XGnXg2hTx64E3j/3ZoV8oBw0eWAjK07tM78nJl6BcT3KZ+b0/IQtA7d0o5tk9L4m3Tq6JQTg8cS4TdFm5yCCvJi5AuLwfXrc5DxC/FuOXPc8EKKvxvPAKEtvKTEgf/zddDBgULcuaVtp2qZTgPNN0FRq4FfdVJR5Er1nDEmiU1NRtttqNG5F/x+Ghu9F/VSHdDeXmMPL7G5GQxQzBm3ljj2OsIoTui/fhLku29nbJUGkmiEmumUVInw5RxyETdOxLKUyph9/hLsGDMa7etrl62hZNC+Pv2TmGl8Zquf2KCCuy/uCsHHIB8ef2vvnrb3q48HMbEJAwPGe4So1ZTvkFJZ2VfW7l1RPk/V/ye106iF1yMSNlpV4CybmFB69YmNDfCr86j/0D1Bcxshmeh/+NJKupZpugm6E7O10N0IcXL/ndmyiMaATUzELl6xsJjbIUCoOBKT2nP7rU57EuKt/J5tYmvLCUg1bZfpSSNtQ88ByblyTHXYQvJVHBqX8IYpuJYCkOi04qsjbpykbauzFIfvZlt0WgA8bj2vjjQz8+amE9iqAzdzrS4Ed9bo+ob+XHefUwQW86vz0W9L+76NTSMWCa8uxTuy2VD2FZ+bj/J5qv4/ATeMkNLhm4tA0UlybQ0yhh1CNhvoPXkV9uRQm+ZFymzR1YIXH2Phn5itkxAbGQG7Mh9lPzdBmE19bS02uLCQDdJUyM21NqsELV40mpG+ydsuNj7m3CH5zZkh1ncdsNsOBe7ZdNuSOKaUFUdNk3Q6kiISPC820jd22dScJ4pxIpYF2tenN9ekbK9ng3lF+/pArBJIuazfjzHlk1JZvTcVyKCSSenRDaIPKxRJTDPhXxWwH9wwQkqKYtx506Lj7XMXYM2tonFg1LP9FxGHBKAzrta85bmUMhldslgdiFrtmgou5EtLjtBMCmLuRJyUbQPNRibt0A9Sa0A2MygRSd8kBaBgXrF2TRXKq6bS2GWz0eZ/i0OO8ZBCKr8ttqosbBecO32oURcbG1VzIHoesAJSSMcktg2MFbng9sE24roWUmxwoL2xdpFbyz57HmzTRm2qJ9+ki5gmaOEeM/6gXhXcDUv29cRn3iya1Vhnk9QQmH4NT5kFtsPgyyteXFKeuWdfmjZyRw4j7l5DuTn3VEF6DDIvA1HhrzM2eRIMppUfcvjIhJQ7G1cR00nrQsplwB8j5ra/FeTrxlIRRvNlFY6zvIT7q0CnHpXrfGaE26WpFF/XQgrjo14qdQDmA5P2vOrvrkvoS2+g95m3QXZNFJeKXvCOBAbHarWEgLaCGPnps/obra6ZMuY5Oj4avUANTViqsZjpQH96G7YTSX1UZEjD1HhwHSTAPnseYm09PmOwoh7CfA4pVJHiXPEtcSEU3ishIUYY8+rRGfu4cvRfpNBiitCAfWUG9plz3s9e8r+Qh6uo19tsHG6KG4N5QEqWss3hZINe4HDRqWHygtDAvKNVvb3uuhZS/Mz5SLIvAPoDn6R5U6aMy/BHYYu1NWBuAes/eLSw3El53YCVZd5zmzqAVErYl6aNy2Njo3oBqTEBxvb5i1ETWesi2XtVQ1Pm8wsAuhevYQovCFmFvKc+v3PBu2eMTnKyXo/XjsMbm5SQQoINthQCwQOeZ8osxxrrj4bS4ngOHyanJELAsqZS0biPyQrVGqaVStDZSHDY77vNSFDKel3Z5nB93uknw/e5HorhoPkICiBsFpt6TinXtZBSgVgW2GQBidFiFovY2AhsCHx5BX3ffBun/tWtnblTKgLPfy+b8ItJaMjn5joiTLNu3EkbdGGJFzXhF5heEPL1BN/G5qX7FjyWbklpDtMYxzzmTX89WZSs7YCo1SKMHPTZV7UEScB1vpMgBKuffp+TaTfFfE7vvr347ApxdXWllk5BMXDStjMtADY8lFkjF2truPWvv4alv/mBtiYS59HTYZBKJV98VAtsbBTWwf2ZchilXpp3EWl3cqnwx9VoICwwrf37nBgW3eosS+npZx26JXOQdlJdSUK8sPsIzfi1HaghNvTc1HPvN1Ji4D88H/HWpL29ESYU8frbyXOjwPV/fQupAi7KXVdyvrySz/FCSoz+wSs4//96ENa+vYXlEQoghbmBlMogjBWS4povLEaZLXS9//zxKNcKsm6Sfrd1A1iHbgGtVmFfmoZ9+Yp+dbYNe/py5Pf2uQtekLYH30Zg7d1jHAsnbTu7EDfZhDpoWktEBwRjoZ6RCliHD0L84P2Z3i1svwnNdbG56TChxID29kbnXoHr//oWUppw2R2sfXth3bI/8Dd+SX8DSYNsNnD435xD88B4PAebArS3V526PlJBi7mBqp1F4gLqUuuP81AMT7S4jYaQ7rnWEpItMFlwx/06Jgi5cK/KS1faQcmmC1b1vJTO/UWYkNWtb/aqOkFhp6DDBZnDOlEIDAUjsazUUAxtM3eMEKcDA4m0VfziZVgvn9Kr4xqB2NpSzr2iCASubyGlq9mvrkPaTYjFJYhQumzvyFrA8ZRUKrCnL8M6dQnNY/vAjt6m175aHcKEASHMqwWfeTGO8TwBMoNgCxYgs5WRRdNNC2JNgFhegaipN/LYbM4Z54VsxU+RSsWYLifWBJeU+HEbXPDTIDa2ov2a0J+kVM68sVn79+UTiIRAcg6xtBwRbqRUbrPQmLJDhH+9tQV2VsHw7v692TBmk3fhEsMWAqMQhagiRgcG8hEI+MsqpJTtQlzwJiGBexl3wxCbm/EToIgF3lqQfH4BpatrsEf74jPN+pGQppwNDurlPWoFDAKOC6qJW3wh6c11yvBNfOPNyE+/I3imS1tRq6VGy6d6NZnCDQpNAa1WHVOSFPF9mZMvsCNQxOS4G7oMBzoDie2XnEPybFml5dZWvoD+Vt8qPQulgKwXEyskbVtpOrP27skdyiJrda25pleYZl/GrZVmszAT73UupBI6MnP8RPZAuIDX38nTsBbWsXnrKPiH35etLQBQssB2TSr5BCN1tyaFFDL793cSfndbSo0WVCTQOC7wGECuhIZuG12hmFMoaHPpUerECaUxd+dgp+8WMp9oEpS1NPD5hY7de0nbNnYgMlaiSlbuNavrYNENxIYRZMiIcH0LqThImXjRp4S78AvUVvmp92BtcVz6cEVfSwptQHxhEWKgD3LvpP7pQ3AvhsgEpFTOFuCsC98mYupcEd7sk1y7CTPPEusFaTcbAKGg1UpX71PE5qaeEwOh0WBaU5iwO6QxHCjWSzjzLSmVu+OunBB8322Yzj/73IVMaxZA4d9opOAZk2BTY8KCG1NIZQDr74tfsDkmAXvmuzj8T99C7cHb0p0jCAEbit5HiDffAb26BHJov+KlfO3zg43HpBfPQJpqhIJdlKVtO3E9pnb1Fli/48ElajUzRoBOCjWXvSMUTJupqEoFpFxuuaCnsHYoxpv2mYUYsKkJsF3Fus8rEW5rWtLDllafddySTMO5Qx9M2lEwSw3bs0uvTzIG9JrGWO4IqRb46qoRu69R2csrqL56Fu/8fw8lL24pY93H7Ssz4G+/q/ybtXdPIa6x9pUZ9QZYkGCK1aYzuChrLaKM7earq+2FpFkGKZWBe49mqk8LMewdqVDMN1GrOawTrjA3bYphni/70rRWosrCIWX7DlrRD2x8HPTWg9nvZO87BquI2LU8SiZl2kqLrjC2z57X65MuhRXsCKkugS8s4sjPfhcz/9sj6s06ht0hDn6hZF+azuwR1E0URlSJAmNCcoJYFmhvrxMX98qJ7W5OALRaRf2jD25L3SYmI2vf3sSgYmPGBdW9nUKo8rk58JOn9cv1V2FZkC+/GTFtarUthPrHHlSzqKeBMiNB0fE1k5D4URlLpYkbXkix228NdBypVLLF9BRhjpISu3/zZVz9Xx+IskIIbnQ56wolUqlcM+wONywIiWV7kLbdGYooAPKRe6MxcWlj7TOdiloNlT/9bkfalgYTk6R9aTrRPOZXwOg9x8A/lOKIVGCeJhXY+Fh8yEIaFMKy8vXvwr4yo8y4m4jtCJBOgpSxiqjY3MzMXH/DCylx9mKg42S9DrHuxCQZXRAK7gi3nMJKNhvY9R/eAVgBaTkIcTaDuGRr20TLlBfK1BOadetc0NNq1VhR4XMLxqzViW3QSEvOXj0ZjYlrxcHFaqVh0+m1tpHpwJ8+fqzFmN+a4/LtMyg9/5YTT6YTAO8DGx4KOoykrGXa16c0o/PF5ciacxMx6sJdJ2xwsO3lmpZuqKWkqOLJIvNJQ+DR3t5M1wQqT+M45Z8ND/lSl4SUrJ308Q6Ukt2d8DHZZWPL2tryYnTyCAC+tASxvIKNH3kA5P47M5eTdi+QWdtLABsbTfx20z5VIROtEmWQTbudwjslS69R8HFLMxcbxdE9BYKKY05IsZqnlKnsEnRgAPSeY3mamAra11eIUhKBr4/F6nrgZ4/QVnCzAHgAwp+qPe0etKUAKrNuK96TnMdm6GZHDkfMee460ZrrXvJECTdNfThQNhKkHiPw/EqcqMV8nw+0tzciAMXKWmTcZaPhrI8QxPpGu7/CnqA3W/r4TDDccNxBd4IO8wkAadvoO7eO5TsH0PjoQ7nKiq8k44aaYFaStXpy0GQBm3gm27kUQeeClCy9merIeCqxdk1F2UdUJyQTpCkojQboojk5sFETbNsoQ26mOhLuMU3vOI3G3KUg0x1zKZ2whQfviv5tdT2qFLmKsk6bVAHR4XZptlNy3vZK1HBYkk0bsmmHfteIjnuMiXUnfbwm3HsbUiqrNT9TE16KpxWtVrXKlK+eQM88R7OfGnH9FY3IpW1CQjix4WhGAdfdDAF6RtAxEWgwG9C+vu3hkiMkOfjYtCwNyHq98DQW4b5zPQS7hU5nFmAjI8n9q9H3UjHOfPZq24syzS2+0zBUtGSzoaSO6+a43xRCilYqTrbKakWZyFA3q6kuSLUSW2Z4kZW//hIGnz0DuXcC1uGDGSrLv/mJieFgORoaFrEswP3GDqS990BZS2i2Tnc5sqmS/r6OZD5OQ1L4gBFMvz+J+DeDYmHSd4XTSwEg5VJHhRQZ7M++FxDimO5efCP+kUrFMZf3aiQM7SAy8zzmWXt+BcNwXhQupP7BP/gHIIQE/h071raN12o1PP744xgbG0N/fz8+/elPY3bW0I3ThebH8tVVj9pE5UWUyTXadXNVpc5eXomW2XqO9isuYufmQFc3celH9pjb+POa1wiB+N47xuW4sTbODwbZVGPaEMsa3dfSOl2TWA5HAD57tXhPvG7SFKm+P6HvCGPALaHcVJQ5F+/9/cq5mAS377ScU8LCsYCAbbGxkW+epcA+fzH5hBC3RijTEm5sdAT88J4os0ROYd4160COtUeHh9pzwnCv6chJ6s4778SVK1e8f3/+53/u/e2XfumX8Cd/8if4oz/6Izz77LO4fPkyfvzHfzxTPbS/z6dhFzDQhgwFhDElQ0QElIG1BigueNI+cw67v/gK7L90p3Ix52GIjkUMw0UEBW/C4e9goyOx2ZTF2lrs4uiY2cRVPnROG3GCo1uQMpb9Wto2xJvvBH8pOOgte0HHRwMmqESE/37v7al9z5eWvM3I8bq0rl1Pw7zjFbrjjJsz9pUZ9Ukrj6JJCOjBGCaaHGUWDT43lznPXUdEsGVZ2LUrGpy2srKCf/tv/y3+4A/+AD/0Qz8EAPid3/kdHD9+HM8//zw+8IEPGNUj1tZBSQn1jz2E6twW5MtvZm5zFhurbDbAlzVOYYJr0aTIeh3s2dcx9/98Pyb+9YuBRe3Yho2bmAotxoGCN5ewNswXFmOeTCmniFORz725XbCv32PmBRsegmw0lW2g9xyDfOu9QoOXk5DG+ealA3efP302+EDaJhn6u3z5TZhsq3lpnIqGE3ztyzoc+j7r8EGIyzOZT23+vmYTExCrq53rAymj45kFlIHddhD81HvFU5+p1pgBOnKSevfdd7Fnzx4cPnwYn/3sZ3HhwgUAwCuvvIJms4lHH33Ue/bYsWM4cOAAnnvuudjy6vU6VldXA//8qHz9ZWW0f26qIMpS2ccLh+CY+NcvYvWvPlRsFlCVdnQNMCYTy8p3Usuq9bmnpKzUScsrsUJSlVqbVCpOQDBlqH+8Q96cMZC2Devggc6ZJbM6zhTFORkOjFdV5Xe93txMVCDsM+cKMyvyublCBJR1+KCxJYUNDoLddkjvYcEdAeUDrVaLMSUqOBWTGEbCKFxIPfzww/jSl76Er3/96/hX/+pf4ezZs/j+7/9+rK2tYWZmBuVyGcPDw4F3pqamMDMTnwjsqaeewtDQkPdv//7W8TYUPxBGKlVQ2qIVPKjlF7nIkxao4Bj+4++BHNiTy6QVeLdLAsl/p2btmlILeV8/Kt18CYG1a0qvwhzfZXp6zrNgZb3upH8XHD3ffCP/Bm34vn1hupATMbvj9mjdvozR7PgR/cL8pL4jI17gZ0A50/C248vL6VWFhVJRpMZZx7FVty47vH3uYuC9SDN8c5NNTICNjTrM+mcuxBeack0iajX1GjH5Zn97felv+PoG2Gi6cgF0QEh97GMfw0/+5E/innvuwWOPPYb//t//O5aXl/Gf/tN/ylzmk08+iZWVFe/fxYutAUtgWqD33ZFesM6i9ddhuMjpwEC8lpeyuYrNTcjz07AfOOpowRmgSiUf64ZfEPzBvHzBCVqONoyDPHBnvGYoJfhCgv06yWtNu6EJLB1xMWJ53W5bdYpaTV1/Rtb2NLDhIXMBFbOJy/PT8XUL7vw9w8btODWtO044/gDTpO/0YuIML+KrVcfRoQgzdkrdselv3NxvreBzNjKSrJAK7gRwx7TZH7cplpYgVlbT47zCyr2u0Pa9QwcGkgWt4O3v99/dCQ6xqhfH13EX9OHhYdx+++04ffo0du3ahUajgeWQ5jM7O6u8w3JRqVQwODgY+JcEyTnobLZ7jiIhGw2Qvl5H+8wAsbmJ8sUFLD6yJ1vAr2IBSc47G4AZYgeIvdOZWUrc9BPvc6R0spB2AJK3YuBMedQKqdy3+GMEOK1WjWPq0lgF1G0RICUr0o4060QmthCETtQddrCQtt0RNhZlXe58in2gFdS7tRVkayEkquDqCGxAP9GmH4QkB8DHVVurp/elwtwH6Ct9HRdS6+vreO+997B792488MADKJVKePrpp72/nzx5EhcuXMAjjzxSXKVSOp402wxZr0NubDrmK02W47BWYp+7gOqiDV4hsPbuyd+oBLYFNjio3Jg7sVnb05dznUw65pTQ8pZjg/1m6ci76tFntpmE70TCgdjqlyQQ9/2GZrI8OZtygRDlvW5AIFLW2eBaTYGrNK1pjnNhCSVbwoT26uULI6WycxI0VSq22wX9V37lV/Dss8/i3Llz+M53voMf+7EfA2MMP/VTP4WhoSF87nOfwxNPPIFvfetbeOWVV/CzP/uzeOSRR4w9+1QgVlTz03+5M5sMX1qCfO88ZFpyObcZiqyr5T99GQMvXwKfHEm/q8nzHT3VdoBuoExnmrCpye5uxtsE0tvrpPI2WXzhQMes9x2t/o27uBe1WvYMri4YCwRix8HjyQs3kTrmVm3B468vXJZONugMoNUq2OQESEqGXEJJR83fmSGldq6vwJ6Rdd75BAcpl/TqZd3hgihcvbl06RJ+6qd+CgsLC5iYmMAHP/hBPP/885homSj+2T/7Z6CU4tOf/jTq9Toee+wx/NZv/VYhdZOeHtChQYgsdDAJ0j3swpvciKi7pajVAM28NXEeY/b0ZVicY/Pe/aiurrWf89dHGQglmU8ofPaq8vfuqaVxfB+s5RW1t5LbjpzupqkgBKRc1vOY8ufbMWhXpgR9IYFGe6qOmS1N0IVzAnXBwSXQdxlMa9K2wSbGIOYWIBPSy7jrJmms6NAAxPJK6pwllYrDIafZXjoyDHv/RCIDBOB8SyB+R2eedGqOu4wihmMiNje9NtFyCaKBfEHvmsKxk4HVfhAprwE/ZEOsrq5iaGgIH8KPwiLpUp9UKo69171rYMzIXGTt32e2cXVwo6a9vbAfOgr2nROQzQZob6/jILGdw0gIaE9Pm5HA398Fgw4MALfuh3jtrZQHGaypiYDZl1hW+h3BdoIQEKvUnpshAUZKZYCSzsXcFDxvrf37IObm829mlIHedQTk8lz+U2RaVQMDTiqfJG7Ovr6OJBl105Jof6Nh0sNc0J0bJsqgbOIZ/DFWVlYS/QxuCu6+QM4lwY3vM4w166QJntP+LTY3wf7iDVz93APw+MI0JkUnuNQ8SBk4ASbluIq0y5A0VKytpQsoABA8ci+ZmbOsWwgnjQttQLLZMBNQvngUr49jqLzc+osCGxuFPX1FT0ClzMvaxx8AuTgbu3kXycQi1tbSPW8LFlDu2PCFRW0BZe3ehcZfvr+gBiTkJ3OhMTfowIB+XJbBXnRTCKkwSKkMNjW5LbZo77SRQ2hI28bEv34e9O6j2jZoaduw9u5JDU6mAwMd7Rf/RbZ78Ro29WgHMYf6T1vgGfDt0Wq1HftDCKxb9hfiBOD1ccocUF5ik/g03QFI6TGd+F1/IxtOBzwZ+cKiMv5NuRmmZBSo/reX1JQ6vgzEOoj0Zdr6M4ml8jlg6PSlX2kwMc+TUhm0txd8cQnlP3054cGEGCh/EsKWZcnktKvaH4hlQTYa4O+eibZDBQOF6KYQUtYt+70JZO2aAjl6GPxqMZHgSmhM/ohWryuw3IUuJcSb70I+fJd2zJA9fTmVgkisrTmmOpP29PWB3qWXYM+vhcqm2iSYqKn62Q3CdD0JLu+AE4tCKhWYENWKWg385BmvPvvCpULSFHhzL2GxsvGxgCnXOngA7PZboyeuvMiaXysN4Q1eSmPTnxtTRqtVRwnxx/llubsxSboXkw1AKWgF9xRQnb4MKA0t6MQwymbDiaFM27uScpT5kxDqjr1PMVLVHXv3WMDp/MYUUoQEYkn45VkvsJXPLwBnLnTW7BMTqOl55qkWV1x7FNH9wsc+zt48g6s/dZde8LJbR5oASprgimfF5qbTp0nQMSlo1kfKZdQ++X7jV/nKarbMwZqODblOoArNVyyvBOrj0zOQF9Kdgkil4gTw5oBDCpvTtdkfyJkTol5vKSHNbGNYoKnbXX9scLA4928g+7d1A0UrRga4MYWUlAGvI7/GLm1bn5g0B21KhJNOSu0I6wBUm6Lvd2JtDZMvroD3lGDdosGGbCKAdBG6k4p7Rtp24E5ONzlkpKhGA33vzBm/l5asMi/CGUwT738iL0fHRdq2c0p2gx9jXMJV7RAbUbYRHbgu4bJpe2wIxLKyx+iFGA2STv2JISR+dgnFGLLjR5KVhJRxT7wrDnMTuswhWzWvjzJBoYBeK3em7PiR/KwuBeHGFFIoyD1SFUynY8cGnEDQ0PuFsHYrNnXx2lsoXV6EGOjTE1RZq855EgpH+ksujANT3XICzM8ago7ddqjzd5C+E5d1+CBoTzV100m9m0yK5o97L4NzkNeHUrTNoa5iJyRkI7gZ097ebEpc6Hv890RSSGdOZACpNdTBxyGrSixEQr1StgO7fX0eZ67eTpBKpRBOQrJV7ywzjQFuWCFVCPwBbhobHKn4MvJ2QmsnBCQmDbl9/iLo2gb45HAhgopWq1GTUQEZjP1266IWOWHpJxbZ35MrA7OpgBYDPQDVWF6EBgNqSTC9uCnNEK1WcykTyvsJwcHnQidXxmLnYix89zYuHCFNvb9nPZnYZ89DNhtKMyWppq/dVKW2E67eBe8PruOQ8bgoYJ+7EIzF7FZiTwV2hFQYMSYaL8FikifSQH9bg22ZCAr1mmqZzOJgn78IdnUZa/ftdtghcoAMDQK7g2Vou952wNWdVCqxioKOsBOvvZX9JEsIiKHpQ7z+tuPOnALZbDgbYMvDjjAGqkpEqZnYkwwMgGa5jzJ1Qlhbi52LJkKSr64GA65zpCgHADo46JxgXUiZLTg7Dm7AetHQHN8k0P6+lgmyWCcYwhiohqBvv1Bs/+wIqRDYYL+XRdcPzysuYQACMQ5Sgg4PdT0flX3+IvqfP4crP3FbLu2Hz14Ff/td8xcpixUYeS6Z6S37QA9nY4M3QkzerchJomCwkSGwiXFI21bzTobvKwhRz9O5Odgzsx1saQhhLZsQ4OihbBuVgddlHPjcnFaC0cxImN+5iu3vBynncMKgzHHT78CJz+gevxXY7/85L25qIaU65fDlldhJbh3YB2Lp8VoBjtCK2zBoX1+qENEleozUO3sVk//qBZD3HTd+N7YtmtoxufdYMHDUnztK955EEZ/CT72XLjR1TxuVSvxFeUrMTmEItZMvLBqTInd0M45B5DTrFyyEgA0PQ7z+tvlG7h87X9/Emtkp00p2GKjC0Kqh9HBMEgIma7X1rLvGxdpault5QowXO3Zre81oxnfRvj6j5IPee6p1QNpJRP0CzZqajO93zf66voWU7yOtwweNU2KYHovt8xchm40WS7b54PohNjZStZ6saQ+clznky29i5bMfyO8mS/WD/eSrJ4IxIIpvTG1PzHvplet5R8l6PZPpL9wHtK8v6gFl4s3XQqb51KULezowAOvwwXa1SS7SUqqDbnXgHzt/2gnFxm3t34fGX77fuC6T9c6Gh0Ba6Su0lROTMXE9BE3WeFyMFyHgb50KpjrRWD9iYyOToqPcC2KuIuyZ2fh+1/zu61tI+T7SPns+m3kqhLQ0BuxOh+XBHVza1wf5ffflrrdTGP5P38XGj9yfL24mNOGtQ7cYa7F+FB1vwSYm0gVfB+4RxMZG9N4p7GyjodHyhcVtORXpQKytwT53MTaAmlarkVOpDvWXaU4sP+xL06g8/Zp2XVmUNL684qXPKMJTmFhWpB266XtScY15GBaN61tI+VFQjEEgYZjiklScPhdgbRCbm2CvnspdbwQpm6qu6UI2Gxj45jvYevhIMfmoAPBLV8BXitlUyf136vN9xbVnYTFd8KnmRoc9lmRCJtUkEMuC+EE1Lxvt7c3kFOOSl2ZCAiuBqNcjGaBVGaHD4AuL2v0fmes+rV1sbTlsJwllbVcQaqANth1pB5+bT34prX/SxtPAK0+5n5g6c4TjyQrCjSOkTNBiP9DlPwv8GN54dAJZY9pgUm/kz5w7QkdjEvHlFfS+eRkoWdETVfh9jQBUzyMtA/x9Tkpl0EtXIWeDi1U7non63P0BM29KQrS+gZTKsPbt9X629u8rlrtPAck5yicve/X7IWp1yJVV49OBWI1n9s5lDlYphwnsKQFKI53+d5nrY8qDlCDTs9pjGXhXZ5M3oAdzy9cxD3rpf5LKV32T6zVcKifvEa6nZEqspxtArezjOMVfJfgIcbJLdCC26oYVUmkTRXLRtRTSeeCkZ1BMCikhDcwQ9vRlyOUVYHI8cMcQ3WCyBVPqwutzygApwOfnoyYzjXFRCQoppH42Xe17ABHoZ7m1ZZaxNw5J3yhl2+EmPB6CO2aohPdJqRwg6WV33J54mlCVZe3dk8sk58Gv9EhpHCDqBMXH9Hfr99p3U62+ZONjoP396XPA1DrTKt8fkBwX9Jx5DrUCi7VStruB2UmPCenxiGorXzF7RKfS4NywQiox8NTloepWLpaYNmghITCPLywaTQq+vAJic/DR/nh7eMrCpNVqvvsdX5/Hpc7QI7xUJIdztfMsZocYs4i07UBoAZ9fyD5vKPP6XfcS36OSCrcvqQ2UtLO1EgLRUzLX2EsWiFW8OdTEeYH29Rn1NZuYSD6htuomluU4RRQJnwlSNn0EzXFBz36S1wQo57GuY5GibNfRx6Nty0IuHEfVFv59QX18wwqpTiQl2w5kvdeIg33mHNj0PJqHpjI5U5D+viBzg85EVAkNRRoHE8ESORkE3HOpnsmQkPaiLYBNw0OMwCMlC3yf+emEDPSDaqb0Bpw5w5dXPHOYfOWEoymnpWr3/c0+d8HYJV5ZdkbmFVIqGwcly6kxLUcKe2Y22VGliM21FZScFPSsVUxe07JvjgMAHR4CYe3AcT+U7UwzeSb8zS0/dd6l4PoWUp2I/DYtv9Nt6ADsKzOw3jqHxv23Gi8CPr8Q1Eg14sZopQI6Npr+jIppIfGlIIGvB8G1lBTa0wNx/KDzuuHleoRA2F9unzq+TdbrkC8lpzNXgc9eTfYwi7scDwkHNj6aPF55TDWEGMUQJoIy0KEB2NOXtep1Id58J7sLvL/6rLyEXgEFZMxtfVdez0La0wNxZ9sxyb54yfNYjMz5mGuFMElwoJkJlGTuPsEmx3Mle72uhRQbG8vPVJ4EDeZka8/uzPXHldkx+CYTX16B9WffA7njtsyCVuWxpKpP1Grgs1e9X4dji9xTj5/VQ+cynx2/LVqfwbeIzU3gxRShESrPnTPStmM3Ip3srnk1ZP/77Mghrf6yr8w4/HahMAvTIGU/M7uHvKkc3ABUykDLJf0U6hkFq5ubSgWdGEZ1oc78sw7sTX80LemlylRXrarDY8J7YGv9kFLZmePPfy/aTv//hxyQEhHOFq2R7dqevgyxseGcjn1zTZdq6boWUnx+Xqtj3ZQQdGAgEDTpSnrlotOA2NxUanu0r89oE7L27vHyQRXClB4HRSoI8b130PzLDxgLezY42BY2qsyuCTyHYUcJWa8HNcbQhuctTsoCZjx+4mSw4JT7NC/pob+NcXAFnqLPikDecvzv85OnjQREOMxCV1tnrdOwjhDWQWDOuPcsLccQZf0jI4Wlj5DNRrDPCIH44H2J6yBVEWjNP/tcQm41ysDGRrWSXobhxm1F3gvvga31EzsnwkHBugI5Z8iGbDYg6nVv3EVNL+nsdS2kACdbaVq6cVGrOZN/bU1pi86y6KyDB2Kz0YqNDaNNyJ6+7FDJbBNK//NVvPt/3wdr/z7td/jqalvYqC5fC/Ty8Ran4KnUMaRSicwH6+ABj9ss8H6rjcrA5Gsot0+hyGGeTsvqnFpvqG5TQc2XlrRIezNBStDvvJG4Ycdt+mxwUI+js5XFIFc/bieKuBtPIclW4boXUvzS5WJOHwmLV+VgwC9dhnTTiqcVXSq3s/LGIc20ODCQm9k8FoLj+N+bQePghKct50EnAvp04VEe+VJe8EuXExcYX14O/EwHBorl6dMEqVTiN7sCWLIBBOYZsazgpXqHTM3e3WWXhT7t7XUYYpLgNy1n3IT52hr44nL6gxk26O2486b33aHleMTGRruy1q97IaVjEw2D9vWBHT8SKii+DLEevYRPvY8JPNsEX1o2aWK0jK0tJ524D6YsAkmX/falaZTeOg/smkgXhmnBvgkLUctck3dhtk5BrjkhdWMIjb3Y2IRwk/yFs8kamDwCdwhxzwwMtO+5Gg2IleBJwdssOnCyk7YN2WKHsPbt1Ta/GNfDfXmiWv3n9alOQG1GiFoduHilXUYMw32u7LqtMjoWzhIac2vf3kTmmLyedABAzk0nczS6d82r68F4rQ4J1OteSGkhvLFwDrLc3gzSNMjc9xBSJpupNLRkaduRMmStDpP8O6pswV79aJlz5pcg9k1EhXigIOlswC1uOpU3VFxq+MTJ7ytfidCdVCoUbu7a73lxLCLYZoNgZzcTMR0YiA2MlY1GO7BT5XwQ3gQK3gi82J6NzdSNNs2sHl+Jnzy2FfCqMw/cd936e3uNxz9g3k8JCk5EBgeTTkCur0MmeK4WQVDAl1cifUIqlbZwbP0tksetQyflm0NI+UEIRL0ejQEpYPFnyh2VR1NUTFZarcafhDRiVvjsVdDNBuzRvsyceg5LhnpqpaYjSCq3gIyjxmgpGJ7DjcFC9CL5CYkNyo7Ewfmpg9AWIqq4FhWME226CkoBrttacDe4DI4DANKDcGNOS4XAndPbmKWWL684QkQFl+qrYGFBq1Ww0ZFtC7e5IYVUYuCowmyiRZefNkCUASND5gPptifrxAppv6RaAUYNg3RDdfO334U1u4LN28djbfqiVvM2WLEZ1MJJteKQjBZsAlGdJlPhH4+sfUwIyEB/+2eTTYoQ587C54KfBqo4LXhp1tO+gSk8LRPbl7AFhE5uHQuQ1+CLBJx1quOJyAYH87H+q+Dj6Cw08NuP8EnZVBjmyWqc5NXY0wNUyrAvTWcvPwduOCFFLMs8KFQHaY4Nfb3g757Zdo8wvrxSSMoSfvoses+v4vTfGNW/UG9N9KJclIuAasNPRXizkDIQasD6WyEG/ueSAmqN+N+k2gNVFXypej3szp+GBEWCWCWn/zqsQdOeanGBwFIC+3dDHDHI4pwkDBThFYWzqvu5Dd25QogTFK4DkzinmPe9uhRjzZeWkt3qVW0pENe3kPKz+bayrUrb7ryLp0LzS3WN1V3ocZQ6lmVmj08pTwf8xEnc+v9+HZs/dJde3V2Kt4gtU9HHWSL22eiIQ0AaA766CmnbYOPjYJMOX5y1J3tuINrb29X7DlKpaI2nbDYguQAbHu5oe8TGhtnGnxLszU+cbDN7pKw7Wq3COrg/9u/Wnl0gx26L/XshiOHC03W3zzP3AHjhObFtiYNqHXfAgeT6FlK+DpX1OmTTLiTYL/ai26+xmJ4UdJ/3D7I/9bpr6jJIHWAduiX3pBGbm+j509dw+T8e1mOB0PE4jGtTnsvpAm3xfGFRa4Pgc3Pgs1ch6/VsphDXS0rTjJUKTbOZrNe1zaay2TC6r8rsXGECHXYL0k5n7gcbHAycjEStBvvMudhi7EvTEG++E/t3a/++9PCSDsO+NL09Th06e0sBp/DrW0iFIYVxKgAVxNoa+Nycuvw0FGkaCU0CNjYKPHRXfNWt0ySA9Mh3A8hmA3t+8j3U/vK9qYuBLy5lFxYG7AemyM3ebgitGBIpjdlJEpFDUBvnlPrAPUpFzvTeit15tCOCjfb3g7lM/z5lzz0FFwX74qV2WpVthGgpHdauqc5Sq5miAMXxhhJS0ra7SiuU+ZkWaG+v0ebAF5dAXj0Z+3cvkDWlLbRaNfZElM0Ger75Buo/cFfyu9t0F0UHBry+JKVyJChZ1GqdbVtIAPLFpehm6Asw9tplyE6iC8eMpX8vY0yw+8o7kGtruU234uR7asFGiFH7AedU4/avWF+HPX2lVcm1nzcuN1pz2569mrgHykfu9fYdHeWIjYwUEuCfBzeUkDJCnFadEovCJiYCpwliWZmP+6JWNwskzEjiyY4cDtxBiHo9EhjsIeH7Ra2G6itnUL/3YDBx4jaD3nUMhFGvL6XdhAint++023BYAEoZEJzu7zoVMBuGqNchZvQ9Ck1Tlbs8bFmTZLLbb3XKiRPQUpq1HwC/OtfuX1+ArZ+v81pCJhNdWqxciiJmvX3O23d0lCOxthZdS13GzSGkUmInrH1724s0xRtLhjRfyTnERsbTm2ueoSxfCu80LK1ANn0TMkTPEtDupXRcbGM2Lb6wiOrZBUhKHM47N5g31MdscLC4b2qVTXt7o6c4QkDmFiE2tnwBowr6GSm6Ht8ia/VocGW3tHpT02masCEU1i0hB4OQN5oRFpdT3wm3n42PJbqWx+VeE5r3b4lmMsqKyVTsQ6YTdE7mEb68YmQW9siIKevOfaMCN4eQSkPcPZbKW2xzMzi5DLxwtgtx2WS9474IblBpqa3tM+eAhWVgbNjxjBLRNNUybRGE89KUyumxLUIAPLSZSuk4L6SdMKWCbUOx8NjUZGGX0Nue/TkEkuROnjZeUtH3yO51mpqKI06xDM1NHUVIO7ZOpAjqjKdGoOXBGXLqCuwjmk4vmdDBu1ht6q8cCuvNKaQU9wfKzSRPcJwJBM8ee5F1AhLio8wPadxSpC5Isb4BEILm1BDI0GDUHJRiygyzR5CSBRInHFobqKjXC1cISDinzWA/SLmDp9q8yLHheAHBWSAl+Ny8skzCWFDI6bYxSTAq2ilW1yP3LaRUHMFp4slT8AivoglIuQRSiZ9XhJLO7TcFlEsoia4VwFkrKcHNpFoFYdnbcFMIKdrf723IxLIiAZ50MLrJAsiuBZtuJMQsdbq/fNrfn82M5TcHhU815XLqRk37+4C5BVhnrqB+536wUAA1Tdnsw6YOsbmZ6iVFKxWn3oygPT2RHEaBmDpCwN89k5xafBtBq1XQnp7M72dO5gcAhICNDEfLrNWiF/VFOKgo2kmHhyKnkUIdpZLWbStbcFbw5ZXE02NSEs3cKKBc2t8HfiSayoevrqaeVPncXC6v3ZtCSOHW/c7mRghofx9oaLHxublCPb9oT4+R4CAmVDaEBIQs2b8btJwvWj98qpGNRioBKF9eBl9ZBb86h/JLp8CP3RJMSLiwmIunTwVRq4Gvrmc2x5G9u5Lj6HTnQJdc2cNzgk6Mg+zpQkxOTBpx24DaCUgwL2ZQqkipDLG8Ar6y2rn+lzJ+HQreFjJ56k8KRPZnyb3GwFdWQV6JjxfrJG4KISVeewuy0QSxSuDLK1Fy2aLr20xnlPZD2ra+phG6EOdvncodW6RMWJh2Ie7jHBRrayCvvIOLTzzQ+Q08IXOrEr728HfPgPT25L4Ap3ceDXqMdeibw+NiX7wEfvpsR+oK1PvwXbB2K1gMDBU5Wa9H3iGVCsT33RP8Xamcujl7mWY1Lv1JqZyNnQWazgxSgo2PZYtvU3no+mmRrqE7zAAyehYXgZtCSAEth4dQJ5te5lkHD2Se/GGEI99VyJUbhpDkdBu6cDcEjU1k3z96zqnTfTZjagmPF8/4RUV9oQ3Nnr4MubaWiZnEi8F58x29FBCJheXUmDuoDJDnXo9V5FIvyVNOubJeB/2zV4O/azacO1BF3qdYj7sEbzvZbChP8aZrl1arsd/D5xeCAs30FOR6rJp4zPn7J1SXct2lUUINDKizUqdAuXZiPJStvXuST4469Zk07kZDQGglxUa1gtns8xcTTVgmZiidyPdIvpZWO7XqkRJcM3OwV7RPOBDLCm4QOhqelODvvIf6R9/nTP6M7rKpiSzTTndoxa/FxHKJWs3YAYNUKsXefyRQQ6nAJiaCp7ciIvl7e40DZtPmrPKUq6OsBHJOtb/N7fNISIPg4PNRR47EKgzNz6JWU36PMu7K9BTkOgNtbHj/T/v69MzRirr4yTO+HGh6mRXE2pqS8oqNjQaEoLVrCvSuY4H3ooWpnb/sy1fiT2Cac/imFlIu2G2H4un3KQNfagW+pg16wXcwSkipX4/uomltIJ5woAwg1Em3EQM2MuK4jIfduAVH73OngV3jmbS0JLCREWdT9Y0Di3F6kbYN7jIOaIL29cVuptpJ+uKgq2nHzDGxtASuyBCdB2JrC3xa0/TtckGq/mRZySeCnLE9AMDXN5z7ZH89RTOIJKWrKJXB7rjda0snIDY388VcFgS+1IqlcnONzS+AXLicLSj6pqdFKspkMr8Yn9HSn6VVtYEVka8oBrH8b0Vf8EfYEoTjPp5Qj7Ogtpxn/UKTEEc7m5kHqZSVmmGqLZ8QNS/c5ibk4nLwd1vxdEemmrPqDqX9x4RLda3CQ3Fahua6iPeXf+5nNf2Z3DNICbmw5LCrhMMNOPf6Oiu7AxscdOJpLEt9mhAcYn0jMtcyQ5GCI2mjl5wDs/Opz+nC723criT5NJYYk+TrCzY85CmQmeA/kaGl8K2tOWvNFP5MFZYVOA2zUT0l9voWUgZgY/F5kVTpkpXoNi9d004NrO0INDRfh3XeMUeqTEB8aQliYxPNB4+g9sn3B99N+yYpAUWZsl6PuIcbc84lcJalml8V7SaWpW/mLXL+uAKvA95gcXeCfHUVsqlQXnxzIGv6csk5wLnTxzFlyGYjEkifB0ZrKxSuoGJZyVK3SRuklFrPSy6CDDOEqB1hTJDVcUKhAHvQZNy4voWUgUbjxP6EXLWL2DQ6KLj46mo+rS3lXqcjbMn++4S1Ndi9DKsHreAi0fgmvrSU3YEiAYTRYHCjySbvzz7sJT2k0WBGnTbnnTfu3Rsl2mXphznEbwuxudpa8ylr9l6xseF5xYqtrc6nnvBbSMLQmBOkXMoXJOvWrWpDDAVRHO2T88fguvNi4igDm5wAeorpz8x7BiHOidsnmPiq3r3w9S2kDGBfmXFOTFnRxTQP3QCxSp3JYBxC5b+9hD3/+Qzqx/YkE/Eq7mz83ljEsoKbbMbxCGS4JSRzjBmpVEDKZYdotbUxu+3NkmWWlMqZNmYT/jeiE79HiNphJ61sqxSJP8wMQkGLTv+eWqfPo7Cano3Y48DrAGi5BDpeDPM4rVYg9k04VGZ5T92UgaaZ6FTKLyG57iWNhdS3v/1t/MiP/Aj27NkDQgi+8pWvBP4upcQXvvAF7N69Gz09PXj00Ufx7rvBdOaLi4v47Gc/i8HBQQwPD+Nzn/sc1tfXM31ALAxZnVOR1c3Y147C8gaFQCoVJRdeEmSz0fF4MRf2lRlU3p7GpZ+6NV7QKOzxAc+nsdEAuWwe5gV/nVljzMRG8H6EWBboYcdTzi8EdcH27wGOHor8vsg5I9bW0jfWjBuJbDZgT19Of1BnoxS8ezma/DFKbvWbm/H90AVlVdRqsM9fLKaszU3IV04AANhgfLZpvcJ4anJPUi5D3nlr8Jc5rQbGQmpjYwP33nsvfvM3f1P591//9V/Hb/zGb+CLX/wiXnjhBfT19eGxxx5DzbcZfPazn8WJEyfwjW98A1/96lfx7W9/Gz//8z+f/StUSFiMpFSGNTVZbH1xbfC1o+i8QW4WXFmvO9x3PsGksh/TajVVeNGBgcJiwfywZ2ax+1+8iOYP3uv9zk29rgM+ezWwcXU0b5gflAWIb+NOO9K2wd8OKmPW1KR2HIx95hzE629Hfi8evqs77NMplECp5L8aoH19YMecDaxoz8/MBKamTkhFmvczxhBmVVxiLUmKdtCBgUwnL1mvQ770hvF7SSAyla464WVC8OUvfxmf+tSnADinqD179uCXf/mX8Su/8isAgJWVFUxNTeFLX/oSPvOZz+Dtt9/GHXfcgZdeegkPPvggAODrX/86Pv7xj+PSpUvYs2dPar2rq6sYGhrCh+/9uyidugRRqznmF0LM2QhyTDo2OAhMjhXKAkBKZU/AEMvKL9goS4zJYUOD6WbQjP1EKhVARC9c5SP3grzwZqIiwYaHUttFq9WOZfK9nmDt3wd+ZUZ7rsSNS9yztLfXi6eh1SpEo5kc55VhrrjCXzSajokqSQkhBMQq5WNA6ITQcZG05vz1m5pUKxXHISKcsTu0Vry+TPJW3Q5QBkJJ28lmoIqnV38PKysrGEzwCi30Turs2bOYmZnBo48+6v1uaGgIDz/8MJ577jkAwHPPPYfh4WFPQAHAo48+CkopXnjhBWW59Xodq6urgX8AIN9oUwLJer29YRGip6nljd1YXQV/71zs30mlYnzP4F940rZB77sjn2dOeLH4TZBS6t3TxfWTyo3X/5rrARgCeeFNbH7qwah27qcw0hCcRQiocPvZ2GhHTpKdhH1pOlFARVJExIyLCrJeDwR8ilotOqfCZtsMJwQvcFbw9FNyTooeOjDgkB93agP39U8ss0yobjY1mcqCEuc4EV4rXl8afl+WEzu993jq/uQFYotrwHFiZsa545iaCl6QT01NeX+bmZnB5GTQ1GZZFkZHR71nwnjqqacwNDTk/du/v5V8LcHThadlkyzKdTfBdi2bdv4A33fOKFMkAEHTE6lU0k15vb1OaoOiLnxDky4VhIBNTQKCY+Cb70AcOdC+ZzLVLDNuhpFiQu3nSyvRuybf4mXDQ/r1FtA+6/DBdFNWWpB50n2vrpdn0rcoXNJVoAMDoPceT68rA0zGRayvG8XQkUrFKPu2XyjxtTWtNcLnFpLHqUMglYqn0PuVA23P2pNnlfuTP16Or63lUyoyv9lFPPnkk1hZWfH+XbyocamYthEbsjEYw3UEyKit+XM9qSY5sSzH7OJW12gk5m+i9x4HGejPz5yQB1JCtpQHvrwCevYyxMHdDpNBln7KqwlrpGfxB6oCCGYATkPW9hHiZcEVcwvBcaXM/KQnpcPUEcNurpXSvoBTh9zaArngU0Q111bqHcz774asGZi2TIlymzaEgWdwIFZMt64se0Waok1ZOpdi0/Zyw/nrl5w7LvYpYxTZn1ptCpyGVd9lsK8WKqR27XKOfbOzQc+c2dlZ72+7du3C1atByn/btrG4uOg9E0alUsHg4GDgH4BCPW1otWpengmppM5zhHgni7SgPSlC3nApLp50dRNyM7rBdjsldIDBfX4BbGENsrcKa2/6XWQYnW47qVTAhgYDi7BbTNBy0+knsbYWHDMpIsGuOkJLtthBgNDlewY3fOvgASNHBbc+adtBrjjNTTltLbDlzc5SkgluVH44X13HkBbQLQWkIptyAII7Akl1GpbRjNu6bUpVLAzKLVRIHTp0CLt27cLTTz/t/W51dRUvvPACHnnkEQDAI488guXlZbzyyiveM9/85jchhMDDDz9cZHPMwFgwOI8QZ/GndGY4F1MuEOpL6V7QSbAF++z5IDGkS1RLs08BI7YFZQEE9tnzIMtrkEP9jinQ5PWUjKA6iJi6fGm8CSHZAnXzQkonx1nM38Ina6LRJj4316bZIuGAZrPgZlkpA6p5H9eOcH1pICTCBxkH2tcHfuq9a8tBQDUvQ+EohSDtm1t3d4kCw8SMq0I47b37jm9OqUJkTGDsy7i+vo7Tp097P589exavvfYaRkdHceDAAfziL/4i/uE//Ic4cuQIDh06hL//9/8+9uzZ43kAHj9+HB/96Efxcz/3c/jiF7+IZrOJz3/+8/jMZz6j5dkXgJRAQXuGP1KeuBlghQRP0qDcDUPnPkVHqHQ1PoSC9PXGMwjoFFGpgPRUAR0HhrDHk6/P7OnLYPYkxIEpWIRo90HeDLqEMZCBfsBviy9ZjgeVbOWtCn+bzsLN6TVqCvd0yoaHIGv1eIeSyTGQrVqQFULK4F1EyYJsJGvQ/GR7/fu95OI87oxPn4SCDvSns1cQAjo8ZMRywcbHIFYUdyRpY5YWN+WPs1K0hzAGUAJZV6+BXEjaWwhxYpfi7sWkBGT2O2rCmPN6qAz/nKI9VQjUgt9uUoepC/ozzzyDD3/4w5Hf//RP/zS+9KUvQUqJX/u1X8Nv//ZvY3l5GR/84AfxW7/1W7j99tu9ZxcXF/H5z38ef/InfwJKKT796U/jN37jN9Dfrxds5rqgfwg/Covky0qrgnXoFvDxwcL9/a9nFOIOnwJr1xQWHj2Eod9/4drSjDuBvBuU4n3+4fehPLMWide6rlGkwCcEmz/2fgy+eCk1KFUXtFp1OPXq9Wxtzfp9XVaEOlG3LZt4Bn+c6oKeK05qu1CIkHI1DBMvn1I5lR1cF2xw0IkGz7HxpwqO8GSiLJud2ahR+TdfNj7unPAMY03owAAgRKpmTSoVEMa0A4Ldfi5izFywsVHwxaVsfUUZ2GB/Ppqvaw2BE1l7XrPxMWcuhPuJEND+fqO8YGx8DHxxGRDcu1NLOuV5SS415olrfeELi1prgA0Ogq+ugo2MgC8va80DYlmQQoJWKyDlUmD8A3tBa29Lixt1MiIT42wBbGw0YoGh1SpIuRyxbtBqtR2vRZlz8mr1uU0EnhH/pbtxUt0GqaRzbMVCxrMtx74SFlCEZI5013FNZYODibZc481S4UHUKaomwJnMqtQNiRf9UoIvLMI6sDd9bEP3HGJjUyudgKzXE3NlRZ5v9bOo1ws7TYrV9ezCXIrAd2ZmW8gANjWZOC5ZCUjZ2CjY8LDjrOKjv1IKKMAxUxq6bLsCCkCLoSV57outLe154sSTmXsAyi19b1E6POQEOm9tga8Gv93vUcjGRrW4D2Wzkcnbly8uRX4najVwhcLgDyim1QqoS3RLCKx9evGf17WQSsz/o/N+2objz9EyOKj0gMns7aXR7o6yoLuPFG3C89XJFxbBV1edjWesTZiZqrkJDvv8RVz+lUcCG5bqucjPuv2VYd6YapyJZeXxEnTNS6Zl6bB7pyh+fPaqsu9oXx/Ig3dlpqvi8wuQjQZoby/sq/PtYHzDeyI2NRlP4eSbG2Jzs91WN35PVb7JPAnlYUp8tHXaV510aF8f2J1HI7/n8wttXsHwPJfSGzs+vwA+e9UrO1ERzeL2HvdOjDLhQmxutk9aUsK+oGdyva6FVMfh33AN040bg7LMCeOudchGQ6l9Jb8ksf93TuLC5456GVGvRRDL2laGisZjD+p7Tvk2Nmv/PtB7jkUeyar4ic1N4I2EuzCSnkJebG46pi/Bnf9mAJ9bSA/kD0NK8LmFTPUZQ8PyIzY3IU6ZU63FjZ207eI8CzMqzda+vcbeuy52hBQSNA1C2oKjw/c4hJLukaaGkCneKOx6mgRTjbQFPr+AA38yD3ukF9b+fWZxaSmgAwOx6dCBljaroTRI29YzmZiahmPduYN90Pv6xUwbh5ibBzmnwVrurzpFI088aarmwPvvDvaJ/5m4ANC0OZc1gF7w5FO7W39e6LQtJ+2TEhnmCBsfKywWUcwvQCyvRBhcdLAjpBC05wYCHaXMxdCgzVgsZSQhWB6QUhnW4YPaz8tGPFNF/EspQYJhUBYw+emCv3UKpQvzsPeOOicq03pjIBsNyLX4Ow3ZaOoHcLobT8omlpS1lg0OBjfJJJNKqw/Y4GDbXd9wAxW1mrELv24WWd17Tmtu1TyTbweVRalxn9nxZIydhKGCJ7dqxnsDKZXBboumnBG1msMZyblxmTtCCu2UFyrkjmTXDWIsePFJgyDjCJ2ShsZKe3qcnE6EKDclNjwUPTlk1ETti5fAVmsQPSWwcKLGjCcrWa+Dz4dMPL72yWaj0Dsov3CJhelcKTKQXANsdFj9h4wnXPvseSMNn/b0dNS0muh0k1HJup4hNjYCudG0LQFJBAEZTok3h5BKW0AjQx57gbTt4ImGUPOF0drspG3rDYjJIvebIH11+SGbDaP0IRHmBg2GANLb4wTyEuowSoeTLg4MgFR9/SZ4VChoN5CAv3UK9PRFkNGRwMV4kodWRHiG+yr0c24GiyRFg5DEPuWrqw7LRJIgDykPARf0IpSctLqHY8yfhAbGwV0/dGAgO9tB+NFSGaSvr6OUQ4TFc90RxoCRoc6mhtExZ+aBqcnP3xZCQTTos2Sz4TCAFIgbVkj5XWFpudTeRBUTgb97Jt7UJjhYWsrkEFSbdiJU3jpeYaGNtFyGuHV/+2er1KI3yr7BRr5dw0uOzy94sUxia8tJue1rs33xklEMS3IDnQ2YL69ALi7BvuOgJ6hiTzuEOKwh/l9ZpWA/hTb2jgYrJ41xC8SyEjdhwph+avoMm12g7PD7UsYrPoKrx+HwvsgYhMvUBRsfhdzYyM0ykgTZbIDumlSuJdlsgL97xvkh571onOAmVik6vt2g4YqDf3wEN2L2AIoLb7khhRSpVLDxkbu8nwM5cDJc4pumWXfzvkTySWWY3Gx4OFCGrNchXz3R/rnZgP3QcVh79GIOSKkcPBkWdBmsw3qcty8AR1BZb53D9M/cmdx2Gc2VJZuN4tKUqJCjL4llAYwlauq6J3MnsLTN3qK7WfjLZgMDuS/NxetvFxZwbF+Z6YpjkX3uQuG8mWHEKUOy2YiO7/XHteChKKXvuhZSdKBfbe6q19HzlRdT388bBBmO/1G1I7DpaEzusGmRLy3Fb1ytb6d/9qoWzQuxrGDqCcq6594tZTtuo1IJ9IVKmCdtrHx5Bbv+z+eiLtSdIPEMmWJpb2+8MDLYUMJzT9q2/h2YS37cgnXwQKC/ZL0eOMVGNgu/NYEQZVwRX12N1ZwT+yAr3DaFvq3wOtz/rVSKr6c1/3TWlGfpMUlZUa228zz557nCjB1RRkN/97e5I8Hgiu8ipXIwB55mvde1kBJrOaL20dYckzTGpI6U9Xougta4Mp2KNSav4bdLO5R6WnDwEyeNyvCQYj+3du+KZR8Ib8YqYa7MoVWptLOXSgnx+tvY+ImH2/WYBPMq0PzIg9HsqCEznRdMaQrKvHaSUrnQYF773AW1IEp43+/qrXvacTe9cB9Y+/ZCfPA+5Ts6GWcDbUpyZc97Z+Nrs6zXzRxjKEuP82nNP/7WqdTivFOhLttEby9Eo+mMc9h0HEMyEPt9ITNe7FxMucNNhCpeq9kIrHPdNXBdC6mi4NcYaV9fYHMNdyQ7cjiieXZEE8mwEcYFllq7pvTtwxoTkd15FGxyIrGN9sxs4eYZWa9HqHAG/vsbWPvY3amZU3X6oPzsG8VlR3W1Xbc/fWnRA3PKJN4sXEXSvDOcPzpzOG7Tsy/PgL30tq8wn3PH1Tlln3pryHTjM/0uywK97w6jd5QQHPxqTPqULkBsbjqCKU1QF3nCVQi/7cCOkApBbNUSM5XK6RnIWj1oXknIiJuIgk0mcYGlfGFJX9NWTUS/uWtgALh4BWJxOaUxHZrQoXLF5iaG/uIcmod2JSZOVPZBuGhDtgXXTEksKxoI6mq7CmLU4Adw0Eolk6KTNO9IqQxrt949ZVpZqQg7Tvi/OUaweNxzcf1N2tmJ80ByDryXkMk7xbU6oPhdC/dDaYI6pY3W7l3OfB0c1OJZtA4eiA9675JTx00tpJSadZLJiDrM2aIVlOYhy6mnUkl1804vRDFJYo7Z3vOK/Dep8MX3yFrdIcftYIZaOjCgtwBaz9gzsyhdmIO07Vg7fPj0YuR55N79hbwoZdMJV5BCOlmPdeCSbfpMYNK2zYJaSSspYMIYSs6dtOC66PYGnGSWbfHDyZXVxI1US7BL6d3P0b4+byy9QPtWIL2y/JYzi2ymOwAQyzK6Z3KvGIzu91qnblIqR/sl7AUccycl1jcghWzvYSl3uHJ5BXI5ymzu/LE9Z+KsOIF1Fl53mvfH172QYoOD+VwdjVzFW5u1q83k0SSERnBnF6HrECCbjc5vaEKzX3ztsKcvQyyvwP5Ld2Llsx8IPpcyTtreb+Hvdu/OfKY8bfi+MXJXqNeYlPJ5cSEA2wS+vKI/F3QQ12dJfc817jlTYuAS2yIypmhv9Uusc4QUzh4Tglhb806+Omw6fHkFfMmQdzPQjKRTn97YXvdCCj3VzEJK2rZZAKd/MukKqJhA3UI2e+PJ3RKulEUmt66nE+3rK96DLgSxsZGpb2S9jo3dZVx9P8CO3tb+Q3gDCTtmpM2BVlvc0IJcaM0bo5gTRczSdvE8+kEsqzNzwe+okuSSH74vnphInMd+h49I0L6qfI1nADjzS4qgM0RKv7jPGgUHt8zH0rad91p5o7w6w21XWDsCe6VG7J6yGeE2ExLvnRpy1Ar0p67TiHELrzH4KemzQMdspTQ5aF7iEsbaOVQiBWe7NM8bJEerFdAQeaqutkSnJpzg6AR0MkeVU0F8nw3+wfM49lvzuPyRybbXZspClPV6xwWvC+1g3PA7Wdqn804OawDt74uf20XA336NtdI8uhdsZLhz7XGhuFcMC7O0NRJbrqEjielpWcu8qPLqS/MW7SCueyHVcVAG+6FobhddSNt2tGbVIGdgbCaWBbZ3d+b2AK2UCHNRTyXa05O6sdlnzqUqBWzv7o4l4iOWBTY8nPgMP3kau//v11H7/jv00590MsjXh0SliKppeWSz0UrSZ9inGgwXAS5EQ4HFl1cST4S5kpICwdQiu6dSL/rpn7/WJtz1fmko3HXukzQcDrIozmxgAEzHXT8H+Opq8p5DiMOw448ps0qB4PBu48YUUkV6nQgO+uyrqY+l0vwXpG1I24Z9PsFbKQc8N1cXlOnFuLTgbqL2+Ysdc6yQtq116hMbG6j+xTv49AunCj/ZWbt3dSbgVPDYzU3W64X3qbTt4vn//OXHeEtmyd5rT1/WN5H6L+iLvuuDoanWAHx1taO0Tzog993h5H4L3UNv5/3mdS+k2MhIVMPshqdSmOwzK3nqNQJ617FoPxpevnfS408bvjtAsbaGP7p7Hz7z5gUjd+w02FdmimVI3w5kZC7PCjYy4rkyd/w+LSYYvGMw8RbdTi4+DchXT1wbrvY+XPdCii8vF7s5pthfSaXSTqEcl5itk0hieTh0izLbqg7EW++m9qNniuo0W7Mh2NhoIAeYX3uWto0/+tD92LxnX3xa8U606bZDWicGNjiY3TSaR8iE+sk4EV0aw3kIfHkZ9vlL7V+05k9g7DoAUipDfP/9BRaoNttrC8W8AiBl7bGRkW3NFN0JXPdCSmfQ2dHbnEXVii+IDKJ/0FMcImQjhaRUSrDxMaOJQvv6wCYm9B4OeQ6x4SHvZ355Bjh9Qbter4zBweA3xSwCL7eWlI5HU6teWq2CHTlsXG8mKIIv+dJK4iZhz8yi54V3gb27upYTSFy8DLGVHjvF1ze0lSw2OAg24mPkL/AeTet045t3YmMzdWMO3EnFUPmkjV27sBYfnaFAk80GSq/rpY5I5LvzCswpZCjLpyyl7E98ZTVXotYkdNwhKgbXv5DSwdUF4Nb9YLsmnYys4eA8o8DW9Gfl+oZWAKD3fL0OaWLz9cUXiI0t72dZr2cypUSSvcV9Y4BJQHj1ikYTmF9SUxOZBs6mQcooO4LGZs2XV4CZOdjHDuQn1Q3k2VEnfdRmrzAQNGKr1jlTmZ+L75b96rtIf1yLRrtl0470AbEssONHjMpx2yc5N8/kC2jf80i7qb1u2dRktnktRXJyxbzI4Iyliyx9XwRuCiHFl5ZAVzcha/Vg4KShuYRWq1pmrkBqkLiyenu9+r24B13oBtdqfl8mc6lfoxMcfGkJstmMLlwptNOOu8iszaawoPOFRVhLm4DNM5lEYtksDL8PyKaV+klDO6rV1htOEGukAYbfqVgDUkiQmv58C5hM/RswIcYOGAHPSZXZLHTaI0l0VY1mcNxT6JX8dfhDHnT3lAAUip/SOpQWxK5zcvTDZUtRmIbjGCeKYMy/KYQU4LhOh92uvUDeuE4kJGheyZu51V+0ZYEkpf82oAWK/XOX04vzhcVo4GyGgMHwAqR9fVobAKEk9Zv5W6cgzl8C7dcwsYapZtzxD3PT6XyfjwUdQPpcSiMRzUuplYBYcuAi7iEFd9LGwwm+VSoVAffnGGFMqLmgLpXS+zXwIwFh6n7mS0shEzmNfVZZlTtPTfYUl9KJksh7SlKCtDlCSSKZARsZUSoCymzYhKrLYizYjpAVQgc3jZBSoc1pp+4GUi5D7m2bsLIyIajAV1eTbfE6m1BKWwLlKwL0suS0CZSnOLkEeALDz8eV4+YRam06YRdfOjLsZHhN8UjTZQhwNVl+aFe8iz1lkTHQNrUpvpWWS6BuoCkh6d6BKeNvfPotwpsvqU0Z5pA4uEu9sfkox2JNdYK3/6b5XWJtrb1mFHc7XqC1ywpSqwUtHEn1JIQPqODOU6M9xc+WEZo/kbnpKk8JJ7zU64E9k+0560MgbKEVZC2bDWVZYm0NtFwKOjYZ8ode/0IqR6oDDzGasKzXId58J1/ZWVF0cGloQtD+foh7bmv/zbQPpQQtl8Di0oP766OsTd/i+533nJSgPT2gMU4N9qVpR3PNSOOiAp+bA337HOqPHA2cqLykcmm5qRLMKbQ/moxT1Gqwpy87P+S9q8qiKEkJNjqcz0yY1ibDOSRfekMtbAlxAst14I5VAfDyy8UFIWepZ5u9YIlVAtunF/wfcUg6cbI9Z2PARoac/kqAPH5rcG0bzt/rXkjRu46kMhB0DNeQG7YpxNoa8Pz3vJ+tqUljTVvUanqX0uFUDq3fBX7c3ASfvWpUvwpxtnFls9bWUP3uWfzNP385cD+otYgSvKwCGvs1BD6/0Nn4oaK+2YSbMEedpFJRetqJWq2QbyGlcmfngcuGnwDZbHjm1TRkuZvmC4upJ0j56olca/u6F1Lie+/o885Vq0ramcyImYCkVL62BZiCfseeme0aNVAn4ZlCNPufzy/gd44fxsLn3t+V+JIs848dOaxP75QHRQf3djFYGIAxDZOs1yNZidngYCFrd+tT71f/wdDhI3HcpewY+0UREN9/f+R0RizLiMUGuAGElAkiNuYWEjeODBO2K+ks8sDQfq6E39yl6CNrVzrXmnGV/pw9LWx96v3xBMC6EBzj/+67WPnx+4OOMkWidefmslebgJ8+a0aXE+MWn4pwrFzYkSCmTDY+Bnangt9ScLDbb01Pu66LlH4zTVqpQiy3HWVGMXa9X/2u+mRiyGDvjvs1ofga1k//4nuRPpC2bU6Ka/T0DQqRdImdx5zgJlbLAe+OpBPIU66UsKYmnSBeRR/ZV+cTg1nZ+FhA01YJoEiVth0ps/+Zk1pBs3FwNT1Zr2Pk6ydRe+jWxAy/mdFKseD+v+m7mevyw5BhW5X+IQw2NgpSqUCcPuf9zq8pi7MXwecKogxT9EPXAkwFB19aSX+uhQgr+sBAYhCvdcv+RCF4TSi+ivrZ1GS8ybGl9ORiVcGOkHLQweA3N/ulrrkmvOgkd2JD2MgIrH17C25gyJliYCBqogm74fsglleA2Xl12SlBhWJtPUhfxDlETYMPL1QmX17JNX7+wGC+tISeE5chxof0BJXPK7EwyqVOasutfopVnrJ46K1vQCwsBu4cpU9pkM0UhpacSAowJZaVeoqjvb1gt9+a8EAOslof5NaWE3gfAzG/CLG6nqlsU0orAIljrSv42fgY5OZWqqeq2NyMBuAbYEdIdRLupsCY9oV1JDDU9ZriHDKviS4OrmBqqidSHM2KtuOEqszwxE7w3GNjo4WbDj3X3JCAs6cvg86voHlgAuT+O5PLaJ02pJBGDCOpZSJ+oyCWlW1T8lchpDoAOWOiybDpWHeus+Gh/EI5icJMSCBlA5Wcg7SEh1LbzxCMDiiUzZgkhC7Ehj49VhiZnGHS+g3QMK82tOix/M5IbGTEmPFlR0i10OmMs/reSoqUyoSCr611hmndNxGVTBmdvJxt1U2r1WQhZFnqoMc8GxyhgD/w11eWPX0ZtGajMdGjd3oVPLaPSKlcbG6tuKBJE/jd6wkxdhgxZkmIYwLptKlO8IhjRBiyXm+7WasCwaUEpDDrow4HW4eRi5FfFT+nweMJwEtFr4KSIg0AGIXoMUsIefMKqVB8FR0eUkdSmyAcTU2Io2k3G9qLWpm5NcZ0ZuoppiToJFR7UhYCP5sAc8aA9PeBDg4onwFa2ZcVl625NuuwW3z4/uXVE+h56woaBycC/Wzc59UKiCpLa5qW6mqnfueUVtAkX10tbJwIY06gtMk7/X1Gm7CTsLE173wbIp9fSD+9FTkfdRwvVK9ZJb0+chkhrFJn09YUmIWAMBafRVgz+3i0UAK+d1z5Jz6/APnKCaPibkoh5WYk9QeY2tOX8+cICtPlhH/2GhAf/W8yucmh/am0Mn6wqQnQ8N1JSBOilUpbkHVAYAWCNFuUKXx+IZBRVTeQM2yG0WbJ1lzk9qVpWC+/A3LLPo+DjO6eMrqsF2trylNWJLg5pp20p8dTdvy8dbFp6A03MGnbECtmQo/PLxjdz8h63QsLME2rrvzOBK/SJASCTnX6ycemwBcWfW1SjD9l7fI16Mi8MkytN63A+NT5k/R9YZYYHUHkVy5VlgHK2r+X0lgQJeGGF1KqY7rkLUJUA6GkddzXnHBFpYvgb78b2SxIpQI2rtZi7EvTqSZDUatB2jbY4CCsPdnS1CeZg/xmT1mvKzc7bdNo6F3ZbCRTQXkP6muIolaDvHgZcz91LyAl7LPnCwmI1Zl71tSk47kYZnNwT+cKsLHR2PGPbYtuAHNeSGkc+uB+p+vlSgcGnPTmrfJMEKhbZw7EOf/cfTQqqHxhHTpj680h3xxmg4PpDlYtC0BqHUnfF8q3llYWHRhwgv3dd1RzT/COnR5veCGlHICUy+m4clIZfTW1Sz6/ANbfl15/lhiter1NpJvjjo2vrqZSoqhASuV2xH4WyipCwIaHMt3j0N7eoDkuLti6UjFyxBCbmxj7t8852X0LOl3qeAPaM7PtbwjRTMVtZnx+IUKkXCjS5lTW/nHvrUJ3ZGxkxDnNtASpWFtrERkT4wBnv6MGqVRSFc/IfGpBvnoioqiYBqm6bfeHYqSlj3cTrpJKJeI8E/iWVrB+mmmaVCpa5muxthawdKi8fVVtAlp3/Z4ZNMgGo3vPd8MLKSVaC8E0xkJsbhamcfL1jXSNPKUua/8+I6Fp7d/nLAofondU+ezdAW1KoYn666PVanTTkxKy0dTSysKCxnH5VziehNvYaGjHVpFKxUt7bs/Mgh0/UogjhK43YKzHmc6JUasCYsYAkKaIJc1ZQuI3RdeZQ8qAN6lYjyFglRLcMChUbLXpjmTTTh0DsbXVjqFMu88S0vGOJSSyxpTPt75RLK9oK7ey0XAcq4SMpFIJKOOCQzSa8fuLSwFWr0NKaRw+obofls3Qicwl6fUR6ErOA32ua8m6IYVUqvBp5XTJzbqQBwXEjvArM0ZC056+Ar64HPhdZCL7zARG8T+UofnoA6mP+euLy7ula+4LCxpZr0eEW2TDcNnNNftN1uvgF6dbP0iId8/h9D96H8iDd2m9Hwfdb9RiLcijOEkJsR6Mz+kYu4GUkFxEsziH6/J9T6KyknRSVp2AQhu5lsBVnWRVcM19UkbWmPJx1zRoYjp2Qx6ajfS9Kymlvd/cV6+Dr5iFkSjLDdcXo1hk2fduCCFFSuWARu4P8Csi6ZZTSfcoSXQFg/HdiKHrsbRtR5PVLLv6xkXln4hldYZ7TmNzFishrS+8OWmYRP39LJsN3PaH66iP94Dddkj5PLtTcWcRKfQaos2KMEs0M3t1pVZlNyEvz4Z+qagrz2m+0XCyRWd9/y/dmy84u4jg5aL2G52Tstv/aWuBMs+q0E3cEEJKcu7kLHE33YAmVtClsK8MNjiYO6AysSod5gVNxJpXZNRkoHyMc21HjzimYylkbEBwUQgrKl7daWZDZVxaimnn5TfRc3oeslpx7qlCd0Rkec0oANTaNVWYM00AWe8kQ/df2jFCmuzxWnF3SWUpCJIj7+oKChLNt2RdXYVsCTk2rMk+UjRM9qy0+aq79lRrwR/jJgXkWjZWjDy4IYQURPxdhJcjpre3uKBKSgCaresSNWzXjtslM6T2SSznnQeQ45t0N1rdLMRhZ46MCgw/fRZ0YRlicgT0jiOBv9nTl8206Tz3gGnvZSiX9vZ2jxMPyPbtGdefDvjps21zKqHK9lmHbimMNT83P2dSzFrrakMLceZTd21JmZlQgI2NZram3BhCCi3344TBIL096qDKDODLK8ZMvl47dOJjCkRugSelw7OnA8VCI4zlCrp1A35TwblaEwyXl5Iy26tTQzjyuXmAS2weHARyBILbs3OBOBwjJG1Qgif/Pa7Inmqb4UOVC6xoxAiC2DEQPFeW5HDdpBovbPjKKvhs1FuyuWeksLVMyuVM4+RBY963K2v1h67nrRSx/IgmigwZGgQZNHDQ8eGGEVJp4PMLhdH7EMvKZEohlpW8uFI8o7qdnweAY8ryOx8kTWxF+/2cZVm0c132Zzo0mJoh1GtPygmSDgyA9qS75tL+PpDpWfQ9dxqNuw9mTvNBqxWttiuRdGKjzPxEByeRncpTq2OIY1TRGINEEJIsSAgBGxkCDsVTX7H+PrAxhcv1X7yWWVENQ2xuxo+TxklZVwl0PJodRZ1WK1pCNilwmA4NxgY2h2GfOQf70rRWOyPFmb7w7W9/Gz/yIz+CPXv2gBCCr3zlK4G//8zP/AwIIYF/H/3oRwPPLC4u4rOf/SwGBwcxPDyMz33uc1hf776tMyukbZtfjlIGejjHpWOCnb2juWYED8ZLZTSPkUoF9PbD6Q/GFhAyiYWpkzQyhOqCLy1pKTR8eQV8aQl8YRHl18/i3OPHM5mAxOam4+pcgFk1WLDhHI0b221y8sitVKaYutjkBDA1DvG9d6J/dAX26mogRkj1TEeRcjfHRke0zfb8/Xd4pyKxuakXdBwXOEyIo8yE66YM1u4Y3r6MMBZSGxsbuPfee/Gbv/mbsc989KMfxZUrV7x/f/iHfxj4+2c/+1mcOHEC3/jGN/DVr34V3/72t/HzP//z5q3fLigIM1PvuwQHP/Ve8HcFTfKk00ZX7xYSIOt18LdO5SgggWbqGgBfWsKB/88rwNfGs919ZuVJ87+/AyPw2auxc7L5lx+IusqHodnnbHioeBZ/wNlTDMzE9M9eTVVcdLkp2R23q/eWsFJbAIx3sI997GP42Mc+lvhMpVLBrl27lH97++238fWvfx0vvfQSHnzwQQDAv/gX/wIf//jH8U/+yT/Bnj3mnjRsYgKo1zOnjTCGYqAzUYLETHJ2+61RgZYRSQF9bLA/lSW6ELS45lL7yOWo6xZy9AE7chhYXQ94NMp6HeSxOaz/lfsx8LU3jDKwdgXd7t886GRbKXPucWLKb37kQVRfPV8Icwft7YXQCdzvFAgB7e9PN01SBuvAXtjnLiQXV6k4CueJk175ABLHilarTkhARtf8jtxJPfPMM5icnMTRo0fxC7/wC1hYaHuEPPfccxgeHvYEFAA8+uijoJTihRdeUJZXr9exuroa+OcHn583jj7vFNjERO67I3HmvPL3adQr7OhtwPvv1qyEGwfxWbumsp3+Erjmws9lgkab6F3Hotpshj5wwd87D341uonJZgMDX3sD64/drZU2PZdnV4L5U4m0O08DsPGxQrzb2PCQWiPPK6AI8fo24t6fkpCz/Owb4PMxyTwN17aT8M9AQOW8e46wuCiCtZUQHPaF9DsjZR64lLGKC9rXReFC6qMf/Sj+3b/7d3j66afxj//xP8azzz6Lj33sY+AtW+jMzAwmJ4OL17IsjI6OYmZmRlnmU089haGhIe/f/v37gw+YmkoMMuWmIhQsZ0JzEoe4SS1tG2LDp537NxbKIC/Pgr0TFXCxm4nqsjrBVZ8vLAFSZnfnJ8ShcvL9XAh0PKPOXlRTIRkyQHtI2OjE5iYGvnMW9q27U/NRuZmX48DGRuM3rSLNnwl9qMpwK5ZXzGPf3AByQoAP3AMQ0rlThpRtvj/DjLeyXo/vzwKzDCsDhlNivGKzKrcgVKTNunPD916n8+uZoPALi8985jPe/99999245557cOutt+KZZ57BD//wD2cq88knn8QTTzzh/by6uuoIqqybnBRtTq4WrH17wefmzd1tpfSCb639+zwPFifrqyh+AfonYGCTErFHepOssbJpt11OQyYX9zQUeMYEUkL62+hLPRH42RQaG0eWS3hSKoP29WQyB/LZqyiVSuC7R8F6q/HmW8U3k1K53dcbm4AUoH19WozVRvCbYRPcmCXnkCHmEZN57So0stnwguut6UXYriDpMHKzc7c86Ipuq9gyd/RJXXcFmUhlo2nm2h4CHRgozPux4y7ohw8fxvj4OE6fPg0A2LVrF65eDTIT2LaNxcXF2HusSqWCwcHBwL9cUHn9cO4QN2Ypzl0EGSaItWvKYS3Ii6S6TXL/NBtgE2OJbZLNRmaNUrnhX8v3JBnnBOCkRqHLG9g6PAr+4ffpv+jbHDxG+U71kVtXUvm6LBE6aM0b++KlYsrrBgytNNrFZlE4OjkX/NWEnbFMzZAiu4ALo+NC6tKlS1hYWMDu3U5uokceeQTLy8t45ZVXvGe++c1vQgiBhx9+2KzwogaLMthXZqIaF2XOHZMm7EvTXpsiuY1iIAf6IAf7I78vNOW4KQb7IQf60u8wkk6ypqYCnfsS1ULJapKgLNXjysuCmwP83TNgNY6lIxUv3ixtbFXzRtdlOBaqsTI9ycT1tXv/EwPnBBU9zRjP8ZwM/XkgbVtrrhFd5hNTZJ3nOfqLDgwEqOZMvq0wpQYZhNT6+jpee+01vPbaawCAs2fP4rXXXsOFCxewvr6OX/3VX8Xzzz+Pc+fO4emnn8aP/uiP4rbbbsNjjz0GADh+/Dg++tGP4ud+7ufw4osv4i/+4i/w+c9/Hp/5zGcyefYVgbjOp+US7NuT7xTygr97Bvzk6Wjdg/2dW5Ap3Gf83TPx5inNNhFaYIprq+Qt0vBYmWZ69d7rqYKGL9Q7ZINnz3wXU//lFJrH9ju8j6bp2vPS5gC5WD9Sy7ZKmVys0+Z4RIjFnSLcuVFAPyVBpw8LN1+2vo2WS+bfRqIZnAMZgVPKI7uCmbyNv62gsTAWUi+//DLuv/9+3H///QCAJ554Avfffz++8IUvgDGG733ve/grf+Wv4Pbbb8fnPvc5PPDAA/izP/szVHyX97//+7+PY8eO4Yd/+Ifx8Y9/HB/84Afx27/924V8UBbEdb6o1UD+4rXuNqYFvrTSsWO9tXsK/P6jmd6lvb0tF95ks0OR2V4986JC8/cCeMMLIkXgiI2NgMmJVCqFXoqHwecXUPreGaw9etzYVs92TTlp5HNAZ4NJ9daL6Z+sJ06+sBg/RwgBPXxAr6BWu9juXZ2JR2rB6G6roA3aDYwVjQzM9AqvWrZrynGEmRgDG0q+NuHvnnE8WOO+JWWNZWZRCYFIrQT31xZWV1cxNDSED+FHYZF4TZqNjIAvLWWviBCwgYHuxV/5UP/YQ+j51hvbm/PqOoDfycD8ZRK1u3doOZBKBXRwEGJpCcufeRBDv/9CV+/i2OCgE6bRgTqJZYGUy9sWF0YsK1UIs/GxzOSo1wLsH34AldfOmgXv9vaCjgxnDq4lluWw+RetvBEC2tuLxvoynsEfY2VlJdHP4Ibm7ksTUKmao5RBAVWgOcg7kcSg8rWX0gWUaXtUR/yizSOmsTuK99n4mB5TBmUBAUUHBrRSqHhprMMbdtwG3upnNjiY+a5Q1uvgc3OQto2h338BbHw8c98Ty9LK/uoHX10tRkAp2ixtO7+Acu+bQnnOYkNFfFl+dU6JfH7BS0UPOPFEaacunRTz3rOlssfdmDp3fdl7/Sntk2A9/QrkxqYTK1mtRvsltO5oby/AWLKAoiz5LjGG/k0VqxmXPt6/Xkip7IxZyxFHdy3dUCcpNjgIMjYC+6w6GFYbHXI5LQTbxRrQzXqvJ2aErCAEn3xzEX/y8x/OZlK+GfooDygDLZeCil7eUIcikTR+19nYukLL1Ixty+bNd5Li6xvgl9UBwQEoEp0F0I34jSJOMIp7mLxcfbSvT609SqnN65UbpgtUh3GiqAzNukirS0pHQHFhfCpy3y8MhIDed4fRK2xsNB/jRKt/rEO3JM+rpH5M+pvgXiykd+rokvu2FlJc/uPAxscSE2Syo7dlZuPXRqjfxcZmkGQg4dksuGGEFCmVQUqWnpuulNmCUVuw9u9zKILyIOtiSWIZUOR+MWXWkPV6JPjXNYvkScndUUjpbJgJ5k/Z0Ev5YQJr7x6HUULlzq5RF/mL18BOTwOTY6nMFMZIU8T8kBJkOoanLqYcubFpFCSuqhMA5MJS8rxSBTu79GBpfdz6e2rQrGLeuJ6CdGDAKAxFiQKVI7m+AbGe4N59daHQu0FnX1V4WfohePy9VQFr7oYRUpAiEHipw0qeuapGA7KZvmHTvr5Erj0tmExwV1OkzNO2TIWxyg7tlZGjz0ipDOtQ9lQlbGQkoCFGTowpQbedOBk7aQxabA1CZNqM+PwCyMo67D2joPceL7iB+gGViWSqinIS+dgM+oGvrhrPKymkE3yv+3yaY43i+6Q7nzgH8s4dnY1aMwmhqNUSFXG+tFQsK4kUZswThGjdC5vghhFS/uR6AEBYcZ8WNkfw2ataXjakZBWWDTjYoJDmF5rchBKQVptNguoi5JQtFDHpCaMQAzncqMslL4MqKZXbmWNbULJgdJh7jM8vOJu7lLm8MO3py6B1G1t7+mHtLShWMIPJWkkgnMX03eIB7FiaGN3MvJTpbZh+IeLOmVbIg9jczOchnBNdM7H74B+3pCShtFpVClbiZqnerjip6wVFum7TkWGt5wKnN8qc1NNZ04K7CLtIwzcJ4p4hNJPbKR0eCk6wAqPcRa2mTi6nCT57FfaVGeferVxKF5yEZA70zcxskMO0IV5/G33fm0bt2G4t9vTC4PvO5uFdxQT9tpQFUi4XpyjojofvREJKFuiExn2fr+zI2uoW4rITq0hoY0AHBgrpbyedfXp/k4GBSLAwpPSoz4oKIL++hVSXLsLtKzN6l/O37PWeY0ODxQcWunb8hA2a9vaC7Ynel+lE49szs17ZtFJJDfZLa6cWTAWC4HqnwzynmwIv2Emlon03ZE9fRuXNi7jyE7dFnRJ81FCJJxTT/vR9J/nO64WaRRPToquQ5PijSdHFBvu9dSfr9dT8SOGyCzWVFYDYrMAKNB88AmbIZqKC2NyM9rdiTvG5uURTalFz6foWUt3w1DFwW+Wnz3rP6aYg12pCCj2/H2JjA/b5i5HfN37oPiNTkqjVumLmYLceTHdC6QRnW9pmX4CnJOA6ougHG/PZq5j6v17B3E+/L/jNrXllHdgH+4P3JFSoFrDbygUZg0ibBFdvbCljzybbjg18eaVQ3rjthKmSy7713WzEA3FONv57Mt29tgMm9utbSOkglOqdjYzAOqhJtwJ0RBCyO2432jTCdmH/5mnt3aNVVul/vOylESkcoQBME/DTZ52TahI64Tqcdtfi3zBVifM6CFmvY/zfPI/1n3h/YGxptQoxvwj2zHfNy8ybrqID0G6TlE5ohGWB3X4ryEPBxJ589mp32TuO3taRzZiNjATmWdcYPBT0SU4DfCZIXSWxA9RiN76QCrlH8qUl8OkZdcKxLoG//W6uTcPdPNnwEOwrs5DNhpOIMEVQ6DxDKhXzE4Qq9YmyAQzyL93r/WgdPFC4J1DhoAxsaNC7WzSJtwqwSJtCSgx85VWI99/h9ZGo1TpzSkj7noI8ttjgIMgDdzpFGvaL2HCSI/J3z0C+8lbk7x2Ngwuduvmp9zqyGfOlpfQ77KKtCjEWhcj9VgdiF3Vx4wspBRxCTLNsncU2oBitj6+ue4tFbG2lZkoVW1uQ9TrY8BCswwfVTavXk08YeSaf4GCvvev9yKdnOqMtppnyFGB3HlVrx6EU82JrS3v8xPp6QHiTUhns9lu12ySbDbBXT2Hlk3fHjlchcL8nIQNwEePE19ZATjjs+rpKjaotKgEhtrZgTU3m94bTSWmiMf5sarKQjToS55jXquD2qc+Mp0wNs76eTxBLCXbkcCEnzptSSAGIDIC1e1e82Uyzo619e+MnZifcocNZetOO5m5w48YWxJyCbNP/HmWxzBNpSOLe8292kcRqRUFKSCHNtPXpGfWiDFPUmLS3xdLR5phrAjMJ8UgKiM1NjLw0A3t8ANb+fUbvpoEODASFZtKmlGOcaG+vc9IxdWYx2SSlhFheyR9wrvOdGsJHrhTDlVi4Euf2aULbwrGdtLc3GyvK7HwhJ86bQkixqUlvw6J9fcoIclmrxwetaQazSVfLVh3J08ow0Lr8wtTavy89IjzczmZDj2dLM2CSVCqwbtnf/kWj2Q6G7AC0Tkkimmk5iSA2NkV8zo1GcgHJ29lvTS623bbaZ87BurIE2VMp1j292QTZ2CquvDBac1o27VwML0BrzN2L/Ji1khhgXCRI+raZKIyTFNmQMrst/KHNYFoQyTnQaBor2kVlj7gphBQplUDciUEpiBXtbL60FD8hNDcqz55MaDR2SSfzbNyfw9QkvsR/slIK/BwHNjiYvrn72xjnaaVqHyGQvpgkExYBb/NJrkD9/ymI3PsxFuyrhLKIZRXiEReXlTYRhDgnHF9b7YuXgJU1yIlRsONHcrcLcDbSrGkctNDazGWzoTbvmWx6rmBQCYiC72iuGXQ4GD0OYQEr63Xw1dXisg4b9vFNIaTsS9Nex4u1tbY3WacmpH+DbjGqRxB2L046fvdUPbYFIGjP56fPatn3ychQPkLQBIhaDfzdM5neJeVyNIAytDgJ82mYSV55KZfKAcoYyhKDDUmlAtoTut8ocNNIUhiIVcLG0bHIuPLZqyCcY+Wu0c6xORSJFEUlNtg6ZHYGfIwiCo8z7aBR//jFzRVF8HwEcd+lOz+kDGbI9ZfrKzvSP75YOS3FzkgJUHxr6Hd+b1ftMlRt8hQOTQckraduUJByVFNO1Ow1+bUCiNlUdaO6AedkojTPGUxC+/xFh2gzXGcnNUcNTySxuRncjAkBGxqMULNA8GhZoe+nvb1aGWyJZaWmYhEbG21zhZvCu6+3MOFAE/IIyWYD1T95Ufk3/va7GPjyK6DDQ22Pu07EkcWhwHoiaTRa//zrkvbFxwq5z+me+Fl/n9d+2tOTOleIVYqcpuMUPVIqe4G0OvmkXCYJf5vCCJ9oaMvzlpTL0X4JWRtoT09i3zkF+mIBVUpyjOKsit8ipbKyP/19Qcpl0Go7A7Zq/1XWp/XUDQrVCYTcdTvoHTHmFMEdN+60iH/duvNerIY1Ok9TIWpiWxX1SifjS7J4IkkZNL26TALDQ1EGDHeylxyBLzY2Yi+aI3xkJiY414NybU3/jiBFgeDzC5n7Xto25FYNl3/+Xue7pAQbHelOwK4Ou3uWE7s7V0LhDEl3p9rsEK2x8Cd+FJubqU4JEVMtZdj86L2xz7pKTeockdLLEmySjFLUas7Y1+vRfgk594jNzegz4b3JwKQfeE0RBiGbDac/CQl4JPrLl/V60HFKc/xuqKSH1z3S7q6uR1AGQknmC+D1n3wYw89PO3cy1yJaZsNtCZalDHNfuQ1Tn7lo7AXGxsdA+vv0aIOKwo04v68T0Gq1UD5TU7CpScC2A3FgN0XSQ+vg/nzaY847BjY4CHbboVxlhJE7tYdRZcyJnu8UCAGkiAioMNu2yknBddvu/88vxwooI+aQoqDSRrMIqLxmM8oAwTH1mYvA4QNG64BUKhBr620BZei4QvviTVSJSBBQnpldlZurAzChGjMrmGi5a2epm1ar6sDbcGwYZY6zle/Z7RRQgHOfKlbXA6ds2quXFeG6FlL80pV8GqwUkN93X+YNg6+tQZwL8uSxqcnswk9KJ4iuWxAc4kwHNekYc599dT7o4qowv3mLyjVpKu5d+KUOeqbFQddLM20O5D1RSAE2MeHc6Z08g/m/+YB2wK+TB8tnaknzxFSYkoo+EXn3joI7AdMdRlIKilhQhvonHkopWGplPkh0/omZO665L/C4ZUUFUEtxSlMOOwJCYjMDh708U5NRtnBdC6ncMQRSwjp5MbLg2MiIXqZUhVOEWF7JHandTWgL+SInd0z/sLFR1D75fvU7CoG3LTEkSQi58He6LtGK7ZLNBqa+dQWr902B3nOss/W26r5uy//APdl5GAVH33eDSint64ueZPK0P4ZRI/Zxg/gzvrTclbHTisFsPauD61pI6YANDia7Jc9HmRdkvQ65EbTx0/vu0Dqia7mDd9B9mPb2wtq9K3c5xLK6nnBN1urovag5wbsJQtKZ2guuTwd+BcM+cw79p1dQn+wrPsPvtYaE/qEDA4nz1rq6CqmpwasQTtuT6URWJHRc5t1H86QhMYlPLLg/blwh5R6ZMwSgqbJxSnYNBfmFQEqh5HIJcSO0WtUnC6W+6dGFE57Y2IB4/W2tZzsS85VkoruWgjxjIL73DipXN1Cf6nO4CFvIohRZ+/YWwm7BxseuKRJh+8y5QqmGUrkud5AbN6yQcgP8+PJKIRusfOVEezJmiZfyl9UqJxPjuAKkWvGiwcXmZmJKDtLTA6JxMS1tW7mYO8o2rQtCQF0h5QZ0Viq5HWFig0KlTE8nkqvi0H1bngy/33sH1UurWDs67NF/6caj+MGnhoHRAjIFDA9qzTclEghv4yDW1tKdBPLOX9PxyblfaKMD4QG0t9dRMrbRK/OGFVKddAmmPdX2Jmn6rm/BssmJgDefkcDyTXqT+B2+tAQ+N5d50dBdk5m/vTD4OfBai4dNjAezkmb4PuM54wZDmkb3h4upVKJpuHOAv3UKA392BpvvPwg2PJTp5CBfOQH+9rvJDyVtvm5s0umzznzLgNRg1DB0x7zLaSdotdJWFDSYHbSR4T2P/FkzAJzs2w1yQD9ZaidwwwqpTkJsbGRz6SQEGx+5y1vA9sVLnlmR9vWB3npQuyg2PGxev68dWTUj+8y5bXdnVcG+NB0ktOyG5ie4c3FNaC5HCVGrFa5U8bk59P7FKVz8X+8MCFBvgyoCquDwFqxb9mkrXXFtci/gabWq12bdMc/AGpMZhHisKqRUBu3vjzzCJifMzdeUKctKgz192VFoNQPt+an30pUVP2L6lvb2Zr7jviGEVDgmAFBTd2w7pETPV15U58PZ2AA/eRpA8EQVlzgva2p3dvS2a+JiPXOsjVfA9pBvRmDojdUVtOJk+PIK9vzTF7D+Ew95fe1tUClgU5O5shHbZ887demktUhpk6jVClU65AfuKTy+MQ70zqOeS3Zc9gE+e9XcqUFwfS86HRACa2+GE1P4NB0zTmJzM7Nye0MIKVVMgNjcLORyvVOkrEmQtu3kDqLMMeXlZZCG41ZPSmXwk6chXotmNu02xMaGEwJwy35l6pT0AgoQDN0UdIR4AbeRRHaqx/MEqfsDjAVH/x+9gI0ff7+R4sZnr2rF+6SiCyfaxmMPGpnKyfPfAz99toMtakO8+U5mhTKA8Fz1zac4WLumApmwEyFlhBFf69SdcJqOBWVG+aluCCEVhzwul6RScQY5j9tmDtjTV5I3YsNNmi8vB0xKxLJye29pu6knsAjYFy+Dz8+DjY1G2S+6cNkcOS0UUWcMu7bb/1xDAy7U/CclBr72Bvh9R8CGk50h2NhoJuFNLCubsqEqq1Lx0swnP0jAJiZQffZNMw87xaYaUEY7Me9U95Ym9YTXu28+xcGevQr22ruZx0Xr1K1zrxV2ahLcSAG6oYVUHs852WiAL8RrQGxqsnhanjBtfwKMv00RCCsWl30FZnA0sG0IHSGexCLQ0sTEyirkxRCDRKe1cMEhfKnhC6szrYwuekq52rbY3IT11jksfex4orlXrOjnAvND2rYXXAwA/EPvy2xyl40GyCkNJhQ3G28Bd6Sy4dvwDceH9vYqT8eBNSolCGNB2rMc84CUyunmWCkhtrYC41I4NL5BNhqR9EUm92nXtZCifcnu0LmygaZoKnJ9A3J9Qy8GhBAtsyFhDOzIYfXfLCtQRt5Mp4CjrXtlJvGqJZkVdBea77nw6csxK1BzL7QCzHXKNCo6iRivISTd7/nnCV9ewfBbK5AWjQ34Vp5IQn3BxseU/eNfL5ULi+2N3zSViAFrQSEnTsr06a5UbWg0gsqae/8XWqOScycDeAGQnDuEA6SVIDP2wfQTV8ehyLxg0g/XtZDaTo1VbGyALy7r15GWTp0yJ7khV6eZl0IGyyjq2zqY5r0IWLfs7zrzxfWENPNd+FQkXn8b7PICmocM7ivC0Jh79plzAYHHBgYKCQ7eFqR8r5s+I/K86r2istsK7p0giX2NOe4oEFb8TATndS2kxOZWYZs1qVRSYz6iDeBB7T8p+FCqhY9XPyUAY7DPnIutqxMaUfieStUHpvWmuQxH0lMn5HcSw/2BrMTBP2qaRA1NmR7ZaREo6H6D9vUpT+Okr89zQtGFfWUGkMDKrb16F9ihvuALi0b9Q6wSSF8vMGjuMt0VFDHWOnczjGUKrE6ElPF7RkZEqOQIyU86wJIzYSfhuhZSRYKNDMcGVMamuQ4/F0437v2BgfYnmwWlbSd7AeUMGPXKSPgd7e0NTqSsAb/jY3rBqf502HHZSV9/22ENUVaUTGPk9XlWRUbV54ZjQBgrxHRIdk+CjUbZpcMeWdrlPfc6xr52Cs1j+81piwznBR3sh2w2wd89Y1ZPESjKCSKtHN8cizOPx7mgbysoiyo/+3cH1i8pl83vF0NzXtbrmZXsHSHVgj0zG6/NJ13M+pkfFBkrnT/w+I02obwAFPE4ptoN7emJeDH5s93y1dXgnUTWgN9L01oT0s1yTCuVTJfs1u4Q6WsoXkO7z2NArJKTyt7XZ2xCfR8Th9hTmV9AJzbC+Ts/fTZIzeTPx5XRXZ3PL8B69V3UHzlm9E2kXDba/PnCokPkXIRGboq4OWxwT0YsC0w3zxshoAf3pT+XVXFJa7eG4ucHmxgD7gh61fITJwPrV9brwUB5DViT48ntM8BNKaSIZcXmPDFGHi09b3kkNHwppy038t1fV3gjt/buib3nyGo+i7TRbc/GhuMVVqvFC/gEeKcI95sT+i5igtQJMm02nFT2zbbg5rNX9c1DSXW02kruuyP5ribum/z5uHKYgcXGBkrffA32h+7TfkfW66D9/Zk8TP28lYAz3xKdinQ25CQQ0p7P4aBTHfdq4mSV1t6kpdQ7MWY0MbJbDyZ6FbPbDjl7my6jxNU5yFdPmDUirt99v7dnZtXPZtgvb0ohlWpaC6EjLM557tJam3JkczJhP1BMNDow4ARxxpxAvFNW3nw5eUBI1JEi7pt9AjvCWhBuR1iA+X/W6dOY2KjIY6ENWb56whF8cMIa5CMKZ4ZOx4sJDuubr2D9Jx/WDl7X4YukfX2xSpOrLNnTl+NjEdO87lLmEqlUYN2yvz2f4573tZEODLT7W3Oj7xgIAf/Q+wLjz0+fhX32fOwr/N0zWnubx9KjdO7QS9jJbjsUXIuKvHxF4KYUUjpgIyMgD94FIMGM56LbrOCKTVNFDZUIxeQ0Iao1RlofUaZ2TQ9DSv24GBNtNSzATDcnzeeTgsP51TnQlxRabUEbJZuYSDQNDvzX19D4/ruiJ2lCgvE9CpBSOeLWLjY2zBwsKhXHQcSyYN2yP/1dQtp1qhx+6nXY5y9Gfh8phjHg/Xc7bV5b65xgCrUxVfmVEtZfvFmIYhcpWsHS40FwsMHB1P2En7mQuBb58nIhfXnTCKkkM5YKfGUV5G1N6pTt1LbcJiRNum6AEHWQqGuCTOsjwSOBwZ34nkLyJPk172rVaF4lQpHpuUiIpaXk2L96HdWXT2PzkduDJiUpITaSY9hkswE+N5/eCEIiQahuPjTZaDgmadsGvzybXpaU4POL3v/76wichtKKsZugJ8ycOuT33ZcquKMvBdviegYn0Q8V4tGbYX/i6xvpczFNiShoX7xhhVRYSxHLKxAmGTkFz3RPUjg0ctGYMFtb+/d1hlxTSpDLik3KxARpwGKd1QQrVlYh19Zjy9WCL5xANJpm86oLYFOTYMePeD9b+/YC0BP6fHkFfW/PorFvNBgkqjGGqvIjBMlSRrJeS86dPvWdYHU3Z+VzKSdhWq1G2CBM13rp3FW9gNQk05n7rTwD/12ncQ2RJt94Qoq2qEdC0d5iYyOVh8/1NsuCXISgKaCVSuJdgTQJyG02QepNvWc1mTJcZM0bZIwcdwVibS1/ZlZ/3YJvG79jLBpNkJrPO6upOd4t2OcuoHR1DSv3jmPzxx7O1xbOIwHjERNRFpLSHJBcmK0ZBezpy3qCNCU+0nlG0RZCvBi2rpBcm3obdvGK47oWUn7BQAcGPLMLsaxMfF7EshJTr6tfag1WUiR5ngEVPD0QLmGRh1277ZlZ2Bcv6dVNqBOAWLAALiKNSpEpwD1kYHMuhD7JlDZI9b4PfGkpcLnuOmbEPa8CP/UeWFNi9RaWyzwqNjcLD0InpXIuE6tsNvRPCm5iy8yVZfX+pSCtO9q0INhOKsjXAq5rIUV72iwRdHwU2D3pxCRlpMbnq6tBrTiJgaK1sbgxI4natJFbuSL528ZG6qYcxzdHR0eyb4AtYlja15PtfRUoAx0aTG9Tt51RMoCWS+1Ab1V7NdOGE6sUvxHpCMFwKILO83Hl+trb85UXsfcPT8O+dXebQDXvuOjGhyWA9vUAbhxOAeUlKQmkZIH0FDj/A2UnCBfBYV+adv43Ze3HkgiYICS0kzwzAXT15HtdCym+2vbEsc+eN8sg6YdiMBID+NyTi5SQjYZ+oJ8OMg5+XJI6+9K0+SYWao/SJV03qDAENjLUouWR2RbBNSS8RK3WPrEr2svGRkE1Nrgkpxc22J8uqEzvDwSPfYcNDATq47NXYb15Flt/6aieA0wSCAFtma5i10zanCIEfHkF/NR7ANqnctrfn31uSOm1K/Kner3NElEw6TDbM5X+kAZMA221yrz3NrDR4cLLzQKj3eupp57CQw89hIGBAUxOTuJTn/oUTp48GXimVqvh8ccfx9jYGPr7+/HpT38as7NBT50LFy7gE5/4BHp7ezE5OYlf/dVfhd1Jz7SUyUvvvj1ypPcC+DRiBnJPEhU1iSHs6cvxd0Ipm1jYS4lYVqqJw9q31wnEtCxlmgJr7x6l91Mgj4yBycX1CrMO3RL9my7C8yDt55zgc3NBLThD+Xx5pauX2Hw1mqqDr66i/D++C3rPUfVLukwSvvCB2LWVIAStfXthhUyPrsNDXtdxUaslJqMkpTLYkWIdjnTc47cL5DuvB9ZqoQQIhjASUs8++ywef/xxPP/88/jGN76BZrOJj3zkI9jwecb80i/9Ev7kT/4Ef/RHf4Rnn30Wly9fxo//+I97f+ec4xOf+AQajQa+853v4Hd/93fxpS99CV/4wheMG69tK04J4hOvv50YMxB+PtiIjBtbKFhUZS60Dh/MxQCua6sO84lJ2071BLMvXnLoj0LR+O6Y2JemQQcHlAnXUttFiBMn4zXQObnyhcUomWYoT00iwm7KihQCic3Ka/v3l59XK/e/343TpeAQr73leA0qWASkbQOUBcdNo0wXbGICbHwsuhn6WQwuXmozGYT+pgU/lZRCEUtSNmWzAX7ytHb5qU1p1W2inNK+vvYcDNflmw/W7l1gU5N6+6MGKwoQIkAw6fdwn7vfSwisXXonSSJldvVjbm4Ok5OTePbZZ/EDP/ADWFlZwcTEBP7gD/4AP/ETPwEAeOedd3D8+HE899xz+MAHPoCvfe1r+OQnP4nLly9jaspp5Be/+EX8nb/zdzA3N4eyBkvw6uoqhoaG8OHK/wLW0PCe0QAdGHBiQYzYnS2Qcjn9Ep8Q0J6e9HulUhm47yjkS29473kThRAQxoqNo2mdTvj8QnFlhsqPjWj39bN1y37IStkz4SS+6wMbGSkmNXcMSKkM2lPtiDmlSLCREaPASTY+5gl95xRU0nduIATiB+6D9fIptdu2Ytxck1zi/NcY7+sFtLe3M449MWCDg8E5ahAj5j1fcN8Ty0pXdGHjGfkVrKysYDDhFJvrTmplxbmrGB117kJeeeUVNJtNPProo94zx44dw4EDB/Dcc88BAJ577jncfffdnoACgMceewyrq6s4cULNIVWv17G6uhr4B8RE72fUKsX6ulaEux/StuMzzgYelFrPyWYD5IRvow6xIBDLgrV3T3zzTIlapXRyYmmCPHCn2WkibuKHzUmXZyHOhkwfOrxj4ay6CUhKDBgH2WxopXpX1he624kDm5jInS+Lr6wabTJ8cRl8qU0VJO2mfmCqlLBePgV5/JA6zYeKyWRrK3b+0/vucOruwCbproVue79p7QlZobgL5mtr3u+swwed+z6T/uyAcuAJKM2TWhIyCykhBH7xF38R3/d934e77nLog2ZmZlAulzE8PBx4dmpqCjMzM94zfgHl/t39mwpPPfUUhoaGvH/79yeYFLJ2eEsIGHeqbn2qi/XxsWjQcYIGJhpNiKXl+CqaNoRp5k+DkyM9PwM6NFA4k7VsNrK5Kce0nVarEWEu6/VscyPjfJJbW1p9K1ZXIRpmcUzRQtQs67HCL+w4IaXTXt3qNjZAz13Bxf/HUWx8WiOOKiGujVycMao7CaTUZmeXnHtrQdo5+9cUSbyQWZBGjOv7nZhbSAwuz7R287R/O2mRHn/8cbz55pv4D//hP+RuRBqefPJJrKyseP8uXuzMhaNWgF/YrTgp4DXNA67RjAQdJyKcZFHxd2/z8dVLe3sLubfg8wuQWzWvn0gpQ56ZJBTkPSW5gFQkVtQBm5goJHhStz5Zr3fMMULGZHlWPmtoRubzCxh6j0OyaPrypNN+pJyFxVwm7CCbhe97/Uwn221GlBJsfCx6B+On1/LfN+WAWFtLpr7KEsSc1H9duA/NJKQ+//nP46tf/Sq+9a1vYd++du6UXbt2odFoYHl5OfD87Owsdu3a5T0T9vZzf3afCaNSqWBwcDDwr0h42kU4KFbhtUQUQbtZM07y1dX4oOMiB7/AsjzSUEJAGI0NfqbVampSQuM20mhgsbV/XzTBWrMR9CLUBBsZAalWMo9nInzKTFdyKklZfCbnUD/3/ecXMPTaHOzxfo96CQBQ8lkkNGPFsoL4ypa23VGBlMuJybKAUkIiUErjCQFcK08RMFGIrpFwDyMhJaXE5z//eXz5y1/GN7/5TRw6FHTJfOCBB1AqlfD00097vzt58iQuXLiARx55BADwyCOP4I033sDVq+0o+G984xsYHBzEHXfckedbMiNOcyYs6hoeWQhSxp9uctD35N4offXGphfPFQBJIfwxJOE/9/UGAl0jWqLSZBHU/MN9TxiLpJJv3DIOUsq4gMPfPz4CPnO1I5fexCq170i6nfjPbYPPHJb4TOzfou3mp95D6fwcGocmPa88+9wFb3xJydKfy67lIY51XWGZyMIso6w67fRMGUhKdu0kKJlefAJDrK0lEgmYJpoMIKOFQiurdBdOqUZC6vHHH8fv/d7v4Q/+4A8wMDCAmZkZzMzMYKtlUx4aGsLnPvc5PPHEE/jWt76FV155BT/7sz+LRx55BB/4wAcAAB/5yEdwxx134G/8jb+B119/HX/6p3+Kv/f3/h4ef/xxVLrBUaWAykuJWE6kufe3ggP50iBtO/9mlhIYSTQ8KWORwrfGFxYdVvOWZyMbjwYaB0BZMOU8IWB7dgX6QJV+m/75a9m586QM9BF/94yRl5tRVa0EikBxG6sp2OR46pizyfH49Of1unId2NOXUXrzHLYevi3yrqzXtc15boZmWqlA3KmISVIpfeH2ZKGYogxsj9qK40HwznnBKtoTDgIXm5tm3nq+k6w/+7YJlFmlt+F0ZeSCTmIa+Du/8zv4mZ/5GQBOMO8v//Iv4w//8A9Rr9fx2GOP4bd+67cCprzz58/jF37hF/DMM8+gr68PP/3TP41/9I/+ESzNTdl1Qf8QfhQWSThCpyHkCp0GUio7l7BFaA8abp/k/jtBTl+IPa2klV+oe7lmX9GBAa+91q4pyGYzanpL+3ZCwEZHMpnstGDqouu+puFWa9SGnOwN23HXQu86BvHWu7E5zcRDx0Ge+55x29jgIKSUEOvrIOVyW/FI+k7D9RtsrMYc0FmjluXc85i2o1U2KZW1FSNSKjuM6Yq6/G7vbGwUEDI9LCHjOjCZe4E1QwhAqNd+OVDF06u/l+qCnitOarugJaQyLmJvgGPib9jwEMRWLai9xywWNjEBUi6105xnQYbvIJUK6K23gL91ymleX5+ZJtbh9jmNMlQQWgqMUkgUuGGz4SGIja3i73PSEFrAWq8YbHCdgrVvL1AutYOsCcHVX3gEU7/94vbmN7vG4HgO09jxYkcOA6vrUTLgGxi2bOIZ/HFn46SuaWTctPjCYmKAKF9egazXQavVtt08ZmPhc3MRARV7/2VZambnmO9IitaW9XqAxzD2TqoIZC3XUPNMZMEo8Nv48sr2bPzSXBtPayexrEjuMPHB+4IJDXPCvjQdTGcuJaZ++0Vc+uX3q+OoMmC77vC0oXDoCUPaNgijSn5NwEkLbyKg6MAA2NHbjJp5LcFkTG9cIeWD52mWkXZfxVklajUnAFj1/PBQsl1f9XshtYJTiWXBOngA9tVWgsG4u7IuH5DzBqTqgg0Ogtx/p9azYYUg0ePwWvBkoiy5Hw1Tg0jbhjgXDNewXn4H/JL6ZJ95DENzTdo2Dvzbk7CP7o/dlI2Kt20vrXynQR68y9wVXHAtxUbUahArq+qwDfd+NOwwEfPNYn0d4swFs3Z2GUmJSU1O2TeFkBKNphdDJE3iktz34+6EYgSBWN8wDyDUTPwmOYe4Ot/Wug21b2JZHYnAjwSkdmjTF5uboGfbXlLW4YOxG7dsBDcOkRSTJCXI/Xd2R9jG9Y3gyYG9CezlfrDxMcd8hNZm4KtP1GqxG4S/bjYyos1CQUrlyLN8fgHWOxew/sHbQO85plVOEsRWLdPa9aA5H+l70x0N/pV2QsC9wjHE/WZSqQS/oRMhBgWjqIzVN4WQCkfXq2Ddsj/WFKct9d1o95CbOimVg3EkCYjbJD1yxiSXdw1IIWMXu46LcixMiF7D9RoITmnbgdQhcm0j4rre/qMZgSxbXHUCYH2eUXkFupJRPqkdCSwa2n20VQNW1ad8p1HECwsInHR8dct6PSLkvbaEKKYk58pn+cIi+s6uQlRLTjxbHnQpey9fWup8PSaKZaststnZGDA/2PBQfiWTkMKC1G8OIaUDSmO9F/OXTQCm0dUpppxC2henjRf97UUtqJR28bm5dOGjGfxtn7947WqnVH+pio2N4P2GipJreNjJZxTTv2JzU9+1P4bFHwDE996BdWUJ9dsm0Xz0Ab3yOoEObvCkVNZiKSGWlWgCS0TShl/02s2Tf64DuLZa002EBtY+e948fkWRskAFWa+n544hBISS2DY4ZoLQ3/xCTSeyP+kZ1/OoiMWcUIZ/kdKBAc9FNVY4FLBgyIBhQjy3/e5dQ7iftSsmWmlPksAGnSzGsWnYs2xQUoL09UIM9emHKPhNhoaOOPbFS5CU4OoDlVxp3xPR6TjGhPJJyYpNmhh4zrJAiqQRc5F3zYYJazuYWSALbh4hFeLb05lUqShSO3Nz8hiA9rUnPK1WUgM1E59xNbUcNDap9zmUgRzw8brdsjf93qMAk4E9fdnHgFA2u4CnDMzHNED7erXfJ1Yp9+YpjuxPnqsZ56B9aRrie+8AUFzOK+ZArsBvANbTr+DAvz4BfuwWx8RYsPbP+s1Z7nXhnIDihYvY3FSnygg/V6vFJybdJhDLUmaPppVKrrlbJLXYTSOk2OhIW4uXctui/ouE36FDxzyjZcLJavunDLUfvCu17IBr/JvvdFxri9zj3HcU9Oit6odVEDywAYm1NbCpSS0HC2k3cwtZ+cqJjs/VsHJk7Z6KeKBlZvXwgS+vgL17CWf+t6OFm5T4qlm6EhNI2444T0UcGQIvXD+hp9K2lXfcolbLNXeLjJG7aYQUX1j0KI5iY5I0EHEuoEyZfbYr0NQc2fiYtlbERkZSmc2tgwei/Sc4yn/6cnLhhHSkr5JyN3kmMtep5aU3wE+czFWfPX1ZT3A8fHe6w0DKybUoBvs0+IWuPX05SBVGiPa9Xhr40gpu+bXnsf7pB7vm9t8Jj83MqV98yLIH0b6+YjMPxCA1bVEXcdMIKT/CHmJx5htiWY6Ls//d8L2N4MUc4TPeLeiAzy/Ee8AheNrgS0up3oP2uQvgq+vJbVb9TcpoX2l8N7n/TictOSFKYSTW1tK1vlBfsalJyEfujX2cVqvZL7ldvPCGRyoa8aRzEXNydedkhClEwcxfBBKFrpTgq6vF1Nv63v7/34uof/RBMwESx8uXMod0T6Kpgrjgey//HqQLsbHRlay/0rbBbr9VO8W7NlRk0ym4KYVUGHFHU2nbsP3BkJ3ULDQEDrGsxIWUmJk3ofzAhXwCQSe77VB8WhOD+oyfe/Nd2BcvZ2JlcMEGBwObDJ9bAH357djnRa2mTo+uiYi5rNkAX4yaNq3DB5VjmsSu0Qm6IZ0cUP566T3HlEHu2pASPd96A+KeI/qntHAcURL3nE+h0VU2UrMwdyjvlwlIqaze5Ft9Qe86VhjTh3jvHOy8NE0K5zJTD9odIZUGjRgrE+SJF5G2Db7e2jgVgkQ2GuaZeSOF+DYCEkzoKC9dSdwgO5WmWzYbuTcIvr4RLEOTJSAVcae7rS2tOC1xeaY9pp2Apvbv9/IjOpfm713MRnzsg6jVwN45j40fPJZI8RN7gouLeTx4wEnE2Bpv7aBSg/VNq9XClFb+ofdpm8Gl3VQHG7ttP3sRIsMJTTXexvm5iCIB7HZm5r0W0NFUFrowNAFIg4VNe3uj5SdlG81y0kjqAymdIEK36hSzSThIOM5+njpuhOhpg6rEiQlsDnmhbLciD5b3+yS0xjXzBbWuW3yCmTfwmM8xwgkcVb/n3qOIjQ2lwmKa1ZivrqLv1CJIo+lRHwVOVoQYZ5OVK2vAgu/UqshWnZd5RbmBG+wnbt3EslC5sAipcWp3+qfUplBSQGxsgPT0OPRhJvuj5jwBkPid/v0i8loonoyN6p3Er2sh1XHkEGJxrs7GdmjNyUMqlfaiK9IsabKBqp4VBpPfDym7xgeoi9jNsmhvLtPxS5ojhm2jvb1OeXEbcFwfEJL5Qp+fPA1xdR50agL09sOQUrYFr6bi5bJgEMsCX1nVi/9y+40yY9LdIk2u9plzevdMcQpRC54DkRAwTm4Rej7RcSKu7LSxCrdds43XtZDKxeWlA7+bbOyAqScNKVm53WyVJqMYEMty0rm7KR+uAYitmsOXF4LOuIn1jWzZSDvp/muibebBNo6f41qtqL/1u1jTJKEg5VJmV3WxVYOsltGc6INsNEDiUqnHgFSddjvrIJ10WQrpKR2EMfARPZ7CwtCaSyanRNm0E58n1apDCLBVg6zVjU+gARQY5+RCCgn41r7Y3NJ679rYzTIikMk1y/smA6E6YhMSW0YsQ4Dv3dT2WSXtTVpsbDimIxOTXzgbbsEIBA/7TFLKPvPd7RDGQAcHnYvsBKETLocwA5Z7t19NTDQ5A1r9oOWEfk8bP0JAq22zie4YJsb2uFXHeUq2fkd7Yk63Ujh3Pxk94GhPFfL8NNjzb4EODynnTQQ+8y5fWHQIemu1+HXnK4v2VL1vkc0G5OvvJJafCv9eoNEH7qkzcR6E3xnsd56P2Xf43JzDGN9TBe3va49VWh8qkOhirypPw/OSVn2OXYRou+Bf10Iq78V3ohNApQJrcjz0QvQiPPOxX4fxvCiaIgWIZYGNDOXrw5RF7AYPk0oFbHTY+72qz2hPD9jEmPd3PjeXygoSLseIgqildKii7WNfKSCg1e2vXAG6IZJh7TG8+whYCsMH2zWVeFcT5/FIe3pAjh3OfPfnulbLpg25to7GB46nJ8aU0szE6CtLbGy0v4UQsBHfhun3GjTwUvXmnkYfuAHisfNAIQj4wqKniCbNc7Gx4YSSbGw4YTRTPqcMt1x37WbZX1TfF9dXPtNtgJlDSm3PwetaSHUSsl6HPTO73c3oCGhvL9j4WKb07Na+ve3LT81FLOv11DsCsbkZSfpmspFb+/ZGLtzTG5aPUd4DZVpuzm4uMGNkuWOkLOoG//KbQfoeRT32pelMiovY3IR4Pd6lXwstK4DY3IT1zGuof/R96fX6hKbLBWkMQoNr4VpgjHBPrjkDd6Vtw74y0/75A3c56//4Ea3MDGx4KPbEo501IafT0s0rpFTukikoMvqfjYzkd9lOMyuE/97SnsTmZmYBbF+aTjxRFOFxycbHjPvZvjTtmDpcZ4skktveXu1cSc4LTj+GY608CK4VUyVt28tia8TgEP4WHaHY2uyNcC1szgDcNA+V//6S45qtmguUReK0xNpa4gkjwLziT4Aalx5lYEA7xoqUykYMEq7wYSMjqdaI9kusZeqtRuZveC+L814k33ndUQjfOgUxN5/6fXx5JeLs5brL+y09tFpVfn9gzYTDNTTX+M0rpKQ0Nt9Eov8zwJ2cfHk5u6mNMtQ/8VD6Rb5v8XkLssMbkan5k1hWcOJK6Wi1GdopNje1Tl9ic9MsxqfVj3x1tbCAzsQTDZC8gDWFItC52LXUeg2UlYgnmW/s+fw8Vj/zcDSOSHDw5eX4uhT9595bue+nzVWxtqbdz7LZMPLcdYUPX16OdRCKfFcrgF7UagDngZNQeC9LzCzgFtcKWCeVisPoogk+P68si/T0oPmRB4PP+tdM+L78ZvDu00VgsCkzPkEVkQLbhdhqebRkFBakUgG9+3b0fud02yavoZEYB+ZlaJeLcFK8JEjbjm78Sc4SpbIeVQtl0efynII7nQrChe8+JOyCH8s2kIBOZplNrtdWx/nFPJvk1jzyP9+DODDZPlWFmCaUwibufiQNGu21du8qLsxDSidhpJSw9u4JCp6ke6etLfDZYhjVZaMBfjnBskJDDkkx/cjn5lF98V3l3/LgphBSAHwTW0QCzqy9exInpyiSESCGp003Jkg2bZDL8x57uDvB8yB85Fdmkw2BjY85wpsyx/Tgc3eV9TrYwEBxWrxL+dLbCzo8BLGqcQqSIvIcYdnTkHTN/dw3luFU8pJz87CLApNPmmjbgDs38/cbn5sDvXAVpLfqBIB2SNmifX3x7aXMCzAXq8lep8ZolSWWVyBWUk7YvncKS9CZVpbgAKGpJuowJ2pRuOGFFCmVHf98N5+QVYq40cpGM3ExFeLV5QM7cjiwgTsp3TUXc4jQthC24tDG548hiYVtA66wD22enpddURu7qzFzDtTr2oGP4efyxI10g3k6DHbs1mIDs/OibrYpFnl65/PzkOsbwOgwrEO3FFJmtJIEPkopnDkPZIvf04Cs1yG39GKHuo1MClJBuL6FlN8Hf2BAfXFJSWCzJIw6gbY+6KQgD5bJcpl/xGCP0y7vFzl45FJivXRME5F7nHCKeZV9f3nFszc7d3VBgSQ2N+PNFRn7Ttbr6Xc5SciaK4sQZYyUzolTq/jwvVwL9nDPtgdmew4BUm6vtyuh4ItLIDaHPTFYPDs3QuvAH0dHmXNX2jolkEqH7vkYyxZE2w1FxuAetGhc50Kq3Xw6MQbsnow8Eg5KE7Va+0hqOrguq3K10hZ0GSaIfOVEIseVCRJTeROCxm27c290WsGiPlLaNPgDUdUVdnjRxZDCxkJKx7waahepVIzvNwNtcP+3p0fZJ+Q7r0dIcVU8dJ0E7esB/HE23T7ZuePUUjDss+dhXbiK5uFd5sqOwfNuYDitVCJjY8/MqtdcxlABF7Je17fa+OsiNJviZxKs7IdJMG8Bd7nXt5DyLWD7zLlA1lcdpDIIhDqYjQwBlAUz3CaQPSaBjQzlv7NJqZeUy6B/9mr+7LAGpzwds1isua71PWxgIFOf6joW0J4esMF+4/Jpf3+gXYGAUNOyfMJNrK2ZuYvHnOx03jN9hi+vgJ883f5FN9zUfW1gI0ORNtkzsyDPvwk2Nmq0htigb/xSNmhp2yA9PQBjWmMTl4Y9+JBPMWnFGAXalFqJ02ZSKgcD3QWPzmcNaw/t7U0N7lZB5UhGymVnfYSfHR1uWxvCfb7jgp6OJK2FjYyA3H8s8LuAC2sLxLJg7dltXDdfWMx/8ZmyYbjfF5tWIKdWTErliMNH5k17YMDzbMqaClw2G1p9KjY340/TCZlyRQpNkwnyMk5kuSe1UtgkAMDaszv6DCGx8TQBZusCPSDdS/rYcATBIZZXsPmJ+7TL5Msr7bJCgeiqfjFyQY9Jw+6CjYyAjbcZbGSzAXbkMPiKwVxvtVk2G5H5E3FYCJvsFRAbG7Hm86S7blWSV1mvK8M6+PxC+y4rHPy/44KOXJswX1qCfOVE6qKWtg17+nLmeuLAhqMapB8mZiZRq4Eduy16Z5dzw1UtFlOQh+4GO3IYYm3Ny2LbNbTuGgLIem+lWx/0Yohiwx5MTZUtNB57EGIpPTbPnr4cfUbK2M1aNhttgVlUmhgpg5tnzPfKZgM9X3kR6//LB3JbJQrzlIsBX1qKbO781HvZ55oGGQEdGMjsZCJtO5s3rOp5BaO+yf51YwupAjabrJPX2jWVK3NpQOtTIKxJ03uOgR05HF/eO6c74h5qikA+mfExkLfOgJ8+uz2N6Xam1VZ9OgHPLk0PGxyMBrpmaHfl6df0FIqY+wYjhowYkFI5GJQbmt+0WlXXk/K9A1/+LjZ+5H4jxocwkkJAIu2+FqA6TYfGTqytwT53IVPx1i37HZNyxpQfiULI0BJwYwupbQSfX3CO8t3CqXMQ5xJOIr7JZu2aAnngzkzVWAcP5MrzJBttoc8Xl5MdPzKCDgw4mVkN0A1mhizcfXxtDWw0I4WWT7hpM4HEkIcqU6sbXrzLZiORL1LU64F6dJU82Wxg4JvvoPb+I07MYwaoUsr4yzfluSxsPpmcmuOIX32w9u9re5MmjB2fvuIQD2R0rpCNRmFONjtCShPWoVuMJoySSaGDcFMU0N5ex+086dnlFdDzM4nPxJmVxNxCJMjUCP5Fk9I/bGoyk2lLbm0BM2bR+N1gZpCcQ8ylJOMLc9JJCbG6rt0+OjDQPo10IOA08jv/73XGKmHMnRjGtvOBSRA9X15Bz4nL2Lh3L+i9x7Xf04bhWs49n9wN3qBedvutqQqkWFh07ohSzNpejJsJE3yggIzvKbAjpDQhN7eKCU7tML2ObNqQteSjtKjV0jOXSgnaU4V1+GDw3Y2N2IWT2R07DvV6pj6Xtt2+09DV5gwWVOYA6oS7nfYzInDaBGCWsqXZjLxvjC6zcrDbb3XYHKQIBoW7pnbN9tjTl9EzvY7a7n6Qh+7O1JbCYDCf2PCQNv9gEsjGViopQBz/aCEnP0IKiRsM44YSUrSvT4t+Pgv47NXuuN8mgPb2plLTyGbDo0wqArLanrxp7OSk4BiatHu5bYNO3FkGd28AeoIsAaJWy+3MovN9ygSKWcaKMshqCcSyHKaSnOwu4vW3UZnfwtZUT0TBSoRp24uc64xF+zxDXyqdXnRASJBcIA86EHx+Ywmp4SE0D4ynP2gKkwkZ92yG43v4fToyjPrhlAvcDHEILsKEoGJjA/ytU+2yJscSsxmLWq37wZ5pyLDY4xggvCJVJ5twoK+OZ1R4QbdiYLYLXt0ac5T2VAvJ6kxKFsQbJ5PZLAzHUL78JvrfuoqNYxNazhSZtP8CladIOIqfQLcI77o0hB0ZNK09tK8vksGgE16SN5SQsqcvO1H6BSMQOJc2CWIi0U0ywCrb0NsLWauBfeu78Q/l1GzJwX1g/Yp4GEKcy/O3TqVfwG/HySduUflT1hts/nRs1CzYVxFcq8VbJ3hgzGhPD9h4cYz7WvAFt7LJce1Nji+vFLIhJaYpzwH7zDn0fucUGvfdmmiGJqUyaA6vwI7A1x9anJFZWSNi3lMFUKsgbz8I2td5TssbSkgVAoU3i998woYGzbXdAjLAio2NVA8jNjaq9G7SbS9/6xT4+ka8sHNpofr6tlXjD4MdOaRezL4TAf/Andpu1Hz2qpm7vsKllg3rMYqw0RFvExWbm4Esqqko4tTaGls2NurE+2kKDFKp5LpfdS/4YxNJFgC+vALruRPY/Ni9ibFWqfez24iw6ZdUKtF55RszNjysdzec4Dihm89NvnrCLC9bRtzQQorec8x8Iad4peTSIA3aopsR1F8un1+AfWk68mej9iZ5/bQ2fbGx0fHgRxPwk6dTlQD6Z6/mI6c1ROw8ISRwV8IXFrPfwyRtJIbz3nSjlvW6nuk6RmN3Fb8iE0mqIOt19PzXV/DuP3uocMcedvS2RDd5a/eu4hwJ3n832OCgw++XsPb40lJ7PmUM/O44CDHKjH1DCynxxsn4hWwY9QzEXBabIKDxxHj0tKBzeZ6abdeA8qcw5F0UJFv6eMAR7DrmEVKpmCkBaenjTdAiSU1LG57WntRT4bXicJKFwcPXx7FzwSTAWHDc/r+/CjrQH2D9SBMgafOJn3rPc1IipXJbYLXaa1+ZiTWPu/MvjVnGw0tvOooYIcqg5/DpipTKjgk6yeW/UskU8+jm1fIjLhA7kJTVTZ4opXMC05z/RMprZTbrY3V1FUNDQ/gQfhQWyX95GwY7fgSNXQPJ9z950brnuV5AKpXC82qFwcbHsPqDt6Hvyy9n0679F846z2bx6CowiWCushTv03uPgy5uA71UJ0FZ/Fww7UPKsPHjD2LohWm9PtKYT6RUdlznbdusPe6zWefBdu4fcWOialNCO23ZxDP4Y6ysrGAwQeG4IU5StFqN2mlzaLzy0gzKb17M2aq0ShImvu+El9f2HwYbGclE8ZI79iYEVYp5sbKGoRcuZTf/mAQQZg1Q1IHOeOXdYFSxLucvQ8zNh35JgPffbR5zUyp3JObFGElzwbQPBcfQ85dg7x7RC1XRmE/SbgYJVEOg9x5X8zD6iW6zoGgBRVkirVoAvjEJxAzGBXzntN5c30Kq9fGSi2jWSJ3AwpjNRKytKZl+k9pgjKSNzP0WQlrZQotLXS7rdUh/HI2uAMyq7cX0j5MNOVimbDZgX5oOMmsnIdR27Y01I9WLtrlXY7xyZfolJPi+eye5vBKNkZIS1pw5q7zkXJ3JuFN3HG5qCcoC35Y4nqaC17JgX5qGdXkR4Dzd1KUzT1xB5g8f8PURXViF3IrGrbl3MkZEq729XnhEolMOZaDVqp4pzxMwAlhd12yILweWO0fi7r98J6lw1oTUvHLuc3qturYhm42oxqWxKElRAWw6ICSe2ToEvx27yBTcgONB1g2PHACJgX2Jjhd5xiVDMGEhJwbK2p6VuubGPDB43z573rx8jVQPRaIra7E1N+xL0xBLyyAH9jqnzKzQENj2pWmlU48b+J4nAJ5YVnxwP6XOP/+vkpwVpHQIC3TqDWUV17cwkGCbqN5avb6FVN5UE64duQttIIwBI754DJ0NwF92hyhH0tLEA8kM0allh75BB9oZSkNt180nFTbjhPuV9vYqNdxITI+raVMGNjIEPqnPep8rFXeYlaKbdxMdElwe16XggU09MS5PRxH1nTj8c0PUahBDvVi8sz/eQ889AcSsu0DAtj+QVaOPXE9TE3YQsbnp9ZNsNpyT4dRwVFi2+jAsHGm/z8Rucn8bgjsmAcuCn50/zNrv/m+9HmiT2NzSqu/6FlJFIGmQCjZtaKWkiBMUPT3OJDN8zwTEKik9AumuydxlA8jmqKD7qFXKPF7hjYLs2630YFLVScpl0L5eyN2TkK+eyFR/V7wuw/XFmGaUJk1dL6y8SpTr/ZXURgMQywIdij89yJfewMRX3kHzzltiza9J686IUzErEvpe1GrAi2+A9ugpkfaVGZ/gLcWPV9jMGRf0OzGuzhBddFaDQku7gUCrVVh7ktnEExEaWO1UCTEDHMgmqwDt7c1+4nHv9lSLTvDMOWlUdZg8Y5JGXmnyzQh+6j2tRJZuwj+xtgbx5jvZK+xkokUfPHfgOFOelOAPHVemFE+7QyOVCujBZF7JNFhTE6C3HnRMp5PjWuPpnni97NO++SJtOzX+iy8twfruKax9XO1ckrbucqEgBxvvVG2SpaHZiN+TpHRIC1JCXOxL0x33+AUMhdRTTz2Fhx56CAMDA5icnMSnPvUpnDx5MvDMhz70IRBCAv/+1t/6W4FnLly4gE984hPo7e3F5OQkfvVXfxW27iaeBW5sRExcABsbjXqa1WpOYGyWC3ZDjZKNj4Hddsi4Hj/ExkZmYlH7w+8z1lrZ8FCbF011wRw+HehswqFn3DTybGzUMcGVyrkcDgKekmk8eQVo8tca4hiw/aB//lo06FlKiK0tWLumYt+T9bpx8spwQkf7ygz4ydOOYqTg8mMjI5FYHHeTFLWamXenD2JzE33/+UXUP/5g4pjnyaPmoRXn5FRcsOm0wPL48orjFKFxojICZcbxqUZC6tlnn8Xjjz+O559/Ht/4xjfQbDbxkY98BBsh+/rP/dzP4cqVK96/X//1X/f+xjnHJz7xCTQaDXznO9/B7/7u7+JLX/oSvvCFLxg13AS07JixCGMO43AIiTQgUhpPTrZryoirjy8uQ5yPMkUoEQ5iLGDilL79uvEE58srbQ1TyijZaIGnA76w6NjjWzZ/bYEe9v5jrH3pGyLDjAi/LjsOAEgXnBm9EnWRGOAsZTIJrOqVR+5NdBZylRC9xjHw5eXOsYZIicrXvov6x94Xu96NlMCYcSJWCXRkWLsYo6DzohFew4brWZmDT3DjcJZcwbxzc3OYnJzEs88+ix/4gR8A4Jyk7rvvPvzzf/7Ple987Wtfwyc/+UlcvnwZU1OOZvbFL34Rf+fv/B3Mzc2hrLJxhhAO5mWDg5CNhnoSJQUDdgo567T270sONiwikI8ysP6+7lAFUQZareTmL/SXV8iYEof4N0u7yAN3gs2vwj4fjadrfPQhVJ95I3/KjKLR5QBQUio7yf+uo2BVWq1i68N3o/elM8Vw+lHmuHeHHW669W2UgQ32a5ks2eBg8n5ACNjwsH4qIHedqvoAXQrmXVlxPnx0NKgt/f7v/z7Gx8dx11134cknn8SmbxN47rnncPfdd3sCCgAee+wxrK6u4sQJ9cVzvV7H6upq4J8ffH3Dsa+qjuodEFBsajI5tbVunTGaMb+aEqNlMMGtfXvVWp3gDplsNyC4k4q6wPIKQcuMlQXk1AUny65/zhEC8tDd6HnlXGI68jBotVp8wshWewLo8qafy7EgKdjdsvLFmSVA1GrofekMrn7q9mISJwoONjkRtH502RtTN8Nx6n7g0hlB80rDXac5rSqZhZQQAr/4i7+I7/u+78Ndd93l/f6v/bW/ht/7vd/Dt771LTz55JP49//+3+Ov//W/7v19ZmYmIKAAeD/PzKgZoJ966ikMDQ15//bvD13QCt6KJzILejW9O3IvZ+X6hpOiPAdoX59jflQMnvZlZJrphzLI1bX4CdIBAR7bpwaTNOsGpBvMGwgqNIhp8i7n4QR8i61QtmYpwa4sOoHgKeX6hZK0bcimwZ1smlnQ157rEr55rYrtkZxDcm5sCguwnCSYTvn8AsZfXwddWtdXHloBtCrI9Y2I0uLO0wC3XRrc2CrLirQrMh98wbVxDhKRoHmN/UDatmO5CgV6hwN1XUS+L4O5OrPP6OOPP44333wTf/7nfx74/c///M97/3/33Xdj9+7d+OEf/mG89957uPXWWzPV9eSTT+KJJ57wfl5dXY0IKoeeg3aUndu1jDpsCTlZIKRUR/QXCSnyn5YogzU1YZZCYhvgROIToAi5GzZPuOMeuphnw8MAJeBLK57pVMVCn9r2nh4QzvXNjt0UPpSBlKyueHF58H+fKI5tRdlvhIBWKhHTrHzpDYhKBXR4CIQQrfu4uJuTxJi4rN/n2zs6Sl+liKeS/pgo75cCyjNPAeOX6ST1+c9/Hl/96lfxrW99C/v27Ut89uGHHwYAnD59GgCwa9cuzM4GB9z9edcutct3pVLB4OBg4F8EjIEws8/Rdgt3n28FcxJGlQ4YfqRldxWbm/lPMmmBslImZtLVAaEE0iABoEmfhjMBu8h0d0UoZNPWql82Y+4vvaIIQGjkxBLeqElvD0hvr9PHmrEqqrJIpQxSjiFKjqOV0lHG4rTW0Cki6VRGaIFB5LonQB+UGzyhIIQE/qZTbsC7saVwEMZAYuh5ZL3u1DM5AjaVEisouJEgd+ep55Wo9ZL03g2MP2PR+aASJOHimg3Ipp3edyEWFxVjjbTtYN69Vpxh5PsyKFhGu7qUEp///Ofx5S9/Gd/85jdx6FC6l9Vrr70GANi9ezcA4JFHHsEbb7yBq1fbFBzf+MY3MDg4iDvuuMOkOcG21euZL6pNSVxFrZY6IWl/nzY3VREgTO0yrUxLbQBp245bcBh+F21FuaRUVtfn5zWbGHMCEeN4vxTvKs0aKDZOyo3qJ+VyMEq/1QYX9vRl2BcvOYnz4ihlNFzZ+fxC7MW2MlhSFwkeq97fCEkMEpe27QmDVM/DFBDGkgPS0+CGNQgeWet0aCBTyIC07USnAntmFmR2EfW79uub/roZmA2D64H/f3vfHiRHdd77O909M7uz79U+9UQPkBAggQWIta+xExQeJg62cV3HIbbsuHAg8q04digbm5jEuVVQ11VJuVIJqZtUIFWJTdm5xiYOBNuA8EvGSJaEhEBIQq+VtA/t+zUz293n/tHTPf043X1Od8/ujtS/KgrY6T59nt93zne+7/cxIGUz7IDnMCaJwEJlqBvjxcw5ihN5eNeuXfi3f/s3fOtb30JTUxMGBgYwMDCAufL9zIkTJ/DXf/3X2LdvH06dOoVnn30Wn/zkJ3Hrrbdiy5YtAIDbb78dmzdvxic+8QkcPHgQL7zwAh555BHs2rULuWpcHnOAXLnWnzssYqyMNj4hdiKIObEtWpnAh3yElttVmyPXjty5zHAvdhGCWkWuW22Yw9yw1VE9fdYQgGG7vnLfyMvaIa11Tn6psTF637nes985AeXYn7Exl/lJUBGaruwRaa2CBJCjvKgxXZTyeWtJMqQrr/CtB889IlVV57cEx01e1s6eUygnbYy5SfFTwtrgEDI/Pwxy9fpL7i5QLxTYXowme7ntHkxu4c/fRX5xILE6Crmg+5EhPvnkk/jUpz6Fs2fP4g//8A9x+PBhzMzMYNWqVfjwhz+MRx55xGGiO336NB588EHs3r0bDQ0N2LlzJx5//HEonIs4yXxSUlOT4/gqNTUBuu5vRw5xH5Xq6oxL0sWYqKRspjLdPhfa9T4MMVxvTSEY2Y19od2vFUXYnCxUfi6HmQ9cj/wzrwIASnfciPzBs8KxTCn4QTJZ9H/hRqz4P3tqShGZkPL55MJAfD8iQ+nt5mJs4XVBvzySHrro4kldTogJPGmBIzU1QZ+ejhw/Ijc1WfEMUj5f9jJLOA6jHPzM3W6bUpSamqDPJHDnxvEtXxAjnUUsIlfb9+T1a6Adeyd+WQKQN6yFduKUtas17xerqfyWKpRVK6GPTxgb5WwmmRimKCAEhd+9CfU/Opi4M4l81XpAlqC9eSzRcuNCqqsDqa/nj4/ixGWV9DAUlELesBZyZ6dxaS6YqiJJoUAUxfh+jPgRe8Adk+omiX0HpWLt1jUrdkyfmrKUCMtdNjY4GeRZCkru7AyOcfP5nnaCne5CWbkCZNs1YuVxQnvnjOOin6p8jiFxQd9zfSXtSBXgSXXOcSes9p8z8rxNThoMMYsFSlH/o4OY+MgNkZKHsiDV1RmMGsdPQTu6sBshHuiFArTx8VhlkFxO2GnGxKWtpGwTXz97HnrCOwEREEUBbtlSFSEjL2uvTjCoILQJb7Q6VdXEs/oCiHwPpY+NMesZ/iJbMWqDwyBvnTL+J2muvzgn0Rh3nPLrJ6ANXQx/MCLcnmi0xOH0EtNDjNxwjbdPIvDIAcY9YdtPTuDUH18J+p7rfZ+T29q45oReLFbuLv36YYGdMTyImxapVDLYRyLg0lZStlgmWixyK4hq7P6ppkE5zZdUzKoHZyZYfXqGHQyaoND0Ta7mqIjPAhPgZ+M+5URcNFwOJiLlzZcqJ7YEMyhHgUnEa9QlulDRp6b8XdyD5hQh4qdUYEHud6TzRoC11GTzAqS6WBC1DdrwMFa+PIvhG/Io3nUT8xnuMJMI5Ms1h4jkv8Alr6QiCjKdOoLlWJCXtUPpFUjlQWl4QKyHjJGv/tTciXl+4Beajmh8ForVC5K2I5GTZsR8SLGx2IJkXg0NnpQaGiKbXQAEzymbidjjyRjx1JIUrBABzbZOOGKJgkB+cQCtx+dRaJeBW7Z4fnffWcnNzXybvRQOXNpKKgx+wquc+TLoeZLNgjbwM517inIvYkI8bvCh3GdhwldAaJJMsGflgniN6Rr0qanIwszXdd6dUp43Lsv+PExWk2QUXixF4fO+NjkZGitIMmVmDiBaW0LmlHXf6+pzIsuRAstD06kIlmWdbngY5Tli3LL//Rpajs2g0FEXPqYZxZIZ5jwVCksw62tPDhn0bFj/RGTVZ8Uq+q89FyVShO9dvkqqTIci9IptkakXBoTz5zjKKl8WS3V1holG1FHBVR8uBGSA1cYnkjkJxBXiZnApTzmuZ0guZwS/MhI3Op5TMqFK2fG8XMlHFpfBwwR3G5kvy9zZWN3QxicqO/wqnvw8907zJX73Z3vAt99GkBDhYHl7nxNZ9qaXcT+f5Zwnvz6E+hcOQGptgbLuCv81NjIK7cjbxvfLqXxIfT3/PCizoEjZjPV+pbLuWEf/usvNRkJDnj5gwTP3KDUYfxjylGRtQf1Ecq4fzk3G5aukKAWk6tIoBUGfmTGE56Z1oFdHS3hINUFTBYMuP/HL/riCj9Lg/F52uOlaZma4BKGZUZe7SuV+1mdmovEtMna+niBhEeiaM6VCAhuDJQXbpsKXDYJS4Zgfe597qIVY1eBglrGqM18CaWrAm1/s5trImCdOIU/fMpu4Xih4PZRdG7GgOT7XdxXknm6uPmCBlc6DFotMb1pqjxk1icB96uyHmlZScU0mwkLeDR+2BRHoB46A7rOlKBFQGqK7esntBirJUNYEcy9WBWYbzYzJLjbmMN5DE/ImJ2ExD1OGMCTZQU1ksmwIwb04gXhZXssxYFad2ttincrkLjFX6rjrLrhwF79fkgrUNm4kl0v2jowQaGf6ceX/2guyeUNovS0Gd5H1nslaJsiwee7HSg4A2R/vt4iQSSYrnlgxiBMy4Bm3QxrvWq1pJSW6C3ALw9jBeLoPc7WL601IIAlc5Iqe7PRCwegzkwNP16CeZMf/VBX2PDPw7vp4PfBM04n9PaqqhqATFEBjn+pzCEeiKFYf2eumDQ/H8w4sCyURnkmlp9s5h1ynCO6TJwu65s876INqZhpwZ0wWSvFSjjfyhW3caLHIXP+RNzmmuV7XoB86iv4v9/mue5LJVk4dYXPJ1h6Ln5Kx6fFUJ4hE2d4Pdu9UXgRxQtr+253LjqoqSDZrmETBL79qWkmFoXTHjZ5BTixKPGg34+J6W3IZWv0cQy4VUCo0zkRR0P7t3zj6JKopJBTmpb0A1MGhxOaQtRu/BKEXCr5CX1m7hqvfRTZ+clsbezNEKVb/7W/w9j9dDXmD15QvNK9EyV3dWERTrnruvEeh6VNT0M5dgHLFau5yLgklJbe1eY+shKDul0erR83DsZuJCrm1xfrvpIWKVFcnfryvAqSmpqVxF0KIoZASpLgJNQGLnnpi3vPJm6+qFMXLFh/RE2upQuu/YPWjtPVqY5fvB871pk1M+s4bvVDAxr8aR2lVG5SebuYzQqhChmM7SCYL/X9cL1y8VFcXull3e8XSYhHaOf78dJeEktKnZ7yTxZbqOGlI+Xwi9mx581XMWCt9ppL1l6rziSpavTQfTyAnJLiom29wsZBwHaSGBnGGjQCvy6ggimLcnwHA+QjhAzGCL5ci7KcX0j8IfTSAfUbXIHd2hm/mQtaldvwkskf6Mfa+taDv3ipS3QUHVeeRPX7B+4OPG77S0w0QYsiTkLt9qnnTx4ucJi8JJUXnS8mfagIStFFNqwTaui6xhT4xNQta8CqMqDZ53+/Y2xH3BGirj9TQUBGEosW46kAUJZ4zQUIw3XOjIhK/XhWYKqhOjQzSqHjIcbVLNH1GxzLPSaGqmWIdHyLhyQgZ0EZGwz0DBRhqAr81OITGs3NQ84pBIGuDY74v9smVUnYsJNWZ85Oawf26VwEljUtCSVUNPjmmDLdKvXKaihg7o57tt5iFSSabjFkgKqIE9ckykKRASigGSQjudmcUb/CvACKdUqtxajEDo91krmYySp6AUA4QRQEy3lgbz4aDlbAysGC++UgY304C2qS/Kc8NqaEhkA6K/PIg6s6MY7632WF6dcz3GHOuqvCZm8IhFDEU8BLtmYRRPq5agbM8CLl8J7mcFYTrNitKTU3+AsAnW63U0gRtRQdf3QQRdrQ2bMbiU0GbnKx4hiWQtJGdKjy53SWTMcKWoRYwdtmXjFMJIY7AS8O7KmMEesoyO+uvoLJUBwahnu13FqGqIA15xxogGcU3TTsTnHx2pit1IoiYmFJqbQE6gjkLtbdPIDM8g7Gt7dads2O+L8CJZMFhz+5r/39BXBZKSmrIGzu5NStBrkgmLkifmfHNr6JfsxaS386KMRGl8oJ2xEstIKTWlvhZTeOkOfcUZpvM7v6KKEgAQGpr82UZSbT+PIiyYO0mIZ73XWldgHJA8nxJjAEiArSRUUcKDlosVu2OOClIuRzkjmXi3pfnzntzjTHucbQjb6Pt+TdRumG92DhGxSI7vkh2VgzzRCZKSYbLREmZ+Y20o8cdsTXCzg+szmVNhF+9bsTTBMDOcK5PTbHtwWGTTHQSsuzekpxIAjnmqTOKnZ0QyC3N/vdTASSmUkND4ElZGx423JQZpq5A0065DYEnZEHIHR3ifVNe6A6nCFv9FgQCAsZiVeGAFcAtyQ6HhaDxFA0qtnuUSg0Nxv/b61soGOvQniCVc7yJoljlmfF1LGjjE5B37zcCqMtznXf8pKYmK9bTXXd3bKbc3Bye7p2Dm5D5GmNMWHfK+uyso/+kujpIjY2V5Kh5Pu7Ty0JJ+SFIMEl1dd7Eb4wYF6mxEdpvvSvat8OO9yK/B3iIKb09xmRh2ZcjnKBILse3eFnfC1qQkmzs/scnuOKC3BfbvLRIws4j5TboU1PCcTR+ylYbHo5s3qGq6txY8JbDIQwdqSzM1zKVAEzPfImwMwbgucOxArh1zWEGCxpPqmmQr9nI/U07BZE+M+M82THaIOKQRVXVKo9lLrauBwBjjg8NY/Lj26FPz3CPn5lChXkqdcVmapOT/pRStuf81r/c2uK7xlljQlWVuWbt/eemc9Jn5zzPs3BZK6kgbzK9UDCC0UKe16emIL9yUPzbPLtykZMUy6ZdXnjqhYFEvR+DcnN5KG387oBYKC8YubUlEvWOVFfH5SHoEBg8KLdBbm0ROrVoY2O+ytYeCyeM8k5ZGBzC0J5V2XptvlRhJnELc3e6C87+8ZjKzV29y6vWt58IgdSQ97COBME+fm72GZaw5p1PgPMkxeoDWiw6hLvc1ISW7+yFJHCSMmMmSS7ncY93tMUkrg6pO8nl/DdR4xO+a5w1Jqw6AXCkAPLQInGu8ctaSYlG8euFAnuhC5xGinfdBEgy9Olp7yQQEOjWySgI1Qpk9gMhXvf5CKcFbWIykvOCXijwncCKRehzfLs44wVq1cvdnqiu85GyA5vQNWg89zuEREpxHuhgIpJBlxP6/7je4JAsb7TsY69NTBr9y6iPPj3tc8fbwBSk9vHjYZ8Jmk9SPu8MUFVVoz7luoVBK5/KtdExTP3P7Vx5psxAbLfCA1xWoTLLTdhaoMVi5RmRzRcrA3exCH2u4LlC0Wdnjf6QZCMswk5/xrnGL1kltRTSqSu9PZ7J17D/jL8nD+NvfiajwAC6GLFbQnDf7QgIKKWnm49Wqlrw+YZyxWr/IE7GO1TToJcipMVmmUFFzGac3m96mMmH9Roj+NIPUj7vuR/hpSAykXnrLPRBnztcSo306pzrBQD0uYJhRuN8Pgr0AqNOYbnf7ONrPksp2n7Zj+LazopJlQdJrxGR8uyxknmbF6eueQPZTWcJqkfeNF+ySsqRgdN1qShqSorK+kxnZkFdi0UdGBRawB7TmiQbl+bm5S4rxTylkdNiC4HqldQV9hxArl0m89XZuWgs9AFB1u7nPJfLHKDTM0wzR5AjRyInVko9QZMek16Ei+5I7vQCAovOqx7BRKemK8KJA9rFkeC7xDJZqdTQwBffVUXKMgBiysQEY3xNqGf7kTszCj3PuAdfCgjIqkznVWf6Gr/NRAyleskqqcBJagvS5eKx8wnqZUHesNYSotrkpMFQHQP67Gy4WZCBBYn1iSGgtUmv6WwpQLs4wjYDCeYei+RxF6c/FsndmGU2S8Jb1ANCKmOwyIGvVI74/YDxVd85BWlsEuqKZSA3XRexZtUBkQiIz/yi8yUovd1VJSK49JQUqzNdni/2RUUaw5UULRa5hUBpVVt40GIcYUR1hxDg8hJcCNiUlWWHLoNkspEcBZgktO5UDn5ImLtRNKYoiQy+nuRyAd5YRE6e/08UnhNugkpXPdtvOXVwb8Cq1B/asXeqct+rnjsPolNc3NrIZE+PirhhE3bPPdY1gt7ZCj0kmDkOLj0lJbgweHPp8Kaal1/+TfJBi3YvuQQV0kJxrEmtLdCv5Kfmt7B+1cIH2fIihBQ2trlJUMBSVQ2fG0nE1fk9qiiQWsTNq37gXW/eF+X4a2URlT3dexhduwdw9kO9kZxePJBkI1g/CIRwWZSIooCs7PX8XT9wBPrht6zvJY1LT0lVCYuZE0puajKC4GLA4myzIVSQugIro0IbHgZ97ZBPxfwFgn7gSKIpNBJFlWls/AIxiaJEd4oRVGJyUxM3gbAndism7OuNNXf9X4yZfwlYdMuEdvwkVv3rMRz96vr4Ql/XQsdF7ujA5AeuDS2Kqiq0t0/4/k5yOShdyVO7pUqKB4ucJE6bnIx9OqPzpYqzhZ+gc7fTFVhZFUQRCNXYrcVVxjx1kuTAi3Gprs6y7dsDMaV8vkIvpKpVozNSf+tdDpOdNjkZS/EwnXoEYDq+2Odu8AvlMTAv6iWZz8xsd/pJKs9ZzDK04WFs+MJrmPz9mxKd76b1RG6usLpow8No/O6rwmUpa1Z5Mp3bmXPkDWsTqTuhdClcaIhhcnISLS0teD/ugUJcLMiSDLml2ZdXLwjFu29C/p1xaG8eE35Xbm723iGEoQomvBQpIoMQz10ikSV/K4Lr+RQ+iNNPkozRZ9ej6/5JqBf4EwVGBmddlbVroJ09F8usrdJ57MYPMDExgeaA4PRL7ySla9DGxwF4qVfCUP/iIejHTjr+xhtvxRVc6UaAa6Z89ZULl5enhpFkht+ooQZcZZuMBJKMuQ/dXLXvBH0/FIzEdIFmbhvHnZ+7/1JJVy9ftX7x7priKHJdQ9f9kxj9rSuYCVKD4GDB4IW9rgH9pZ7uj6WgRNZaTSupsGDQMBOZ+329UPB0fGCWVTsjt+hEDIsjOp1gCoKgalRREfpy/IUILZLJcm0wiKJAn5l1mDG528OirlGDg3LjBIgbqUhmAV1D455T8YKtXcHaPG1OKm6I1QdUnTfaVq6b+zceTziTxscz9kFzRSTesP+Cw+NSyufDTbwiBMl2WcChlM0YOB62EvXCANpfPgWq6xazfNCYS3V1RvLO+vrKuATU2xd+Mk2S+TkcbeVL+bzVbqppkNv5DhE1raRC0xYH8MspPd3OIDTfQgKeoTRaQCoH9NnZ0LKF6XgYi879DWXlinA7PufC9QT6waRzCs5ESzXNSC8fVr6mOUh/qR4wHpypLZivlnd9dF4V2427PQDLC1sbHLI2P3JnZ/A4+oRU2IO1Y89BQiBfuY7rUeu77nQqptDiZGEw22w6RZgZjXnHXgQkkzXWk20u0lLJylycCCitlM+RaVkvOwTxbh7UCwPQxycg93RB6fWXXabi1YtFI+v3QlKjha3rUslqN3QNlNMZraaVVJxjNNV0EIEgXQDsnULEOhAlEy7wwsoWDjBlPO/+hqYBPMqbB35xPSHtkupyfN6Ubh49WTb6NQySzB/HRIgVzG3EIiWzZCon8Aip4wkBsQeUJnAvRFROYZaQ0HNfhZtKCrpWEWQApKz/eHKNNWD1sVSX49vQmOXLAvNEkit1FRkPgXg6WioBZcVKMq6TlItHkM6r4XNLijafWWPil0TT3n9U0xybK33uclBSEUHnS0aqhMWIXDcZgWUp1veVlSsM/rCEoV4YCHcACeMoC3o1jD2DEJAshwJn1IfIklN4M54BjAh67r63nVo8giEMAW7q5oLWLo5w3fs4X5aYKduZMDdW5X/7kcdaLOe8CNto2Nivma+bJwmW5559bDIZdlm2zUOYeY2Vf4xIJHyTKrApIRKpjAnH3DXrwhwP/49AHRiEdnEEUmuLwZHogj5j0HoRWeZSgMIbdYBdLpEqOcFcf3c8Yx8zzr69LJWUCTpfEruTSWAXae4s9EIhenmSjKkbV4i9T8jCpKgWLJ/ILj66cj6pSGzavCzoqipGG1XuZ312NrjPBRwEhD1BXfXhCkkglfTxUpkFRWpsWJAAabK8Ozrrhp29ZGoKUleHt860wqhttjEMdiouU3EFmVppscg9T+z5pLhSopRDO/QZ/nxSFkt8sQiSr8fF9y6vhDQwnF5oqeR0r3e3NSLHISsshc6XoM8VrHlm/7vne4QYpzFO+XVZKykAkFd4I6irBkkOnxQ8uypdQ/33fy327SXqKmwlu0sI7pw1XO8kwZgvyVUJZOQFM+CV0oowLMdWaeMThvCqsqebduydxJw11JOnA4O6o8byySuXQ3sXf9LEpQT15Gl0vHgab35plf/myMWtqd64qbqelrpmzLOwb1AqRI5Q00pK7uhwmDGiuBCrp89G/j43Jx0hhiAMEcZEUQxXWZ9vRfIICxFGoX0mycKur2Hw0L1ETGPNzKaqqsIsFe7npYYGPsVlT9QnEUcg40JCamoyvOg4NyLypg3c3HAkk/WwscutLYvvVs77/SA36lNnQH51ONDLL2q+sIWAeu48rvz8XhTv5MsMLv38wMI4UiT8jZpWUtrFi1aHCJtwIB4Xo6xZ5XiHzpfCUzQDDtOECbmtzWNqpKoK7ejxyh9sC5HOl8SYBgiBsnJFqOAK7TNdM4IIOXfeyto1lXr7uPBqw67cQS4HC26mAvdi4FR2dldYZrEzM0xF5xFmZr0pFT41xHb9t7XTnhadB9qbxwySVA7Q+ZLTNCnJxpz3I7pNItbM7rbsF38lEcjdXeFl2XMf2ZWNOTcDWFWkBsM0yrXrt7ug86A8fkJxfuZz9m/pGnLPvWakD3Gvu5By5eZmbtorx3uszLw+ylxZucKbrZv13wG49BgnqgVzAgTsEkgmawl9ubMTKBb97x6qFK1PcjlITY0GnU2cb5Cyc4HorogVQxERJJdbutx9VYLU1ITSTVdBeWlftAJqmMVEbm0Bqa/nZ1awz+/yvJOvXAcyW4B67rzQt4miVDUHVdUhyRj+45vR++xpsbZXmzUkoPzLl3GCF6I2eV0LjwOwBYPqY2PQWNlB4yAk4R9RFBBCKtlYI0w+y0OHkStK7lgW3m8JHvUDA6nt4BhLk+1hocBLiipv3OAIXtVnZpH7zfGAN0IQJcEcIcKpIZQ1qxIhH5av2WiVo01OQxu+GK0g07nlzDloQ84yeFgXakVBSQ0NbLO/rqH32dPQO1uNdcqLGtjM1LSSim0ySeLymJUSGsk4BMjNzZ7yg1gRzFTm1oLjaR8ruNen3nSawxPJVp7c3MwUZKHjRohxEuVdQOZzASYOT2BjhLEXmW+hd0TmuA65stLqGp8J2T4v4s5jSoGLfMk5TQGoj46zTaKi96aDF0GLxfJcMd51mGJFU5YwPPKoGaphK0uInYQXAnV1uKBzQsrnKyERDJd89dx5kP5B4267tYWv7ChzJ+J8czs18Zoaa1pJxQKl/MGAVQCPey4z2DCEAUNYMbpjFQLKF01XQiOmjZZyOXBlQ3adjIiS8R1Th+AyTZmCIFmBlBGhcUSGQNbGxsRNmpJsvW9ULP4y5lKMgNUufWqKffrQxYKTtYsjxn2ytdGQAFs8WuAa5Wy3Ofb2skg2G+6KL+LQI9mCWcPeIQRSOdmqCFM8yWYMmUB137prF0dAZ+cAHi/XqMqGJbv8qJpsY0QUpVJvQrgDmWtaSYUd0UO9cnii/UNZISIwBnBAbm42IrLjnMbcZJELQbBp+6Y+PQ2dQXHjGDdW8kBJqpgsRSARPuUWFboeTyGYl+X5PPzScUcCxxxUensSMXdqo8HZBaLmXdNnZqHPGFRgNIxvzoUgJxgH7HND14UVahjMMRUKkOXcxBFFMU5Q5Y2rZ/7YytGmZ0Bn50DyecN5KmmIrAHb3KSUGvUvc09SzljBmlZSYSAhtmgeO7RjJ8eaUBFtumHfJh3iXjfBBbqG2szGWU2XVFteH78Ng1SXq/RxeeHps7N8pwtX3WmxyPeeeeKUZCFvNEcAdpCSYf1GiMVYIbW1JhvMyzEHSxt6jaDXJEyDfoijBE1PSV2DXihYu/JA71NzLLo47koJccyNwMBvsyw/Wi+fupjlhcoVM2Ad5fg1JquIsz0kl4M+V7Doo/RCwb+/y/FKJJfF3KYe/zu5MEsHawNJCHtM/AKDKbXKoMWiUS8lA6m9jZsx55JWUh5XZ1H4DcgCQH3nVLIKxMU2ITU2QtuyIV6ZPKczQgzb84Yr2NWanbWYPzz3GVV2dCCyDJmRDpsHUi7nq+CY9zK2MARRz7MkIP1sP6SmxnATd1QlJsmQG+M7UlhllZM/8kA7fjJcUQtsJqXGxsWNAyPEMHnboM/MeOVBiHxQ+88h9+rbKPZttJJpCsHNUONi3+eFVF/vMAXS+RLUs/387wt/8XJCDXi+RIU+NQWy52C8QjjunJS1a0BXdEI//FZwUarqjVfRNbHU4YKg8yVxzroy9ELBdwNT9WzGNojkC1IHBsM3XVHnvK7FOx26ylL7FyZVDfPzU1MLyx7uhiAjQxD0qSnUHTyD7+79z/iK18ZgIlSH2dlY3pNCSuqJJ57Ali1b0NzcjObmZvT19eH555+3fi8UCti1axeWLVuGxsZG3HvvvRgcdEbhnzlzBnfffTfy+Ty6urrw0EMPQV1E908hd824WOwo/UWA+s4p6AeOgDuVtwsWAWlIDp3FBsnlQN9z/QJ/lFhmP6WnOxl6p8sIUj7vZT8JeycBt/ukQHI5SFuvDn1OGxzCh1f34exXt1edPUOqqwNuvi7ZMkUeXrlyJR5//HHs27cPe/fuxW//9m/jnnvuwRtvvAEA+LM/+zP853/+J7773e/ilVdewfnz5/GRj3zEel/TNNx9990olUr45S9/iX/913/FU089ha997WuJNkoE2sWRhfsYiyFhIZwZXJAaGiJTHZEbrhHP9gnwu1YHvB+0G5O7uyoCJCSeLHEQAugUZM+h4OckmY8lgVU+C7ZTjzo45LhzIZmssABeUiAEtG+r0Ctyd5eQENZnZw3WGgEs5CkZQODGlhaL0A+9zVeOrmHNN36D+b7NkJqaIHcs41rH8rJ2/408Y17qhQKw9whfnTgRm3Givb0d3/jGN/DRj34UnZ2d+Na3voWPfvSjAIC33noLV199Nfbs2YNbbrkFzz//PH73d38X58+fR3e3YSP9x3/8R3zpS1/C8PAwspzszBbjBPkQFETbXZNMFmTjulAzlPMlRvR01IhtSTY8X4hk/DuKq3ZdnZBZgGSyANVBNQ1ENshuRSPtpbo6I9+PX315+iPsGbNvQsqxM3xAkkEkUnbR5Yzl4ulzQkCy2QrjtmCfe2AycsRl5rC/71dWguwfC4ry/JDyeSM5od/8dLcvbN7Yn+eZA4LsHVJDA8gVK6EfPxXuwFOui9D6M9cNiw3GvaZ86i41NGBmxzVoen0Q2tlz4euFwbTDrLMfQ417jGz1VKFiN/1+9RgnNE3D008/jZmZGfT19WHfvn2Yn5/Hjh07rGc2bdqE1atXY8+ePQCAPXv24LrrrrMUFADccccdmJyctE5jLBSLRUxOTjr+ARDrzoiq8yDnBAlBE/Tusy4lY6TP0AUzi1J13lJQZryCaFZXqoW47fK0JfSSm09p2wOb5ZbmctZfzu+HCSfbIrczXzD7XJL5zEB2pnQ/t3Hek7V94fspIsHwiAU9fQahLIjp1WuD5ydHQk2HidjeH+YcMMmf/eohAFosAucG+JhSTM7RkPXncK8368OKh3TX1WeOS81NaDo0hPmeVsirwrk9WYkfzTo7yAb8YjSD6smr/LmesuHQoUNobGxELpfDAw88gGeeeQabN2/GwMAAstksWltbHc93d3djYMDg4hoYGHAoKPN38zc/PPbYY2hpabH+WbVqlWi1vaCULyePDWGJ3ITKyufj31FxsKo7UJ64jqykogoyRIEkcS/Cne/IzvBRqpyoQsvPZDli6LyLyZfJnupW/EpwmbqVMts3mJt3PKpxv1mlmL+okCZmIdXXs38kxGuuYtTfnmbd7TFnwWfsSC7HPxfLcoE7F5oZMxeyXpgKj3E/6/G68/G8pYUi1FNnkRkYB1QtdB2YwcOsb1G1kv3XL0VOEjJTWElt3LgRBw4cwKuvvooHH3wQO3fuxJEjydog3Xj44YcxMTFh/XP2bPT0Ghai0OIkmD4cshwtK6a9PqH0Qs66kkzWeEfXKuYIUdqZsPgugfKkurrKvZydsoY3At/WfisjKRdTBQGkgHG0CRl7ChhiCkZW3ibOdPfWvRzvPPLpC66EgpzC0nRPrjp/nQhTOKWGa7lfOwkjCzOrvQ5zoFTpT3POBTDYE0KMuRh02rLVx6wrj5t2JUOtFLgGHfPKwSDuartPtlw3tLExw3vy5GnowxdBmpqC3dMZd8FW4lZXjJd93ZrKzyMzI8hdYYmbzWaxYcMGbNu2DY899hi2bt2Kb37zm+jp6UGpVML4+Ljj+cHBQfT0GJf0PT09Hm8/8//NZ1jI5XKWR6H5T2xESK+gTU4mZuP3pZXhBceCd1MBSfV1np1hqLATnFShwtqujBryRoArkRwTmffOx90WM9AxDGZQYSjKO1ZSzjaqFwqQmpsS2agEcTACsPrJl+bJ/n6MnSrJKNB6BZM1Rv0ekYRP2vrUlCHw3N8Mc8RhXerbhSpH+IQZ8EuUTLjiMTd+hIBwmH5NS0ZQMK+deNiqs/ktVyiBxyrEQZFmBAQTqFd0CzFTsEINqKqCarpVZ2LSfrllZpS7d+E3XNB1HcViEdu2bUMmk8GLL75o/Xb06FGcOXMGfX19AIC+vj4cOnQIQ0ND1jM//vGP0dzcjM2bN0evxEJR/iwUeFi96+vFnCayWWhTUx7hHCjUGUGFsWGnbxkZNaheqB5J+Qvl14qCMouAXQCo586H15XHFBd2F2DeGbLimtyX5AKkv55qFIug+33ug/3WVYx7WKZ3XIiXK1m1XCjlvUEeGxC0LOhVS+dLxgmE62HqIBHwjfNjOTnYq5jLobBtXfC3EpB52uAQlP4RXPjg6timermjHXM3G0lbtRE+wmIeCCmphx9+GD/96U9x6tQpHDp0CA8//DB2796N++67Dy0tLfjMZz6DL3zhC3j55Zexb98+fPrTn0ZfXx9uueUWAMDtt9+OzZs34xOf+AQOHjyIF154AY888gh27dqFXIwOUlYsh9zeFv5gNZGgklRWr6z8j8+CEhXQ1PTIs9uzE07zLAIpny+7bkd3HIkNHjOOHwIEnbJqeew7o0DvMMH+isQ2YH5nIcYmZA5ox94RIuENS4Aqr18DucvfPT/JtC7aLddACQs7YLRdLxSQ+UlITrGExkbtP4euf/kNZu6+XjgWUWpqsszh6oUBZF/Y630mn48V4yj05tDQED75yU/iwoULaGlpwZYtW/DCCy/gd37ndwAAf/u3fwtJknDvvfeiWCzijjvuwD/8wz9Y78uyjB/+8Id48MEH0dfXh4aGBuzcuRNf//rXIzcAgDc6fYFdb0kuh4uffBeW/dOeRMpzpLRPuh26VrkH5Sk7qot9WDWqfQoCDJPJpg3Q3jzG/p16MyZzw6fvpLo65/gtAXAnEbxMEJaVWNShKgjSz/Yj9k1fldagHbRYRMOz+0Bf6IH0wdHQ9Sl3d0EbGubqq7hrPc3MW0ZQ/I+8rD30+BoU70ByOci93VBPnQmviM+ElPJ5kGzGsMNXadKSG66BdLI/XtAtALmtDdpEcvd3kUAI5PY2g7VbsK+IohheYQtdf0mGlM0wT69SQwOgaYmebOXmZmBlD7Qjb1vfr8bGxWQaiTuvREEUBVJLc7jpaQGUQK1AyudRuPUa1P3sSMU06xMDFTebcZqZVxB6oeCcqJJsXZaGpSfwDW4rgxaL0Po5SUV9Fos+N2cIfp9n5I0boFyxmu8bfjhyvPKNGNDGx32FnZ0aqZq8fKA0koICkEjCSqC8sRCJPdK9SkhubQEkGfrsbOKmV21qCvqxU47vexJtwlCQ9N029gfBPtUmJo15ZYsnY5p/BFnp7eUoK5Z7yqSqGrp2TYSm+6jCPOVOMbKA0GdnUffTN6DeeFWFacLHCWOhshmnSgpg25/LgyJdvzl0UfpS1Ic9EwDPYg25H6DnB6EPBVC8cCwyGsQkIVKejZ7fDX26cnFueaiF1E1ubancYbnHKqwefmW2tUHefFXgd+NCLxStNkoNDVDWXWH8wHPfYaYtmZ5J5t6O9U1KvV5is7MegaTPFaAcPetfb9a4uL5jCjp9rpzOQtMgX7nOqVh0Ldzr0V20ZrB36COj4klCbc/os7PhbUg4Nm2hTN6i0GdnkXnjDOjyzuj3mQkiVVKAbxAjLZUgjXhPFla8UUwQRfGd+KJMEDrDc89ZIIPOKQLktjY+Zgef3x3K2hReYZuA0nzZC5B6x6r8rrJmlRCBLS0WQcbinRqtFOR+Dhg25UJL86BTZQXtagNzPpnvRdytSnV1FaXI+KYf2Nl2NcNk5lcGa1z8YCpASoHJae88t80Fjwt2wLc9lhAREOIITHX/VmFViBjs7LPWFuQk4uoTubOz4jwVoHS1iyOQhsZA21ugrFrp+9xCIFVSQKBAVc/2cwt0YYbhoHibIHNTSMK9RBRoLheNSBZlRu4EGcvNnFMA/AWRaTe3/X+Q554+OyvkUBAlj44ddL5UcU12t0EiwXMBZV44EU9ESQK1Bzaz+i0gGSUTQUoggoLQBof43wtyGzfLiGuS49x4xZ0LfrA2PYuNcj+qA4MgU7PQ2xoXVVFdHkqKkV3S8b+ZbOCuwsNdNc8mvTQD2HhB50vR7j6CIrhtke/BHw+gNlIUSI0NkBhJ7LSxMYuY1vzHzcKgd7RVzHNJIkABq6fOeGJZPDFekYNQCUjeS89jBQ/H8RJEOVbJLx7K/M98Xiizrj47azA2BIBIxApU5sFCpwKxjyeRZSPRZJAQj3qSClO+5TVqMY/k68XmEme9SDYrFA8WBdrwcIVFwkf22OWderYf0ugU5lcu4zvZVgGXvpIixAjsMyeVJHsC/aT21sCjPO+xPHIAW5hN3w07I3HW5XxgpzzihfuivHyCCjppSC3NkJqaDEW2bqVjcemH3wIySuVvCZ3uJJHTHaWeyHiDoiX4FOpbliulS+DGhlVOFAVpD3weHoY2Oc1Hh8RbvKrye9yVvSUXC3S+BNLUFPl0zwWbjPBAkiGZXooXR6oWlmGa7BM9UcWkPlP7z0F56wzUzWsWRVFd8kpKbmoyLmMDKEV4zA5VTRbGQWHi+6qIs4MddnOY69va2FiowtVGRo3nxiegH3zToxi1kVHrb3JrK8imCKnqXcJCLxT4I/8ZME89DpAQk5gPyNXroCxnU3lJjY1ewZCEUAvJqVVVUBpqHq22YNWGh2ONfyjM+81eRgJJXXMwSVQTUj4P6YoESLRhjElQ4DIvtLExKEdO49Su8CSLSeOSV1La5CRbQBAiliCtUEg0El1e1h4/NUJYXYI84WKaqPzAapM2Nsaft4sQyMvaK2wUApDyea4xlfL5ivsvj/Io95vc3Fzxunv9Ld8U5/rUVPimJ86JgJAllSHWRGIK1Ba3JHd2sk8CkmzMEwHIHcsqa0KSfdePeu48aLFoWAo4x4lkskIu5ea9ltzW5mmfr6m2fC/Hui9235OZxMhUVY1NuE8dROaRNjaGVf/7l8zEnVJdHdNxyQyhMCrlshjx3vVz1/BSA4vyJ6TT9Kkp3+Ry5IZrhD6vjYyCZJR4iipMiIflnKkCguho+AqgZU8y8bryxhLps7NMksygOgEBGx4b5I18J8ZYrAaULlyG2MXgxHSZOf3YzUXN69rFkcqa0LXA9UMyWegzs9zjROdLvnNKWbXSk93WNOtpY+GxfMqaVZVA6/Lm0l0vFidn2FrUZ2c988g3C68N2uAQTn57q8M9XS8UmKZjbXzC6dEZgWz28lVSLPh0WqgZQ9eAwz7UOyYYuzaH11oISCZbNa8iE3LHMrbSrEbuoqSRoDCVO5YJ7YqJoliLWz9xKvjhIAedXE74dJAklCtWV8dMGRFxLQ1SUxPIjdcGfyOXY3quRXZqYkA9dyHyfbXS2wP1LAepMS/K4+vnLaqNjHKZbTd8/gIKm1cuyB3VpaukEhRaXOkf/JSNWY+Ik0xqaCgf2+ehz81FKsOvXm4hoI9PsIMp/byAYripS9ducprmJDme91gUYSrJhjnJBrmzE7RYgjbNf1Khmga9vIukqhqs1APmAS2VoCfA+OGB3dwSAH1AwCXcjiqdtkQDe93QZ2Yhve2lIrM7vdBSCdpQ9e6arI0lx503SzloF0fjKyjGvas+V/AkVJSamsCbwkgbHEJu/ztQN68JdU+Xr1ofS5ldekrKHBBet8+E4xLs9xYi9fADLc2Xs2MmzEhNqSeQkulYEARNAy1Eu9eSLo65Ant1I2B3IUF1UJe5g87Ogs7NiQkG98LmDPr05EniFBDCMOsTMraRaZeqddqKWy7V2bmP7Nlmk7ibDUgVREslrvlg5GPSoKxdA/29N1T+Htd8DviaSz2sODxp723QxsaQOXMRI+9bieLdN/k/ODpurKmIuPSUlAgEzVg8Co2Xr5fkcnxURUFmh7g72Jg7NKbdm7NO6sCgl33CpKKK6EnJHQxpcsSZdDg2mBl+nQWXExDycg1yzIG4MUdCprAaJk8Nmguhfehqt1WWOe9DxpKbWYZSEJltCfDb+Jnlmu9Yz+k6iOqj1OxhNO7xZzlJcThW2dvHq6ztY6Ke7UfdqAbo7PEgmSy0iyOVDdBCZOZd8hBxI5ZlsZ1rWJwNODy7TIGXzYayDATBCKANed9e14VKDJlA1lpP7BcvZJkrkJnIsjf1OE+9MsmduomiRKfyISTRuiw63HPTHsRclzPIY91COSz2jjF/HPPKlQ2aWYQsCVlaojzrpidST58F2XPQvzxCjPmbzTjeI5KrvUTy/s1dVHm9EEXxmL0D33MFgOeeew11L70OqbnZY/ojsmTrcy8rDA8uPSUlANGjdOSYJBvMYExfT0GuQghIb1f4+7a6BmYqDfmWEII8plg7XwbdDcuLjmSyoacHWixy7QbpfEnMtGXa8f1SfZsQOJl7vPPcgjqE7FSfnfUV7J5ylziMYHubKLJ7941PYGbLCi/7id3D0d1GSWYGPTvmVYh3H1BJH+8umwWqqkIel2a5+swMO8icEGabTVJgfa4AKVtZ057NNiOmzr3+6HzJcLXP5zG/iZ/2iOXFR4tFkLocxm9Z4XD+cWzEUu++iGBRJlVxYSdy50AptLdP+P/OiAGj86VoCjYhU5FUVweyiZEOm5PhW1q7CtKGNYnURQi8c4EQyJ3h7rt+kOrrIdudUDg2MPbn5aYm9s67Bkx9YZ50uedfCw7idbexGkHPZeWk9CbPCs5cm5QGs4GYaV0EZBW5ej1TyWqTk5B+tp+7HD+oZ/vR8tIxXPjYpkTv+mtbSSWhTEzSSDNQN46Dgq0+Uj6/4FxnFlgxYH5YoJ22XihAP/im429yW5vlWh/mJai9fcKbYbfKrvFydxekra4Ie79vUsoMmpQaGrhCB3xjtwLGx/68NjkZSTATRYGyYrnYO6Ku4ebGj+FRmhSqudbkjmWgtxiu7Oq58LxwC0oSKyCr9ANHPJsBqa6OKzaKF9rIKLr/768x/aFticmW2lZSgsqE5HK+F7GxzG+u+kgNDaClUlUYHRKB3Z6/iDttbWzMMF3M8gdNOgRdgplz6bu3ehSQNjhkLGw7BL+pz8xUnDMICVZYrHsWSqGsWVU1hgmqqpbglTuW8TvzcMCR1sVmqqoGaLGYiFCUr77SMwbaxRGQXx7kr4uq+t/xSLJQDJ581XruZ6NALxQ8vJTcCEhB0vD/fo3xT9zClreC41TbSkoQtFh0nDBEd19ydxfXLonpIeYui4cWKeai8xVs1XJ1BpvmRRRSQ4N/GQGCjte7T8rnPRQu0q/fCFVAsclNbd6EzLnnMy7qmX7PfUc1TiRcTB9hY2v7XRsfjzbPbGX4zSeiKF56Hh4qKsclPoMf8Og7Vp2lpib+zYEr7Yl20ScBqa5Bm5qy5qknZMVdn+OnKv9jOl0pimf+eOijAmifrEeamoRysFnfsmfsNauWyzn7ilK0f2c/pNYW55q0UV6ljhMcEI0L0EdGExPu2thE+K6S0lgCPygJIslkY+eIkRoaPAwJ2oQ/V6LjXVd6D5LLWQF/oQ4KPrBSZ4RAn5uDNjltmGTLjASWYGpo8FV0+vQ0Vz14Nj9Cc4/RF1FOJJ64LI7vCD9j/z1O6oyygPWbT1RVoY+MCq0PfWbWuab84ofK39anp/mz5+oadLvlpFy2mRTT+J/Kd835pk3PBK9zhqMBVVXP/NHd9EqmY0gAz6M+MwttsjKneRltdNtdmbxhLeRl7UYgujuco3xKozduhtLb42iD578DcPkoKVbSNMFFlISCsnbjrl07yWTZJoI45riAd+0sCZGLLxYd6eABsE8j9t2T+W7B6SlJ59XKJLf9XentSf6+oexlREslyP1OtgFaLPpnRWb0p9zZ6eHr4wpKTsjMGrgTdgkoR8wOK9bG9t6iwwyADWLoEA0+t3PIBb1nD372eY552mcpU83lGOR+R9ei3WG515OfbAoKVnZ5OPJunBzfujhqyACfvqKqCuX0EGauXxVKUeWH2lZSIouJ6t5OTOLiXXRBmwLQM8F1wCeItCrQNeMeKEYfUFUNvnczTQ7ufifEexKw5cEiimKZTuj8PKD7CBR33TlMHI46qCrUgUHHn4MEH1OoqypI0duW0M/HUbw2702q6YHOHLApXI8gC0oH74cqOatY8UKSbOzobcrU/yXB9WGPK8rl/MfAbo7y+4Z7I2O/T7TX2efkYJ5arDnF4+FqUieFBeqWTY+OQGEOcG/Cbd/Wxicq94E+faVeGEDd8BzIvOYwiUqMRKLMz/HV6hKAaUIICoCLAp7gVdvgVS7Rne9RTaturhwfECmZhIR+ZUd80QrK1S6OAD51dJdPZJnvm6w7DpcCkltbvF5PknchamNjUE95+eFCqxCnz239E+Zw4uvlGdFNO7R/RRSHI22DVBk/OeE1yijLCOh2CnqRMWEGYpfXNJGI//1lWQ5ZwbyyxD8OmXI8Wbmv/GD2IVd7ktwIs2RhuXy69zBw9CSkZe0VZxDOBJ61raRCdh9uU4iRGsNGA5LE/ZKfecsEIxOw571yFLkDrBNIFUBVtWopq31TVIe0i86XHI4CUmMDs47u8aPzJb4xNU0T9pABd+Bkbxf0Vc6khkkEcxsfk6On2ijX2fE+z8nNFFgxhVJo/wr0j2RjLqDzJWv87Io38HsiF/Dlk7MJexZc65F6V1p4kXAUm0MPVVVInT4ZBWAoSDN8QCSoXJ+asmLK6Hwp0LtOn5mBPlcQpo7iq4jPmnb/3WXm1wsF0IZ6jGzvgtzdBX2K7463tpVUEAjB1G9tcuzWeBkJYsN1gcnjIOFejHJbS7KmjgBwXw5XAxxMCdrIaHXqaGc2cJ1itTePge5/I/lvApCbG6O/zBIGPN/s6bZMadWKVXKAwyzoO6aiLsocF/5SfbhpiSdZJS/Ud05BamEnSY3i9EJyOWdZkgwpSAERArm5MbEMv5HA6Evt7RNY9qMTGPjIeu5xJpSXEXUJYWJiAq2trXhv9sOQS3yM0ywQRRE7TbkdAAgBUTLRYj8YzgRuSPl66IUYeW04viHcBwLflJubDAeNGdeONZcL3CwQRYHc0wW1Pzhw0lN3cxHz9BdH37gh1eWgR2R9T7QsQiDlstb7JJOtWvyRG3J7G7RRf7N02Nj6ltvWClAd+lwRcltr5a7QTPbH/JjgGNrKkhoMxeaem57yAb5vmLx0ZY+6cHf4RuhT08Y8KPKxwcgdHaCzxgnJ+pb9++a6a2sFZAV0bja4fa73uMEaE7++spUvNeRBMgq08Unj7ys6sLv/nzE+Po6WFn8HoJpUUv39/Vi1ahF3CClSpEiRIhGcPXsWK1f6h8PUpJLSdR1Hjx7F5s2bcfbsWTQLRHDXCiYnJ7Fq1aq0fTWKtH21jbR91QelFFNTU1i+fDkkyf/mqSb5/iVJwooVKwAAzc3Nl+QkMpG2r7aRtq+2kbavuggy85m4dB0nUqRIkSJFzSNVUilSpEiRYsmiZpVULpfDo48+itxipcOoMtL21TbS9tU20vYtHdSk40SKFClSpLg8ULMnqRQpUqRIcekjVVIpUqRIkWLJIlVSKVKkSJFiySJVUilSpEiRYsmiJpXU3//93+OKK65AXV0dtm/fjl//+teLXaVI+Mu//EsQQhz/bNq0yfq9UChg165dWLZsGRobG3HvvfdicHAwoMTFxU9/+lN88IMfxPLly0EIwfe//33H75RSfO1rX0Nvby/q6+uxY8cOHDt2zPHM6Ogo7rvvPjQ3N6O1tRWf+cxnMM2ZEbfaCGvfpz71Kc943nnnnY5nlnL7HnvsMdx0001oampCV1cXPvShD+Ho0aOOZ3jm5JkzZ3D33Xcjn8+jq6sLDz30ENQk+SEjgqd973//+z1j+MADDzieWarte+KJJ7BlyxYrQLevrw/PP/+89XvNjh2tMTz99NM0m83Sf/mXf6FvvPEGvf/++2lraysdHBxc7KoJ49FHH6XXXHMNvXDhgvXP8PCw9fsDDzxAV61aRV988UW6d+9eesstt9B3v/vdi1jjYDz33HP0q1/9Kv3e975HAdBnnnnG8fvjjz9OW1pa6Pe//3168OBB+nu/93t07dq1dG5uznrmzjvvpFu3bqW/+tWv6M9+9jO6YcMG+vGPf3yBW8JGWPt27txJ77zzTsd4jo6OOp5Zyu2744476JNPPkkPHz5MDxw4QD/wgQ/Q1atX0+npaeuZsDmpqiq99tpr6Y4dO+j+/fvpc889Rzs6OujDDz+8GE1ygKd973vf++j999/vGMOJiQnr96XcvmeffZb+13/9F3377bfp0aNH6Ve+8hWayWTo4cOHKaW1O3Y1p6RuvvlmumvXLuv/NU2jy5cvp4899tgi1ioaHn30Ubp161bmb+Pj4zSTydDvfve71t/efPNNCoDu2bNngWoYHW4hrus67enpod/4xjesv42Pj9NcLke//e1vU0opPXLkCAVAX3vtNeuZ559/nhJC6Llz5xas7jzwU1L33HOP7zu11D5KKR0aGqIA6CuvvEIp5ZuTzz33HJUkiQ4MDFjPPPHEE7S5uZkWi8WFbUAI3O2j1FBSf/qnf+r7Ti21j1JK29ra6D//8z/X9NjVlLmvVCph37592LFjh/U3SZKwY8cO7NmzZxFrFh3Hjh3D8uXLsW7dOtx33304c8bI8rpv3z7Mz8872rpp0yasXr26Jtt68uRJDAwMONrT0tKC7du3W+3Zs2cPWltbceONN1rP7NixA5Ik4dVXX13wOkfB7t270dXVhY0bN+LBBx/EyMiI9VuttW9iYgIA0N7eDoBvTu7ZswfXXXcduru7rWfuuOMOTE5O4o03qpOfKyrc7TPx7//+7+jo79UGbwAABb5JREFU6MC1116Lhx9+GLO2vFe10j5N0/D0009jZmYGfX19NT12NUUwe/HiRWia5uhEAOju7sZbb721SLWKju3bt+Opp57Cxo0bceHCBfzVX/0V3vve9+Lw4cMYGBhANptFa2ur453u7m4MDAwsToVjwKwza+zM3wYGBtDV1eX4XVEUtLe310Sb77zzTnzkIx/B2rVrceLECXzlK1/BXXfdhT179kCW5Zpqn67r+PznP4/3vOc9uPbaawGAa04ODAwwx9j8bamA1T4A+IM/+AOsWbMGy5cvx+uvv44vfelLOHr0KL73ve8BWPrtO3ToEPr6+lAoFNDY2IhnnnkGmzdvxoEDB2p27GpKSV1quOuuu6z/3rJlC7Zv3441a9bgO9/5Duo5MommWFr4/d//feu/r7vuOmzZsgXr16/H7t27cdttty1izcSxa9cuHD58GD//+c8XuypVgV/7PvvZz1r/fd1116G3txe33XYbTpw4gfXr1y90NYWxceNGHDhwABMTE/iP//gP7Ny5E6+88spiVysWasrc19HRAVmWPR4pg4OD6OnpWaRaJYfW1lZcddVVOH78OHp6elAqlTA+Pu54plbbatY5aOx6enowNDTk+F1VVYyOjtZkm9etW4eOjg4cP34cQO2073Of+xx++MMf4uWXX3Yko+OZkz09PcwxNn9bCvBrHwvbt28HAMcYLuX2ZbNZbNiwAdu2bcNjjz2GrVu34pvf/GZNj11NKalsNott27bhxRdftP6m6zpefPFF9PX1LWLNksH09DROnDiB3t5ebNu2DZlMxtHWo0eP4syZMzXZ1rVr16Knp8fRnsnJSbz66qtWe/r6+jA+Po59+/ZZz7z00kvQdd0SFrWE/v5+jIyMoLe3F8DSbx+lFJ/73OfwzDPP4KWXXsLatWsdv/PMyb6+Phw6dMihjH/84x+jubkZmzdvXpiG+CCsfSwcOHAAABxjuFTbx4Ku6ygWi7U9dovmshERTz/9NM3lcvSpp56iR44coZ/97Gdpa2urwyOlVvDFL36R7t69m548eZL+4he/oDt27KAdHR10aGiIUmq4jK5evZq+9NJLdO/evbSvr4/29fUtcq39MTU1Rffv30/3799PAdC/+Zu/ofv376enT5+mlBou6K2trfQHP/gBff311+k999zDdEG/4YYb6Kuvvkp//vOf0yuvvHLJuGgHtW9qaor++Z//Od2zZw89efIk/clPfkLf9a530SuvvJIWCgWrjKXcvgcffJC2tLTQ3bt3O1ywZ2dnrWfC5qTpxnz77bfTAwcO0P/+7/+mnZ2di+7GTGl4+44fP06//vWv071799KTJ0/SH/zgB3TdunX01ltvtcpYyu378pe/TF955RV68uRJ+vrrr9Mvf/nLlBBCf/SjH1FKa3fsak5JUUrp3/3d39HVq1fTbDZLb775ZvqrX/1qsasUCR/72Mdob28vzWazdMWKFfRjH/sYPX78uPX73Nwc/ZM/+RPa1tZG8/k8/fCHP0wvXLiwiDUOxssvv0wBeP7ZuXMnpdRwQ/+Lv/gL2t3dTXO5HL3tttvo0aNHHWWMjIzQj3/847SxsZE2NzfTT3/603RqamoRWuNFUPtmZ2fp7bffTjs7O2kmk6Fr1qyh999/v2fztJTbx2obAPrkk09az/DMyVOnTtG77rqL1tfX046ODvrFL36Rzs/PL3BrvAhr35kzZ+itt95K29vbaS6Xoxs2bKAPPfSQI06K0qXbvj/6oz+ia9asodlslnZ2dtLbbrvNUlCU1u7Ypak6UqRIkSLFkkVN3UmlSJEiRYrLC6mSSpEiRYoUSxapkkqRIkWKFEsWqZJKkSJFihRLFqmSSpEiRYoUSxapkkqRIkWKFEsWqZJKkSJFihRLFqmSSpEiRYoUSxapkkqRIkWKFEsWqZJKkSJFihRLFqmSSpEiRYoUSxapkkqRIkWKFEsW/x8ESoX1g1sqcwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "plt.imshow(np.stack([pM]*100)); plt.show()\n", + "plt.imshow(pU_M); plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Get IB model" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "ename": "ModuleNotFoundError", + "evalue": "No module named 'ultk.effcomm.ib'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[15], line 3\u001b[0m\n\u001b[1;32m 1\u001b[0m model_fn \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m./outputs/naming_model.pkl\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 2\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m os\u001b[38;5;241m.\u001b[39mpath\u001b[38;5;241m.\u001b[39mexists(model_fn):\n\u001b[0;32m----> 3\u001b[0m model \u001b[38;5;241m=\u001b[39m \u001b[43mmodeling\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mIBNamingModel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfrom_pickle\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmodel_fn\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 5\u001b[0m \u001b[38;5;66;03m# This takes days on a laptop, but will work\u001b[39;00m\n\u001b[1;32m 6\u001b[0m model \u001b[38;5;241m=\u001b[39m modeling\u001b[38;5;241m.\u001b[39mget_ib_naming_model(\n\u001b[1;32m 7\u001b[0m pU_M,\n\u001b[1;32m 8\u001b[0m pM,\n\u001b[1;32m 9\u001b[0m \u001b[38;5;66;03m# add custom beta values here\u001b[39;00m\n\u001b[1;32m 10\u001b[0m betas\u001b[38;5;241m=\u001b[39mnp\u001b[38;5;241m.\u001b[39mlogspace(\u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m5\u001b[39m, \u001b[38;5;241m1600\u001b[39m,)\n\u001b[1;32m 11\u001b[0m )\n", + "File \u001b[0;32m~/uw/projects/ultk/src/ultk/effcomm/information_bottleneck/modeling.py:126\u001b[0m, in \u001b[0;36mIBNamingModel.from_pickle\u001b[0;34m(cls, fn)\u001b[0m\n\u001b[1;32m 124\u001b[0m \u001b[38;5;129m@classmethod\u001b[39m\n\u001b[1;32m 125\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mfrom_pickle\u001b[39m(\u001b[38;5;28mcls\u001b[39m, fn: \u001b[38;5;28mstr\u001b[39m):\n\u001b[0;32m--> 126\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mread_pickle\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfn\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/uw/projects/ultk/src/ultk/util/io.py:78\u001b[0m, in \u001b[0;36mread_pickle\u001b[0;34m(fn)\u001b[0m\n\u001b[1;32m 76\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mread_pickle\u001b[39m(fn: \u001b[38;5;28mstr\u001b[39m):\n\u001b[1;32m 77\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mopen\u001b[39m(fn, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrb\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m f:\n\u001b[0;32m---> 78\u001b[0m data \u001b[38;5;241m=\u001b[39m \u001b[43mpickle\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mload\u001b[49m\u001b[43m(\u001b[49m\u001b[43mf\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 79\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m data\n", + "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'ultk.effcomm.ib'" + ] + } + ], + "source": [ + "model_fn = \"./outputs/naming_model.pkl\"\n", + "if os.path.exists(model_fn):\n", + " model = modeling.IBNamingModel.from_pickle(model_fn)\n", + "else:\n", + " # This takes days on a laptop, but will work\n", + " model = modeling.get_ib_naming_model(\n", + " pU_M,\n", + " pM,\n", + " # add custom beta values here\n", + " betas=np.logspace(0, 5, 1600,)\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Load natural languages" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Read the data\n", + "term_df = pd.read_csv(\n", + " \"data/term.txt\", delimiter=\"\\t\", names=(\"lang\", \"spkr\", \"cnum\", \"term\")\n", + ")\n", + "\n", + "# Get the number of unique meanings and initialize variables\n", + "num_m = len(term_df.cnum.unique())\n", + "\n", + "# Create a dictionary to store p(W|C) for each language\n", + "pW_C_dict = {}\n", + "\n", + "# Process each language separately\n", + "for lang in tqdm(term_df.lang.unique()):\n", + " # Subset the data for this language\n", + " lang_df = term_df[term_df.lang == lang]\n", + " \n", + " # Map terms and categories to indices\n", + " unique_terms = lang_df.term.unique()\n", + " term_to_idx = {term: i for i, term in enumerate(unique_terms)}\n", + " num_w = len(unique_terms)\n", + " \n", + " # Initialize p(W|C) matrix\n", + " pW_C = np.zeros((num_m, num_w))\n", + " \n", + " # Populate the matrix\n", + " for cnum, group in lang_df.groupby('cnum'):\n", + " c_idx = cnum - 1 # Assuming cnum starts from 1\n", + " term_counts = group['term'].value_counts()\n", + " \n", + " for term, count in term_counts.items():\n", + " t_idx = term_to_idx[term]\n", + " pW_C[c_idx, t_idx] = count\n", + " \n", + " # Normalize rows to get probabilities\n", + " pW_C = pW_C / pW_C.sum(axis=1, keepdims=True)\n", + " \n", + " # Store the result for this language\n", + " pW_C_dict[lang] = pW_C\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# langq = lambda lang: language_to_encoder(lang)\n", + "get_point = lambda q: (model.complexity(q), model.accuracy(q), model.d_IB(q))\n", + "\n", + "df_langs = pd.DataFrame.from_records(\n", + " [\n", + " (key, )\n", + " + get_point(q)\n", + " for key, q in tqdm(pW_C_dict.items())\n", + " ],\n", + " columns=(\"language\", \"complexity\", \"accuracy\", \"distortion\"),\n", + ")\n", + "df_langs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plot" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import plotnine as pn" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df_bound = pd.DataFrame(model.IB_curve.T, columns=[\"complexity\", \"accuracy\"],)\n", + "df_bound" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "(\n", + " pn.ggplot(\n", + " df_bound, \n", + " mapping=pn.aes(x=\"complexity\", y=\"accuracy\"),\n", + " ) \n", + " + pn.geom_line() # IB curve\n", + " + pn.geom_ribbon(\n", + " mapping=pn.aes(\n", + " x=\"complexity\",\n", + " ymin=\"accuracy\",\n", + " ymax=np.inf,\n", + " ),\n", + " fill=\"gray\",\n", + " alpha=0.3,\n", + " )\n", + " # natural langs\n", + " + pn.geom_point( \n", + " data=df_langs,\n", + " # alpha=0.3,\n", + " size=3,\n", + " fill=\"blue\",\n", + " )\n", + " + pn.xlab(\"Complexity, $I(M;W)$ bits\")\n", + " + pn.ylab(\"Accuracy, $I(W;U)$ bits\")\n", + ")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "ultk", + "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.11.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/src/examples/colors/meaning.py b/src/examples/colors/meaning.py index 5b7af7aa..3f531efe 100644 --- a/src/examples/colors/meaning.py +++ b/src/examples/colors/meaning.py @@ -1,268 +1,38 @@ -import csv -import math -import pandas as pd -from ultk.language.semantics import Meaning, Universe, Referent -from ultk.language.language import Language, Expression -import ultk.effcomm.informativity as informativity -import ultk.effcomm.rate_distortion as rd -from collections import Counter -import os import numpy as np -from urllib.request import urlretrieve -from rdot.ba import IBResult -import pickle -import matplotlib.pyplot as plt +from ultk.language.semantics import Universe -import pandas as pdcombined -import plotnine as pn +color_universe = Universe.from_csv("src/examples/colors/outputs/color_universe.csv") -from zipfile import ZipFile +# TODO: generate meaning dists once and serialize? +# shape (330, 3): L*a*b* values for each Munsell chip +cielab_points = np.array([(ref.L, ref.a, ref.b) for ref in color_universe.referents]) -wcs_dialect = csv.Dialect -wcs_dialect.delimiter = "\t" -language_codes = dict() -language_terms = dict() +def meaning_distance( + center: np.ndarray, other_point: np.ndarray, sigma_squared: float = 64.0 +) -> float: + """Calculate the distance between two points in CIELAB space. + Args: + center: the first point (e.g. (L, a, b) for a Munsell chip) + other_point: the second point + sigma_squared: the variance of the Gaussian kernel + Returns: + exp(-||center - other_point||^2 / (2 * sigma_squared)) + """ + return np.exp(-np.linalg.norm(center - other_point) ** 2 / (2 * sigma_squared)) -#Generate all WCS color codes -current_dir = os.path.dirname(os.path.realpath(__file__)) - -#####----TESTING - Grab the Noga model -- remove later -DEFAULT_MODEL_URL = 'https://www.dropbox.com/s/70w953orv27kz1o/IB_color_naming_model.zip?dl=1' -def load_model(filename=None, model_dir='./model/'): - if not os.path.isdir(model_dir): - os.makedirs(model_dir) - if filename is None: - filename = model_dir + 'IB_color_naming_model/model.pkl' - if not os.path.isfile(filename): - print('downloading default model from %s ...' % DEFAULT_MODEL_URL) - urlretrieve(DEFAULT_MODEL_URL, model_dir + 'temp.zip') - print('extracting model files ...') - with ZipFile(model_dir + 'temp.zip', 'r') as zf: - zf.extractall(model_dir) - #os.remove(model_dir + 'temp.zip') - os.rename(model_dir + 'IB_color_naming_model/IB_color_naming.pkl', filename) - with open(filename, 'rb') as f: - print('loading model from file: %s' % filename) - model_data = pickle.load(f) - return model_data - -model_data = load_model(filename=f"{current_dir}/model/model.pkl", model_dir=f"{current_dir}/model/") - - -munsell_to_cielab = {} -with open( - f"{current_dir}/data/cnum-vhcm-lab-new.txt", newline="", encoding="utf-8" -) as csvfile: - color_reader = csv.DictReader(csvfile, delimiter="\t") - for row in color_reader: - munsell_to_cielab[row["V"] + row["H"]] = [ - float(row["L*"]), - float(row["a*"]), - float(row["b*"]), - ] -color_codes = [{"name": key} for key in munsell_to_cielab.keys()] - -# Generate referents for all color codes -referents = pd.DataFrame(color_codes) -color_universe = Universe.from_dataframe(referents) - -with open(f"{current_dir}/data/lang.txt", newline="", encoding="utf-8") as csvfile: - lang_reader = csv.DictReader(csvfile, delimiter="\t") - for row in lang_reader: - language_codes[row["LNUM"]] = row["LNAME"] - -#Collect language information, such as term names, abbreviations, etc -with open(f'{current_dir}/data/dict.txt', newline='', encoding="utf-8" ) as csvfile: - term_reader = csv.DictReader(csvfile, delimiter='\t') - for row in term_reader: - lang_num = row["LNUM"] - lang_term_num = row["TNUM"] - lang_term_transcription = row["TRAN"] - lang_term_abbrev = row["WCSC"] - if lang_num not in language_terms: - language_terms[lang_num] = [] - language_terms[lang_num].append(lang_term_abbrev) - - -#Generate the uniform probability prior as a baseline -uniform_prior = color_universe.prior_numpy() -#uniform_prior = np.array(color_universe._prior) - -SIGMA_SQUARED_SCALAR = 64 -#Calculate the meaning space as an isotropic Gaussian centered at the first chip C, for all other points -def meaning(center, point): - return math.exp((-1/(2*SIGMA_SQUARED_SCALAR) * np.linalg.norm(center-point))) - -munsell_to_cielab = np.array(list(munsell_to_cielab.values())) -print(f"Munsell to CIELAB hues:{munsell_to_cielab}") - -#Generate the meaning space -meaning_space_indices = np.zeros(shape=(len(munsell_to_cielab), len(munsell_to_cielab))) -print(meaning_space_indices) -for center_index, center in enumerate(munsell_to_cielab): - for point_index, point in enumerate(munsell_to_cielab): - meaning_space_indices[center_index][point_index] = meaning(center, point) - - - -meaning_dists = meaning_space_indices / meaning_space_indices.sum(axis=1, keepdims=True) - -#print(language_terms) -expressions_by_speaker = {} -average_language_by_meaning = {} -speakers_by_language = {} -with open(f"{current_dir}/data/foci-exp.txt", newline="", encoding="utf-8") as csvfile: - color_reader = csv.DictReader(csvfile, delimiter="\t") - for row in color_reader: - lang_num = row["LNUM"] - speaker_num = row["SNUM"] - transcription = row["WCSC"] - color = row["COLOR"] - - # Filter AX to A0 and JX to J0 - both of these represent pure white/black respectively - if color.startswith("A"): - color = "A0" - elif color.startswith("J"): - color = "J0" - - # Update speaker records - if lang_num not in speakers_by_language: - speakers_by_language[lang_num] = set() - speakers_by_language[lang_num].add(speaker_num) - - #Assemble list of languages by speaker - if lang_num not in expressions_by_speaker: - expressions_by_speaker[lang_num] = {} - average_language_by_meaning[lang_num] = {} - if speaker_num not in expressions_by_speaker[lang_num]: - expressions_by_speaker[lang_num][speaker_num] = {} - if transcription not in expressions_by_speaker[lang_num][speaker_num]: - expressions_by_speaker[lang_num][speaker_num][transcription] = [] - if color not in average_language_by_meaning[lang_num]: - average_language_by_meaning[lang_num][color]= Counter() - - (expressions_by_speaker[lang_num][speaker_num])[transcription].append(color) - - average_language_by_meaning[lang_num][color][transcription] += 1 - - -#print(expressions_by_language) - -# For now, assume that if any speaker refers to a color by a given term, that color can be referred to by that term -# for language in expressions_by_language: -# for expression in expressions_by_language[language]: -# expressions_by_language[language][expression] = set(expressions_by_language[language][expression]) - -languages = {} - -#Average out the language, in case of disagreements. For each color, find the most common term associated with that color -for language_code in average_language_by_meaning: - expressions = {} - for color in average_language_by_meaning[language_code]: - #Find the most common term associated with each color - most_frequent_expression = average_language_by_meaning[language_code][color].most_common(1)[0][0] - #print(f"Most frequent expr:{most_frequent_expression}") - if most_frequent_expression not in expressions: - expressions[most_frequent_expression] = [] - expressions[most_frequent_expression].append(color) - language_expressions = [] - for expression_form in expressions: - #language_expressions.append(Expression(form=expression_form, meaning=Meaning(tuple([Referent(name=color) for color in expressions[expression_form]]), universe=color_universe))) - language_expressions.append(Expression(form=expression_form, meaning=Meaning(tuple([Referent(name=color) for color in expressions[expression_form]]), universe=color_universe))) - - languages[language_code] = Language(language_expressions, lang_code=language_code) - -#Generate the imshow heatmap for the meaning -plt.imshow(meaning_dists, cmap="hot") -plt.savefig(f"{current_dir}/outputs/old_meaning_dists.jpg") - -#Temporarily use Zaslavsky data to verify information -meaning_dists = model_data['pU_M'] -noga_prior = np.array([row[0] for row in model_data['pM']]) -noga_bound = model_data['IB_curve'] - -#Generate the heatmap for the Zaslavasky meaning function -plt.imshow(meaning_dists, cmap="hot") -plt.savefig(f"{current_dir}/outputs/noga_meaning_dists.jpg") - -#result = meaning(munsell_to_cielab[meaning_space_indices[0]], munsell_to_cielab[meaning_space_indices[1]]) -#Generate the meaning/accuracy/complexity for all languages based on the prior, meaning and Language -language_data = [] -for language_code in languages: - language = languages[language_code] - #Dereference the lang code to get the actual language associated with it - language_name = language_codes[language_code] - language_data.append((language_name, "natural") + rd.language_to_ib_point(language=language, prior=noga_prior, meaning_dists=(meaning_dists))) -combined_data = pd.DataFrame(language_data, columns =['name','type','complexity', 'informativity', 'comm_cost']) - -""" -#Generate languages per speaker -for language in expressions_by_speaker: - for speaker in expressions_by_speaker[language]: - expressions = [] - for expression in expressions_by_speaker[language][speaker]: - #print(f"Language:{language} | Expression:{expression} | Colors:{expressions_by_language[language][speaker][expression]}") - expressions.append(Expression(form=expression, meaning=Meaning(tuple([Referent(name=color) for color in expressions_by_speaker[language][speaker][expression]]), universe=color_universe))) - languages[(language, speaker)] = (Language(expressions, lang_code=language, speaker=speaker)) - - -#result = meaning(munsell_to_cielab[meaning_space_indices[0]], munsell_to_cielab[meaning_space_indices[1]]) -language_data = [] -for language_info in languages: - language = languages[language_info] - language_code = language_info[0] - speaker_id = language_info[1] - #Dereference the lang code to get the actual language associated with it - language_name = language_codes[language_code] - language_data.append((language_name, "natural", speaker_id) + rd.language_to_ib_point(language=language, prior=uniform_prior, meaning_dists=meaning_dists)) -combined_data = pd.DataFrame(language_data, columns =['name','type','speaker_id','complexity', 'informativity', 'comm_cost']) - -""" - -#Get the IB bound for the specified parameters -ib_boundary = rd.get_ib_bound(prior=uniform_prior, meaning_dists=meaning_dists, betas=np.logspace(-2, 2, 10)) -ib_boundary_points = pd.DataFrame([("ib_bound", "ib_bound", ib_point.rate, ib_point.accuracy, ib_point.distortion ) - for ib_point in ib_boundary if ib_point is not None], columns =['name','type','complexity', 'informativity', 'comm_cost']) - -combined_data = pd.concat([ib_boundary_points, combined_data]) - -#Generate and save plots -plot = ( - pn.ggplot(pn.aes(x="complexity", y="comm_cost")) - + pn.geom_point(combined_data, pn.aes(color="type")) - + pn.geom_text( - combined_data[combined_data["type"] == "natural"], - pn.aes(label="name"), - ha="left", - size=5, - nudge_x=0.1,) +# shape: (330, 330) +# meaning_distributions[i, j] = meaning_distance(cielab_points[i], cielab_points[j]) +# this is p(u | m), or m_c(u) in the paper +meaning_distributions = np.array( + [ + [meaning_distance(center, other_point) for other_point in cielab_points] + for center in cielab_points + ] ) - - -plot.save(f"{current_dir}/outputs/complexity-commcost.png", width=8, height=6, dpi=300) - -plot = ( - pn.ggplot(pn.aes(x="complexity", y="informativity")) - + pn.geom_point(combined_data, pn.aes(color="type")) - + pn.geom_text( - combined_data[combined_data["type"] == "natural"], - pn.aes(label="name"), - ha="left", - size=5, - nudge_x=0.1,) - ) - -plot.save(f"{current_dir}/outputs/complexity-informativity.png", width=8, height=6, dpi=300) - -plot = ( - pn.ggplot(pn.aes(x="informativity", y="comm_cost")) - + pn.geom_point(combined_data, pn.aes(color="type")) - - ) - -plot.save(f"{current_dir}/outputs/informativity-commcost.png", width=8, height=6, dpi=300) +# normalize each row into a distribution +meaning_distributions /= meaning_distributions.sum(axis=1, keepdims=True) diff --git a/src/examples/colors/meaning_dists.npy b/src/examples/colors/meaning_dists.npy deleted file mode 100644 index ff96b5e5..00000000 Binary files a/src/examples/colors/meaning_dists.npy and /dev/null differ diff --git a/src/examples/colors/outputs/color_universe.csv b/src/examples/colors/outputs/color_universe.csv new file mode 100644 index 00000000..21215787 --- /dev/null +++ b/src/examples/colors/outputs/color_universe.csv @@ -0,0 +1,331 @@ +#cnum,V,H,C,MunH,MunV,L,a,b,name +1,E,29,10,2.50PB,6.0,61.7,-4.52,-39.18,1 +2,C,23,4,7.50BG,8.0,81.35,-19.64,-4.3,2 +3,F,4,16,10.00R,5.0,51.57,55.2,68.32,3 +4,I,36,6,10.00P,2.0,20.54,24.14,-14.33,4 +5,C,20,6,10.00G,8.0,81.35,-33.04,4.96,5 +6,C,6,6,5.00YR,8.0,81.35,14.87,30.96,6 +7,E,15,12,7.50GY,6.0,61.7,-46.97,64.65,7 +8,H,40,10,10.00RP,3.0,30.77,47.63,5.24,8 +9,G,6,8,5.00YR,4.0,41.22,22.15,41.13,9 +10,I,30,8,5.00PB,2.0,20.54,7.63,-35.92,10 +11,I,22,4,5.00BG,2.0,20.54,-16.13,-4.67,11 +12,C,11,12,7.50Y,8.0,81.35,-10.94,87.9,12 +13,I,18,6,5.00G,2.0,20.54,-27.79,7.33,13 +14,I,26,4,5.00B,2.0,20.54,-9.52,-13.99,14 +15,C,35,6,7.50P,8.0,81.35,18.74,-12.74,15 +16,C,0,0,10.00RP,8.0,81.35,-0.05,0.06,16 +17,E,3,12,7.50R,6.0,61.7,46.38,35.47,17 +18,I,11,2,7.50Y,2.0,20.54,-1.74,11.57,18 +19,E,27,8,7.50B,6.0,61.7,-16.81,-28.31,19 +20,F,16,12,10.00GY,5.0,51.57,-56.86,49.22,20 +21,E,39,12,7.50RP,6.0,61.7,49.38,2.78,21 +22,B,10,6,5.00Y,9.0,91.08,-5.25,45.24,22 +23,F,34,10,5.00P,5.0,51.57,31.24,-29.94,23 +24,H,10,4,5.00Y,3.0,30.77,-0.15,26.58,24 +25,G,24,6,10.00BG,4.0,41.22,-24.01,-14.24,25 +26,H,30,10,5.00PB,3.0,30.77,7.86,-43.39,26 +27,B,5,2,2.50YR,9.0,91.08,5.21,7.67,27 +28,E,38,10,5.00RP,6.0,61.7,40.07,-3.44,28 +29,D,18,8,5.00G,7.0,71.6,-41.95,14.43,29 +30,F,6,12,5.00YR,5.0,51.57,29.45,64.44,30 +31,C,24,4,10.00BG,8.0,81.35,-18.27,-7.01,31 +32,E,36,10,10.00P,6.0,61.7,37.1,-18.34,32 +33,D,15,10,7.50GY,7.0,71.6,-40.28,53.23,33 +34,F,28,10,10.00B,5.0,51.57,-11.88,-38.56,34 +35,D,3,10,7.50R,7.0,71.6,38.22,29.22,35 +36,I,20,6,10.00G,2.0,20.54,-26.87,1.22,36 +37,E,30,10,5.00PB,6.0,61.7,2.64,-39.49,37 +38,G,39,12,7.50RP,4.0,41.22,52.58,-0.05,38 +39,G,16,8,10.00GY,4.0,41.22,-38.39,31.53,39 +40,E,25,8,2.50B,6.0,61.7,-29.22,-21.27,40 +41,H,3,12,7.50R,3.0,30.77,52.68,34.06,41 +42,E,10,10,5.00Y,6.0,61.7,-1.4,71.61,42 +43,I,29,6,2.50PB,2.0,20.54,0.11,-26.61,43 +44,B,40,2,10.00RP,9.0,91.08,5.44,1.5,44 +45,E,17,10,2.50G,6.0,61.7,-51.58,26.3,45 +46,F,0,0,10.00RP,5.0,51.57,-0.03,0.04,46 +47,I,17,4,2.50G,2.0,20.54,-17.35,7.46,47 +48,E,8,12,10.00YR,6.0,61.7,14.45,76.93,48 +49,D,25,6,2.50B,7.0,71.6,-22.32,-14.67,49 +50,I,35,6,7.50P,2.0,20.54,22.74,-16.65,50 +51,H,8,6,10.00YR,3.0,30.77,9.51,37.16,51 +52,B,16,2,10.00GY,9.0,91.08,-12.29,10.56,52 +53,H,39,10,7.50RP,3.0,30.77,46.93,-2.51,53 +54,G,15,8,7.50GY,4.0,41.22,-33.18,41.15,54 +55,E,24,8,10.00BG,6.0,61.7,-33.16,-16.42,55 +56,C,4,6,10.00R,8.0,81.35,21.06,22.4,56 +57,H,24,6,10.00BG,3.0,30.77,-22.84,-15.29,57 +58,F,10,8,5.00Y,5.0,51.57,-0.48,57.27,58 +59,C,34,4,5.00P,8.0,81.35,9.68,-11.26,59 +60,I,25,4,2.50B,2.0,20.54,-11.72,-12.03,60 +61,H,2,10,5.00R,3.0,30.77,46.08,20.6,61 +62,E,32,8,10.00PB,6.0,61.7,15.28,-29.05,62 +63,D,1,8,2.50R,7.0,71.6,32.18,12.57,63 +64,G,29,10,2.50PB,4.0,41.22,-2.09,-40.81,64 +65,F,39,14,7.50RP,5.0,51.57,59.69,1.53,65 +66,B,8,2,10.00YR,9.0,91.08,1.28,14.41,66 +67,C,18,6,5.00G,8.0,81.35,-33.8,12.41,67 +68,E,37,10,2.50RP,6.0,61.7,38.67,-11.63,68 +69,G,12,6,10.00Y,4.0,41.22,-9.31,43.05,69 +70,C,32,4,10.00PB,8.0,81.35,5.82,-13.42,70 +71,I,1,8,2.50R,2.0,20.54,36.82,3.13,71 +72,G,19,10,7.50G,4.0,41.22,-53.43,8.61,72 +73,H,34,10,5.00P,3.0,30.77,36.9,-32.14,73 +74,C,26,4,5.00B,8.0,81.35,-13.22,-11.59,74 +75,I,16,4,10.00GY,2.0,20.54,-16.46,11.28,75 +76,F,5,14,2.50YR,5.0,51.57,40.53,69.04,76 +77,F,24,8,10.00BG,5.0,51.57,-32.36,-17.71,77 +78,C,36,6,10.00P,8.0,81.35,21.03,-9.69,78 +79,H,0,0,10.00RP,3.0,30.77,-0.02,0.03,79 +80,G,28,10,10.00B,4.0,41.22,-10.54,-39.65,80 +81,E,14,10,5.00GY,6.0,61.7,-30.13,65.11,81 +82,D,22,8,5.00BG,7.0,71.6,-39.21,-4.56,82 +83,B,9,4,2.50Y,9.0,91.08,-0.46,29.79,83 +84,C,3,6,7.50R,8.0,81.35,22.67,17.48,84 +85,F,18,10,5.00G,5.0,51.57,-52.87,15.46,85 +86,D,37,10,2.50RP,7.0,71.6,38.97,-10.98,86 +87,I,13,2,2.50GY,2.0,20.54,-4.47,9.36,87 +88,G,36,12,10.00P,4.0,41.22,46.93,-24.7,88 +89,J,0,0,10.00RP,1.5,15.6,-0.02,0.02,89 +90,I,23,4,7.50BG,2.0,20.54,-15.07,-7.11,90 +91,D,13,12,2.50GY,7.0,71.6,-24.87,85.15,91 +92,B,7,2,7.50YR,9.0,91.08,3.14,12.37,92 +93,G,26,8,5.00B,4.0,41.22,-21.08,-28.21,93 +94,I,8,2,10.00YR,2.0,20.54,3.62,11.09,94 +95,B,18,2,5.00G,9.0,91.08,-13.24,5.48,95 +96,C,10,14,5.00Y,8.0,81.35,-3.69,100.18,96 +97,H,32,10,10.00PB,3.0,30.77,28.36,-39.75,97 +98,G,1,14,2.50R,4.0,41.22,61.4,17.92,98 +99,D,34,6,5.00P,7.0,71.6,16.13,-17.52,99 +100,C,22,4,5.00BG,8.0,81.35,-21.19,-1.35,100 +101,H,38,10,5.00RP,3.0,30.77,46.25,-9.51,101 +102,D,31,6,7.50PB,7.0,71.6,6.06,-22.71,102 +103,G,11,6,7.50Y,4.0,41.22,-4.87,43.26,103 +104,D,27,6,7.50B,7.0,71.6,-14.22,-19.9,104 +105,G,35,10,7.50P,4.0,41.22,36.48,-25.75,105 +106,B,12,6,10.00Y,9.0,91.08,-12.17,45.9,106 +107,B,34,2,5.00P,9.0,91.08,3.36,-4.24,107 +108,B,21,2,2.50BG,9.0,91.08,-12.69,1.23,108 +109,G,31,12,7.50PB,4.0,41.22,20.81,-48.05,109 +110,D,8,14,10.00YR,7.0,71.6,15.62,90.72,110 +111,H,14,4,5.00GY,3.0,30.77,-13.04,21.97,111 +112,F,40,14,10.00RP,5.0,51.57,59.79,10.72,112 +113,I,10,2,5.00Y,2.0,20.54,-0.11,12.03,113 +114,H,23,6,7.50BG,3.0,30.77,-25.67,-10.89,114 +115,H,1,10,2.50R,3.0,30.77,47.34,12.58,115 +116,C,27,4,7.50B,8.0,81.35,-10.44,-12.79,116 +117,I,6,4,5.00YR,2.0,20.54,13.28,18.21,117 +118,D,38,10,5.00RP,7.0,71.6,40.04,-2.7,118 +119,E,20,10,10.00G,6.0,61.7,-51.88,5.51,119 +120,B,31,2,7.50PB,9.0,91.08,1.12,-5.38,120 +121,E,4,14,10.00R,6.0,61.7,49.15,56.82,121 +122,G,17,10,2.50G,4.0,41.22,-53.57,23.28,122 +123,G,25,6,2.50B,4.0,41.22,-20.46,-17.64,123 +124,C,14,10,5.00GY,8.0,81.35,-30.49,65.57,124 +125,E,5,16,2.50YR,6.0,61.7,44.69,79.79,125 +126,D,40,8,10.00RP,7.0,71.6,32.41,7.97,126 +127,I,21,4,2.50BG,2.0,20.54,-17.18,-1.47,127 +128,C,12,12,10.00Y,8.0,81.35,-17.25,87.99,128 +129,B,1,2,2.50R,9.0,91.08,5.53,2.22,129 +130,H,12,4,10.00Y,3.0,30.77,-6.44,26.57,130 +131,H,35,10,7.50P,3.0,30.77,39.78,-27.99,131 +132,G,4,14,10.00R,4.0,41.22,51.06,58.81,132 +133,H,18,8,5.00G,3.0,30.77,-39.62,10.61,133 +134,I,5,4,2.50YR,2.0,20.54,15.99,14.49,134 +135,G,37,12,2.50RP,4.0,41.22,49.84,-17.34,135 +136,E,23,8,7.50BG,6.0,61.7,-36.77,-10.9,136 +137,H,15,6,7.50GY,3.0,30.77,-23.96,27.29,137 +138,D,28,8,10.00B,7.0,71.6,-12.05,-29.46,138 +139,C,33,4,2.50P,8.0,81.35,8.19,-12.62,139 +140,H,28,8,10.00B,3.0,30.77,-7.86,-33.8,140 +141,A,0,0,10.00RP,9.5,96.0,-0.06,0.06,141 +142,C,31,4,7.50PB,8.0,81.35,3.22,-14.27,142 +143,D,14,12,5.00GY,7.0,71.6,-34.49,79.15,143 +144,I,32,8,10.00PB,2.0,20.54,23.12,-31.33,144 +145,D,20,8,10.00G,7.0,71.6,-41.54,5.41,145 +146,D,10,12,5.00Y,7.0,71.6,-2.3,85.64,146 +147,E,21,8,2.50BG,6.0,61.7,-41.11,0.19,147 +148,G,2,14,5.00R,4.0,41.22,59.5,30.17,148 +149,C,16,8,10.00GY,8.0,81.35,-38.45,34.02,149 +150,I,34,8,5.00P,2.0,20.54,29.26,-25.01,150 +151,D,2,8,5.00R,7.0,71.6,31.7,17.23,151 +152,D,35,8,7.50P,7.0,71.6,26.62,-18.32,152 +153,E,28,10,10.00B,6.0,61.7,-13.07,-37.55,153 +154,G,0,0,10.00RP,4.0,41.22,-0.03,0.03,154 +155,H,9,4,2.50Y,3.0,30.77,3.1,25.71,155 +156,G,20,10,10.00G,4.0,41.22,-52.68,3.36,156 +157,H,7,6,7.50YR,3.0,30.77,13.89,33.8,157 +158,B,30,2,5.00PB,9.0,91.08,-0.37,-5.58,158 +159,C,7,8,7.50YR,8.0,81.35,14.98,47.04,159 +160,C,39,6,7.50RP,8.0,81.35,23.82,2.52,160 +161,D,19,8,7.50G,7.0,71.6,-41.85,9.77,161 +162,G,40,14,10.00RP,4.0,41.22,61.57,8.63,162 +163,G,23,8,7.50BG,4.0,41.22,-36.33,-13.61,163 +164,F,29,12,2.50PB,5.0,51.57,-3.41,-48.08,164 +165,G,13,6,2.50GY,4.0,41.22,-14.57,40.52,165 +166,I,27,6,7.50B,2.0,20.54,-9.22,-24.04,166 +167,D,33,6,2.50P,7.0,71.6,13.67,-19.66,167 +168,H,19,10,7.50G,3.0,30.77,-49.93,6.94,168 +169,F,27,8,7.50B,5.0,51.57,-15.72,-29.08,169 +170,I,24,4,10.00BG,2.0,20.54,-13.39,-9.92,170 +171,G,14,6,5.00GY,4.0,41.22,-19.48,36.56,171 +172,B,29,2,2.50PB,9.0,91.08,-1.49,-5.61,172 +173,E,40,12,10.00RP,6.0,61.7,49.67,10.71,173 +174,C,8,14,10.00YR,8.0,81.35,15.1,90.21,174 +175,C,25,4,2.50B,8.0,81.35,-16.44,-9.33,175 +176,E,2,12,5.00R,6.0,61.7,48.53,25.92,176 +177,B,13,6,2.50GY,9.0,91.08,-16.65,44.66,177 +178,H,29,10,2.50PB,3.0,30.77,0.29,-43.03,178 +179,I,3,8,7.50R,2.0,20.54,35.15,15.44,179 +180,E,18,10,5.00G,6.0,61.7,-52.22,16.26,180 +181,E,9,10,2.50Y,6.0,61.7,5.87,68.59,181 +182,I,40,8,10.00RP,2.0,20.54,36.42,-2.08,182 +183,G,9,6,2.50Y,4.0,41.22,4.42,40.43,183 +184,G,34,10,5.00P,4.0,41.22,33.08,-30.5,184 +185,F,7,10,7.50YR,5.0,51.57,19.79,58.75,185 +186,D,24,6,10.00BG,7.0,71.6,-25.13,-11.03,186 +187,D,7,14,7.50YR,7.0,71.6,24.12,84.39,187 +188,F,26,8,5.00B,5.0,51.57,-21.72,-26.63,188 +189,C,29,6,2.50PB,8.0,81.35,-5.05,-23.28,189 +190,C,38,6,5.00RP,8.0,81.35,23.53,-0.96,190 +191,G,22,8,5.00BG,4.0,41.22,-39.09,-8.33,191 +192,F,33,10,2.50P,5.0,51.57,27.4,-33.72,192 +193,D,12,12,10.00Y,7.0,71.6,-15.98,87.62,193 +194,I,2,8,5.00R,2.0,20.54,36.64,9.24,194 +195,F,15,10,7.50GY,5.0,51.57,-40.14,52.84,195 +196,C,21,6,2.50BG,8.0,81.35,-32.18,1.81,196 +197,E,34,8,5.00P,6.0,61.7,23.29,-23.79,197 +198,I,12,2,10.00Y,2.0,20.54,-3.09,10.75,198 +199,B,17,2,2.50G,9.0,91.08,-13.13,7.63,199 +200,D,26,6,5.00B,7.0,71.6,-18.37,-18.07,200 +201,C,2,6,5.00R,8.0,81.35,23.18,13.11,201 +202,F,17,12,2.50G,5.0,51.57,-63.28,28.95,202 +203,F,37,12,2.50RP,5.0,51.57,48.98,-15.95,203 +204,I,7,4,7.50YR,2.0,20.54,10.16,21.44,204 +205,G,32,10,10.00PB,4.0,41.22,24.29,-38.02,205 +206,B,15,2,7.50GY,9.0,91.08,-10.76,13.38,206 +207,F,38,12,5.00RP,5.0,51.57,51.2,-5.84,207 +208,F,8,10,10.00YR,5.0,51.57,13.12,63.99,208 +209,H,22,6,5.00BG,3.0,30.77,-27.32,-6.72,209 +210,I,4,6,10.00R,2.0,20.54,25.15,16.6,210 +211,E,26,8,5.00B,6.0,61.7,-22.98,-25.73,211 +212,D,6,14,5.00YR,7.0,71.6,32.89,77.02,212 +213,D,32,6,10.00PB,7.0,71.6,10.25,-21.6,213 +214,C,13,12,2.50GY,8.0,81.35,-26.04,85.63,214 +215,D,36,8,10.00P,7.0,71.6,29.26,-13.95,215 +216,H,13,4,2.50GY,3.0,30.77,-10.05,24.97,216 +217,C,1,6,2.50R,8.0,81.35,23.67,9.47,217 +218,E,12,10,10.00Y,6.0,61.7,-14.02,73.17,218 +219,B,20,2,10.00G,9.0,91.08,-12.96,2.42,219 +220,F,31,10,7.50PB,5.0,51.57,14.19,-39.14,220 +221,B,23,2,7.50BG,9.0,91.08,-10.86,-2.13,221 +222,G,33,10,2.50P,4.0,41.22,29.49,-34.06,222 +223,F,20,10,10.00G,5.0,51.57,-51.99,4.46,223 +224,B,37,2,2.50RP,9.0,91.08,5.04,-1.14,224 +225,F,11,8,7.50Y,5.0,51.57,-6.4,58.71,225 +226,H,25,6,2.50B,3.0,30.77,-19.73,-18.89,226 +227,I,14,2,5.00GY,2.0,20.54,-5.36,7.98,227 +228,I,28,6,10.00B,2.0,20.54,-5.25,-25.49,228 +229,C,19,6,7.50G,8.0,81.35,-33.63,8.67,229 +230,B,2,2,5.00R,9.0,91.08,5.51,3.28,230 +231,F,35,10,7.50P,5.0,51.57,35.21,-24.66,231 +232,G,10,6,5.00Y,4.0,41.22,-0.21,42.37,232 +233,E,31,8,7.50PB,6.0,61.7,9.58,-30.64,233 +234,G,18,10,5.00G,4.0,41.22,-54.08,14.27,234 +235,G,30,12,5.00PB,4.0,41.22,7.17,-48.94,235 +236,E,13,10,2.50GY,6.0,61.7,-21.81,70.54,236 +237,C,5,6,2.50YR,8.0,81.35,18.52,26.72,237 +238,F,23,8,7.50BG,5.0,51.57,-36.19,-11.99,238 +239,D,39,8,7.50RP,7.0,71.6,32.47,2.76,239 +240,H,5,8,2.50YR,3.0,30.77,28.16,36.05,240 +241,B,35,2,7.50P,9.0,91.08,4.31,-2.82,241 +242,B,11,6,7.50Y,9.0,91.08,-9.03,45.94,242 +243,I,39,8,7.50RP,2.0,20.54,35.97,-6.33,243 +244,B,26,2,5.00B,9.0,91.08,-6.32,-5.08,244 +245,G,3,14,7.50R,4.0,41.22,56.6,40.99,245 +246,E,22,8,5.00BG,6.0,61.7,-39.17,-5.88,246 +247,F,32,10,10.00PB,5.0,51.57,22.05,-37.02,247 +248,I,15,4,7.50GY,2.0,20.54,-14.85,15.25,248 +249,H,21,6,2.50BG,3.0,30.77,-29.07,-1.92,249 +250,I,33,8,2.50P,2.0,20.54,26.82,-27.84,250 +251,C,17,8,2.50G,8.0,81.35,-42.41,23.78,251 +252,B,39,2,7.50RP,9.0,91.08,5.41,0.74,252 +253,D,21,8,2.50BG,7.0,71.6,-40.91,1.15,253 +254,D,30,8,5.00PB,7.0,71.6,0.85,-31.32,254 +255,I,9,2,2.50Y,2.0,20.54,1.58,11.89,255 +256,E,1,12,2.50R,6.0,61.7,49.42,18.23,256 +257,H,27,6,7.50B,3.0,30.77,-10.88,-24.2,257 +258,D,11,12,7.50Y,7.0,71.6,-9.51,87.14,258 +259,H,4,10,10.00R,3.0,30.77,40.89,36.03,259 +260,B,14,4,5.00GY,9.0,91.08,-14.67,29.61,260 +261,E,6,12,5.00YR,6.0,61.7,29.38,64.4,261 +262,B,33,2,2.50P,9.0,91.08,2.95,-4.85,262 +263,E,0,0,10.00RP,6.0,61.7,-0.04,0.04,263 +264,C,28,4,10.00B,8.0,81.35,-6.82,-13.92,264 +265,H,17,8,2.50G,3.0,30.77,-39.23,16.6,265 +266,G,5,10,2.50YR,4.0,41.22,32.37,46.62,266 +267,I,38,8,5.00RP,2.0,20.54,35.44,-10.4,267 +268,D,17,10,2.50G,7.0,71.6,-51.55,27.69,268 +269,F,36,12,10.00P,5.0,51.57,46.17,-23.4,269 +270,E,7,12,7.50YR,6.0,61.7,22.09,71.31,270 +271,I,19,6,7.50G,2.0,20.54,-27.43,4.26,271 +272,B,28,2,10.00B,9.0,91.08,-3.48,-5.55,272 +273,E,35,10,7.50P,6.0,61.7,34.47,-24.03,273 +274,B,0,0,10.00RP,9.0,91.08,-0.05,0.06,274 +275,E,11,10,7.50Y,6.0,61.7,-7.92,73.21,275 +276,G,38,12,5.00RP,4.0,41.22,51.84,-8.08,276 +277,H,26,6,5.00B,3.0,30.77,-15.41,-22.0,277 +278,D,4,10,10.00R,7.0,71.6,34.96,37.54,278 +279,H,31,12,7.50PB,3.0,30.77,25.75,-49.63,279 +280,F,14,8,5.00GY,5.0,51.57,-25.02,50.55,280 +281,G,21,8,2.50BG,4.0,41.22,-41.21,-2.07,281 +282,E,16,12,10.00GY,6.0,61.7,-55.94,49.19,282 +283,H,6,6,5.00YR,3.0,30.77,18.18,30.27,283 +284,B,24,2,10.00BG,9.0,91.08,-9.69,-3.22,284 +285,C,37,6,2.50RP,8.0,81.35,22.62,-5.51,285 +286,B,32,2,10.00PB,9.0,91.08,2.19,-4.93,286 +287,F,9,8,2.50Y,5.0,51.57,5.33,54.9,287 +288,F,3,14,7.50R,5.0,51.57,55.76,42.05,288 +289,D,23,6,7.50BG,7.0,71.6,-27.52,-7.11,289 +290,B,6,2,5.00YR,9.0,91.08,4.3,10.08,290 +291,F,30,12,5.00PB,5.0,51.57,5.02,-48.35,291 +292,C,40,6,10.00RP,8.0,81.35,23.74,6.18,292 +293,B,19,2,7.50G,9.0,91.08,-13.22,3.82,293 +294,B,27,2,7.50B,9.0,91.08,-4.65,-5.34,294 +295,G,8,6,10.00YR,4.0,41.22,9.31,37.8,295 +296,H,33,10,2.50P,3.0,30.77,33.51,-35.69,296 +297,C,9,16,2.50Y,8.0,81.35,7.28,109.12,297 +298,F,2,14,5.00R,5.0,51.57,58.01,30.52,298 +299,F,19,10,7.50G,5.0,51.57,-52.69,9.7,299 +300,D,0,0,10.00RP,7.0,71.6,-0.04,0.05,300 +301,F,21,10,2.50BG,5.0,51.57,-51.2,-1.36,301 +302,B,3,2,7.50R,9.0,91.08,5.54,4.46,302 +303,C,30,6,5.00PB,8.0,81.35,-0.24,-24.03,303 +304,F,13,8,2.50GY,5.0,51.57,-18.37,55.88,304 +305,I,37,8,2.50RP,2.0,20.54,34.44,-14.69,305 +306,C,15,10,7.50GY,8.0,81.35,-40.58,54.46,306 +307,F,25,8,2.50B,5.0,51.57,-27.95,-22.24,307 +308,E,33,8,2.50P,6.0,61.7,20.07,-26.92,308 +309,H,11,4,7.50Y,3.0,30.77,-3.32,26.87,309 +310,E,19,10,7.50G,6.0,61.7,-52.09,10.63,310 +311,G,27,8,7.50B,4.0,41.22,-14.67,-30.69,311 +312,I,0,0,10.00RP,2.0,20.54,-0.02,0.02,312 +313,I,31,10,7.50PB,2.0,20.54,23.81,-41.87,313 +314,B,38,2,5.00RP,9.0,91.08,5.27,-0.1,314 +315,D,16,10,10.00GY,7.0,71.6,-46.7,41.31,315 +316,F,22,8,5.00BG,5.0,51.57,-38.59,-7.0,316 +317,H,37,10,2.50RP,3.0,30.77,44.87,-16.65,317 +318,D,5,10,2.50YR,7.0,71.6,30.67,44.56,318 +319,B,36,2,10.00P,9.0,91.08,4.7,-2.0,319 +320,F,12,8,10.00Y,5.0,51.57,-11.71,58.46,320 +321,F,1,14,2.50R,5.0,51.57,59.36,19.67,321 +322,D,29,8,2.50PB,7.0,71.6,-5.09,-30.75,322 +323,H,20,8,10.00G,3.0,30.77,-39.18,2.14,323 +324,B,4,2,10.00R,9.0,91.08,5.43,5.64,324 +325,H,36,10,10.00P,3.0,30.77,42.44,-23.6,325 +326,D,9,12,2.50Y,7.0,71.6,6.22,81.95,326 +327,B,25,2,2.50B,9.0,91.08,-7.96,-4.41,327 +328,H,16,6,10.00GY,3.0,30.77,-27.26,20.69,328 +329,G,7,8,7.50YR,4.0,41.22,17.04,45.95,329 +330,B,22,2,5.00BG,9.0,91.08,-11.94,-0.27,330 diff --git a/src/examples/colors/outputs/complexity-commcost.png b/src/examples/colors/outputs/complexity-commcost.png deleted file mode 100644 index 7cbc6a13..00000000 Binary files a/src/examples/colors/outputs/complexity-commcost.png and /dev/null differ diff --git a/src/examples/colors/outputs/complexity-informativity.png b/src/examples/colors/outputs/complexity-informativity.png deleted file mode 100644 index acb23e75..00000000 Binary files a/src/examples/colors/outputs/complexity-informativity.png and /dev/null differ diff --git a/src/examples/colors/outputs/informativity-commcost.png b/src/examples/colors/outputs/informativity-commcost.png deleted file mode 100644 index a2c25636..00000000 Binary files a/src/examples/colors/outputs/informativity-commcost.png and /dev/null differ diff --git a/src/examples/colors/outputs/noga_meaning_dists.jpg b/src/examples/colors/outputs/noga_meaning_dists.jpg deleted file mode 100644 index 1696f741..00000000 Binary files a/src/examples/colors/outputs/noga_meaning_dists.jpg and /dev/null differ diff --git a/src/examples/colors/outputs/old_meaning_dists.jpg b/src/examples/colors/outputs/old_meaning_dists.jpg deleted file mode 100644 index eea43cc9..00000000 Binary files a/src/examples/colors/outputs/old_meaning_dists.jpg and /dev/null differ diff --git a/src/examples/colors/outputs/plot.png b/src/examples/colors/outputs/plot.png deleted file mode 100644 index f74ee1ae..00000000 Binary files a/src/examples/colors/outputs/plot.png and /dev/null differ diff --git a/src/examples/colors/plot.png b/src/examples/colors/plot.png deleted file mode 100644 index 7666b9fe..00000000 Binary files a/src/examples/colors/plot.png and /dev/null differ diff --git a/src/examples/colors/prior.npy b/src/examples/colors/prior.npy deleted file mode 100644 index f8420851..00000000 Binary files a/src/examples/colors/prior.npy and /dev/null differ diff --git a/src/examples/colors/scripts/__init__.py b/src/examples/colors/scripts/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/examples/colors/scripts/compute_bound.py b/src/examples/colors/scripts/compute_bound.py new file mode 100644 index 00000000..a490eb31 --- /dev/null +++ b/src/examples/colors/scripts/compute_bound.py @@ -0,0 +1,30 @@ +import numpy as np +import pickle + +from ultk.effcomm import ib +from ultk.language.semantics import Universe +from examples.colors.meaning import meaning_distributions, cielab_points + +if __name__ == "__main__": + # shape: `(330, 330)` + pU_M = meaning_distributions + + # pM = np.full(pU_M.shape[0], 1/pU_M.shape[0]) + pM = np.load("src/examples/colors/data/zkrt18_prior.npy").squeeze() + + model = ib.get_ib_naming_model( + pU_M, + pM, + # add custom beta values here + betas=np.logspace( + 0, + 5, + 1600, + ), + ) + + # write model + fn = "src/examples/colors/outputs/naming_model.pkl" + with open(fn, "wb") as f: + pickle.dump(model, f, protocol=pickle.HIGHEST_PROTOCOL) + print(f"Wrote a pickle binary to {fn}.") diff --git a/src/examples/colors/scripts/read_color_universe.py b/src/examples/colors/scripts/read_color_universe.py new file mode 100644 index 00000000..638aefa9 --- /dev/null +++ b/src/examples/colors/scripts/read_color_universe.py @@ -0,0 +1,11 @@ +import pandas as pd + + +if __name__ == "__main__": + referents = pd.read_csv("colors/data/cnum-vhcm-lab-new.txt", delimiter="\t") + referents.sort_values(by="#cnum", inplace=True) + # add a name column, as required by ULTK + referents["name"] = referents["#cnum"] + # rename columns for access as python properties + referents.rename(columns={"L*": "L", "a*": "a", "b*": "b"}, inplace=True) + referents.to_csv("colors/outputs/color_universe.csv", index=False) diff --git a/src/examples/colors/validate_bound.ipynb b/src/examples/colors/validate_bound.ipynb deleted file mode 100644 index 6b592dab..00000000 --- a/src/examples/colors/validate_bound.ipynb +++ /dev/null @@ -1,359 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "import pandas as pd\n", - "import plotnine as pn\n", - "from ultk.effcomm.rate_distortion import get_ib_bound" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "((330, 1), (330, 330))" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "zkrt18_prior = np.load(\"/Users/nathanielimel/uci/projects/ib-color-naming/zkrt18_prior.npy\")\n", - "zkrt18_meaning_dists = np.load(\"/Users/nathanielimel/uci/projects/ib-color-naming/zkrt18_meaning_dists.npy\")\n", - "\n", - "zkrt18_prior.shape, zkrt18_meaning_dists.shape" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "annealing beta: 0%| | 0/30 [00:00" - ] - }, - "metadata": { - "image/png": { - "height": 480, - "width": 640 - } - }, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "
" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "bound = get_ib_bound(\n", - " prior=zkrt18_prior.squeeze(), \n", - " meaning_dists=zkrt18_meaning_dists,\n", - ")\n", - "plot_data = pd.DataFrame(\n", - " [(x.rate, x.accuracy) for x in bound if x is not None], \n", - " columns=[\n", - " \"rate\", \n", - " \"accuracy\",\n", - " ]\n", - ")\n", - "(\n", - " pn.ggplot(\n", - " plot_data,\n", - " pn.aes(x=\"rate\", y=\"accuracy\"),\n", - " ) \n", - " + pn.geom_point() \n", - " + pn.geom_line()\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Check with embo" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "ename": "KeyboardInterrupt", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[4], line 6\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mrdot\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mprobability\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m joint\n\u001b[1;32m 5\u001b[0m pxy \u001b[38;5;241m=\u001b[39m joint(zkrt18_meaning_dists, zkrt18_prior)\n\u001b[0;32m----> 6\u001b[0m results \u001b[38;5;241m=\u001b[39m \u001b[43mInformationBottleneck\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpxy\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpxy\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_bottleneck\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 8\u001b[0m plot_data_embo \u001b[38;5;241m=\u001b[39m pd\u001b[38;5;241m.\u001b[39mDataFrame(\u001b[38;5;28mzip\u001b[39m(\u001b[38;5;241m*\u001b[39mresults[\u001b[38;5;241m0\u001b[39m:\u001b[38;5;241m2\u001b[39m]), columns\u001b[38;5;241m=\u001b[39m[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrate\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124maccuracy\u001b[39m\u001b[38;5;124m\"\u001b[39m])\n\u001b[1;32m 9\u001b[0m (\n\u001b[1;32m 10\u001b[0m pn\u001b[38;5;241m.\u001b[39mggplot(\n\u001b[1;32m 11\u001b[0m plot_data_embo,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[38;5;241m+\u001b[39m pn\u001b[38;5;241m.\u001b[39mgeom_line()\n\u001b[1;32m 16\u001b[0m )\n", - "File \u001b[0;32m~/miniforge3/envs/ultk/lib/python3.11/site-packages/embo/core.py:95\u001b[0m, in \u001b[0;36mInformationBottleneck.get_bottleneck\u001b[0;34m(self, return_entropies)\u001b[0m\n\u001b[1;32m 83\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Return array of I(M:X) and I(M:Y) for array of different values of beta\u001b[39;00m\n\u001b[1;32m 84\u001b[0m \n\u001b[1;32m 85\u001b[0m \u001b[38;5;124;03m Returns:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 92\u001b[0m \u001b[38;5;124;03m hy -- entropy of Y (only returned if return_entropies is True)\u001b[39;00m\n\u001b[1;32m 93\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 94\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mresults_ready:\n\u001b[0;32m---> 95\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcompute_IB_curve\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 97\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m return_entropies:\n\u001b[1;32m 98\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mi_x, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mi_y, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mh_m, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbeta, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmixy, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhx, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhy\n", - "File \u001b[0;32m~/miniforge3/envs/ultk/lib/python3.11/site-packages/embo/core.py:76\u001b[0m, in \u001b[0;36mInformationBottleneck.compute_IB_curve\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 73\u001b[0m pyx_c \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpxy_j\u001b[38;5;241m.\u001b[39mT \u001b[38;5;241m/\u001b[39m px\n\u001b[1;32m 75\u001b[0m \u001b[38;5;66;03m# Calculate the information bottleneck for a range of values of beta\u001b[39;00m\n\u001b[0;32m---> 76\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mi_x, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mi_y, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mh_m, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbeta, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmixy, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhx \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mIB\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpy\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpyx_c\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43malpha\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mkwargs_IB\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 77\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhy \u001b[38;5;241m=\u001b[39m entropy(py)\n\u001b[1;32m 79\u001b[0m \u001b[38;5;66;03m# set a flag we will use to call this function automatically when needed\u001b[39;00m\n", - "File \u001b[0;32m~/miniforge3/envs/ultk/lib/python3.11/site-packages/embo/core.py:245\u001b[0m, in \u001b[0;36mInformationBottleneck.IB\u001b[0;34m(cls, px, py, pyx_c, alpha, minsize, maxbeta, minbeta, numbeta, iterations, restarts, processes, ensure_monotonic_bound, rtol)\u001b[0m\n\u001b[1;32m 243\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m mp\u001b[38;5;241m.\u001b[39mPool(processes\u001b[38;5;241m=\u001b[39mprocesses) \u001b[38;5;28;01mas\u001b[39;00m pool:\n\u001b[1;32m 244\u001b[0m results \u001b[38;5;241m=\u001b[39m [pool\u001b[38;5;241m.\u001b[39mapply_async(\u001b[38;5;28mcls\u001b[39m\u001b[38;5;241m.\u001b[39mbeta_iter, args\u001b[38;5;241m=\u001b[39m(alpha, b, px, py, pyx_c, pm_size, restarts, iterations,rtol)) \u001b[38;5;28;01mfor\u001b[39;00m b \u001b[38;5;129;01min\u001b[39;00m bs]\n\u001b[0;32m--> 245\u001b[0m results \u001b[38;5;241m=\u001b[39m \u001b[43m[\u001b[49m\u001b[43mp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mp\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mresults\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 246\u001b[0m ips \u001b[38;5;241m=\u001b[39m [x[\u001b[38;5;241m0\u001b[39m] \u001b[38;5;28;01mfor\u001b[39;00m x \u001b[38;5;129;01min\u001b[39;00m results]\n\u001b[1;32m 247\u001b[0m ifs \u001b[38;5;241m=\u001b[39m [x[\u001b[38;5;241m1\u001b[39m] \u001b[38;5;28;01mfor\u001b[39;00m x \u001b[38;5;129;01min\u001b[39;00m results]\n", - "File \u001b[0;32m~/miniforge3/envs/ultk/lib/python3.11/site-packages/embo/core.py:245\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 243\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m mp\u001b[38;5;241m.\u001b[39mPool(processes\u001b[38;5;241m=\u001b[39mprocesses) \u001b[38;5;28;01mas\u001b[39;00m pool:\n\u001b[1;32m 244\u001b[0m results \u001b[38;5;241m=\u001b[39m [pool\u001b[38;5;241m.\u001b[39mapply_async(\u001b[38;5;28mcls\u001b[39m\u001b[38;5;241m.\u001b[39mbeta_iter, args\u001b[38;5;241m=\u001b[39m(alpha, b, px, py, pyx_c, pm_size, restarts, iterations,rtol)) \u001b[38;5;28;01mfor\u001b[39;00m b \u001b[38;5;129;01min\u001b[39;00m bs]\n\u001b[0;32m--> 245\u001b[0m results \u001b[38;5;241m=\u001b[39m [\u001b[43mp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m p \u001b[38;5;129;01min\u001b[39;00m results]\n\u001b[1;32m 246\u001b[0m ips \u001b[38;5;241m=\u001b[39m [x[\u001b[38;5;241m0\u001b[39m] \u001b[38;5;28;01mfor\u001b[39;00m x \u001b[38;5;129;01min\u001b[39;00m results]\n\u001b[1;32m 247\u001b[0m ifs \u001b[38;5;241m=\u001b[39m [x[\u001b[38;5;241m1\u001b[39m] \u001b[38;5;28;01mfor\u001b[39;00m x \u001b[38;5;129;01min\u001b[39;00m results]\n", - "File \u001b[0;32m~/miniforge3/envs/ultk/lib/python3.11/multiprocessing/pool.py:768\u001b[0m, in \u001b[0;36mApplyResult.get\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 767\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mget\u001b[39m(\u001b[38;5;28mself\u001b[39m, timeout\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[0;32m--> 768\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwait\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 769\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mready():\n\u001b[1;32m 770\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTimeoutError\u001b[39;00m\n", - "File \u001b[0;32m~/miniforge3/envs/ultk/lib/python3.11/multiprocessing/pool.py:765\u001b[0m, in \u001b[0;36mApplyResult.wait\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 764\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwait\u001b[39m(\u001b[38;5;28mself\u001b[39m, timeout\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[0;32m--> 765\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_event\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwait\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/miniforge3/envs/ultk/lib/python3.11/threading.py:629\u001b[0m, in \u001b[0;36mEvent.wait\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 627\u001b[0m signaled \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_flag\n\u001b[1;32m 628\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m signaled:\n\u001b[0;32m--> 629\u001b[0m signaled \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_cond\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwait\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 630\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m signaled\n", - "File \u001b[0;32m~/miniforge3/envs/ultk/lib/python3.11/threading.py:327\u001b[0m, in \u001b[0;36mCondition.wait\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 325\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m: \u001b[38;5;66;03m# restore state no matter what (e.g., KeyboardInterrupt)\u001b[39;00m\n\u001b[1;32m 326\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m timeout \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 327\u001b[0m \u001b[43mwaiter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43macquire\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 328\u001b[0m gotit \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 329\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " - ] - } - ], - "source": [ - "import embo\n", - "from embo import InformationBottleneck\n", - "from rdot.probability import joint\n", - "\n", - "pxy = joint(zkrt18_meaning_dists, zkrt18_prior)\n", - "results = InformationBottleneck(pxy=pxy).get_bottleneck()\n", - "\n", - "plot_data_embo = pd.DataFrame(zip(*results[0:2]), columns=[\"rate\", \"accuracy\"])\n", - "(\n", - " pn.ggplot(\n", - " plot_data_embo,\n", - " pn.aes(x=\"rate\", y=\"accuracy\"),\n", - " ) \n", - " + pn.geom_point() \n", - " + pn.geom_line()\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "((330,), (330, 330))" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "mickey_prior = np.load(\"prior.npy\")\n", - "mickey_meaning_dists = np.load(\"meaning_dists.npy\")\n", - "\n", - "mickey_prior.shape, mickey_meaning_dists.shape" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "annealing beta: 0%| | 0/30 [00:00" - ] - }, - "metadata": { - "image/png": { - "height": 480, - "width": 640 - } - }, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "
" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "bound = get_ib_bound(\n", - " prior=mickey_prior,\n", - " meaning_dists=mickey_meaning_dists,\n", - ")\n", - "plot_data = pd.DataFrame(\n", - " [(x.rate, x.accuracy) for x in bound if x is not None], \n", - " columns=[\n", - " \"rate\", \n", - " \"accuracy\",\n", - " ]\n", - ")\n", - "(\n", - " pn.ggplot(\n", - " plot_data,\n", - " pn.aes(x=\"rate\", y=\"accuracy\"),\n", - " ) \n", - " + pn.geom_point() \n", - " + pn.geom_line()\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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hw669957CyktAAAAABR9y5cvV1RUlE6cOCFJuvvuu5WUlKS6deuanAwAHK/YFIDbtm3Ta6+9pszMTFksFpUvX14XLlzQ4cOHdfjwYaWkpGjs2LGqWbNmoebatWuX9u3bJ29v7wLP27Fjh0aPHq1z587J09NTt9xyi06fPq3vv/9ea9euVf/+/dW+fftCSg0AAAAARdP58+f12muvKSkpyf7Y888/rzFjxsjf39/EZADgPMWiAMzOztbEiROVmZmp+vXrKzIyUpUqVZIk7d69W2+++aYOHjyoCRMmaNasWfLycv5/lpycHG3atOkvf+hczblz5zR+/HidO3dODRs2VFRUlAICApSTk6N58+bp448/1nvvvaeaNWsyCQgAAAAAV7Fz505ZrVZt3bpVkhQQEKA333xTbdu2NTkZADhXsbgJyA8//KCTJ0+qdOnSGjFihL38k6RatWpp+PDh8vDwUGpqqtauXevULPv27VNkZKR69OihsWPHKjU19R+fs2DBAmVkZCggIEBxcXEKCAiQJHl7e6tr16566KGHlJ+fry+++MKp2QEAAACgKDIMQx999JFatGhhL/+aNGkim81G+QegWCgWE4CXFviHHnpIJUuWvOz4HXfcocqVK+vw4cPavn27Hn/8cfux3bt3a+7cudq6datOnz6tcuXKqV69emrfvr1q1ap13VnOnz+vjIwMlSpVSpKUm5urs2fPFvicNWvWSJKCgoKuOJLevHlz/fTTT9q0aZPOnj1rf20AAAAAKO5OnjypwYMHa+HChZIkT09PDR8+XJGRkfL09DQ5HQAUjmJRAJ48eVKSdOutt171HA+Pi8OQOTk59se++eYbvfvuuzIMQ15eXipfvrwyMjKUnJyslJQUPfvss+revft1ZalTp44+/vhj+7//+uuvevnll696/tmzZ7V//35JUr169a54zj333CPp4u3rd+3apQceeOC6MgEAAACAO1qzZo3Cw8N15MgRSVL16tWVkJCghg0bmpwMAApXsSgAhw0bpry8vKveaOPAgQM6fPiwJKlatWqSpHXr1umdd96Rj4+P+vTpo9atW8vLy0s5OTlKTk5WQkKCZs+erWrVqqlx48ZOy37o0CHl5+dLkqpWrXrFcypUqCAvLy/l5uZe05ZiAAAAAHBnOTk5mjhxoqZNmybDMCRJ3bp104QJE1S6dGmT0wFA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5copISFBWVlZmj17tvr06aOff/7ZzEgAAABwcTt37pTVatXWrVslSQEBAXrrrbfUpk0bk5MBAAC4Jg+zA0jS8OHDJV28a9v3339vchoAAAC4IsMw9NFHH6lFixb28u/xxx9XSkoK5R8AAEABXKIArF27tjw8LkbZsGGDyWkAAADgak6ePKm+fftq6NChOnfunLy8vDRy5EjNmTNHlStXNjseAACASzN1C/AlmZmZys/Pl8Vi0blz58yOAwAAABfy3XffKSIiQkeOHJEkVa9eXYmJiXrwwQdNTgYAAFA0uMQE4Lvvvmv/9W233WZiEgAAALiKnJwcjR8/Xp07d7aXf927d9eqVaso/wAAAK6DQycAf/vtt2s+Nzc3V0eOHNHcuXPtd2+zWCwKDAx0ZCQAAAAUQfv371dYWJj98jClSpXS5MmT1aVLF5OTAQAAFD0OLQDvueceWSyW636eYRiSpF69eqlatWqOjAQAAIAi5quvvtKwYcN09uxZSVLDhg2VkJCg6tWrmxsMAACgiHL4NQAvlXnXq2fPnoqPj3dwGgAAALiKvLw8rVu3TsePH5e/v78aNWqksmXL2o+fOXNGL774or766itJF3eHxMbGaujQofL29jYrNgAAQJHn0AKwT58+13yuh4eHypcvrzvuuENt27ZVzZo1HRkFAAAALiI3N1eJiYl69913dejQIfvjfn5+6ty5s4YPH65Dhw4pLCxMv//+uySpSpUqmjVrlpo0aWJWbAAAALfh0ALwgw8+cOTLAQAAoIjLyclR//79tXjx4suOnTt3Tp9++qnmz5+vrKws5eXlSZLatm2rN998UwEBAYUdFwAAwC05fAswAAAAcMnEiROvWP792ZkzZyRdnAgcP368evXqdUPXlQYAAMCVOa0AXLt2rebOnavt27dr/vz5lx1//vnnVaVKFXXp0kUNGzZ0VgwAAACYJDMzU++99941nz9mzBj17t3biYkAAACKJw9Hv2B6erpat26tJk2aaPLkyVqxYsUVz0tJSdGECRP08MMPq1WrVjp48KCjowAAAMBES5YssU/3XYtvv/3WiWkAAACKL4cWgPn5+WrdurWWLVsmwzBkGIZuueWWK55brlw5+zkrVqzQE088oaNHjzoyDgAAAEx04MCB6zqfL4QBAACcw6EF4CeffKJ169ZJkurWrauVK1de9YPfzz//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M+vreOONNzRt2jR5e3s79WtzFPw3xOM4+/wB2+PnA4/D/IF/ws8HHof5A0+DABAAnNCFCxcUEBCgXbt2SZJy5MihCRMmqFOnTtzoAwAAAADwEAJAAHAyq1at0sCBAxUVFSVJKleunObPn69SpUrZuTIAAAAAgCNyjQ3fACALuHPnjvr27auePXtaw7/AwECtW7eO8A8AAAAA8Fh0AAKAEzh48KD8/Px0+vRpSVLBggU1e/Zs1atXz86VAQAAAAAcHR2AAODAzGazgoOD1axZM2v416hRI4WHhxP+AQAAAADShA5AAHBQV65cUe/evbV161ZJUrZs2TR27Fh1796dG30AAAAAANKMABAAHNDatWvVr18/RURESJLKlCmjefPmqWzZsnauDAAAAADgbFgCDAAOJDY2VkOGDFGXLl2s4V+PHj20fv16wj8AAAAAQLrQAQgADuLIkSPy9/fX8ePHJUn58+fXzJkz1bhxYztXBgAAAABwZnQAAoCdWSwWhYSEqHHjxtbwr27dugoLCyP8AwAAAAA8NToAAcCOrl27pg8//FCbN2+WJLm7u2vUqFHy9/eX0chnNAAAAACAp0cACAB2snnzZgUFBen69euSJF9fX4WEhKhChQp2rgwAAAAA4EpoLwGATHb37l2NHDlS77zzjjX869y5szZt2kT4BwAAAADIcHQAAkAmOn78uPz9/XXkyBFJUt68eTVt2jS1bNnSzpUBAAAAAFwVHYAAkAksFou++eYbNWzY0Br+1apVS2FhYYR/AAAAAACbogMQAGzs5s2b6t+/v9auXStJMplMGjZsmIKCgmQymexcHQAAAADA1REAAoANbd26Vb1799aVK1ckSSVKlNC8efNUuXJlO1cGAAAAAMgqWAIMADYQHx+vcePGqW3bttbwr3379goNDSX8AwAAAABkKjoAASCDnTp1Sv7+/jp48KAkKVeuXJo6dareeustO1cGAAAAAMiK6AAEgAxisVj0/fffq379+tbwr2rVqgoLCyP8AwAAAADYDR2AAJABIiMjNWjQIK1atUqSZDQaNXDgQA0YMEBubky1AAAAAAD74a9SAHhKO3fuVEBAgC5evChJKlasmObMmaMaNWrYuTIAAAAAAFgCDADplpiYqMmTJ6t169bW8K9169YKDQ0l/AMAAAAAOAw6AAEgHc6dO6eAgADt2bNHkuTp6akpU6aoQ4cOMhgMdq4OAAAAAID/QwAIAE9o+fLlGjRokO7cuSNJqlixokJCQlSyZEk7VwYAAAAAwKMIAAEgjaKjozV06FAtW7ZMkmQwGBQUFKShQ4fKw8PDztUBAAAAAJAyAkAASIO9e/eqV69eOnfunCSpSJEimjNnjl577TU7VwYAAAAAQOq4CQgApCIpKUnTpk1TixYtrOHfG2+8obCwMMI/AAAAAIBToAMQAB7j4sWLCggI0M6dOyVJOXLk0Pjx49W5c2du9AEAAAAAcBoEgACQgp9//lkDBgxQVFSUJKlcuXIKCQnRCy+8YOfKAAAAAAB4MiwBBoAHxMTEqF+/furRo4c1/AsICNC6desI/wAAAAAATokOQAD4/w4ePCh/f3+dOnVKklSwYEHNmjVL9evXt3NlAAAAAACkHx2AALI8s9ms2bNnq1mzZtbwr2HDhgoPDyf8AwAAAAA4PToAAWRpV65cUZ8+fRQeHi5JypYtm8aMGaOePXtyow8AAAAAgEsgAASQZa1du1ZBQUGKiIiQJJUuXVohISEqW7asnSsDAAAAACDjsAQYgMuxWCw6fvy4tm/frj/++EOJiYkPHY+Li1Pv3r313nvvWcO/7t27a8OGDYR/AAAAAACXQwcgAJeRlJSk7777Tv/+9791/Phx6/eLFCmirl27qlevXjp79qz8/f2tx/Pnz68ZM2aoSZMm9iobAAAAAACbIgAE4BISEhLk5+en1atXP3Ls8uXLmjx5shYuXKgbN24oPj5eklS3bl0FBwfLx8cns8sFAAAAACDTEAACcAkTJ05MMfx70KVLlyRJ7u7umjRpkt5//31ZLJbMKA8AAAAAALthD0AATu/27dv6+uuv0zx+9uzZGjhwoIxGpkAAAAAAgOvjr18ATm/lypWKjY1N8/g9e/bYsBoAAAAAABwLASAAp3f69OknGn/q1CkbVQIAAAAAgOMhAATg9J50Ka/JZLJRJQAAAAAAOB4CQABOr0KFCjYdDwAAAACAMyMABOD08uTJk+YuQKPRqK5du9q4IgAAAAAAHAcBIACnlZCQoPHjx6tDhw4ym81peky3bt30r3/9y8aVAQAAAADgOAgAATilM2fOqEWLFpoxY4YsFoty5sypli1bpvqYdu3aafz48ZlUIQAAAAAAjoEAEIBTsVgsWrp0qerVq6fff/9dklS5cmWFhobq66+/1saNG9WhQwd5enpKktzc3NSoUSP98MMPmj17ttzc3OxZPgAAAAAAmY6/hAE4jdu3b2vIkCFavny5JMlgMKh///4aNGiQ3N3dJUkVK1bUrFmzFBwcrLi4OGXPnv2J7xIMAAAAAIArIQAE4BT27NmjXr166e+//5YkPfPMM5ozZ45q1aqV4niDwWDtAgQAAAAAICujLQaAQ0tKStLnn3+uli1bWsO/Fi1aKCws7LHhHwAAAAAA+D90AAJwWBcuXFBAQIB27dolSfL09NT48ePVqVMnGQwGO1cHAAAAAIBzIAAE4JBWrVqlgQMHKioqSpJUvnx5hYSEqFSpUnauDAAAAAAA58ISYAAO5c6dO+rbt6969uxpDf8CAwO1du1awj8AAAAAANKBDkAADuPgwYPy9/fXqVOnJEkFCxbU7NmzVa9ePTtXBgAAAACA86IDEIDdmc1mzZ49W82aNbOGf40aNVJ4eDjhHwAAAAAAT4kOQAB2deXKFfXp00fh4eGSpGzZsunjjz9Wjx49uNEHAAAAAAAZgAAQgN2sX79effv21c2bNyVJpUuXVkhIiMqWLWvnygAAAAAAcB0sAQaQ6eLi4jR06FB16tTJGv51795dGzZsIPwDAAAAACCD0QEIIFMdO3ZM/v7+OnbsmCTJ29tbM2bMUNOmTe1cGQAAAAAArokOQACZwmKx6KuvvlKjRo2s4d/rr7+u8PBwwj8AAAAAAGyIDkAANnfjxg317dtXGzZskCS5ubnpo48+UmBgoIxGPocAAAAAAMCWCAAB2FRYWJh69+6ta9euSZKee+45zZ8/XxUrVrRvYQAAAAAAZBG03gCwifj4eH388cdq166dNfx79913tWXLFsI/AAAAAAAyER2AADLcqVOn5Ofnpz/++EOSlDt3bk2dOlVt2rSxc2UAAAAAAGQ9dAACyDAWi0Xff/+96tevbw3/qlWrprCwMMI/AAAAAADshA5AABkiMjJSAwcO1M8//yxJMhqNGjx4sPr16yc3N6YaAAAAAADshb/KATy1nTt3KiAgQBcvXpQkFStWTHPnzlX16tXtXBkAAAAAAGAJMIB0S0xM1OTJk9W6dWtr+NemTRuFhoYS/gEAAAAA4CDoAASQLufOnVNAQID27NkjSfLy8tKUKVPUvn17GQwGO1cHAAAAAACSEQACeGLLly/X4MGDFR0dLUmqWLGiQkJCVLJkSTtXBgAAAAAA/hcBIIA0i46O1rBhw7R06VJJksFgUFBQkIYOHSoPDw87VwcAAAAAAFJCAAggTX7//Xf5+/vr7NmzkiQfHx/NmTNHtWvXtm9hAAAAAAAgVQSAAHT8+HGdO3dOHh4eKleunAoUKGA9lpSUpODgYE2ZMkWJiYmSpObNm+uLL76Qt7e3vUoGAAAAAABpRAAIZGE///yzZs2apf3791u/5+7urpYtW2rw4MHy9PRU79699d///leSlCNHDn3yySfq0qULN/oAAAAAAMBJEAACWdSUKVM0derUR76fkJCgn376Sb/++qvc3d2tN/p46aWXFBISohdffDGzSwUAAAAAAE/BaO8CAGS+VatWpRj+Peju3bvW8M/Pz0/r1q0j/AMAAAAAwAnRAQhkQbNmzUrz2I4dO2rChAk2rAYAAAAAANgSHYBAFnPs2DEdOHAgzeP37t1ru2IAAAAAAIDNEQACWcy5c+eeaPz58+dtVAkAAAAAAMgMBIBAFuPm9mQr/590PAAAAAAAcCwEgEAWU758eZlMpjSPf+WVV2xYDQAAAAAAsDUCQCCLiYqKkpeXV5rHv//++7YrBgAAAAAA2BwBIJBFWCwWLVy4UA0bNtTt27fT9Jjq1aurWbNmNq4MAAAAAADYEgEgkAXcunVL3bp108CBAxUXFyeTyaROnTopT548j31MtWrVtGjRIvYABAAAAADAyREAAi5u+/btqlOnjtasWSNJKl68uFavXq0vvvhCu3bt0kcffaSSJUvK3d1dnp6eeu211/Tll19q1apVypcvn52rBwAAAAAAT4vWHsBFJSQk6LPPPtP06dNlsVgkSW3bttWnn36qXLlySZIKFCigfv36qV+/fnasFAAAAAAA2BIBIOCCzp49q169emnfvn2SpJw5c+rTTz9Vu3bt7FwZAAAAAADIbASAgIv5z3/+o8GDB+vOnTuSpEqVKmnevHl67rnn7FwZAAAAAACwBwJAwEVER0dr6NChWrZsmSTJYDCob9++GjJkiNzd3e1cHQAAAAAAsBcCQMAF7Nu3T7169dLZs2clSUWKFNHcuXNVq1Yt+xYGAAAAAADsjrsAA04sKSlJ06dPV4sWLazh3xtvvKGwsDDCPwAAAAAAIIkOQMBpXbp0SYGBgdq+fbskKUeOHBo/frw6d+4sg8Fg5+oAAAAAAICjIAAEnNCaNWvUv39/3bp1S5L00ksvaf78+XrhhRfsXBkAAAAAAHA0LAEGnEhsbKwGDRqk999/3xr++fv7a926dYR/AAAAAAAgRXQAAk7i8OHD8vf314kTJyRJBQsW1MyZM9WwYUM7VwYAAAAAABwZHYCAg7NYLAoJCVGTJk2s4V+9evUUFhZG+AcAAAAAAP4RHYCAHd29e1c7duzQzZs3lStXLtWsWVN58uSxHr9+/bqCgoK0efNmSZKHh4dGjRolPz8/GY3k9wAAAAAA4J8RAAJ2EBcXp2nTpmnRokW6efOm9fs5cuRQ27ZtNWzYMB0+fFh9+vTR9evXJUm+vr4KCQlRhQoV7FU2AAAAAABwQgSAQCaLiYlRhw4dtHv37keOxcXFadGiRVq5cqWio6Ot3+/SpYvGjRsnLy+vzCwVAAAAAAC4AAJAIJONHDkyxfDvQcnhX968eTVt2jS1bNkyM0oDAAAAAAAuiE3EgEx0/fp1/fjjj2keT/gHAAAAAACeFgEgkIlWrFihhISENI/fsmWLDasBAAAAAABZAQEgkIkuXrz4ROMvXLhgo0oAAAAAAEBWQQAIZCIPDw+bjgcAAAAAAPhfBIBAJqpateoTja9WrZqNKgEAAAAAAFkFASCQiW7fvi2DwZCmse7u7urYsaONKwIAAAAAAK7Ozd4FAFnBnTt3NGzYsCe6A/DAgQNVsGBBG1YFAAAAAACyAjoAARvbv3+/6tWrZw3/fHx81KdPn1T39+vbt68GDBiQWSUCAAAAAAAXRgcgYCNms1mzZs3SpEmTlJiYKElq2rSppk+frvz586tnz55atGiRVq1apYiICOXMmVMNGjRQt27dVKZMGTtXDwAAAAAAXAUBIGADV65cUWBgoLZt2yZJyp49u8aNG6f333/fugdg0aJFNWzYMA0bNsyepQIAAAAAABdHAAhksHXr1qlv376KiIiQJJUtW1YhISEqXbq0nSsDAAAAAABZEQEgkEaXL1/WokWLtH79ekVFRSlv3rxq1qyZOnXqpMKFCysuLk5jxozRggULrI/p2bOnxowZo+zZs9uxcgAAAAAAkJURAAJp8O2332r48OFKSEiwfu/cuXM6ePCgvvjiC/Xv318rV67Un3/+KUnKnz+/Zs6cqcaNG9urZAAAAAAAAEkEgMA/WrJkiQYNGvTY4/fu3dPkyZOt/65Tp45mzZolHx+fzCgPAAAAAAAgVUZ7FwA4sri4OI0aNSrN40eOHKmlS5cS/gEAAAAAAIdBAAikYuXKlYqMjEzz+GeffVZGI28rAAAAAADgOEgqgFTs3LnTpuMBAAAAAABsjQAQSEVcXJxNxwMAAAAAANgaASCQiiJFith0PAAAAAAAgK0RACJLs1gs+vvvv3X06FFdvXr1keNNmjR5ovO1bds2o0oDAAAAAADIEG72LgCwh3v37mnhwoX6+uuv9ddff1m/X6NGDX3wwQdq2bKldu/erT59+qT5nA0aNNALL7xgi3IBAAAAAADSjQAQWc6dO3f0zjvvaPfu3Y8c27Vrl3bt2qUKFSro8OHDMpvNkiRPT0/FxsY+9pzPP/+8goODbVYzAAAAAABAerEEGFlOYGBgiuHfg/744w+ZzWZ5enoqODhYv/32m9q3by8PD4+HxmXPnl0dO3bUmjVrVLBgQVuWDQAAAAAAkC50ADqZW7du6aefftK+fft07do1eXp66vnnn1ezZs1UrVo1e5fn8A4fPqy1a9emaazJZNKvv/6ql156SZI0e/ZsjR07VmFhYYqKilK+fPlUt25deXt727JkAAAAAACAp0IA6EQuXbqkESNGKCIiQkajUd7e3oqLi9O+ffu0b98+tW7dWt27d7d3mQ4nMjJSS5cu1cGDB7V37940Py4pKUlHjx61BoCSVKBAAW70AQAAAAAAnAoBoJMwm82aNGmSIiIi5OvrqyFDhsjHx0dms1mhoaGaNWuWVq5cqVKlSql27dr2LtchWCwWTZgwQZMnT1ZcXFy6znHixIkMrgoAAAAAACBzsQegk9i2bZvOnTsnDw8PDR8+XD4+PpIko9GoBg0aqEmTJpKkxYsX27NMh2GxWNSxY0eNGTMm3eGfJBkMhgysCgAAAAAAIPMRADqJ7du3S5KqV6+e4s0m6tWrJ0m6ePGizp49m5mlOZwff/xRRYoU0ZIlS576XGXKlMmAigAAAAAAAOyHJcBOwGw268iRI5Kk8uXLpzjG19dX7u7uSkhI0PHjx1WiRIlMrNAxHDlyRE2aNNG9e/cy5HwFChRQ8+bNM+RcAAAAAAAA9kIHoBOIjIxUdHS0JKlo0aIpjjGZTNbOwCtXrmRabY5i2rRpqlu3boaFf5LUv39/ZcuWLcPOBwAAAAAAYA8EgE4gOfyTpDx58jx2XM6cOSVJMTExNq/JkYSGhmrSpEkZes4PP/xQH3zwQYaeEwAAAAAAwB5YAuwEHgz0PDw8HjvOze3+/51JSUk2r8mRdOvWLUPOYzQa1aRJE/Xs2VOvv/56hpwTAAAAAADA3ggAnUBysCcp1SWuCQkJkqTs2bPbvCZHcePGjafueCxatKhWr14tb29veXp6ZlBlAAAAAAAAjoEA0AnkypXL+nVqYdedO3ckSfny5Uvx+HfffafFixc/9vFt27ZV165d01mlfXz77bdPfY4+ffo89uYqcE0Gg0HS/SX1FovFztXA0RiNRuv/Pm4+RdbF/IHUMH8gNcwfSA3zB1LD/IGMQADoBAoVKiQ3NzclJibq0qVLKlu27CNjkpKSdOPGDUnSv/71rxTPExMTo2vXrj32eWJjY2UymTKm6Ezy4P6I6VG3bl3179/f6V43MkbyhRaQEoPBwNyAx2L+QGqYP5Aa5g+khvkDqWH+wNMgAHQCJpNJL774oo4cOaIjR46oYcOGj4z566+/lJCQIKPRmGJAKEleXl4qVKjQY5/H09PT6fYPrF27droeZzQa1blzZwUHB8vNzc3pXjeejsFgkNFolNls5hM0PMJoNMpgMMhischsNtu7HDgY5g+khvkDqWH+QGqYP5Aa5g/8r/R8UEAA6CRef/11HTlyRDt27FC3bt2UO3fuh46vXr1aklS5cuVHjiXr1KmTOnXq9NjnuHHjhm7dupVxRWeCl19+2fqLMq0KFCigX375Rb6+vrp3716q+yrCNZlMJuXLl09RUVGEv3hEvnz5ZDKZZDabnW5OhO0xfyA1zB9IDfMHUsP8gdQwf+B/FShQ4IkfQ/+ok2jQoIGKFCmiuLg4TZw4UTdv3pQkxcfHa/HixQoPD5ebm5u6dOli50oz39tvv53msTlz5lR4eLh8fX1tWBEAAAAAAIDjoAPQSXh4eGjo0KEaM2aMjh49qh49eih//vy6ffu27t27J6PRqICAABUvXtzepWa6uXPnateuXbpw4UKq43LlyqWTJ0+ypwYAAAAAAMhS6AB0IiVLltT06dPVvHlzFShQQJGRkfLy8tKrr76qyZMnq1GjRvYu0W7279+v119//bHH69Wrp9OnTxP+AQAAAACALIcOQCeTP39+9erVy95lOKTly5fLbDZr6tSp2rp1q4xGo1q3bq3u3bvbuzQAAAAAAAC7IQCESzEajRoyZIgmTZokk8mkpKQkNtEFAAAAAABZGkuAAQAAAAAAABdGAAgAAAAAAAC4MAJAAAAAAAAAwIURAAIAAAAAAAAujAAQAAAAAAAAcGEEgAAAAAAAAIALIwAEAAAAAAAAXBgBIAAAAAAAAODCCAABAAAAAAAAF0YACAAAAAAAALgwAkAAAAAAAADAhREAAgAAAAAAAC6MABAAAAAAAABwYQSAAAAAAAAAgAsjAAQAAAAAAABcGAEgAAAAAAAA4MIIAAEAAAAAAAAXRgAIAAAAAAAAuDACQAAAAAAAAMCFEQACAAAAAAAALowAEAAAAAAAAHBhBIAAAAAAAACACyMABAAAAAAAAFwYASAAAAAAAADgwggAAQAAAAAAABdGAAgAAAAAAAC4MAJAAAAAAAAAwIURAAIAAAAAAAAujAAQAAAAAAAAcGEGi8VisXcRQEb77rvvFBMTIy8vL3Xq1Mne5QBwIswfANKL+QNAejF/ALA1AkC4pObNm+vatWsqVKiQfv31V3uXA8CJMH8ASC/mDwDpxfwBwNZYAgwAAAAAAAC4MAJAAAAAAAAAwIURAAIAAAAAAAAujAAQAAAAAAAAcGEEgAAAAAAAAIALIwAEAAAAAAAAXJibvQsAbKFjx46KiYmRl5eXvUsB4GSYPwCkF/MHgPRi/gBgawaLxWKxdxEAAAAAAAAAbIMlwAAAAAAAAIALIwAEAAAAAAAAXBgBIAAAAAAAAODCCAABAAAAAAAAF8ZdgOFSbt26pZ9++kn79u3TtWvX5Onpqeeff17NmjVTtWrV7F0egCeQke/nXr166dKlS6mOmTdvnp555pmnKTnN9u/fr19++UUnT57UnTt35OnpKV9fXzVv3lzVq1fPlBoAPOz06dPq16+fmjZtqsDAwEx97hs3bljnuxs3bshoNOqZZ55RzZo19eabbypHjhyZWg+Ap5sTLBaL2rVrp/j4+FTHrVixQiaT6WnKTLOtW7dqw4YNOn36tOLi4pQrVy6VLl1ab775pl566aVMqQGAfREAwmVcunRJI0aMUEREhIxGo7y9vRUXF6d9+/Zp3759at26tbp3727vMgGkQUa+n5OSknTt2jW5u7urUKFCjx3n7u6eUeWn6scff9T3339vfU5vb29FRERo//792r9/v95880316NEjU2oB8H82bNhgl+c9c+aMRo4cqejoaBkMBuXLl09xcXE6c+aMzpw5o61bt2rChAnKly+fXeoDsqqnmRNu3Lih+Ph45ciRQ97e3hlYVfrMmjXL+nqyZcumfPnyKSIiQrt27dLu3bvVvXt3vfnmm3auEoCtEQDCJZjNZk2aNEkRERHy9fXVkCFD5OPjI7PZrNDQUM2aNUsrV65UqVKlVLt2bXuXCyAVGf1+vn79uhITE/Xyyy/rk08+yYRX8HhHjx61hn8ffPCB3njjDRmNRiUkJGjZsmVasmSJVq1apfLly9O1DGSSW7duadOmTVq3bl2mP3dSUpI+++wzRUdH65VXXlG/fv2sQd+hQ4f0+eef68KFC5o3b56GDx+e6fUBWVFGzAmXL1+WJL322msKCgrKqNLSJTw8XBs2bJC7u7v69++vWrVqyWAwKDY2VgsWLND69eu1YMEClS9fXiVLlrRrrQBsiz0A4RK2bdumc+fOycPDQ8OHD5ePj48kyWg0qkGDBmrSpIkkafHixfYsE0AaZPT7OfkivEiRIrYp+Als2bJFklS9enW1bNlSRuP9X8Pu7u7q2LGjqlSpIun+xToA21q6dKm6d++url27atGiRTKbzZlew/Hjx3XhwgWZTCYNHDjwoS6/8uXL64MPPpAk7d69W3fv3s30+oCsJCPnBEe69ti0aZMkqWnTpnrttddkMBgkSZ6engoICFDx4sVlNpu1bds2e5YJIBPQAQiXsH37dkn3/6guWLDgI8fr1aunX3/9VRcvXtTZs2dVokSJTK4QQFpl9Pv5ypUrkmQNEp9EfHy81qxZo23btunixYuSpGLFiql27dpq1qyZPDw8nuh8N27ckCQVL148xeMlSpTQ3r17+UMfyARRUVFKTExU3rx5JUmxsbH/uF+XJB04cEBr1qzRn3/+qdjYWHl7e6tSpUpq1aqVihYt+kQ13Lx5U5KUN29e5c6d+5HjyfOb2WxWfHy8smfP/kTnB5B26Z0TUvI01x537tzRypUrtXv3bl25ckXu7u4qXry46tevrwYNGlg/PEyr5HkmpWsPo9Go4sWL69y5c1x7AFkAASCcntls1pEjRyTd/7Q8Jb6+vnJ3d1dCQoKOHz9OAAg4KFu8n5M/hX/Si/CbN2/q448/1rlz5yRJefLkkclk0okTJ3TixAmtW7dO48aNSzGkfJzkGo4dO/bIMbPZrIMHD0q6HzICsK0PPvjA2mEnSdOnT7d26T7O119/rZUrV0q637mbvI/W2rVrtWnTJgUGBqpBgwZpriF5ToiIiNDVq1dVuHDhh47v379f0v35J6WAEEDGSc+c8Djp7QA8f/68xowZY/3A0NvbW0lJSTpy5IiOHDmiDRs2aMyYMcqZM2eaz+nj46MLFy7o2LFjaty48UPH7t69q6NHj0ri2gPICggA4fQiIyMVHR0tSY/95N1kMqlgwYK6dOmS9RM5AI7HFu/n5DExMTGaOHGijh07ppiYGOXOnVsvvfSSWrVqpRdffPGhxyQlJWnSpEk6d+6cypYtqz59+uhf//qXpPsX9cHBwTp8+LAmTpyoadOmWZfT/JOWLVtq06ZNOnTokKZPn663335bhQoV0tWrV/XDDz/o5MmT8vT0VIsWLdJ0PgCZZ/Xq1Vq5cqVy5swpf39/vfbaazKZTLp3755WrVql7777TsHBwSpRooSef/75NJ2zVKlSevnll3Xw4EGNHTtWPXr0UJkyZXTv3j3t2LFD3377rSSpQ4cOtnxpADJYcgB49epVLVy4UCdPntTdu3eVL18+vfzyy2rTps0jgVtsbKzGjRunGzduqEaNGvLz81OBAgUkSadOndL06dN1/PhxzZw5UyNGjEhzLW+99Zb27dunzZs3K3fu3GrWrJny5cun8+fPa8GCBbpx44YKFCig+vXrZ9x/AAAOiQAQTi85LJDuf0L+OMmflMXExNi8JgDpY4v3c/JFeHBwsKT7n6Z7enoqIiJC27Zt0/bt2/Xee++pXbt21sds3bpVJ06cUKFChTR69Gh5enpajxUpUkQfffSRevbsqVOnTumPP/7Qyy+/nKbXV7RoUWtouGXLlkc6C7y9vTVmzBjrBT8AxxAXF2e9gU/fvn1VvXp167Fs2bKpffv2unz5sjZv3qxVq1ZpwIABaT738OHDFRISotDQUI0dO/aR4127duVDAcDJJH/4OHnyZBmNRnl7e8tisej69evatGmTwsPD1bt374dCt19++UVXr15VqVKlNHToUJlMJuux559/XiNGjFBAQIB27dqlS5cu6ZlnnklTLeXKldPo0aM1Y8YMrVixQitWrHjoeLFixTR69Gi2GACyAG4CAqf3YACQ2n5cbm738+6kpCSb1wQgfWzxfk6+CK9Zs6bmz5+vb775Rt99953mzZunKlWqyGw2a9GiRQ9tfp18E44aNWo8FP4l8/Lyst6w49ChQ2l4ZfclJiZq48aN1prc3NxUsGBB6+uJiIjQ999/rzt37qT5nABsb+/evYqJiVHOnDkfCv8eVKdOHUnS4cOHn+jcBw4csC71laR8+fLJy8vL+u/Vq1c/8TkB2E9kZKTi4uIk3b/xxoIFC/T111/rhx9+0LRp0/Tiiy8qISFBM2fOfGhLkORrjzp16jwU/iUrUqSIdcXCk8wJsbGxWr9+vSIjIyXdv74qUKCAdS/BCxcuaOnSpUpISEjX6wXgPOgAhNNL/sNZku7du/fYccm/1Ph0C3BcGf1+TkpKUlBQkNzd3VWjRo2Hluo+88wzGjlypEaMGKGjR49qyZIlql27tqT7S22k+xfj+/btS/Hct2/fliRdv35dknTixAl98cUXj4x74YUX1L9/f0nS7NmztXnzZmXPnl09e/ZUgwYNZDKZlJSUpP/+97/66quv9Ntvv2n69OkaOXJkqq8NQOZJnhPu3r2rgICAFMckJiZKur9/aFJSkkwmk0aOHGndgP9B48ePV/78+XXw4EF9+umnMpvNqlu3rt5//315e3tLkv7++299+eWXOnDggD755BMFBwerUKFCNnqFADKKu7u7Bg0aJC8vL1WuXPmhY76+vho/frw+/PBDXb58WcuWLdPo0aN17949XbhwQZL0008/ae3atSmeOyIiQtL/XXvs3LlTCxcufGRcjRo11LVrV0nShAkTdOjQIeXNm1cBAQGqXr26jEajEhIStHHjRn3zzTfauHGjsmXLJj8/vwz77wDA8RAAwunlypXL+nVqywGTO2ry5ctn85oApE9Gv59NJpNef/31xx43Go1q3Lixjh49qvPnzysmJkZeXl7W80dFRSkqKirV50gOKu/du2e9U/CDkmu8evWqQkNDJUndu3d/aCNuk8mkOnXqyNvbWx999JF+++03Xbx48YnvKArANpLnhMTExBTf5w+yWCyKj49Xjhw5dOXKFV27du2RMclh4dKlS2U2m1WmTBn169fvobt7Pvvssxo9erT69OmjS5cuad26derSpUsGvioAtuDl5ZXqtUe2bNlUr149LV682NoB+GDnf3LIl5rka4/Y2NgU56Rbt25Jut8pmLxSoV+/fqpUqZJ1jLu7u5o3b65s2bJpxowZWrdunTp37qwcOXKk4VUCcEYEgHB6hQoVkpub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", - "text/plain": [ - "
" - ] - }, - "metadata": { - "image/png": { - "height": 480, - "width": 640 - } - }, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "
" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import embo\n", - "from embo import InformationBottleneck\n", - "from rdot.probability import joint\n", - "\n", - "pxy = joint(mickey_meaning_dists, mickey_prior)\n", - "results = InformationBottleneck(pxy=pxy).get_bottleneck()" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/nathanielimel/miniforge3/envs/ultk/lib/python3.11/site-packages/plotnine/layer.py:364: PlotnineWarning: geom_point : Removed 1 rows containing missing values.\n", - "/Users/nathanielimel/miniforge3/envs/ultk/lib/python3.11/site-packages/plotnine/geoms/geom_path.py:98: PlotnineWarning: geom_path: Removed 1 rows containing missing values.\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABQAAAAPACAYAAABq3NR5AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAB7CAAAewgFu0HU+AABzBElEQVR4nOzdeZjddX33/9c5ZzLZyDLZCIsEQiJhV6OAtqGEhE1TCYqiEuFmaTGKXNregKC3VBEp4kIp7qXcd+UKXiIQhIJGKKSBiGAsIIkQEQMkIWSbJGRP5pzfH7lmfoTscGDgex6P6+JimO9yPjM5vtvrme/3e0q1Wq0WAAAAAKCQyp29AAAAAADg9SMAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABSYAAgAAAECBCYAAAAAAUGACIAAAAAAUmAAIAAAAAAUmAAIAAABAgQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIEJgAAAAABQYAIgAAAAABSYAAgAAAAABdbU2QvgzWHx4sWdvYS66datW8rlcqrVatauXdvZy6ETlEqldO/ePWvWrEmtVuvs5dAJzAHMARKzALMAcwBzgE2KNgsGDBiwy8e4ApDC6d69e3r06JHu3bt39lLoJOVyOT169Ei5bMQ1KnMAc4DELMAswBzAHGATs0AABAAAAIBCEwABAAAAoMAEQAAAAAAoMAEQAAAAAApMAAQAAACAAhMAAQAAAKDABEAAAAAAKDABEAAAAAAKTAAEAAAAgAITAAEAAACgwARAAAAAACgwARAAAAAACkwABAAAAIACEwABAAAAoMAEQAAAAAAoMAEQAAAAAApMAAQAAACAAhMAAQAAAKDABEAAAAAAKDABEAAAAAAKTAAEAAAAgAITAAEAAACgwARAAAAAACgwARAAAAAACkwABAAAAIACa+rsBbyRWltbc+utt2bGjBlZuHBhevTokf333z8nnXRSjjjiiF0+30MPPZQ77rgjzz33XNauXZuBAwfmyCOPzPjx49OnT5+tHvPSSy/l9ttvz29/+9ssWrQoGzduTEtLSw455JB86EMfytve9rYtjrnuuusyZcqU7a7l/PPPz/HHH7/LPwMAAAAAxdYwAXD+/Pm59NJLs3Tp0pTL5fTr1y9r1qzJjBkzMmPGjIwfPz5nn332Tp/vhhtuyG233ZYk6d69e3r16pX58+fnlltuyf3335/LL788e++99zbXkCR9+/ZNly5d8uKLL+bFF1/MtGnTcskll2TkyJGbHffCCy8kSfbcc8+USqWtrqdnz547vXYAAAAAGkdDBMBqtZorr7wyS5cuzbBhw3LRRRdl8ODBqVarue+++3Lddddl8uTJGT58eEaNGrXD8z3wwAO57bbbUi6Xc+655+akk05KpVLJkiVLcvXVV2fWrFm56qqrcs0116RSqXQcd/XVV2fp0qXZb7/98vnPfz777rtvkk1h8Nprr82sWbPyrW99Kz/4wQ/Su3fvjuMWLFiQpqamfO9730u57K5tAAAAAHZeQ9SkadOm5dlnn01zc3MuueSSDB48OElSLpczZsyYnHDCCUmSSZMm7fBctVqtY78TTzwx48aN64h8/fv3z4UXXpimpqY8++yzeeCBBzqOe/LJJ/PnP/85lUolX/ziFzviX7Lpyr4vfOEL6dmzZ1auXJlf//rXHds2bNiQJUuWZPfddxf/AAAAANhlDVGUHnzwwSTJkUcemYEDB26xffTo0UmSefPmZc6cOds915w5czJ37twkybhx47bY3r9//xx22GFJkunTp3d8/4knnkiSHHDAARk0aNAWx/Xt2zdvf/vbk2yKhe1efPHFVKvV7LHHHttdFwAAAABsTeEDYLVazcyZM5Mkhx566Fb3GTZsWLp06ZIkeeqpp7Z7vj/84Q9JkpaWli2e8dduxIgRW5yr/bl/u++++zbP3X4l4YYNGzq+1/78v/arFgEAAABgVxT+GYDLli3LSy+9lCTZa6+9trpPpVLJwIEDM3/+/CxYsGC753v++ee3e64kHVfrLV26NOvWrUvXrl1z1lln5ZOf/GSamrb+K29tbc2sWbOSJPvss0/H99sDYNeuXfP9738/M2bMyNKlS9OtW7fsv//+Oe6443L00Udvd80AAAAANK7CB8D2+Jckffr02eZ+u+22W5Jk1apVO3W+nTlXkqxevTpdu3ZNly5dOq4yfKWVK1fm6quvzurVq1OpVHL88cd3bGsPgLfcckuSpFevXunbt2+WLFmSxx57LI899limTZuWiy66aJvnBwAAAKBxFT4AvjzoNTc3b3O/9ivz2tradup8O3OunTnfww8/nB/+8IdZtGhRkuTv/u7vNru1uP2KxCFDhmTixIk56KCDkmyKhjfffHMmT56c3/72t/nxj3+cT3/609t9LQAAAAAaT+ED4Mtj3Lp167a5X/tz97p167ZT59uZc23vfHPnzs3111+fGTNmJNl0Zd9nPvOZvO9979tsvw9+8IMZPXp03vWud212ZeFuu+2Ws846K01NTbn55pszZcqUfPzjH09LS8t21w8AAABAYyl8AOzVq1fH19u7vXflypVJssOA1n6+nTlXc3Nzevbsudm29evX56abbsrtt9+ejRs3plwu59hjj80ZZ5yRvn37bnGud77zndtdz4knnpibb7451Wo1Tz31VI466qit7nfjjTdm0qRJ2zzPqaeemjPPPHO7r/VWUS6XO/4tiDamUqmUZNOt+rVarZNXQ2cwBzAHSMwCzALMAcwBNjELGiAADho0KE1NTdm4cWPmz5/fcQvty7W1tWXx4sVJss1P9m235557Jknmz5+/zX1efPHFJJs+KKR92CTJ8uXL85WvfCVPP/10kuTwww/P2Wefnf3222/XfqiX6d27d8fXL7/y8JVWrVqVhQsXbnN7+/MHi6RUKhXuZ2LXtA95Gpc5gDlAYhZgFmAOYA6wSSPPgsIHwEqlkgMOOCAzZ87MzJkzM3bs2C32efrpp7Nhw4aUy+WtBsKXa9++aNGiLFq0KAMHDtxinz/+8Y9JkkMOOaTje9VqNVdccUWefvrpdO3aNZ/61KcyZsyY7b7WE088kfvuuy8tLS2ZMGHCVveZO3dux9eDBw/e5rl69uyZQYMGbXN7jx49dvi8wreKcrmcUqmUWq2WarXa2cuhE5RKpZTL5VSrVX/L16DMAcwBErMAswBzAHOATYo2C15NxCx8AEySo48+OjNnzsz06dNz1llnbXbVXJLceeedSZKRI0duse2VDj744AwYMCCLFy/OXXfdtcVts3Pnzs2jjz6aJBk9enTH9x9++OE8+eSTKZfLueiii/Ke97xnh+sul8v59a9/3XGbcPvVhy83efLkJMmAAQMydOjQbZ5r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xx135LnnnsvatWszcODAHHnkkRk/fnz69Omz1WNeeuml3H777fntb3+bRYsWZePGjWlpackhhxySD33oQ3nb29621eP+8pe/5Oc//3meeuqptLa2pm/fvjnssMPywQ9+MPvtt98urx0AAACAxlCq1Wq1zl7EG2H+/Pm59NJLs3Tp0pTL5fTr1y9r1qzJqlWrkiTjx4/P2WefvdPnu+GGG3LbbbclSbp3756ePXtm6dKlqVar6d+/fy6//PLsvffe21xDkvTt2ze1Wi3Lly9PkjQ3N+eSSy7JyJEjNzvuoYceylVXXZW2trZ06dIlLS0tWbZsWdavX58uXbrkH/7hH/JXf/VXr/p3kySLFy9+Tce/mbS0tKRSqaStrS2tra2dvRw6QaVSSUtLS1pbW9PW1tbZy6ETmAOYAyRmAWYB5gDmAJsUbRYMGDBgl49piCsAq9VqrrzyyixdujTDhg3LRRddlMGDB6darea+++7Lddddl8mTJ2f48OEZNWrUDs/3wAMP5Lbbbku5XM65556bk046KZVKJUuWLMnVV1+dWbNm5aqrrso111yTSqXScdzVV1+dpUuXZr/99svnP//57Lvvvkk2hcFrr702s2bNyre+9a384Ac/SO/evZMkixYtytVXX522traMGTMm5557bnr27Jm1a9fmP/7jP3LnnXfmX/7lXzJ06NDssccer8vvDwAAAIC3roZ4BuC0adPy7LPPdlxhN3jw4CRJuVzOmDFjcsIJJyRJJk2atMNz1Wq1jv1OPPHEjBs3riPy9e/fPxdeeGGampry7LPP5oEHHug47sknn8yf//znVCqVfPGLX+yIf0my55575gtf+EJ69uyZlStX5te//nXHtp/97GfZsGFD9t1335x//vnp2bNnkqRbt24599xzM2TIkKxduza33nrra/slAQAAAFBIDREAH3zwwSTJkUcemYEDB26xffTo0UmSefPmZc6cOds915w5czJ37twkybhx47bY3r9//xx22GFJkunTp3d8/4knnkiSHHDAARk0aNAWx/Xt2zdvf/vbk2yKhcmm2Nh+jvarDF+uXC7nmGOOSZL85je/SbVa3e7aAQAAAGg8hQ+A1Wo1M2fOTJIceuihW91n2LBh6dKlS5Lkqaee2u75/vCHPyTZdP/4K5/x127EiBFbnKv9uX+77777Ns/dHvg2bNiQZFNs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gQmAAAAAAFBgAiAAAAAAFJgACAAAAAAFJgACAAAAQIE1dfYC3kitra259dZbM2PGjCxcuDA9evTI/vvvn5NOOilHHHHELp/voYceyh133JHnnnsua9euzcCBA3PkkUdm/Pjx6dOnzw6PX7FiRc4444wcfvjh+cpXvrLN/b785S/n0Ucf3e65vvrVr+Yd73jHLv4EAAAAABRdwwTA+fPn59JLL83SpUtTLpfTr1+/rFmzJjNmzMiMGTMyfvz4nH322Tt9vhtuuCG33XZbkqR79+7p1atX5s+fn1tuuSX3339/Lr/88uy9997bPce9996barW6w9d64YUXUi6Xs8cee2xzn27duu302gEAAABoHA0RAKvVaq688sosXbo0w4YNy0UXXZTBgwenWq3mvvvuy3XXXZfJkydn+PDhGTVq1A7P98ADD+S2225LuVzOueeem5NOOimVSiVLlizJ1VdfnVmzZuWqq67KNddck0qlssXxK1euzAMPPJBJkybt8LU2btyYRYsWZdCgQfn+97//qn5+AAAAABpXQzwDcNq0aXn22WfT3NycSy65JIMHD06SlMvljBkzJieccEKS7FSQq9VqHfudeOKJGTduXEfk69+/fy688MI0NTXl2WefzQMPPLDZsffcc0/+/u//Pqeffnq+973vZd26dTt8vYULF6ZarW736j8AAAAA2JaGCIAPPvhgkuTII4/MwIEDt9g+evToJMm8efMyZ86c7Z5rzpw5mTt3bpJk3LhxW2zv379/DjvssCTJ9OnTN9v20ksvZe3atenTp0/69u27U7ftvvDCC0kiAAIAAADwqhT+FuBqtZqZM2cmSQ499NCt7jNs2LB06dIlGzZsyFNPPZV99913m+f7wx/+kCRpaWnZ5jP+RowYkd///vd56qmnNvv+KaecklNOOaXjvydNmpSf/vSn211/ewBsv2oRAAAAAHZF4QPgsmXL8tJLLyVJ9tprr63uU6lUMnDgwMyfPz8LFizY7vmef/757Z4r+f+v1lu6dGnWrVuXrl27vpqlJ0nHemq1Wr7zne/ksccey4oVK9KzZ8+8/e1vzwc+8IG8613vetXnBwAAAKDYCh8A2+NfkvTp02eb++22225JklWrVu3U+XbmXEmyevXq1xQA268AvOGGGzpet1evXmltbc0jjzySRx55JO9///tz3nnnpVQqverXAQAAAKCYCh8AXx70mpubt7lfU9OmX0VbW9tOnW9nzrUz59uR9isADz744Jx33nkdtycvWbIkP/nJT/Jf//VfueuuuzJw4MB8+MMffk2vBQAAAEDxFD4AvjzGbe9Tdzds2JAkO/xgjvbz7cy5duZ8OzJhwoS0tbXlyCOPTJcuXTq+379//3zuc59LW1tbpk6dmp///Oc5+eSTN/t5AQAAAKDwtahXr14dX2/v9t6VK1cm2fThHjtzvp05V3Nzc3r27LnTa92a9773vdvdfsIJJ2Tq1KlZtWpVnn/++ey3335b3e/GG2/MpEmTtnmeU089NWeeeeZrWuubRblc7vj3jv48Kab22+H79OmTWq3WyauhM5gDmAMkZgFmAeYA5gCbmAUNEAAHDRqUpqambNy4MfPnz89BBx20xT5tbW1ZvHhxkmzzk33b7bnnnkmS+fPnb3OfF198McmmDwp5vZ/L9/JnEa5fv36b+61atSoLFy7c5vbVq1enUqnUdW2drVQqFe5nYte0D3kalzmAOUBiFmAWYA5gDrBJI8+CwgfASqWSAw44IDNnzszMmTMzduzYLfZ5+umns2HDhpTL5a0Gwpdr375o0aIsWrQoAwcO3GKfP/7xj0mSQw455DWtffr06ZkxY0b22WefnHzyyVvdp/1TiZNk99133+a5evbsmUGDBm1ze48ePV7z8wrfLMrlckqlUmq1WqrVamcvh05QKpVSLpdTrVb9LV+DMgcwB0jMAswCzAHMATYp2ix4NRGz8AEwSY4++ujMnDkz06dPz1lnnZXevXtvtv3OO+9MkowcOXKLba908MEHZ8CAAVm8eHHuuuuuLW6bnTt3bh599NEkyejRo1/TutetW5df//rX6dmzZ8aMGbPZpwu3+8UvfpEkGTFiRPr27bvNc02YMCETJkzY5vbFixentbX1Na33zaKlpSWVSiXVarUwPxO7plKppKWlJcuXLy9M2GbXmAOYAyRmAWYB5gDmAJsUbRYMGDBgl49piGtgx4wZkz322CNr1qzJ17/+9SxZsiTJpltmJ02alKlTp6apqSlnnHFGxzGzZ8/OxIkTM3HixMyePbvj+5VKJR/72MeSJJMnT84999zT8bcIzzzzTK644opUq9WMGjUqw4YNe03rPuqoo9LS0pJVq1bl8ssv3+xqv5deeinf+973MmvWrJRKpe3GPQAAAAAaV0NcAdjc3JyLL744l112WWbNmpVzzjkn/fv3z4oVK7Ju3bqUy+VMnDgxQ4YM6Thm3bp1mTdvXsfXL3f88cdn9uzZmTJlSq699tpcf/316datW0dYHD58eM4777zXvO7u3bvn4osvzte+9rX88Y9/zGc+85m0tLSkS5cuWbx4carVakqlUs4555wcdthhr/n1AAAAACiehgiASTJ06NBcc801ufnmm/O73/0ura2t6dWrV0aOHJnx48dnxIgRu3S+888/P4cddljuvvvuzJkzJ6tWrcqQIUNyzDHHZNy4cenatWtd1n3QQQflu9/9bm6//fY88sgjWbBgQUqlUgYNGpSDDjoo48aNe81XGgIAAABQXKWap2CSdHwKchG039vf1tZWiHv72XXtz/lobW31nI8GZQ5gDpCYBZgFmAOYA2xStFngGYAAAAAAwGYEQAAAAAAoMAEQAAAAAApMAAQAAACAAhMAAQAAAKDABEAAAAAAKDABEAAAAAAKTAAEAAAAgAITAAEAAACgwOoaAM8777zcd999qdVq9TwtAAAAAPAq1TUA/vjHP87YsWOzxx575NOf/nTuv/9+MRAAAAAAOlHdbwGu1WpZuHBhfvjDH2bMmDHZa6+9cv7552fq1Kn1fikAAAAAYAfqGgBvuummfOxjH0ufPn1Sq9VSq9WyYMGCfP/738+xxx6bvfbaKxdccEEefPDBer4sAAAAALANdQ2Ap512WiZNmpRFixblV7/6VT796U9n77337oiBL7zwQr773e/m6KOPzj777JMLL7wwM2bMqOcSAAAAAICXeV0+BbipqSnHHXdcrrvuujz33HN55JFH8sUvfjGHHHJIRwycO3duvv3tb+eII47IAQcckK997WuZM2fO67EcAAAAAGhYr0sAfKWRI0fm8ssvz+OPP54///nP+da3vpWjjz465XI5tVotf/rTn3LZZZdl2LBhOeaYY3LjjTdm7dq1b8TSAAAAAKDQ3pAA+HL77bdfPv/5z+f+++/PE088kWOOOaZjW7VazbRp03LmmWdmzz33zP/+3/87zz333Bu9RAAAAAAojDc8AD7zzDP5zne+k9GjR+fQQw/N1KlTUyqVUqvVkiRdunRJrVbLsmXL8p3vfCfDhw/PxRdf3LEdAAAAANh5TW/EizzyyCO5/fbbc/vtt2fWrFkd32+Pev369cspp5yS0047Lcccc0ymTp2aH//4x5k8eXLWr1+fb37zm+nfv38uuuiiN2K5AAAAAFAYr0sAXL9+fe69997cfvvtueOOO7JgwYKObe3Rr2/fvjnllFPy0Y9+NGPHjk2lUunYZ8yYMRkzZkyeffbZjBkzJs8880z+/d//XQAEAAAAgF1U1wD4k5/8JL/4xS/yq1/9KqtWrUqSzW7d7dOnT04++eR89KMfzXHHHZcuXbps93xDhgzJmWeemcsuu8wnBAMAAADAq1DXAHjmmWdu9jy/JOnVq1c++MEP5qMf/WhOOOGENDc379I520NiU9MbcrcyAAAAABRK3atarVbLbrvtlnHjxuW0007LiSeemK5du77q851wwgk58MAD09LSUsdVAgAAAEBjqGsA/OhHP5qPfvSjef/7359u3brV5ZyjR4+uy3kAAAAAoBHVNQD+9Kc/3eJ7L774Ynbfffctvr948eIMGDCgni8PAAAAALxC+fU46Zw5c/KpT30qgwcPztChQ7e6z3ve857stddeueCCC/KXv/zl9VgGAAAAADS8ugfAu+66KwcffHB+/OMfZ+HChZt9IMgrvfDCC/nud7+bgw8+ODfccEO9lwIAAAAADa+uAXD+/Pn5xCc+kTVr1qRWq2Xo0KH57Gc/u9V9zzrrrAwdOjS1Wi1r167NueeemylTptRzOQAAAADQ8OoaAP/1X/81K1asSKlUype+9KU8+eSTueqqq7a675e//OU8/fTTueaaa9K1a9fUarV87nOfq+dyAAAAAKDh1TUA/upXv0qpVMqxxx6br371q2lq2vFnjFxwwQX55je/mSR56qmn8sgjj9RzSQAAAADQ0OoaAP/85z8nScaOHbtLx5199tkdsfD3v/99PZcEAAAAAA2trgFww4YNSZKuXbvu0nHdu3dPr169kiStra31XBIAAAAANLS6BsA999wzSfI///M/u3Tc8uXLs2zZsiRJ375967kkAAAAAGhodQ2AY8eOTa1Wy89+9rM8/vjjO33cv/7rv6ZWqyVJ3vGOd9RzSQAAAADQ0OoaAD/zmc+kqakp69evz5gxY/L//t//S7Va3eb+69aty9e+9rV89atfTalUygEHHJCjjjqqnksCAAAAgIa244/p3QWHHnpo/umf/ilf+tKXsnTp0px99tn5/Oc/n+OOOy4HHXRQBgwYkO7du2fJkiV57LHH8stf/jKtra2p1Wppbm7OD3/4w3ouBwAAAAAaXl0DYJJceumlKZVKueyyy7Jx48YsW7YsP//5z7e6b/ttv7169cqNN96YUaNG1Xs5AAAAANDQ6noLcLtLLrkkjzzySD760Y+mubk5tVptq//06NEj55xzTmbNmpW//du/fT2WAgAAAAANre5XALY7/PDD89Of/jRr1qzJjBkz8uSTT2bZsmXZsGFD+vbtmwMPPDBHHHFEevTo8XotAQAAAAAa3usWANt17949f/3Xf52//uu/fr1fCgAAAAB4hdflFuBdVavV0qtXrzQ1NeWWW27p7OUAAAAAQGG8blcAtrW1ZeHChdmwYcMO9503b142bNiQWq2W2bNnv15LAgAAAICGU/cAuGLFinz+85/PT3/606xdu3aXjx84cGC9lwQAAAAADavuAfDkk0/Of//3f6dWq+3yse973/vyiU98ot5LAgAAAICGVdcAePvtt2fq1KkplUrZc88984lPfCIDBw7Mv//7v2f27Nk5+OCD8+EPfzi1Wi0LFy7MlClT8swzz6RXr1657bbbcuyxx9ZzOQAAAADQ8OoaAG+66aYkSc+ePfPb3/42e+21V5Jk3LhxOfjggzN37tx88YtfTFPTppet1Wq5+OKL881vfjNf+MIXMn369I5tAAAAAMBrV9dPAX7kkUdSKpXy4Q9/uCP+JcmBBx6YHj16ZPny5fmf//mfju+XSqV84xvfyOjRozNjxox87Wtfq+dyAAAAAKDh1TUALliwIElywAEHbLFt3333TZI8+uijW2z7x3/8x9RqtVx77bVZt25dPZcEAAAAAA2trgFw48aNSZLddttti2377bdfkuSZZ57ZYtvYsWNTKpWyfPny3HvvvfVcEgAAAAA0tLoGwMGDBydJ/vznP2+xbb/99kutVssTTzyxxbbm5ub07t17m8cCAAAAAK9OXQPgUUcdlVqtlp/+9KdZvnz5ZtsOO+ywJMn06dO3uM33hRde6Nh/7dq19VwSAAAAADS0ugbAM844I0mycOHCHHnkkbn++uvzwgsvJNl0m2+SLFu2LF/+8pc7jmlra8vnP//5jv9++9vfXs8lAQAAAEBDq2sA/MAHPpATTjghtVotf/rTn/L3f//3ueGGG5Js+hCQsWPHplar5Zvf/GYOPvjgnHLKKRk+fHhuvvnmlEqlDBo0KCeccEI9lwQAAAAADa2uATBJfv7zn+fv/u7v0rVr19Rqtc22/eAHP0jv3r1Tq9Xy5JNP5he/+EWeffbZ1Gq1NDU15YYbbki3bt3qvSQAAAAAaFh1D4A9e/bMD3/4wyxZsiSPPPJITj/99I5tQ4cOzYMPPpjjjz8+TU1NHYHwr//6r3P//ffnxBNPrPdyAAAAAKChNb1eJ+7evXtGjhy5xfcPPvjg/PKXv8z69euzZMmS9OnTJz169Hi9lgEAAAAADa2uAfC///u/kyT7779/9tprr+3u29zcnD322KOeLw8AAAAAvEJdbwEePXp0Ro8enV/84hf1PC0AAAAA8CrVNQC2X9G3cOHCep4WAAAAAHiV6hoAP/ShD6VWq+X222+v52kBAAAAgFeprgHwq1/9aoYOHZrHHnssF110UT1PDQAAAAC8CnX9EJC+ffvm3nvvzQc/+MF861vfyrRp0/KZz3wmI0eOTM+ePXfqHPvss089lwQAAAAADa2uAbBSqWz23w8//HAefvjhnT6+VCpl48aN9VwSAAAAADS0ugbAWq1Wz9MBAAAAAK9RXQPgZZddVs/TAQAAAACvkQAIAAAAAAVW1wDIW1epVEq5XNcPhX5TeOVzKWkM7X/u/vxJvA8alTnAK3kvNCazgJfzPmhM5gCv1KjvhVLNg/tIsnr16vTo0aOzlwEAAABAndX1CsD//u//fs3nOProo+uwEnbVmjVrsm7dus5eRl307t07lUolbW1tWbFiRWcvh05QqVTSu3fvrFixIm1tbZ29HDqBOYA5QGIWYBZgDmAOsEnRZkFLS8suH1PXAHjMMcekVCq96uNLpVI2btxYxxWxs2q1WiGHYRF/JnZeW1ub9wDeAw3OHKCd90FjMwtIzIFGZw7QrlHfB3V/BqA7igEAAADgzaOuAfCGG27Y7vZarZa1a9fmxRdfzOOPP55f//rXWblyZfr27ZtvfOMbOfTQQ+u5HAAAAABoeHUNgGeeeeYu7b9s2bJ84QtfyI9+9KNcdNFFmTp1aj2XAwAAAAANr9yZL963b9/84Ac/yIQJE7Js2bJdDogAAAAAwPZ1agBs94UvfCFJ8thjj2X69OmdvBoAAAAAKI43RQA84IADUi5vWsqMGTM6eTUAAAAAUBxvigC4atWqVKvVJMmaNWs6eTUAAAAAUBxvigD4b//2bx1fDx48uBNXAgAAAADFUtdPAZ49e/ZO77tx48a88MILue222/KjH/0oSVIqlXLMMcfUc0kAAAAA0NDqGgBHjBiRUqm0y8fVarUkyYQJE7LPPvvUc0kAAAAA0NDqGgCT/z/m7arTTz893//+9+u8GgAAAABobHUNgGeeeeZO71sul9OvX7+87W1vywc+8IHsv//+9VwKAAAAAJA6B8AbbrihnqcDAAAAAF6jN8WnAAMAAAAAr4+6PwOw3UMPPZTbbrstf/zjH/OLX/xii+3/63/9r+y555758Ic/nJEjR75eywAAAACAhlb3ANja2ppPfOITmTJlSpKka9euW91v6tSpee6553LVVVdl7Nix+bd/+7e87W1vq/dyAAAAAKCh1fUW4Gq1mpNOOilTpkxJrVZLrVZL//79t7pv3759O/a55557MmrUqLz44ov1XA4AAAAANLy6BsCf/OQnefjhh5MkBx98cO69994899xzW93397//fe677768+93vTq1Wy/PPP58LLrignssBAAAAgIZX1wA4adKkJMnee++d3/zmNxk9enRKpdJW9y2VSvmbv/mbPPTQQznllFNSq9Vy6623Zv78+fVcEgAAAAA0tLoGwEcffTSlUikf//jHs9tuu+3cAsrlfPvb306y6RbiqVOn1nNJAAAAANDQ6hoAly1blmTTFYC7YsiQIenbt2+SZO7cufVcEgAAAAA0tLoGwJaWliTJvHnzdum4Wq2W1atXJ0kqlUo9lwQAAAAADa2uAfAd73hHarVabrrppqxfv36nj5syZUrH/vvtt189lwQAAAAADa2uAXDChAlJkueffz4f+tCH0trausNj/vSnP+VTn/pUkqR79+45/vjj67kkAAAAAGhodQ+Af/VXf5VarZa77747w4YNywUXXJC77747zz77bFatWpVqtZpFixblnnvuyac//em84x3vyHPPPZdSqZRLLrkkPXv2rOeSAAAAAKChNdX7hLfffnuOPfbYPP7441m2bFm++93v5rvf/e4296/VakmSj3/847n00kvrvRwAAAAAaGh1vQIwSfr165ff/va3+Yd/+Id069YttVptu//06dMn//Iv/5Ibb7wxpVKp3ssBAAAAgIZW9ysAk6Rr16755je/mS996Uu55ZZb8pvf/CZPPvlkli1blg0bNqRv37458MADM3r06HzkIx9Jjx49Xo9lAAAAAEDDe10CYLu+ffvmnHPOyTnnnPN6vgwAAAAAsA11vwW43fr163P33Xfnm9/85la3/+AHP8iUKVOycePG12sJAAAAANDwXpcA+M///M8ZNGhQxo0bly9/+ctb3eeqq67KSSedlMGDB+fKK68UAgEAAADgdVD3APipT30qX/ziF/PSSy91fMLv1rR/CMjSpUvzpS99KR/4wAeyYcOGei8HAAAAABpaXQPgfffdlx/96Eep1Wrp1q1b/s//+T95+OGHt7rv3Xffncsuuyy9e/dOrVbLPffck6985Sv1XA4AAAAANLy6BsAf/ehHSZKePXvm4Ycfzle+8pUccsghW933wAMPzGWXXZYnnngihxxySGq1Wq699tq89NJL9VwSAAAAADS0ugbA3/zmNymVSjn99NNz8MEH79Qxe++9d374wx8mSVatWpWpU6fWc0kAAAAA0NDqGgAXLFiQJDsd/9q9973vTc+ePZMkf/rTn+q5JAAAAABoaHUNgD169EiSLFu27FWfwweBAAAAAED91DUADh8+PLVaLXfdddcuHTdz5sysWrUqSbLHHnvUc0kAAAAA0NDqGgA/9KEPJUkefvjhfO1rX9upY9atW5cLLrggSVIqlTJ27Nh6LgkAAAAAGlpdA+D555+fvfbaK0ly2WWX5dhjj81tt9221U/2XbNmTX72s5/l3e9+d+6///6USqV84hOfcAUgAAAAANRRUz1P1rNnz0yePDljx47N8uXLM3Xq1EydOjVNTU3Zc889M2DAgHTv3j1LlizJ008/nY0bNyZJarVaDjnkkFxzzTX1XA4AAAAANLy6XgGYJCNHjsz06dPz7ne/O7VaLbVaLRs2bMhzzz2X3//+93nwwQfz5JNPZsOGDR3bTznllNx3333p169fvZcDAAAAAA2t7gEwSQ488MA8/PDDufvuu3P66adn6NChHbGv/Z999tknZ555ZqZNm5Zbbrkl/fv3fz2WAgAAAAANra63AL/SCSeckBNOOCFJsnHjxixbtiwbNmxI375907179479arVabrzxxtRqtZx00kkZOHDg67ksAAAAAGgYr8sVgFvT1NSUAQMGZI899tgs/iWbPv33c5/7XM4666zccsstb9SSAAAAAKDwXpcrAJcvX57//M//zLPPPpsNGzbscP958+altbU1pVIpy5Ytez2WBAAAAAANqe4B8L777stHPvKRtLa2vqrj3/Oe99R5RQAAAADQuOoaAFtbW3PqqafucvyrVCo58MADc8EFF2TMmDH1XBIAAAAANLS6PgPwxz/+ccetvGeccUaeeOKJvPjii/nsZz+bJHnve9+bv/zlL3nmmWfy0EMP5ctf/nJ69OiRrl275uqrr865555bz+UAAAAAQMOrawC8++67kyTDhw/P//2//zcHHXRQBg4cmK9+9atJkt/+9rfZbbfdsu++++aII47IP/3TP+W//uu/snHjxpx66ql55pln6rkcAAAAAGh4dQ2As2bNSqlUygc/+MHNvt+nT58MGjQotVotjzzyyGbbjjjiiHz2s5/NqlWrcsEFF9RzOQAAAADQ8OoaANuf/bfXXnttsW2//fZLksycOXOLbeecc06S5Je//GWef/75ei4JAAAAABpaXQNgt27dkiQbNmzYYtu+++6bJPnzn/+8xbYRI0aka9euqdVqmTZtWj2XBAAAAAANra4BcOjQoUmShx56aKvbarVaHn300a0vpLxpKfPmzavnkgAAAACgodU1AB533HGp1Wq5/fbbc9ddd2227X3ve1+S5JFHHslf/vKXzbbdf//9WbNmTZKke/fu9VwSAAAAADS0ugbAT3/602lubk61Ws3f/u3fZtSoUfnlL3+ZJPmbv/mbdO3aNdVqNR/60IfyyCOPZPny5bn33ntz1llndZzjve99bz2XBAAAAAANra4BcL/99su3v/3tJEmtVsv06dPz+9//Pkmy22675ZJLLkmtVsvjjz+eo446Kv369cvxxx+f5557LqVSKccee2xGjhxZzyUBAAAAQEOrawBMNl0F+MADD+STn/xkDjrooPTu3btj2yWXXJIxY8akVqtt8c/hhx+eSZMm1Xs5AAAAANDQml6Pk773ve/d6q28Xbp0yZQpU/Kzn/0sd911VxYsWJCWlpYcf/zx+eQnP5kuXbq8HssBAAAAgIb1ugTA7SmVSjnttNNy2mmnvdEvDQAAAAANp+63AAMAAAAAbx5v+BWAnam1tTW33nprZsyYkYULF6ZHjx7Zf//9c9JJJ+WII47Y5fM99NBDueOOO/Lcc89l7dq1GThwYI488siMHz8+ffr02eHxK1asyBlnnJHDDz88X/nKV7a77xNPPJFbb701f/nLX/LSSy+lX79+GTlyZMaPH5/dd999l9cOAAAAQGNomAA4f/78XHrppVm6dGnK5XL69euXNWvWZMaMGZkxY0bGjx+fs88+e6fPd8MNN+S2225LknTv3j29evXK/Pnzc8stt+T+++/P5Zdfnr333nu757j33ntTrVZ3+Fp33nlnfvSjHyVJunbtmr59+2bx4sX5z//8z9x///35P//n/+Sggw7a6bUDAAAA0DgaIgBWq9VceeWVWbp0aYYNG5aLLroogwcPTrVazX333ZfrrrsukydPzvDhwzNq1Kgdnu+BBx7IbbfdlnK5nHPPPTcnnXRSKpVKlixZkquvvjqzZs3KVVddlWuuuSaVSmWL41euXJkHHnhgpz71+KmnnsqPf/zjJMlHPvKRnHbaaWlubs6KFSvyve99L9OnT883vvGNXHfdddltt912/ZcDAAAAQKE1xDMAp02blmeffTbNzc255JJLMnjw4CRJuVzOmDFjcsIJJyTJTgW5Wq3Wsd+JJ56YcePGdUS+/v3758ILL0xTU1OeffbZPPDAA5sde8899+Tv//7vc/rpp+d73/te1q1bt8PXmzRpUmq1Wt797nfnk5/8ZJqbm5MkvXv3zuc+97n06dMnS5cuzd13373zvxAAAAAAGkZDBMAHH3wwSXLkkUdm4MCBW2wfPXp0kmTevHmZM2fOds81Z86czJ07N0kybty4Lbb3798/hx12WJJk+vTpm2176aWXsnbt2vTp0yd9+/ZNt27dtvtaK1euzGOPPZYk+cAHPrDF9m7duuW9733vVl8LAAAAAJIGCIDVajUzZ85Mkhx66KFb3WfYsGHp0qVLkk233G7PH/7whyRJS0vLNp/xN2LEiK2e65RTTsl//Md/dPwzfvz47b7WE088kWq1mnK5nEMOOWSr+xx44IFJkr/85S/ZsGHDds8HAAAAQOMpfABctmxZXnrppSTJXnvttdV9KpVKx5WBCxYs2O75nn/++e2eK0n22GOPJMnSpUt36jbfHb3WgAED0rVr163u0347c7VazYsvvviqXwsAAACAYip8AGyPf0nSp0+fbe7X/gEaq1at2qnz7cy5kmT16tU7tc5X+1q9evXq+HpHawcAAACg8RQ+AL48irV/gMbWNDVt+kDktra2nTrfzpxrZ863Pe3xsP325NfztQAAAAAopsIHwJcHsu3djtv+/LwdfTBH+/l25lw7c77taf904fXr129zn5dv29ZtwgAAAAA0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EwABAAAAoMAEQAAAAAAoMAEQAAAAAApMAAQAAACAAhMAAQAAAKDABEAAAAAAKDABEAAAAAAKTAAEAAAAgAITAAEAAACgwARAAAAAACgwARAAAAAACkwABAAAAIACEwABAAAAoMAEQAAAAAAoMAEQAAAAAApMAAQAAACAAhMAAQAAAKDABEAAAAAAKDABEAAAAAAKTAAEAAAAgAITAAEAAACgwARAAAAAACgwARAAAAAACkwABAAAAIACEwABAAAAoMAEQAAAAAAoMAEQAAAAAApMAAQAAACAAhMAAQAAAKDABEAAAAAAKDABEAAAAAAKTAAEAAAAgAITAAEAAACgwARAAAAAACgwARAAAAAACkwABAAAAIACEwABAAAAoMAEQAAAAAAoMAEQAAAAAApMAAQAAACAAhMAAQAAAKDABEAAAAAAKDABEAAAAAAKTAAEAAAAgAITAAEAAACgwARAAAAAACgwARAAAAAACkwABAAAAIACEwABAAAAoMAEQAAAAAAoMAEQAAAAAApMAAQAAACAAmvq7AW8kVpbW3PrrbdmxowZWbhwYXr06JH9998/J510Uo444ohdPt9DDz2UO+64I88991zWrl2bgQMH5sgjj8z48ePTp0+frR6zatWq3HHHHXnwwQfz4osvprm5Ofvss0/Gjh2bY489dqvHXHfddZkyZcp213L++efn+OOP3+WfAQAAAIBia5gAOH/+/Fx66aVZunRpyuVy+vXrlzVr1mTGjBmZMWNGxo8fn7PPPnunz3fDDTfktttuS5J07949vXr1yvz583PLLbfk/vvvz+WXX5699957s2OWL1+eSy+9NM8//3ySpH///lm/fn2eeOKJPPHEE3nkkUdy4YUXplze/MLMF154IUmy5557plQqbXU9PXv23Om1AwAAANA4GiIAVqvVXHnllVm6dGmGDRuWiy66KIMHD061Ws19992X6667LpMnT87w4cMzatSoHZ7vgQceyG233ZZyuZxzzz03J510UiqVSpYsWZKrr746s2bNylVXXZVrrrkmlUql47hrrrkmzz//fAYPHpwvfOELGTp0aJLkkUceyTe/+c08+OCDGTZsWD784Q9v9noLFixIU1NTvve9720RBwEAAABgexqiJk2bNi3PPvtsmpubc8kll2Tw4MFJknK5nDFjxuSEE05IkkyaNGmH56rVah37nXjiiRk3blxH5Ovfv38uvPDCNDU15dlnn80DDzzQcdyTTz6ZGTNmJEkuvPDCjviXJO95z3ty2mmnJUluueWWrFu3rmPbhg0bsmTJkuy+++7iHwAAAAC7rCGK0oMPPpgkOfLIIzNw4MAtto8ePTpJMm/evMyZM2e755ozZ07mzp2bJBk3btwW2/v375/DDjssSTJ9+vQt1vD2t789w4cP3+YaVq5cmccee6zj+y+++GKq1Wr22GOP7a4LAAAAALam8AGwWq1m5syZSZJDDz10q/sMGzYsXbp0SZI89dRT2z3fH/7whyRJS0vLFs/4azdixIgtzvX4449vdw0tLS0dVya+/Lj25/+1bwMAAACAXVH4ZwAuW7YsL730UpJkr7322uo+lUolAwcOzPz587NgwYLtnq/9Azy2da4kHVfrLV26NOvWrUvXrl07jttWNEw2Rb4FCxZstob2ANi1a9d8//vfz4wZM7J06dJ069Yt+++/f4477rgcffTR210zAAAAAI2r8AGwPf4lSZ8+fba532677ZYkWbVq1U6db2fOlSSrV69OtVrNxo0bd3hcr169tlhDewC85ZZbOvbp27dvlixZksceeyyPPfZYpk2blosuuqjjKkYAAAAAaFf4APjymNbc3LzN/ZqaNv0q2tradup8O3Ou9vOtXr2647+3F+m2tob2qwGHDBmSiRMn5qCDDkqy6VmBN998cyZPnpzf/va3+fGPf5xPf/rT2107AAAAAI2n8AHw5THu5Z+u+0obNmxIknTr1m2nzrcz52o/X/vVf0myfv36bR7Xvq1r164d3/vgBz+Y0aNH513vetdmVxbutttuOeuss9LU1JSbb745U6ZMycc//vG0tLRsd/0AAAAANJbCB8D222qT7d/eu3LlyiTZYUDb2m262zpXc3NzevbsmY0bN6ZcLqdare7Ucf369ev43jvf+c7trufEE0/MzTffnGq1mqeeeipHHXXUVve78cYbM2nSpG2e59RTT82ZZ5653dd6qyiXyx3/FkQbU6lUSrLplvtardbJq6EzmAOYAyRmAWYB5gDmAJuYBQ0QAAcNGpSmpqZs3Lgx8+fP77iF9uXa2tqyePHiJNv/kI4k2XPPPZMk8+fP3+Y+L774YpJNHxRSKpXSpUuXDBo0KAsWLNip43a0hpfr3bt3x9cvv/LwlVatWpWFCxduc/vq1atTqVR2+nXfCkqlUuF+JnZN+5CncZkDmAMkZgFmAeYA5gCbNPIsKHwArFQqOeCAAzJz5szMnDkzY8eO3WKfp59+Ohs2bEi5XN5qIHy59u2LFi3KokWLMnDgwC32+eMf/5gkOeSQQzq+d+CBB2bBggWZOXPmVs/b2tra8by/9uOeeOKJ3HfffWlpacmECRO2etzcuXM7vh48ePA2192zZ88MGjRom9t79Oixw+cfvlWUy+WUSqXUarVUq9XOXg6doFQqdVx162/5GpM5gDlAYhZgFmAOYA6wSdFmwauJmIUPgEly9NFHZ+bMmZk+fXrOOuusza6aS5I777wzSTJy5Mgttr3SwQcfnAEDBmTx4sW56667trhtdu7cuXn00UeTJKNHj95sDffdd19mzpyZ559/Pm9729s2O+4///M/k2z6sI+hQ4cm2fQG/fWvf51yuZxjjz224+rDl5s8eXKSZMCAAR3Hbc2ECRO2GRGTZPHixWltbd32D/4W0tLSkkqlkmq1WpifiV1TqVTS0tKS5cuXFyZss2vMAcwBErMAswBzAHOATYo2CwYMGLDLxzTENbBjxozJHnvskTVr1uTrX/96lixZkmTTh25MmjQpU6dOTVNTU84444yOY2bPnp2JEydm4sSJmT17dsf3K5VKPvaxjyXZFN/uueeejr9FeOaZZ3LFFVekWq1m1KhRGTZsWMdxI0eOzEEHHZRqtZp//ud/7rhyr62tLXfffXd+/vOfJ0nOOuusjmMOPPDADBkyJNVqNVdccUWeeuqpjm1r167NTTfdlKlTpyZJTj/99Ia9jBUAAACAbWuIKwCbm5tz8cUX57LLLsusWbNyzjnnpH///lmxYkXWrVuXcrmciRMnZsiQIR3HrFu3LvPmzev4+uWOP/74zJ49O1OmTMm1116b66+/Pt26desIi8OHD8955523xTr+8R//MV/84hfz/PPP5zOf+Uz69++f1atXZ/Xq1UmST3ziE3nXu97VsX+pVMrFF1+cL3/5y3n++edz4YUXpnfv3unevXuWLFnS8enCJ598csaMGVPfXxoAAAAAhdAQATBJhg4dmmuuuSY333xzfve736W1tTW9evXKyJEjM378+IwYMWKXznf++efnsMMOy9133505c+Zk1apVGTJkSI455piMGzcuXbt23eKYgQMH5tvf/nZuvfXW/OY3v8mi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zujsJQAAAAC86TXteBc6U69evTq+3t7tvStXrkyStLS0bHX7jTfemEmTJm3z+FNPPTVnnnnmq1xl57j77rt3+Zht/X4ollKplGTTbfO1Wq2TV0NnKJfLHf/2v/vGZA6QmAWYBZgDmANsYhYIgG96gwYNSlNTUzZu3Jj58+fnoIMO2mKftra2LF68OEmy9957b/U8q1atysKFC7f5OqtXr06lUqnPot/EXnrppfTt27ezl8EbpH3I07hKpVJDzDa2zRwgMQswCzAHMAfYpJFngQD4JlepVHLAAQdk5syZmTlzZsaOHbvFPk8//XQ2bNiQcrm81UCYJD179sygQYO2+To9evR4yz0/sHv37lmzZs0uHdOrV6+33M/JriuVSimXy6lWq/6Wr0GVy+WUSqXUarVUq9XOXg6dwBwgMQswCzAHMAfYpGiz4NVETAHwLeDoo4/OzJkzM3369Jx11lnp3bv3ZtvvvPPOJMnIkSO32NZuwoQJmTBhwjZfY/HixWltba3fot8Ajz/+eIYPH75Lx7zVfkZenUqlkpaWlixfvlzwbVAtLS2pVCqpVqv+d9+gzAESswCzAHMAc4BNijYLBgwYsMvHuAb2LWDMmDHZY489smbNmnz961/PkiVLkiTr16/PpEmTMnXq1DQ1NTXch2Ls6q28b3/721+fhQAAAAC8ibkC8C2gubk5F198cS677LLMmjUr55xzTvr3758VK1Zk3bp1KZfLmThxYoYMGdLZS33D/elPf9rpqwAffPDB13k1AAAAAG8+rgB8ixg6dGiuueaavP/978+AAQOybNmy9OzZM+973/vyz//8zznuuOM6e4mdom/fvvnTn/603X0qlUoWLVr0Bq0IAAAA4M3FFYBvIf3798+nPvWpzl7Gm07fvn2zaNGiLFu2LAcccEDHAz133333PPHEE528OgAAAIDO5QpACqNv37558cUXs3HjxtRqtcybN6+zlwQAAADQ6QRAAAAAACgwARAAAAAACkwABAAAAIACEwABAAAAoMAEQAAAAAAoMAEQAAAAAApMAAQAAACAAhMAAQAAAKDABEAAAAAAKDABEAAAAAAKTAAEAAAAgAITAAEAAACgwARAAAAAACgwARAAAAAACkwABAAAAIACEwABAAAAoMAEQAAAAAAoMAEQAAAAAApMAAQAAACAAhMAAQAAAKDABEAAAAAA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", - "text/plain": [ - "
" - ] - }, - "metadata": { - "image/png": { - "height": 480, - "width": 640 - } - }, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "
" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "plot_data_embo = pd.DataFrame(zip(*results[0:2]), columns=[\"rate\", \"accuracy\"])\n", - "# Lol, embo sucks\n", - "(\n", - " pn.ggplot(\n", - " plot_data_embo,\n", - " pn.aes(x=\"rate\", y=\"accuracy\"),\n", - " ) \n", - " + pn.geom_point() \n", - " + pn.geom_line()\n", - " + pn.xlim([0,8])\n", - " + pn.ylim([0,0.025])\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Sanity check compare the prior and meaninn dists" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "ultk", - "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.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/src/examples/indefinites/outputs/explored_languages.yml b/src/examples/indefinites/outputs/explored_languages.yml index f3acc430..55e26e5d 100644 --- a/src/examples/indefinites/outputs/explored_languages.yml +++ b/src/examples/indefinites/outputs/explored_languages.yml @@ -51,8 +51,8 @@ - Rminus name: explored-4 type: explored -- comm_cost: 0.26521990740740764 - complexity: 19 +- comm_cost: 0.55 + complexity: 7 expressions: - Nplus - _or(K+, Rplus) @@ -50464,7 +50464,16 @@ - Rminus name: explored-4958 type: explored -- comm_cost: 0.3659722222222226 +- comm_cost: 0.5552083333333335 + complexity: 4 + expressions: + - K+ + - N+ + - R+ + - SE- + name: explored-14886 + type: explored +- comm_cost: 0.6148437500000001 complexity: 13 expressions: - Nplus @@ -54582,7 +54591,57 @@ - _and(_or(K+, Sminus), _not(_and(Nminus, Rplus))) name: explored-5365 type: explored -- comm_cost: 0.5536458333333335 +- comm_cost: 0.5868055555555556 + complexity: 9 + expressions: + - K+ + - N+ + - R- + - and(S-, SE-) + - or(K+, K-) + name: explored-15053 + type: explored +- comm_cost: 0.5895833333333336 + complexity: 9 + expressions: + - R+ + - and(SE-, or(K+, S-)) + - or(K+, N+) + name: explored-15054 + type: explored +- comm_cost: 0.5772569444444446 + complexity: 11 + expressions: + - R+ + - R- + - SE- + - and(N-, or(K+, SE+)) + - or(K+, N+) + name: explored-15055 + type: explored +- comm_cost: 0.4932291666666667 + complexity: 9 + expressions: + - R+ + - R+ + - R- + - SE- + - and(SE-, or(K+, S-)) + name: explored-15056 + type: explored +- comm_cost: 0.5522916666666668 + complexity: 13 + expressions: + - K- + - N+ + - R- + - S+ + - and(N-, R+) + - and(S-, SE-) + - or(K+, S-) + name: explored-15057 + type: explored +- comm_cost: 0.4208333333333336 complexity: 8 expressions: - SEminus @@ -134426,7 +134485,209 @@ - Rminus name: explored-13245 type: explored -- comm_cost: 0.3215277777777781 +- comm_cost: 0.7756944444444445 + complexity: 12 + expressions: + - SE- + - and(K-, not(R+)) + - and(or(K+, S-), or(SE-, N+)) + name: explored-15786 + type: explored +- comm_cost: 0.5359375000000002 + complexity: 18 + expressions: + - K+ + - K+ + - R- + - S+ + - and(K-, or(S+, SE+)) + - and(N-, R+) + - and(S-, SE-) + - or(K+, K-) + name: explored-15787 + type: explored +- comm_cost: 0.5833333333333333 + complexity: 9 + expressions: + - N+ + - R- + - S+ + - and(S-, SE-) + - or(SE-, N+) + name: explored-15788 + type: explored +- comm_cost: 0.3750000000000002 + complexity: 20 + expressions: + - N+ + - R- + - S+ + - and(K-, or(S+, N+)) + - and(N-, R+) + - and(S-, SE-) + - and(or(K+, S-), not(R-)) + name: explored-15789 + type: explored +- comm_cost: 0.08125000000000027 + complexity: 13 + expressions: + - N+ + - N+ + - R- + - S+ + - and(N-, R+) + - and(N-, R+) + - and(S-, SE-) + name: explored-15790 + type: explored +- comm_cost: 0.6884375000000001 + complexity: 14 + expressions: + - N- + - R+ + - and(K-, or(SE-, N+)) + - and(or(K+, S-), or(SE-, N+)) + name: explored-15791 + type: explored +- comm_cost: 0.4036458333333336 + complexity: 13 + expressions: + - K+ + - N+ + - S+ + - and(N-, R+) + - and(N-, not(R-)) + - and(S-, SE-) + name: explored-15792 + type: explored +- comm_cost: 0.6621875000000002 + complexity: 6 + expressions: + - N+ + - R+ + - SE- + - or(K+, S-) + name: explored-15793 + type: explored +- comm_cost: 0.6614583333333335 + complexity: 5 + expressions: + - N- + - R+ + - R- + - SE+ + - SE- + name: explored-15794 + type: explored +- comm_cost: 0.6849907407407408 + complexity: 38 + expressions: + - K+ + - and(K-, or(S+, N+)) + - and(N-, or(K+, R+)) + - and(N-, or(K+, SE+)) + - and(S-, N-) + - and(or(K+, S-), not(R-)) + - or(K+, SE+) + - or(S+, SE+) + - or(and(K-, S+), or(N+, R-)) + name: explored-15795 + type: explored +- comm_cost: 0.6470486111111112 + complexity: 8 + expressions: + - R+ + - SE- + - and(and(K-, N-), not(R-)) + name: explored-15796 + type: explored +- comm_cost: 0.39333333333333353 + complexity: 13 + expressions: + - N+ + - R- + - and(K-, S+) + - and(N-, R+) + - and(S-, SE-) + - not(R-) + name: explored-15797 + type: explored +- comm_cost: 0.4570312500000002 + complexity: 9 + expressions: + - N+ + - R- + - SE- + - and(K-, N-) + - and(N-, R+) + name: explored-15798 + type: explored +- comm_cost: 0.7204166666666667 + complexity: 6 + expressions: + - K- + - K- + - R+ + - or(K+, N+) + name: explored-15799 + type: explored +- comm_cost: 0.5877430555555557 + complexity: 14 + expressions: + - N+ + - R- + - SE- + - and(N-, R+) + - and(N-, or(K+, S-)) + - or(K+, S-) + name: explored-15800 + type: explored +- comm_cost: 0.7388680555555557 + complexity: 17 + expressions: + - N- + - and(K-, N-) + - and(K-, S+) + - and(K-, not(R-)) + - and(and(K-, N-), not(R-)) + name: explored-15801 + type: explored +- comm_cost: 0.4583912037037039 + complexity: 16 + expressions: + - N+ + - R- + - S+ + - and(N-, R+) + - and(S-, not(R-)) + - and(and(K-, N-), not(R-)) + name: explored-15802 + type: explored +- comm_cost: 0.44930555555555574 + complexity: 16 + expressions: + - K+ + - N+ + - N+ + - R- + - SE- + - and(K-, N-) + - and(K-, or(S+, N+)) + - and(N-, R+) + name: explored-15803 + type: explored +- comm_cost: 0.35451388888888924 + complexity: 18 + expressions: + - K+ + - R- + - SE- + - and(N-, R+) + - and(S-, or(SE-, N+)) + - or(and(K-, S+), or(N+, R-)) + name: explored-15804 + type: explored +- comm_cost: 0.5827256944444446 complexity: 10 expressions: - _and(K-, _not(Rplus)) diff --git a/src/examples/indefinites/outputs/natural_languages.yml b/src/examples/indefinites/outputs/natural_languages.yml index 1f4fda16..07c1bbaf 100644 --- a/src/examples/indefinites/outputs/natural_languages.yml +++ b/src/examples/indefinites/outputs/natural_languages.yml @@ -252,7 +252,7 @@ - Rminus name: french type: natural -- comm_cost: 0.6458333333333335 +- comm_cost: 0.7166666666666668 complexity: 4 expressions: - 32k @@ -321,9 +321,10 @@ - comm_cost: 0.6144097222222223 complexity: 5 expressions: - - 23b - - 23he - - 23hi + - 24a + - 24b + - 24bd + - 24e lot_expressions: - SEminus - _and(Nminus, Sminus) diff --git a/src/examples/indefinites/outputs/plot.png b/src/examples/indefinites/outputs/plot.png index 6d387ad4..db0cc7dc 100644 Binary files a/src/examples/indefinites/outputs/plot.png and b/src/examples/indefinites/outputs/plot.png differ diff --git a/src/examples/modals/__init__.py b/src/examples/modals/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/examples/modals/data/grammar.yaml b/src/examples/modals/data/grammar.yaml new file mode 100644 index 00000000..36bb8971 --- /dev/null +++ b/src/examples/modals/data/grammar.yaml @@ -0,0 +1,55 @@ +start: bool +rules: +# boolean / propositional logic rules +- lhs: bool + rhs: + - bool + - bool + name: "and" + func: | + lambda p1 , p2 : p1 and p2 +- lhs: bool + rhs: + - bool + - bool + name: "or" + func: | + lambda p1 , p2 : p1 or p2 +- lhs: bool + rhs: + - bool + name: "not" + func: | + lambda p : not p +# primitive / feature rules +# forces +- lhs: bool + rhs: + name: "weak" + func: | + lambda point: point.force == "weak" + +- lhs: bool + rhs: + name: "strong" + func: | + lambda point: point.force == "strong" + +# flavors +- lhs: bool + rhs: + name: "epistemic" + func: | + lambda point: point.flavor == "epistemic" + +- lhs: bool + rhs: + name: "deontic" + func: | + lambda point: point.flavor == "deontic" + +- lhs: bool + rhs: + name: "circumstantial" + func: | + lambda point: point.flavor == "circumstantial" \ No newline at end of file diff --git a/src/examples/modals/data/universe.csv b/src/examples/modals/data/universe.csv new file mode 100644 index 00000000..31a483c4 --- /dev/null +++ b/src/examples/modals/data/universe.csv @@ -0,0 +1,7 @@ +name,force,flavor,probability +weak+epistemic,weak,epistemic,0.1389370306181398 +weak+deontic,weak,deontic,0.0420277296360485 +weak+circumstantial,weak,circumstantial,0.1429809358752166 +strong+epistemic,strong,epistemic,0.1042749855574812 +strong+deontic,strong,deontic,0.2537550548815713 +strong+circumstantial,strong,circumstantial,0.3180242634315424 diff --git a/src/examples/modals/util.py b/src/examples/modals/util.py new file mode 100644 index 00000000..871c5e07 --- /dev/null +++ b/src/examples/modals/util.py @@ -0,0 +1,177 @@ +import requests +import yaml +import pandas as pd +from tqdm import tqdm +from typing import Any + +from ultk.language.semantics import FrozenDict, Universe +from ultk.language.language import Expression, Meaning, Language + + +ALLOWED_REFERENCE_TYPES = ["paper-journal", "elicitation"] +REFERENCE_GRAMMAR = "reference-grammar" +REFERENCE_TYPES = [REFERENCE_GRAMMAR] + ALLOWED_REFERENCE_TYPES +REFERENCE_TYPE_KEY = "Reference-type" +LANGUAGE_IS_COMPLETE_KEY = "Complete-language" +FAMILY_KEY = "Family" + +METADATA_FN = "metadata.yml" +MODALS_FN = "modals.csv" + +API_URL = "https://api.github.com/repos/nathimel/modals-effcomm/contents/data/natural_languages?ref=main" + +UNIVERSE = Universe.from_csv("./data/universe.csv") + + +def load_natural_languages(universe: Universe = UNIVERSE) -> list[Language]: + return dataframes_to_languages(get_modals_data(), universe) + + +def get_modals_data() -> dict[pd.DataFrame]: + # Make the request + response = requests.get(API_URL) + if response.status_code != 200: + raise Exception( + f"Failed to fetch folder contents: {response.status_code}\n{response.text}" + ) + + # Parse the response JSON + contents = response.json() + + # Filter for subfolders (type == 'dir') + subfolders = [item["name"] for item in contents if item["type"] == "dir"] + base_raw_link = f"https://raw.githubusercontent.com/nathimel/modals-effcomm/refs/heads/main/data/natural_languages" + + path_map = { + subfolder: { + "modals": f"{base_raw_link}/{subfolder}/modals.csv", + "metadata": f"{base_raw_link}/{subfolder}/metadata.yml", + } + for subfolder in subfolders + } + + dataframes = load_csvs(path_map) + return dataframes + + +def load_csvs(language_dirs: dict[str, dict[str, str]]) -> dict[str, pd.DataFrame]: + dataframes = dict() + print(f"Loading modals data from {API_URL}") + for lang in tqdm(language_dirs): + # Ensure that is one of allowed reference types + metadata_path = language_dirs[lang]["metadata"] + response = requests.get(metadata_path) + + # Parse the YAML content as dict + try: + metadata = yaml.safe_load(response.text) + except yaml.YAMLError as e: + raise Exception(f"Error parsing YAML: {e}") + + reference_type = metadata[REFERENCE_TYPE_KEY] + # must be paper-journal or elicitation + if reference_type in ALLOWED_REFERENCE_TYPES: + modals_fn = language_dirs[lang]["modals"] + if FAMILY_KEY not in metadata: + pass + dataframes[lang] = pd.read_csv(modals_fn) + else: + # Skip reference-grammar obtained data if incomplete. + print(f"Data for {lang} is of type {reference_type}; skipping.") + + return dataframes + + +def process_can_express(val: Any, can_express: dict = {True: [1], False: ["?", 0]}): + """For an observation of whether a modal can_express a force-flavor pair, interpret ? as 1. + + Note that the existence of ? in the csv confuses pandas, and causes the type of can_express to be str. + + Args: + val: the value of the can_express column, possibly an int or str + + Returns: + boolean representing 'yes' if the value should be interpreted as True, False otherwise + """ + if isinstance(val, int): + return val + if val.isnumeric(): + return bool(int(val)) + + # different results depending on interpretation of '?' + if val in can_express[True]: + return True + return False + + +def dataframes_to_languages( + dataframes: dict[str, pd.DataFrame], universe: Universe +) -> list[Language]: + """Convert a list of dataframes to a list of ultk Languages.""" + languages: list[Language] = [] + for language_name, df in dataframes.items(): + print(f"Adding {language_name}") + lang = dataframe_to_language(df, language_name, universe) + if lang is not None: + languages.append(lang) + return languages + + +def dataframe_to_language( + df: pd.DataFrame, + language_name: str, + universe: Universe, +) -> Language: + """Construct a ultk Language from a dataframe of (expression, meaning) observations by iterating over each row and indicating whether the expression can express the meaning.""" + forces = set(ref.force for ref in universe) + flavors = set(ref.flavor for ref in universe) + + vocabulary = {} + + # only look at positive polarity modals + if "polarity" in df: + df_positive = df[df["polarity"] == "positive"] + else: + df_positive = df + + # add each observation + for _, row in df_positive.iterrows(): + modal = row["expression"] + # initialize an expression's set of meanings + if modal not in vocabulary: + vocabulary[modal] = set() + + # Add only the flavors specified as possible for the experiment + if row["flavor"] in flavors and row["force"] in forces: + if process_can_express(row["can_express"]): + observation = f"{row['force']}+{row['flavor']}" + vocabulary[modal].add(observation) + + # Convert vocabulary into list of Expressions + experiment_vocabulary = [] + for modal in vocabulary: + form = modal + meaning = Meaning( + mapping=FrozenDict( + {referent: referent.name in vocabulary[modal] for referent in universe} + ), + universe=universe, + ) + + if ( + meaning.is_uniformly_false() + ): # often there will be no usable referents due to can_express being False, above + continue + # search for a matching recorded meaning + experiment_vocabulary.append( + Expression( + form, + meaning, + ) + ) + + if experiment_vocabulary: + return Language( + expressions=experiment_vocabulary, name=language_name, natural=True + ) + return diff --git a/src/examples/signaling_game/README.md b/src/examples/signaling_game/README.md deleted file mode 100644 index 55d26892..00000000 --- a/src/examples/signaling_game/README.md +++ /dev/null @@ -1,74 +0,0 @@ -# Signaling game - -## Introduction - -A signaling game is a an evolutionary game theoretic model, wherein a Sender and Receiver aim to maximize a joint payoff by coordinating on signals. When strategies evolve towards such coordination over repeated plays of the game, this can model the emergence of communication. - -This example repo exists to demo simulations of the evolution of meaning using very simple reinforcement learning and ULTK tools. We use various ultk modules for the game objects and for analysis (esp. [ultk.effcomm.agent](../../ultk/effcomm/agent.py)). - -See a more scaled-up [example](https://github.com/nathimel/rdsg) of signaling game simulations using altk. - -## Running a simulation - -To run a basic signaling game simulation, use the following command: - -`python3 main.py` - -or - -`./run_example.sh` - -This will produce results in the folders `outputs/default` or `outputs/example`, respectively. They include plots, weights and the resulting 'languages'. - -## Experimenting - -
- Adjusting parameters and using ULTK more generally to do signaling games. - - -### Existing game parameters - -Run different games by supplying command line arguments, described in `python3 main.py -h`. One can vary, for example: - -- the number of states -- the number of signals -- the number of rounds in a game -- the learning rate - -### Using ULTK for signaling games - -The most general aspects of the communicative agents, measures of communicative success and the language primitives are implemented in ULTK. Some signaling-specific concepts and wrappers implemented in the `.py` files. - -This example is limited for simplicity, but is also intended to be an recylable outline for additional analyses, such as: - -- extending to more than two agents -- defining more powerful learning agents -- defining different or multiple objectives besides perfect recovery of atomic states -- exploring different evolutionary trajectories of languages in the 2D trade-off space. - -
- -## Links - -Here are a few links to more information about signaling games. -
- -Links - -
- -- The idea of a signaling game was introduced by David Lewis in his book, [Convention](https://www.wiley.com/en-us/Convention:+A+Philosophical+Study-p-9780631232568). -- A gentle but profound introduction to signaling games research is Brian Skyrms' book, [Signals](https://oxford.universitypressscholarship.com/view/10.1093/acprof:oso/9780199580828.001.0001/acprof-9780199580828). -- [EGG](https://github.com/facebookresearch/EGG) is a software library for emergent communication and includes a neural agent signaling game [example](https://github.com/facebookresearch/EGG/tree/main/egg/zoo/signal_game). - -References - -> Kharitonov, Eugene, Roberto Dessì, Rahma Chaabouni, Diane Bouchacourt, and Marco Baroni. 2021. “EGG: A Toolkit for Research on Emergence of LanGuage in Games.” . - -> Lazaridou, Angeliki, Alexander Peysakhovich, and Marco Baroni. 2017. “Multi-Agent Cooperation and the Emergence of (Natural) Language,” April. . - -> Lewis, David K. (David Kellogg). 1969. “Convention: A Philosophical Study.” Cambridge: Harvard University Press. - -> Skyrms, Brian. 2010. Signals: Evolution, Learning, and Information. Oxford: Oxford University Press. . - -
diff --git a/src/examples/signaling_game/__init__.py b/src/examples/signaling_game/__init__.py deleted file mode 100644 index 87b6181a..00000000 --- a/src/examples/signaling_game/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -"""Example demonstrating how to extend the objects and tools in the `ultk.language` and `ultk.effcomm` modules to a specific use case. - -This example implements a dynamic Lewis-Skyrms 'atomic' signaling game. Two players, Sender and Receiver learn to coordinate on a shared language via rudimentary reinforcement learning. The evolution of meaning conventions is interesting from the efficient communication perspective because we can track the trajectory of the informativity and the cognitive cost of the players' languages. - -The `languages` file implements an extension of the fundamental ULTK language, expression, and meaning abstractions into the signaling game use case. - -The `agents` file shows how to extend the basic `ultk.effcomm.agent` objects to a dynamic learning agents. - -The driver script `main` invokes these implementations and runs the simulation of the learning dynamics on the signaling game. These details are implemented in the `learning` and `game` files, respectively. - -See the [README](https://github.com/CLMBRs/altk/tree/main/src/examples/signaling_game#readme) for more information. -""" diff --git a/src/examples/signaling_game/agents.py b/src/examples/signaling_game/agents.py deleted file mode 100644 index 9aa8efc3..00000000 --- a/src/examples/signaling_game/agents.py +++ /dev/null @@ -1,46 +0,0 @@ -from ultk.effcomm.agent import CommunicativeAgent, Speaker, Listener -from ultk.language.semantics import Meaning -from languages import Signal, SignalMeaning, SignalingLanguage -from typing import Any - - -class Sender(Speaker): - """A Sender agent in a signaling game chooses a signal given an observed state of nature, according to P(signal | state).""" - - def __init__(self, language: SignalingLanguage, weights=None, name: str = None): - super().__init__(language, name=name) - self.shape = (len(self.language.universe), len(self.language)) - self.initialize_weights(weights) - - def encode(self, state: Meaning) -> Signal: - """Choose a signal given the state of nature observed, e.g. encode a discrete input as a discrete symbol.""" - index = self.sample_strategy(index=self.referent_to_index(state)) - return self.index_to_expression(index) - - def strategy_to_indices(self, strategy: dict[str, Any]) -> tuple[int]: - """Map a state -> signal strategy to `(referent, expression)` indices.""" - return ( - self.referent_to_index(strategy["referent"]), - self.expression_to_index(strategy["expression"]), - ) - - -class Receiver(Listener): - """A Receiver agent in a signaling game chooses an action=state given a signal they received, according to P(state | signal).""" - - def __init__(self, language: SignalingLanguage, weights=None, name: str = None): - super().__init__(language, name=name) - self.shape = (len(self.language), len(self.language.universe)) - self.initialize_weights(weights=weights) - - def decode(self, signal: Signal) -> SignalMeaning: - """Choose an action given the signal received, e.g. decode a target state given its discrete encoding.""" - index = self.sample_strategy(index=self.expression_to_index(signal)) - return self.index_to_referent(index) - - def strategy_to_indices(self, strategy: dict[str, Any]) -> tuple[int]: - """Map a signal -> state strategy to `(expression, referent)` indices.""" - return ( - self.expression_to_index(strategy["expression"]), - self.referent_to_index(strategy["referent"]), - ) diff --git a/src/examples/signaling_game/bounds.py b/src/examples/signaling_game/bounds.py deleted file mode 100644 index c271492a..00000000 --- a/src/examples/signaling_game/bounds.py +++ /dev/null @@ -1,18 +0,0 @@ -import numpy as np - -from game import SignalingGame -from rdot.distortions import hamming -from rdot.ba import RateDistortionOptimizer - -# Generate a hamming bound -def generate_hamming_bound(sg: SignalingGame) -> list[tuple[float]]: - """Given an atomic signaling game, return a list of (rate, distortion) pairs corresponding to the rate distortion bound on the game.""" - state_arr = np.arange(len(sg.states)) - dist_mat = hamming(x=state_arr, y=state_arr) - - optimizer = RateDistortionOptimizer( - px=sg.prior, - dist_mat=dist_mat, - betas=np.logspace(-2, 10, 100) - ) - return [(result.rate, result.distortion) for result in optimizer.get_results() if result is not None] \ No newline at end of file diff --git a/src/examples/signaling_game/game.py b/src/examples/signaling_game/game.py deleted file mode 100644 index 06c13d83..00000000 --- a/src/examples/signaling_game/game.py +++ /dev/null @@ -1,87 +0,0 @@ -import numpy as np -from languages import State, Signal -from agents import Sender, Receiver -from typing import Callable - - -class SignalingGame: - """A signaling game is a tuple $(S, M, A, \sigma, \rho, u, P)$ of states, messages, acts, a sender, a receiver, a utility function, and a distribution over states. The sender and receiver have a common payoff, given by a communicative success function. - - In this signaling game, we identify the acts with the states. For more detail on the communicative success function, see ultk.effcomm.informativity.communicative_success. - """ - - def __init__( - self, - states: list[State], - signals: list[Signal], - sender: Sender, - receiver: Receiver, - utility: Callable[[State, State], int], - prior: np.ndarray, - ) -> None: - """Initialize a signaling game. - - Args: - states: the list of states of 'nature' that function as both input to the sender, and output of the receiver - - signals: the objects (which inherit from Expression) produced by the sender, and are input to receiver - - sender: a distribution over signals, given states - - receiver: a distribution over states, given signals - - utility: a measure of the pairwise utility of sender inputs and receiver outputs, typically the indicator function. - - prior: an array specifying the probability distribution over states, which can represent the objective frequency of certain states in nature, or the prior belief about them. - """ - # Main game parameters - self.states = states - self.signals = signals - self.sender = sender - self.receiver = receiver - self.utility = utility - self.prior = prior - - # measurements to track throughout game - self.data = {"accuracy": [], "complexity": []} - - -########################################################################## -# Helper functions -########################################################################## - - -def indicator(input: State, output: State) -> int: - return input == output - - -def distribution_over_states( - num_states: int, type: str = "deterministic", alpha: np.ndarray = None -): - """Generate a prior probability distribution over states. - - Varying the entropy of the prior over states models the relative communicative 'need' of states. A natural interpretation is also that these needs reflect objective environmental or cultural pressures that cause certain objects to become more frequent-- and so more useful-- for communication. - - Args: - num_states: the size of the distribution - - type: {'deterministic', 'random'} a str representing whether to generate a uniform prior or randomly sample one from a Dirichlet distribution. - - alpha: parameter of the Dirichlet distribution to sample from, of shape `(num_states)`. Each element must be greater than or equal to 0. By default set to all ones. Varying this parameter varies the entropy of the prior over states. - - Returns: - sample: np.ndarray of shape `(num_states)` - """ - if type == "deterministic": - sample = ( - np.ones(num_states) / num_states - ) # TODO: find how to generate uniform with alpha param in dirichlet - elif type == "random": - if alpha is None: - alpha = np.ones(num_states) - sample = np.random.default_rng().dirichlet(alpha=alpha) - else: - raise ValueError( - f"The argument `prior_type` can take values {{'uniform', 'random'}}, but received {type}." - ) - return sample diff --git a/src/examples/signaling_game/languages.py b/src/examples/signaling_game/languages.py deleted file mode 100644 index 4ef3e0bf..00000000 --- a/src/examples/signaling_game/languages.py +++ /dev/null @@ -1,114 +0,0 @@ -from typing import Iterable -from ultk.language.language import Language, Expression -from ultk.language.semantics import Universe, Meaning, Referent - - -class State(Referent): - """In a simple Lewis-Skyrms signaling game, a state represents the observed input to a Sender and the chosen action of a Receiver; in both cases the state can be naturally interpreted as a meaning. Then the signaling game is about Receiver guessing Sender's intended meanings.""" - - def __init__(self, name: str) -> None: - """ - Args: - name: a str representing a single state in the universe. - """ - super().__init__(name) - - def __str__(self) -> str: - return self.name - - def __hash__(self) -> int: - return hash(self.name) - - def __eq__(self, __o: object) -> bool: - return self.name == __o.name - - -class StateSpace(Universe): - """The StateSpace represents the agents' environment.""" - - def __init__(self, states: Iterable[State]): - """Construct a universe shared by all agents in a signaling game. - - Args: - states: the list of _all_ states that can be referred to. - """ - super().__init__(states) - - def __hash__(self) -> int: - return hash(tuple(sorted(state.name for state in self.referents))) - - -class SignalMeaning(Meaning): - def __init__(self, states: list[State], universe: StateSpace) -> None: - """Construct the meaning of a signal as the set of states it can refer to. - - In ultk, Meanings can be generalized from a set of referents to distributions over those referents. by default, we let be a peaked distribution over a single point, where one state has probability 1.0, and all others 0.0. - - Args: - - states: the list of atomic states that a signal can be used to communicate. - - universe: the semantic space that the signal meaning is a subset of. - """ - super().__init__(states, universe) - - def yaml_rep(self) -> dict: - """Convert to a dictionary representation of the meaning for compact saving to .yml files.""" - return [str(state) for state in self.referents] - - -class Signal(Expression): - """In the simple atomic signaling game, a signal is a single discrete symbol encoding one or more states. - - One of the senses in which the signaling game is 'atomic' is that the signals are atomic -- they do not encode any special structure (e.g. features such as size, color, etc.). The only information they can encode about the states of nature are their identity. - """ - - def __init__(self, form: str, meaning: SignalMeaning = None): - """A signal is characterized by its form and meaning. - - We treat signals as equal up to form, even they might communicate different meanings. Note the `__eq__` and `__hash__` implementations encode this choice. - - Args: - - form: a str representing the identity of the signal, e.g. the sound a Sender produces and a Receiver hears. - - meaning: a SignalMeaning representing the set of states the signal can be used to refer to. Default is None to reflect the idea that in signaling games, signals do not have a standing meaning until convention is achieved. - """ - super().__init__(form, meaning) - - def yaml_rep(self): - """Convert to a dictionary representation of the expression for compact saving to .yml files.""" - return {"form": self.form, "meaning": self.meaning.yaml_rep()} - - def __str__(self) -> str: - return self.form - - def __eq__(self, __o: object) -> bool: - return self.form == __o.form - - def __hash__(self) -> int: - return hash(self.form) - - -class SignalingLanguage(Language): - """In the simple atomic signaling game, a language is a list of signals and their associated states.""" - - def __init__( - self, - signals: list[Signal], - data: dict = {"complexity": None, "accuracy": None, "name": None}, - ): - super().__init__(signals, data=data) - - def yaml_rep(self) -> dict[str, dict]: - """Get a data structure for safe compact saving in a .yml file. - - A dict of the language name and its data. This data is itself a dict of a list of the expressions, and other data. - """ - data = { - self.data["name"]: { - "expressions": [e.yaml_rep() for e in self.expressions], - "data": self.data, # e.g., complexity and informativity - } - } - return data diff --git a/src/examples/signaling_game/learning.py b/src/examples/signaling_game/learning.py deleted file mode 100644 index ddc0ebd2..00000000 --- a/src/examples/signaling_game/learning.py +++ /dev/null @@ -1,71 +0,0 @@ -"""Simple Roth-Erev reinforcement learning dynamic for agents of a signaling game.""" - -import numpy as np -from ultk.effcomm.agent import CommunicativeAgent -from ultk.effcomm.informativity import communicative_success -from ultk.effcomm.rate_distortion import information_cond -from game import SignalingGame -from tqdm import tqdm -from typing import Any - - -def simulate_learning(g: SignalingGame, num_rounds: int, learning_rate=1.0) -> None: - """Simulate Roth-Erev reinforcement learning in the signaling game. - - Args: - num_rounds: the number of rounds to pay the signaling game. - - reward_amount: the amount to scale the utility function by, before rewarding agents with the result. - """ - - for _ in tqdm(range(num_rounds)): - # get input to sender - target = np.random.choice(a=g.states, p=g.prior) - - # record interaction - signal = g.sender.encode(target) - output = g.receiver.decode(signal) - amount = g.utility(target, output) * learning_rate - - # update agents - reward( - agent=g.sender, - strategy={"referent": target, "expression": signal}, - amount=amount, - ) - reward( - agent=g.receiver, - strategy={"referent": output, "expression": signal}, - amount=amount, - ) - - # track accuracy and complexity - g.data["accuracy"].append( - communicative_success( - speaker=g.sender, listener=g.receiver, utility=g.utility, prior=g.prior - ) - ) - g.data["complexity"].append( - information_cond(g.prior, g.sender.normalized_weights()) - ) - - return g - - -def reward(agent: CommunicativeAgent, strategy: dict[str, Any], amount: float) -> None: - """Reward an agent for a particular referent-expression behavior. - - In a signaling game, the communicative success of Sender and Receiver language protocols evolve under simple reinforcement learning dynamics. The reward function increments an agent's weight matrix at the specified location by the specified amount. - - Args: - strategy: a dict of the form {"referent": referent, "expression": Expression} - - amount: a positive number reprsenting how much to reward the behavior - """ - if set(strategy.keys()) != {"referent", "expression"}: - raise ValueError( - f"The argument `strategy` must take a dict with keys 'referent' and 'expression'. Received: {strategy.keys()}'" - ) - if amount < 0: - raise ValueError(f"Amount to reinforce weight must be a positive number.") - agent.weights[agent.strategy_to_indices(strategy)] += amount diff --git a/src/examples/signaling_game/main.py b/src/examples/signaling_game/main.py deleted file mode 100644 index de22f209..00000000 --- a/src/examples/signaling_game/main.py +++ /dev/null @@ -1,87 +0,0 @@ -import util -import vis -from agents import Receiver, Sender -from game import distribution_over_states, SignalingGame, indicator -from languages import State, StateSpace, Signal, SignalMeaning, SignalingLanguage -from learning import simulate_learning -from bounds import generate_hamming_bound - - -def main(args): - # load game settings - num_signals = args.num_signals - num_states = args.num_states - num_rounds = int(float(args.num_rounds)) - learning_rate = args.learning_rate - prior_type = args.distribution_over_states - seed = args.seed - - util.set_seed(seed) - - ########################################################################## - # Define game parameters - ########################################################################## - - # dummy names for signals, states - state_names = [f"state_{i+1}" for i in range(num_states)] - signal_names = [f"signal_{i+1}" for i in range(num_signals)] - - # Construct the universe of states, and language defined over it - universe = StateSpace(tuple([State(name=name) for name in state_names])) - - # All meanings are dummy placeholders at this stage, but they can be substantive once agents are given a weight matrix. - dummy_meaning = SignalMeaning(states=universe.referents, universe=universe) - signals = [Signal(form=name, meaning=dummy_meaning) for name in signal_names] - - # Create a seed language to initialize agents. - seed_language = SignalingLanguage(signals=signals) - sender = Sender(seed_language, name="sender") - receiver = Receiver(seed_language, name="receiver") - - # Construct a prior probability distribution over states - prior_over_states = distribution_over_states(num_states, type=prior_type) - - ########################################################################## - # Main simulation - ########################################################################## - - signaling_game = SignalingGame( - states=universe.referents, - signals=signals, - sender=sender, - receiver=receiver, - utility=lambda x, y: indicator(x, y), - prior=prior_over_states, - ) - signaling_game = simulate_learning(signaling_game, num_rounds, learning_rate) - - ########################################################################## - # Analysis - ########################################################################## - - accuracies = signaling_game.data["accuracy"] - complexities = signaling_game.data["complexity"] - languages = [ - agent.to_language( - # optionally add analysis data - data={"accuracy": accuracies[-1]}, - threshold=0.2, - ) - for agent in [sender, receiver] - ] - - util.save_weights(args.save_weights, sender, receiver) - util.save_languages(args.save_languages, languages) - - vis.plot_distribution(args.save_distribution, prior_over_states) - vis.plot_accuracy(args.save_accuracy_plot, accuracies) - vis.plot_complexity(args.save_complexity_plot, complexities) - vis.plot_tradeoff(args.save_tradeoff_plot, complexities, accuracies, generate_hamming_bound(signaling_game)) - - print("Done.") - - -if __name__ == "__main__": - args = util.get_args() - - main(args) diff --git a/src/examples/signaling_game/outputs/default/accuracy.png b/src/examples/signaling_game/outputs/default/accuracy.png deleted file mode 100644 index 2df5c86f..00000000 Binary files a/src/examples/signaling_game/outputs/default/accuracy.png and /dev/null differ diff --git a/src/examples/signaling_game/outputs/default/complexity.png b/src/examples/signaling_game/outputs/default/complexity.png deleted file mode 100644 index 7f5cded4..00000000 Binary files a/src/examples/signaling_game/outputs/default/complexity.png and /dev/null differ diff --git a/src/examples/signaling_game/outputs/default/distribution_over_states.png b/src/examples/signaling_game/outputs/default/distribution_over_states.png deleted file mode 100644 index ed670e1b..00000000 Binary files a/src/examples/signaling_game/outputs/default/distribution_over_states.png and /dev/null differ diff --git a/src/examples/signaling_game/outputs/default/languages.yml b/src/examples/signaling_game/outputs/default/languages.yml deleted file mode 100644 index 472f0288..00000000 --- a/src/examples/signaling_game/outputs/default/languages.yml +++ /dev/null @@ -1,59 +0,0 @@ -languages: -- sender: - data: - accuracy: 0.8711169970616199 - name: sender - expressions: - - form: signal_1 - meaning: - - state_1 - - form: signal_2 - meaning: [] - - form: signal_3 - meaning: - - state_6 - - form: signal_4 - meaning: - - state_3 - - form: signal_5 - meaning: - - state_4 - - form: signal_6 - meaning: - - state_2 - - form: signal_7 - meaning: - - state_7 - - form: signal_8 - meaning: - - state_5 - - state_8 -- receiver: - data: - accuracy: 0.8711169970616199 - name: receiver - expressions: - - form: signal_1 - meaning: - - state_1 - - form: signal_2 - meaning: - - state_6 - - form: signal_3 - meaning: - - state_6 - - form: signal_4 - meaning: - - state_3 - - form: signal_5 - meaning: - - state_4 - - form: signal_6 - meaning: - - state_2 - - form: signal_7 - meaning: - - state_7 - - form: signal_8 - meaning: - - state_8 diff --git a/src/examples/signaling_game/outputs/default/tradeoff.png b/src/examples/signaling_game/outputs/default/tradeoff.png deleted file mode 100644 index 49afc522..00000000 Binary files a/src/examples/signaling_game/outputs/default/tradeoff.png and /dev/null differ diff --git a/src/examples/signaling_game/outputs/default/weights.txt b/src/examples/signaling_game/outputs/default/weights.txt deleted file mode 100644 index ad7ffda6..00000000 --- a/src/examples/signaling_game/outputs/default/weights.txt +++ /dev/null @@ -1,55 +0,0 @@ -Sender - ------------------- - -weights: - -[[1.20e+04 1.00e+00 1.00e+00 4.00e+00 9.00e+00 1.00e+00 3.00e+00 1.00e+00] - [1.00e+00 5.50e+01 1.10e+01 5.00e+00 1.00e+00 1.17e+04 1.00e+00 1.00e+00] - [4.00e+00 1.00e+00 2.00e+00 1.21e+04 2.00e+00 9.00e+00 2.00e+00 1.00e+00] - [3.00e+00 1.00e+00 1.00e+00 3.00e+00 1.22e+04 1.00e+00 3.00e+00 1.00e+00] - [2.00e+00 2.00e+00 1.00e+00 1.00e+00 1.00e+00 4.00e+00 1.00e+00 2.13e+03] - [1.00e+00 2.14e+03 9.96e+03 1.00e+00 1.00e+00 1.00e+00 1.00e+00 1.00e+00] - [1.50e+01 1.00e+00 1.00e+00 1.00e+00 3.00e+00 1.00e+00 1.23e+04 7.00e+00] - [4.00e+00 2.00e+00 1.00e+00 1.00e+00 1.00e+00 2.00e+00 2.00e+00 9.90e+03]] - -distribution: - -[[9.98e-01 8.31e-05 8.31e-05 3.32e-04 7.48e-04 8.31e-05 2.49e-04 8.31e-05] - [8.46e-05 4.65e-03 9.30e-04 4.23e-04 8.46e-05 9.94e-01 8.46e-05 8.46e-05] - [3.30e-04 8.26e-05 1.65e-04 9.98e-01 1.65e-04 7.43e-04 1.65e-04 8.26e-05] - [2.45e-04 8.16e-05 8.16e-05 2.45e-04 9.99e-01 8.16e-05 2.45e-04 8.16e-05] - [9.35e-04 9.35e-04 4.67e-04 4.67e-04 4.67e-04 1.87e-03 4.67e-04 9.94e-01] - [8.26e-05 1.77e-01 8.22e-01 8.26e-05 8.26e-05 8.26e-05 8.26e-05 8.26e-05] - [1.22e-03 8.13e-05 8.13e-05 8.13e-05 2.44e-04 8.13e-05 9.98e-01 5.69e-04] - [4.03e-04 2.02e-04 1.01e-04 1.01e-04 1.01e-04 2.02e-04 2.02e-04 9.99e-01]] - - - - -Receiver - ------------------- - -weights: - -[[1.20e+04 1.00e+00 4.00e+00 3.00e+00 2.00e+00 1.00e+00 1.50e+01 4.00e+00] - [1.00e+00 5.50e+01 1.00e+00 1.00e+00 2.00e+00 2.14e+03 1.00e+00 2.00e+00] - [1.00e+00 1.10e+01 2.00e+00 1.00e+00 1.00e+00 9.96e+03 1.00e+00 1.00e+00] - [4.00e+00 5.00e+00 1.21e+04 3.00e+00 1.00e+00 1.00e+00 1.00e+00 1.00e+00] - [9.00e+00 1.00e+00 2.00e+00 1.22e+04 1.00e+00 1.00e+00 3.00e+00 1.00e+00] - [1.00e+00 1.17e+04 9.00e+00 1.00e+00 4.00e+00 1.00e+00 1.00e+00 2.00e+00] - [3.00e+00 1.00e+00 2.00e+00 3.00e+00 1.00e+00 1.00e+00 1.23e+04 2.00e+00] - [1.00e+00 1.00e+00 1.00e+00 1.00e+00 2.13e+03 1.00e+00 7.00e+00 9.90e+03]] - -distribution: - -[[9.98e-01 8.46e-05 3.30e-04 2.45e-04 9.35e-04 8.26e-05 1.22e-03 4.03e-04] - [8.31e-05 4.65e-03 8.26e-05 8.16e-05 9.35e-04 1.77e-01 8.13e-05 2.02e-04] - [8.31e-05 9.30e-04 1.65e-04 8.16e-05 4.67e-04 8.22e-01 8.13e-05 1.01e-04] - [3.32e-04 4.23e-04 9.98e-01 2.45e-04 4.67e-04 8.26e-05 8.13e-05 1.01e-04] - [7.48e-04 8.46e-05 1.65e-04 9.99e-01 4.67e-04 8.26e-05 2.44e-04 1.01e-04] - [8.31e-05 9.94e-01 7.43e-04 8.16e-05 1.87e-03 8.26e-05 8.13e-05 2.02e-04] - [2.49e-04 8.46e-05 1.65e-04 2.45e-04 4.67e-04 8.26e-05 9.98e-01 2.02e-04] - [8.31e-05 8.46e-05 8.26e-05 8.16e-05 9.94e-01 8.26e-05 5.69e-04 9.99e-01]] - \ No newline at end of file diff --git a/src/examples/signaling_game/outputs/example/accuracy.png b/src/examples/signaling_game/outputs/example/accuracy.png deleted file mode 100644 index 9ceb3b40..00000000 Binary files a/src/examples/signaling_game/outputs/example/accuracy.png and /dev/null differ diff --git a/src/examples/signaling_game/outputs/example/complexity.png b/src/examples/signaling_game/outputs/example/complexity.png deleted file mode 100644 index b2cbfc73..00000000 Binary files a/src/examples/signaling_game/outputs/example/complexity.png and /dev/null differ diff --git a/src/examples/signaling_game/outputs/example/dist.png b/src/examples/signaling_game/outputs/example/dist.png deleted file mode 100644 index b34e6108..00000000 Binary files a/src/examples/signaling_game/outputs/example/dist.png and /dev/null differ diff --git a/src/examples/signaling_game/outputs/example/languages.yml b/src/examples/signaling_game/outputs/example/languages.yml deleted file mode 100644 index ead37929..00000000 --- a/src/examples/signaling_game/outputs/example/languages.yml +++ /dev/null @@ -1,37 +0,0 @@ -languages: -- sender: - data: - accuracy: 0.8806295779018745 - name: sender - expressions: - - form: signal_1 - meaning: - - state_2 - - state_4 - - form: signal_2 - meaning: - - state_2 - - state_3 - - form: signal_3 - meaning: - - state_1 - - form: signal_4 - meaning: - - state_4 -- receiver: - data: - accuracy: 0.8806295779018745 - name: receiver - expressions: - - form: signal_1 - meaning: - - state_4 - - form: signal_2 - meaning: - - state_3 - - form: signal_3 - meaning: - - state_1 - - form: signal_4 - meaning: - - state_4 diff --git a/src/examples/signaling_game/outputs/example/tradeoff.png b/src/examples/signaling_game/outputs/example/tradeoff.png deleted file mode 100644 index 431cf59c..00000000 Binary files a/src/examples/signaling_game/outputs/example/tradeoff.png and /dev/null differ diff --git a/src/examples/signaling_game/outputs/example/weights.txt b/src/examples/signaling_game/outputs/example/weights.txt deleted file mode 100644 index cea4b2d8..00000000 --- a/src/examples/signaling_game/outputs/example/weights.txt +++ /dev/null @@ -1,39 +0,0 @@ -Sender - ------------------- - -weights: - -[[ 1.9 1.9 64. 1. ] - [ 1.9 3.7 1. 1. ] - [ 2.8 16.3 1.9 2.8] - [457.3 2.8 1.9 147.7]] - -distribution: - -[[0.03 0.03 0.93 0.01] - [0.25 0.49 0.13 0.13] - [0.12 0.68 0.08 0.12] - [0.75 0. 0. 0.24]] - - - - -Receiver - ------------------- - -weights: - -[[ 1.9 1.9 2.8 457.3] - [ 1.9 3.7 16.3 2.8] - [ 64. 1. 1.9 1.9] - [ 1. 1. 2.8 147.7]] - -distribution: - -[[0.03 0.25 0.12 0.75] - [0.03 0.49 0.68 0. ] - [0.93 0.13 0.08 0. ] - [0.01 0.13 0.12 0.24]] - \ No newline at end of file diff --git a/src/examples/signaling_game/run_example.sh b/src/examples/signaling_game/run_example.sh deleted file mode 100755 index 976e0562..00000000 --- a/src/examples/signaling_game/run_example.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -python3 main.py \ ---num_states 4 \ ---num_signals 4 \ ---num_rounds 1000 \ ---distribution_over_states random \ ---learning_rate 0.9 \ ---save_languages outputs/example/languages.yml \ ---save_weights outputs/example/weights.txt \ ---save_distribution outputs/example/dist.png \ ---save_accuracy_plot outputs/example/accuracy.png \ ---save_complexity_plot outputs/example/complexity.png \ ---save_tradeoff_plot outputs/example/tradeoff.png \ diff --git a/src/examples/signaling_game/util.py b/src/examples/signaling_game/util.py deleted file mode 100644 index e494af4e..00000000 --- a/src/examples/signaling_game/util.py +++ /dev/null @@ -1,122 +0,0 @@ -import argparse -import yaml -import numpy as np -import random -import plotnine as pn -from languages import SignalingLanguage - - -def set_seed(seed: int) -> None: - """Sets various random seeds.""" - random.seed(seed) - np.random.seed(seed) - - -def save_weights(fn, sender, receiver) -> None: - """Save weights to a txt file.""" - sender_n = sender.weights / sender.weights.sum(axis=1, keepdims=True) - receiver_n = receiver.weights / receiver.weights.sum(axis=0, keepdims=True) - np.set_printoptions(precision=2) - weights_string = f"""Sender - \n------------------ - \nweights: - \n{sender.weights} - \ndistribution: - \n{sender_n} - \n - - \nReceiver - \n------------------ - \nweights: - \n{receiver.weights} - \ndistribution: - \n{receiver_n} - """ - with open(fn, "w") as f: - f.write(weights_string) - - -def save_languages(fn: str, languages: list[SignalingLanguage]) -> None: - """Save a list of languages to a YAML file.""" - data = {"languages": list(lang.yaml_rep() for lang in languages)} - with open(fn, "w") as outfile: - yaml.safe_dump(data, outfile) - - -def save_plot(fn: str, plot: pn.ggplot, width=10, height=10, dpi=300) -> None: - """Save a plot with some default settings.""" - plot.save(fn, width=10, height=10, dpi=300) - - -def get_args() -> argparse.Namespace: - parser = argparse.ArgumentParser() - parser.add_argument("--seed", type=int, default=42, help="Specify the random seed.") - parser.add_argument( - "--num_states", - type=int, - default=2, - help="Number of states for sender and receiver.", - ) - parser.add_argument( - "--num_signals", - type=int, - default=2, - help="Number of signals for sender and receiver.", - ) - parser.add_argument( - "--num_rounds", - type=float, - default=100, - help="How many rounds of the signaling game to run.", - ) - parser.add_argument( - "--distribution_over_states", - type=str, - choices=["deterministic", "random"], - default="deterministic", - help="How to generate distribution over states, either deterministically uniform or randomly sampled.", - ) - parser.add_argument( - "--learning_rate", - type=float, - default=1.0, - help="Learning rate for Bush-Mosteller reinforcement.", - ) - parser.add_argument( - "--save_languages", - type=str, - default="outputs/default/languages.yml", - help="Languages of agents will be saved to this file as YAML.", - ) - parser.add_argument( - "--save_weights", - type=str, - default="outputs/default/weights.txt", - help="Weights of agents will be saved to this file as plain text.", - ) - parser.add_argument( - "--save_accuracy_plot", - type=str, - default="outputs/default/accuracy.png", - help="Plot of signaling accuracy will be saved to this file as png.", - ) - parser.add_argument( - "--save_complexity_plot", - type=str, - default="outputs/default/complexity.png", - help="Plot of complexity accuracy will be saved to this file as png.", - ) - parser.add_argument( - "--save_tradeoff_plot", - type=str, - default="outputs/default/tradeoff.png", - help="Plot of accuracy / complexity tradeoff will be saved to this file as png.", - ) - parser.add_argument( - "--save_distribution", - type=str, - default="outputs/default/distribution_over_states.png", - help="Plot of distribution over states tradeoff will be saved to this file as png.", - ) - args = parser.parse_args() - return args diff --git a/src/examples/signaling_game/vis.py b/src/examples/signaling_game/vis.py deleted file mode 100644 index 0dd77290..00000000 --- a/src/examples/signaling_game/vis.py +++ /dev/null @@ -1,83 +0,0 @@ -import plotnine as pn -import pandas as pd -import numpy as np -from util import save_plot - - -def plot_accuracy(fn: str, accuracies: list[float]) -> None: - """Construct and save a basic plotnine line plot of accuracy vs rounds.""" - data = pd.DataFrame(data={"accuracy": accuracies, "round": range(len(accuracies))}) - # Set data and the axes - plot = ( - pn.ggplot(data=data, mapping=pn.aes(x="round", y="accuracy")) - + pn.geom_line(size=1, data=data) - + pn.ylim(0, 1) - + pn.xlab("Round") - + pn.ylab("Accuracy") - + pn.scale_color_cmap("cividis") - ) - save_plot(fn, plot) - - -def plot_complexity(fn: str, complexities: list[float]) -> pn.ggplot: - """Get a basic plotnine line plot of complexities vs rounds.""" - data = pd.DataFrame( - data={"complexity": complexities, "round": range(len(complexities))} - ) - # Set data and the axes - plot = ( - pn.ggplot(data=data, mapping=pn.aes(x="round", y="complexity")) - + pn.geom_line(size=1, data=data) - + pn.ylim(0, 1) - + pn.xlab("Round") - + pn.ylab("Complexity") - + pn.scale_color_cmap("cividis") - ) - save_plot(fn, plot) - - -def plot_tradeoff(fn: str, complexities: list, accuracies: list, hamming_rd_bound: list[tuple[float]]) -> pn.ggplot: - """Get a basic plotnine point plot of languages in a complexity vs comm_cost 2D plot against the hamming rate distortion bound.""" - rounds = range(len(complexities)) - data = pd.DataFrame( - data={ - "complexity": complexities, - "comm_cost": [1 - acc for acc in accuracies], - "round": rounds, - } - ) - - bound_data = pd.DataFrame( - hamming_rd_bound, - columns=["complexity", "comm_cost"], - ) - plot = ( - # Set data and the axes - pn.ggplot(data=data, mapping=pn.aes(x="complexity", y="comm_cost")) - + pn.scale_y_continuous(limits=[0, 1]) - + pn.geom_point( # langs - stroke=0, alpha=1, mapping=pn.aes(color="round") # might be too faint - ) - + pn.geom_line( # bound - data=bound_data, - ) - + pn.xlab("Cognitive cost") - + pn.ylab("Communicative cost") - + pn.scale_color_cmap("cividis") - ) - save_plot(fn, plot) - - -def plot_distribution(fn: str, dist: np.ndarray) -> pn.ggplot: - """Create a bar plot of a distribution over states, e.g. the communicative need distribution or the ground truth distribution.""" - states = list(range(1, len(dist) + 1)) - data = pd.DataFrame(data={"state": states, "prob": dist.tolist()}) - plot = ( - pn.ggplot(data=data, mapping=pn.aes(x="state", y="prob")) - + pn.scale_x_discrete(limits=states) - + pn.ylim(0, 1) - + pn.geom_bar(stat="identity") - + pn.xlab("State") - + pn.ylab("Probability") - ) - save_plot(fn, plot) diff --git a/src/tests/test_grammar.py b/src/tests/test_grammar.py index 6f0735a8..e9be3b23 100644 --- a/src/tests/test_grammar.py +++ b/src/tests/test_grammar.py @@ -33,7 +33,7 @@ def test_meaning(self): def test_length(self): parsed_expression = TestGrammar.grammar.parse(TestGrammar.geq2_expr_str) assert len(parsed_expression) == 5 - + def test_atom_count(self): parsed_expression = TestGrammar.grammar.parse(TestGrammar.geq2_expr_str) assert parsed_expression.count_atoms() == 3 diff --git a/src/tests/test_language.py b/src/tests/test_language.py index 65e14607..c4010877 100644 --- a/src/tests/test_language.py +++ b/src/tests/test_language.py @@ -27,31 +27,36 @@ class TestLanguage: dog = Expression( form="dog", meaning=Meaning( - mapping=FrozenDict({ref: ref.name == "dog" for ref in uni_refs}), universe=uni + mapping=FrozenDict({ref: ref.name == "dog" for ref in uni_refs}), + universe=uni, ), ) cat = Expression( form="cat", meaning=Meaning( - mapping=FrozenDict({ref: ref.name == "cat" for ref in uni_refs}), universe=uni + mapping=FrozenDict({ref: ref.name == "cat" for ref in uni_refs}), + universe=uni, ), ) tree = Expression( form="tree", meaning=Meaning( - mapping=FrozenDict({ref: ref.name == "tree" for ref in uni_refs}), universe=uni + mapping=FrozenDict({ref: ref.name == "tree" for ref in uni_refs}), + universe=uni, ), ) shroom = Expression( form="shroom", meaning=Meaning( - mapping=FrozenDict({ref: ref.name == "shroom" for ref in uni_refs}), universe=uni + mapping=FrozenDict({ref: ref.name == "shroom" for ref in uni_refs}), + universe=uni, ), ) bird = Expression( form="bird", meaning=Meaning( - mapping=FrozenDict({ref: ref.name == "bird" for ref in uni_refs}), universe=uni + mapping=FrozenDict({ref: ref.name == "bird" for ref in uni_refs}), + universe=uni, ), ) @@ -78,7 +83,12 @@ def test_language_universe_check(self): Expression( form="dog", meaning=Meaning( - mapping=FrozenDict({ref: ref.name == "dog" for ref in TestLanguage.uni.referents}), + mapping=FrozenDict( + { + ref: ref.name == "dog" + for ref in TestLanguage.uni.referents + } + ), universe=TestLanguage.uni2, ), ), diff --git a/src/ultk/effcomm/__init__.py b/src/ultk/effcomm/__init__.py index 111edf39..d2d8f2f3 100644 --- a/src/ultk/effcomm/__init__.py +++ b/src/ultk/effcomm/__init__.py @@ -2,17 +2,17 @@ Submodules divide the labor of a computational experiment performing an efficiency analysis of a language into several parts: generating and sampling the space of possible languages, measuring their properties, and determining which languages optimize efficient trade-offs w.r.t these properties. -The `altk.effcomm.sampling` submodule implements several methods for generating hypothetically possible languages of a given type, by sampling from a set of possible expressions, or permuting the expression-meaning mapping of an existing language. +The `ultk.effcomm.sampling` submodule implements several methods for generating hypothetically possible languages of a given type, by sampling from a set of possible expressions, or permuting the expression-meaning mapping of an existing language. -The `altk.effcomm.optimization` submodule contains a general implementation of an evolutionary algorithm, which can be used to estimate a Pareto frontier of optimal solutions to an efficiency trade-off. It can also be used as a technique for randomly exploring the space of possible languages. +The `ultk.effcomm.optimization` submodule contains a general implementation of an evolutionary algorithm, which can be used to estimate a Pareto frontier of optimal solutions to an efficiency trade-off. It can also be used as a technique for randomly exploring the space of possible languages. -The `altk.effcomm.tradeoff` submodule contains tools for measuring a pool of languages for various properties, finding which languages are Pareto dominant with respect to two properties, and setting attributes of the language objects for further analysis. +The `ultk.effcomm.tradeoff` submodule contains tools for measuring a pool of languages for various properties, finding which languages are Pareto dominant with respect to two properties, and setting attributes of the language objects for further analysis. -The `altk.effcomm.analysis` submodule contains tools for performing numerical analyses and producing paradigmatic plots of languages in 2D trade-off space. +The `ultk.effcomm.analysis` submodule contains tools for performing numerical analyses and producing paradigmatic plots of languages in 2D trade-off space. -The `altk.effcomm.rate_distortion` submodule contains tools for information theory based analyses of the communicative efficiency of languages. Specificially, it includes methods for Rate-Distortion style (including the Information Bottleneck) analyses. +The `ultk.effcomm.information_bottleneck` submodule contains tools for Information Bottleneck based analyses of the communicative efficiency of languages. Specificially, it includes an implementation of the IB-BA algorithm and code for evaluating the efficiency of semantic category systems. -The `altk.effcomm.agent` submodule implements classes for constructing various speakers and listeners of a language. These are typically used in static analyses of informativity of a language, and are unified abstractions from the Rational Speech Act framework. They can also be used for dynamic analyses, however (see the [signaling game example](https://clmbr.shane.st/altk/src/examples/signaling_game)). +The `ultk.effcomm.agent` submodule implements classes for constructing various speakers and listeners of a language. These are unified abstractions from the Rational Speech Act framework. -The `altk.effcomm.informativity` submodule implements tools for computing the literal or pragmatic informativity of a language, based on speaker/listener abstractions described above. +The `ultk.effcomm.informativity` submodule implements tools for computing the literal or pragmatic informativity of a language, based on speaker/listener abstractions described above. """ diff --git a/src/ultk/effcomm/probability.py b/src/ultk/effcomm/probability.py new file mode 100644 index 00000000..bced8831 --- /dev/null +++ b/src/ultk/effcomm/probability.py @@ -0,0 +1,163 @@ +import numpy as np +from scipy.special import softmax +from scipy.stats import entropy + +# see the utilities in https://github.com/nogazs/ib-color-naming/blob/master/src/tools.py +PRECISION = 1e-15 + + +def marginal(pXY: np.ndarray, axis: int = 1) -> np.ndarray: + """Computer marginals of a joint distribution. + + Args: + pXY: a joint distribution of shape (|X|, |Y|), corresponding to p(x, y) + axis: the axis along which to compute the marginal + + Returns: + either pY (axis = 0) or pX (default, axis = 1) + """ + return pXY.sum(axis) + + +def joint(pY_X: np.ndarray, pX: np.ndarray) -> np.ndarray: + """Compute a joint distribution from a conditional and a prior. + + Args: + pY_X: a conditional distribution of shape (|X|, |Y|), corresponding to p(y|x) + pX: a prior distribution of shape (|X|,), corresponding to p(x) + + Returns: + a joint distribution of shape (|X|, |Y|), corresponding to p(x, y) + """ + return pY_X * pX[:, None] + + +def marginalize(pY_X: np.ndarray, pX: np.ndarray) -> np.ndarray: + """Marginalize a conditional distribution (without a detour through the joint). + + Args: + pY_X: a conditional distribution of shape (|X|, |Y|), corresponding to p(y|x) + pX: a prior distribution of shape (|X|,), corresponding to p(x) + + Returns: + a marginal distribution of shape (|Y|,), corresponding to p(y) + """ + return pY_X.T @ pX + + +def bayes(pY_X: np.ndarray, pX: np.ndarray) -> np.ndarray: + """Perform Bayesian inference, computing p(x|y) from p(y|x) and p(x). + + Args: + pY_X: a conditional distribution of shape (|X|, |Y|), corresponding to p(y|x) + pX: a prior distribution of shape (|X|,), corresponding to p(x) + + Returns: + a posterior distribution of shape (|Y|, |X|), corresponding to p(x|y) + """ + # (|X|, |Y|) + pXY = joint(pY_X, pX) + print(pXY.shape) + # (|Y|,) + pY = marginalize(pY_X, pX) + print(pY.shape) + # (|Y|, |X|) + return np.where(pY > PRECISION, pXY / pY, 1 / pXY.shape[0]).T + + +############################################################################## +# Numerical precision helpers +############################################################################## + + +def get_gaussian_noise( + shape, + loc=0.0, + scale=1e-15, +): + """Small Gaussian noise.""" + return np.random.normal(loc, scale, size=shape) + + +def add_noise_to_stochastic_matrix(q, weight=1e-2): + """ + Given an input stochastic matrix `q`, sample a stochastic matrix `p` and + mix it with the input with a small weight `weight`, i.e., return q + weight * p. + """ + # Generate a stochastic matrix `p` using a Dirichlet distribution + p = np.random.dirichlet(np.ones(q.shape[1]), size=q.shape[0]) + # Mix `q` with `p` using the specified weight + noisy_matrix = q + weight * p + # Normalize to ensure the rows sum to 1 + noisy_matrix /= noisy_matrix.sum(axis=1, keepdims=True) + return noisy_matrix + + +def random_stochastic_matrix(shape, gamma=1e-10): + """ + Initialize a stochastic matrix (2D array) that sums to 1 along the rows. + + Args: + shape: tuple, the desired shape of the stochastic matrix (e.g., `(rows, cols)`). + gamma: float, scaling factor for the random normal initialization. + + Returns: + A stochastic matrix with rows summing to 1. + """ + energies = gamma * np.random.randn(*shape) + return softmax(energies, axis=1) + + +############################################################################## +# Information +############################################################################## + + +def entropy_bits(p: np.ndarray, axis=None) -> float: + """Compute entropy of p, $H(X) = - \sum_x p(x) \log p(x)$, in bits.""" + return entropy(p, base=2, axis=axis) + + +def mutual_info(pxy: np.ndarray) -> float: + """Compute mutual information, $I(X;Y)$ in bits. + + Args: + pxy: 2D numpy array of shape `(x, y)` + """ + return ( + entropy_bits(pxy.sum(axis=0)) + + entropy_bits(pxy.sum(axis=1)) + - entropy_bits(pxy) + ) + + +def kl_divergence(p: np.ndarray, q: np.ndarray, axis=None, base=np.e) -> float: + """Compute KL divergence (in nats by defaut) between p and q, $D_{KL}[p \| q]$. + + Args: + p: np.ndarray, lhs of KL divergence + + q: np.ndarray, rhs of KL divergence + """ + return entropy( + p, + q, + axis=axis, + base=base, + ) + + +# Common pattern for rate-distortion optimizations +def information_cond(pA: np.ndarray, pB_A: np.ndarray) -> float: + """Compute the mutual information $I(A;B)$ from a joint distribution defind by $P(A)$ and $P(B|A)$ + + Args: + pA: array of shape `|A|` the prior probability of an input symbol (i.e., the source) + + pB_A: array of shape `(|A|, |B|)` the probability of an output symbol given the input + """ + pab = pB_A * pA[:, None] + mi = mutual_info(pxy=pab) + if mi < 0.0 and not np.isclose(mi, 0.0, atol=1e-5): + raise Exception + return mi diff --git a/src/ultk/effcomm/sampling.py b/src/ultk/effcomm/sampling.py index c6e19f5c..f246660b 100644 --- a/src/ultk/effcomm/sampling.py +++ b/src/ultk/effcomm/sampling.py @@ -25,7 +25,7 @@ def get_hypothetical_variants( speakers: a list of speakers of a language, whose weights can be directly permuted. Should be used instead of `languages` if possible, because it can be more finegrained (every language can be associated with multiple speakers). - total: the total number of hypothetical variants to obtain + total: the total number of hypothetical variants to obtain. Should be greater than the number of languages. Returns: hypothetical_variants: a list of type either Language or np.ndarray depending on whether `languages` or `speakers` was passed, representing hypothetical variants of the systems passed. If `speakers` was passed, a list of speakers is returned. @@ -45,6 +45,11 @@ def get_hypothetical_variants( variants_per_system = int(total / num_systems) + if variants_per_system == 0: + raise Exception( + "Number of languages exceeds the number of languages to be generated. " + ) + hypothetical_variants = [] for i in range(num_systems): if languages is not None: diff --git a/src/ultk/language/grammar.py b/src/ultk/language/grammar.py index e175d78c..9911fb3c 100644 --- a/src/ultk/language/grammar.py +++ b/src/ultk/language/grammar.py @@ -171,7 +171,7 @@ def to_dict(self) -> dict: if self.children: the_dict["children"] = tuple(child.to_dict() for child in self.children) return the_dict - + # Following function counts the total number of atoms / leaf nodes, as opposed to __len__, which counts all nodes def count_atoms(self): if self.children is None: diff --git a/src/ultk/language/semantics.py b/src/ultk/language/semantics.py index fea16dc6..fa22384c 100644 --- a/src/ultk/language/semantics.py +++ b/src/ultk/language/semantics.py @@ -62,7 +62,7 @@ def __eq__(self, other) -> bool: def __hash__(self) -> int: return hash((self.name, frozenset(self.__dict__.items()))) - + def __repr__(self) -> str: return f"Referent({self.name}, {self.__dict__})" @@ -74,14 +74,12 @@ class Universe: referents: tuple[Referent, ...] prior: tuple[float, ...] - def __init__(self, referents, prior = None): + def __init__(self, referents, prior=None): # use of __setattr__ is to work around the issues with @dataclass(frozen=True) object.__setattr__(self, "referents", referents) # When only referents are passed in, make the priors a unifrom distribution object.__setattr__( - self, - "prior", - prior or tuple(1/len(referents) for _ in referents) + self, "prior", prior or tuple(1 / len(referents) for _ in referents) ) @cached_property @@ -124,7 +122,9 @@ def from_dataframe(cls, df: pd.DataFrame): referents = tuple(Referent(record["name"], record) for record in records) default_prob = 1 / len(referents) # prior = FrozenDict({ referent: getattr(referent, "probability", default_prob) for referent in referents }) - prior = tuple(getattr(referent, "probability", default_prob) for referent in referents) + prior = tuple( + getattr(referent, "probability", default_prob) for referent in referents + ) return cls(referents, prior) @classmethod @@ -145,30 +145,42 @@ class Meaning(Generic[T]): But, in general, meanings can have a different output type for, e.g. sub-sentential meanings.. Properties: - mapping: a `FrozenDict` with `Referent` keys, but arbitrary type `T` as values. + mapping: a `FrozenDict` with `Referent` keys, but arbitrary type `T` as values. universe: a Universe object. The `Referent`s in the keys of `mapping` are expected to be exactly those in `universe`. _dist: a mapping representing a probability distribution over referents to associate with the meaning. By default, will be assumed to be uniform over the "true-like" `Referent`s in `mapping` (see `.dist`). """ + mapping: FrozenDict[Referent, T] # With the mapping, `universe` is not conceptually needed, but it is very useful to have it lying around. - # `universe` should be the keys to `mapping`. + # `universe` should be the keys to `mapping`. universe: Universe - _dist: FrozenDict[Referent, float] = FrozenDict({}) + # _dist: FrozenDict[Referent, float] = FrozenDict({}) + _dist = False # TODO: clean up @property def dist(self) -> FrozenDict[Referent, float]: if self._dist: # normalize weights to distribution total_weight = sum(self._dist.values()) - return FrozenDict({referent: weight / total_weight for referent, weight in self._dist.items()}) + return FrozenDict( + { + referent: weight / total_weight + for referent, weight in self._dist.items() + } + ) else: num_true_like = sum(1 for value in self.mapping.values() if value) if num_true_like == 0: raise ValueError("Meaning must have at least one true-like referent.") - return FrozenDict({referent: (1 / num_true_like if self.mapping[referent] else 0) for referent in self.mapping}) - + return FrozenDict( + { + referent: (1 / num_true_like if self.mapping[referent] else 0) + for referent in self.mapping + } + ) + def is_uniformly_false(self) -> bool: """Return True if all referents in the meaning are mapped to False (or coercible to False).In the case where the meaning type is boolean, this corresponds to the characteristic function of the empty set.""" return all(not value for value in self.mapping.values()) @@ -176,8 +188,14 @@ def is_uniformly_false(self) -> bool: def __getitem__(self, key: Referent) -> T: return self.mapping[key] + def __iter__(self): + """Iterate over the referents in the meaning.""" + return iter(self.mapping) + def __bool__(self): return bool(self.mapping) # and bool(self.universe) def __str__(self): - return "Mapping:\n\t{0}".format('\n'.join(f"{ref}: {self.mapping[ref]}" for ref in self.mapping)) # \ \nDistribution:\n\t{self.dist}\n" + return "Mapping:\n\t{0}".format( + "\n".join(f"{ref}: {self.mapping[ref]}" for ref in self.mapping) + ) # \ \nDistribution:\n\t{self.dist}\n" diff --git a/src/ultk/util/__init__.py b/src/ultk/util/__init__.py index 5cf34ea7..406b3dcf 100644 --- a/src/ultk/util/__init__.py +++ b/src/ultk/util/__init__.py @@ -4,4 +4,4 @@ * `frozendict`: An immutable dictionary, so that various mappings (e.g. `Meaning`s) can be hashed, serialized, etc. * `io`: some basic input/output functions. -""" \ No newline at end of file +""" diff --git a/src/ultk/util/frozendict.py b/src/ultk/util/frozendict.py index 424792d0..54eb5493 100644 --- a/src/ultk/util/frozendict.py +++ b/src/ultk/util/frozendict.py @@ -6,7 +6,6 @@ class FrozenDict(dict[K, V], Generic[K, V], YAMLObject): - yaml_tag = "!frozendict" def __hash__(self): diff --git a/src/ultk/util/io.py b/src/ultk/util/io.py index 8d0ae7c4..eb9da213 100644 --- a/src/ultk/util/io.py +++ b/src/ultk/util/io.py @@ -1,3 +1,4 @@ +import pickle from ultk.language.language import Expression from ultk.language.semantics import Meaning, Universe from ultk.language.grammar import Grammar, GrammaticalExpression @@ -65,3 +66,15 @@ def read_grammatical_expressions( if return_by_meaning: by_meaning = {expr.meaning: expr for expr in final_exprs} return final_exprs, by_meaning + + +def write_pickle(fn: str, data): + with open(fn, "wb") as f: + pickle.dump(data, f, protocol=pickle.HIGHEST_PROTOCOL) + print(f"Wrote a pickle binary to {fn}.") + + +def read_pickle(fn: str): + with open(fn, "rb") as f: + data = pickle.load(f) + return data