Code Monkey home page Code Monkey logo

seirsplus's Introduction

SEIRS+ Model Framework

This package implements models of generalized SEIRS infectious disease dynamics with extensions that allow us to study the effect of social contact network structures, heterogeneities, stochasticity, and interventions, such as social distancing, testing, contact tracing, and isolation.

Latest Major Release: 1.0 (9 Aug 2020)

Version 1.0 of the seirsplus package as well as the code and documentation presented in this repository represent COVID modeling frameworks developed in 2020 and early 2021.

๐Ÿ”ถ Upcoming Major Release: 2.0 (Feb 2022)

Ongoing modeling and code development with collaborators have advanced the SEIRS+ framework we use internally considerably since the last major package release.

A major Version 2.0 public release of the SEIRS+ framework package and documentation is planned for early February โ€” watch this space! If you would like access to the Version 2.0 code or further information before this public release, please do not hesitate to reach out.

New Features in Version 2.0 include:

  • Top-to-bottom redesign of package to make SEIRS+ a versatile framework not only for accessible rapid COVID modeling but also for network epidemiology research more broadly.
  • Fully customizable compartment models for flexible implementation of any disease state model, and pre-configured compartment models for COVID-19 contexts and other common diseases.
  • Features for tracking transmission chain lineages and infector/infectee characteristics.
  • Expanded support for parameterizable implementations of testing, tracing, isolation, deisolation, and social distancing non-pharmaceutical intervention scenarios.
  • Support for vaccination, including multiple vaccine types and multi-dose vaccine courses.
  • Support for scenarios with emerging disease variants
  • Run-time improvements (i.e., Gillespie tau leaping supported)
  • Many other features
  • Comprehensive testing suite for developers and contributors
  • As always, emphasis on ease of use.

Overview

Full documentation of this package's models, code, use cases, examples, and more can be found on the wiki

Basic SEIRS Model Extended SEIRS Model
Model Description Model Description
SEIRSNetworkModel docs
SEIRSModel docs
ExtSEIRSNetworkModel docs
Basic SEIRS Mean-field Model Demo
Basic SEIRS Network Model Demo
Extended SEIRS Community TTI Demo
Extended SEIRS Workplace TTI Demo

SEIRS Dynamics

The foundation of the models in this package is the classic SEIR model of infectious disease. The SEIR model is a standard compartmental model in which the population is divided into susceptible (S), exposed (E), infectious (I), and recovered (R) individuals. A susceptible member of the population becomes infected (exposed) when making a transmissive contact with an infectious individual and then progresses to the infectious and finally recovered states. In the SEIRS model, recovered individuals may become resusceptible some time after recovering (although re-susceptibility can be excluded if not applicable or desired).

Extended SEIRS Model

This model extends the classic SEIRS model of infectious disease to represent pre-symptomatic, asymptomatic, and severely symptomatic disease states, which are of particular relevance to the SARS-CoV-2 pandemic. In this extended model, the infectious subpopulation is subdivided into pre-symptomatic (Ipre), asymptomatic (Iasym), symptomatic (Isym), and hospitalized (severely symptomatic, IH). All of these I compartments represent contagious individuals, but transmissibility, rates of recovery, and other parameters may vary between these disease states.

Testing, Tracing, & Isolation

The effect of isolation-based interventions (e.g., isolating individuals in response to testing or contact tracing) are modeled by introducing compartments representing quarantined individuals. An individual may be quarantined in any disease state, and every disease state has a corresponding quarantine compartment (with the exception of the hospitalized state, which is considered a quarantine state for transmission and other purposes). Quarantined individuals follow the same progression through the disease states, but the rates of transition or other parameters may be different. There are multiple methods by which individuals can be moved into or out of a quarantine state in this framework.

Network Models

Standard compartment models capture important features of infectious disease dynamics, but they are deterministic mean-field models that assume uniform mixing of the population (i.e., every individual in the population is equally likely to interact with every other individual). However, it is often important to consider stochasticity, heterogeneity, and the structure of contact networks when studying disease transmission, and many strategies for mitigating spread can be thought of as perturbing the contact network (e.g., social distancing) or making use of it (e.g., contact tracing).

