Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 3 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -233,8 +233,8 @@ cython_debug/
/docs/_static/logos/
/docs/_build/
/docs/changelog.md
/docs_version3/_build/
/docs_version3/_static/logos/
/docs_version3/changelog.md
/docs_state_based/_build/
/docs_state_based/_static/logos/
/docs_state_based/changelog.md
/examples_version2/dynamics_training/data/
/docs/
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@
BrainPy is a flexible, efficient, and extensible framework for computational neuroscience and brain-inspired computation based on the Just-In-Time (JIT) compilation. It provides an integrative ecosystem for brain dynamics programming, including brain dynamics **building**, **simulation**, **training**, **analysis**, etc.

- **Source**: https://github.com/brainpy/BrainPy
- **Documentation (brainpy v3.0)**: https://brainpy.readthedocs.io/
- **Documentation (brainpy v2.0)**: https://brainpy-v2.readthedocs.io/
- **Documentation**: https://brainpy.readthedocs.io/
- **Documentation (state-based)**: https://brainpy-state.readthedocs.io/
- **Bug reports**: https://github.com/brainpy/BrainPy/issues
- **Ecosystem**: https://brainmodeling.readthedocs.io/

Expand Down
254 changes: 170 additions & 84 deletions brainpy/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
# Copyright 2025 BrainX Ecosystem Limited. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
Expand All @@ -13,87 +14,172 @@
# limitations under the License.
# ==============================================================================

__version__ = "3.0.0"
__version_info__ = (3, 0, 0)

from . import mixin
from . import version2
from ._base import *
from ._base import __all__ as base_all
from ._errors import *
from ._errors import __all__ as errors_all
from ._exponential import *
from ._exponential import __all__ as exp_all
from ._inputs import *
from ._inputs import __all__ as inputs_all
from ._lif import *
from ._lif import __all__ as neuron_all
from ._projection import *
from ._projection import __all__ as proj_all
from ._readout import *
from ._readout import __all__ as readout_all
from ._stp import *
from ._stp import __all__ as stp_all
from ._synapse import *
from ._synapse import __all__ as synapse_all
from ._synaptic_projection import *
from ._synaptic_projection import __all__ as synproj_all
from ._synouts import *
from ._synouts import __all__ as synout_all

__main__ = ['version2', 'mixin'] + errors_all + inputs_all + neuron_all + readout_all + stp_all + synapse_all
__main__ = __main__ + synout_all + base_all + exp_all + proj_all + synproj_all
del errors_all, inputs_all, neuron_all, readout_all, stp_all, synapse_all, synout_all, base_all
del exp_all, proj_all, synproj_all


# Deprecation warnings for brainpy.xxx -> brainpy.version2.xxx
def __getattr__(name):
"""Provide deprecation warnings for moved modules."""
import warnings

if hasattr(version2, name):
warnings.warn(
f"Accessing 'brainpy.{name}' is deprecated. "
f"Please use 'brainpy.version2.{name}' instead.",
DeprecationWarning,
stacklevel=2
)
return getattr(version2, name)

raise AttributeError(f"'brainpy' has no attribute '{name}'")


def __dir__():
"""Return list of attributes including deprecated ones for tab completion."""
# Get the default attributes
default_attrs = list(globals().keys())

# Add all public attributes from version2 for discoverability
version2_attrs = [attr for attr in dir(version2) if not attr.startswith('_')]

# Combine and return unique attributes
return sorted(set(default_attrs + version2_attrs))


# Register deprecated modules in sys.modules to support "import brainpy.xxx" syntax
import sys as _sys

_deprecated_modules = [
'math', 'check', 'tools', 'connect', 'initialize', 'init', 'conn',
'optim', 'losses', 'measure', 'inputs', 'encoding', 'checkpoints',
'algorithms', 'integrators', 'ode', 'sde', 'fde',
'dnn', 'layers', 'dyn', 'running', 'train', 'analysis',
'channels', 'neurons', 'rates', 'synapses', 'synouts', 'synplast',
'visualization', 'visualize', 'types', 'modes', 'context',
'helpers', 'delay', 'dynsys', 'runners', 'transform', 'dynold'
]

