Jeffrey M. Friedman, MD., Ph.D. Marilyn M. Simpson Professor, The Rockefeller University. Investigator, Howard Hughes Medical Institute. Dr. Friedman received an M.D. from Albany Medical College and a Ph.D. from Rockefeller in 1984. Dr. Friedman is known for his work on molecular mechanisms that regulate body weight. His group reported the isolation of the obese (ob) gene in mice and humans, and subsequently determined that the ob gene is responsible for producing leptin, a previously unknown hormone. Leptin plays a key role in controlling appetite, energy expenditure, and fat storage. Dr. Friedman's current work centers on the molecular mechanisms of leptin action and the genetics of obesity and associated disorders. His research has been recognized by numerous awards, including the 2010 Albert Lasker Basic Medical Research Award, the BBVA Foundation Frontiers of Knowledge Award, the Shaw Prize for Life Sciences and Medicine, and the Gairdner Foundation International Award. He is a member of the National Academy of Science and the Institute of Medicine. Dr. Friedman was a scientific founder of Millennium Pharmaceuticals and Envoy Pharmaceuticals. He is also Chair of the Scientific Advisory Board at Bay City Capital.


text:
Q: How can I check if numbers are consecutive primes? The input line contains three positive integers: r, s, and a, where (2 <= r < s < a).  It is guaranteed that r is prime.
It should print YES, if s is the next prime number after r and a is the next prime number after s; otherwise, it should print NO.
Currently, I have the following isPrime() method:
boolean isPrime(int n)  {
    //check if n is a multiple of 2
    if (n%2==0)
        return false;
    //if not, then just check the odds
    for(int i=3;i*i<=n;i+=2) {
        if(n%i==0)
            return false;
    }
    return true;
}

A: Try this:
public int nextPrime(int start){
    int next = start+1;

    while(!isPrime(next)){
        next++;
    }

    return next;
}

public void arePrimeSequence(int r, int s, int a){
    int firstPrime = nextPrime(r);
    int secondPrime = nextPrime(firstPrime);

    if(s == firstPrime && a == secondPrime){
        System.out.println("YES");
    }
    else{
        System.out.println("NO");
    }
}

A: Some improvement can be made in the code to determine next prime. Instead of incrementing by 1 you can increment the number by 2. As first number is guaranteed as prime and if it is not 2 then increment  by 2.
public int nextPrime(int start){
if (start==2) return 3;
int next = start+2;

while(!isPrime(next)){
    next+=2;
}

return next;

}

redpajama_set_name: RedPajamaStackExchange


text:
Faith in the Special Relationship? An Interview with Ger FitzGerald
The Anglo-American 'Special Relationship' is grounded in a shared history and language and in cultural similarities. What does it mean then that, according to a new report from the British Council, "the characteristics of religious identification and practice substantially differs across the two countries"? Sophie Stuart-Menteth, a graduate student at Cambridge University, interviewed report author Gerald FitzGerald to explore these differences and their implications.
Religion & Diplomacy: Tell us a bit about the origins of the report. What prompted this survey?
Fitzgerald: Because of our specific interest in religion and belief and our core mission to strengthen transatlantic ties, we thought that this would be an interesting and productive area. There's also a dearth of comparative US-UK surveys that examine religion and belief and it provided an opportunity to revisit and amplify the findings of our history of convening transatlantic expertise at the intersection of religion and international affairs.
In the U.S., religion and belief has been at the forefront of the British Council's civil society work for more than a decade. The Bridging Voices project, which I manage out of our office in Washington, D.C., has been an important component of that work. There is also currently a push to mainstream religion and belief, when it's appropriate to do so, across the British Council's global network.
R&D: The figures relating to perspectives on the greatest threats to peace were fascinating. People in the UK are over twice as likely as those in the US to identify religious extremism as one of the top three threats (20% vs. 8%). Instead, the US seems to be more concerned with domestic issues, with one fifth picking racism, domestic terrorism, and political extremism (20%, 19%, 19%). Does this create potential tensions in any collaboration over religion policy?
Dr Gerald Fitzgerald
Fitzgerald: People who have read the report have zeroed in on this. I think it points to two things: First, I think that religion has been constructed as being more problematic in the public sphere in Britain whereas, generally speaking, religion has been constructed in the American imaginary in a more positive fashion—especially as it forms an important part of the founding story of the American imagined community.
I think that the 'deprivatization' of religion in the UK, to use José Casanova's term, has created some dissonance because it conflicts with a deeply-entrenched European self-understanding that has long assumed the universality of secular-modernization processes. The Rushdie Affair and the Headscarf Affairs were critical junctures in the sense that they revealed the fissures in these European secular assumptions and self-understandings in the face of Europe's multicultural and multifaith reality. Unfortunately, the narratives surrounding these events were grossly simplistic and failed to reflect the diverse and nuanced opinions across British and French communities. Of course, international actors, such as Iran and Saudi Arabia, also became involved in unhelpful ways and British Muslim communities were caught in the crossfire. These tensions have been massively exacerbated, of course, after 9/11 and 7/7 as crude media discourses often fused religion and extremism. We saw this survey question as an opportunity to critique that prevailing construction
Second, I think that Americans are simply more internally-focused. This is represented in enduring isolationist factions in American politics that span the spectrum from an anti-imperial faction on the political left to libertarian and nativist factions on the political right. This is also present in parts of the UK of course, but I think it's more entrenched and inward-looking in the U.S.
I don't think this has much impact on the relationship between US and UK foreign policy establishments—at least not in my experience. Foreign policy bureaucracies on both sides of the Atlantic are quite nuanced in their understandings of the importance of how we use language. This is evident, for example, in the way the State Department has resisted and pushed back on the Trump Administration's attempts to deploy the terminology of 'radical Islamic extremism.'
R&D: Throughout the report, it is clear that the people in the US are more likely to hold stronger views on religion. For example, while two thirds of Americans agree strongly that Freedom of Religion or Belief (FoRB) is a fundamental human right, less than half of Britons feel the same (64% vs. 46%). What, if any, are the relational and diplomatic implications of this divergence?
Fitzgerald: This variation between the U.S. and the U.K. in the space reserved for religion in the public sphere has diplomatic and relational implications in a number of different ways. First, because of the unique state-religion trajectory of the U.S., Americans are very attached to the role of "freedom of religion" as an integral part of the founding national myth, which is often cast in terms of the "first freedom." I'd argue that this has path dependent effects. While there is obviously a complex causality involved, I'd suggest that one such effect is the tendency in the U.S. to separate out 'international religious freedom' from other human rights agendas whereas Britain—and Europe more generally—continues to pursue a more holistic approach. This is mirrored in terminological differences between 'religious freedom / liberty' (in the U.S. parlance) and 'freedom of religion and belief' (in the British parlance). However, I sense that there may be some convergence occurring here in recent months. For example, with the U.K. and other European countries recently signing on to the International Religious Freedom Alliance, I've noticed that the framing language on the U.S. side has become increasingly FoRB-like.
R&D: The report aims to highlight the need for greater appreciation by foreign policy establishments of the role religion plays in international affairs, requiring more robust religious literary training for diplomatic personnel and enhanced capacities for 'religious engagement'. What would this look like practically, particularly enhanced capacities for religious engagement?
Photo credit: British Council
Fitzgerald: There's a tendency among foreign policy elites to see attention to religion as only being an important consideration in the Freedom of Religion and Belief (FoRB) and Countering Violent Extremism (CVE) worlds, which means that we are in danger of missing how important religion and belief can be in shaping everyday lives and decision-making processes. Also, I think that foreign policy establishments can lurch between 'theologocentrism' (where everything becomes reduced to religion) and a tendency to retreat to a secular safety zone from where religion can be safely ignored. These are both serious cultural and cognitive blind spots that are not mutually exclusive. Training in 'religious engagement' is important so that foreign policy professionals can know when—and when not—to engage with religion and/or religious leaders.
This is exacerbated by the 'conveyor belt' from graduate study to foreign policy establishments, which has traditionally drawn from academic disciplines such as International Relations. As an IR grad myself, I'd argue that the dominance of realist and liberal theories in the study of IR means that grad students receive scant training in cultural determinants, which are seen as theoretically irrelevant. Indeed, it is often the case that the only engagement of the American IR graduate with 'religion' is a reading of The Clash of Civilizations. Even if the point of reading Huntington is to critique him, this is still tragic. I think there needs to be more emphasis on drawing from disciplines within the humanities that ask the big, existential, questions.
Ideally, addressing these kinds of issues could involve mandatory generalist trainings for junior diplomatic personnel. It could also involve developing specialist knowledge on specific religious traditions within institutions or in preparation for particular diplomatic deployments. The U.S. made some strides on this under the Obama Administration—and I'm thinking in particular of the founding of the Office of Religion and Global Affairs by Secretary Kerry (which has been reduced in size and rebranded as Strategic Religious Engagement by the Trump Administration). The FCO has been conducting an increasing number of elective trainings in various aspects of religion and belief, which is encouraging. There's a long way to go—and sometimes it feels like one step forward and two steps backwards. However, the ultimate goal is to mainstream these ideas and bring foreign policy establishments into alignment with new post-secular understandings.
R&D: The report explored peoples' use of digital media for information on religion and belief, and found Americans to be more engaged with this (three in ten Americans access digital sources at least once a week, in comparison to only two in ten Britons, 31% vs. 21%). Is there a way that digital sources could be included in strategies to increase understanding of religion by foreign policy establishments? Secondly, what do you think accounts for the greater engagement with digital sources by men and non-Christians across the US and UK?
Fitzgerald: Yes, I think this is already happening. There's evidence that demonstrates that hybrid learning environments have distinct advantages in terms of educational outcomes. I know that people within the State Department have been working on digital learning tools, such as producing animated videos, to illustrate the extent to which the separation of church and state does—and does not—impact diplomatic work outside the U.S. This can be tricky territory to navigate for the uninitiated. Beyond websites and digital documents, I'm interested in network mapping tools, which I think can be very useful in visualizing the globalized activities of transnational religious groups. This could produce data visualizations, for example, of how 'boomerang' effects—with both good and bad outcomes—can occur when religious groups interact with states across a variety of issues. My impression, however, is that governments are not yet particularly interested in network analysis—so, again, there's a great deal of work to do!
For religious minorities, I think that increased barriers to information may prompt individuals to resort to online resources in proportionally greater numbers. For example, the internet provides many Muslims with spiritual guidance by means of online 'fatwa banks' where one can do keyword searches for fatwa on particular issues. It is likely to be more difficult for non-Christians to access spiritual guidance in a person-to-person modality. As far as gender differences are concerned, there's a distinct lack of research and theorizing about the intersection of gender, religion, and communication. There are studies that find that women are, generally speaking, more religious than men, but with this assumption, one could also make an argument that we should expect women to engage more than men with online resources. There may also be some gender differentiated social desirability bias effects here as well. I think this again falls into the "needs more research" category.
R&D: What do think are the biggest challenges facing foreign policy establishments in trying to understand religion?
Fitzgerald: I think there are three noteworthy challenges that I would mention. First, I think that both Britain and the U.S. are challenged by the persistence of secular biases within foreign policy establishments involving tacit assumptions about what 'religion' is, where it belongs and does not belong, and who or what speaks on its behalf. This has resulted in 'blind spots' about the role that religion, and religious authority, plays in development, conflict and peace dynamics, disaster relief, and a host of other international issues.
Second, and this is particular to the U.S., there is a lack of clear legal guidelines about whether the separation of church and state ends at the water's edge or whether, and to what extent, it extends into the international sphere. Historically, this has led government to be slow to respond in arenas where religion plays a global role. More recently, it has led to a tendency to see religion through a lens of counterterrorism or CVE. The U.S.-led intervention in Iraq in 2003 also brought this home when it was assumed that the dismantling of Saddam Hussein's bureaucratic-rational regime would provide a blank slate for building a new governance model. However, important national leaders with charismatic authority remained in place—leaders such as Ayatollah Ali al-Sistani—with whom the coalition was not at all equipped to engage.
Finally—and again more germane to the U.S. case—the role of religion in government has become ensnared in the domestic culture wars. This has produced a tendency in the U.S. to see 'religious freedom' and 'religious engagement' functions as being in competition with one another, which results in a kind of zero-sum mentality. That is, under more conservative administrations, we tend to see a growth in 'religious freedom' capacities and a corresponding decline in 'religious engagement' capacities. More liberal administrations trend in the opposite direction. So, there's not only 'siloing' but also territorialism between these different functions.
R&D: The report refers to academics, including Charles Taylor, who have written about living in a 'post-secular' world. How do the findings in this report help us understand the world Americans and Britons inhabit?
Working in religion and international affairs, it has become almost obligatory to start a talk by citing the Pew global religious landscape data from 2017, which noted the 84 percent of the world's population identifies with a religious tradition. This still causes surprise for many people in the Global North. What's even more surprising, however, is Pew's projection, in the very same report, that this percentage is likely to increase in the coming decades. This seems to create some dissonance, and even hostility, among Brits and Americans who are very attached to the secularization-modernization mentality. I think that we have yet to grasp the full importance of this for cultural relations and diplomacy. One of the drivers of the British Council report was to draw attention to the increasing role of religion in international affairs. We see this in the growth of religiously-inspired forms of nationalism in the domestic sphere and the harnessing of religion for the purpose of projecting soft-power in the international sphere.
R&D: The report looks as perspectives in the US and UK. To what extent do you think its methodology and findings are relevant beyond these two countries?
I'm very cautious about making any generalizations on the survey data! I think it would be interesting to replicate this kind of survey across a variety of countries. In terms of distilling the findings of our convenings of expertise, I would say that the idea of a 'secular bias' in foreign policy establishments is something that I believe continues to operate across much of the Global North.
Get the latest from Religion & Diplomacy in your email.
TPNRD Releases its 2020 Strategic Note
The Transatlantic Policy Network on Religion & Diplomacy (TPNRD) has released its 2020 Strategic Note on Religion & Diplomacy. This annual resource is designed to help […]
Will COVID-19 Cause a Religious Recession?
By Brian Hollar As COVID-19 rapidly spreads around the world, the sphere of life most are used to living in has rapidly contracted into our […]
Is the MENA Region Becoming Less Religious? An Interview with Michael Robbins
In late 2019, the research network Arab Barometer released the results of new polling surveys that show that there has been a decline religious faith and […]
The Hajj in Times of Epidemics
By Marjo Buitelaar. The Saudi government has recently ordered all hajj companies to put their activities on hold because of the coronavirus pandemic. The hajj […]
COVID-19 and Pentecostals in Africa
By Jörg Haustein As Africa steps up preventative measures against COVID-19, Pentecostals are offering their own protections: "I want to assure you that there is […]
What can we Learn about Religion and COVID-19 from the Epidemic of 1616? An interview with Matthew Rowley
As the COVID-19 pandemic spreads around the globe many religious leaders and laypeople have sought to discern some divine purpose behind it. But historian Matthew […]
Is French Laïcité State Atheism or Religious Freedom? An Interview with Eric Germain
The French minister of the armed forces recently launched a new, revised edition of a report on military secularism that demonstrates that a high degree […]
The Anglo-American 'Special Relationship' is grounded in a shared history and language and in cultural similarities. What does it mean then that, according to a […]
TPNRD Releases New Report on Religion and Coloniality in Diplomacy
The Transatlantic Policy Network on Religion & Diplomacy (TPNRD) has released a new report on Religion and Coloniality in Diplomacy by Joram Tarusarira of the […]