This package includes implementation of SEIRS models on stochastic dynamical networks. Individuals are represented as nodes in a network, and parameters, contacts, and interventions can be specified on a targeted individual basis. The network model enables rigorous analysis of transmission patterns and network-based interventions with respect to the properties of realistic contact networks. These SEIRS models can be simulated on any network. Network generation is largely left to the user, but some tools for Network Generation are included in this package.

Unlike mean-field compartment models, which do not model individual members of the population, the network model explicitly represents individuals as discrete nodes. All model parameters can be assigned to each node on an individual basis. Therefore, the network models support arbitrary parameter heterogeneity at the user's discretion. In addition, the specification of the contact network allows for heterogeneity in interaction patterns to be explicitly modeled as well.

Code Usage

This package was designed with broad usability in mind. Complex scenarios can be simulated with very few lines of code or, in many cases, no new coding or knowledge of Python by simply modifying the parameter values in the example notebooks provided. See the Quick Start section and the rest of the wiki documentation for more details.

Don't be intimidated by the length of the wiki pages, running these models is quick and easy. The package does all the hard work for you. As an example, here's a complete script that simulates the SEIRS dynamics on a network with forms of social distancing, testing, contact tracing, and quarantining in only 10 lines of code.:

from seirsplus.models import *
import networkx

numNodes = 10000
baseGraph    = networkx.barabasi_albert_graph(n=numNodes, m=9)
G_normal     = custom_exponential_graph(baseGraph, scale=100)
# Social distancing interactions:
G_distancing = custom_exponential_graph(baseGraph, scale=10)
# Quarantine interactions:
G_quarantine = custom_exponential_graph(baseGraph, scale=5)

model = SEIRSNetworkModel(G=G_normal, beta=0.155, sigma=1/5.2, gamma=1/12.39, mu_I=0.0004, p=0.5,
                          Q=G_quarantine, beta_D=0.155, sigma_D=1/5.2, gamma_D=1/12.39, mu_D=0.0004,
                          theta_E=0.02, theta_I=0.02, phi_E=0.2, phi_I=0.2, psi_E=1.0, psi_I=1.0, q=0.5,
                          initI=10)

checkpoints = {'t': [20, 100], 'G': [G_distancing, G_normal], 'p': [0.1, 0.5], 'theta_E': [0.02, 0.02], 'theta_I': [0.02, 0.02], 'phi_E':   [0.2, 0.2], 'phi_I':   [0.2, 0.2]}

model.run(T=300, checkpoints=checkpoints)

model.figure_infections()

Quick Start

Perhaps the best way to get started with these models is to dive into the examples. These example notebooks walk through full simulations using each of the models included in this package with description of the steps involved. These notebooks can also serve as ready-to-run sandboxes for trying your own simulation scenarios simply by changing the parameter values in the notebook.

Installing and Importing the Package

All of the code needed to run the models is imported from the models module of this package. Other features that may be of interest are implemented in the networks, sim_loops, and utilities modules.

Install the package using pip

The package can be installed on your machine by entering this in the command line:

> pip install seirsplus

Then, the models module (and other modules) can be imported into your scripts as shown here:

from seirsplus.models import *
from seirsplus.networks import *
from seirsplus.sim_loops import *
from seirsplus.utilities import *
import networkx

Alternatively, manually copy the code to your machine

You can use the model code without installing a package by copying the models.py module file to a directory on your machine. For some of the features included in this package you will also need the networks, sim_loops, and utilities modules. In this case, the easiest way to use the modules is to place your scripts in the same directory as the modules, and import the modules as shown here:

from models import *
from networks import *
from sim_loops import *
from utilities import *

Full Code Documentation

Complete documentation for all package classes and functions can be found throughout this wiki, including in-depth descriptions of concept, parameters, and how to initialize, run, and interface with the models. Some pages of note:

seirsplus's People

Contributors

fdabl avatar mschauer avatar ryansmcgee avatar tomermilo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

seirsplus's Issues

bug in models.py

If not using checkpoints, the model should run for a specific time. I suppose at line 200 in the run() function self.run_epoch(runtime=self.tmax, dt=dt) should be self.run_epoch(runtime=T, dt=dt)

Testing a fixed amount of randomly selected individuals

Hi there,

First, let me say that I came across this package back in April and was already very impressed, but what you have done since is truly amazing. Thank you!

I am trying to familiarize myself with all the updates, so apologies if there is a straightforward answer to my question. In particular, I am interested in assessing how testing a fixed amount of randomly selected people in addition to the testing that symptomatic individuals have access to can influence an epidemic.

Currently, it seems one can allocate 'PCT_TESTED_PER_DAY' % of tests, of which a maximum of 'MAX_PCT_TESTS_FOR_SYMPTOMATICS' % is available to symptomatic individuals. If the amount of tests is not exhausted, then the remaining tests go to traced contacts, and finally to the random sample. However, this does not allow me to specify that X% of the population is randomly sampled and tested periodically. Is there a way to do this?

I suppose I could tweak 'TESTING_COMPLIANCE_RATE_RANDOM' to get an approximation of the fixed percentage, but that will always be stochastic since I can't control how many tests actually go to symptomatic individuals.

Thank you for any input!

Problem in running Extended SEIRS Model

Hello,
i am using this great simulation for visualizing purpose but in Extended SEIRS Model i am continuously getting error on Network and it is giving me error as model not defined. if i am trying to resolve it than its giving my further error on FARZ import.
kindly guide me in this regard as i am not a programmer and just want to run this simulation.
TIA

Undefined name: 'self' in a non-method

The current code has the potential to raise NameError at runtime. This code was previously in a class method that defined self but when it was moved into a standalone function, the self. was not removed.

https://github.com/ryansmcgee/seirsplus/blob/master/seirsplus/models.py#L1194

$ flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics

./seirsplus/models.py:1194:49: F821 undefined name 'self'
        nodeDegrees = graph.sum(axis=0).reshape(self.numNodes,1)   # sums of adj matrix cols
                                                ^

Apply the Version 2.0 code

Dear Prof.,
I have just learn the seirsplus package with great interest. I think the Version 2.0 code is very suitable for my research on COVID-19.
I wonder whether you can share me the Version 2.0 code for our research. Also, I'd very glad to ask you to join us to help me to finish that work. Any help or suggestions are greatly appreciated.
[email protected]

Events might sometimes skip a day

When running a simulation, if there the next event will take place in more than a day, then there is a chance that time will advance (for example) from day 6 to day 8. This can be a problem if in the simulation there is weekly randomized testing going on in day 7.

I will be post a pull request soon that addresses this issue together with some other enhancements.

README.MD code example incorrect - nonexistent keyword "Q" being passed to constructor of SEIRSNetworkModel

The current README.MD on master (commit 63dcba1) contains an example code block in the Code Usage section:

https://github.com/ryansmcgee/seirsplus#code-usage

One of the arguments being passed to SEIRSNetworkModel() in that example code is "Q", which does not exist in the current version of SEIRSNetworkModel, hence leading to errors if a user were to try to run the code straight from that example.

I do not use this library but I found this issue via a StackOverflow user that had this problem: https://stackoverflow.com/questions/73872826/unexpected-keyword-argument-within-init

Running seirsplus on top of a graph_tool network.

I've started working with the seirsplus framework with a networkx created SBM network, but it became very memory-intensive and slow. Is there a way we can use graph_tool networks to work with the seirsplus models?

KeyError triggered by model.run()

This has happened after migrating from 0.14 to 1.0.x on code that ran without issues on the older version. This is a basic SEIR model on a network (no quarantine/tracing/social distancing), after instantiating the network. I'll do more investigating to see what the exact context is, but in the meantime I thought I would flag it. If it matters, the network I am using has roughly 4,000 nodes and 100,000 edges.

