- Set an
"id"
column by default - Add force inference algorithm in sheet class, based on method describe in Brodland et al. 2014.
- New
get_simple_index
to "quickly" get a non-oriented, full edge representation of the epithelium - New
euler_characteristic
function to asses wether polyhedrons are closed
- Add two new geometry classes.
- Fix drop index name in retrieve method.
- Make HistoryHdf5 record every columns by default
- Removes the
sheet_events.relax
deprecated function
- More coherent use of
is_active
- close_cell now raises an error if the cell has more than one hole
- changed the algorythm for 3D cell division to have a more robust
way to attribute faces to the daughter cells (see
return_verts
argument inget_division_edges
) - do not check for condition_4 on division
- Adds a Lloyd relaxation step for spherical sheet generation (needs to be generalized)
- Added
"rx", "ry", "rz"
columns, reprensenting the source vertex positions relative to face center - The
face_projected_pos
method has been rewritten with a much faster implementation. - There is now a
"phi"
angle representing the angle in the face plane. - There is a new
order
optional parameter toreset_index
andsanitize
that re-indexesedge_df
such that the vertices for each face are contiguous and ordered clockwize in the face plane. - The
face_polygons
method benefits from this rewrite, so does the 2Dsheet_view
.
- Added periodic boundary conditions support
- adds spherical sheet and monolayers from CGAL
- CGAL-less version installable with pip
- New geometry classes
- BorderElasticity, RadialTension, and BarrierElasticity effectors
- Effectors now take nested dictionnaries as specs, instead of dictionnary of sets:
specs = {
"face": {
"is_alive": 1,
"perimeter": 1.0,
"perimeter_elasticity": 0.1,
"prefered_perimeter": 3.81,
}
}
Instead of the previous:
specs = {
"face": {
"is_alive",
"perimeter",
"perimeter_elasticity",
"prefered_perimeter",
}
}
This allows to give default values to the paramters directly in the effector class definition, and to have a specs
attribute for the model directly.
A warning is raised if the effector definition uses the old style.
- Cell division on periodic boundary conditions
Some bug fixes for 3D rearangements
Puts an exact kernel in c_collisions.cpp
In the absence of a clear way to deal with rearangement, we had to let this go for now, it may come back later...
- We add two basics function in actions for sheet tissue :
increase
anddecrease
. In the near future, we will removed deprecated function thatincrease
anddecrease
will replace (such asgrowth
,shrink
,contract
andrelax
).
-
new
HistoryHdf5
class that records each time point in a hdf file instead of in memory. -
new
browse_history
function that creates a widget to slide through the different time points with an ipyvolume 3D view
- the
color
entries in edge and face specs can now be functions that take a sheet object as sole argument:
specs = {
"edge":{
'color':'lightslategrey',
'visible':True
},
"face":{
'color': lambda sheet : sheet.face_df["apoptosis"],
'colormap':'Reds',
'visible':True
}
}
This way, the color is updated at each function call, without having to define a new function.
- new
get_next
function returns the indexes of the next half-edge for every edge (e.g the edge whosesrce
is thetrgt
of the current edge)
We now allow for rosettes to form, and split type1 transition in two steps: merging of edges bellow the critical length and spliting more than rank 3 vertices (or more than rank 4 in 3D). The splitting frequency is governed by two settings p_4
and p5p
.This follows Finegan et al 2019. See doc/notebooks/Rosettes.ipynb for a demo.
A look a the diffs in sheet_topology
and bulk_topology
should convince the reader that this should result in a major increase in stability.
Automated reconnection is now treated as an event (treated by an EventManager
instance), see tyssue.behavior.base_events.reconnect
.
In EulerSolver, this avoids raising TopologyChangeError
at least in explicit Euler. Topology changes in IVPSolver are not supported for now.
- added a
bounds
attribute to EulerSolver. This simply clips the displacement to avoid runaway conditions.
-
A new
update_rank
method allows to compute the rank of a vertex (as the number of flat edges connected to it). This required to move theconnectivity
module to utils to avoid circular imports. -
We explicitly allow two sided faces to be created by
collapse_edge
orremove_face
, they are directly eliminated.
-
Added two time-dependant solvers
solvers.viscous.EulerSolver
andsolvers.viscous.IVPSolver
-- see the demo -
Added a connectivity matrices module
-
removed layer type 1 transition (maybe a bit harshly)
-
rewrote effectors specification with default values
-
added a
merge_border
function to put single edges at a 2D sheet border, and atrim_borders
option to thesheet.remove()
andsheet.sanitize()
methods
- collision detection should now be an optional dependency
doc/notebooks
is now synched with the tyssue-demo repo- new
make nbtest
uses nbval to run the notebooks under pytest (provinding some kind of integration tests)
-
Collision detection also works for the outer layers of bulk tissues, i.e. collisions of the apical or basal surfaces are avoided for a monolayer.
-
Added
get_neighbors
andget_neighborhood
method toEpithelium
to allow local patch queries in bulk epithelia (was initially only possible for 2D sheets).
The solvers.quasistatic.QSSolver
class provides a refactored solver that includes automatic Type 1, Type 3 and collision detection solving after each function evaluation. Use it with:
solver = QSSolver(with_t1=True, with_t3=True)
solver.find_energy_min(sheet, **minimize_kwargs)
The function signature is a bit different from the previous sheet_vertex_solver.Solver
as key-word arguments are directly passed to scipy minimize
function. You thus need to replace:
solver_kw = {'minimize': {'method': 'L-BFGS-B',
'options': {'ftol': 1e-8,
'gtol': 1e-8}}}
solver.find_energy_min(sheet, **solver_kw)
by:
solver_kw = {'method': 'L-BFGS-B',
'options': {'ftol': 1e-8,
'gtol': 1e-8}}}
solver.find_energy_min(sheet, **solver_kw)
to use the new solver.
Note that sheet_vertex_solver.Solver
is still available.
We refactored event management with a keyword arguments only design to make passing complex parameter dictionnaries easier.
Actions and events where added for monolayer objects.
There is now an option in the manager append
methods kwargs to add unique event or not.
We switched to GPL to be able to use CGAL without worrying. If this is a problem to you, we can offer accomodations.
The use of the top level draw.sheet_view
function is encouraged. It is now possible to specify visibility at the single face level with a "visible"
column in the face DataFrame.
- Added a
History
class to handle time series of sheet movements
- Lumen volume calculation on a new geometry class (#110)
- Create a new segment vertex category : lateral in Monolayer
- adds
finally
statement to scale_unscale utils - Change 'sagittal' key word by 'lateral' key word
- Add LumenVolumeElasticity effector
- added SurfaceTension effector
- reset catched ValueError to Exception waiting for pandas to publish 0.24
- Better opposite management and validation for Sheet, closes #72
- Correction of color face (#85)
- fixes reset_specs warning formatting bug
- Correction of segment category for new faces create in IH transition
The codebase now uses black to format all the code base.
- removed old isotropic model
- removes multisheet (#105)