# Create wrapper modules that show deprecation warnings
for _mod_name in _deprecated_modules:
if hasattr(version2, _mod_name):
_sys.modules[f'brainpy.{_mod_name}'] = getattr(version2, _mod_name)

del _sys, _mod_name, _deprecated_modules

version2.__version__ = __version__
__version__ = "3.0.1"
__version_info__ = (3, 0, 1)


from brainpy import _errors as errors
from brainpy import mixin
# fundamental supporting modules
from brainpy import check, tools
# Part: Math Foundation #
# ----------------------- #
# math foundation
from brainpy import math
# Part: Toolbox #
# --------------- #
# modules of toolbox
from . import (
connect, # synaptic connection
initialize, # weight initialization
optim, # gradient descent optimizers
losses, # loss functions
measure, # methods for data analysis
inputs, # methods for generating input currents
encoding, # encoding schema
checkpoints, # checkpoints
check, # error checking
algorithms, # online or offline training algorithms
)
from .math import BrainPyObject

# convenient alias
conn = connect
init = initialize

# numerical integrators
from brainpy import integrators
from brainpy.integrators import ode, sde, fde
from brainpy.integrators.base import (Integrator as Integrator)
from brainpy.integrators.joint_eq import (JointEq as JointEq)
from brainpy.integrators.runner import (IntegratorRunner as IntegratorRunner)
from brainpy.integrators.ode.generic import (odeint as odeint)
from brainpy.integrators.sde.generic import (sdeint as sdeint)
from brainpy.integrators.fde.generic import (fdeint as fdeint)

# Part: Models #
# -------------- #

# base classes
from brainpy.dynsys import (
DynamicalSystem as DynamicalSystem,
DynSysGroup as DynSysGroup, # collectors
Sequential as Sequential,
Dynamic as Dynamic, # category
Projection as Projection,
receive_update_input, # decorators
receive_update_output,
not_receive_update_input,
not_receive_update_output,
)

DynamicalSystemNS = DynamicalSystem
Network = DynSysGroup
# delays
from brainpy.delay import (
VarDelay as VarDelay,
)

# building blocks
from brainpy import (
dnn, layers, # module for dnn layers
dyn, # module for modeling dynamics
)

NeuGroup = NeuGroupNS = dyn.NeuDyn
dyn.DynamicalSystem = DynamicalSystem

# common tools
from brainpy.context import (share as share)
from brainpy.helpers import (
reset_level as reset_level,
reset_state as reset_state,
save_state as save_state,
load_state as load_state,
clear_input as clear_input
)

# Part: Running #
# --------------- #
from brainpy.runners import (DSRunner as DSRunner)
from brainpy.transform import (LoopOverTime as LoopOverTime, )
from brainpy import (running as running)

# Part: Training #
# ---------------- #
from brainpy.train.base import (DSTrainer as DSTrainer, )
from brainpy.train.back_propagation import (BPTT as BPTT,
BPFF as BPFF, )
from brainpy.train.online import (OnlineTrainer as OnlineTrainer,
ForceTrainer as ForceTrainer, )
from brainpy.train.offline import (OfflineTrainer as OfflineTrainer,
RidgeTrainer as RidgeTrainer, )

# Part: Analysis #
# ---------------- #
from brainpy import (analysis as analysis)

# Part: Others #
# ---------------- #
import brainpy.visualization as visualize

# Part: Deprecations #
# -------------------- #
from brainpy import train
from brainpy import (
channels, # channel models
neurons, # neuron groups
synapses, # synapses
rates, # rate models
synouts, # synaptic output
synplast, # synaptic plasticity
)
from brainpy.math.object_transform.base import (
Base as Base,
)

from brainpy.math.object_transform.collectors import (
ArrayCollector as ArrayCollector,
Collector as Collector,
)


from brainpy.deprecations import deprecation_getattr

optimizers = optim