redpajama_set_name: RedPajamaCommonCrawl


A drawing based upon the poem "A Wind Has Blown The Rain Away and Blown" by e. e. cummings.
Just discovered this old drawing/collage from a couple of years ago. It is based on, among other things, exploring an old house in Devon which was crumbling into the sea - there was a huge crack down the centre of the building and the stairs were sloping.


Known for its strong currents and whitewater rapids, Montreal's Saint Lawrence River is a favorite spot for kayaking and rafting trips. But local surfers also take advantage of the unique conditions here.
Every day you'll find a handful of surfers riding river waves.
Wanting to try it for myself, I filled a cooler with refreshing Cayman Jack Margaritas and drove up to Montreal for a few days of river surfing on the outskirts of the city.
I knew that after spending a few days in the sun, cooling off with the taste of Cayman Jack – blue agave nectar, organic limes and real cane sugar – would be exactly what I'd need.
Only a handful of rivers around the world boast standing waves large enough to ride using a surfboard. River waves are created by high volumes of water flowing over rocks, producing a large wave in the process.
Surfers are able to float into this wave and ride the water flow for as long as they want without actually moving anywhere — unlike with ocean waves.
Even experienced ocean surfers have trouble adapting to river waves.
Instead of a nice gradual slope, a river wave resembles more of a half-pipe shape. This unfortunately makes it easier to catch your surfboard nose in the water — resulting in a wipeout.
There are a few different waves you can surf on the Saint Lawrence River. The one most people learn on is called "Bunny Wave" near the Lachine Rapids area. Once you master that, you can move up to Habitat 67.
Habitat 67 is a much larger & faster wave located behind a famous building with the same name. Surfers park by the tennis courts and walk down a dirt path in back.
Everyone was polite (it's Canada!) and rode the wave for only a few minutes before waving the next person over. While waiting for my turn, I passed the time sharing surf stories and tasty Cayman Jack Margaritas with others in the lineup.
They appreciated a refreshing margarita before tackling another wave. Inspired by my partnership with Cayman Jack, I thought about how important it is to craft your own journey when you travel.
This means embracing everything that comes along with a new adventure. The planning, the anticipation, the challenges, the people you meet — the little pieces that produce a complete journey.
River surfing can be challenging. The general process is to start upriver, paddle out, and carefully maneuver into position before turning backwards at the last second letting the current drag you into the sweet spot with the most whitewater.
Once you drop into this liquid half-pipe, paddle hard as you get sucked backwards. If you don't put in enough effort, the river's powerful surge will drag you over the top and down through the rapids.
Ride the surfboard on your stomach for a while first to get a feel for the wave.
Once you're comfortable, pop up and maintain your balance. Because it's a perpetual wave, you can theoretically ride it for as long as you want!
Once you get pulled over the wave into the rapids (and you will), it's important to keep ahold of your board and relax. Attempting to paddle against the current is a losing battle that will just make you exhausted.
As the rapids dissipate you swim over to the shore, hiking back to the starting point to try it all over again.
It took me at least 6 attempts to get the hang of it, and I have some surfing experience. Learning to surf a river isn't easy — be patient!
Now you'd think that Montreal river water would be ice cold — but it actually wasn't that bad. The water temperature can vary between the 60's and 70's (fahrenheit). A wetsuit is recommended if you'll be there for a while.
Useful Notes: If you want to learn how to surf a river wave, KSF offers classes. It's not the same as ocean surfing. If you already know how to surf, you can also rent a board from them and try on your own.
Have you ever heard of river surfing before? Would you try it?


Individuals who refine knowledge content from the originating owner into the specific product that the knowledge users require. These specialists have strong skills in the business process and its knowledge resources, as well as skill in organizing and filtering knowledge into a highly accessible and usable form. An extension to this definition is the external knowledge content specialist, who manages access to external content that the enterprise has purchased or subscribed to.


text:
package main

import (
	"encoding/json"
	"fmt"

	"github.com/pkg/errors"
)

type Context map[string]interface{}

// Request is the warden's request object.
type Request struct {
	// Resource is the resource that access is requested to.
	Resource string `json:"resource"`

	// Action is the action that is requested on the resource.
	Action string `json:"action"`

	// Subejct is the subject that is requesting access.
	Subject string `json:"subject"`

	// Context is the request's environmental context.
	Context Context `json:"context"`
}

// Condition either do or do not fulfill an access request.
type Condition interface {
	// GetName returns the condition's name.
	GetName() string

	// Fulfills returns true if the request is fulfilled by the condition.
	Fulfills(interface{}, *Request) bool

	// Value set value to the condition.
	Values(string, map[string]interface{}) error
}

// Conditions is a collection of conditions.
type Conditions map[string]Condition

// AddCondition adds a condition to the collection.
func (cs Conditions) AddCondition(key string, c Condition) {
	cs[key] = c
}

// MarshalJSON marshals a list of conditions to json.
func (cs Conditions) MarshalJSON() ([]byte, error) {
	out := make(map[string]*jsonCondition, len(cs))
	for k, c := range cs {
		raw, err := json.Marshal(c)
		if err != nil {
			return []byte{}, errors.WithStack(err)
		}

		out[k] = &jsonCondition{
			Type:    c.GetName(),
			Options: json.RawMessage(raw),
		}
	}

	return json.Marshal(out)
}

// UnmarshalJSON unmarshals a list of conditions from json.
func (cs Conditions) UnmarshalJSON(data []byte) error {
	if cs == nil {
		return errors.New("Can not be nil")
	}

	var jcs map[string]jsonCondition
	var dc Condition

	if err := json.Unmarshal(data, &jcs); err != nil {
		return errors.WithStack(err)
	}

	for k, jc := range jcs {
		var found bool
		for name, c := range ConditionFactories {
			if name == jc.Type {
				found = true
				dc = c()

				if len(jc.Options) == 0 {
					cs[k] = dc
					break
				}

				if err := json.Unmarshal(jc.Options, dc); err != nil {
					return errors.WithStack(err)
				}

				cs[k] = dc
				break
			}
		}

		if !found {
			return errors.Errorf("Could not find condition type %s", jc.Type)
		}
	}

	return nil
}

// ConditionFactories is where you can add custom conditions
var ConditionFactories = map[string]func() Condition{
	new(StringEqualCondition).GetName(): func() Condition {
		return new(StringEqualCondition)
	},
	new(KeyValueCondition).GetName(): func() Condition {
		return new(KeyValueCondition)
	},
}

type jsonCondition struct {
	Type    string          `json:"type"`
	Options json.RawMessage `json:"options"`
}

func main() {
	{
		condition := &StringEqualCondition{Equals: "chengdu"}
		conditions := Conditions{"region": condition}

		jsonBuffer, err := conditions.MarshalJSON()
		fmt.Println("--->", string(jsonBuffer), err)

		cs := Conditions{}
		err = cs.UnmarshalJSON(jsonBuffer)
		fmt.Println("--->", err)
		for k, c := range cs {
			fmt.Println("\t", k, c)
		}
	}

	{
		condition := &KeyValueCondition{Key: "project", Value: "chengdu"}
		conditions := Conditions{"region": condition}

		jsonBuffer, err := conditions.MarshalJSON()
		//jsonBuffer, err := json.Marshal(conditions)
		fmt.Println("--->", string(jsonBuffer), err)

		//cs := Conditions{}
		err = cs.UnmarshalJSON(jsonBuffer)
		err = json.Unmarshal(jsonBuffer, &cs)
		fmt.Println("--->", err)
		for k, c := range cs {
			fmt.Println("\t", k, c)
		}
	}
}

redpajama_set_name: RedPajamaGithub


text:
import logging
import math
import random
import sys
from typing import List, MutableSequence, Sequence, Tuple, Union, Optional

from .logging import get_logger

logger = get_logger(__name__, logging.ERROR)

# increase recursion limit for recursive quicksort
sys.setrecursionlimit(3000)

_MIN = 1e-9
_MAX = 1e9

def compute_moiety_conservation_laws(
        stoichiometric_list: Sequence[float],
        num_species: int,
        num_reactions: int,
        max_num_monte_carlo: int = 20,
        rng_seed: Union[None, bool, int] = False,
        species_names: Optional[Sequence[str]] = None,
) -> Tuple[List[List[int]], List[List[float]]]:
    """Compute moiety conservation laws.

    According to the algorithm proposed by De Martino et al. (2014)
    https://doi.org/10.1371/journal.pone.0100750

    :param stoichiometric_list:
        the stoichiometric matrix as a list (species x reactions,
        column-major ordering)
    :param num_species:
        total number of species in the reaction network
    :param num_reactions:
        total number of reactions in the reaction network
    :param max_num_monte_carlo:
        maximum number of MonteCarlo steps before changing to relaxation
    :param rng_seed:
        Seed for the random number generator. If `False`, the RNG will not be
        re-initialized. Other values will be passed to :func:`random.seed`.
    :param species_names:
        Species names. Optional and only used for logging.
    :returns:
        Integer MCLs as list of lists of indices of involved species and
        list of lists of corresponding coefficients.
    """
    # compute semi-positive conservation laws
    (kernel_dim, engaged_species, int_kernel_dim, conserved_moieties,
     cls_species_idxs, cls_coefficients) = _kernel(
        stoichiometric_list, num_species, num_reactions)
    # if the number of integer MCLs equals total MCLS no MC relaxation
    done = (int_kernel_dim == kernel_dim)

    if not done:
        # construct interaction matrix
        J, J2, fields = _fill(stoichiometric_list, engaged_species,
                              num_species)

        # seed random number generator
        if rng_seed is not False:
            random.seed(rng_seed)

        timer = 0
        # maximum number of montecarlo search before starting relaxation
        while not done:
            yes, int_kernel_dim, conserved_moieties = _monte_carlo(
                engaged_species, J, J2, fields, conserved_moieties,
                int_kernel_dim, cls_species_idxs, cls_coefficients,
                num_species, max_iter=max_num_monte_carlo
            )
            # if the number of integer MCLs equals total MCLS then MC done
            done = (int_kernel_dim == kernel_dim)
            timer = 0 if yes else timer + 1

            if timer == max_num_monte_carlo:
                done = _relax(stoichiometric_list, conserved_moieties,
                              num_reactions, num_species)
                timer = 0
    _reduce(int_kernel_dim, cls_species_idxs, cls_coefficients, num_species)
    _output(int_kernel_dim, kernel_dim, engaged_species, cls_species_idxs,
            cls_coefficients, species_names, verbose=True)

    return cls_species_idxs[:int_kernel_dim], cls_coefficients[:int_kernel_dim]

def _output(
        int_kernel_dim: int,
        kernel_dim: int,
        int_matched: List[int],
        species_indices: List[List[int]],
        species_coefficients: List[List[float]],
        species_names: Optional[Sequence[str]] = None,
        verbose: bool = False,
        log_level: int = logging.DEBUG
):
    """Log infos on identified conservation laws"""
    def log(*args, **kwargs):
        logger.log(log_level, *args, **kwargs)

    log(f"There are {int_kernel_dim} linearly independent conserved "
        f"moieties, engaging {len(int_matched)} state variables.")
    if int_kernel_dim == kernel_dim:
        log("They generate all the conservation laws")
    else:
        log(f"They don't generate all the conservation laws, "
            f"{kernel_dim - int_kernel_dim} of them are not reducible to "
            "moieties")
    # print all conserved quantities
    if verbose:
        for i, (coefficients, engaged_species_idxs) \
                in enumerate(zip(species_coefficients, species_indices)):
            if not engaged_species_idxs:
                continue
            log(f"Moiety number {i + 1} engages {len(engaged_species_idxs)} "
                "species:")
            for species_idx, coefficient \
                    in zip(engaged_species_idxs, coefficients):
                name = species_names[species_idx] if species_names \
                    else species_idx
                log(f"\t{name}\t{coefficient}")

def _qsort(
        k: int,
        km: int,
        order: MutableSequence[int],
        pivots: Sequence[int]
) -> None:
    """Quicksort

    Recursive implementation of the quicksort algorithm

    :param k:
        number of elements to sort
    :param km:
        current center element
    :param order:
        ordering of the elements
    :param pivots:
        corresponding pivot elements from scaled partial pivoting strategy
    """
    # TODO: Rewrite into an iterative algorithm with pivoting strategy

    if k - km < 1:
        # nothing to sort
        return

    pivot = km + int((k - km) / 2)
    l = 0
    p = k - km - 1
    new_order = [0] * (k - km)
    for i in range(km, k):
        if i != pivot:
            if pivots[order[i]] < pivots[order[pivot]]:
                new_order[l] = order[i]
                l += 1
            else:
                new_order[p] = order[i]
                p -= 1
    new_order[p] = order[pivot]
    order[km:k] = new_order

    # calculate center, then recursive calls on left and right intervals
    centre = p + km
    _qsort(k, centre + 1, order, pivots)
    _qsort(centre, km, order, pivots)

def _kernel(
        stoichiometric_list: Sequence[float],
        num_species: int,
        num_reactions: int
) -> Tuple[int, List[int], int, List[int],
           List[List[int]], List[List[float]]]:
    """
    Kernel (left nullspace of :math:`S`) calculation by Gaussian elimination

    To compute the left nullspace of the stoichiometric matrix :math:`S`,
    a Gaussian elimination method with partial scaled pivoting is used to deal
    effectively with a possibly ill-conditioned stoichiometric matrix
    :math:`S`.

    Note that this is the Python reimplementation of the algorithm proposed by
    `De Martino et al. (2014) <https://doi.org/10.1371/journal.pone.0100750>`_
    and thus a direct adaption of the original implementation in C++.

    :param stoichiometric_list:
        the stoichiometric matrix as a list (species x reactions,
        col-major ordering)
    :param num_species:
        total number of species in the reaction network
    :param num_reactions:
        total number of reactions in the reaction network
    :returns:
        kernel dimension, MCLs, integer kernel dimension, integer MCLs and
        indices to species and reactions in the preceding order as a tuple
    """
    matrix: List[List[int]] = [[] for _ in range(num_species)]
    matrix2: List[List[float]] = [[] for _ in range(num_species)]
    i_reaction = 0
    i_species = 0
    for val in stoichiometric_list:
        if val != 0:
            matrix[i_species].append(i_reaction)
            matrix2[i_species].append(val)
        i_species += 1
        if i_species == num_species:
            i_species = 0
            i_reaction += 1
    for i in range(num_species):
        matrix[i].append(num_reactions + i)
        matrix2[i].append(1)

    order: List[int] = list(range(num_species))
    pivots = [matrix[i][0] if len(matrix[i]) else _MAX
              for i in range(num_species)]

    done = False
    while not done:
        _qsort(num_species, 0, order, pivots)
        for j in range(num_species - 1):
            if pivots[order[j + 1]] == pivots[order[j]] != _MAX:
                min1 = _MAX
                if len(matrix[order[j]]) > 1:
                    for i in range(len(matrix[order[j]])):
                        min1 = min(min1, abs(matrix2[order[j]][0]
                                             / matrix2[order[j]][i]))

                min2 = _MAX
                if len(matrix[order[j + 1]]) > 1:
                    for i in range(len(matrix[order[j + 1]])):
                        min2 = min(min2, abs(matrix2[order[j + 1]][0]
                                             / matrix2[order[j + 1]][i]))

                if min2 > min1:
                    # swap
                    k2 = order[j + 1]
                    order[j + 1] = order[j]
                    order[j] = k2
        done = True

        for j in range(num_species - 1):
            if pivots[order[j + 1]] == pivots[order[j]] != _MAX:
                k1 = order[j + 1]
                k2 = order[j]
                column: List[float] = [0] * (num_species + num_reactions)
                g = matrix2[k2][0] / matrix2[k1][0]
                for i in range(1, len(matrix[k1])):
                    column[matrix[k1][i]] = matrix2[k1][i] * g

                for i in range(1, len(matrix[k2])):
                    column[matrix[k2][i]] -= matrix2[k2][i]

                matrix[k1] = []
                matrix2[k1] = []
                for col_idx, col_val in enumerate(column):
                    if abs(col_val) > _MIN:
                        matrix[k1].append(col_idx)
                        matrix2[k1].append(col_val)

                done = False
                if len(matrix[order[j + 1]]):
                    pivots[order[j + 1]] = matrix[order[j + 1]][0]
                else:
                    pivots[order[j + 1]] = _MAX

    RSolutions = [[] for _ in range(num_species)]
    RSolutions2 = [[] for _ in range(num_species)]
    kernel_dim = 0

    for i in range(num_species):
        done = all(matrix[i][j] >= num_reactions
                   for j in range(len(matrix[i])))
        if done and len(matrix[i]):
            for j in range(len(matrix[i])):
                RSolutions[kernel_dim].append(matrix[i][j] - num_reactions)
                RSolutions2[kernel_dim].append(matrix2[i][j])
            kernel_dim += 1
    del matrix, matrix2

    matched = []
    int_matched = []
    cls_species_idxs = [[] for _ in range(num_species)]
    cls_coefficients = [[] for _ in range(num_species)]

    i2 = 0
    for i in range(kernel_dim):
        ok2 = True
        for j in range(len(RSolutions[i])):
            if RSolutions2[i][j] * RSolutions2[i][0] < 0:
                ok2 = False
            if not matched or all(
                    cur_matched != RSolutions[i][j] for cur_matched in
                    matched
            ):
                matched.append(RSolutions[i][j])
        if ok2 and len(RSolutions[i]):
            min_value = _MAX
            for j in range(len(RSolutions[i])):
                cls_species_idxs[i2].append(RSolutions[i][j])
                cls_coefficients[i2].append(abs(RSolutions2[i][j]))
                min_value = min(min_value, abs(RSolutions2[i][j]))
                if not int_matched or all(
                        cur_int_matched != cls_species_idxs[i2][j]
                        for cur_int_matched in int_matched
                ):
                    int_matched.append(cls_species_idxs[i2][j])
            for j in range(len(cls_species_idxs[i2])):
                cls_coefficients[i2][j] /= min_value
            i2 += 1
    int_kernel_dim = i2

    assert int_kernel_dim <= kernel_dim
    assert len(cls_species_idxs) == len(cls_coefficients), \
        "Inconsistent number of conserved quantities in coefficients and " \
        "species"
    return (kernel_dim, matched, int_kernel_dim, int_matched, cls_species_idxs,
            cls_coefficients)

def _fill(
        stoichiometric_list: Sequence[float],
        matched: Sequence[int],
        num_species: int
) -> Tuple[List[List[int]], List[List[int]], List[int]]:
    """Construct interaction matrix

    Construct the interaction matrix out of the given stoichiometric matrix
    :math:`S`.

    :param stoichiometric_list:
        the stoichiometric matrix given as a flat list
    :param matched:
        found and independent moiety conservation laws (MCL)
    :param num_species:
        number of rows in :math:`S`
    :returns:
        interactions of metabolites and reactions, and matrix of interaction
    """
    dim = len(matched)

    # for each entry in the stoichiometric matrix save interaction
    i_reaction = 0
    i_species = 0
    matrix = [[] for _ in range(dim)]
    matrix2 = [[] for _ in range(dim)]
    for val in stoichiometric_list:
        if val != 0:
            take = dim
            for matched_idx, matched_val in enumerate(matched):
                if i_species == matched_val:
                    take = matched_idx
            if take < dim:
                matrix[take].append(i_reaction)
                matrix2[take].append(val)
        i_species += 1
        if i_species == num_species:
            i_species = 0
            i_reaction += 1

    J = [[] for _ in range(num_species)]
    J2 = [[] for _ in range(num_species)]
    fields = [0] * num_species
    for i in range(dim):
        for j in range(i, dim):
            interactions = 0
            for po in range(len(matrix[i])):
                for pu in range(len(matrix[j])):
                    if matrix[i][po] == matrix[j][pu]:
                        interactions += matrix2[i][po] * matrix2[j][pu]
            if j == i:
                fields[i] = interactions
            elif abs(interactions) > _MIN:
                J[i].append(j)
                J2[i].append(interactions)
                J[j].append(i)
                J2[j].append(interactions)
    return J, J2, fields

def _is_linearly_dependent(
        vector: Sequence[float],
        int_kernel_dim: int,
        cls_species_idxs: Sequence[Sequence[int]],
        cls_coefficients: Sequence[Sequence[float]],
        matched: Sequence[int],
        num_species: int
) -> bool:
    """Check for linear dependence between MCLs

    Check if the solutions found with Monte Carlo are linearly independent
    with respect to the previous found solution for all MCLs involved

    :param vector:
        found basis
    :param int_kernel_dim:
        number of integer conservative laws
    :param cls_species_idxs:
        NSolutions contains the species involved in the MCL
    :param cls_coefficients:
        NSolutions2 contains the corresponding coefficients in the MCL
    :param matched:
        actual found MCLs
    :param num_species:
        number of rows in :math:`S`
    :returns:
        boolean indicating linear dependence (true) or not (false)
    """
    K = int_kernel_dim + 1
    matrix: List[List[int]] = [[] for _ in range(K)]
    matrix2: List[List[float]] = [[] for _ in range(K)]
    # Populate matrices with species ids and coefficients for CLs
    for i in range(K - 1):
        for j in range(len(cls_species_idxs[i])):
            matrix[i].append(cls_species_idxs[i][j])
            matrix2[i].append(cls_coefficients[i][j])

    order2 = list(range(len(matched)))
    pivots2 = matched[:]
    _qsort(len(matched), 0, order2, pivots2)

    # ensure positivity
    for i in range(len(matched)):
        if vector[order2[i]] > _MIN:
            matrix[K - 1].append(matched[order2[i]])
            matrix2[K - 1].append(vector[order2[i]])

    order = list(range(K))
    pivots = [matrix[i][0] if len(matrix[i]) else _MAX for i in range(K)]

    # check for linear independence of the solution
    ok = False
    while not ok:
        _qsort(K, 0, order, pivots)
        for j in range(K - 1):
            if pivots[order[j + 1]] == pivots[order[j]] != _MAX:
                min1 = _MAX
                if len(matrix[order[j]]) > 1:
                    for i in range(len(matrix[order[j]])):
                        min1 = min(min1, abs(matrix2[order[j]][0]
                                             / matrix2[order[j]][i]))
                min2 = _MAX
                if len(matrix[order[j + 1]]) > 1:
                    for i in range(len(matrix[order[j + 1]])):
                        min2 = min(min2, abs(matrix2[order[j + 1]][0]
                                             / matrix2[order[j + 1]][i]))
                if min2 > min1:
                    # swap
                    k2 = order[j + 1]
                    order[j + 1] = order[j]
                    order[j] = k2
        ok = True
        for j in range(K - 1):
            if pivots[order[j + 1]] == pivots[order[j]] != _MAX:
                k1 = order[j + 1]
                k2 = order[j]
                column: List[float] = [0] * num_species
                g = matrix2[k2][0] / matrix2[k1][0]
                for i in range(1, len(matrix[k1])):
                    column[matrix[k1][i]] = matrix2[k1][i] * g
                for i in range(1, len(matrix[k2])):
                    column[matrix[k2][i]] -= matrix2[k2][i]

                matrix[k1] = []
                matrix2[k1] = []
                for i in range(num_species):
                    if abs(column[i]) > _MIN:
                        matrix[k1].append(i)
                        matrix2[k1].append(column[i])
                ok = False
                pivots[k1] = matrix[k1][0] if len(matrix[k1]) else _MAX
    K1 = sum(len(matrix[i]) > 0 for i in range(K))
    return K == K1

def _monte_carlo(
        matched: Sequence[int],
        J: Sequence[Sequence[int]],
        J2: Sequence[Sequence[float]],
        fields: Sequence[float],
        int_matched: MutableSequence[int],
        int_kernel_dim: int,
        cls_species_idxs: MutableSequence[MutableSequence[int]],
        cls_coefficients: MutableSequence[MutableSequence[float]],
        num_species: int,
        initial_temperature: float = 1,
        cool_rate: float = 1e-3,
        max_iter: int = 10
) -> Tuple[bool, int, Sequence[int]]:
    """MonteCarlo simulated annealing for finding integer MCLs

    Finding integer solutions for the MCLs by Monte Carlo, see step (b) in
    the De Martino (2014) paper and Eqs. 11-13 in the publication

    :param matched:
        number of found MCLs
    :param J:
        index of metabolites involved in a MCL
    :param J2:
        coefficients of metabolites involved in a MCL
    :param fields:
        actual number of metabolites involved in a MCL
    :param int_matched:
        actual matched MCLs
    :param int_kernel_dim:
        number of MCLs found in :math:`S`
    :param cls_species_idxs:
        Modified in-place.
    :param cls_coefficients:
        Modified in-place.
    :param initial_temperature:
        initial temperature
    :param cool_rate:
        cooling rate of simulated annealing
    :param max_iter:
        maximum number of MonteCarlo steps before changing to relaxation
    :returns:
        status of MC iteration, number of integer MCLs, number of MCLs,
        metabolites and reaction indices, MCLs and integer MCLs as a tuple

        status indicates if the currently found moiety by the Monte Carlo
        process is linearly dependent (False) or linearly independent (True)
        in case of linear dependence, the current Monte Carlo cycle can be
        considered otherwise the algorithm retries Monte Carlo up to max_iter
    """
    dim = len(matched)
    num = [int(2 * random.uniform(0, 1)) if len(J[i]) else 0
           for i in range(dim)]
    numtot = sum(num)

    def compute_h():
        H = 0
        for i in range(dim):
            H += fields[i] * num[i] ** 2
            for j in range(len(J[i])):
                H += J2[i][j] * num[i] * num[J[i][j]]
        return H

    H = compute_h()

    count = 0
    howmany = 0
    T1 = initial_temperature
    e = math.exp(-1 / T1)
    while True:
        en = int(random.uniform(0, 1) * dim)
        while not len(J[en]):
            en = int(random.uniform(0, 1) * dim)

        p = -1 if num[en] > 0 and random.uniform(0, 1) < 0.5 else 1
        delta = fields[en] * num[en]
        for i in range(len(J[en])):
            delta += J2[en][i] * num[J[en][i]]
        delta = 2 * p * delta + fields[en]

        if delta < 0 or random.uniform(0, 1) < math.pow(e, delta):
            num[en] += p
            numtot += p
            H += delta

        count += 1
        if count % dim == 0:
            T1 -= cool_rate
            if T1 <= 0:
                T1 = cool_rate
            e = math.exp(-1 / T1)

        if count == dim // cool_rate:
            count = 0
            T1 = initial_temperature
            e = math.exp(-1 / T1)
            en = int(random.uniform(0, 1) * dim)
            while not len(J[en]):
                en = int(random.uniform(0, 1) * dim)
            num = [0] * dim
            num[en] = 1
            numtot = 1

            H = compute_h()
            howmany += 1

        if (H < _MIN and numtot > 0) or (howmany == 10 * max_iter):
            break

    if howmany >= 10 * max_iter:
        return False, int_kernel_dim, int_matched

    # founds MCLS? need to check for linear independence
    if len(int_matched) and not _is_linearly_dependent(
            num, int_kernel_dim, cls_species_idxs,
            cls_coefficients, matched, num_species):
        logger.debug(
            "Found a moiety but it is linearly dependent... next.")
        return False, int_kernel_dim, int_matched

    # reduce by MC procedure
    order2 = list(range(len(matched)))
    pivots2 = matched[:]
    _qsort(len(matched), 0, order2, pivots2)
    for i in range(len(matched)):
        if num[order2[i]] > 0:
            cls_species_idxs[int_kernel_dim].append(matched[order2[i]])
            cls_coefficients[int_kernel_dim].append(num[order2[i]])
    int_kernel_dim += 1
    _reduce(int_kernel_dim, cls_species_idxs, cls_coefficients, num_species)
    min_value = 1000
    for i in range(len(cls_species_idxs[int_kernel_dim - 1])):
        if not len(int_matched) \
                or all(cur_int_matched
                       != cls_species_idxs[int_kernel_dim - 1][i]
                       for cur_int_matched in int_matched):
            int_matched.append(cls_species_idxs[int_kernel_dim - 1][i])

        min_value = min(min_value, cls_coefficients[int_kernel_dim - 1][i])
    for i in range(len(cls_species_idxs[int_kernel_dim - 1])):
        cls_coefficients[int_kernel_dim - 1][i] /= min_value

    logger.debug(
        f"Found linearly independent moiety, now there are "
        f"{int_kernel_dim} engaging {len(int_matched)} species")

    return True, int_kernel_dim, int_matched

def _relax(
        stoichiometric_list: Sequence[float],
        int_matched: Sequence[int],
        num_reactions: int,
        num_species: int,
        relaxation_max: float = 1e6,
        relaxation_step: float = 1.9
) -> bool:
    """Relaxation scheme for Monte Carlo final solution

    Checking for completeness using Motzkin's theorem. See Step (c) in
    De Martino (2014) and the Eqs. 14-16 in the corresponding publication

    :param stoichiometric_list:
        stoichiometric matrix :math:`S` as a flat list (column-major ordering)
    :param int_matched:
        number of matched integer CLs
    :param num_reactions:
        number of reactions in reaction network
    :param num_species:
        number of species in reaction network
    :param relaxation_max:
        maximum relaxation step
    :param relaxation_step:
        relaxation step width
    :returns:
        boolean indicating if relaxation has succeeded (``True``) or not
        (``False``)
    """
    K = len(int_matched)
    matrix: List[List[int]] = [[] for _ in range(K)]
    matrix2: List[List[float]] = [[] for _ in range(K)]
    i_reaction = 0
    i_species = 0
    for val in stoichiometric_list:
        if val != 0:
            take = K
            if K > 0:
                for i in range(K):
                    if i_species == int_matched[i]:
                        take = i
            if take < K:
                matrix[take].append(i_reaction)
                matrix2[take].append(val)
        i_species += 1
        if i_species == num_species:
            i_species = 0
            i_reaction += 1

    # reducing the stoichiometric matrix of conserved moieties to row echelon
    #  form by Gaussian elimination
    order = list(range(K))
    pivots = [matrix[i][0] if len(matrix[i]) else _MAX for i in range(K)]
    done = False
    while not done:
        _qsort(K, 0, order, pivots)
        for j in range(K - 1):
            if pivots[order[j + 1]] == pivots[order[j]] != _MAX:
                min1 = _MAX
                if len(matrix[order[j]]) > 1:
                    for i in range(len(matrix[order[j]])):
                        min1 = min(min1, abs(matrix2[order[j]][0]
                                             / matrix2[order[j]][i]))
                min2 = _MAX
                if len(matrix[order[j + 1]]) > 1:
                    for i in range(len(matrix[order[j + 1]])):
                        min2 = min(min2, abs(matrix2[order[j + 1]][0]
                                             / matrix2[order[j + 1]][i]))
                if min2 > min1:
                    # swap
                    k2 = order[j + 1]
                    order[j + 1] = order[j]
                    order[j] = k2
        done = True
        for j in range(K - 1):
            if pivots[order[j + 1]] == pivots[order[j]] != _MAX:
                k1 = order[j + 1]
                k2 = order[j]
                column: List[float] = [0] * num_reactions
                g = matrix2[k2][0] / matrix2[k1][0]
                for i in range(1, len(matrix[k1])):
                    column[matrix[k1][i]] = matrix2[k1][i] * g
                for i in range(1, len(matrix[k2])):
                    column[matrix[k2][i]] -= matrix2[k2][i]

                matrix[k1] = []
                matrix2[k1] = []
                for col_idx, col_val in enumerate(column):
                    if abs(col_val) > _MIN:
                        matrix[k1].append(col_idx)
                        matrix2[k1].append(col_val)
                done = False
                if len(matrix[order[j + 1]]):
                    pivots[order[j + 1]] = matrix[order[j + 1]][0]
                else:
                    pivots[order[j + 1]] = _MAX

    # normalize
    for matrix2_i in matrix2:
        if len(matrix2_i):
            norm = matrix2_i[0]
            for j in range(len(matrix2_i)):
                matrix2_i[j] /= norm

    for k1 in reversed(range(K - 1)):
        k = order[k1]
        if len(matrix[k]) <= 1:
            continue

        i = 0
        while i < len(matrix[k]):
            for i_species in range(k1 + 1, K):
                j = order[i_species]
                if not len(matrix[j]) or matrix[j][0] != matrix[k][i]:
                    continue

                # subtract rows
                # matrix2[k] = matrix2[k] - matrix2[j] * matrix2[k][i]
                row_k: List[float] = [0] * num_reactions
                for a in range(len(matrix[k])):
                    row_k[matrix[k][a]] = matrix2[k][a]
                for a in range(len(matrix[j])):
                    row_k[matrix[j][a]] -= matrix2[j][a] * matrix2[k][i]
                # filter
                matrix[k] = [row_idx for row_idx, row_val in enumerate(row_k)
                             if row_val != 0]
                matrix2[k] = [row_val for row_val in row_k if row_val != 0]

                if len(matrix[k]) <= i:
                    break
            i += 1

    indip = [K + 1] * num_reactions
    for i in range(K):
        if len(matrix[i]):
            indip[matrix[i][0]] = i
    M1 = 0
    for i in range(num_reactions):
        if indip[i] == K + 1:
            indip[i] = K + M1
            M1 += 1

    matrixAus = [[] for _ in range(M1)]
    matrixAus2 = [[] for _ in range(M1)]
    i_reaction = 0
    for i in range(num_reactions):
        if indip[i] >= K:
            matrixAus[i_reaction].append(i)
            matrixAus2[i_reaction].append(1)
            i_reaction += 1
        else:
            t = indip[i]
            if len(matrix[t]) > 1:
                for k in range(1, len(matrix[t])):
                    idx = indip[matrix[t][k]] - K
                    matrixAus[idx].append(i)
                    matrixAus2[idx].append(-matrix2[t][k])
    del matrix

    N1 = num_species - K
    matrix_aus = [[] for _ in range(N1)]
    matrix_aus2 = [[] for _ in range(N1)]
    k1 = 0
    i_reaction = 0
    i_species = 0
    for val in stoichiometric_list:
        take = 1
        for i in range(len(int_matched)):
            if i_species == int_matched[i]:
                take -= 1
        if val != 0 and take == 1:
            matrix_aus[k1].append(i_reaction)
            matrix_aus2[k1].append(val)
        i_species += 1
        k1 += take
        if i_species == num_species:
            i_species = 0
            k1 = 0
            i_reaction += 1

    matrixb = [[] for _ in range(N1)]
    matrixb2 = [[] for _ in range(N1)]
    for i in range(M1):
        for j in range(N1):
            if len(matrix_aus[j]) * len(matrixAus[i]):
                prod = 0
                for ib in range(len(matrixAus[i])):
                    for jb in range(len(matrix_aus[j])):
                        if matrixAus[i][ib] == matrix_aus[j][jb]:
                            prod += matrixAus2[i][ib] * matrix_aus2[j][jb]
                if abs(prod) > _MIN:
                    matrixb[j].append(i)
                    matrixb2[j].append(prod)
    del matrixAus, matrixAus2, matrix_aus, matrix_aus2

    var = [_MIN] * M1
    time = 0
    cmin_idx = 0
    while True:
        cmin = 1000
        for j in range(N1):
            constr = 0
            if len(matrixb[j]):
                for i in range(len(matrixb[j])):
                    constr += matrixb2[j][i] * var[matrixb[j][i]]
                if constr < cmin:
                    cmin_idx = j
                    cmin = constr
        if cmin >= 0:
            # constraints satisfied
            break

        # Motzkin relaxation
        alpha = -relaxation_step * cmin
        fact = sum(val ** 2 for val in matrixb2[cmin_idx])
        alpha /= fact
        alpha = max(1e-9 * _MIN, alpha)
        for j in range(len(matrixb[cmin_idx])):
            var[matrixb[cmin_idx][j]] += alpha * matrixb2[cmin_idx][j]

        time += 1
        if time >= relaxation_max:
            # timeout
            break

    return done

def _reduce(
        int_kernel_dim: int,
        cls_species_idxs: MutableSequence[MutableSequence[int]],
        cls_coefficients: MutableSequence[MutableSequence[float]],
        num_species: int
) -> None:
    """Reducing the solution which has been found by the Monte Carlo process

    In case of superpositions of independent MCLs one can reduce by
    iteratively subtracting the other independent MCLs, taking care
    to maintain then non-negativity constraint, see Eq. 13 in De Martino (2014)

    :param int_kernel_dim:
        number of found MCLs
    :param cls_species_idxs:
        Species indices involved in each of the conservation laws.
        Modified in-place.
    :param cls_coefficients:
        Coefficients for each of the species involved in each of the
        conservation laws. Modified in-place.
    :param num_species:
        number of species / rows in :math:`S`
    """
    K = int_kernel_dim
    order = list(range(K))
    pivots = [-len(cls_species_idxs[i]) for i in range(K)]

    done = False
    while not done:
        _qsort(K, 0, order, pivots)
        done = True
        for i in range(K - 1):
            k1 = order[i]
            for j in range(i + 1, K):
                k2 = order[j]
                column: List[float] = [0] * num_species
                for species_idx, coefficient \
                        in zip(cls_species_idxs[k1], cls_coefficients[k1]):
                    column[species_idx] = coefficient
                ok1 = True
                for species_idx, coefficient \
                        in zip(cls_species_idxs[k2], cls_coefficients[k2]):
                    column[species_idx] -= coefficient
                    if column[species_idx] < -_MIN:
                        ok1 = False
                        break
                if not ok1:
                    continue

                done = False
                cls_species_idxs[k1] = []
                cls_coefficients[k1] = []
                for col_idx, col_val in enumerate(column):
                    if abs(col_val) > _MIN:
                        cls_species_idxs[k1].append(col_idx)
                        cls_coefficients[k1].append(col_val)
                pivots[k1] = -len(cls_species_idxs[k1])


His works grow out of guns to become much more than that. A presentation of his sculptures together with his drawings in one of the large rooms of, say, PS1 could clarify the broader view of the artist.
Rob Perrée on the work of the American artist Roberto Visani.
Weapons in art or weapons as art is not a new phenomenon. In Western Renaissance paintings weapons were used in a symbolic sense. The devil was often the object of this symbolic imagery. Contemporary African artists use guns that are left behind after violent conflicts or civil wars. Goncalo Mabunda from Mozambique is the most known representative of this kind of art. Like many others after him he turns guns and other weapons into recognizable objects or even utensils like chairs and benches. His main purpose is to disarm the weapons, to make them harmless and safe by making them useful or beautiful. By doing that he protests against the meaningless violence they symbolize. The fact that it fits an African tradition to use found material to make art is not more then an indirect and subservient aspect of his art.
Roberto Visani grew up in a small town in South Dakota with mixed race parents. Guns were already at an early age part of his daily life: his father was fascinated with the military world and hunting was one of his hobbies. Visani's perception changed dramatically when he found out in Ghana – a Fulbright Fellowship brought him there in 1999 – that slaves were exchanged for weapons during slavery. He also found out in a military museum there that soldiers personalized their weapon by attaching all kinds of decorative elements to it. A way of disarming it without loosing its function.
For Visani all these and other mixed and contradicting connotations make the gun a challenging tool to work with. It can be a toy, a phallic symbol, an object that has more value than a human being, an object to destroy human beings, an object to question power, to question the ways to solve conflicts, an object to dominate the other, to intimidate other people, to protect yourself or an object to be just an object. All together a box full of ingredients to tell exciting, uncomfortable or humorous stories.
That's what Visani does with his sculptures. He tells stories. Most of the time a gun is the starting point of a new work. Then he adds all kind of found materials to it. There is no limit to them. It can be a piece of wood, of underwear, of metal, of furniture, of a doll, of a tool. It can be feathers, glitters or a plastic flower. It can be an element that does not show its source, that does not want to be identified. They have one thing in common: they all have a history. They get a new life because of the new context the artist puts them in. The process of adding is not the outcome of a specific plan. The result has to be as logical as surprising. It has to have a story in itself, for instance a story that is reflecting on the world the artist lives in, but it also has to have the openness a viewer needs to create his own story. Sometimes he presents these works as an installation. By doing that he increases the storytelling-potential.
I like it when an artwork has content, has something to say, but the sculptures of Roberto Visani have a strong formal quality too. They are also about balance, about being solid but looking vulnerable, about parts that look as if they are forced on each other because they don't like each other, about spatial effects, about dimension, about impact. His (rare) cardboard sculptures illustrate that, but his recent iron works make that all the more clear. The bumpy iron forms are moulded, they have the imprint of a gun but they don't have the form of it. They are put together as a house of cards. As if they can collapse any moment. In fact they are solid and heavy constructions that can handle resistance easily. In these kinds of works formal aspects predominate substantive aspects.
Some of Visani's sculptures remind me of the works of the Cherokee Indian artist Jimmy Durham. However, he assembles recycled ánd manufactured objects. That is why his sculptures are more figurative. In his works formal aspects are subservient to the narrative. The sculptures of Roberto Visani have a political layer, for sure, Jimmy Durham however is an activist, an artist with a political message. For long he did not want to exhibit in the US because of the intervention of the US government in Central America.
Roberto Visani also makes collages. He calls them drawings, probably because of the basic material – paper – and of the directness these media have in common. At first sight these works seem strangers in Visani's oeuvre. They are not. The way he assembles his sculptures is comparable to the way he puts his collages together. He glues a found piece of paper on a paper surface. That can be a leftover piece of a copy print, a leftover piece of a drawing or a piece out of an earlier collage. He adds other pieces of paper to it, without a plan, intuitive, accidental. He layers them to create the suggestion of depth. It is possible that he paints over parts of the collage, that he adds some words to it, that he makes a hole in it, that he roughens the edges. The colors are retained, as if Visani does not want to disturb the symphony of forms: pieces overlapping each other, touching each other, contrasting with each other, reinforcing each other. Like his sculptures, the result looks natural but at the same time it is puzzling, surprising and open for many interpretations. The overall view is abstract, but if you look closer you will find several figurative elements. They are there to trigger the fantasy of the viewer. The sizes of the collages vary. His ultimate goal is to make wall-size collages. He wants the viewer to be in is work, as if he is part of it, as if he is a piece of the puzzle.
Most of the time Roberto Visani is asked to participate in exhibitions with his gun works. Guns have a high sensation factor especially in a time where wars and fatal shootings tumble over each other in the news. However, a pure gun based selection does not justify the intentions of the artist. His works grow out of guns to become much more than that. A presentation of his sculptures together with his drawings in one of the large rooms of, say, PS1 could clarify the broader view of the artist.
Rob Perrée is art historian, independent writer and curator, founder and editor in chief of Africanah.org, lives and works in Amsterdam and Brooklyn, New York.


For more Jessica Biel pictures and videos, please visit our friends at Celebarazzi!
Author Unlimited CelebsPosted on July 6, 2016 Categories Jessica BielLeave a comment on Timberlake scores.
Author Unlimited CelebsPosted on June 29, 2016 Categories Jessica BielLeave a comment on Yep, magnificent.
Collection blue balls, how appropriate.
Author Unlimited CelebsPosted on May 18, 2016 Categories Jessica BielLeave a comment on Collection blue balls, how appropriate.


text:
The search index is currently processing. Leaderboard results may not be complete.
Father Kit Cool Gun Garth
Subdeacon Joe
Pat Riot, SASS #13748
Bad Bascomb, SASS # 47,494
Custom Screw knife STOLEN SE Regional
Thanks, dear! The knife has been gone since Thursday evening and it's now Sunday might. MAYBE it will turn up in my mailbox in a few weeks…. We ALL want to believe that it's impossible to have a thief among us. Really. When I didn't get it back by the banquet last night I was disheartened… but, I thought, MAYBE, someone will slip it under our tarps covering our merchandise and I will find it when I go pack up. Nope. Several members of North Alabama Regulators apologized to me - nothing quite like this has happened at their range. They were embarrassed. They were angry. Everyone who asked me about it felt the same way. I've thought a lot about this situation. First, some have said, "I hate this happened to you, Scarlett!" It shouldn't happen to ANY of us. Second, too many other stories of things stolen/missing were shared with me. It's NOT always "the public" or "spectators". Sometimes there's really no question that it is one of us. Third, we have to hold ourselves and our cowboy/cowgirl community to higher standards. We talk about The Cowboy Way ALL the time but it's losing a lot of its meaning. We do NOT always treat one another with respect. We gossip. We have cliques and are mean to one another. Some of us cheat - call clean for our pards, let little things slip by… we've all heard the stories. If we will cheat while spotting, why wouldn't we steal a $200 custom screw knife? Cheating isn't more or less wrong than stealing, is it? I know lots of y'all honestly care about the fact that my knife was stolen…and yet, some are probably thinking, "ok, Scarlett… give it a rest. Let it go". I will when I'm ready. This is bigger than just my knife. This is an opportunity for us to be better by doing better. Real, heartfelt hugs, Scarlett
SAA - really a 'Natural Pointer'?
Look at the floor in any public restroom and it is obvious that most people cannot naturally point.
REWARD OFFERED FOR THE RETURN OF SCARLETT'S SCREW KNIFE If you are reading this and you have Scarlett's Knife, whether you took it mistakenly, accidentally, or maliciously, I don't care. Return it to Scarlett, or, to remain anonymous pm me, I'll give you details on where to send it so it gets back to her with no questions asked. In return, I'll send you $100 & a screw knife that you may keep with a much clearer conscience. While I don't like rewarding vile behavior, this may be the only way to get a precious item returned to an even more precious lady. Spread the word, and you can count on me to back up what I say, $100, a screw knife, & no one but me & you will ever know.
Ba-Dump Tissssh - Memes
Missing dog. If anyone ceasar, lettuce know.
If our friendship is so fragile that a miss/P/SDQ/MDQ will end it … it wasn't much of a friendship to begin with. #Integrity I don't think the sport has changed - this isn't about the sport. This is about the "players". And, ACCOUNTABILITY. When we see bad behavior among our friends (cheating, plain meanness, etc) we should call it out instead of ignoring it. This is me calling it out and encouraging us all to make an effort to do the same. If you can't make the correct call on your pal, don't spot. And, don't take stuff that don't belong to you. Hugs, Scarlett
90 ° N
The famous notation of the ship's position at 90 degrees N latitude, recorded by the USS Nautilus on 03 August 1958. This is one of many relics honoring the nation's first atomic submarine at the Nautilus exhibit wing on the second floor of the US Submarine Force Museum. Well worth the visit...plus it's free!
Friday Humor - jump in and add some
Congratulations to my favorite Daughter, Echo Meadows, Ladies Wrangler champ Bordertown
Congratulations to my favorite Daughter, Echo Meadows, Ladies Wrangler champ Bordertown and third overall lady. Johnny Meadows
Telephone Network
After having dug to a depth of 10 feet last year, British scientists found traces of copper wire. This wire was found to be dating back 200 years and came to the conclusion that their ancestors already had a telephone network more than 150 years ago. Not to be outdone by the British, in the weeks that followed, an American archaeologist dug to a depth of 20 feet, and shortly after, a story published in the New York Times: "American archaeologists, finding traces of 250-year-old copper wire, have concluded that their ancestors already had an advanced high-tech communications network 50 years earlier than the British". One week later, Australia's Northern Territory Times, reported the following: "After digging as deep as 30 feet in his backyard in Tennant Creek, Northern Territory, aboriginal Billi Bunji, a self-taught archaeologist, reported that he found absolutely stuff-all. Billi has therefore concluded that 250 years ago, Australia had already gone wireless..."
A natural pointer pistol, to me, is any gun that feels good in my hand and, when I bring it up to the target, is pointing relatively close to where I want it without moving muscles. The original Vaquero and the 1911 fit me well as they come from the box. Colt SAAs and Glocks do not, but I enjoy them anyway. But there's still a lot that can go wrong between naturally pointing a pistol and sending a bullet towards the target. That's where shooting skill comes in.
We need a sticky cartoon thread
Congratulations to Larsen E Pettifogger - Senior Duelist State Champion - Bordertown
Title says it all
Cody James shoots a 9 second stage
I shot that same stage in 9 seconds. But then the lousy TO shouted I still had to shoot the shotgun and pistols.
Mixed up powder?
Ok so here is the update I promised. I went to the range yesterday with the chronograph. I had loads of the made in canada clays and the made in australia clays. All loads were the same weight in grains. I had to adjust the powder measure down a bit when loading the australia clays, it was weighing about .2 grains heavier when using the same powder measure setting as the canada clays. I shot 10 shot strings then averaged them. The results were that the Australia clays shot 50 fps slower than the Canada clays. I think if I had thrown the australia clays using the canada clays setting they probably would have been close to even. I discarded the powder that was mixed in the powder measure in the one picture. Thanks everyone for all of your input.
From The Facebook Group Old West Legends, Myths, and More "How did white Southerners aquire the sobriquet cracker? Contrary to what many believe it's origin had nothing to do with saltines, cracked corn or or popping whips. .The first known written usage of the term 'cracker' (to mean a person) comes from Shakespeare's King John: "What cracker is this same that deafs our ears with this abundance of superfluous breath?" The term comes from the middle English word "Craic" which meant a loud boastful comment. (Hence our modern usage as in " crack a joke" or a "wise crack") The term is still used in Ireland, Scotland and Ulster to mean friendly conversation. The term " Cracker" thus came to mean a talkative, loud boastful person. It was applied in colonial America to the mostly Scots-Irish of the back country and eventually to we, their descendants (white rural Southerners). Ben Franklin was talking about my ancestors when he wrote in his memoirs about "a race of runnagates and crackers, equally wild and savage as the Indians, who inhabit the desert[ed] woods and mountains." So was a colonial official that wrote to the Earl of Dartmouth in 1766: "I should explain to your Lordship what is meant by Crackers; a name they have got from being great boasters; they are a lawless set of rascalls on the frontiers of Virginia, Maryland, the Carolinas, and Georgia, who often change their abode" Ian Saberton , the distinguished British historian of the American Revolution wrote of them: "Scattered among the backcountry population was a body of hardy, illiterate and lawless backwoodsmen whom the British came to fear more than most. They tended to have no settled habitation and lived partly by hunting and partly by preying on their neighbors. "This distinguished race of men," declared George Hanger (a British officer), "are more savage than the Indians and possess every one of their vices but not one of their virtues. I have known one of these fellows travel two hundred miles through the woods, never keeping any road or path, guided by the sun by day and the stars by night, to kill a particular person belonging to the opposite party. He would shoot him before his own door and ride away to boast of what he had done on his return … I speak … of that heathen race known by the name of crackers." This is why white rural Southerners are called Crackers and if you have ever stood around a campfire at a Southern hunting camp or re-enactment (especially if there is a mason jar of clear liquid being passed) you know that the term is fitting! And you thought it had something to do with saltines, cracking whips or corn!"
SE Regional "Ambush at Cavern Cove" 2021
Unfortunately it appears that it is accurate that our tabulations for Trail Driver (fastest state in the region) were indeed inaccurate. Getting another banner, ten pins and shot glasses is the easy part of attempting to correct this. The ability to announce at the banquet that Florida won is the part that is impossible to correct. I offer my most sincere apologies to both Florida and to Georgia for the error.
After manually crunching a few numbers, it looks like those Crackers may have actually won this again. Results tabulated by Dominion Voting systems.
Jedi Gunfighter of the Year, 2021
To say that I was "greatly surprised" would be an understatement. For those of you that know me, you can tell folks that I am not one usually lost for words and can often lead discussions without much prep time. Last night, however, I would not have been able to get words out, especially after I turned to find my wife also standing on stage. To be recognized by your peers for only doing what I thought I needed to do is a humbling experience. For my wife @Alchemist Belle 93666 and son Donald Duke to have designed this buckle for me to remember the accomplishment makes it just that much more special. Beyond being my loving and supportive wife @Alchemist Belle 93666 is always on my 'posse with' list, my collaborator on The Firing Line, and help whenever I need it. And finally, thank you all. For those whose hands I shook late last night or called and texted later, those that have supported shoots that I have worked, whether in Tennessee or Alabama, or those that continue to 'like, share, and subscribe' to The Firing Line, without your continued support and participation, none of this would be possible.
This match is well worth the 10 hour drive from the beautiful north shore state of "Other". Branchwater Jack wrote an outstanding match.....loved the story. Huge thanks to the entire NAR crew. Big thanks to Kid Rick for the "hex". It got me a clean match.
Spooky & Terrifying
Post your Memes,
Improving my stage times?
Improving my stage times? With the times scarcity of ammo and reloading components, practicing to improve my stage times has been problematic for me. BUT I believe I've found a solution that is worthwhile pursuing. Placing a Neodymium Iron Boron magnet into my cast bullets! Think about it! We do shoot at STEEL targets and magnets are attracted to steel! My first attempt proved this idea to be worthwhile to pursue further. Drop a magnet into the bullet mold first, then pour in the molten lead. Resize and lube as normal. Tested five rounds of my Magnet Automatic Direction bullets at my private range. Worked like a charm. Loaded 100 for my next match. First stage morning sun was shining on my back. I'm called to the line, aim within a foot or two of the targets and pulling the triggers as fast as I could. My stage times were cut in half! I'm smiling from ear to ear. Stage Two is when I recalled that magnets have a north and a south pole. The third round out of my first pistol had the magnet south pole casted on the bullet's point. Timer Operator had this big old Bowie knife on his belt. Considering the TO's age he eventually would have needed his hip replaced anyway. Before the next match I have my reloads sorted by their north and south magnetic poles. This is THE match. I'll place in the top ten for the first time ever! The only question I have, do I need the north facing bullets or the south facing bullets? I lose my smile when I realize all of the stages are all facing west!?!?!? And for nosy cowpokes, yes right after announcing the Clean Shooters they announced their first ever 100% miss Shooter. Using Al Gore's Internet a search found a Ebay post from a fellow in China that guarantees he has east west poled magnetics in stock. P.S. If'n any of y'all believe this story, let me tell you about the time I recycled lead from a car battery.
Profile of a criminal
Congratulations Sassy Dancer Women's overall at Bordentown
Way to go young lady- just get rid of the old man
Congratulations to Shotgun Boogie
Congratulations to a remarkable shooter. Bordertown Silver Senior Champion!!!!
@Chickamauga Slim I absolutely adore you. You are, hands down, one of the kindest and most generous cowboy shooters in the world. I hope I get my knife back without your $100 … we will see. Big hugs and lots of love! Scarlett
Bordertown 2021 scores are now available
https://bordertowncas.com/scores or https://www.facebook.com/bordertown2017
The gun may point naturally but doesn't keep you from jerking the trigger!
A great big thank you to all those who worked hard making the match an enjoyable experience. A huge thank you to all of you who shot the match and to all who camped at the range. Seeing everyone enjoying themselves makes it all worth it.
Congrats Sidekick and Dodge City Dixie. SE Regional and Ambush champions.
Congratulations to Branchwater Jack! Well deserved and long overdue!


Why are these people gods?
Alter Aeon Community Forum > General Category > The Oracle > Why are these people gods?
1.Why is Os a god?
2.Why is Grolantor a god?
4.Will you be turning your newbie builders into gods when their crappy areas get released?
You are too exhausted to do that.
Re: Why are these people gods?
Os and Grolantor both became gods after internal discussions in the pantheon. There have been times when I have created new gods without discussion, but that did not happen in either of these two cases.
I may be turning the newbie builders into gods, depending on the areas and other factors. I haven't started evaluating them to that end yet.
I understand that you had a "discussion" with some of your other gods before you made Os and Grolantor gods but i am still a tad unclear on what exactly their qualifications were. I think everyone is.
When you have discussions within your "pantheon" present day, is Os given a say equal to that of Draak or Void? Does he have more influence on your decision making than say a mortal?
If Lotus hadn't been inactive would he have remained a god and would you have set him up with followers just like your other gods?
The qualifications at the time were along the lines of, "these guys aren't idiots, and we think they will build something without causing problems". So far that's been true, though neither of them have built much.
Different people have different amounts of say, based on what their competencies are. I do not treat all voices equally on all topics. There are mortals with substantially greater pull than Os for example; but not in all topics. That said, high level gods (105 and higher) generally (but not always) do have more say than mortals. This is because people who make it to 105 are usually very knowledgeable about the game and the game dynamics. High level builders also tend to bring up issues that mortals do not, as mortals are often biased against making changes that would weaken their characters.
If Lotus had remained more active, the pfile cleaner wouldn't have eaten him. He probably would have gotten followers by default at some point even without a priest, since that's possible to do now. I also might have let him set up a priest; that's not generally a big deal.


With 17 years experience in media, I understand, better than anyone, how to get you mentioned on local TV, radio, print, and digital media outlets.
Social media is an extension of public relations. By creating engaging social media and combining it with public relations tactics, you maximize exposure.
Whenever possible, I actively hunt for public relations opportunity within a client's social media strategy. By utilizing my experience, I know which tactics to use in order to grab attention.
2-10-15 - Fix My Streets Appearance in Walt Handelsman animation.
9-19-14 - "Napoleon: A Prime Time Pizza Tour" RocketFire Pizza makes WWLTV food critic list.


Online Badugi is a draw poker game, similar in nature to other "lowball" games such as 2-7 Triple Draw. However, the hand ranking system in Badugi is very different from the other draw games and the game is played with only four pocket cards. As in most forms of poker, Badugi uses a standard 52-card deck that is shuffled before every hand.
The object of Badugi is to make a four-card low hand of all different suits.
A "Badugi": any hand that contains four different cards of all different suits. For example, 4d-3h-2s-Ac, the best possible "Badugi".
A "3-Card": any hand that contains at least three different cards of different suits. For example, 4d-3h-2s-Ad. Since there are two cards of the same suit, the highest suited card (4d) is not counted.
A "2-Card": any hand that contains at least two different cards of different suits. For example, 4d-4h-3s-As. Since there is a pair and two suited cards, only one 4 and the Ace are counted.
A "1-Card": any hand that contains only one card of individual value or suit. For example, Ad-Ah-As-Ac, or 4d-3d-2d-Ad. In each of these cases, only one Ace is counted.
Please see the Hand Rankings page for more Badugi hand examples.
Any "Badugi" hand beats any "3-Card" hand, any "3-Card" hand beats any "2-Card" hand, and so on.
Badugi hands are counted from the highest card to the lowest card. For example, a 9-8-7-6 "Badugi" beats a T-8-7-5 "Badugi".
If the high cards are of equal value, the next highest card (or cards) comes into play. For example, an 8-6-5-4 "Badugi" beats an 8-7-6-5 "Badugi". This holds true for all other Badugi hand types.
Like flop-based games such as Hold 'em, Badugi features blinds to stimulate action at the table. The small blind and big blind are assigned to the players to the left of the dealer button, which determines the order in which cards are dealt.
When you first buy in to a Badugi game, you'll have the option of waiting for the big blind to reach your position before you begin playing or posting a blind equivalent to the big blind to be dealt immediately, except when sitting in a position that would put you in the small blind position or on the button, where you'll have to wait for the next hand to play.
Once the blinds are posted, the hand is underway. With Badugi, four cards are dealt face down to each player in the hand, starting with the player to the left of the dealer button.
Please note: In draw games, it's possible for more cards to be needed than are available in the deck. In this case, a reshuffling of the deck will take place. Learn about reshuffling the deck in draw games.
After the first draw, another round of betting takes place, beginning with the first player to the left of the button. If no one has bet, you have the option to check your hand or make a bet. If you're facing a bet, you have the option to fold, call or raise.
Once the second round of betting is complete, draw #2 takes place. As with the first draw, any player remaining in the hand has the opportunity to discard any or all of their cards, or stand pat.
After new cards are drawn, a third round of betting takes place, followed by draw #3. Draw #3 is your last chance to make the best hand you can.
Following the third draw, one last round of betting takes place. This round of betting follows the same format as the previous rounds.
When the last round of betting is complete, a showdown takes place with any players still remaining in the hand. The player with the best Badugi hand wins the pot! If there is a tie for the best hand, the pot will be split equally among the tied players. Occasionally the pot cannot be evenly split. If there are any remaining chips left in the pot, the 'extra' chips will be awarded one at a time to the remaining players, starting with the player closest to the left of the button.
If you like Badugi, be sure to check out our other draw games: 5-Card Draw, 2-7 Triple Draw, and 2-7 Single Draw.


Catchphrase mobile game — Dillon Zhang 张泽宇 - UX Designer & Product Manager.
Catchphrase is a word guessing party game commercially available from Hasbro. Our job is designing an online mobile game app version.
TECHNIQUE: Primary research, concept development, low-fi/hi-fi wireframes .
How might we make ten people play this game together online?
How might we provide a better user experience more than a popular physical toy?
Thanks for my team: Madison Hawkins, Katie Manning, Jonathan Tucker, Anna Frederikse, Gray Kent.


It had been the two of them together like this since chance led them to each other. That day Mfundo had been aimlessly wandering the city, when he had stopped in front of a restaurant window. He watched as the people inside filled their faces, while he sniffed a bottle of dried glue outside.
When he had eaten enough with his eyes, he went around to the alley behind the restaurant and wrestled with the trash cans outside the back entrance. They were crawling with rats. He rummaged through and tossed aside a few plastic bags.
Then he jumped in alarm as the pile of trash next to the bin moved. He thought he saw an arm. He cleared the rubbish away carefully, cautiously, this time, and unveiled the thing that moved underneath. It looked dirty, yet delicate. He uncovered Nompilo. Her arms and legs were as thin as twigs. She had barely a thread on her back, her eyes were closed, and he couldn't see her breathing.
The rats were running all over her. He pushed at them with a stick and then prodded her gently. Nothing. Just then a cleaner from the restaurant came out to throw away some old food.
"You dirty tsotsi! Get out of here," he yelled and shooed Mfundo. But Mfundo stood his ground. "Hold on. Just wait here," the man said before he disappeared back inside. He had left the door ajar and that meant only one thing; he was going to get a weapon. Mfundo looked back at the child buried in trash, then glanced down the alley; he had to make a move.
Then the girl's eyes fluttered. She was alive but was quickly slipping back into unconsciousness.
"What? Hey, wake up," Mfundo shook her.
The man came back flailing a club. Mfundo quickly hoisted Nompilo across his back then kicked his heels as hard as he could down the alley. The man yelled obscenities behind him.
Today, here Nompilo sat sharing a stolen kota with him.
But that morning she had defied Mfundo, insisting on going to Glenwood Hills again, despite his objections. Recently she had formed a habit of disappearing during the day and going into the suburbs alone. Today, like other days, she had left Mfundo to move around the city looking for work and collecting things ordinary people no longer needed.
Today he had been unlucky. He hadn't found any work, and only a few almost worthless recyclables.
Every day was hard. He woke early and headed downtown to the printers to find work delivering or selling newspapers; or he would battle for a job selling pineapples around the city. He wasn't the only one looking; it was very competitive and sometimes blood was spilled for work. That was how he had earned himself the scar under his left eye. Mfundo was small and that made him an easy target for the bigger boys. But he was very tough and gave as much punishment as he took.
"Tell me the truth, right now," Mfundo ordered, but Nompilo only chewed slowly on her bread, ignoring him.
Tell us what you think: Why would 'the suburbs' be places where street kids like Mfundo and Nompilo can get into trouble?
They might assume that they are up to no good.


Data Center Networking Market share is expected to cross USD 35 billion by 2024; according to a new research report by Global Market Insights, Inc. The high growth of the data center networking market is strongly aided by the increasing focus of data cesnters to improve the bandwidth speed and connectivity.
Data centers located in faraway location and in colocation settings store large databases of information that are required immediately. In such a scenario, lags in the relay of data can be detrimental to business operations, fueling the demand for advanced networking technologies such as 100 Gbps and 400 Gbps Ethernet switches and silicon photonics.
The market is gaining traction owing to the rising adoption of cloud deployments. IoT and cloud computing provide significant cost savings to businesses in terms of reduced capital expenditure and maintenance charges. This has led to the need for replacing traditional networking solutions with hardware that have cloud computing capabilities, fueling the industry growth.
In June 2017, Telefonica announced the beginning of the construction of a 2.6 MW data center with cloud capabilities in Peru. The increase in such activities is anticipated to drive data center networking market demand in the coming years.
The trends in the market indicates that IT & Telecom and BFSI sectors are prime adopters of the technology with BFSI sector valued at over USD 2.5 billion in 2017. These enterprises are required to store and access large amounts of data, which need to be accessed in real time. Additionally, financial services firms need reliable and fast connectivity to support latency applications for tasks such as online trading and payment processing. Countries including China and India have become hubs of outsourced services owing to the low costs of resources such as labor, technology, and space. India market was over USD 450 million in 2017. In the aftermath of the Digital India campaign and the Start-up India Stand Up India initiative, there is a rise in the number of IT industries, which has amplified the demand for these technologies within the country.
The players operating in the data center networking industry comprise Brocade Communications, Arista Networks, Cisco Systems, Inc., Delta Electronics, Inc., Dell, Inc., Hewlett-Packard Enterprise, IBM Corporation, and Juniper Networks.
As the market comprises many players, companies are required to undertake strategies like partnerships, mergers and acquisitions, and invest heavily in R&D to sustain continuous growth. For instance, in February 2015, Hewlett-Packard Enterprise announced the launch of a new line of open network switches for web-scale cloud data centers. The product launch is anticipated to further improve its hold in the provision of cloud capable solutions in the industry.
This entry was posted on May 18, 2018 at 7:26 pm and is filed under Data Center, Infrastructure, Market. You can follow any responses to this entry through the RSS 2.0 feed.


Nigeria Stone crusher machine in USA - LinkedInJul 29, 2016 . Nigeria Stone crusher machine in USA,Stone Crushing Plant For Sale, Sand maker manufacturer.-product by China GTM. Stone breaker for sale . GTM stone breaker in USA is mainly used for gold ore mining, iron ore crushing in primary or secondary sizing plant. These breakers include jaw breaker and.gold ore crusher price in nigria 5733,lithium ore mobile crushing equipment supplier in nigeria - RASSpodumene Vsi Crusher Supplier - zahala . equipment,lithium . ore crusher suppliers nigeria, used gold ore impact crusher provider, ire ore mining nigeria, gold ore spodumene mobile crushing . lithium ore ultrafine mill Supplier Oman - . CS cone crusher Project Case Lithium Mining Equipment 4 . lithium ore.
lists iron ore mining company in nigeria . Home lists iron ore mining company in nigeria ; CATEGORY. SORT BY BY PRICE. PRICE. Xinhai provides mineral . . Malam Mohammad Amate, the Director-General, Nigerian Cadastre Office, Abuja, on Sunday, said four foreign companies would begin mining of gold and iron ore.
Jul 29, 2016 . Nigeria Stone crusher machine in USA,Stone Crushing Plant For Sale, Sand maker manufacturer.-product by China GTM. Stone breaker for sale . GTM stone breaker in USA is mainly used for gold ore mining, iron ore crushing in primary or secondary sizing plant. These breakers include jaw breaker and.
Spodumene Vsi Crusher Supplier - zahala . equipment,lithium . ore crusher suppliers nigeria, used gold ore impact crusher provider, ire ore mining nigeria, gold ore spodumene mobile crushing . lithium ore ultrafine mill Supplier Oman - . CS cone crusher Project Case Lithium Mining Equipment 4 . lithium ore.


This would make a great gift for yourself or someone you know who may have attended Boot Camp in the 60s, 70s or 80s. A nice rare military collector's item. You will not be disappointed. Most of the books photos are generic to any company that went through the training. About 25% of the book is specific to Company 061 in 1986.
The Book includes over 100 pages of high resolution color and black and white images of life in naval boot camp. More than 200 general pictures depicting life in Boot Camp no matter when you went through it.
Personal Pictures taken July of 2005 of the former San Diego Boot camp as it looks now.


text:
Peacock and Roby head Man of Steel shortlist
Four Super League players have been shortlisted for the Steve Prescott Man of Steel award.
Castleford Tigers hooker Daryl Clark, Warrington Wolves prop Chris Hill, Leeds Rhinos prop Jamie Peacock and St Helens hooker James Roby have all made the four-man shortlist.
Peacock and Roby are both former winners – Peacock in 2003 and Roby in 2009, while Clark and Hill are both shortlisted for the first time. Clark is also among a three-man shortlist for Young Player of the Year.
Peacock is shortlisted for the Man of Steel for the third consecutive year and both he and Roby are looking to become only the fourth player to win a second Man of Steel Award.
The Steve Prescott Man of Steel is chosen by a poll of every Super League player, the results of which are considered by a specially-convened panel featuring a former Man of Steel, representatives from the players' union and one representative each from the written and broadcast media.
This year for the first time the Man of Steel award has been renamed in memory of Steve Prescott, who passed away almost 12 months ago after a battle against a rare form of stomach cancer.
The 2014 Steve Prescott Man of Steel will be named at a gala dinner hosted at The Point, the Old Trafford home of Lancashire Cricket Club, on Wednesday October 8, when a number of other Super League awards will be presented, including Coach of the Year and Young Player of the Year.
In addition to Clark, the other two nominees for the Young Player of the Year award are Wigan centre Dan Sarginson and Leeds Rhinos stand-off Liam Sutcliffe.
Players have to be under 21 years of age at the start of the season to be considered for the Young Player of the Year award.
← Karl Harrison joins Bradford backroom staff
Competition: Win a pair of tickets to Wigan v Warrington →