Metadata-Version: 2.3
Name: isingm
Version: 1.1.2
Summary: A pythonic Ising model simulation
License: GPL-3.0-or-later
Keywords: physics,ising,montecarlo,ising model,metropolis algorithm
Author: pacidus
Author-email: pacidus@gmail.com
Requires-Python: >=3.7
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Requires-Dist: matplotlib (>=3.2.1)
Requires-Dist: numpy (>=1.18.2)
Project-URL: Repository, https://github.com/Pacidus/isingm
Description-Content-Type: text/markdown

![wheel](https://img.shields.io/pypi/wheel/isingm?style=plastic)
![implementation](https://img.shields.io/pypi/implementation/isingm)
![python](https://img.shields.io/pypi/pyversions/isingm)
![downloads](https://img.shields.io/pypi/dm/isingm)

# Ising
A pythonic implementation of the Ising model.

Check the example for more.


## Lattice
This is the main place of the Ising model,
we have to initialize it with a tuple of the lattice shape that can be of any dimension or size.
The lattice can be initialized with a random state (you can choose the state ratio up) or all in a state 1 or -1.

### arguments:

- ##### shape:

>   type: **tuple(int)**
>
>   The shape of the lattice is tested for 1 to 4 dimension.
>   Every values of shape must be > 0 

#### Optionnal:

- ##### all:

>    type: **int** == 1 or -1
>
>    Set the state at all 1 or -1 it overpass the r parrameter.

- ##### r: 

>   type: **float** in [0, ..., 1]
>
>  Set a random state with a ratio r of 1 in the lattice (default r = 0.5).

- ##### adj: 

>   type: **numpy.array**
>
>   A vector of vector: is the representation of the spin interaction.
>
>   |  0  |  J  |  0  |
>   | --- | --- | --- |
>   |**J**|**#**|**J**| 
>   |**0**|**J**|**0**| 
>
>   Will be written as [[1,0],[-1,0],[0,1],[0,-1]]
>   
>   As default it's the left right up down direct neighbor matrix will be genereted (whatever this mean in 4 or more dimensions).

- ##### J:

>   type: **numpy.array** or **float**
>
>   Is the interraction between spins, 
>   if J is an array he as to be the same length than adj.
>
>   (you can choose to make anisotropic iteractions !!)

- ##### B:

>   type: **numpy.array** or **float**
>
>   Is the magnetic field imposed on the lattice,
>   if B is an array he as to have the same shape of the lattice

- ##### beta:

>   type: **float**
>
>   Beta is 1/(Kb * T) with T the absolute temp,
>   and Kb is the Boltzmann constant.

## Methods

### randomize(self, ratio=0.5)
Randomize th lattice state with a given ratio of up state.

### arguments:

#### Optionnal:

- ##### ratio:

>   type: **float** in [0, ..., 1]
>
>   The ratio of up state.

### all(self, state)
Set all the lattice to the same state.

### arguments:

- ##### state:

>   type: **int** == -1 or 1
>
>   Value of the spin site.

### H(self)
Compute the Hamiltonian of the lattice.

### returns:

- ##### Hamiltonian

>   type: **float** 
>
>   Hamiltonian of the lattice.

### hamiltonian(self)
Compute the Halmitonian of each spin.

### returns:

- ##### local_Hamiltonian:

>   type: **numpy array** 
>
>   The Hamiltonian calculated for each spin.

### mH(self)
Compute the mean value of the Hamiltonian.

### returns:

- ##### <H>

>   type: **float** 
>
>   Mean value of the Hamiltonian.

### mag(self)
Compute the magnetization of the lattice.

### returns:

- ##### Magnetization

>   type: **float** 
>
>   Magnetization of the lattice.

### get_B(self)
Method to get the magnetic field.

### returns:

- ##### B:

>   type: **numpy array** 
>
>   Return the magnetic field.

### get_beta(self)
Method to get beta.

### returns:

- ##### beta:

>   type: **float** 
>
>   Return beta.

### get_shape(self)
Method to get the shape of the lattice

### returns:

- ##### shape:

>   type: **tuple(float)**
> 
>   Return the shape of the lattice

### get_size(self)
Method to get the size of the lattice

### returns:

- ##### size:

>   type: **float**
> 
>   Return the size of the lattice

### get_state(self)
Method to get the state of the lattice.

### returns:

- ##### state:

>   type: **numpy array** 
>
>   Return the copy of the state.


### set_B(self, B)
Method to set the magnetic field.

### arguments:

- ##### B:

>   type: **numpy array**
>
>   The new Magnetic field.

### set_beta(self, beta)
Method to set beta.

### arguments:

- ##### beta:

>   type: **float** 
>
>   The new beta.

### set_state(self, state)
Method to set the state of the lattice.

### arguments:

- ##### state:

>   type: **numpy array** 
>
>   The new state.





## Metropolis.algorithm
Is the class who solve the Ising model with the **Metropolis algorithm**

Implementation of the Metropolis algorithm

### arguments:

-   **for the arguments look the lattice class.**

## Methods

### step(self, n=0):

step apply the metropolis algorithm on n spin once

### arguments:

#### Optional:

- ##### n:

>   type: **int**
>
>   n must be strictly positive is the size of the sample 