if __name__ == '__main__':
connect
initialize, # weight initialization
optim, # gradient descent optimizers
losses, # loss functions
measure, # methods for data analysis
inputs, # methods for generating input currents
encoding, # encoding schema
checkpoints, # checkpoints
check, # error checking
mixin, # mixin classes
algorithms, # online or offline training algorithms
check, tools, errors, math
BrainPyObject,
integrators, ode, sde, fde
Integrator, JointEq, IntegratorRunner, odeint, sdeint, fdeint
DynamicalSystem, DynSysGroup, Sequential, Dynamic, Projection
receive_update_input, receive_update_output, not_receive_update_input, not_receive_update_output
VarDelay
dnn, layers, dyn
NeuGroup, NeuGroupNS
share
reset_level, reset_state, save_state, load_state, clear_input
DSRunner, LoopOverTime, running
DSTrainer, BPTT, BPFF, OnlineTrainer, ForceTrainer,
OfflineTrainer, RidgeTrainer
analysis
visualize
train
channels, neurons, synapses, rates, state_based, synouts, synplast
modes
Base
ArrayCollector, Collector, errors
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@
import numpy as np
from jax.lax import while_loop

import brainpy.version2.math as bm
from brainpy.version2.math.object_transform.base import BrainPyObject
from brainpy.version2.types import ArrayType
import brainpy.math as bm
from brainpy.math.object_transform.base import BrainPyObject
from brainpy.types import ArrayType
from .utils import (Sigmoid,
Regularization,
L1Regularization,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@
import jax.numpy as jnp
from jax import vmap

import brainpy.version2.math as bm
from brainpy.version2.math.object_transform.base import BrainPyObject
import brainpy.math as bm
from brainpy.math.object_transform.base import BrainPyObject

__all__ = [
# brainpy_object class
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
# ==============================================================================
from itertools import combinations_with_replacement

import brainpy.version2.math as bm
import brainpy.math as bm

__all__ = [
'Sigmoid',
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -24,16 +24,16 @@
import numpy as np
from jax.scipy.optimize import minimize

import brainpy.version2.math as bm
import brainpy.math as bm
from brainpy._errors import AnalyzerError, UnsupportedError
from brainpy.version2 import optim, losses
from brainpy.version2.analysis import utils, base, constants
from brainpy.version2.context import share
from brainpy.version2.deprecations import _input_deprecate_msg
from brainpy.version2.dynsys import DynamicalSystem
from brainpy.version2.helpers import clear_input
from brainpy.version2.runners import check_and_format_inputs, _f_ops
from brainpy.version2.types import ArrayType
from brainpy import optim, losses
from brainpy.analysis import utils, base, constants
from brainpy.context import share
from brainpy.deprecations import _input_deprecate_msg
from brainpy.dynsys import DynamicalSystem
from brainpy.helpers import clear_input
from brainpy.runners import check_and_format_inputs, _f_ops
from brainpy.types import ArrayType

__all__ = [
'SlowPointFinder',
Expand Down Expand Up @@ -87,7 +87,7 @@ class SlowPointFinder(base.DSAnalyzer):
dt: float
Parameter for ``f_cell`` is instance of :py:class:`~.DynamicalSystem`.
The numerical integration step, which can be used when .
The default is given by `brainpy.version2.math.get_dt()`.
The default is given by `brainpy.math.get_dt()`.

.. versionadded:: 2.2.0
inputs: sequence, callable
Expand Down Expand Up @@ -595,7 +595,7 @@ def compute_jacobians(
# visualization
if plot:
import matplotlib.pyplot as plt
from brainpy.version2 import visualize
from brainpy import visualize
jacobian = bm.as_numpy(jacobian)

num_col = min(num_col, num_point)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
# ==============================================================================
import unittest

import brainpy.version2 as bp
import brainpy.version2.math as bm
import brainpy as bp
import brainpy.math as bm


class HH(bp.dyn.NeuDyn):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@
from jax.scipy.optimize import minimize

import brainpy._errors as errors
import brainpy.version2.math as bm
from brainpy.version2 import tools
from brainpy.version2.analysis import constants as C, utils
from brainpy.version2.analysis.base import DSAnalyzer
from brainpy.version2.math.object_transform.collectors import Collector
import brainpy.math as bm
from brainpy import tools
from brainpy.analysis import constants as C, utils
from brainpy.analysis.base import DSAnalyzer
from brainpy.math.object_transform.collectors import Collector

pyplot = None

Expand Down
Loading
Loading