The error message is as follows:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-6-4d6a510161ce> in <module>
    104                                        gamma = 1/15,
    105                                        initI = 5)
--> 106         model.run(T=100, print_interval=10)

seirsplus\models.py in run(self, T, checkpoints, print_interval, verbose)
   1336         while running:
   1337 
-> 1338             running = self.run_iteration()
   1339 
   1340             #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

seirsplus\models.py in run_iteration(self)
   1224             # Save information about infection events when they occur:
   1225             if(transitionType == 'StoE'):
-> 1226                 transitionNode_GNbrs  = list(self.G[transitionNode].keys())
   1227                 transitionNode_GQNbrs = list(self.G_Q[transitionNode].keys())
   1228                 self.infectionsLog.append({ 't':                            self.t,

networkx\classes\graph.py in __getitem__(self, n)
    473         AtlasView({1: {}})
    474         """
--> 475         return self.adj[n]
    476 
    477     def add_node(self, node_for_adding, **attr):

networkx\classes\coreviews.py in __getitem__(self, name)
     79 
     80     def __getitem__(self, name):
---> 81         return AtlasView(self._atlas[name])
     82 
     83     def copy(self):

KeyError: 3047

typo in model eq.s with quarantine

Hi,

  • In 5th and 6th eq., the index of neigh. is wrong (k, instead of j)
  • there should be also a q (missing) in the 2nd part of the 1st eq., right? (the part )

Thanks for the package

Variable name errors in models.py

In lines 1932 and 1933 for ExtSEIRSNetworkModel

self.nodeGroupData[groupName]['numQ_I_sym'][0]  = numpy.count_nonzero(self.nodeGroupData[groupName]['mask']*self.X==self.Q_I_sym)
self.nodeGroupData[groupName]['numQ_I_asym'][0] = numpy.count_nonzero(self.nodeGroupData[groupName]['mask']*self.X==self.Q_I_asym)

Q_I_sym and Q_I_asym should be Q_sym and Q_asym instead

'KeysView' object is returned instead of a list

When running this:
G_normal = custom_exponential_graph(baseGraph, scale=100)

I get the following error:

==================================================

TypeError Traceback (most recent call last)
mtrand.pyx in mtrand.RandomState.choice()

TypeError: 'KeysView' object cannot be interpreted as an integer

During handling of the above exception, another exception occurred:

ValueError Traceback (most recent call last)
in
3
4 # Baseline normal interactions:
----> 5 G_normal = custom_exponential_graph(baseGraph, scale=100)
6 plot_degree_distn(G_normal, max_degree=40)

~\Anaconda3\envs\corona\lib\site-packages\seirsplus\models.py in custom_exponential_graph(base_graph, scale, min_num_edges, m, n)
1175 neighbors = graph[node].keys()
1176 quarantineEdgeNum = int( max(min(numpy.random.exponential(scale=scale, size=1), len(neighbors)), min_num_edges) )
-> 1177 quarantineKeepNeighbors = numpy.random.choice(neighbors, size=quarantineEdgeNum, replace=False)
1178 for neighbor in neighbors:
1179 if(neighbor not in quarantineKeepNeighbors):

mtrand.pyx in mtrand.RandomState.choice()

ValueError: 'a' must be 1-dimensional or an integer

solved it by wrapping graph[node].keys() with list():
neighbors = graph[node].keys() -> neighbors = list(graph[node].keys())

Is it right?

'SymptomaticSEIRSNetworkModel' object has no attribute 'D_I_S'

When using NodeGroupData, these two lines in the SymptomaticSEIRSNetworkModel are standalone and self.D_I_S and Self.D_I_A don't seem to be defined anywhere else:

self.nodeGroupData[groupName]['numD_I_S'][0] = numpy.count_nonzero(self.nodeGroupData[groupName]['mask']*self.X==self.D_I_S) self.nodeGroupData[groupName]['numD_I_A'][0] = numpy.count_nonzero(self.nodeGroupData[groupName]['mask']*self.X==self.D_I_A)

ValueError: Values in `t_eval` are not within `t_span`.

Floating point precision limitations can cause an error to be raised by the scipy solver when running a SEIRSModel. In the models.py line 127, the end time is calculated as the current time plus the runtime. When the runtime is calculated as runtime = self.tmax - self.t (e.g. models.py:line229) this can result in the last value of t_eval being greater than self.tmax and therefore outside t_span. In other words, sometimes self.t + (self.tmax - self.t) > self.tmax.

I believe you could solve this by using t_span instead of [self.t, self.tmax] in line 144.

Scalability and complexity?

Very interesting and thorough implementation of SEIRs modeling, and I find the Stochastic approach particularly promising in complex real-life scenarios.

One question though, since the simulation is with respect to the number of nodes in the graph, I suppose the complexity depends on it, too. May I ask how the complexity(memory and runtime) scales with the number of nodes, or some guidelines on how many number of nodes can be included before the experiment becomes prohibitively computationally infeasible (on a decent PC)?

Edit: according to Specifying Interaction Networks section, it is suggested to use 10,000 nodes as a trade-off between small stochastic volatility and realism.

ValueError in Network Demo

Hi there,

Not sure what I am doing wrong. I am trying to run the network demo locally, but I get the following error:

ValueError

The error persists for scale values up to and including 19, and goes away for values larger than 19. Any ideas what is happening?

Thanks!

Wiki typo about accessing sim results

There seems to be a typo below about accessing Q_E and Q_I. What is the proper way to access these -- is it something like model.numQ_E and model.numQ_I, respectively?

S = model.numS            # time series of S counts
E = model.numE            # time series of E counts
I = model.numI            # time series of I counts
R = model.numR            # time series of R counts
F = model.numF            # time series of F counts
Q_E = model.numE          # time series of Q_E counts
Q_I = model.numI          # time series of Q_I counts

want to see the 2.0 version code, please

I want to predict the covid happend in hongkong, so the 2.0version is required which is sharply satisfy my requirement, please help me do that with the 2.0 code

Contact tracing makes it worse??

In the network model, just increasing phi_E and phi_I (test rate when a close contact has tested positive) seems to increase the number of cases. I feel like this should never happen. My first guess is self.numI[self.tidx] in models.py-ln 693 should be self.numI[self.tidx] - self.numD_I[self.tidx] but not sure.

Initial parameters
time=300 beta =2.4/12.39 sigma =1/4.58 gamma =1/12.39 mu_I =0.0004 mu_0 =0 nu =0 xi =0 p =0.5 Q =G_quarantine beta_D =beta sigma_D =sigma gamma_D =gamma mu_D =0.0004 theta_E =0 theta_I =0 phi_E =0 phi_I =0 psi_E =1.0, psi_I =1.0 q =0.05 initI =numNodes/100 initE =0 initD_E =0 initD_I =0 initR =0 initF =0

Checkpoints-1
{'t': [21, 42, 100], 'G': [G_distancing, G_distancing, G_normal], 'p': [0.1 , 0.1, 0.5 ], 'theta_E': [0.02, 0.1, 0.02], 'theta_I': [0.02, 0.1, 0.02], 'phi_E': [0.6 , 0.6, 0.6 ], 'phi_I': [0.6 , 0.6, 0.6]}

Checkpoints-2
{'t': [21, 42, 100], 'G': [G_distancing, G_distancing, G_normal], 'p': [0.1 , 0.1, 0.5 ], 'theta_E': [0.02, 0.1, 0.02], 'theta_I': [0.02, 0.1, 0.02], 'phi_E': [0.6 , 0.85, 0.85 ], 'phi_I': [0.6 , 0.85, 0.85 ]}

Result with Checkpoints-1
Simulation time is set to 300 but it ends around 150, indicating there are no cases left.
image

Results with Checkpoints-2
image

Color return-to-work model

Hello!

Thanks for the excellent repo, I found it by following up on the Color return-to-work model, which was useful for thinking through the impact of different testing regimes on safety. I found myself wanting to tweak a few knobs that weren't included in their GUI (such as test sensitivity and specificity, infectivity post-vaccine, etc). Are the notebooks supporting those models available?

Thank you,

-Josh

Random "division by zero" error

Minimal working example:

from seirsplus.models import *
from seirsplus.networks import *
import networkx as nx

graph = nx.barabasi_albert_graph(n=500, m=10)
graph = custom_exponential_graph(graph)

base_model = SEIRSNetworkModel(G=graph, 
                               beta=0.25, 
                               sigma=1/5, 
                               gamma=1/15,
                               initE=10)
base_model.run(T=100)

Code produces the following error occasionally; interestingly enough the same error shows up in the model wiki example (line 6):

seirsplus\models.py:838: RuntimeWarning: divide by zero encountered in log
  self.delta               = numpy.log(self.degree)/numpy.log(numpy.mean(self.degree))     if self.parameters['delta'] is None   else numpy.array(self.parameters['delta'])   if isinstance(self.parameters['delta'], (list, numpy.ndarray))   else numpy.full(fill_value=self.parameters['delta'], shape=(self.numNodes,1))
seirsplus\models.py:839: RuntimeWarning: divide by zero encountered in log
  self.delta_Q             = numpy.log(self.degree_Q)/numpy.log(numpy.mean(self.degree_Q)) if self.parameters['delta_Q'] is None else numpy.array(self.parameters['delta_Q']) if isinstance(self.parameters['delta_Q'], (list, numpy.ndarray)) else numpy.full(fill_value=self.parameters['delta_Q'], shape=(self.numNodes,1))

I believe the randomness comes from the way custom_exponential_graph modifies the original graph. One might have to run the code several times to reproduce the issue.

Identify nodes in each state

Hi, there, is there a way to identify nodes in each state at each period?

I figured it out. Model.X gives the states for all nodes. :)

copyright problem

Hi,

I'm trying to packaging this into Debian as a Debian package, and now I'm writing the copyright information.

I found the copyright statement in LICENSE which seems missed year and fullname.

Copyright (c) [year] [fullname]

There supposes would be Copyright (c) 2020 Ryan Seamus McGee.

Could you please let me know if this statement is correct or not and fix this?

Thank you~

Typo in SEIRSplus_Model.pdf

In the SEIRS+ Network Model document, I think the description of D_I should be "Number of infectious individuals with detected cases" instead of "Number of exposed individuals with detected cases", which is the same description as D_E.

seirplus network heterogenous population types

I'm trying to model SEIR situations that occur in nursing homes, cruise ships, and prisons where there is close contact between residents/inmates and staff contact between separate populations.

Specifically, I'm interested in the following:

If there are two separate populations A and B from the beginning, and the only thing common between them is a staff population S, how long does it take for an infection to spread from A to B given control over how densely connected the S graph is to A and B

If B is a more vulnerable population, what are the clinical outcomes in the following situations:

  • A and B co-mingle with a staff population connected to both A and B
  • A and B are separated with S being the only common branches

Is this the type of thing that the SIER plus framework can handle? I don't mind taking a stab at implementing a Gilllespie style implementation of this myself, but if SIER plus can do this off-the shelf it would help a lot.

The effects of checkpoint

When I set a checkpoint between t=15 and t=75, I was expecting to see something like this:

Screen Shot 2020-04-11 at 14 11 53

The blue curve represents the number of infected people if no restrictions are applied. The green curve is during a simulated quarantine supposing a social contact reduction of 50% (that is, beta is cut in half) at time t=15 and goes back to the original value at the end of the checkpoint (I know this is different in the real world, just for the sake of simplicity).

But this is what I'm getting from seirsplus:

Screen Shot 2020-04-11 at 14 12 39

The checkpoint doesn't seem to take any effect. Below is a print of the settings I'm using:

Screen Shot 2020-04-11 at 14 19 44

What am I getting wrong?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.