Latest commit

History

37 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

ascl:1706.005PyPiLGPL-3.0

Logarithmantic Monte Carlo (LMC)

Python code for Markov Chain Monte Carlo

Logarithmancy (n): divination by means of algorithms

What is this?

LMC (not to be confused with the Large Magellanic Cloud) is a bundle of Python code for performing Markov Chain Monte Carlo, which implements a few different multidimensional proposal strategies and (optionally parallel) adaptation methods. There are similar packages out there, notably pymc - LMC exists because I found the alternatives to be too inflexible for the work I was doing at the time. On the off chance that someone else is in the same boat, here it is.

The samplers currently included are Metropolis, slice, and the affine-invariant sampler popularized by emcee (Goodman & Weare 2010).

An abridged description of the package (from the help function) is copied here:

The module should be very flexible, but is designed with these things foremost in mind:
1. use with expensive likelihood calculations which probably have a host of hard-to-modify
code associated with them.
2. making it straightforward to break the parameter space into subspaces which can be sampled
using different proposal methods and at different rates. For example, if changing some
parameters requires very expensive calulations in the likelihood, the other, faster
parameters can be sampled at a higher rate. Or, some parameters may lend themselves to
Gibbs sampling, while others may not, and these can be block updated independently.
3. keeping the overhead low to facilitate large numbers of parameters. Some of this has been
lost in the port from C++, but, for example, the package provides automatic tuning of the
proposal covariance for block updating without needing to store traces of the parameters in
memory.
Real-valued parameters are usually assumed, but the framework can be used with other types of
parameters, with suitable overloading of classes.
A byproduct of item (1) is that the user is expected to handle all aspects of the calculation of
the posterior. The module doesn't implement assignment of canned, standard priors, or automatic
discovery of shortcuts like conjugate Gibbs sampling. The idea is that the user is in the best
position to know how the details of the likelihood and priors should be implemented.
Communication between parallel chains can significantly speed up convergence. In parallel mode,
adaptive Updaters use information from all running chains to tune their proposals, rather than
only from their own chain. The Gelman-Rubin convergence criterion (ratio of inter- to intra-chain
variances) for each free parameter is also calculated. Parallelization is implemented in two ways;
see ?Updater for instructions on using each.
1. Via MPI (using mpi4py). MPI adaptations are synchronous: when a chain reaches a communication
point, it stops until all chains have caught up.
2. Via the filesystem. When a chain adapts, it will write its covariance information to a file. It
will then read in any information from other chains that is present in similar files, and
incorporate it when tuning. This process is asynchronous; chains will not wait for one another;
they will simply adapt using whatever information has been shared at the time.

Installation

Automatic

Install from PyPI by running pip install lmc.

Manual

Download lmc/lmc.py and put it somewhere on your PYTHONPATH. You will need to have the numpy package installed. The mpi4py package is optional, but highly recommended.

Usage and Help

Documentation can be found throughout lmc.py, mostly in the form of docstrings, so it's also available through the Python interpreter. There's also a help() function (near the top of the file, if you're browsing) and an example() function (near the bottom).

The examples can also be browsed here.

About

Logarithmantic Monte Carlo

Topics

Resources

Stars

4 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

37 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

ascl:1706.005PyPiLGPL-3.0

Logarithmantic Monte Carlo (LMC)

Python code for Markov Chain Monte Carlo

Logarithmancy (n): divination by means of algorithms

What is this?

LMC (not to be confused with the Large Magellanic Cloud) is a bundle of Python code for performing Markov Chain Monte Carlo, which implements a few different multidimensional proposal strategies and (optionally parallel) adaptation methods. There are similar packages out there, notably pymc - LMC exists because I found the alternatives to be too inflexible for the work I was doing at the time. On the off chance that someone else is in the same boat, here it is.

The samplers currently included are Metropolis, slice, and the affine-invariant sampler popularized by emcee (Goodman & Weare 2010).

An abridged description of the package (from the help function) is copied here:

The module should be very flexible, but is designed with these things foremost in mind:
1. use with expensive likelihood calculations which probably have a host of hard-to-modify
code associated with them.
2. making it straightforward to break the parameter space into subspaces which can be sampled
using different proposal methods and at different rates. For example, if changing some
parameters requires very expensive calulations in the likelihood, the other, faster
parameters can be sampled at a higher rate. Or, some parameters may lend themselves to
Gibbs sampling, while others may not, and these can be block updated independently.
3. keeping the overhead low to facilitate large numbers of parameters. Some of this has been
lost in the port from C++, but, for example, the package provides automatic tuning of the
proposal covariance for block updating without needing to store traces of the parameters in
memory.
Real-valued parameters are usually assumed, but the framework can be used with other types of
parameters, with suitable overloading of classes.
A byproduct of item (1) is that the user is expected to handle all aspects of the calculation of
the posterior. The module doesn't implement assignment of canned, standard priors, or automatic
discovery of shortcuts like conjugate Gibbs sampling. The idea is that the user is in the best
position to know how the details of the likelihood and priors should be implemented.
Communication between parallel chains can significantly speed up convergence. In parallel mode,
adaptive Updaters use information from all running chains to tune their proposals, rather than
only from their own chain. The Gelman-Rubin convergence criterion (ratio of inter- to intra-chain
variances) for each free parameter is also calculated. Parallelization is implemented in two ways;
see ?Updater for instructions on using each.
1. Via MPI (using mpi4py). MPI adaptations are synchronous: when a chain reaches a communication
point, it stops until all chains have caught up.
2. Via the filesystem. When a chain adapts, it will write its covariance information to a file. It
will then read in any information from other chains that is present in similar files, and
incorporate it when tuning. This process is asynchronous; chains will not wait for one another;
they will simply adapt using whatever information has been shared at the time.

Installation

Automatic

Install from PyPI by running pip install lmc.

Manual

Download lmc/lmc.py and put it somewhere on your PYTHONPATH. You will need to have the numpy package installed. The mpi4py package is optional, but highly recommended.

Usage and Help

Documentation can be found throughout lmc.py, mostly in the form of docstrings, so it's also available through the Python interpreter. There's also a help() function (near the top of the file, if you're browsing) and an example() function (near the bottom).

The examples can also be browsed here.

About

Logarithmantic Monte Carlo

Topics

Resources

Stars

4 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

37 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

ascl:1706.005PyPiLGPL-3.0

Logarithmantic Monte Carlo (LMC)

Python code for Markov Chain Monte Carlo

Logarithmancy (n): divination by means of algorithms

What is this?

LMC (not to be confused with the Large Magellanic Cloud) is a bundle of Python code for performing Markov Chain Monte Carlo, which implements a few different multidimensional proposal strategies and (optionally parallel) adaptation methods. There are similar packages out there, notably pymc - LMC exists because I found the alternatives to be too inflexible for the work I was doing at the time. On the off chance that someone else is in the same boat, here it is.

The samplers currently included are Metropolis, slice, and the affine-invariant sampler popularized by emcee (Goodman & Weare 2010).

An abridged description of the package (from the help function) is copied here:

The module should be very flexible, but is designed with these things foremost in mind:
1. use with expensive likelihood calculations which probably have a host of hard-to-modify
code associated with them.
2. making it straightforward to break the parameter space into subspaces which can be sampled
using different proposal methods and at different rates. For example, if changing some
parameters requires very expensive calulations in the likelihood, the other, faster
parameters can be sampled at a higher rate. Or, some parameters may lend themselves to
Gibbs sampling, while others may not, and these can be block updated independently.
3. keeping the overhead low to facilitate large numbers of parameters. Some of this has been
lost in the port from C++, but, for example, the package provides automatic tuning of the
proposal covariance for block updating without needing to store traces of the parameters in
memory.
Real-valued parameters are usually assumed, but the framework can be used with other types of
parameters, with suitable overloading of classes.
A byproduct of item (1) is that the user is expected to handle all aspects of the calculation of
the posterior. The module doesn't implement assignment of canned, standard priors, or automatic
discovery of shortcuts like conjugate Gibbs sampling. The idea is that the user is in the best
position to know how the details of the likelihood and priors should be implemented.
Communication between parallel chains can significantly speed up convergence. In parallel mode,
adaptive Updaters use information from all running chains to tune their proposals, rather than
only from their own chain. The Gelman-Rubin convergence criterion (ratio of inter- to intra-chain
variances) for each free parameter is also calculated. Parallelization is implemented in two ways;
see ?Updater for instructions on using each.
1. Via MPI (using mpi4py). MPI adaptations are synchronous: when a chain reaches a communication
point, it stops until all chains have caught up.
2. Via the filesystem. When a chain adapts, it will write its covariance information to a file. It
will then read in any information from other chains that is present in similar files, and
incorporate it when tuning. This process is asynchronous; chains will not wait for one another;
they will simply adapt using whatever information has been shared at the time.

Installation

Automatic

Install from PyPI by running pip install lmc.

Manual

Download lmc/lmc.py and put it somewhere on your PYTHONPATH. You will need to have the numpy package installed. The mpi4py package is optional, but highly recommended.

Usage and Help

Documentation can be found throughout lmc.py, mostly in the form of docstrings, so it's also available through the Python interpreter. There's also a help() function (near the top of the file, if you're browsing) and an example() function (near the bottom).

The examples can also be browsed here.

About

Logarithmantic Monte Carlo

Topics

Resources

Stars

4 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

37 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

ascl:1706.005PyPiLGPL-3.0

Logarithmantic Monte Carlo (LMC)

Python code for Markov Chain Monte Carlo

Logarithmancy (n): divination by means of algorithms

What is this?

LMC (not to be confused with the Large Magellanic Cloud) is a bundle of Python code for performing Markov Chain Monte Carlo, which implements a few different multidimensional proposal strategies and (optionally parallel) adaptation methods. There are similar packages out there, notably pymc - LMC exists because I found the alternatives to be too inflexible for the work I was doing at the time. On the off chance that someone else is in the same boat, here it is.

The samplers currently included are Metropolis, slice, and the affine-invariant sampler popularized by emcee (Goodman & Weare 2010).

An abridged description of the package (from the help function) is copied here:

The module should be very flexible, but is designed with these things foremost in mind:
1. use with expensive likelihood calculations which probably have a host of hard-to-modify
code associated with them.
2. making it straightforward to break the parameter space into subspaces which can be sampled
using different proposal methods and at different rates. For example, if changing some
parameters requires very expensive calulations in the likelihood, the other, faster
parameters can be sampled at a higher rate. Or, some parameters may lend themselves to
Gibbs sampling, while others may not, and these can be block updated independently.
3. keeping the overhead low to facilitate large numbers of parameters. Some of this has been
lost in the port from C++, but, for example, the package provides automatic tuning of the
proposal covariance for block updating without needing to store traces of the parameters in
memory.
Real-valued parameters are usually assumed, but the framework can be used with other types of
parameters, with suitable overloading of classes.
A byproduct of item (1) is that the user is expected to handle all aspects of the calculation of
the posterior. The module doesn't implement assignment of canned, standard priors, or automatic
discovery of shortcuts like conjugate Gibbs sampling. The idea is that the user is in the best
position to know how the details of the likelihood and priors should be implemented.
Communication between parallel chains can significantly speed up convergence. In parallel mode,
adaptive Updaters use information from all running chains to tune their proposals, rather than
only from their own chain. The Gelman-Rubin convergence criterion (ratio of inter- to intra-chain
variances) for each free parameter is also calculated. Parallelization is implemented in two ways;
see ?Updater for instructions on using each.
1. Via MPI (using mpi4py). MPI adaptations are synchronous: when a chain reaches a communication
point, it stops until all chains have caught up.
2. Via the filesystem. When a chain adapts, it will write its covariance information to a file. It
will then read in any information from other chains that is present in similar files, and
incorporate it when tuning. This process is asynchronous; chains will not wait for one another;
they will simply adapt using whatever information has been shared at the time.

Installation

Automatic

Install from PyPI by running pip install lmc.

Manual

Download lmc/lmc.py and put it somewhere on your PYTHONPATH. You will need to have the numpy package installed. The mpi4py package is optional, but highly recommended.

Usage and Help

Documentation can be found throughout lmc.py, mostly in the form of docstrings, so it's also available through the Python interpreter. There's also a help() function (near the top of the file, if you're browsing) and an example() function (near the bottom).

The examples can also be browsed here.

About

Logarithmantic Monte Carlo

Topics

Resources

Stars

4 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

37 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

ascl:1706.005PyPiLGPL-3.0

Logarithmantic Monte Carlo (LMC)

Python code for Markov Chain Monte Carlo

Logarithmancy (n): divination by means of algorithms

What is this?

LMC (not to be confused with the Large Magellanic Cloud) is a bundle of Python code for performing Markov Chain Monte Carlo, which implements a few different multidimensional proposal strategies and (optionally parallel) adaptation methods. There are similar packages out there, notably pymc - LMC exists because I found the alternatives to be too inflexible for the work I was doing at the time. On the off chance that someone else is in the same boat, here it is.

The samplers currently included are Metropolis, slice, and the affine-invariant sampler popularized by emcee (Goodman & Weare 2010).

An abridged description of the package (from the help function) is copied here:

The module should be very flexible, but is designed with these things foremost in mind:
1. use with expensive likelihood calculations which probably have a host of hard-to-modify
code associated with them.
2. making it straightforward to break the parameter space into subspaces which can be sampled
using different proposal methods and at different rates. For example, if changing some
parameters requires very expensive calulations in the likelihood, the other, faster
parameters can be sampled at a higher rate. Or, some parameters may lend themselves to
Gibbs sampling, while others may not, and these can be block updated independently.
3. keeping the overhead low to facilitate large numbers of parameters. Some of this has been
lost in the port from C++, but, for example, the package provides automatic tuning of the
proposal covariance for block updating without needing to store traces of the parameters in
memory.
Real-valued parameters are usually assumed, but the framework can be used with other types of
parameters, with suitable overloading of classes.
A byproduct of item (1) is that the user is expected to handle all aspects of the calculation of
the posterior. The module doesn't implement assignment of canned, standard priors, or automatic
discovery of shortcuts like conjugate Gibbs sampling. The idea is that the user is in the best
position to know how the details of the likelihood and priors should be implemented.
Communication between parallel chains can significantly speed up convergence. In parallel mode,
adaptive Updaters use information from all running chains to tune their proposals, rather than
only from their own chain. The Gelman-Rubin convergence criterion (ratio of inter- to intra-chain
variances) for each free parameter is also calculated. Parallelization is implemented in two ways;
see ?Updater for instructions on using each.
1. Via MPI (using mpi4py). MPI adaptations are synchronous: when a chain reaches a communication
point, it stops until all chains have caught up.
2. Via the filesystem. When a chain adapts, it will write its covariance information to a file. It
will then read in any information from other chains that is present in similar files, and
incorporate it when tuning. This process is asynchronous; chains will not wait for one another;
they will simply adapt using whatever information has been shared at the time.

Installation

Automatic

Install from PyPI by running pip install lmc.

Manual

Download lmc/lmc.py and put it somewhere on your PYTHONPATH. You will need to have the numpy package installed. The mpi4py package is optional, but highly recommended.

Usage and Help

Documentation can be found throughout lmc.py, mostly in the form of docstrings, so it's also available through the Python interpreter. There's also a help() function (near the top of the file, if you're browsing) and an example() function (near the bottom).

The examples can also be browsed here.

About

Logarithmantic Monte Carlo

Topics

Resources

Stars

4 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

37 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

ascl:1706.005PyPiLGPL-3.0

Logarithmantic Monte Carlo (LMC)

Python code for Markov Chain Monte Carlo

Logarithmancy (n): divination by means of algorithms

What is this?

LMC (not to be confused with the Large Magellanic Cloud) is a bundle of Python code for performing Markov Chain Monte Carlo, which implements a few different multidimensional proposal strategies and (optionally parallel) adaptation methods. There are similar packages out there, notably pymc - LMC exists because I found the alternatives to be too inflexible for the work I was doing at the time. On the off chance that someone else is in the same boat, here it is.

The samplers currently included are Metropolis, slice, and the affine-invariant sampler popularized by emcee (Goodman & Weare 2010).

An abridged description of the package (from the help function) is copied here:

The module should be very flexible, but is designed with these things foremost in mind:
1. use with expensive likelihood calculations which probably have a host of hard-to-modify
code associated with them.
2. making it straightforward to break the parameter space into subspaces which can be sampled
using different proposal methods and at different rates. For example, if changing some
parameters requires very expensive calulations in the likelihood, the other, faster
parameters can be sampled at a higher rate. Or, some parameters may lend themselves to
Gibbs sampling, while others may not, and these can be block updated independently.
3. keeping the overhead low to facilitate large numbers of parameters. Some of this has been
lost in the port from C++, but, for example, the package provides automatic tuning of the
proposal covariance for block updating without needing to store traces of the parameters in
memory.
Real-valued parameters are usually assumed, but the framework can be used with other types of
parameters, with suitable overloading of classes.
A byproduct of item (1) is that the user is expected to handle all aspects of the calculation of
the posterior. The module doesn't implement assignment of canned, standard priors, or automatic
discovery of shortcuts like conjugate Gibbs sampling. The idea is that the user is in the best
position to know how the details of the likelihood and priors should be implemented.
Communication between parallel chains can significantly speed up convergence. In parallel mode,
adaptive Updaters use information from all running chains to tune their proposals, rather than
only from their own chain. The Gelman-Rubin convergence criterion (ratio of inter- to intra-chain
variances) for each free parameter is also calculated. Parallelization is implemented in two ways;
see ?Updater for instructions on using each.
1. Via MPI (using mpi4py). MPI adaptations are synchronous: when a chain reaches a communication
point, it stops until all chains have caught up.
2. Via the filesystem. When a chain adapts, it will write its covariance information to a file. It
will then read in any information from other chains that is present in similar files, and
incorporate it when tuning. This process is asynchronous; chains will not wait for one another;
they will simply adapt using whatever information has been shared at the time.

Installation

Automatic

Install from PyPI by running pip install lmc.

Manual

Download lmc/lmc.py and put it somewhere on your PYTHONPATH. You will need to have the numpy package installed. The mpi4py package is optional, but highly recommended.

Usage and Help

Documentation can be found throughout lmc.py, mostly in the form of docstrings, so it's also available through the Python interpreter. There's also a help() function (near the top of the file, if you're browsing) and an example() function (near the bottom).

The examples can also be browsed here.

About

Logarithmantic Monte Carlo

Topics

Resources

Stars

4 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

37 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

ascl:1706.005PyPiLGPL-3.0

Logarithmantic Monte Carlo (LMC)

Python code for Markov Chain Monte Carlo

Logarithmancy (n): divination by means of algorithms

What is this?

LMC (not to be confused with the Large Magellanic Cloud) is a bundle of Python code for performing Markov Chain Monte Carlo, which implements a few different multidimensional proposal strategies and (optionally parallel) adaptation methods. There are similar packages out there, notably pymc - LMC exists because I found the alternatives to be too inflexible for the work I was doing at the time. On the off chance that someone else is in the same boat, here it is.

The samplers currently included are Metropolis, slice, and the affine-invariant sampler popularized by emcee (Goodman & Weare 2010).

An abridged description of the package (from the help function) is copied here:

The module should be very flexible, but is designed with these things foremost in mind:
1. use with expensive likelihood calculations which probably have a host of hard-to-modify
code associated with them.
2. making it straightforward to break the parameter space into subspaces which can be sampled
using different proposal methods and at different rates. For example, if changing some
parameters requires very expensive calulations in the likelihood, the other, faster
parameters can be sampled at a higher rate. Or, some parameters may lend themselves to
Gibbs sampling, while others may not, and these can be block updated independently.
3. keeping the overhead low to facilitate large numbers of parameters. Some of this has been
lost in the port from C++, but, for example, the package provides automatic tuning of the
proposal covariance for block updating without needing to store traces of the parameters in
memory.
Real-valued parameters are usually assumed, but the framework can be used with other types of
parameters, with suitable overloading of classes.
A byproduct of item (1) is that the user is expected to handle all aspects of the calculation of
the posterior. The module doesn't implement assignment of canned, standard priors, or automatic
discovery of shortcuts like conjugate Gibbs sampling. The idea is that the user is in the best
position to know how the details of the likelihood and priors should be implemented.
Communication between parallel chains can significantly speed up convergence. In parallel mode,
adaptive Updaters use information from all running chains to tune their proposals, rather than
only from their own chain. The Gelman-Rubin convergence criterion (ratio of inter- to intra-chain
variances) for each free parameter is also calculated. Parallelization is implemented in two ways;
see ?Updater for instructions on using each.
1. Via MPI (using mpi4py). MPI adaptations are synchronous: when a chain reaches a communication
point, it stops until all chains have caught up.
2. Via the filesystem. When a chain adapts, it will write its covariance information to a file. It
will then read in any information from other chains that is present in similar files, and
incorporate it when tuning. This process is asynchronous; chains will not wait for one another;
they will simply adapt using whatever information has been shared at the time.

Installation

Automatic

Install from PyPI by running pip install lmc.

Manual

Download lmc/lmc.py and put it somewhere on your PYTHONPATH. You will need to have the numpy package installed. The mpi4py package is optional, but highly recommended.

Usage and Help

Documentation can be found throughout lmc.py, mostly in the form of docstrings, so it's also available through the Python interpreter. There's also a help() function (near the top of the file, if you're browsing) and an example() function (near the bottom).

The examples can also be browsed here.

About

Logarithmantic Monte Carlo

Topics

Resources

Stars

4 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

37 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

ascl:1706.005PyPiLGPL-3.0

Logarithmantic Monte Carlo (LMC)

Python code for Markov Chain Monte Carlo

Logarithmancy (n): divination by means of algorithms

What is this?

LMC (not to be confused with the Large Magellanic Cloud) is a bundle of Python code for performing Markov Chain Monte Carlo, which implements a few different multidimensional proposal strategies and (optionally parallel) adaptation methods. There are similar packages out there, notably pymc - LMC exists because I found the alternatives to be too inflexible for the work I was doing at the time. On the off chance that someone else is in the same boat, here it is.

The samplers currently included are Metropolis, slice, and the affine-invariant sampler popularized by emcee (Goodman & Weare 2010).

An abridged description of the package (from the help function) is copied here:

The module should be very flexible, but is designed with these things foremost in mind:
1. use with expensive likelihood calculations which probably have a host of hard-to-modify
code associated with them.
2. making it straightforward to break the parameter space into subspaces which can be sampled
using different proposal methods and at different rates. For example, if changing some
parameters requires very expensive calulations in the likelihood, the other, faster
parameters can be sampled at a higher rate. Or, some parameters may lend themselves to
Gibbs sampling, while others may not, and these can be block updated independently.
3. keeping the overhead low to facilitate large numbers of parameters. Some of this has been
lost in the port from C++, but, for example, the package provides automatic tuning of the
proposal covariance for block updating without needing to store traces of the parameters in
memory.
Real-valued parameters are usually assumed, but the framework can be used with other types of
parameters, with suitable overloading of classes.
A byproduct of item (1) is that the user is expected to handle all aspects of the calculation of
the posterior. The module doesn't implement assignment of canned, standard priors, or automatic
discovery of shortcuts like conjugate Gibbs sampling. The idea is that the user is in the best
position to know how the details of the likelihood and priors should be implemented.
Communication between parallel chains can significantly speed up convergence. In parallel mode,
adaptive Updaters use information from all running chains to tune their proposals, rather than
only from their own chain. The Gelman-Rubin convergence criterion (ratio of inter- to intra-chain
variances) for each free parameter is also calculated. Parallelization is implemented in two ways;
see ?Updater for instructions on using each.
1. Via MPI (using mpi4py). MPI adaptations are synchronous: when a chain reaches a communication
point, it stops until all chains have caught up.
2. Via the filesystem. When a chain adapts, it will write its covariance information to a file. It
will then read in any information from other chains that is present in similar files, and
incorporate it when tuning. This process is asynchronous; chains will not wait for one another;
they will simply adapt using whatever information has been shared at the time.

Installation

Automatic

Install from PyPI by running pip install lmc.

Manual

Download lmc/lmc.py and put it somewhere on your PYTHONPATH. You will need to have the numpy package installed. The mpi4py package is optional, but highly recommended.

Usage and Help

Documentation can be found throughout lmc.py, mostly in the form of docstrings, so it's also available through the Python interpreter. There's also a help() function (near the top of the file, if you're browsing) and an example() function (near the bottom).

The examples can also be browsed here.

About

Logarithmantic Monte Carlo

Topics

Resources

Stars

4 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages