Generated by Cython 3.2.8
Yellow lines hint at Python interaction.
Click on a line that starts with a "+" to see the C code that Cython generated for it.
Raw output: mega_crank_fast.c
+0001: ## ...........................................................................
__pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_test, __pyx_t_4) < (0)) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
0002: ##
0003: ## PIMMS (Polymer Interactions in Multicomponent Mixtures)
0004: ##
0005: ## pimms/mega_crank_fast.pyx
0006: ##
0007: ## Drop-in optimized replacement for pimms.mega_crank.mega_crank().
0008: ##
0009: ## GOAL
0010: ## ----
0011: ## The reference kernel (pimms/mega_crank.pyx) is correct but allocates several
0012: ## numpy arrays *inside* the per-substep hot loop:
0013: ##
0014: ## * crank_it / update_position / single_bead_crank each `np.zeros([3])`
0015: ## * get_angle_energy_change allocates 4 arrays (a, b, angle_positions,
0016: ## intcode_lookup) on EVERY call
0017: ##
0018: ## With CRANKSHAFT_SUBSTEPS ~ 10^4 and thousands of megamoves this is hundreds
0019: ## of millions of heap allocations routed through the Python/numpy layer - which
0020: ## profiling showed to be ~85% of total runtime.
0021: ##
0022: ## This module performs the IDENTICAL algorithm with IDENTICAL random-number
0023: ## call ordering, but every transient buffer is a C stack array. Because the
0024: ## RNG sequence is preserved bit-for-bit, given the same (grid, type_grid,
0025: ## idx_to_bead, seed, ...) inputs this kernel returns the SAME (energy,
0026: ## accepted_moves) and leaves the SAME mutated grid/type_grid/idx_to_bead as the
0027: ## reference kernel. That makes it verifiable by exact comparison (see
0028: ## pimms/fast_kernels/benchmark.py).
0029: ##
0030: ## The public signature matches pimms.mega_crank.mega_crank exactly, so it can
0031: ## be swapped in at moves.py:184 with no other changes.
0032: ## ...........................................................................
0033:
+0034: import numpy as np
__pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_numpy, 0, 0, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 34, __pyx_L1_error) __pyx_t_4 = __pyx_t_1; __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_np, __pyx_t_4) < (0)) __PYX_ERR(0, 34, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
0035: cimport numpy as cnp
+0036: cnp.import_array()
__pyx_t_9 = __pyx_f_5numpy_import_array(); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 36, __pyx_L1_error)
0037:
0038: cimport cython
0039: from libc.math cimport exp
0040: from libc.stdlib cimport malloc, free
0041: from cython.parallel cimport prange
0042:
0043: from pimms.cython_config cimport NUMPY_INT_TYPE
0044: from pimms.cython_config cimport NUMPY_INT_TYPE_long
0045:
0046:
0047: # ---- Monte-Carlo PRNG (splitmix64) --------------------------------------
0048: # Replaces libc rand()/srand(). On macOS rand() is the weak Park-Miller MINSTD
0049: # LCG (x -> 16807*x mod 2^31-1: short period ~2.1e9 and pronounced lattice
0050: # structure) and is platform-dependent (glibc differs, Windows RAND_MAX=32767).
0051: # splitmix64 has period 2^64, passes BigCrush, and is bit-identical on every
0052: # platform. The serial kernels are single-threaded, so a module-global state is
0053: # fine; the parallel checkerboard kernel keeps its own per-block PRNG.
0054: cdef unsigned long long _RNG_STATE[1] # module-global serial PRNG state (zero-init)
+0055: cdef int PRNG_MAX = 2147483647 # 2^31 - 1 (fixed, platform-independent)
__pyx_v_5pimms_15mega_crank_fast_PRNG_MAX = 0x7FFFFFFF;
0056:
+0057: cdef inline void mc_seed(unsigned int seedval) noexcept nogil:
static CYTHON_INLINE void __pyx_f_5pimms_15mega_crank_fast_mc_seed(unsigned int __pyx_v_seedval) {
/* … */
/* function exit code */
}
+0058: _RNG_STATE[0] = <unsigned long long>seedval
(__pyx_v_5pimms_15mega_crank_fast__RNG_STATE[0]) = ((unsigned PY_LONG_LONG)__pyx_v_seedval);
0059:
+0060: cdef inline int mc_rand() noexcept nogil:
static CYTHON_INLINE int __pyx_f_5pimms_15mega_crank_fast_mc_rand(void) {
unsigned PY_LONG_LONG __pyx_v_z;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
0061: # one splitmix64 step; return the top 31 bits -> [0, PRNG_MAX]
+0062: _RNG_STATE[0] = _RNG_STATE[0] + <unsigned long long>0x9E3779B97F4A7C15
(__pyx_v_5pimms_15mega_crank_fast__RNG_STATE[0]) = ((__pyx_v_5pimms_15mega_crank_fast__RNG_STATE[0]) + ((unsigned PY_LONG_LONG)0x9E3779B97F4A7C15));
+0063: cdef unsigned long long z = _RNG_STATE[0]
__pyx_v_z = (__pyx_v_5pimms_15mega_crank_fast__RNG_STATE[0]);
+0064: z = (z ^ (z >> 30)) * <unsigned long long>0xBF58476D1CE4E5B9
__pyx_v_z = ((__pyx_v_z ^ (__pyx_v_z >> 30)) * ((unsigned PY_LONG_LONG)0xBF58476D1CE4E5B9));
+0065: z = (z ^ (z >> 27)) * <unsigned long long>0x94D049BB133111EB
__pyx_v_z = ((__pyx_v_z ^ (__pyx_v_z >> 27)) * ((unsigned PY_LONG_LONG)0x94D049BB133111EB));
+0066: z = z ^ (z >> 31)
__pyx_v_z = (__pyx_v_z ^ (__pyx_v_z >> 31));
+0067: return <int>(z >> 33)
__pyx_r = ((int)(__pyx_v_z >> 33)); goto __pyx_L0;
0068:
0069:
+0070: cdef inline int int_max(int a, int b) noexcept nogil: return a if a >= b else b
static CYTHON_INLINE int __pyx_f_5pimms_15mega_crank_fast_int_max(int __pyx_v_a, int __pyx_v_b) {
int __pyx_r;
__pyx_t_2 = (__pyx_v_a >= __pyx_v_b);
if (__pyx_t_2) {
__pyx_t_1 = __pyx_v_a;
} else {
__pyx_t_1 = __pyx_v_b;
}
__pyx_r = __pyx_t_1;
goto __pyx_L0;
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
+0071: cdef inline int int_min(int a, int b) noexcept nogil: return a if a <= b else b
static CYTHON_INLINE int __pyx_f_5pimms_15mega_crank_fast_int_min(int __pyx_v_a, int __pyx_v_b) {
int __pyx_r;
__pyx_t_2 = (__pyx_v_a <= __pyx_v_b);
if (__pyx_t_2) {
__pyx_t_1 = __pyx_v_a;
} else {
__pyx_t_1 = __pyx_v_b;
}
__pyx_r = __pyx_t_1;
goto __pyx_L0;
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
0072:
0073:
0074: # -----------------------------------------------------------------
0075: # Periodic boundary correction. Identical to the reference kernel:
0076: # avoids the modulo on the common non-negative path.
+0077: @cython.cdivision(True)
static CYTHON_INLINE int __pyx_f_5pimms_15mega_crank_fast_pbc_correction(int __pyx_v_value, int __pyx_v_DIM) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
0078: cdef inline int pbc_correction(int value, int DIM) noexcept nogil:
+0079: if value < 0:
__pyx_t_1 = (__pyx_v_value < 0);
if (__pyx_t_1) {
/* … */
}
+0080: return DIM + value
__pyx_r = (__pyx_v_DIM + __pyx_v_value);
goto __pyx_L0;
0081: else:
+0082: return value % DIM
/*else*/ {
__pyx_r = (__pyx_v_value % __pyx_v_DIM);
goto __pyx_L0;
}
0083:
0084:
0085: # -----------------------------------------------------------------
0086: # Integer RNG. Byte-for-byte identical to pimms.mega_crank.randint so the
0087: # random stream (and therefore every accept/reject decision) matches exactly.
+0088: cdef inline int randint(int start, int end) noexcept nogil:
static CYTHON_INLINE int __pyx_f_5pimms_15mega_crank_fast_randint(int __pyx_v_start, int __pyx_v_end) {
int __pyx_v_r;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast.randint", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
return __pyx_r;
}
+0089: if start == 0:
__pyx_t_1 = (__pyx_v_start == 0);
if (__pyx_t_1) {
/* … */
}
+0090: end = end + 1
/* "pimms/mega_crank_fast.pyx":90
* cdef inline int randint(int start, int end) noexcept nogil:
* if start == 0:
* end = end + 1 # <<<<<<<<<<<<<<
* # NOTE: must use double precision here. The reference kernel writes
* # float(rand()-1)/float(RAND_MAX), and Cython's float() is a C *double*
*/
__pyx_v_end = (__pyx_v_end + 1);
0091: # NOTE: must use double precision here. The reference kernel writes
0092: # float(rand()-1)/float(RAND_MAX), and Cython's float() is a C *double*
0093: # (Python float). Using a 32-bit C float (<float>) rounds differently at
0094: # truncation boundaries and produces different draws for the same RNG state.
+0095: cdef int r = start + <int>((<double>(mc_rand() - 1) / <double>PRNG_MAX) * (end))
__pyx_t_2 = ((double)(__pyx_f_5pimms_15mega_crank_fast_mc_rand() - 1));
if (unlikely(((double)__pyx_v_5pimms_15mega_crank_fast_PRNG_MAX) == 0)) {
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
PyErr_SetString(PyExc_ZeroDivisionError, "float division");
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__PYX_ERR(0, 95, __pyx_L1_error)
}
__pyx_v_r = (__pyx_v_start + ((int)((__pyx_t_2 / ((double)__pyx_v_5pimms_15mega_crank_fast_PRNG_MAX)) * __pyx_v_end)));
+0096: return r
__pyx_r = __pyx_v_r; goto __pyx_L0;
0097:
0098:
0099: # -----------------------------------------------------------------
0100: # Metropolis criterion. Identical to the reference: note rand() is consumed
0101: # ONLY when new_energy > old_energy, which must be preserved to keep the
0102: # stream aligned.
+0103: cdef inline int accept_or_reject(float invtemp, long old_energy, long new_energy) noexcept nogil:
static CYTHON_INLINE int __pyx_f_5pimms_15mega_crank_fast_accept_or_reject(float __pyx_v_invtemp, long __pyx_v_old_energy, long __pyx_v_new_energy) {
float __pyx_v_expterm;
float __pyx_v_randval;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast.accept_or_reject", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
return __pyx_r;
}
0104: cdef float expterm
0105: cdef float randval
0106:
+0107: if new_energy <= old_energy:
__pyx_t_1 = (__pyx_v_new_energy <= __pyx_v_old_energy);
if (__pyx_t_1) {
/* … */
}
+0108: return 1
__pyx_r = 1;
goto __pyx_L0;
0109:
+0110: expterm = exp(-(new_energy - old_energy) * invtemp)
__pyx_v_expterm = exp(((-(__pyx_v_new_energy - __pyx_v_old_energy)) * __pyx_v_invtemp));
0111: # double-precision division to match the reference's float(rand())/float(RAND_MAX)
+0112: randval = <double>mc_rand() / <double>PRNG_MAX
__pyx_t_2 = ((double)__pyx_f_5pimms_15mega_crank_fast_mc_rand());
if (unlikely(((double)__pyx_v_5pimms_15mega_crank_fast_PRNG_MAX) == 0)) {
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
PyErr_SetString(PyExc_ZeroDivisionError, "float division");
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__PYX_ERR(0, 112, __pyx_L1_error)
}
__pyx_v_randval = (__pyx_t_2 / ((double)__pyx_v_5pimms_15mega_crank_fast_PRNG_MAX));
0113:
+0114: if randval < expterm:
__pyx_t_1 = (__pyx_v_randval < __pyx_v_expterm);
if (__pyx_t_1) {
/* … */
}
+0115: return 1
__pyx_r = 1;
goto __pyx_L0;
0116: else:
+0117: return 0
/*else*/ {
__pyx_r = 0;
goto __pyx_L0;
}
0118:
0119:
+0120: @cython.cdivision(True)
static CYTHON_INLINE int __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues(int __pyx_v_distance) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
0121: cdef inline int fix_angle_pbc_issues(int distance) noexcept nogil:
+0122: if distance < -1:
__pyx_t_1 = (__pyx_v_distance < -1L);
if (__pyx_t_1) {
/* … */
}
+0123: return 1
__pyx_r = 1;
goto __pyx_L0;
+0124: elif distance > 1:
__pyx_t_1 = (__pyx_v_distance > 1);
if (__pyx_t_1) {
/* … */
}
+0125: return -1
__pyx_r = -1;
goto __pyx_L0;
0126: else:
+0127: return distance
/*else*/ {
__pyx_r = __pyx_v_distance;
goto __pyx_L0;
}
0128:
0129:
0130: # -----------------------------------------------------------------
0131: # Straddle check between two lattice points (used for hardwall rejection).
0132: # Mirrors do_positions_stradle_pbc_boundary's per-consecutive-pair test.
+0133: cdef inline int straddle_pair(int ax, int ay, int az,
static CYTHON_INLINE int __pyx_f_5pimms_15mega_crank_fast_straddle_pair(int __pyx_v_ax, int __pyx_v_ay, int __pyx_v_az, int __pyx_v_bx, int __pyx_v_by, int __pyx_v_bz) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast.straddle_pair", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
return __pyx_r;
}
0134: int bx, int by, int bz) noexcept nogil:
+0135: if abs(ax - bx) > 1:
__pyx_t_1 = abs((__pyx_v_ax - __pyx_v_bx)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 135, __pyx_L1_error)
__pyx_t_2 = (__pyx_t_1 > 1);
if (__pyx_t_2) {
/* … */
}
+0136: return 1
__pyx_r = 1;
goto __pyx_L0;
+0137: if abs(ay - by) > 1:
__pyx_t_1 = abs((__pyx_v_ay - __pyx_v_by)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 137, __pyx_L1_error)
__pyx_t_2 = (__pyx_t_1 > 1);
if (__pyx_t_2) {
/* … */
}
+0138: return 1
__pyx_r = 1;
goto __pyx_L0;
+0139: if abs(az - bz) > 1:
__pyx_t_1 = abs((__pyx_v_az - __pyx_v_bz)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 139, __pyx_L1_error)
__pyx_t_2 = (__pyx_t_1 > 1);
if (__pyx_t_2) {
/* … */
}
+0140: return 1
__pyx_r = 1;
goto __pyx_L0;
+0141: return 0
__pyx_r = 0; goto __pyx_L0;
0142:
0143:
0144: # -----------------------------------------------------------------
0145: # Single-bead / terminal-bead proposal. Reproduces single_bead_crank ->
0146: # update_position: three randint() draws (x, y, z order) then a hardsphere
0147: # test. Writes the proposed position into out[3]; returns 1 on success, 0 if
0148: # the target site is occupied (out[0] set to -1, matching the reference).
+0149: @cython.wraparound(False)
static CYTHON_INLINE int __pyx_f_5pimms_15mega_crank_fast_single_bead_crank_c(int __pyx_v_ox, int __pyx_v_oy, int __pyx_v_oz, __Pyx_memviewslice __pyx_v_grid, int __pyx_v_XDIM, int __pyx_v_YDIM, int __pyx_v_ZDIM, int *__pyx_v_out) {
int __pyx_v_x_off;
int __pyx_v_y_off;
int __pyx_v_z_off;
int __pyx_v_local_x;
int __pyx_v_local_y;
int __pyx_v_local_z;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
0150: @cython.boundscheck(False)
0151: cdef inline int single_bead_crank_c(int ox, int oy, int oz,
0152: NUMPY_INT_TYPE[:, :, :] grid,
0153: int XDIM, int YDIM, int ZDIM,
0154: int* out) noexcept nogil:
+0155: cdef int x_off = randint(0, 2) - 1
__pyx_v_x_off = (__pyx_f_5pimms_15mega_crank_fast_randint(0, 2) - 1);
+0156: cdef int y_off = randint(0, 2) - 1
__pyx_v_y_off = (__pyx_f_5pimms_15mega_crank_fast_randint(0, 2) - 1);
+0157: cdef int z_off = randint(0, 2) - 1
__pyx_v_z_off = (__pyx_f_5pimms_15mega_crank_fast_randint(0, 2) - 1);
0158:
+0159: cdef int local_x = pbc_correction(ox + x_off, XDIM)
__pyx_v_local_x = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_ox + __pyx_v_x_off), __pyx_v_XDIM);
+0160: cdef int local_y = pbc_correction(oy + y_off, YDIM)
__pyx_v_local_y = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_oy + __pyx_v_y_off), __pyx_v_YDIM);
+0161: cdef int local_z = pbc_correction(oz + z_off, ZDIM)
__pyx_v_local_z = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_oz + __pyx_v_z_off), __pyx_v_ZDIM);
0162:
+0163: if grid[local_x, local_y, local_z] > 0:
__pyx_t_1 = __pyx_v_local_x;
__pyx_t_2 = __pyx_v_local_y;
__pyx_t_3 = __pyx_v_local_z;
__pyx_t_4 = ((*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_1 * __pyx_v_grid.strides[0]) ) + __pyx_t_2 * __pyx_v_grid.strides[1]) ) + __pyx_t_3 * __pyx_v_grid.strides[2]) ))) > 0);
if (__pyx_t_4) {
/* … */
}
+0164: out[0] = -1
(__pyx_v_out[0]) = -1;
+0165: out[1] = 0
(__pyx_v_out[1]) = 0;
+0166: out[2] = 0
(__pyx_v_out[2]) = 0;
+0167: return 0
__pyx_r = 0;
goto __pyx_L0;
0168:
+0169: out[0] = local_x
(__pyx_v_out[0]) = __pyx_v_local_x;
+0170: out[1] = local_y
(__pyx_v_out[1]) = __pyx_v_local_y;
+0171: out[2] = local_z
(__pyx_v_out[2]) = __pyx_v_local_z;
+0172: return 1
__pyx_r = 1; goto __pyx_L0;
0173:
0174:
0175: # -----------------------------------------------------------------
0176: # Internal-bead crankshaft proposal. Reproduces crank_it exactly: the
0177: # de-periodisation of the N/C anchors, the constrained box, then three
0178: # randint() draws (x, y, z order). Only the N-side (index 0) and C-side
0179: # (index 2) of the triptic are needed - the moved bead itself is unused.
+0180: @cython.wraparound(False)
static CYTHON_INLINE int __pyx_f_5pimms_15mega_crank_fast_crank_it_c(int __pyx_v_N_side_x, int __pyx_v_N_side_y, int __pyx_v_N_side_z, int __pyx_v_C_side_x, int __pyx_v_C_side_y, int __pyx_v_C_side_z, __Pyx_memviewslice __pyx_v_grid, int __pyx_v_XDIM, int __pyx_v_YDIM, int __pyx_v_ZDIM, int *__pyx_v_out) {
int __pyx_v_x_min;
int __pyx_v_x_max;
int __pyx_v_y_min;
int __pyx_v_y_max;
int __pyx_v_z_min;
int __pyx_v_z_max;
int __pyx_v_local_x;
int __pyx_v_local_y;
int __pyx_v_local_z;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast.crank_it_c", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
return __pyx_r;
}
0181: @cython.boundscheck(False)
0182: cdef inline int crank_it_c(int N_side_x, int N_side_y, int N_side_z,
0183: int C_side_x, int C_side_y, int C_side_z,
0184: NUMPY_INT_TYPE[:, :, :] grid,
0185: int XDIM, int YDIM, int ZDIM,
0186: int* out) noexcept nogil:
0187: cdef int x_min, x_max, y_min, y_max, z_min, z_max
0188: cdef int local_x, local_y, local_z
0189:
0190: # de-periodise: if anchors are >2 apart in a dim they straddle the PBC,
0191: # so lift the smaller into the 'fake' extended space.
+0192: if abs(N_side_x - C_side_x) > 2:
__pyx_t_1 = abs((__pyx_v_N_side_x - __pyx_v_C_side_x)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 192, __pyx_L1_error)
__pyx_t_2 = (__pyx_t_1 > 2);
if (__pyx_t_2) {
/* … */
}
+0193: if N_side_x > C_side_x:
__pyx_t_2 = (__pyx_v_N_side_x > __pyx_v_C_side_x);
if (__pyx_t_2) {
/* … */
goto __pyx_L4;
}
+0194: C_side_x = C_side_x + XDIM
__pyx_v_C_side_x = (__pyx_v_C_side_x + __pyx_v_XDIM);
0195: else:
+0196: N_side_x = N_side_x + XDIM
/*else*/ {
__pyx_v_N_side_x = (__pyx_v_N_side_x + __pyx_v_XDIM);
}
__pyx_L4:;
0197:
+0198: if abs(N_side_y - C_side_y) > 2:
__pyx_t_1 = abs((__pyx_v_N_side_y - __pyx_v_C_side_y)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 198, __pyx_L1_error)
__pyx_t_2 = (__pyx_t_1 > 2);
if (__pyx_t_2) {
/* … */
}
+0199: if N_side_y > C_side_y:
__pyx_t_2 = (__pyx_v_N_side_y > __pyx_v_C_side_y);
if (__pyx_t_2) {
/* … */
goto __pyx_L6;
}
+0200: C_side_y = C_side_y + YDIM
__pyx_v_C_side_y = (__pyx_v_C_side_y + __pyx_v_YDIM);
0201: else:
+0202: N_side_y = N_side_y + YDIM
/*else*/ {
__pyx_v_N_side_y = (__pyx_v_N_side_y + __pyx_v_YDIM);
}
__pyx_L6:;
0203:
+0204: if abs(N_side_z - C_side_z) > 2:
__pyx_t_1 = abs((__pyx_v_N_side_z - __pyx_v_C_side_z)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 204, __pyx_L1_error)
__pyx_t_2 = (__pyx_t_1 > 2);
if (__pyx_t_2) {
/* … */
}
+0205: if N_side_z > C_side_z:
__pyx_t_2 = (__pyx_v_N_side_z > __pyx_v_C_side_z);
if (__pyx_t_2) {
/* … */
goto __pyx_L8;
}
+0206: C_side_z = C_side_z + ZDIM
__pyx_v_C_side_z = (__pyx_v_C_side_z + __pyx_v_ZDIM);
0207: else:
+0208: N_side_z = N_side_z + ZDIM
/*else*/ {
__pyx_v_N_side_z = (__pyx_v_N_side_z + __pyx_v_ZDIM);
}
__pyx_L8:;
0209:
+0210: x_min = int_max(N_side_x - 1, C_side_x - 1)
__pyx_v_x_min = __pyx_f_5pimms_15mega_crank_fast_int_max((__pyx_v_N_side_x - 1), (__pyx_v_C_side_x - 1));
+0211: x_max = int_min(N_side_x + 1, C_side_x + 1)
__pyx_v_x_max = __pyx_f_5pimms_15mega_crank_fast_int_min((__pyx_v_N_side_x + 1), (__pyx_v_C_side_x + 1));
+0212: y_min = int_max(N_side_y - 1, C_side_y - 1)
__pyx_v_y_min = __pyx_f_5pimms_15mega_crank_fast_int_max((__pyx_v_N_side_y - 1), (__pyx_v_C_side_y - 1));
+0213: y_max = int_min(N_side_y + 1, C_side_y + 1)
__pyx_v_y_max = __pyx_f_5pimms_15mega_crank_fast_int_min((__pyx_v_N_side_y + 1), (__pyx_v_C_side_y + 1));
+0214: z_min = int_max(N_side_z - 1, C_side_z - 1)
__pyx_v_z_min = __pyx_f_5pimms_15mega_crank_fast_int_max((__pyx_v_N_side_z - 1), (__pyx_v_C_side_z - 1));
+0215: z_max = int_min(N_side_z + 1, C_side_z + 1)
__pyx_v_z_max = __pyx_f_5pimms_15mega_crank_fast_int_min((__pyx_v_N_side_z + 1), (__pyx_v_C_side_z + 1));
0216:
+0217: local_x = pbc_correction((x_min + randint(1, (x_max - x_min + 1)) - 1), XDIM)
__pyx_v_local_x = __pyx_f_5pimms_15mega_crank_fast_pbc_correction(((__pyx_v_x_min + __pyx_f_5pimms_15mega_crank_fast_randint(1, ((__pyx_v_x_max - __pyx_v_x_min) + 1))) - 1), __pyx_v_XDIM);
+0218: local_y = pbc_correction((y_min + randint(1, (y_max - y_min + 1)) - 1), YDIM)
__pyx_v_local_y = __pyx_f_5pimms_15mega_crank_fast_pbc_correction(((__pyx_v_y_min + __pyx_f_5pimms_15mega_crank_fast_randint(1, ((__pyx_v_y_max - __pyx_v_y_min) + 1))) - 1), __pyx_v_YDIM);
+0219: local_z = pbc_correction((z_min + randint(1, (z_max - z_min + 1)) - 1), ZDIM)
__pyx_v_local_z = __pyx_f_5pimms_15mega_crank_fast_pbc_correction(((__pyx_v_z_min + __pyx_f_5pimms_15mega_crank_fast_randint(1, ((__pyx_v_z_max - __pyx_v_z_min) + 1))) - 1), __pyx_v_ZDIM);
0220:
+0221: if grid[local_x, local_y, local_z] > 0:
__pyx_t_3 = __pyx_v_local_x;
__pyx_t_4 = __pyx_v_local_y;
__pyx_t_5 = __pyx_v_local_z;
__pyx_t_2 = ((*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_3 * __pyx_v_grid.strides[0]) ) + __pyx_t_4 * __pyx_v_grid.strides[1]) ) + __pyx_t_5 * __pyx_v_grid.strides[2]) ))) > 0);
if (__pyx_t_2) {
/* … */
}
+0222: out[0] = -1
(__pyx_v_out[0]) = -1;
+0223: out[1] = 0
(__pyx_v_out[1]) = 0;
+0224: out[2] = 0
(__pyx_v_out[2]) = 0;
+0225: return 0
__pyx_r = 0;
goto __pyx_L0;
0226:
+0227: out[0] = local_x
(__pyx_v_out[0]) = __pyx_v_local_x;
+0228: out[1] = local_y
(__pyx_v_out[1]) = __pyx_v_local_y;
+0229: out[2] = local_z
(__pyx_v_out[2]) = __pyx_v_local_z;
+0230: return 1
__pyx_r = 1; goto __pyx_L0;
0231:
0232:
0233: # -----------------------------------------------------------------
0234: # Angle-energy delta. Identical maths to get_angle_energy_change but with C
0235: # stack arrays in place of the four per-call numpy allocations.
+0236: @cython.wraparound(False)
static long __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_c(int __pyx_v_bead_index, __Pyx_memviewslice __pyx_v_idx_to_bead, int *__pyx_v_new_position, __Pyx_memviewslice __pyx_v_angle_lookup) {
int __pyx_v_a0;
int __pyx_v_a1;
int __pyx_v_a2;
int __pyx_v_b0;
int __pyx_v_b1;
int __pyx_v_b2;
long __pyx_v_angle_penalty_new;
long __pyx_v_angle_penalty_old;
int __pyx_v_angle_positions[5][3];
int __pyx_v_intcode_lookup[5];
int __pyx_v_offset;
int __pyx_v_offset_start;
int __pyx_v_offset_end;
int __pyx_v_i;
int __pyx_v_pos;
int __pyx_v_angle_idx;
int __pyx_v_local_move_idx;
long __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
0237: @cython.boundscheck(False)
0238: cdef long get_angle_energy_change_c(int bead_index,
0239: NUMPY_INT_TYPE_long[:, :] idx_to_bead,
0240: int* new_position,
0241: NUMPY_INT_TYPE[:, :, :, :, :, :, :] angle_lookup) noexcept nogil:
0242:
+0243: if idx_to_bead[bead_index, 3] == 1:
__pyx_t_1 = __pyx_v_bead_index;
__pyx_t_2 = 3;
__pyx_t_3 = ((*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_2 * __pyx_v_idx_to_bead.strides[1]) ))) == 1);
if (__pyx_t_3) {
/* … */
}
+0244: return 0
__pyx_r = 0;
goto __pyx_L0;
0245:
0246: cdef int a0, a1, a2, b0, b1, b2
+0247: cdef long angle_penalty_new = 0
__pyx_v_angle_penalty_new = 0;
+0248: cdef long angle_penalty_old = 0
__pyx_v_angle_penalty_old = 0;
0249:
0250: cdef int angle_positions[5][3]
0251: cdef int intcode_lookup[5]
0252:
0253: cdef int offset, offset_start, offset_end, i, pos
0254: cdef int angle_idx
+0255: cdef int local_move_idx = -1
__pyx_v_local_move_idx = -1;
0256:
+0257: if idx_to_bead[bead_index, 0] == 1:
__pyx_t_2 = __pyx_v_bead_index;
__pyx_t_1 = 0;
__pyx_t_3 = ((*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_2 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) ))) == 1);
if (__pyx_t_3) {
/* … */
goto __pyx_L4;
}
+0258: offset_start = 0
__pyx_v_offset_start = 0;
+0259: offset_end = 3
__pyx_v_offset_end = 3;
+0260: elif idx_to_bead[bead_index, 0] == 2:
__pyx_t_1 = __pyx_v_bead_index;
__pyx_t_2 = 0;
__pyx_t_3 = ((*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_2 * __pyx_v_idx_to_bead.strides[1]) ))) == 2);
if (__pyx_t_3) {
/* … */
goto __pyx_L4;
}
+0261: offset_start = -2
__pyx_v_offset_start = -2;
+0262: offset_end = 3
__pyx_v_offset_end = 3;
+0263: elif idx_to_bead[bead_index, 0] == 4:
__pyx_t_2 = __pyx_v_bead_index;
__pyx_t_1 = 0;
__pyx_t_3 = ((*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_2 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) ))) == 4);
if (__pyx_t_3) {
/* … */
goto __pyx_L4;
}
+0264: offset_start = -1
__pyx_v_offset_start = -1;
+0265: offset_end = 2
__pyx_v_offset_end = 2;
+0266: elif idx_to_bead[bead_index, 0] == 3:
__pyx_t_1 = __pyx_v_bead_index;
__pyx_t_2 = 0;
__pyx_t_3 = ((*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_2 * __pyx_v_idx_to_bead.strides[1]) ))) == 3);
if (__pyx_t_3) {
/* … */
goto __pyx_L4;
}
+0267: offset_start = -2
__pyx_v_offset_start = -2;
+0268: offset_end = 1
__pyx_v_offset_end = 1;
+0269: elif idx_to_bead[bead_index, 0] == 5:
__pyx_t_2 = __pyx_v_bead_index;
__pyx_t_1 = 0;
__pyx_t_3 = ((*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_2 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) ))) == 5);
if (__pyx_t_3) {
/* … */
goto __pyx_L4;
}
+0270: offset_start = -1
__pyx_v_offset_start = -1;
+0271: offset_end = 3
__pyx_v_offset_end = 3;
+0272: elif idx_to_bead[bead_index, 0] == 6:
__pyx_t_1 = __pyx_v_bead_index;
__pyx_t_2 = 0;
__pyx_t_3 = ((*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_2 * __pyx_v_idx_to_bead.strides[1]) ))) == 6);
if (__pyx_t_3) {
/* … */
goto __pyx_L4;
}
+0273: offset_start = -2
__pyx_v_offset_start = -2;
+0274: offset_end = 2
__pyx_v_offset_end = 2;
0275: else:
0276: # single bead (flag 0) never reaches here in the reference because the
0277: # skip-angle flag short-circuits; keep a safe default.
+0278: offset_start = 0
/*else*/ {
__pyx_v_offset_start = 0;
+0279: offset_end = 0
__pyx_v_offset_end = 0; } __pyx_L4:;
0280:
+0281: angle_idx = 0
__pyx_v_angle_idx = 0;
+0282: for offset in range(offset_start, offset_end):
__pyx_t_4 = __pyx_v_offset_end;
__pyx_t_5 = __pyx_t_4;
for (__pyx_t_6 = __pyx_v_offset_start; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
__pyx_v_offset = __pyx_t_6;
+0283: pos = bead_index + offset
__pyx_v_pos = (__pyx_v_bead_index + __pyx_v_offset);
+0284: angle_positions[angle_idx][0] = idx_to_bead[pos, 5]
__pyx_t_2 = __pyx_v_pos;
__pyx_t_1 = 5;
((__pyx_v_angle_positions[__pyx_v_angle_idx])[0]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_2 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
+0285: angle_positions[angle_idx][1] = idx_to_bead[pos, 6]
__pyx_t_1 = __pyx_v_pos;
__pyx_t_2 = 6;
((__pyx_v_angle_positions[__pyx_v_angle_idx])[1]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_2 * __pyx_v_idx_to_bead.strides[1]) )));
+0286: angle_positions[angle_idx][2] = idx_to_bead[pos, 7]
__pyx_t_2 = __pyx_v_pos;
__pyx_t_1 = 7;
((__pyx_v_angle_positions[__pyx_v_angle_idx])[2]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_2 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
+0287: intcode_lookup[angle_idx] = idx_to_bead[pos, 2]
__pyx_t_1 = __pyx_v_pos;
__pyx_t_2 = 2;
(__pyx_v_intcode_lookup[__pyx_v_angle_idx]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_2 * __pyx_v_idx_to_bead.strides[1]) )));
+0288: if pos == bead_index:
__pyx_t_3 = (__pyx_v_pos == __pyx_v_bead_index);
if (__pyx_t_3) {
/* … */
}
+0289: local_move_idx = angle_idx
__pyx_v_local_move_idx = __pyx_v_angle_idx;
+0290: angle_idx = angle_idx + 1
__pyx_v_angle_idx = (__pyx_v_angle_idx + 1); }
0291:
0292: # old configuration
+0293: for i in range(0, angle_idx - 2):
__pyx_t_7 = (__pyx_v_angle_idx - 2);
__pyx_t_8 = __pyx_t_7;
for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_8; __pyx_t_4+=1) {
__pyx_v_i = __pyx_t_4;
+0294: a0 = fix_angle_pbc_issues(angle_positions[i + 1][0] - angle_positions[i][0])
__pyx_v_a0 = __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues((((__pyx_v_angle_positions[(__pyx_v_i + 1)])[0]) - ((__pyx_v_angle_positions[__pyx_v_i])[0])));
+0295: a1 = fix_angle_pbc_issues(angle_positions[i + 1][1] - angle_positions[i][1])
__pyx_v_a1 = __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues((((__pyx_v_angle_positions[(__pyx_v_i + 1)])[1]) - ((__pyx_v_angle_positions[__pyx_v_i])[1])));
+0296: a2 = fix_angle_pbc_issues(angle_positions[i + 1][2] - angle_positions[i][2])
__pyx_v_a2 = __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues((((__pyx_v_angle_positions[(__pyx_v_i + 1)])[2]) - ((__pyx_v_angle_positions[__pyx_v_i])[2])));
0297:
+0298: b0 = fix_angle_pbc_issues(angle_positions[i + 1][0] - angle_positions[i + 2][0])
__pyx_v_b0 = __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues((((__pyx_v_angle_positions[(__pyx_v_i + 1)])[0]) - ((__pyx_v_angle_positions[(__pyx_v_i + 2)])[0])));
+0299: b1 = fix_angle_pbc_issues(angle_positions[i + 1][1] - angle_positions[i + 2][1])
__pyx_v_b1 = __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues((((__pyx_v_angle_positions[(__pyx_v_i + 1)])[1]) - ((__pyx_v_angle_positions[(__pyx_v_i + 2)])[1])));
+0300: b2 = fix_angle_pbc_issues(angle_positions[i + 1][2] - angle_positions[i + 2][2])
__pyx_v_b2 = __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues((((__pyx_v_angle_positions[(__pyx_v_i + 1)])[2]) - ((__pyx_v_angle_positions[(__pyx_v_i + 2)])[2])));
0301:
+0302: angle_penalty_old = angle_lookup[intcode_lookup[i + 1], a0 + 1, a1 + 1, a2 + 1, b0 + 1, b1 + 1, b2 + 1] + angle_penalty_old
__pyx_t_2 = (__pyx_v_intcode_lookup[(__pyx_v_i + 1)]);
__pyx_t_1 = (__pyx_v_a0 + 1);
__pyx_t_9 = (__pyx_v_a1 + 1);
__pyx_t_10 = (__pyx_v_a2 + 1);
__pyx_t_11 = (__pyx_v_b0 + 1);
__pyx_t_12 = (__pyx_v_b1 + 1);
__pyx_t_13 = (__pyx_v_b2 + 1);
__pyx_v_angle_penalty_old = ((*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=6 */ (( /* dim=5 */ (( /* dim=4 */ (( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_angle_lookup.data + __pyx_t_2 * __pyx_v_angle_lookup.strides[0]) ) + __pyx_t_1 * __pyx_v_angle_lookup.strides[1]) ) + __pyx_t_9 * __pyx_v_angle_lookup.strides[2]) ) + __pyx_t_10 * __pyx_v_angle_lookup.strides[3]) ) + __pyx_t_11 * __pyx_v_angle_lookup.strides[4]) ) + __pyx_t_12 * __pyx_v_angle_lookup.strides[5]) ) + __pyx_t_13 * __pyx_v_angle_lookup.strides[6]) ))) + __pyx_v_angle_penalty_old);
}
0303:
0304: # move the central bead to the proposed position
+0305: if local_move_idx >= 0:
__pyx_t_3 = (__pyx_v_local_move_idx >= 0);
if (__pyx_t_3) {
/* … */
}
+0306: angle_positions[local_move_idx][0] = new_position[0]
((__pyx_v_angle_positions[__pyx_v_local_move_idx])[0]) = (__pyx_v_new_position[0]);
+0307: angle_positions[local_move_idx][1] = new_position[1]
((__pyx_v_angle_positions[__pyx_v_local_move_idx])[1]) = (__pyx_v_new_position[1]);
+0308: angle_positions[local_move_idx][2] = new_position[2]
((__pyx_v_angle_positions[__pyx_v_local_move_idx])[2]) = (__pyx_v_new_position[2]);
0309:
0310: # new configuration
+0311: for i in range(0, angle_idx - 2):
__pyx_t_7 = (__pyx_v_angle_idx - 2);
__pyx_t_8 = __pyx_t_7;
for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_8; __pyx_t_4+=1) {
__pyx_v_i = __pyx_t_4;
+0312: a0 = fix_angle_pbc_issues(angle_positions[i + 1][0] - angle_positions[i][0])
__pyx_v_a0 = __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues((((__pyx_v_angle_positions[(__pyx_v_i + 1)])[0]) - ((__pyx_v_angle_positions[__pyx_v_i])[0])));
+0313: a1 = fix_angle_pbc_issues(angle_positions[i + 1][1] - angle_positions[i][1])
__pyx_v_a1 = __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues((((__pyx_v_angle_positions[(__pyx_v_i + 1)])[1]) - ((__pyx_v_angle_positions[__pyx_v_i])[1])));
+0314: a2 = fix_angle_pbc_issues(angle_positions[i + 1][2] - angle_positions[i][2])
__pyx_v_a2 = __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues((((__pyx_v_angle_positions[(__pyx_v_i + 1)])[2]) - ((__pyx_v_angle_positions[__pyx_v_i])[2])));
0315:
+0316: b0 = fix_angle_pbc_issues(angle_positions[i + 1][0] - angle_positions[i + 2][0])
__pyx_v_b0 = __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues((((__pyx_v_angle_positions[(__pyx_v_i + 1)])[0]) - ((__pyx_v_angle_positions[(__pyx_v_i + 2)])[0])));
+0317: b1 = fix_angle_pbc_issues(angle_positions[i + 1][1] - angle_positions[i + 2][1])
__pyx_v_b1 = __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues((((__pyx_v_angle_positions[(__pyx_v_i + 1)])[1]) - ((__pyx_v_angle_positions[(__pyx_v_i + 2)])[1])));
+0318: b2 = fix_angle_pbc_issues(angle_positions[i + 1][2] - angle_positions[i + 2][2])
__pyx_v_b2 = __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues((((__pyx_v_angle_positions[(__pyx_v_i + 1)])[2]) - ((__pyx_v_angle_positions[(__pyx_v_i + 2)])[2])));
0319:
+0320: angle_penalty_new = angle_lookup[intcode_lookup[i + 1], a0 + 1, a1 + 1, a2 + 1, b0 + 1, b1 + 1, b2 + 1] + angle_penalty_new
__pyx_t_13 = (__pyx_v_intcode_lookup[(__pyx_v_i + 1)]);
__pyx_t_12 = (__pyx_v_a0 + 1);
__pyx_t_11 = (__pyx_v_a1 + 1);
__pyx_t_10 = (__pyx_v_a2 + 1);
__pyx_t_9 = (__pyx_v_b0 + 1);
__pyx_t_1 = (__pyx_v_b1 + 1);
__pyx_t_2 = (__pyx_v_b2 + 1);
__pyx_v_angle_penalty_new = ((*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=6 */ (( /* dim=5 */ (( /* dim=4 */ (( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_angle_lookup.data + __pyx_t_13 * __pyx_v_angle_lookup.strides[0]) ) + __pyx_t_12 * __pyx_v_angle_lookup.strides[1]) ) + __pyx_t_11 * __pyx_v_angle_lookup.strides[2]) ) + __pyx_t_10 * __pyx_v_angle_lookup.strides[3]) ) + __pyx_t_9 * __pyx_v_angle_lookup.strides[4]) ) + __pyx_t_1 * __pyx_v_angle_lookup.strides[5]) ) + __pyx_t_2 * __pyx_v_angle_lookup.strides[6]) ))) + __pyx_v_angle_penalty_new);
}
0321:
+0322: return angle_penalty_new - angle_penalty_old
__pyx_r = (__pyx_v_angle_penalty_new - __pyx_v_angle_penalty_old); goto __pyx_L0;
0323:
0324:
0325: # -----------------------------------------------------------------
0326: # Short/long-range interaction-energy delta. Same logic as get_energy_change,
0327: # operating on plain ints rather than numpy position arrays. type_grid is
0328: # temporarily mutated and restored exactly as in the reference.
+0329: @cython.wraparound(False)
static long __pyx_f_5pimms_15mega_crank_fast_get_energy_change_c(CYTHON_UNUSED __Pyx_memviewslice __pyx_v_grid, __Pyx_memviewslice __pyx_v_type_grid, int __pyx_v_old_x, int __pyx_v_old_y, int __pyx_v_old_z, int __pyx_v_new_x, int __pyx_v_new_y, int __pyx_v_new_z, int __pyx_v_LR_vs_SR, __Pyx_memviewslice __pyx_v_interaction_table, __Pyx_memviewslice __pyx_v_LR_interaction_table, __Pyx_memviewslice __pyx_v_SLR_interaction_table, int __pyx_v_XDIM, int __pyx_v_YDIM, int __pyx_v_ZDIM, int __pyx_v_hardwall) {
long __pyx_v_energy_old;
long __pyx_v_energy_old_empty;
long __pyx_v_energy_new;
long __pyx_v_energy_new_empty;
int __pyx_v_tmp_x;
int __pyx_v_tmp_y;
int __pyx_v_tmp_z;
int __pyx_v_x;
int __pyx_v_y;
int __pyx_v_z;
unsigned int __pyx_v_site_bead_type;
unsigned int __pyx_v_bead_type;
long __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast.get_energy_change_c", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
return __pyx_r;
}
0330: @cython.boundscheck(False)
0331: cdef long get_energy_change_c(NUMPY_INT_TYPE[:, :, :] grid,
0332: NUMPY_INT_TYPE[:, :, :] type_grid,
0333: int old_x, int old_y, int old_z,
0334: int new_x, int new_y, int new_z,
0335: int LR_vs_SR,
0336: NUMPY_INT_TYPE[:, :] interaction_table,
0337: NUMPY_INT_TYPE[:, :] LR_interaction_table,
0338: NUMPY_INT_TYPE[:, :] SLR_interaction_table,
0339: int XDIM, int YDIM, int ZDIM,
0340: int hardwall) noexcept nogil:
0341:
+0342: cdef long energy_old = 0
__pyx_v_energy_old = 0;
+0343: cdef long energy_old_empty = 0
__pyx_v_energy_old_empty = 0;
+0344: cdef long energy_new = 0
__pyx_v_energy_new = 0;
+0345: cdef long energy_new_empty = 0
__pyx_v_energy_new_empty = 0;
0346:
0347: cdef int tmp_x, tmp_y, tmp_z
0348: cdef int x, y, z
0349: cdef unsigned int site_bead_type, bead_type
0350:
+0351: bead_type = type_grid[old_x, old_y, old_z]
__pyx_t_1 = __pyx_v_old_x; __pyx_t_2 = __pyx_v_old_y; __pyx_t_3 = __pyx_v_old_z; __pyx_v_bead_type = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_1 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_2 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_3 * __pyx_v_type_grid.strides[2]) )));
0352:
+0353: if LR_vs_SR == 1:
__pyx_t_4 = (__pyx_v_LR_vs_SR == 1);
if (__pyx_t_4) {
/* … */
goto __pyx_L3;
}
0354: # ---- old energy over the 7x7x7 neighbourhood ----
+0355: for x in range(-3, 4):
for (__pyx_t_5 = -3; __pyx_t_5 < 4; __pyx_t_5+=1) {
__pyx_v_x = __pyx_t_5;
+0356: for y in range(-3, 4):
for (__pyx_t_6 = -3; __pyx_t_6 < 4; __pyx_t_6+=1) {
__pyx_v_y = __pyx_t_6;
+0357: for z in range(-3, 4):
for (__pyx_t_7 = -3; __pyx_t_7 < 4; __pyx_t_7+=1) {
__pyx_v_z = __pyx_t_7;
+0358: tmp_x = pbc_correction(old_x + x, XDIM)
__pyx_v_tmp_x = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_old_x + __pyx_v_x), __pyx_v_XDIM);
+0359: tmp_y = pbc_correction(old_y + y, YDIM)
__pyx_v_tmp_y = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_old_y + __pyx_v_y), __pyx_v_YDIM);
+0360: tmp_z = pbc_correction(old_z + z, ZDIM)
__pyx_v_tmp_z = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_old_z + __pyx_v_z), __pyx_v_ZDIM);
+0361: site_bead_type = type_grid[tmp_x, tmp_y, tmp_z]
__pyx_t_3 = __pyx_v_tmp_x;
__pyx_t_2 = __pyx_v_tmp_y;
__pyx_t_1 = __pyx_v_tmp_z;
__pyx_v_site_bead_type = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_3 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_2 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_1 * __pyx_v_type_grid.strides[2]) )));
0362:
+0363: if abs(x) < 2 and abs(y) < 2 and abs(z) < 2:
__pyx_t_8 = abs(__pyx_v_x); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 363, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 < 2); if (__pyx_t_9) { } else { __pyx_t_4 = __pyx_t_9; goto __pyx_L11_bool_binop_done; } __pyx_t_8 = abs(__pyx_v_y); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 363, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 < 2); if (__pyx_t_9) { } else { __pyx_t_4 = __pyx_t_9; goto __pyx_L11_bool_binop_done; } __pyx_t_8 = abs(__pyx_v_z); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 363, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 < 2); __pyx_t_4 = __pyx_t_9; __pyx_L11_bool_binop_done:; if (__pyx_t_4) { /* … */ goto __pyx_L10; }
+0364: if hardwall == 1:
__pyx_t_4 = (__pyx_v_hardwall == 1);
if (__pyx_t_4) {
/* … */
}
+0365: if abs(tmp_x - old_x) > 3 or abs(tmp_y - old_y) > 3 or abs(tmp_z - old_z) > 3:
__pyx_t_8 = abs((__pyx_v_tmp_x - __pyx_v_old_x)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 365, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 > 3); if (!__pyx_t_9) { } else { __pyx_t_4 = __pyx_t_9; goto __pyx_L16_bool_binop_done; } __pyx_t_8 = abs((__pyx_v_tmp_y - __pyx_v_old_y)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 365, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 > 3); if (!__pyx_t_9) { } else { __pyx_t_4 = __pyx_t_9; goto __pyx_L16_bool_binop_done; } __pyx_t_8 = abs((__pyx_v_tmp_z - __pyx_v_old_z)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 365, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 > 3); __pyx_t_4 = __pyx_t_9; __pyx_L16_bool_binop_done:; if (__pyx_t_4) { /* … */ }
+0366: site_bead_type = 0
__pyx_v_site_bead_type = 0;
+0367: energy_old = energy_old + interaction_table[bead_type, site_bead_type]
__pyx_t_10 = __pyx_v_bead_type;
__pyx_t_11 = __pyx_v_site_bead_type;
__pyx_v_energy_old = (__pyx_v_energy_old + (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_interaction_table.data + __pyx_t_10 * __pyx_v_interaction_table.strides[0]) ) + __pyx_t_11 * __pyx_v_interaction_table.strides[1]) ))));
+0368: if site_bead_type > 0:
__pyx_t_4 = (__pyx_v_site_bead_type > 0);
if (__pyx_t_4) {
/* … */
}
+0369: energy_old_empty = energy_old_empty + interaction_table[0, site_bead_type]
__pyx_t_1 = 0;
__pyx_t_11 = __pyx_v_site_bead_type;
__pyx_v_energy_old_empty = (__pyx_v_energy_old_empty + (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_interaction_table.data + __pyx_t_1 * __pyx_v_interaction_table.strides[0]) ) + __pyx_t_11 * __pyx_v_interaction_table.strides[1]) ))));
+0370: elif abs(x) < 3 and abs(y) < 3 and abs(z) < 3:
__pyx_t_8 = abs(__pyx_v_x); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 370, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 < 3); if (__pyx_t_9) { } else { __pyx_t_4 = __pyx_t_9; goto __pyx_L20_bool_binop_done; } __pyx_t_8 = abs(__pyx_v_y); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 370, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 < 3); if (__pyx_t_9) { } else { __pyx_t_4 = __pyx_t_9; goto __pyx_L20_bool_binop_done; } __pyx_t_8 = abs(__pyx_v_z); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 370, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 < 3); __pyx_t_4 = __pyx_t_9; __pyx_L20_bool_binop_done:; if (__pyx_t_4) { /* … */ goto __pyx_L10; }
+0371: if hardwall == 1:
__pyx_t_4 = (__pyx_v_hardwall == 1);
if (__pyx_t_4) {
/* … */
}
+0372: if abs(tmp_x - old_x) > 3 or abs(tmp_y - old_y) > 3 or abs(tmp_z - old_z) > 3:
__pyx_t_8 = abs((__pyx_v_tmp_x - __pyx_v_old_x)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 372, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 > 3); if (!__pyx_t_9) { } else { __pyx_t_4 = __pyx_t_9; goto __pyx_L25_bool_binop_done; } __pyx_t_8 = abs((__pyx_v_tmp_y - __pyx_v_old_y)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 372, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 > 3); if (!__pyx_t_9) { } else { __pyx_t_4 = __pyx_t_9; goto __pyx_L25_bool_binop_done; } __pyx_t_8 = abs((__pyx_v_tmp_z - __pyx_v_old_z)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 372, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 > 3); __pyx_t_4 = __pyx_t_9; __pyx_L25_bool_binop_done:; if (__pyx_t_4) { /* … */ }
+0373: continue
goto __pyx_L8_continue;
+0374: energy_old = energy_old + LR_interaction_table[bead_type, site_bead_type]
__pyx_t_11 = __pyx_v_bead_type;
__pyx_t_10 = __pyx_v_site_bead_type;
__pyx_v_energy_old = (__pyx_v_energy_old + (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_LR_interaction_table.data + __pyx_t_11 * __pyx_v_LR_interaction_table.strides[0]) ) + __pyx_t_10 * __pyx_v_LR_interaction_table.strides[1]) ))));
0375: else:
+0376: if hardwall == 1:
/*else*/ {
__pyx_t_4 = (__pyx_v_hardwall == 1);
if (__pyx_t_4) {
/* … */
}
+0377: if abs(tmp_x - old_x) > 3 or abs(tmp_y - old_y) > 3 or abs(tmp_z - old_z) > 3:
__pyx_t_8 = abs((__pyx_v_tmp_x - __pyx_v_old_x)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 377, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 > 3); if (!__pyx_t_9) { } else { __pyx_t_4 = __pyx_t_9; goto __pyx_L30_bool_binop_done; } __pyx_t_8 = abs((__pyx_v_tmp_y - __pyx_v_old_y)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 377, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 > 3); if (!__pyx_t_9) { } else { __pyx_t_4 = __pyx_t_9; goto __pyx_L30_bool_binop_done; } __pyx_t_8 = abs((__pyx_v_tmp_z - __pyx_v_old_z)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 377, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 > 3); __pyx_t_4 = __pyx_t_9; __pyx_L30_bool_binop_done:; if (__pyx_t_4) { /* … */ }
+0378: continue
goto __pyx_L8_continue;
+0379: energy_old = energy_old + SLR_interaction_table[bead_type, site_bead_type]
__pyx_t_10 = __pyx_v_bead_type;
__pyx_t_11 = __pyx_v_site_bead_type;
__pyx_v_energy_old = (__pyx_v_energy_old + (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_SLR_interaction_table.data + __pyx_t_10 * __pyx_v_SLR_interaction_table.strides[0]) ) + __pyx_t_11 * __pyx_v_SLR_interaction_table.strides[1]) ))));
}
__pyx_L10:;
__pyx_L8_continue:;
}
}
}
0380:
+0381: type_grid[new_x, new_y, new_z] = type_grid[old_x, old_y, old_z]
__pyx_t_1 = __pyx_v_old_x;
__pyx_t_2 = __pyx_v_old_y;
__pyx_t_3 = __pyx_v_old_z;
__pyx_t_12 = __pyx_v_new_x;
__pyx_t_13 = __pyx_v_new_y;
__pyx_t_14 = __pyx_v_new_z;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_12 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_13 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_14 * __pyx_v_type_grid.strides[2]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_1 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_2 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_3 * __pyx_v_type_grid.strides[2]) )));
+0382: type_grid[old_x, old_y, old_z] = 0
__pyx_t_3 = __pyx_v_old_x;
__pyx_t_2 = __pyx_v_old_y;
__pyx_t_1 = __pyx_v_old_z;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_3 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_2 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_1 * __pyx_v_type_grid.strides[2]) )) = 0;
0383:
0384: # ---- new energy ----
+0385: for x in range(-3, 4):
for (__pyx_t_5 = -3; __pyx_t_5 < 4; __pyx_t_5+=1) {
__pyx_v_x = __pyx_t_5;
+0386: for y in range(-3, 4):
for (__pyx_t_6 = -3; __pyx_t_6 < 4; __pyx_t_6+=1) {
__pyx_v_y = __pyx_t_6;
+0387: for z in range(-3, 4):
for (__pyx_t_7 = -3; __pyx_t_7 < 4; __pyx_t_7+=1) {
__pyx_v_z = __pyx_t_7;
+0388: tmp_x = pbc_correction(new_x + x, XDIM)
__pyx_v_tmp_x = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_new_x + __pyx_v_x), __pyx_v_XDIM);
+0389: tmp_y = pbc_correction(new_y + y, YDIM)
__pyx_v_tmp_y = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_new_y + __pyx_v_y), __pyx_v_YDIM);
+0390: tmp_z = pbc_correction(new_z + z, ZDIM)
__pyx_v_tmp_z = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_new_z + __pyx_v_z), __pyx_v_ZDIM);
+0391: site_bead_type = type_grid[tmp_x, tmp_y, tmp_z]
__pyx_t_1 = __pyx_v_tmp_x;
__pyx_t_2 = __pyx_v_tmp_y;
__pyx_t_3 = __pyx_v_tmp_z;
__pyx_v_site_bead_type = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_1 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_2 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_3 * __pyx_v_type_grid.strides[2]) )));
0392:
+0393: if abs(x) < 2 and abs(y) < 2 and abs(z) < 2:
__pyx_t_8 = abs(__pyx_v_x); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 393, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 < 2); if (__pyx_t_9) { } else { __pyx_t_4 = __pyx_t_9; goto __pyx_L40_bool_binop_done; } __pyx_t_8 = abs(__pyx_v_y); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 393, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 < 2); if (__pyx_t_9) { } else { __pyx_t_4 = __pyx_t_9; goto __pyx_L40_bool_binop_done; } __pyx_t_8 = abs(__pyx_v_z); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 393, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 < 2); __pyx_t_4 = __pyx_t_9; __pyx_L40_bool_binop_done:; if (__pyx_t_4) { /* … */ goto __pyx_L39; }
+0394: if hardwall == 1:
__pyx_t_4 = (__pyx_v_hardwall == 1);
if (__pyx_t_4) {
/* … */
}
+0395: if abs(tmp_x - new_x) > 3 or abs(tmp_y - new_y) > 3 or abs(tmp_z - new_z) > 3:
__pyx_t_8 = abs((__pyx_v_tmp_x - __pyx_v_new_x)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 395, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 > 3); if (!__pyx_t_9) { } else { __pyx_t_4 = __pyx_t_9; goto __pyx_L45_bool_binop_done; } __pyx_t_8 = abs((__pyx_v_tmp_y - __pyx_v_new_y)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 395, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 > 3); if (!__pyx_t_9) { } else { __pyx_t_4 = __pyx_t_9; goto __pyx_L45_bool_binop_done; } __pyx_t_8 = abs((__pyx_v_tmp_z - __pyx_v_new_z)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 395, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 > 3); __pyx_t_4 = __pyx_t_9; __pyx_L45_bool_binop_done:; if (__pyx_t_4) { /* … */ }
+0396: site_bead_type = 0
__pyx_v_site_bead_type = 0;
+0397: energy_new = energy_new + interaction_table[bead_type, site_bead_type]
__pyx_t_11 = __pyx_v_bead_type;
__pyx_t_10 = __pyx_v_site_bead_type;
__pyx_v_energy_new = (__pyx_v_energy_new + (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_interaction_table.data + __pyx_t_11 * __pyx_v_interaction_table.strides[0]) ) + __pyx_t_10 * __pyx_v_interaction_table.strides[1]) ))));
+0398: if site_bead_type > 0:
__pyx_t_4 = (__pyx_v_site_bead_type > 0);
if (__pyx_t_4) {
/* … */
}
+0399: energy_new_empty = energy_new_empty + interaction_table[0, site_bead_type]
__pyx_t_3 = 0;
__pyx_t_10 = __pyx_v_site_bead_type;
__pyx_v_energy_new_empty = (__pyx_v_energy_new_empty + (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_interaction_table.data + __pyx_t_3 * __pyx_v_interaction_table.strides[0]) ) + __pyx_t_10 * __pyx_v_interaction_table.strides[1]) ))));
+0400: elif abs(x) < 3 and abs(y) < 3 and abs(z) < 3:
__pyx_t_8 = abs(__pyx_v_x); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 400, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 < 3); if (__pyx_t_9) { } else { __pyx_t_4 = __pyx_t_9; goto __pyx_L49_bool_binop_done; } __pyx_t_8 = abs(__pyx_v_y); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 400, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 < 3); if (__pyx_t_9) { } else { __pyx_t_4 = __pyx_t_9; goto __pyx_L49_bool_binop_done; } __pyx_t_8 = abs(__pyx_v_z); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 400, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 < 3); __pyx_t_4 = __pyx_t_9; __pyx_L49_bool_binop_done:; if (__pyx_t_4) { /* … */ goto __pyx_L39; }
+0401: if hardwall == 1:
__pyx_t_4 = (__pyx_v_hardwall == 1);
if (__pyx_t_4) {
/* … */
}
+0402: if abs(tmp_x - new_x) > 3 or abs(tmp_y - new_y) > 3 or abs(tmp_z - new_z) > 3:
__pyx_t_8 = abs((__pyx_v_tmp_x - __pyx_v_new_x)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 402, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 > 3); if (!__pyx_t_9) { } else { __pyx_t_4 = __pyx_t_9; goto __pyx_L54_bool_binop_done; } __pyx_t_8 = abs((__pyx_v_tmp_y - __pyx_v_new_y)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 402, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 > 3); if (!__pyx_t_9) { } else { __pyx_t_4 = __pyx_t_9; goto __pyx_L54_bool_binop_done; } __pyx_t_8 = abs((__pyx_v_tmp_z - __pyx_v_new_z)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 402, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 > 3); __pyx_t_4 = __pyx_t_9; __pyx_L54_bool_binop_done:; if (__pyx_t_4) { /* … */ }
+0403: continue
goto __pyx_L37_continue;
+0404: energy_new = energy_new + LR_interaction_table[bead_type, site_bead_type]
__pyx_t_10 = __pyx_v_bead_type;
__pyx_t_11 = __pyx_v_site_bead_type;
__pyx_v_energy_new = (__pyx_v_energy_new + (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_LR_interaction_table.data + __pyx_t_10 * __pyx_v_LR_interaction_table.strides[0]) ) + __pyx_t_11 * __pyx_v_LR_interaction_table.strides[1]) ))));
0405: else:
+0406: if hardwall == 1:
/*else*/ {
__pyx_t_4 = (__pyx_v_hardwall == 1);
if (__pyx_t_4) {
/* … */
}
+0407: if abs(tmp_x - new_x) > 3 or abs(tmp_y - new_y) > 3 or abs(tmp_z - new_z) > 3:
__pyx_t_8 = abs((__pyx_v_tmp_x - __pyx_v_new_x)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 407, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 > 3); if (!__pyx_t_9) { } else { __pyx_t_4 = __pyx_t_9; goto __pyx_L59_bool_binop_done; } __pyx_t_8 = abs((__pyx_v_tmp_y - __pyx_v_new_y)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 407, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 > 3); if (!__pyx_t_9) { } else { __pyx_t_4 = __pyx_t_9; goto __pyx_L59_bool_binop_done; } __pyx_t_8 = abs((__pyx_v_tmp_z - __pyx_v_new_z)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 407, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 > 3); __pyx_t_4 = __pyx_t_9; __pyx_L59_bool_binop_done:; if (__pyx_t_4) { /* … */ }
+0408: continue
goto __pyx_L37_continue;
+0409: energy_new = energy_new + SLR_interaction_table[bead_type, site_bead_type]
__pyx_t_11 = __pyx_v_bead_type;
__pyx_t_10 = __pyx_v_site_bead_type;
__pyx_v_energy_new = (__pyx_v_energy_new + (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_SLR_interaction_table.data + __pyx_t_11 * __pyx_v_SLR_interaction_table.strides[0]) ) + __pyx_t_10 * __pyx_v_SLR_interaction_table.strides[1]) ))));
}
__pyx_L39:;
__pyx_L37_continue:;
}
}
}
0410:
0411: else:
0412: # ---- short-range only: 3x3x3 ----
+0413: for x in range(-1, 2):
/*else*/ {
for (__pyx_t_5 = -1; __pyx_t_5 < 2; __pyx_t_5+=1) {
__pyx_v_x = __pyx_t_5;
+0414: for y in range(-1, 2):
for (__pyx_t_6 = -1; __pyx_t_6 < 2; __pyx_t_6+=1) {
__pyx_v_y = __pyx_t_6;
+0415: for z in range(-1, 2):
for (__pyx_t_7 = -1; __pyx_t_7 < 2; __pyx_t_7+=1) {
__pyx_v_z = __pyx_t_7;
+0416: tmp_x = pbc_correction(old_x + x, XDIM)
__pyx_v_tmp_x = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_old_x + __pyx_v_x), __pyx_v_XDIM);
+0417: tmp_y = pbc_correction(old_y + y, YDIM)
__pyx_v_tmp_y = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_old_y + __pyx_v_y), __pyx_v_YDIM);
+0418: tmp_z = pbc_correction(old_z + z, ZDIM)
__pyx_v_tmp_z = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_old_z + __pyx_v_z), __pyx_v_ZDIM);
+0419: site_bead_type = type_grid[tmp_x, tmp_y, tmp_z]
__pyx_t_3 = __pyx_v_tmp_x;
__pyx_t_2 = __pyx_v_tmp_y;
__pyx_t_1 = __pyx_v_tmp_z;
__pyx_v_site_bead_type = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_3 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_2 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_1 * __pyx_v_type_grid.strides[2]) )));
0420:
+0421: if hardwall == 1:
__pyx_t_4 = (__pyx_v_hardwall == 1);
if (__pyx_t_4) {
/* … */
}
+0422: if abs(tmp_x - old_x) > 3 or abs(tmp_y - old_y) > 3 or abs(tmp_z - old_z) > 3:
__pyx_t_8 = abs((__pyx_v_tmp_x - __pyx_v_old_x)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 422, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 > 3); if (!__pyx_t_9) { } else { __pyx_t_4 = __pyx_t_9; goto __pyx_L70_bool_binop_done; } __pyx_t_8 = abs((__pyx_v_tmp_y - __pyx_v_old_y)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 422, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 > 3); if (!__pyx_t_9) { } else { __pyx_t_4 = __pyx_t_9; goto __pyx_L70_bool_binop_done; } __pyx_t_8 = abs((__pyx_v_tmp_z - __pyx_v_old_z)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 422, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 > 3); __pyx_t_4 = __pyx_t_9; __pyx_L70_bool_binop_done:; if (__pyx_t_4) { /* … */ }
+0423: site_bead_type = 0
__pyx_v_site_bead_type = 0;
0424:
+0425: energy_old = energy_old + interaction_table[bead_type, site_bead_type]
__pyx_t_10 = __pyx_v_bead_type;
__pyx_t_11 = __pyx_v_site_bead_type;
__pyx_v_energy_old = (__pyx_v_energy_old + (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_interaction_table.data + __pyx_t_10 * __pyx_v_interaction_table.strides[0]) ) + __pyx_t_11 * __pyx_v_interaction_table.strides[1]) ))));
+0426: if site_bead_type > 0:
__pyx_t_4 = (__pyx_v_site_bead_type > 0);
if (__pyx_t_4) {
/* … */
}
}
}
}
+0427: energy_old_empty = energy_old_empty + interaction_table[0, site_bead_type]
__pyx_t_1 = 0;
__pyx_t_11 = __pyx_v_site_bead_type;
__pyx_v_energy_old_empty = (__pyx_v_energy_old_empty + (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_interaction_table.data + __pyx_t_1 * __pyx_v_interaction_table.strides[0]) ) + __pyx_t_11 * __pyx_v_interaction_table.strides[1]) ))));
0428:
+0429: type_grid[new_x, new_y, new_z] = type_grid[old_x, old_y, old_z]
__pyx_t_1 = __pyx_v_old_x;
__pyx_t_2 = __pyx_v_old_y;
__pyx_t_3 = __pyx_v_old_z;
__pyx_t_14 = __pyx_v_new_x;
__pyx_t_13 = __pyx_v_new_y;
__pyx_t_12 = __pyx_v_new_z;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_14 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_13 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_12 * __pyx_v_type_grid.strides[2]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_1 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_2 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_3 * __pyx_v_type_grid.strides[2]) )));
+0430: type_grid[old_x, old_y, old_z] = 0
__pyx_t_3 = __pyx_v_old_x;
__pyx_t_2 = __pyx_v_old_y;
__pyx_t_1 = __pyx_v_old_z;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_3 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_2 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_1 * __pyx_v_type_grid.strides[2]) )) = 0;
0431:
+0432: for x in range(-1, 2):
for (__pyx_t_5 = -1; __pyx_t_5 < 2; __pyx_t_5+=1) {
__pyx_v_x = __pyx_t_5;
+0433: for y in range(-1, 2):
for (__pyx_t_6 = -1; __pyx_t_6 < 2; __pyx_t_6+=1) {
__pyx_v_y = __pyx_t_6;
+0434: for z in range(-1, 2):
for (__pyx_t_7 = -1; __pyx_t_7 < 2; __pyx_t_7+=1) {
__pyx_v_z = __pyx_t_7;
+0435: tmp_x = pbc_correction(new_x + x, XDIM)
__pyx_v_tmp_x = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_new_x + __pyx_v_x), __pyx_v_XDIM);
+0436: tmp_y = pbc_correction(new_y + y, YDIM)
__pyx_v_tmp_y = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_new_y + __pyx_v_y), __pyx_v_YDIM);
+0437: tmp_z = pbc_correction(new_z + z, ZDIM)
__pyx_v_tmp_z = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_new_z + __pyx_v_z), __pyx_v_ZDIM);
+0438: site_bead_type = type_grid[tmp_x, tmp_y, tmp_z]
__pyx_t_1 = __pyx_v_tmp_x;
__pyx_t_2 = __pyx_v_tmp_y;
__pyx_t_3 = __pyx_v_tmp_z;
__pyx_v_site_bead_type = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_1 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_2 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_3 * __pyx_v_type_grid.strides[2]) )));
+0439: if hardwall == 1:
__pyx_t_4 = (__pyx_v_hardwall == 1);
if (__pyx_t_4) {
/* … */
}
+0440: if abs(tmp_x - new_x) > 3 or abs(tmp_y - new_y) > 3 or abs(tmp_z - new_z) > 3:
__pyx_t_8 = abs((__pyx_v_tmp_x - __pyx_v_new_x)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 440, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 > 3); if (!__pyx_t_9) { } else { __pyx_t_4 = __pyx_t_9; goto __pyx_L82_bool_binop_done; } __pyx_t_8 = abs((__pyx_v_tmp_y - __pyx_v_new_y)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 440, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 > 3); if (!__pyx_t_9) { } else { __pyx_t_4 = __pyx_t_9; goto __pyx_L82_bool_binop_done; } __pyx_t_8 = abs((__pyx_v_tmp_z - __pyx_v_new_z)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 440, __pyx_L1_error) __pyx_t_9 = (__pyx_t_8 > 3); __pyx_t_4 = __pyx_t_9; __pyx_L82_bool_binop_done:; if (__pyx_t_4) { /* … */ }
+0441: site_bead_type = 0
__pyx_v_site_bead_type = 0;
0442:
+0443: energy_new = energy_new + interaction_table[bead_type, site_bead_type]
__pyx_t_11 = __pyx_v_bead_type;
__pyx_t_10 = __pyx_v_site_bead_type;
__pyx_v_energy_new = (__pyx_v_energy_new + (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_interaction_table.data + __pyx_t_11 * __pyx_v_interaction_table.strides[0]) ) + __pyx_t_10 * __pyx_v_interaction_table.strides[1]) ))));
+0444: if site_bead_type > 0:
__pyx_t_4 = (__pyx_v_site_bead_type > 0);
if (__pyx_t_4) {
/* … */
}
}
}
}
}
__pyx_L3:;
+0445: energy_new_empty = energy_new_empty + interaction_table[0, site_bead_type]
__pyx_t_3 = 0;
__pyx_t_10 = __pyx_v_site_bead_type;
__pyx_v_energy_new_empty = (__pyx_v_energy_new_empty + (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_interaction_table.data + __pyx_t_3 * __pyx_v_interaction_table.strides[0]) ) + __pyx_t_10 * __pyx_v_interaction_table.strides[1]) ))));
0446:
0447: # remove the self-interaction double counting at x==y==z==0
+0448: energy_old_empty = energy_old_empty - interaction_table[0, bead_type]
__pyx_t_3 = 0; __pyx_t_10 = __pyx_v_bead_type; __pyx_v_energy_old_empty = (__pyx_v_energy_old_empty - (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_interaction_table.data + __pyx_t_3 * __pyx_v_interaction_table.strides[0]) ) + __pyx_t_10 * __pyx_v_interaction_table.strides[1]) ))));
+0449: energy_old = energy_old - interaction_table[bead_type, bead_type]
__pyx_t_10 = __pyx_v_bead_type; __pyx_t_11 = __pyx_v_bead_type; __pyx_v_energy_old = (__pyx_v_energy_old - (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_interaction_table.data + __pyx_t_10 * __pyx_v_interaction_table.strides[0]) ) + __pyx_t_11 * __pyx_v_interaction_table.strides[1]) ))));
+0450: energy_new_empty = energy_new_empty - interaction_table[0, bead_type]
__pyx_t_3 = 0; __pyx_t_11 = __pyx_v_bead_type; __pyx_v_energy_new_empty = (__pyx_v_energy_new_empty - (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_interaction_table.data + __pyx_t_3 * __pyx_v_interaction_table.strides[0]) ) + __pyx_t_11 * __pyx_v_interaction_table.strides[1]) ))));
+0451: energy_new = energy_new - interaction_table[bead_type, bead_type]
__pyx_t_11 = __pyx_v_bead_type; __pyx_t_10 = __pyx_v_bead_type; __pyx_v_energy_new = (__pyx_v_energy_new - (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_interaction_table.data + __pyx_t_11 * __pyx_v_interaction_table.strides[0]) ) + __pyx_t_10 * __pyx_v_interaction_table.strides[1]) ))));
0452:
0453: # restore the type grid
+0454: type_grid[old_x, old_y, old_z] = type_grid[new_x, new_y, new_z]
__pyx_t_3 = __pyx_v_new_x; __pyx_t_2 = __pyx_v_new_y; __pyx_t_1 = __pyx_v_new_z; __pyx_t_12 = __pyx_v_old_x; __pyx_t_13 = __pyx_v_old_y; __pyx_t_14 = __pyx_v_old_z; *((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_12 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_13 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_14 * __pyx_v_type_grid.strides[2]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_3 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_2 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_1 * __pyx_v_type_grid.strides[2]) )));
+0455: type_grid[new_x, new_y, new_z] = 0
__pyx_t_1 = __pyx_v_new_x; __pyx_t_2 = __pyx_v_new_y; __pyx_t_3 = __pyx_v_new_z; *((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_1 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_2 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_3 * __pyx_v_type_grid.strides[2]) )) = 0;
0456:
+0457: return (energy_new + energy_old_empty) - (energy_old + energy_new_empty)
__pyx_r = ((__pyx_v_energy_new + __pyx_v_energy_old_empty) - (__pyx_v_energy_old + __pyx_v_energy_new_empty)); goto __pyx_L0;
0458:
0459:
0460: # -----------------------------------------------------------------
0461: # Public entry point - signature identical to pimms.mega_crank.mega_crank.
+0462: @cython.wraparound(False)
/* Python wrapper */ static PyObject *__pyx_pw_5pimms_15mega_crank_fast_1mega_crank(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_5pimms_15mega_crank_fast_mega_crank, "\n Optimized, allocation-free crankshaft Monte Carlo kernel.\n\n Behaviourally identical (same RNG stream) to pimms.mega_crank.mega_crank;\n see module docstring. Returns (energy, accepted_moves).\n "); static PyMethodDef __pyx_mdef_5pimms_15mega_crank_fast_1mega_crank = {"mega_crank", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5pimms_15mega_crank_fast_1mega_crank, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_5pimms_15mega_crank_fast_mega_crank}; static PyObject *__pyx_pw_5pimms_15mega_crank_fast_1mega_crank(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { __Pyx_memviewslice __pyx_v_grid = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_type_grid = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_idx_to_bead = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_LR_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_SLR_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_angle_lookup = { 0, 0, { 0 }, { 0 }, { 0 } }; long __pyx_v_energy; float __pyx_v_invtemp; int __pyx_v_nsteps; __Pyx_memviewslice __pyx_v_bead_selector = { 0, 0, { 0 }, { 0 }, { 0 } }; int __pyx_v_passed_seed; int __pyx_v_hardwall; #if !CYTHON_METH_FASTCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("mega_crank (wrapper)", 0); #if !CYTHON_METH_FASTCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_grid,&__pyx_mstate_global->__pyx_n_u_type_grid,&__pyx_mstate_global->__pyx_n_u_idx_to_bead,&__pyx_mstate_global->__pyx_n_u_interaction_table,&__pyx_mstate_global->__pyx_n_u_LR_interaction_table,&__pyx_mstate_global->__pyx_n_u_SLR_interaction_table,&__pyx_mstate_global->__pyx_n_u_angle_lookup,&__pyx_mstate_global->__pyx_n_u_energy,&__pyx_mstate_global->__pyx_n_u_invtemp,&__pyx_mstate_global->__pyx_n_u_nsteps,&__pyx_mstate_global->__pyx_n_u_bead_selector,&__pyx_mstate_global->__pyx_n_u_passed_seed,&__pyx_mstate_global->__pyx_n_u_hardwall,0}; PyObject* values[13] = {0,0,0,0,0,0,0,0,0,0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 462, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 13: values[12] = __Pyx_ArgRef_FASTCALL(__pyx_args, 12); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[12])) __PYX_ERR(0, 462, __pyx_L3_error) CYTHON_FALLTHROUGH; case 12: values[11] = __Pyx_ArgRef_FASTCALL(__pyx_args, 11); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[11])) __PYX_ERR(0, 462, __pyx_L3_error) CYTHON_FALLTHROUGH; case 11: values[10] = __Pyx_ArgRef_FASTCALL(__pyx_args, 10); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[10])) __PYX_ERR(0, 462, __pyx_L3_error) CYTHON_FALLTHROUGH; case 10: values[9] = __Pyx_ArgRef_FASTCALL(__pyx_args, 9); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[9])) __PYX_ERR(0, 462, __pyx_L3_error) CYTHON_FALLTHROUGH; case 9: values[8] = __Pyx_ArgRef_FASTCALL(__pyx_args, 8); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[8])) __PYX_ERR(0, 462, __pyx_L3_error) CYTHON_FALLTHROUGH; case 8: values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 462, __pyx_L3_error) CYTHON_FALLTHROUGH; case 7: values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 462, __pyx_L3_error) CYTHON_FALLTHROUGH; case 6: values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 462, __pyx_L3_error) CYTHON_FALLTHROUGH; case 5: values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 462, __pyx_L3_error) CYTHON_FALLTHROUGH; case 4: values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 462, __pyx_L3_error) CYTHON_FALLTHROUGH; case 3: values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 462, __pyx_L3_error) CYTHON_FALLTHROUGH; case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 462, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 462, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "mega_crank", 0) < (0)) __PYX_ERR(0, 462, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 13; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("mega_crank", 1, 13, 13, i); __PYX_ERR(0, 462, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 13)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 462, __pyx_L3_error) values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 462, __pyx_L3_error) values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 462, __pyx_L3_error) values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 462, __pyx_L3_error) values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 462, __pyx_L3_error) values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 462, __pyx_L3_error) values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 462, __pyx_L3_error) values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 462, __pyx_L3_error) values[8] = __Pyx_ArgRef_FASTCALL(__pyx_args, 8); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[8])) __PYX_ERR(0, 462, __pyx_L3_error) values[9] = __Pyx_ArgRef_FASTCALL(__pyx_args, 9); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[9])) __PYX_ERR(0, 462, __pyx_L3_error) values[10] = __Pyx_ArgRef_FASTCALL(__pyx_args, 10); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[10])) __PYX_ERR(0, 462, __pyx_L3_error) values[11] = __Pyx_ArgRef_FASTCALL(__pyx_args, 11); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[11])) __PYX_ERR(0, 462, __pyx_L3_error) values[12] = __Pyx_ArgRef_FASTCALL(__pyx_args, 12); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[12])) __PYX_ERR(0, 462, __pyx_L3_error) } __pyx_v_grid = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_grid.memview)) __PYX_ERR(0, 464, __pyx_L3_error) __pyx_v_type_grid = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_type_grid.memview)) __PYX_ERR(0, 465, __pyx_L3_error) __pyx_v_idx_to_bead = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_idx_to_bead.memview)) __PYX_ERR(0, 466, __pyx_L3_error) __pyx_v_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interaction_table.memview)) __PYX_ERR(0, 467, __pyx_L3_error) __pyx_v_LR_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_LR_interaction_table.memview)) __PYX_ERR(0, 468, __pyx_L3_error) __pyx_v_SLR_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_SLR_interaction_table.memview)) __PYX_ERR(0, 469, __pyx_L3_error) __pyx_v_angle_lookup = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsdsdsdsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_angle_lookup.memview)) __PYX_ERR(0, 470, __pyx_L3_error) __pyx_v_energy = __Pyx_PyLong_As_long(values[7]); if (unlikely((__pyx_v_energy == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 471, __pyx_L3_error) __pyx_v_invtemp = __Pyx_PyFloat_AsFloat(values[8]); if (unlikely((__pyx_v_invtemp == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 472, __pyx_L3_error) __pyx_v_nsteps = __Pyx_PyLong_As_int(values[9]); if (unlikely((__pyx_v_nsteps == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 473, __pyx_L3_error) __pyx_v_bead_selector = __Pyx_PyObject_to_MemoryviewSlice_ds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_bead_selector.memview)) __PYX_ERR(0, 474, __pyx_L3_error) __pyx_v_passed_seed = __Pyx_PyLong_As_int(values[11]); if (unlikely((__pyx_v_passed_seed == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 475, __pyx_L3_error) __pyx_v_hardwall = __Pyx_PyLong_As_int(values[12]); if (unlikely((__pyx_v_hardwall == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 476, __pyx_L3_error) } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("mega_crank", 1, 13, 13, __pyx_nargs); __PYX_ERR(0, 462, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __PYX_XCLEAR_MEMVIEW(&__pyx_v_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_type_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_idx_to_bead, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_LR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_SLR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_angle_lookup, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_bead_selector, 1); __Pyx_AddTraceback("pimms.mega_crank_fast.mega_crank", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5pimms_15mega_crank_fast_mega_crank(__pyx_self, __pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_angle_lookup, __pyx_v_energy, __pyx_v_invtemp, __pyx_v_nsteps, __pyx_v_bead_selector, __pyx_v_passed_seed, __pyx_v_hardwall); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __PYX_XCLEAR_MEMVIEW(&__pyx_v_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_type_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_idx_to_bead, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_LR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_SLR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_angle_lookup, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_bead_selector, 1); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5pimms_15mega_crank_fast_mega_crank(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_grid, __Pyx_memviewslice __pyx_v_type_grid, __Pyx_memviewslice __pyx_v_idx_to_bead, __Pyx_memviewslice __pyx_v_interaction_table, __Pyx_memviewslice __pyx_v_LR_interaction_table, __Pyx_memviewslice __pyx_v_SLR_interaction_table, __Pyx_memviewslice __pyx_v_angle_lookup, long __pyx_v_energy, float __pyx_v_invtemp, int __pyx_v_nsteps, __Pyx_memviewslice __pyx_v_bead_selector, int __pyx_v_passed_seed, int __pyx_v_hardwall) { unsigned int __pyx_v_i; int __pyx_v_bead_index; int __pyx_v_accepted_moves; int __pyx_v_XDIM; int __pyx_v_YDIM; int __pyx_v_ZDIM; long __pyx_v_delta_energy; long __pyx_v_delta_angle_energy; int __pyx_v_beadflag; int __pyx_v_old_position[3]; int __pyx_v_new_position[3]; int __pyx_v_anchor_bead[3]; int __pyx_v_Nx; int __pyx_v_Ny; int __pyx_v_Nz; int __pyx_v_Cx; int __pyx_v_Cy; int __pyx_v_Cz; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_13); __Pyx_XDECREF(__pyx_t_14); __Pyx_XDECREF(__pyx_t_15); __Pyx_AddTraceback("pimms.mega_crank_fast.mega_crank", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_5pimms_15mega_crank_fast_1mega_crank, 0, __pyx_mstate_global->__pyx_n_u_mega_crank, NULL, __pyx_mstate_global->__pyx_n_u_pimms_mega_crank_fast, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[6])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 462, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_mega_crank, __pyx_t_4) < (0)) __PYX_ERR(0, 462, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
0463: @cython.boundscheck(False)
0464: def mega_crank(NUMPY_INT_TYPE[:, :, :] grid,
0465: NUMPY_INT_TYPE[:, :, :] type_grid,
0466: NUMPY_INT_TYPE_long[:, :] idx_to_bead,
0467: NUMPY_INT_TYPE[:, :] interaction_table,
0468: NUMPY_INT_TYPE[:, :] LR_interaction_table,
0469: NUMPY_INT_TYPE[:, :] SLR_interaction_table,
0470: NUMPY_INT_TYPE[:, :, :, :, :, :, :] angle_lookup,
0471: long energy,
0472: float invtemp,
0473: int nsteps,
0474: NUMPY_INT_TYPE_long[:] bead_selector,
0475: int passed_seed,
0476: int hardwall):
0477: """
0478: Optimized, allocation-free crankshaft Monte Carlo kernel.
0479:
0480: Behaviourally identical (same RNG stream) to pimms.mega_crank.mega_crank;
0481: see module docstring. Returns (energy, accepted_moves).
0482: """
+0483: mc_seed(passed_seed)
__pyx_f_5pimms_15mega_crank_fast_mc_seed(__pyx_v_passed_seed);
0484:
0485: cdef unsigned int i
0486: cdef int bead_index
+0487: cdef int accepted_moves = 0
__pyx_v_accepted_moves = 0;
+0488: cdef int XDIM = grid.shape[0]
__pyx_v_XDIM = (__pyx_v_grid.shape[0]);
+0489: cdef int YDIM = grid.shape[1]
__pyx_v_YDIM = (__pyx_v_grid.shape[1]);
+0490: cdef int ZDIM = grid.shape[2]
__pyx_v_ZDIM = (__pyx_v_grid.shape[2]);
0491: cdef long delta_energy, delta_angle_energy
0492: cdef int beadflag
0493: cdef int ok
0494:
0495: # reusable C buffers (no per-substep heap allocation)
0496: cdef int old_position[3]
0497: cdef int new_position[3]
0498: cdef int anchor_bead[3]
0499: cdef int Nx, Ny, Nz, Cx, Cy, Cz
0500:
+0501: for i in range(nsteps):
__pyx_t_1 = __pyx_v_nsteps;
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_i = __pyx_t_3;
+0502: bead_index = bead_selector[i]
__pyx_t_4 = __pyx_v_i;
__pyx_v_bead_index = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=0 */ (__pyx_v_bead_selector.data + __pyx_t_4 * __pyx_v_bead_selector.strides[0]) )));
0503:
+0504: old_position[0] = idx_to_bead[bead_index, 5]
__pyx_t_5 = __pyx_v_bead_index;
__pyx_t_6 = 5;
(__pyx_v_old_position[0]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_5 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+0505: old_position[1] = idx_to_bead[bead_index, 6]
__pyx_t_6 = __pyx_v_bead_index;
__pyx_t_5 = 6;
(__pyx_v_old_position[1]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_5 * __pyx_v_idx_to_bead.strides[1]) )));
+0506: old_position[2] = idx_to_bead[bead_index, 7]
__pyx_t_5 = __pyx_v_bead_index;
__pyx_t_6 = 7;
(__pyx_v_old_position[2]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_5 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
0507:
+0508: beadflag = idx_to_bead[bead_index, 0]
__pyx_t_6 = __pyx_v_bead_index;
__pyx_t_5 = 0;
__pyx_v_beadflag = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_5 * __pyx_v_idx_to_bead.strides[1]) )));
0509:
0510: # ---- single bead (flag 0) ----
+0511: if beadflag == 0:
switch (__pyx_v_beadflag) {
case 0:
/* … */
break;
case 1:
+0512: single_bead_crank_c(old_position[0], old_position[1], old_position[2],
(void)(__pyx_f_5pimms_15mega_crank_fast_single_bead_crank_c((__pyx_v_old_position[0]), (__pyx_v_old_position[1]), (__pyx_v_old_position[2]), __pyx_v_grid, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_new_position));
0513: grid, XDIM, YDIM, ZDIM, new_position)
0514:
0515: # ---- N-terminal bead (flag 1) ----
+0516: elif beadflag == 1:
break;
case 3:
+0517: anchor_bead[0] = idx_to_bead[bead_index + 1, 5]
__pyx_t_5 = (__pyx_v_bead_index + 1);
__pyx_t_6 = 5;
(__pyx_v_anchor_bead[0]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_5 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+0518: anchor_bead[1] = idx_to_bead[bead_index + 1, 6]
__pyx_t_6 = (__pyx_v_bead_index + 1);
__pyx_t_5 = 6;
(__pyx_v_anchor_bead[1]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_5 * __pyx_v_idx_to_bead.strides[1]) )));
+0519: anchor_bead[2] = idx_to_bead[bead_index + 1, 7]
__pyx_t_5 = (__pyx_v_bead_index + 1);
__pyx_t_6 = 7;
(__pyx_v_anchor_bead[2]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_5 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
0520:
+0521: single_bead_crank_c(anchor_bead[0], anchor_bead[1], anchor_bead[2],
(void)(__pyx_f_5pimms_15mega_crank_fast_single_bead_crank_c((__pyx_v_anchor_bead[0]), (__pyx_v_anchor_bead[1]), (__pyx_v_anchor_bead[2]), __pyx_v_grid, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_new_position));
0522: grid, XDIM, YDIM, ZDIM, new_position)
0523:
+0524: if hardwall == 1:
__pyx_t_7 = (__pyx_v_hardwall == 1);
if (__pyx_t_7) {
/* … */
}
+0525: if straddle_pair(new_position[0], new_position[1], new_position[2],
if (__pyx_t_7) {
/* … */
}
+0526: anchor_bead[0], anchor_bead[1], anchor_bead[2]) == 1:
__pyx_t_7 = (__pyx_f_5pimms_15mega_crank_fast_straddle_pair((__pyx_v_new_position[0]), (__pyx_v_new_position[1]), (__pyx_v_new_position[2]), (__pyx_v_anchor_bead[0]), (__pyx_v_anchor_bead[1]), (__pyx_v_anchor_bead[2])) == 1);
+0527: continue
goto __pyx_L3_continue;
0528:
0529: # ---- C-terminal bead (flag 3) ----
+0530: elif beadflag == 3:
break;
default:
+0531: anchor_bead[0] = idx_to_bead[bead_index - 1, 5]
__pyx_t_6 = (__pyx_v_bead_index - 1);
__pyx_t_5 = 5;
(__pyx_v_anchor_bead[0]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_5 * __pyx_v_idx_to_bead.strides[1]) )));
+0532: anchor_bead[1] = idx_to_bead[bead_index - 1, 6]
__pyx_t_5 = (__pyx_v_bead_index - 1);
__pyx_t_6 = 6;
(__pyx_v_anchor_bead[1]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_5 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+0533: anchor_bead[2] = idx_to_bead[bead_index - 1, 7]
__pyx_t_6 = (__pyx_v_bead_index - 1);
__pyx_t_5 = 7;
(__pyx_v_anchor_bead[2]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_5 * __pyx_v_idx_to_bead.strides[1]) )));
0534:
+0535: single_bead_crank_c(anchor_bead[0], anchor_bead[1], anchor_bead[2],
(void)(__pyx_f_5pimms_15mega_crank_fast_single_bead_crank_c((__pyx_v_anchor_bead[0]), (__pyx_v_anchor_bead[1]), (__pyx_v_anchor_bead[2]), __pyx_v_grid, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_new_position));
0536: grid, XDIM, YDIM, ZDIM, new_position)
0537:
+0538: if hardwall == 1:
__pyx_t_7 = (__pyx_v_hardwall == 1);
if (__pyx_t_7) {
/* … */
}
+0539: if straddle_pair(anchor_bead[0], anchor_bead[1], anchor_bead[2],
if (__pyx_t_7) {
/* … */
}
+0540: new_position[0], new_position[1], new_position[2]) == 1:
__pyx_t_7 = (__pyx_f_5pimms_15mega_crank_fast_straddle_pair((__pyx_v_anchor_bead[0]), (__pyx_v_anchor_bead[1]), (__pyx_v_anchor_bead[2]), (__pyx_v_new_position[0]), (__pyx_v_new_position[1]), (__pyx_v_new_position[2])) == 1);
+0541: continue
goto __pyx_L3_continue;
0542:
0543: # ---- internal bead (flags 2,4,5,6) ----
0544: else:
+0545: Nx = idx_to_bead[bead_index - 1, 5]
__pyx_t_5 = (__pyx_v_bead_index - 1);
__pyx_t_6 = 5;
__pyx_v_Nx = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_5 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+0546: Ny = idx_to_bead[bead_index - 1, 6]
__pyx_t_6 = (__pyx_v_bead_index - 1);
__pyx_t_5 = 6;
__pyx_v_Ny = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_5 * __pyx_v_idx_to_bead.strides[1]) )));
+0547: Nz = idx_to_bead[bead_index - 1, 7]
__pyx_t_5 = (__pyx_v_bead_index - 1);
__pyx_t_6 = 7;
__pyx_v_Nz = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_5 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+0548: Cx = idx_to_bead[bead_index + 1, 5]
__pyx_t_6 = (__pyx_v_bead_index + 1);
__pyx_t_5 = 5;
__pyx_v_Cx = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_5 * __pyx_v_idx_to_bead.strides[1]) )));
+0549: Cy = idx_to_bead[bead_index + 1, 6]
__pyx_t_5 = (__pyx_v_bead_index + 1);
__pyx_t_6 = 6;
__pyx_v_Cy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_5 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+0550: Cz = idx_to_bead[bead_index + 1, 7]
__pyx_t_6 = (__pyx_v_bead_index + 1);
__pyx_t_5 = 7;
__pyx_v_Cz = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_5 * __pyx_v_idx_to_bead.strides[1]) )));
0551:
+0552: crank_it_c(Nx, Ny, Nz, Cx, Cy, Cz, grid, XDIM, YDIM, ZDIM, new_position)
(void)(__pyx_f_5pimms_15mega_crank_fast_crank_it_c(__pyx_v_Nx, __pyx_v_Ny, __pyx_v_Nz, __pyx_v_Cx, __pyx_v_Cy, __pyx_v_Cz, __pyx_v_grid, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_new_position));
0553:
+0554: if hardwall == 1:
__pyx_t_7 = (__pyx_v_hardwall == 1);
if (__pyx_t_7) {
/* … */
}
break;
}
0555: # three-position holder: [N, new, C]
+0556: if (straddle_pair(Nx, Ny, Nz,
if (__pyx_t_7) {
/* … */
}
+0557: new_position[0], new_position[1], new_position[2]) == 1
__pyx_t_8 = (__pyx_f_5pimms_15mega_crank_fast_straddle_pair(__pyx_v_Nx, __pyx_v_Ny, __pyx_v_Nz, (__pyx_v_new_position[0]), (__pyx_v_new_position[1]), (__pyx_v_new_position[2])) == 1);
if (!__pyx_t_8) {
} else {
__pyx_t_7 = __pyx_t_8;
goto __pyx_L11_bool_binop_done;
}
0558: or straddle_pair(new_position[0], new_position[1], new_position[2],
+0559: Cx, Cy, Cz) == 1):
__pyx_t_8 = (__pyx_f_5pimms_15mega_crank_fast_straddle_pair((__pyx_v_new_position[0]), (__pyx_v_new_position[1]), (__pyx_v_new_position[2]), __pyx_v_Cx, __pyx_v_Cy, __pyx_v_Cz) == 1);
__pyx_t_7 = __pyx_t_8;
__pyx_L11_bool_binop_done:;
+0560: continue
goto __pyx_L3_continue;
0561:
0562: # ---- accept/reject if the hardsphere proposal succeeded ----
+0563: if not new_position[0] < 0:
__pyx_t_7 = (!((__pyx_v_new_position[0]) < 0));
if (__pyx_t_7) {
/* … */
}
__pyx_L3_continue:;
}
+0564: delta_energy = get_energy_change_c(grid, type_grid,
__pyx_v_delta_energy = __pyx_f_5pimms_15mega_crank_fast_get_energy_change_c(__pyx_v_grid, __pyx_v_type_grid, (__pyx_v_old_position[0]), (__pyx_v_old_position[1]), (__pyx_v_old_position[2]), (__pyx_v_new_position[0]), (__pyx_v_new_position[1]), (__pyx_v_new_position[2]), (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_5 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_hardwall);
0565: old_position[0], old_position[1], old_position[2],
0566: new_position[0], new_position[1], new_position[2],
+0567: idx_to_bead[bead_index, 1],
__pyx_t_5 = __pyx_v_bead_index;
__pyx_t_6 = 1;
0568: interaction_table, LR_interaction_table,
0569: SLR_interaction_table,
0570: XDIM, YDIM, ZDIM, hardwall)
+0571: delta_angle_energy = get_angle_energy_change_c(bead_index, idx_to_bead,
__pyx_v_delta_angle_energy = __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_c(__pyx_v_bead_index, __pyx_v_idx_to_bead, __pyx_v_new_position, __pyx_v_angle_lookup);
0572: new_position, angle_lookup)
0573:
+0574: if accept_or_reject(invtemp, energy, energy + delta_energy + delta_angle_energy) == 1:
__pyx_t_7 = (__pyx_f_5pimms_15mega_crank_fast_accept_or_reject(__pyx_v_invtemp, __pyx_v_energy, ((__pyx_v_energy + __pyx_v_delta_energy) + __pyx_v_delta_angle_energy)) == 1);
if (__pyx_t_7) {
/* … */
}
+0575: grid[old_position[0], old_position[1], old_position[2]] = 0
__pyx_t_6 = (__pyx_v_old_position[0]);
__pyx_t_5 = (__pyx_v_old_position[1]);
__pyx_t_9 = (__pyx_v_old_position[2]);
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_6 * __pyx_v_grid.strides[0]) ) + __pyx_t_5 * __pyx_v_grid.strides[1]) ) + __pyx_t_9 * __pyx_v_grid.strides[2]) )) = 0;
+0576: grid[new_position[0], new_position[1], new_position[2]] = idx_to_bead[bead_index, 4]
__pyx_t_9 = __pyx_v_bead_index;
__pyx_t_5 = 4;
__pyx_t_6 = (__pyx_v_new_position[0]);
__pyx_t_10 = (__pyx_v_new_position[1]);
__pyx_t_11 = (__pyx_v_new_position[2]);
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_6 * __pyx_v_grid.strides[0]) ) + __pyx_t_10 * __pyx_v_grid.strides[1]) ) + __pyx_t_11 * __pyx_v_grid.strides[2]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_9 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_5 * __pyx_v_idx_to_bead.strides[1]) )));
0577:
+0578: type_grid[new_position[0], new_position[1], new_position[2]] = type_grid[old_position[0], old_position[1], old_position[2]]
__pyx_t_5 = (__pyx_v_old_position[0]);
__pyx_t_9 = (__pyx_v_old_position[1]);
__pyx_t_11 = (__pyx_v_old_position[2]);
__pyx_t_10 = (__pyx_v_new_position[0]);
__pyx_t_6 = (__pyx_v_new_position[1]);
__pyx_t_12 = (__pyx_v_new_position[2]);
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_10 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_6 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_12 * __pyx_v_type_grid.strides[2]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_5 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_9 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_11 * __pyx_v_type_grid.strides[2]) )));
+0579: type_grid[old_position[0], old_position[1], old_position[2]] = 0
__pyx_t_11 = (__pyx_v_old_position[0]);
__pyx_t_9 = (__pyx_v_old_position[1]);
__pyx_t_5 = (__pyx_v_old_position[2]);
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_11 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_9 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_5 * __pyx_v_type_grid.strides[2]) )) = 0;
0580:
+0581: idx_to_bead[bead_index, 5] = new_position[0]
__pyx_t_5 = __pyx_v_bead_index;
__pyx_t_9 = 5;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_5 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_9 * __pyx_v_idx_to_bead.strides[1]) )) = (__pyx_v_new_position[0]);
+0582: idx_to_bead[bead_index, 6] = new_position[1]
__pyx_t_9 = __pyx_v_bead_index;
__pyx_t_5 = 6;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_9 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_5 * __pyx_v_idx_to_bead.strides[1]) )) = (__pyx_v_new_position[1]);
+0583: idx_to_bead[bead_index, 7] = new_position[2]
__pyx_t_5 = __pyx_v_bead_index;
__pyx_t_9 = 7;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_5 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_9 * __pyx_v_idx_to_bead.strides[1]) )) = (__pyx_v_new_position[2]);
0584:
+0585: energy = energy + delta_energy + delta_angle_energy
__pyx_v_energy = ((__pyx_v_energy + __pyx_v_delta_energy) + __pyx_v_delta_angle_energy);
+0586: accepted_moves = accepted_moves + 1
__pyx_v_accepted_moves = (__pyx_v_accepted_moves + 1);
0587:
+0588: return (energy, accepted_moves)
__Pyx_XDECREF(__pyx_r); __pyx_t_13 = __Pyx_PyLong_From_long(__pyx_v_energy); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 588, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14 = __Pyx_PyLong_From_int(__pyx_v_accepted_moves); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 588, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 588, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_GIVEREF(__pyx_t_13); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_13) != (0)) __PYX_ERR(0, 588, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_14); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_14) != (0)) __PYX_ERR(0, 588, __pyx_L1_error); __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_r = __pyx_t_15; __pyx_t_15 = 0; goto __pyx_L0;
0589:
0590:
0591: # =====================================================================
0592: #
0593: # 2D crankshaft kernel (allocation-free, bit-exact drop-in for
0594: # pimms.mega_crank_2D.mega_crank_2D)
0595: #
0596: # The reference 2D kernel calls mega_crank.randint_ext /
0597: # accept_or_reject_ext and the Python-level (def) get_energy_change_2D on
0598: # every substep - each crossing the Python/C boundary - and allocates the
0599: # angle arrays per call. This version uses the same nogil C helpers as the 3D
0600: # fast kernel (randint / accept_or_reject - already double precision, matching
0601: # the reference) plus 2D C-array energy/angle/proposal functions, so it is bit
0602: # identical but avoids all that overhead.
0603: # =====================================================================
0604:
0605: # ---- 2D single-bead / terminal proposal ----
+0606: @cython.wraparound(False)
static CYTHON_INLINE int __pyx_f_5pimms_15mega_crank_fast_single_bead_crank_2D_c(int __pyx_v_ox, int __pyx_v_oy, __Pyx_memviewslice __pyx_v_grid, int __pyx_v_XDIM, int __pyx_v_YDIM, int *__pyx_v_out) {
int __pyx_v_x_off;
int __pyx_v_y_off;
int __pyx_v_local_x;
int __pyx_v_local_y;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
0607: @cython.boundscheck(False)
0608: cdef inline int single_bead_crank_2D_c(int ox, int oy,
0609: NUMPY_INT_TYPE[:, :] grid,
0610: int XDIM, int YDIM,
0611: int* out) noexcept nogil:
+0612: cdef int x_off = randint(0, 2) - 1
__pyx_v_x_off = (__pyx_f_5pimms_15mega_crank_fast_randint(0, 2) - 1);
+0613: cdef int y_off = randint(0, 2) - 1
__pyx_v_y_off = (__pyx_f_5pimms_15mega_crank_fast_randint(0, 2) - 1);
+0614: cdef int local_x = pbc_correction(ox + x_off, XDIM)
__pyx_v_local_x = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_ox + __pyx_v_x_off), __pyx_v_XDIM);
+0615: cdef int local_y = pbc_correction(oy + y_off, YDIM)
__pyx_v_local_y = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_oy + __pyx_v_y_off), __pyx_v_YDIM);
+0616: if grid[local_x, local_y] > 0:
__pyx_t_1 = __pyx_v_local_x;
__pyx_t_2 = __pyx_v_local_y;
__pyx_t_3 = ((*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_1 * __pyx_v_grid.strides[0]) ) + __pyx_t_2 * __pyx_v_grid.strides[1]) ))) > 0);
if (__pyx_t_3) {
/* … */
}
+0617: out[0] = -1
(__pyx_v_out[0]) = -1;
+0618: out[1] = 0
(__pyx_v_out[1]) = 0;
+0619: return 0
__pyx_r = 0;
goto __pyx_L0;
+0620: out[0] = local_x
(__pyx_v_out[0]) = __pyx_v_local_x;
+0621: out[1] = local_y
(__pyx_v_out[1]) = __pyx_v_local_y;
+0622: return 1
__pyx_r = 1; goto __pyx_L0;
0623:
0624:
0625: # ---- 2D internal-bead crankshaft proposal ----
+0626: @cython.wraparound(False)
static CYTHON_INLINE int __pyx_f_5pimms_15mega_crank_fast_crank_it_2D_c(int __pyx_v_N_side_x, int __pyx_v_N_side_y, int __pyx_v_C_side_x, int __pyx_v_C_side_y, __Pyx_memviewslice __pyx_v_grid, int __pyx_v_XDIM, int __pyx_v_YDIM, int *__pyx_v_out) {
int __pyx_v_x_min;
int __pyx_v_x_max;
int __pyx_v_y_min;
int __pyx_v_y_max;
int __pyx_v_local_x;
int __pyx_v_local_y;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast.crank_it_2D_c", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
return __pyx_r;
}
0627: @cython.boundscheck(False)
0628: cdef inline int crank_it_2D_c(int N_side_x, int N_side_y,
0629: int C_side_x, int C_side_y,
0630: NUMPY_INT_TYPE[:, :] grid,
0631: int XDIM, int YDIM,
0632: int* out) noexcept nogil:
0633: cdef int x_min, x_max, y_min, y_max, local_x, local_y
0634:
+0635: if abs(N_side_x - C_side_x) > 2:
__pyx_t_1 = abs((__pyx_v_N_side_x - __pyx_v_C_side_x)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 635, __pyx_L1_error)
__pyx_t_2 = (__pyx_t_1 > 2);
if (__pyx_t_2) {
/* … */
}
+0636: if N_side_x > C_side_x:
__pyx_t_2 = (__pyx_v_N_side_x > __pyx_v_C_side_x);
if (__pyx_t_2) {
/* … */
goto __pyx_L4;
}
+0637: C_side_x = C_side_x + XDIM
__pyx_v_C_side_x = (__pyx_v_C_side_x + __pyx_v_XDIM);
0638: else:
+0639: N_side_x = N_side_x + XDIM
/*else*/ {
__pyx_v_N_side_x = (__pyx_v_N_side_x + __pyx_v_XDIM);
}
__pyx_L4:;
+0640: if abs(N_side_y - C_side_y) > 2:
__pyx_t_1 = abs((__pyx_v_N_side_y - __pyx_v_C_side_y)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 640, __pyx_L1_error)
__pyx_t_2 = (__pyx_t_1 > 2);
if (__pyx_t_2) {
/* … */
}
+0641: if N_side_y > C_side_y:
__pyx_t_2 = (__pyx_v_N_side_y > __pyx_v_C_side_y);
if (__pyx_t_2) {
/* … */
goto __pyx_L6;
}
+0642: C_side_y = C_side_y + YDIM
__pyx_v_C_side_y = (__pyx_v_C_side_y + __pyx_v_YDIM);
0643: else:
+0644: N_side_y = N_side_y + YDIM
/*else*/ {
__pyx_v_N_side_y = (__pyx_v_N_side_y + __pyx_v_YDIM);
}
__pyx_L6:;
0645:
+0646: x_min = int_max(N_side_x - 1, C_side_x - 1)
__pyx_v_x_min = __pyx_f_5pimms_15mega_crank_fast_int_max((__pyx_v_N_side_x - 1), (__pyx_v_C_side_x - 1));
+0647: x_max = int_min(N_side_x + 1, C_side_x + 1)
__pyx_v_x_max = __pyx_f_5pimms_15mega_crank_fast_int_min((__pyx_v_N_side_x + 1), (__pyx_v_C_side_x + 1));
+0648: y_min = int_max(N_side_y - 1, C_side_y - 1)
__pyx_v_y_min = __pyx_f_5pimms_15mega_crank_fast_int_max((__pyx_v_N_side_y - 1), (__pyx_v_C_side_y - 1));
+0649: y_max = int_min(N_side_y + 1, C_side_y + 1)
__pyx_v_y_max = __pyx_f_5pimms_15mega_crank_fast_int_min((__pyx_v_N_side_y + 1), (__pyx_v_C_side_y + 1));
0650:
+0651: local_x = pbc_correction((x_min + randint(1, (x_max - x_min + 1)) - 1), XDIM)
__pyx_v_local_x = __pyx_f_5pimms_15mega_crank_fast_pbc_correction(((__pyx_v_x_min + __pyx_f_5pimms_15mega_crank_fast_randint(1, ((__pyx_v_x_max - __pyx_v_x_min) + 1))) - 1), __pyx_v_XDIM);
+0652: local_y = pbc_correction((y_min + randint(1, (y_max - y_min + 1)) - 1), YDIM)
__pyx_v_local_y = __pyx_f_5pimms_15mega_crank_fast_pbc_correction(((__pyx_v_y_min + __pyx_f_5pimms_15mega_crank_fast_randint(1, ((__pyx_v_y_max - __pyx_v_y_min) + 1))) - 1), __pyx_v_YDIM);
0653:
+0654: if grid[local_x, local_y] > 0:
__pyx_t_3 = __pyx_v_local_x;
__pyx_t_4 = __pyx_v_local_y;
__pyx_t_2 = ((*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_3 * __pyx_v_grid.strides[0]) ) + __pyx_t_4 * __pyx_v_grid.strides[1]) ))) > 0);
if (__pyx_t_2) {
/* … */
}
+0655: out[0] = -1
(__pyx_v_out[0]) = -1;
+0656: out[1] = 0
(__pyx_v_out[1]) = 0;
+0657: return 0
__pyx_r = 0;
goto __pyx_L0;
+0658: out[0] = local_x
(__pyx_v_out[0]) = __pyx_v_local_x;
+0659: out[1] = local_y
(__pyx_v_out[1]) = __pyx_v_local_y;
+0660: return 1
__pyx_r = 1; goto __pyx_L0;
0661:
0662:
0663: # ---- 2D angle-energy delta (angle_lookup is 5D in 2D) ----
+0664: @cython.wraparound(False)
static long __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_2D_c(int __pyx_v_bead_index, __Pyx_memviewslice __pyx_v_idx_to_bead, int *__pyx_v_new_position, __Pyx_memviewslice __pyx_v_angle_lookup) {
int __pyx_v_a0;
int __pyx_v_a1;
int __pyx_v_b0;
int __pyx_v_b1;
long __pyx_v_angle_penalty_new;
long __pyx_v_angle_penalty_old;
int __pyx_v_angle_positions[5][2];
int __pyx_v_intcode_lookup[5];
int __pyx_v_offset;
int __pyx_v_offset_start;
int __pyx_v_offset_end;
int __pyx_v_i;
int __pyx_v_pos;
int __pyx_v_angle_idx;
int __pyx_v_local_move_idx;
int __pyx_v_bead_flag;
long __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
0665: @cython.boundscheck(False)
0666: cdef long get_angle_energy_change_2D_c(int bead_index,
0667: NUMPY_INT_TYPE_long[:, :] idx_to_bead,
0668: int* new_position,
0669: NUMPY_INT_TYPE[:, :, :, :, :] angle_lookup) noexcept nogil:
0670:
+0671: if idx_to_bead[bead_index, 3] == 1:
__pyx_t_1 = __pyx_v_bead_index;
__pyx_t_2 = 3;
__pyx_t_3 = ((*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_2 * __pyx_v_idx_to_bead.strides[1]) ))) == 1);
if (__pyx_t_3) {
/* … */
}
+0672: return 0
__pyx_r = 0;
goto __pyx_L0;
0673:
0674: cdef int a0, a1, b0, b1
+0675: cdef long angle_penalty_new = 0
__pyx_v_angle_penalty_new = 0;
+0676: cdef long angle_penalty_old = 0
__pyx_v_angle_penalty_old = 0;
0677:
0678: cdef int angle_positions[5][2]
0679: cdef int intcode_lookup[5]
0680: cdef int offset, offset_start, offset_end, i, pos
0681: cdef int angle_idx
+0682: cdef int local_move_idx = -1
__pyx_v_local_move_idx = -1;
+0683: cdef int bead_flag = idx_to_bead[bead_index, 0]
__pyx_t_2 = __pyx_v_bead_index; __pyx_t_1 = 0; __pyx_v_bead_flag = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_2 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
0684:
+0685: offset_start = 0
__pyx_v_offset_start = 0;
+0686: offset_end = 0
__pyx_v_offset_end = 0;
+0687: if bead_flag == 1:
switch (__pyx_v_bead_flag) {
case 1:
/* … */
break;
case 2:
+0688: offset_start = 0
__pyx_v_offset_start = 0;
+0689: offset_end = 3
__pyx_v_offset_end = 3;
+0690: elif bead_flag == 2:
break;
case 4:
+0691: offset_start = -2
__pyx_v_offset_start = -2;
+0692: offset_end = 3
__pyx_v_offset_end = 3;
+0693: elif bead_flag == 4:
break;
case 3:
+0694: offset_start = -1
__pyx_v_offset_start = -1;
+0695: offset_end = 2
__pyx_v_offset_end = 2;
+0696: elif bead_flag == 3:
break;
case 5:
+0697: offset_start = -2
__pyx_v_offset_start = -2;
+0698: offset_end = 1
__pyx_v_offset_end = 1;
+0699: elif bead_flag == 5:
break;
case 6:
+0700: offset_start = -1
__pyx_v_offset_start = -1;
+0701: offset_end = 3
__pyx_v_offset_end = 3;
+0702: elif bead_flag == 6:
break;
default: break;
}
+0703: offset_start = -2
__pyx_v_offset_start = -2;
+0704: offset_end = 2
__pyx_v_offset_end = 2;
0705:
+0706: angle_idx = 0
__pyx_v_angle_idx = 0;
+0707: for offset in range(offset_start, offset_end):
__pyx_t_4 = __pyx_v_offset_end;
__pyx_t_5 = __pyx_t_4;
for (__pyx_t_6 = __pyx_v_offset_start; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
__pyx_v_offset = __pyx_t_6;
+0708: pos = bead_index + offset
__pyx_v_pos = (__pyx_v_bead_index + __pyx_v_offset);
+0709: angle_positions[angle_idx][0] = idx_to_bead[pos, 5]
__pyx_t_1 = __pyx_v_pos;
__pyx_t_2 = 5;
((__pyx_v_angle_positions[__pyx_v_angle_idx])[0]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_2 * __pyx_v_idx_to_bead.strides[1]) )));
+0710: angle_positions[angle_idx][1] = idx_to_bead[pos, 6]
__pyx_t_2 = __pyx_v_pos;
__pyx_t_1 = 6;
((__pyx_v_angle_positions[__pyx_v_angle_idx])[1]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_2 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
+0711: intcode_lookup[angle_idx] = idx_to_bead[pos, 2]
__pyx_t_1 = __pyx_v_pos;
__pyx_t_2 = 2;
(__pyx_v_intcode_lookup[__pyx_v_angle_idx]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_2 * __pyx_v_idx_to_bead.strides[1]) )));
+0712: if pos == bead_index:
__pyx_t_3 = (__pyx_v_pos == __pyx_v_bead_index);
if (__pyx_t_3) {
/* … */
}
+0713: local_move_idx = angle_idx
__pyx_v_local_move_idx = __pyx_v_angle_idx;
+0714: angle_idx = angle_idx + 1
__pyx_v_angle_idx = (__pyx_v_angle_idx + 1); }
0715:
+0716: for i in range(0, angle_idx - 2):
__pyx_t_7 = (__pyx_v_angle_idx - 2);
__pyx_t_8 = __pyx_t_7;
for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_8; __pyx_t_4+=1) {
__pyx_v_i = __pyx_t_4;
+0717: a0 = fix_angle_pbc_issues(angle_positions[i + 1][0] - angle_positions[i][0])
__pyx_v_a0 = __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues((((__pyx_v_angle_positions[(__pyx_v_i + 1)])[0]) - ((__pyx_v_angle_positions[__pyx_v_i])[0])));
+0718: a1 = fix_angle_pbc_issues(angle_positions[i + 1][1] - angle_positions[i][1])
__pyx_v_a1 = __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues((((__pyx_v_angle_positions[(__pyx_v_i + 1)])[1]) - ((__pyx_v_angle_positions[__pyx_v_i])[1])));
+0719: b0 = fix_angle_pbc_issues(angle_positions[i + 1][0] - angle_positions[i + 2][0])
__pyx_v_b0 = __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues((((__pyx_v_angle_positions[(__pyx_v_i + 1)])[0]) - ((__pyx_v_angle_positions[(__pyx_v_i + 2)])[0])));
+0720: b1 = fix_angle_pbc_issues(angle_positions[i + 1][1] - angle_positions[i + 2][1])
__pyx_v_b1 = __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues((((__pyx_v_angle_positions[(__pyx_v_i + 1)])[1]) - ((__pyx_v_angle_positions[(__pyx_v_i + 2)])[1])));
+0721: angle_penalty_old = angle_lookup[intcode_lookup[i + 1], a0 + 1, a1 + 1, b0 + 1, b1 + 1] + angle_penalty_old
__pyx_t_2 = (__pyx_v_intcode_lookup[(__pyx_v_i + 1)]);
__pyx_t_1 = (__pyx_v_a0 + 1);
__pyx_t_9 = (__pyx_v_a1 + 1);
__pyx_t_10 = (__pyx_v_b0 + 1);
__pyx_t_11 = (__pyx_v_b1 + 1);
__pyx_v_angle_penalty_old = ((*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=4 */ (( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_angle_lookup.data + __pyx_t_2 * __pyx_v_angle_lookup.strides[0]) ) + __pyx_t_1 * __pyx_v_angle_lookup.strides[1]) ) + __pyx_t_9 * __pyx_v_angle_lookup.strides[2]) ) + __pyx_t_10 * __pyx_v_angle_lookup.strides[3]) ) + __pyx_t_11 * __pyx_v_angle_lookup.strides[4]) ))) + __pyx_v_angle_penalty_old);
}
0722:
+0723: if local_move_idx >= 0:
__pyx_t_3 = (__pyx_v_local_move_idx >= 0);
if (__pyx_t_3) {
/* … */
}
+0724: angle_positions[local_move_idx][0] = new_position[0]
((__pyx_v_angle_positions[__pyx_v_local_move_idx])[0]) = (__pyx_v_new_position[0]);
+0725: angle_positions[local_move_idx][1] = new_position[1]
((__pyx_v_angle_positions[__pyx_v_local_move_idx])[1]) = (__pyx_v_new_position[1]);
0726:
+0727: for i in range(0, angle_idx - 2):
__pyx_t_7 = (__pyx_v_angle_idx - 2);
__pyx_t_8 = __pyx_t_7;
for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_8; __pyx_t_4+=1) {
__pyx_v_i = __pyx_t_4;
+0728: a0 = fix_angle_pbc_issues(angle_positions[i + 1][0] - angle_positions[i][0])
__pyx_v_a0 = __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues((((__pyx_v_angle_positions[(__pyx_v_i + 1)])[0]) - ((__pyx_v_angle_positions[__pyx_v_i])[0])));
+0729: a1 = fix_angle_pbc_issues(angle_positions[i + 1][1] - angle_positions[i][1])
__pyx_v_a1 = __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues((((__pyx_v_angle_positions[(__pyx_v_i + 1)])[1]) - ((__pyx_v_angle_positions[__pyx_v_i])[1])));
+0730: b0 = fix_angle_pbc_issues(angle_positions[i + 1][0] - angle_positions[i + 2][0])
__pyx_v_b0 = __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues((((__pyx_v_angle_positions[(__pyx_v_i + 1)])[0]) - ((__pyx_v_angle_positions[(__pyx_v_i + 2)])[0])));
+0731: b1 = fix_angle_pbc_issues(angle_positions[i + 1][1] - angle_positions[i + 2][1])
__pyx_v_b1 = __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues((((__pyx_v_angle_positions[(__pyx_v_i + 1)])[1]) - ((__pyx_v_angle_positions[(__pyx_v_i + 2)])[1])));
+0732: angle_penalty_new = angle_lookup[intcode_lookup[i + 1], a0 + 1, a1 + 1, b0 + 1, b1 + 1] + angle_penalty_new
__pyx_t_11 = (__pyx_v_intcode_lookup[(__pyx_v_i + 1)]);
__pyx_t_10 = (__pyx_v_a0 + 1);
__pyx_t_9 = (__pyx_v_a1 + 1);
__pyx_t_1 = (__pyx_v_b0 + 1);
__pyx_t_2 = (__pyx_v_b1 + 1);
__pyx_v_angle_penalty_new = ((*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=4 */ (( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_angle_lookup.data + __pyx_t_11 * __pyx_v_angle_lookup.strides[0]) ) + __pyx_t_10 * __pyx_v_angle_lookup.strides[1]) ) + __pyx_t_9 * __pyx_v_angle_lookup.strides[2]) ) + __pyx_t_1 * __pyx_v_angle_lookup.strides[3]) ) + __pyx_t_2 * __pyx_v_angle_lookup.strides[4]) ))) + __pyx_v_angle_penalty_new);
}
0733:
+0734: return angle_penalty_new - angle_penalty_old
__pyx_r = (__pyx_v_angle_penalty_new - __pyx_v_angle_penalty_old); goto __pyx_L0;
0735:
0736:
0737: # ---- 2D short/long-range interaction-energy delta ----
+0738: @cython.wraparound(False)
static long __pyx_f_5pimms_15mega_crank_fast_get_energy_change_2D_c(CYTHON_UNUSED __Pyx_memviewslice __pyx_v_grid, __Pyx_memviewslice __pyx_v_type_grid, int __pyx_v_old_x, int __pyx_v_old_y, int __pyx_v_new_x, int __pyx_v_new_y, int __pyx_v_LR_vs_SR, __Pyx_memviewslice __pyx_v_interaction_table, __Pyx_memviewslice __pyx_v_LR_interaction_table, __Pyx_memviewslice __pyx_v_SLR_interaction_table, int __pyx_v_XDIM, int __pyx_v_YDIM, int __pyx_v_hardwall) {
long __pyx_v_energy_old;
long __pyx_v_energy_old_empty;
long __pyx_v_energy_new;
long __pyx_v_energy_new_empty;
int __pyx_v_tmp_x;
int __pyx_v_tmp_y;
int __pyx_v_x;
int __pyx_v_y;
unsigned int __pyx_v_site_bead_type;
unsigned int __pyx_v_bead_type;
long __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast.get_energy_change_2D_c", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
return __pyx_r;
}
0739: @cython.boundscheck(False)
0740: cdef long get_energy_change_2D_c(NUMPY_INT_TYPE[:, :] grid,
0741: NUMPY_INT_TYPE[:, :] type_grid,
0742: int old_x, int old_y,
0743: int new_x, int new_y,
0744: int LR_vs_SR,
0745: NUMPY_INT_TYPE[:, :] interaction_table,
0746: NUMPY_INT_TYPE[:, :] LR_interaction_table,
0747: NUMPY_INT_TYPE[:, :] SLR_interaction_table,
0748: int XDIM, int YDIM,
0749: int hardwall) noexcept nogil:
0750:
+0751: cdef long energy_old = 0
__pyx_v_energy_old = 0;
+0752: cdef long energy_old_empty = 0
__pyx_v_energy_old_empty = 0;
+0753: cdef long energy_new = 0
__pyx_v_energy_new = 0;
+0754: cdef long energy_new_empty = 0
__pyx_v_energy_new_empty = 0;
0755:
0756: cdef int tmp_x, tmp_y
0757: cdef int x, y
0758: cdef unsigned int site_bead_type, bead_type
0759:
+0760: bead_type = type_grid[old_x, old_y]
__pyx_t_1 = __pyx_v_old_x; __pyx_t_2 = __pyx_v_old_y; __pyx_v_bead_type = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_1 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_2 * __pyx_v_type_grid.strides[1]) )));
0761:
+0762: if LR_vs_SR == 1:
__pyx_t_3 = (__pyx_v_LR_vs_SR == 1);
if (__pyx_t_3) {
/* … */
goto __pyx_L3;
}
+0763: for x in range(-3, 4):
for (__pyx_t_4 = -3; __pyx_t_4 < 4; __pyx_t_4+=1) {
__pyx_v_x = __pyx_t_4;
+0764: for y in range(-3, 4):
for (__pyx_t_5 = -3; __pyx_t_5 < 4; __pyx_t_5+=1) {
__pyx_v_y = __pyx_t_5;
+0765: tmp_x = pbc_correction(old_x + x, XDIM)
__pyx_v_tmp_x = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_old_x + __pyx_v_x), __pyx_v_XDIM);
+0766: tmp_y = pbc_correction(old_y + y, YDIM)
__pyx_v_tmp_y = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_old_y + __pyx_v_y), __pyx_v_YDIM);
+0767: site_bead_type = type_grid[tmp_x, tmp_y]
__pyx_t_2 = __pyx_v_tmp_x;
__pyx_t_1 = __pyx_v_tmp_y;
__pyx_v_site_bead_type = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_2 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_1 * __pyx_v_type_grid.strides[1]) )));
0768:
+0769: if abs(x) < 2 and abs(y) < 2:
__pyx_t_6 = abs(__pyx_v_x); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 769, __pyx_L1_error) __pyx_t_7 = (__pyx_t_6 < 2); if (__pyx_t_7) { } else { __pyx_t_3 = __pyx_t_7; goto __pyx_L9_bool_binop_done; } __pyx_t_6 = abs(__pyx_v_y); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 769, __pyx_L1_error) __pyx_t_7 = (__pyx_t_6 < 2); __pyx_t_3 = __pyx_t_7; __pyx_L9_bool_binop_done:; if (__pyx_t_3) { /* … */ goto __pyx_L8; }
+0770: if hardwall == 1:
__pyx_t_3 = (__pyx_v_hardwall == 1);
if (__pyx_t_3) {
/* … */
}
+0771: if abs(tmp_x - old_x) > 3 or abs(tmp_y - old_y) > 3:
__pyx_t_6 = abs((__pyx_v_tmp_x - __pyx_v_old_x)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 771, __pyx_L1_error) __pyx_t_7 = (__pyx_t_6 > 3); if (!__pyx_t_7) { } else { __pyx_t_3 = __pyx_t_7; goto __pyx_L13_bool_binop_done; } __pyx_t_6 = abs((__pyx_v_tmp_y - __pyx_v_old_y)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 771, __pyx_L1_error) __pyx_t_7 = (__pyx_t_6 > 3); __pyx_t_3 = __pyx_t_7; __pyx_L13_bool_binop_done:; if (__pyx_t_3) { /* … */ }
+0772: site_bead_type = 0
__pyx_v_site_bead_type = 0;
+0773: energy_old = energy_old + interaction_table[bead_type, site_bead_type]
__pyx_t_8 = __pyx_v_bead_type;
__pyx_t_9 = __pyx_v_site_bead_type;
__pyx_v_energy_old = (__pyx_v_energy_old + (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_interaction_table.data + __pyx_t_8 * __pyx_v_interaction_table.strides[0]) ) + __pyx_t_9 * __pyx_v_interaction_table.strides[1]) ))));
+0774: if site_bead_type > 0:
__pyx_t_3 = (__pyx_v_site_bead_type > 0);
if (__pyx_t_3) {
/* … */
}
+0775: energy_old_empty = energy_old_empty + interaction_table[0, site_bead_type]
__pyx_t_1 = 0;
__pyx_t_9 = __pyx_v_site_bead_type;
__pyx_v_energy_old_empty = (__pyx_v_energy_old_empty + (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_interaction_table.data + __pyx_t_1 * __pyx_v_interaction_table.strides[0]) ) + __pyx_t_9 * __pyx_v_interaction_table.strides[1]) ))));
+0776: elif abs(x) < 3 and abs(y) < 3:
__pyx_t_6 = abs(__pyx_v_x); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 776, __pyx_L1_error) __pyx_t_7 = (__pyx_t_6 < 3); if (__pyx_t_7) { } else { __pyx_t_3 = __pyx_t_7; goto __pyx_L16_bool_binop_done; } __pyx_t_6 = abs(__pyx_v_y); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 776, __pyx_L1_error) __pyx_t_7 = (__pyx_t_6 < 3); __pyx_t_3 = __pyx_t_7; __pyx_L16_bool_binop_done:; if (__pyx_t_3) { /* … */ goto __pyx_L8; }
+0777: if hardwall == 1:
__pyx_t_3 = (__pyx_v_hardwall == 1);
if (__pyx_t_3) {
/* … */
}
+0778: if abs(tmp_x - old_x) > 3 or abs(tmp_y - old_y) > 3:
__pyx_t_6 = abs((__pyx_v_tmp_x - __pyx_v_old_x)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 778, __pyx_L1_error) __pyx_t_7 = (__pyx_t_6 > 3); if (!__pyx_t_7) { } else { __pyx_t_3 = __pyx_t_7; goto __pyx_L20_bool_binop_done; } __pyx_t_6 = abs((__pyx_v_tmp_y - __pyx_v_old_y)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 778, __pyx_L1_error) __pyx_t_7 = (__pyx_t_6 > 3); __pyx_t_3 = __pyx_t_7; __pyx_L20_bool_binop_done:; if (__pyx_t_3) { /* … */ }
+0779: continue
goto __pyx_L6_continue;
+0780: energy_old = energy_old + LR_interaction_table[bead_type, site_bead_type]
__pyx_t_9 = __pyx_v_bead_type;
__pyx_t_8 = __pyx_v_site_bead_type;
__pyx_v_energy_old = (__pyx_v_energy_old + (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_LR_interaction_table.data + __pyx_t_9 * __pyx_v_LR_interaction_table.strides[0]) ) + __pyx_t_8 * __pyx_v_LR_interaction_table.strides[1]) ))));
0781: else:
+0782: if hardwall == 1:
/*else*/ {
__pyx_t_3 = (__pyx_v_hardwall == 1);
if (__pyx_t_3) {
/* … */
}
+0783: if abs(tmp_x - old_x) > 3 or abs(tmp_y - old_y) > 3:
__pyx_t_6 = abs((__pyx_v_tmp_x - __pyx_v_old_x)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 783, __pyx_L1_error) __pyx_t_7 = (__pyx_t_6 > 3); if (!__pyx_t_7) { } else { __pyx_t_3 = __pyx_t_7; goto __pyx_L24_bool_binop_done; } __pyx_t_6 = abs((__pyx_v_tmp_y - __pyx_v_old_y)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 783, __pyx_L1_error) __pyx_t_7 = (__pyx_t_6 > 3); __pyx_t_3 = __pyx_t_7; __pyx_L24_bool_binop_done:; if (__pyx_t_3) { /* … */ }
+0784: continue
goto __pyx_L6_continue;
+0785: energy_old = energy_old + SLR_interaction_table[bead_type, site_bead_type]
__pyx_t_8 = __pyx_v_bead_type;
__pyx_t_9 = __pyx_v_site_bead_type;
__pyx_v_energy_old = (__pyx_v_energy_old + (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_SLR_interaction_table.data + __pyx_t_8 * __pyx_v_SLR_interaction_table.strides[0]) ) + __pyx_t_9 * __pyx_v_SLR_interaction_table.strides[1]) ))));
}
__pyx_L8:;
__pyx_L6_continue:;
}
}
0786:
+0787: type_grid[new_x, new_y] = type_grid[old_x, old_y]
__pyx_t_1 = __pyx_v_old_x;
__pyx_t_2 = __pyx_v_old_y;
__pyx_t_10 = __pyx_v_new_x;
__pyx_t_11 = __pyx_v_new_y;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_10 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_11 * __pyx_v_type_grid.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_1 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_2 * __pyx_v_type_grid.strides[1]) )));
+0788: type_grid[old_x, old_y] = 0
__pyx_t_2 = __pyx_v_old_x;
__pyx_t_1 = __pyx_v_old_y;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_2 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_1 * __pyx_v_type_grid.strides[1]) )) = 0;
0789:
+0790: for x in range(-3, 4):
for (__pyx_t_4 = -3; __pyx_t_4 < 4; __pyx_t_4+=1) {
__pyx_v_x = __pyx_t_4;
+0791: for y in range(-3, 4):
for (__pyx_t_5 = -3; __pyx_t_5 < 4; __pyx_t_5+=1) {
__pyx_v_y = __pyx_t_5;
+0792: tmp_x = pbc_correction(new_x + x, XDIM)
__pyx_v_tmp_x = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_new_x + __pyx_v_x), __pyx_v_XDIM);
+0793: tmp_y = pbc_correction(new_y + y, YDIM)
__pyx_v_tmp_y = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_new_y + __pyx_v_y), __pyx_v_YDIM);
+0794: site_bead_type = type_grid[tmp_x, tmp_y]
__pyx_t_1 = __pyx_v_tmp_x;
__pyx_t_2 = __pyx_v_tmp_y;
__pyx_v_site_bead_type = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_1 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_2 * __pyx_v_type_grid.strides[1]) )));
0795:
+0796: if abs(x) < 2 and abs(y) < 2:
__pyx_t_6 = abs(__pyx_v_x); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 796, __pyx_L1_error) __pyx_t_7 = (__pyx_t_6 < 2); if (__pyx_t_7) { } else { __pyx_t_3 = __pyx_t_7; goto __pyx_L31_bool_binop_done; } __pyx_t_6 = abs(__pyx_v_y); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 796, __pyx_L1_error) __pyx_t_7 = (__pyx_t_6 < 2); __pyx_t_3 = __pyx_t_7; __pyx_L31_bool_binop_done:; if (__pyx_t_3) { /* … */ goto __pyx_L30; }
+0797: if hardwall == 1:
__pyx_t_3 = (__pyx_v_hardwall == 1);
if (__pyx_t_3) {
/* … */
}
+0798: if abs(tmp_x - new_x) > 3 or abs(tmp_y - new_y) > 3:
__pyx_t_6 = abs((__pyx_v_tmp_x - __pyx_v_new_x)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 798, __pyx_L1_error) __pyx_t_7 = (__pyx_t_6 > 3); if (!__pyx_t_7) { } else { __pyx_t_3 = __pyx_t_7; goto __pyx_L35_bool_binop_done; } __pyx_t_6 = abs((__pyx_v_tmp_y - __pyx_v_new_y)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 798, __pyx_L1_error) __pyx_t_7 = (__pyx_t_6 > 3); __pyx_t_3 = __pyx_t_7; __pyx_L35_bool_binop_done:; if (__pyx_t_3) { /* … */ }
+0799: site_bead_type = 0
__pyx_v_site_bead_type = 0;
+0800: energy_new = energy_new + interaction_table[bead_type, site_bead_type]
__pyx_t_9 = __pyx_v_bead_type;
__pyx_t_8 = __pyx_v_site_bead_type;
__pyx_v_energy_new = (__pyx_v_energy_new + (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_interaction_table.data + __pyx_t_9 * __pyx_v_interaction_table.strides[0]) ) + __pyx_t_8 * __pyx_v_interaction_table.strides[1]) ))));
+0801: if site_bead_type > 0:
__pyx_t_3 = (__pyx_v_site_bead_type > 0);
if (__pyx_t_3) {
/* … */
}
+0802: energy_new_empty = energy_new_empty + interaction_table[0, site_bead_type]
__pyx_t_2 = 0;
__pyx_t_8 = __pyx_v_site_bead_type;
__pyx_v_energy_new_empty = (__pyx_v_energy_new_empty + (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_interaction_table.data + __pyx_t_2 * __pyx_v_interaction_table.strides[0]) ) + __pyx_t_8 * __pyx_v_interaction_table.strides[1]) ))));
+0803: elif abs(x) < 3 and abs(y) < 3:
__pyx_t_6 = abs(__pyx_v_x); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 803, __pyx_L1_error) __pyx_t_7 = (__pyx_t_6 < 3); if (__pyx_t_7) { } else { __pyx_t_3 = __pyx_t_7; goto __pyx_L38_bool_binop_done; } __pyx_t_6 = abs(__pyx_v_y); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 803, __pyx_L1_error) __pyx_t_7 = (__pyx_t_6 < 3); __pyx_t_3 = __pyx_t_7; __pyx_L38_bool_binop_done:; if (__pyx_t_3) { /* … */ goto __pyx_L30; }
+0804: if hardwall == 1:
__pyx_t_3 = (__pyx_v_hardwall == 1);
if (__pyx_t_3) {
/* … */
}
+0805: if abs(tmp_x - new_x) > 3 or abs(tmp_y - new_y) > 3:
__pyx_t_6 = abs((__pyx_v_tmp_x - __pyx_v_new_x)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 805, __pyx_L1_error) __pyx_t_7 = (__pyx_t_6 > 3); if (!__pyx_t_7) { } else { __pyx_t_3 = __pyx_t_7; goto __pyx_L42_bool_binop_done; } __pyx_t_6 = abs((__pyx_v_tmp_y - __pyx_v_new_y)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 805, __pyx_L1_error) __pyx_t_7 = (__pyx_t_6 > 3); __pyx_t_3 = __pyx_t_7; __pyx_L42_bool_binop_done:; if (__pyx_t_3) { /* … */ }
+0806: continue
goto __pyx_L28_continue;
+0807: energy_new = energy_new + LR_interaction_table[bead_type, site_bead_type]
__pyx_t_8 = __pyx_v_bead_type;
__pyx_t_9 = __pyx_v_site_bead_type;
__pyx_v_energy_new = (__pyx_v_energy_new + (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_LR_interaction_table.data + __pyx_t_8 * __pyx_v_LR_interaction_table.strides[0]) ) + __pyx_t_9 * __pyx_v_LR_interaction_table.strides[1]) ))));
0808: else:
+0809: if hardwall == 1:
/*else*/ {
__pyx_t_3 = (__pyx_v_hardwall == 1);
if (__pyx_t_3) {
/* … */
}
+0810: if abs(tmp_x - new_x) > 3 or abs(tmp_y - new_y) > 3:
__pyx_t_6 = abs((__pyx_v_tmp_x - __pyx_v_new_x)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 810, __pyx_L1_error) __pyx_t_7 = (__pyx_t_6 > 3); if (!__pyx_t_7) { } else { __pyx_t_3 = __pyx_t_7; goto __pyx_L46_bool_binop_done; } __pyx_t_6 = abs((__pyx_v_tmp_y - __pyx_v_new_y)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 810, __pyx_L1_error) __pyx_t_7 = (__pyx_t_6 > 3); __pyx_t_3 = __pyx_t_7; __pyx_L46_bool_binop_done:; if (__pyx_t_3) { /* … */ }
+0811: continue
goto __pyx_L28_continue;
+0812: energy_new = energy_new + SLR_interaction_table[bead_type, site_bead_type]
__pyx_t_9 = __pyx_v_bead_type;
__pyx_t_8 = __pyx_v_site_bead_type;
__pyx_v_energy_new = (__pyx_v_energy_new + (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_SLR_interaction_table.data + __pyx_t_9 * __pyx_v_SLR_interaction_table.strides[0]) ) + __pyx_t_8 * __pyx_v_SLR_interaction_table.strides[1]) ))));
}
__pyx_L30:;
__pyx_L28_continue:;
}
}
0813:
0814: else:
+0815: for x in range(-1, 2):
/*else*/ {
for (__pyx_t_4 = -1; __pyx_t_4 < 2; __pyx_t_4+=1) {
__pyx_v_x = __pyx_t_4;
+0816: for y in range(-1, 2):
for (__pyx_t_5 = -1; __pyx_t_5 < 2; __pyx_t_5+=1) {
__pyx_v_y = __pyx_t_5;
+0817: tmp_x = pbc_correction(old_x + x, XDIM)
__pyx_v_tmp_x = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_old_x + __pyx_v_x), __pyx_v_XDIM);
+0818: tmp_y = pbc_correction(old_y + y, YDIM)
__pyx_v_tmp_y = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_old_y + __pyx_v_y), __pyx_v_YDIM);
+0819: site_bead_type = type_grid[tmp_x, tmp_y]
__pyx_t_2 = __pyx_v_tmp_x;
__pyx_t_1 = __pyx_v_tmp_y;
__pyx_v_site_bead_type = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_2 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_1 * __pyx_v_type_grid.strides[1]) )));
+0820: if hardwall == 1:
__pyx_t_3 = (__pyx_v_hardwall == 1);
if (__pyx_t_3) {
/* … */
}
+0821: if abs(tmp_x - old_x) > 3 or abs(tmp_y - old_y) > 3:
__pyx_t_6 = abs((__pyx_v_tmp_x - __pyx_v_old_x)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 821, __pyx_L1_error) __pyx_t_7 = (__pyx_t_6 > 3); if (!__pyx_t_7) { } else { __pyx_t_3 = __pyx_t_7; goto __pyx_L54_bool_binop_done; } __pyx_t_6 = abs((__pyx_v_tmp_y - __pyx_v_old_y)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 821, __pyx_L1_error) __pyx_t_7 = (__pyx_t_6 > 3); __pyx_t_3 = __pyx_t_7; __pyx_L54_bool_binop_done:; if (__pyx_t_3) { /* … */ }
+0822: site_bead_type = 0
__pyx_v_site_bead_type = 0;
+0823: energy_old = energy_old + interaction_table[bead_type, site_bead_type]
__pyx_t_8 = __pyx_v_bead_type;
__pyx_t_9 = __pyx_v_site_bead_type;
__pyx_v_energy_old = (__pyx_v_energy_old + (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_interaction_table.data + __pyx_t_8 * __pyx_v_interaction_table.strides[0]) ) + __pyx_t_9 * __pyx_v_interaction_table.strides[1]) ))));
+0824: if site_bead_type > 0:
__pyx_t_3 = (__pyx_v_site_bead_type > 0);
if (__pyx_t_3) {
/* … */
}
}
}
+0825: energy_old_empty = energy_old_empty + interaction_table[0, site_bead_type]
__pyx_t_1 = 0;
__pyx_t_9 = __pyx_v_site_bead_type;
__pyx_v_energy_old_empty = (__pyx_v_energy_old_empty + (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_interaction_table.data + __pyx_t_1 * __pyx_v_interaction_table.strides[0]) ) + __pyx_t_9 * __pyx_v_interaction_table.strides[1]) ))));
0826:
+0827: type_grid[new_x, new_y] = type_grid[old_x, old_y]
__pyx_t_1 = __pyx_v_old_x;
__pyx_t_2 = __pyx_v_old_y;
__pyx_t_11 = __pyx_v_new_x;
__pyx_t_10 = __pyx_v_new_y;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_11 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_10 * __pyx_v_type_grid.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_1 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_2 * __pyx_v_type_grid.strides[1]) )));
+0828: type_grid[old_x, old_y] = 0
__pyx_t_2 = __pyx_v_old_x;
__pyx_t_1 = __pyx_v_old_y;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_2 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_1 * __pyx_v_type_grid.strides[1]) )) = 0;
0829:
+0830: for x in range(-1, 2):
for (__pyx_t_4 = -1; __pyx_t_4 < 2; __pyx_t_4+=1) {
__pyx_v_x = __pyx_t_4;
+0831: for y in range(-1, 2):
for (__pyx_t_5 = -1; __pyx_t_5 < 2; __pyx_t_5+=1) {
__pyx_v_y = __pyx_t_5;
+0832: tmp_x = pbc_correction(new_x + x, XDIM)
__pyx_v_tmp_x = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_new_x + __pyx_v_x), __pyx_v_XDIM);
+0833: tmp_y = pbc_correction(new_y + y, YDIM)
__pyx_v_tmp_y = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_new_y + __pyx_v_y), __pyx_v_YDIM);
+0834: site_bead_type = type_grid[tmp_x, tmp_y]
__pyx_t_1 = __pyx_v_tmp_x;
__pyx_t_2 = __pyx_v_tmp_y;
__pyx_v_site_bead_type = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_1 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_2 * __pyx_v_type_grid.strides[1]) )));
+0835: if hardwall == 1:
__pyx_t_3 = (__pyx_v_hardwall == 1);
if (__pyx_t_3) {
/* … */
}
+0836: if abs(tmp_x - new_x) > 3 or abs(tmp_y - new_y) > 3:
__pyx_t_6 = abs((__pyx_v_tmp_x - __pyx_v_new_x)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 836, __pyx_L1_error) __pyx_t_7 = (__pyx_t_6 > 3); if (!__pyx_t_7) { } else { __pyx_t_3 = __pyx_t_7; goto __pyx_L63_bool_binop_done; } __pyx_t_6 = abs((__pyx_v_tmp_y - __pyx_v_new_y)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 836, __pyx_L1_error) __pyx_t_7 = (__pyx_t_6 > 3); __pyx_t_3 = __pyx_t_7; __pyx_L63_bool_binop_done:; if (__pyx_t_3) { /* … */ }
+0837: site_bead_type = 0
__pyx_v_site_bead_type = 0;
+0838: energy_new = energy_new + interaction_table[bead_type, site_bead_type]
__pyx_t_9 = __pyx_v_bead_type;
__pyx_t_8 = __pyx_v_site_bead_type;
__pyx_v_energy_new = (__pyx_v_energy_new + (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_interaction_table.data + __pyx_t_9 * __pyx_v_interaction_table.strides[0]) ) + __pyx_t_8 * __pyx_v_interaction_table.strides[1]) ))));
+0839: if site_bead_type > 0:
__pyx_t_3 = (__pyx_v_site_bead_type > 0);
if (__pyx_t_3) {
/* … */
}
}
}
}
__pyx_L3:;
+0840: energy_new_empty = energy_new_empty + interaction_table[0, site_bead_type]
__pyx_t_2 = 0;
__pyx_t_8 = __pyx_v_site_bead_type;
__pyx_v_energy_new_empty = (__pyx_v_energy_new_empty + (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_interaction_table.data + __pyx_t_2 * __pyx_v_interaction_table.strides[0]) ) + __pyx_t_8 * __pyx_v_interaction_table.strides[1]) ))));
0841:
+0842: energy_old_empty = energy_old_empty - interaction_table[0, bead_type]
__pyx_t_2 = 0; __pyx_t_8 = __pyx_v_bead_type; __pyx_v_energy_old_empty = (__pyx_v_energy_old_empty - (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_interaction_table.data + __pyx_t_2 * __pyx_v_interaction_table.strides[0]) ) + __pyx_t_8 * __pyx_v_interaction_table.strides[1]) ))));
+0843: energy_old = energy_old - interaction_table[bead_type, bead_type]
__pyx_t_8 = __pyx_v_bead_type; __pyx_t_9 = __pyx_v_bead_type; __pyx_v_energy_old = (__pyx_v_energy_old - (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_interaction_table.data + __pyx_t_8 * __pyx_v_interaction_table.strides[0]) ) + __pyx_t_9 * __pyx_v_interaction_table.strides[1]) ))));
+0844: energy_new_empty = energy_new_empty - interaction_table[0, bead_type]
__pyx_t_2 = 0; __pyx_t_9 = __pyx_v_bead_type; __pyx_v_energy_new_empty = (__pyx_v_energy_new_empty - (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_interaction_table.data + __pyx_t_2 * __pyx_v_interaction_table.strides[0]) ) + __pyx_t_9 * __pyx_v_interaction_table.strides[1]) ))));
+0845: energy_new = energy_new - interaction_table[bead_type, bead_type]
__pyx_t_9 = __pyx_v_bead_type; __pyx_t_8 = __pyx_v_bead_type; __pyx_v_energy_new = (__pyx_v_energy_new - (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_interaction_table.data + __pyx_t_9 * __pyx_v_interaction_table.strides[0]) ) + __pyx_t_8 * __pyx_v_interaction_table.strides[1]) ))));
0846:
+0847: type_grid[old_x, old_y] = type_grid[new_x, new_y]
__pyx_t_2 = __pyx_v_new_x; __pyx_t_1 = __pyx_v_new_y; __pyx_t_10 = __pyx_v_old_x; __pyx_t_11 = __pyx_v_old_y; *((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_10 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_11 * __pyx_v_type_grid.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_2 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_1 * __pyx_v_type_grid.strides[1]) )));
+0848: type_grid[new_x, new_y] = 0
__pyx_t_1 = __pyx_v_new_x; __pyx_t_2 = __pyx_v_new_y; *((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_1 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_2 * __pyx_v_type_grid.strides[1]) )) = 0;
0849:
+0850: return (energy_new + energy_old_empty) - (energy_old + energy_new_empty)
__pyx_r = ((__pyx_v_energy_new + __pyx_v_energy_old_empty) - (__pyx_v_energy_old + __pyx_v_energy_new_empty)); goto __pyx_L0;
0851:
0852:
0853: # ---- public 2D entry point (signature matches mega_crank_2D.mega_crank_2D) ----
+0854: @cython.wraparound(False)
/* Python wrapper */ static PyObject *__pyx_pw_5pimms_15mega_crank_fast_3mega_crank_2D(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_5pimms_15mega_crank_fast_2mega_crank_2D, "\n Optimized, allocation-free 2D crankshaft Monte Carlo kernel.\n\n Behaviourally identical (same RNG stream) to\n pimms.mega_crank_2D.mega_crank_2D. Returns (energy, accepted_moves).\n "); static PyMethodDef __pyx_mdef_5pimms_15mega_crank_fast_3mega_crank_2D = {"mega_crank_2D", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5pimms_15mega_crank_fast_3mega_crank_2D, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_5pimms_15mega_crank_fast_2mega_crank_2D}; static PyObject *__pyx_pw_5pimms_15mega_crank_fast_3mega_crank_2D(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { __Pyx_memviewslice __pyx_v_grid = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_type_grid = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_idx_to_bead = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_LR_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_SLR_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_angle_lookup = { 0, 0, { 0 }, { 0 }, { 0 } }; long __pyx_v_energy; float __pyx_v_invtemp; int __pyx_v_nsteps; __Pyx_memviewslice __pyx_v_bead_selector = { 0, 0, { 0 }, { 0 }, { 0 } }; int __pyx_v_passed_seed; int __pyx_v_hardwall; #if !CYTHON_METH_FASTCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("mega_crank_2D (wrapper)", 0); #if !CYTHON_METH_FASTCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_grid,&__pyx_mstate_global->__pyx_n_u_type_grid,&__pyx_mstate_global->__pyx_n_u_idx_to_bead,&__pyx_mstate_global->__pyx_n_u_interaction_table,&__pyx_mstate_global->__pyx_n_u_LR_interaction_table,&__pyx_mstate_global->__pyx_n_u_SLR_interaction_table,&__pyx_mstate_global->__pyx_n_u_angle_lookup,&__pyx_mstate_global->__pyx_n_u_energy,&__pyx_mstate_global->__pyx_n_u_invtemp,&__pyx_mstate_global->__pyx_n_u_nsteps,&__pyx_mstate_global->__pyx_n_u_bead_selector,&__pyx_mstate_global->__pyx_n_u_passed_seed,&__pyx_mstate_global->__pyx_n_u_hardwall,0}; PyObject* values[13] = {0,0,0,0,0,0,0,0,0,0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 854, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 13: values[12] = __Pyx_ArgRef_FASTCALL(__pyx_args, 12); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[12])) __PYX_ERR(0, 854, __pyx_L3_error) CYTHON_FALLTHROUGH; case 12: values[11] = __Pyx_ArgRef_FASTCALL(__pyx_args, 11); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[11])) __PYX_ERR(0, 854, __pyx_L3_error) CYTHON_FALLTHROUGH; case 11: values[10] = __Pyx_ArgRef_FASTCALL(__pyx_args, 10); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[10])) __PYX_ERR(0, 854, __pyx_L3_error) CYTHON_FALLTHROUGH; case 10: values[9] = __Pyx_ArgRef_FASTCALL(__pyx_args, 9); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[9])) __PYX_ERR(0, 854, __pyx_L3_error) CYTHON_FALLTHROUGH; case 9: values[8] = __Pyx_ArgRef_FASTCALL(__pyx_args, 8); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[8])) __PYX_ERR(0, 854, __pyx_L3_error) CYTHON_FALLTHROUGH; case 8: values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 854, __pyx_L3_error) CYTHON_FALLTHROUGH; case 7: values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 854, __pyx_L3_error) CYTHON_FALLTHROUGH; case 6: values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 854, __pyx_L3_error) CYTHON_FALLTHROUGH; case 5: values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 854, __pyx_L3_error) CYTHON_FALLTHROUGH; case 4: values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 854, __pyx_L3_error) CYTHON_FALLTHROUGH; case 3: values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 854, __pyx_L3_error) CYTHON_FALLTHROUGH; case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 854, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 854, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "mega_crank_2D", 0) < (0)) __PYX_ERR(0, 854, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 13; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("mega_crank_2D", 1, 13, 13, i); __PYX_ERR(0, 854, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 13)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 854, __pyx_L3_error) values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 854, __pyx_L3_error) values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 854, __pyx_L3_error) values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 854, __pyx_L3_error) values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 854, __pyx_L3_error) values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 854, __pyx_L3_error) values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 854, __pyx_L3_error) values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 854, __pyx_L3_error) values[8] = __Pyx_ArgRef_FASTCALL(__pyx_args, 8); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[8])) __PYX_ERR(0, 854, __pyx_L3_error) values[9] = __Pyx_ArgRef_FASTCALL(__pyx_args, 9); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[9])) __PYX_ERR(0, 854, __pyx_L3_error) values[10] = __Pyx_ArgRef_FASTCALL(__pyx_args, 10); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[10])) __PYX_ERR(0, 854, __pyx_L3_error) values[11] = __Pyx_ArgRef_FASTCALL(__pyx_args, 11); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[11])) __PYX_ERR(0, 854, __pyx_L3_error) values[12] = __Pyx_ArgRef_FASTCALL(__pyx_args, 12); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[12])) __PYX_ERR(0, 854, __pyx_L3_error) } __pyx_v_grid = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_grid.memview)) __PYX_ERR(0, 856, __pyx_L3_error) __pyx_v_type_grid = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_type_grid.memview)) __PYX_ERR(0, 857, __pyx_L3_error) __pyx_v_idx_to_bead = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_idx_to_bead.memview)) __PYX_ERR(0, 858, __pyx_L3_error) __pyx_v_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interaction_table.memview)) __PYX_ERR(0, 859, __pyx_L3_error) __pyx_v_LR_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_LR_interaction_table.memview)) __PYX_ERR(0, 860, __pyx_L3_error) __pyx_v_SLR_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_SLR_interaction_table.memview)) __PYX_ERR(0, 861, __pyx_L3_error) __pyx_v_angle_lookup = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsdsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_angle_lookup.memview)) __PYX_ERR(0, 862, __pyx_L3_error) __pyx_v_energy = __Pyx_PyLong_As_long(values[7]); if (unlikely((__pyx_v_energy == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 863, __pyx_L3_error) __pyx_v_invtemp = __Pyx_PyFloat_AsFloat(values[8]); if (unlikely((__pyx_v_invtemp == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 864, __pyx_L3_error) __pyx_v_nsteps = __Pyx_PyLong_As_int(values[9]); if (unlikely((__pyx_v_nsteps == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 865, __pyx_L3_error) __pyx_v_bead_selector = __Pyx_PyObject_to_MemoryviewSlice_ds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_bead_selector.memview)) __PYX_ERR(0, 866, __pyx_L3_error) __pyx_v_passed_seed = __Pyx_PyLong_As_int(values[11]); if (unlikely((__pyx_v_passed_seed == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 867, __pyx_L3_error) __pyx_v_hardwall = __Pyx_PyLong_As_int(values[12]); if (unlikely((__pyx_v_hardwall == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 868, __pyx_L3_error) } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("mega_crank_2D", 1, 13, 13, __pyx_nargs); __PYX_ERR(0, 854, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __PYX_XCLEAR_MEMVIEW(&__pyx_v_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_type_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_idx_to_bead, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_LR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_SLR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_angle_lookup, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_bead_selector, 1); __Pyx_AddTraceback("pimms.mega_crank_fast.mega_crank_2D", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5pimms_15mega_crank_fast_2mega_crank_2D(__pyx_self, __pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_angle_lookup, __pyx_v_energy, __pyx_v_invtemp, __pyx_v_nsteps, __pyx_v_bead_selector, __pyx_v_passed_seed, __pyx_v_hardwall); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __PYX_XCLEAR_MEMVIEW(&__pyx_v_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_type_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_idx_to_bead, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_LR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_SLR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_angle_lookup, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_bead_selector, 1); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5pimms_15mega_crank_fast_2mega_crank_2D(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_grid, __Pyx_memviewslice __pyx_v_type_grid, __Pyx_memviewslice __pyx_v_idx_to_bead, __Pyx_memviewslice __pyx_v_interaction_table, __Pyx_memviewslice __pyx_v_LR_interaction_table, __Pyx_memviewslice __pyx_v_SLR_interaction_table, __Pyx_memviewslice __pyx_v_angle_lookup, long __pyx_v_energy, float __pyx_v_invtemp, int __pyx_v_nsteps, __Pyx_memviewslice __pyx_v_bead_selector, int __pyx_v_passed_seed, int __pyx_v_hardwall) { unsigned int __pyx_v_i; int __pyx_v_bead_index; int __pyx_v_accepted_moves; int __pyx_v_XDIM; int __pyx_v_YDIM; long __pyx_v_delta_energy; long __pyx_v_delta_angle_energy; int __pyx_v_beadflag; int __pyx_v_ok; int __pyx_v_old_x; int __pyx_v_old_y; int __pyx_v_lr_vs_sr; int __pyx_v_bead_id; int __pyx_v_new_position[2]; int __pyx_v_anchor0; int __pyx_v_anchor1; int __pyx_v_Nx; int __pyx_v_Ny; int __pyx_v_Cx; int __pyx_v_Cy; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_11); __Pyx_XDECREF(__pyx_t_12); __Pyx_XDECREF(__pyx_t_13); __Pyx_AddTraceback("pimms.mega_crank_fast.mega_crank_2D", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_5pimms_15mega_crank_fast_3mega_crank_2D, 0, __pyx_mstate_global->__pyx_n_u_mega_crank_2D, NULL, __pyx_mstate_global->__pyx_n_u_pimms_mega_crank_fast, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[7])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 854, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_mega_crank_2D, __pyx_t_4) < (0)) __PYX_ERR(0, 854, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
0855: @cython.boundscheck(False)
0856: def mega_crank_2D(NUMPY_INT_TYPE[:, :] grid,
0857: NUMPY_INT_TYPE[:, :] type_grid,
0858: NUMPY_INT_TYPE_long[:, :] idx_to_bead,
0859: NUMPY_INT_TYPE[:, :] interaction_table,
0860: NUMPY_INT_TYPE[:, :] LR_interaction_table,
0861: NUMPY_INT_TYPE[:, :] SLR_interaction_table,
0862: NUMPY_INT_TYPE[:, :, :, :, :] angle_lookup,
0863: long energy,
0864: float invtemp,
0865: int nsteps,
0866: NUMPY_INT_TYPE_long[:] bead_selector,
0867: int passed_seed,
0868: int hardwall):
0869: """
0870: Optimized, allocation-free 2D crankshaft Monte Carlo kernel.
0871:
0872: Behaviourally identical (same RNG stream) to
0873: pimms.mega_crank_2D.mega_crank_2D. Returns (energy, accepted_moves).
0874: """
+0875: mc_seed(passed_seed)
__pyx_f_5pimms_15mega_crank_fast_mc_seed(__pyx_v_passed_seed);
0876:
0877: cdef unsigned int i
0878: cdef int bead_index
+0879: cdef int accepted_moves = 0
__pyx_v_accepted_moves = 0;
+0880: cdef int XDIM = grid.shape[0]
__pyx_v_XDIM = (__pyx_v_grid.shape[0]);
+0881: cdef int YDIM = grid.shape[1]
__pyx_v_YDIM = (__pyx_v_grid.shape[1]);
0882: cdef long delta_energy, delta_angle_energy
0883: cdef int beadflag, ok
0884:
0885: cdef int old_x, old_y, lr_vs_sr, bead_id
0886: cdef int new_position[2]
0887: cdef int anchor0, anchor1
0888: cdef int Nx, Ny, Cx, Cy
0889:
+0890: for i in range(nsteps):
__pyx_t_1 = __pyx_v_nsteps;
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_i = __pyx_t_3;
+0891: bead_index = bead_selector[i]
__pyx_t_4 = __pyx_v_i;
__pyx_v_bead_index = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=0 */ (__pyx_v_bead_selector.data + __pyx_t_4 * __pyx_v_bead_selector.strides[0]) )));
0892:
+0893: beadflag = idx_to_bead[bead_index, 0]
__pyx_t_5 = __pyx_v_bead_index;
__pyx_t_6 = 0;
__pyx_v_beadflag = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_5 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+0894: old_x = idx_to_bead[bead_index, 5]
__pyx_t_6 = __pyx_v_bead_index;
__pyx_t_5 = 5;
__pyx_v_old_x = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_5 * __pyx_v_idx_to_bead.strides[1]) )));
+0895: old_y = idx_to_bead[bead_index, 6]
__pyx_t_5 = __pyx_v_bead_index;
__pyx_t_6 = 6;
__pyx_v_old_y = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_5 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+0896: lr_vs_sr = idx_to_bead[bead_index, 1]
__pyx_t_6 = __pyx_v_bead_index;
__pyx_t_5 = 1;
__pyx_v_lr_vs_sr = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_5 * __pyx_v_idx_to_bead.strides[1]) )));
+0897: bead_id = idx_to_bead[bead_index, 4]
__pyx_t_5 = __pyx_v_bead_index;
__pyx_t_6 = 4;
__pyx_v_bead_id = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_5 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
0898:
0899: # ---- single bead (flag 0) ----
+0900: if beadflag == 0:
switch (__pyx_v_beadflag) {
case 0:
/* … */
break;
case 1:
+0901: ok = single_bead_crank_2D_c(old_x, old_y, grid, XDIM, YDIM, new_position)
__pyx_v_ok = __pyx_f_5pimms_15mega_crank_fast_single_bead_crank_2D_c(__pyx_v_old_x, __pyx_v_old_y, __pyx_v_grid, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_new_position);
0902:
0903: # ---- N-terminal bead (flag 1) ----
+0904: elif beadflag == 1:
break;
case 3:
+0905: anchor0 = idx_to_bead[bead_index + 1, 5]
__pyx_t_6 = (__pyx_v_bead_index + 1);
__pyx_t_5 = 5;
__pyx_v_anchor0 = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_5 * __pyx_v_idx_to_bead.strides[1]) )));
+0906: anchor1 = idx_to_bead[bead_index + 1, 6]
__pyx_t_5 = (__pyx_v_bead_index + 1);
__pyx_t_6 = 6;
__pyx_v_anchor1 = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_5 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+0907: ok = single_bead_crank_2D_c(anchor0, anchor1, grid, XDIM, YDIM, new_position)
__pyx_v_ok = __pyx_f_5pimms_15mega_crank_fast_single_bead_crank_2D_c(__pyx_v_anchor0, __pyx_v_anchor1, __pyx_v_grid, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_new_position);
+0908: if hardwall == 1:
__pyx_t_7 = (__pyx_v_hardwall == 1);
if (__pyx_t_7) {
/* … */
}
+0909: if straddle_pair(new_position[0], new_position[1], 0,
if (__pyx_t_7) {
/* … */
}
+0910: anchor0, anchor1, 0) == 1:
__pyx_t_7 = (__pyx_f_5pimms_15mega_crank_fast_straddle_pair((__pyx_v_new_position[0]), (__pyx_v_new_position[1]), 0, __pyx_v_anchor0, __pyx_v_anchor1, 0) == 1);
+0911: continue
goto __pyx_L3_continue;
0912:
0913: # ---- C-terminal bead (flag 3) ----
+0914: elif beadflag == 3:
break;
default:
+0915: anchor0 = idx_to_bead[bead_index - 1, 5]
__pyx_t_6 = (__pyx_v_bead_index - 1);
__pyx_t_5 = 5;
__pyx_v_anchor0 = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_5 * __pyx_v_idx_to_bead.strides[1]) )));
+0916: anchor1 = idx_to_bead[bead_index - 1, 6]
__pyx_t_5 = (__pyx_v_bead_index - 1);
__pyx_t_6 = 6;
__pyx_v_anchor1 = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_5 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+0917: ok = single_bead_crank_2D_c(anchor0, anchor1, grid, XDIM, YDIM, new_position)
__pyx_v_ok = __pyx_f_5pimms_15mega_crank_fast_single_bead_crank_2D_c(__pyx_v_anchor0, __pyx_v_anchor1, __pyx_v_grid, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_new_position);
+0918: if hardwall == 1:
__pyx_t_7 = (__pyx_v_hardwall == 1);
if (__pyx_t_7) {
/* … */
}
+0919: if straddle_pair(anchor0, anchor1, 0,
if (__pyx_t_7) {
/* … */
}
+0920: new_position[0], new_position[1], 0) == 1:
__pyx_t_7 = (__pyx_f_5pimms_15mega_crank_fast_straddle_pair(__pyx_v_anchor0, __pyx_v_anchor1, 0, (__pyx_v_new_position[0]), (__pyx_v_new_position[1]), 0) == 1);
+0921: continue
goto __pyx_L3_continue;
0922:
0923: # ---- internal bead (flags 2,4,5,6) ----
0924: else:
+0925: Nx = idx_to_bead[bead_index - 1, 5]
__pyx_t_6 = (__pyx_v_bead_index - 1);
__pyx_t_5 = 5;
__pyx_v_Nx = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_5 * __pyx_v_idx_to_bead.strides[1]) )));
+0926: Ny = idx_to_bead[bead_index - 1, 6]
__pyx_t_5 = (__pyx_v_bead_index - 1);
__pyx_t_6 = 6;
__pyx_v_Ny = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_5 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+0927: Cx = idx_to_bead[bead_index + 1, 5]
__pyx_t_6 = (__pyx_v_bead_index + 1);
__pyx_t_5 = 5;
__pyx_v_Cx = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_5 * __pyx_v_idx_to_bead.strides[1]) )));
+0928: Cy = idx_to_bead[bead_index + 1, 6]
__pyx_t_5 = (__pyx_v_bead_index + 1);
__pyx_t_6 = 6;
__pyx_v_Cy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_5 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+0929: ok = crank_it_2D_c(Nx, Ny, Cx, Cy, grid, XDIM, YDIM, new_position)
__pyx_v_ok = __pyx_f_5pimms_15mega_crank_fast_crank_it_2D_c(__pyx_v_Nx, __pyx_v_Ny, __pyx_v_Cx, __pyx_v_Cy, __pyx_v_grid, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_new_position);
+0930: if hardwall == 1:
__pyx_t_7 = (__pyx_v_hardwall == 1);
if (__pyx_t_7) {
/* … */
}
break;
}
+0931: if (straddle_pair(Nx, Ny, 0,
if (__pyx_t_7) {
/* … */
}
+0932: new_position[0], new_position[1], 0) == 1
__pyx_t_8 = (__pyx_f_5pimms_15mega_crank_fast_straddle_pair(__pyx_v_Nx, __pyx_v_Ny, 0, (__pyx_v_new_position[0]), (__pyx_v_new_position[1]), 0) == 1);
if (!__pyx_t_8) {
} else {
__pyx_t_7 = __pyx_t_8;
goto __pyx_L11_bool_binop_done;
}
0933: or straddle_pair(new_position[0], new_position[1], 0,
+0934: Cx, Cy, 0) == 1):
__pyx_t_8 = (__pyx_f_5pimms_15mega_crank_fast_straddle_pair((__pyx_v_new_position[0]), (__pyx_v_new_position[1]), 0, __pyx_v_Cx, __pyx_v_Cy, 0) == 1);
__pyx_t_7 = __pyx_t_8;
__pyx_L11_bool_binop_done:;
+0935: continue
goto __pyx_L3_continue;
0936:
+0937: if ok == 1:
__pyx_t_7 = (__pyx_v_ok == 1);
if (__pyx_t_7) {
/* … */
}
__pyx_L3_continue:;
}
+0938: delta_energy = get_energy_change_2D_c(grid, type_grid,
__pyx_v_delta_energy = __pyx_f_5pimms_15mega_crank_fast_get_energy_change_2D_c(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_old_x, __pyx_v_old_y, (__pyx_v_new_position[0]), (__pyx_v_new_position[1]), __pyx_v_lr_vs_sr, __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_hardwall);
0939: old_x, old_y,
0940: new_position[0], new_position[1],
0941: lr_vs_sr,
0942: interaction_table, LR_interaction_table,
0943: SLR_interaction_table,
0944: XDIM, YDIM, hardwall)
+0945: delta_angle_energy = get_angle_energy_change_2D_c(bead_index, idx_to_bead,
__pyx_v_delta_angle_energy = __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_2D_c(__pyx_v_bead_index, __pyx_v_idx_to_bead, __pyx_v_new_position, __pyx_v_angle_lookup);
0946: new_position, angle_lookup)
0947:
+0948: if accept_or_reject(invtemp, energy, energy + delta_energy + delta_angle_energy) == 1:
__pyx_t_7 = (__pyx_f_5pimms_15mega_crank_fast_accept_or_reject(__pyx_v_invtemp, __pyx_v_energy, ((__pyx_v_energy + __pyx_v_delta_energy) + __pyx_v_delta_angle_energy)) == 1);
if (__pyx_t_7) {
/* … */
}
+0949: grid[old_x, old_y] = 0
__pyx_t_6 = __pyx_v_old_x;
__pyx_t_5 = __pyx_v_old_y;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_6 * __pyx_v_grid.strides[0]) ) + __pyx_t_5 * __pyx_v_grid.strides[1]) )) = 0;
+0950: grid[new_position[0], new_position[1]] = bead_id
__pyx_t_5 = (__pyx_v_new_position[0]);
__pyx_t_6 = (__pyx_v_new_position[1]);
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_5 * __pyx_v_grid.strides[0]) ) + __pyx_t_6 * __pyx_v_grid.strides[1]) )) = __pyx_v_bead_id;
+0951: type_grid[new_position[0], new_position[1]] = type_grid[old_x, old_y]
__pyx_t_6 = __pyx_v_old_x;
__pyx_t_5 = __pyx_v_old_y;
__pyx_t_9 = (__pyx_v_new_position[0]);
__pyx_t_10 = (__pyx_v_new_position[1]);
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_9 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_10 * __pyx_v_type_grid.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_6 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_5 * __pyx_v_type_grid.strides[1]) )));
+0952: type_grid[old_x, old_y] = 0
__pyx_t_5 = __pyx_v_old_x;
__pyx_t_6 = __pyx_v_old_y;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_5 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_6 * __pyx_v_type_grid.strides[1]) )) = 0;
+0953: idx_to_bead[bead_index, 5] = new_position[0]
__pyx_t_6 = __pyx_v_bead_index;
__pyx_t_5 = 5;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_5 * __pyx_v_idx_to_bead.strides[1]) )) = (__pyx_v_new_position[0]);
+0954: idx_to_bead[bead_index, 6] = new_position[1]
__pyx_t_5 = __pyx_v_bead_index;
__pyx_t_6 = 6;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_5 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )) = (__pyx_v_new_position[1]);
+0955: energy = energy + delta_energy + delta_angle_energy
__pyx_v_energy = ((__pyx_v_energy + __pyx_v_delta_energy) + __pyx_v_delta_angle_energy);
+0956: accepted_moves = accepted_moves + 1
__pyx_v_accepted_moves = (__pyx_v_accepted_moves + 1);
0957:
+0958: return (energy, accepted_moves)
__Pyx_XDECREF(__pyx_r); __pyx_t_11 = __Pyx_PyLong_From_long(__pyx_v_energy); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 958, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = __Pyx_PyLong_From_int(__pyx_v_accepted_moves); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 958, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 958, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_GIVEREF(__pyx_t_11); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_11) != (0)) __PYX_ERR(0, 958, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_12); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_12) != (0)) __PYX_ERR(0, 958, __pyx_L1_error); __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_r = __pyx_t_13; __pyx_t_13 = 0; goto __pyx_L0;
0959:
0960:
0961: # =====================================================================
0962: #
0963: # PARALLEL (checkerboard / domain-decomposition) crankshaft kernel
0964: #
0965: # Correctness argument (see pimms/fast_kernels/CHECKERBOARD_DESIGN.md):
0966: #
0967: # * A single crankshaft/terminal move displaces a bead by at most 2
0968: # lattice sites and the energy evaluation reads +/- R_int around the
0969: # old and new positions (R_int = 3 if any long-range beads exist, else
0970: # 1). Chain-neighbour (anchor / angle) reads are <= 2 sites away.
0971: # So the entire read+write footprint of a move lies within
0972: # W = R_int + 2 sites of the bead's current position.
0973: #
0974: # * The box is split into blocks; only beads at least W sites inside their
0975: # block (a frozen halo of width W on every blocked face) are moved.
0976: # Hence every block's footprint stays strictly inside that block, blocks
0977: # are pairwise disjoint, and they can be updated concurrently with NO
0978: # locks and NO colouring. (A dim that is not split, nb==1, has no halo -
0979: # PBC wrap is fine because that whole dimension belongs to one block.)
0980: #
0981: # * Metropolis acceptance depends only on dE, so each block accumulates a
0982: # private energy delta; the global energy is base + sum(block deltas).
0983: # Per-block independent PRNG streams avoid the non-thread-safe libc rand.
0984: #
0985: # * Beads in the frozen halo are skipped this sweep; a fresh random origin
0986: # shift each call restores ergodicity over many sweeps. The kernel is
0987: # therefore NOT bit-identical to the serial kernel - it is a different
0988: # (but equally valid) Markov chain targeting the same Boltzmann
0989: # distribution, and is validated by ensemble + energy-consistency checks
0990: # (pimms/fast_kernels/benchmark_parallel.py).
0991: #
0992: # =====================================================================
0993:
0994: # ---- per-thread PRNG (splitmix64) -----------------------------------
+0995: cdef inline unsigned long long splitmix64(unsigned long long* state) noexcept nogil:
static CYTHON_INLINE unsigned PY_LONG_LONG __pyx_f_5pimms_15mega_crank_fast_splitmix64(unsigned PY_LONG_LONG *__pyx_v_state) {
unsigned PY_LONG_LONG __pyx_v_z;
unsigned PY_LONG_LONG __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
+0996: state[0] = state[0] + <unsigned long long>0x9E3779B97F4A7C15
(__pyx_v_state[0]) = ((__pyx_v_state[0]) + ((unsigned PY_LONG_LONG)0x9E3779B97F4A7C15));
+0997: cdef unsigned long long z = state[0]
__pyx_v_z = (__pyx_v_state[0]);
+0998: z = (z ^ (z >> 30)) * <unsigned long long>0xBF58476D1CE4E5B9
__pyx_v_z = ((__pyx_v_z ^ (__pyx_v_z >> 30)) * ((unsigned PY_LONG_LONG)0xBF58476D1CE4E5B9));
+0999: z = (z ^ (z >> 27)) * <unsigned long long>0x94D049BB133111EB
__pyx_v_z = ((__pyx_v_z ^ (__pyx_v_z >> 27)) * ((unsigned PY_LONG_LONG)0x94D049BB133111EB));
+1000: return z ^ (z >> 31)
__pyx_r = (__pyx_v_z ^ (__pyx_v_z >> 31)); goto __pyx_L0;
1001:
+1002: cdef inline double rng_uniform(unsigned long long* state) noexcept nogil:
static CYTHON_INLINE double __pyx_f_5pimms_15mega_crank_fast_rng_uniform(unsigned PY_LONG_LONG *__pyx_v_state) {
double __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
1003: # 53-bit uniform in [0, 1)
+1004: return <double>(splitmix64(state) >> 11) * (1.0 / 9007199254740992.0)
__pyx_r = (((double)(__pyx_f_5pimms_15mega_crank_fast_splitmix64(__pyx_v_state) >> 11)) * (1.0 / 9007199254740992.0)); goto __pyx_L0;
1005:
+1006: cdef inline int rng_randint(unsigned long long* state, int start, int end) noexcept nogil:
static CYTHON_INLINE int __pyx_f_5pimms_15mega_crank_fast_rng_randint(unsigned PY_LONG_LONG *__pyx_v_state, int __pyx_v_start, int __pyx_v_end) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
1007: # mirrors the integer RANGE of the serial randint(start, end)
+1008: if start == 0:
__pyx_t_1 = (__pyx_v_start == 0);
if (__pyx_t_1) {
/* … */
}
+1009: end = end + 1
__pyx_v_end = (__pyx_v_end + 1);
+1010: return start + <int>(rng_uniform(state) * end)
__pyx_r = (__pyx_v_start + ((int)(__pyx_f_5pimms_15mega_crank_fast_rng_uniform(__pyx_v_state) * __pyx_v_end))); goto __pyx_L0;
1011:
+1012: cdef inline int accept_p(float invtemp, long delta, unsigned long long* rng) noexcept nogil:
static CYTHON_INLINE int __pyx_f_5pimms_15mega_crank_fast_accept_p(float __pyx_v_invtemp, long __pyx_v_delta, unsigned PY_LONG_LONG *__pyx_v_rng) {
double __pyx_v_expterm;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
1013: cdef double expterm
+1014: if delta <= 0:
__pyx_t_1 = (__pyx_v_delta <= 0);
if (__pyx_t_1) {
/* … */
}
+1015: return 1
__pyx_r = 1;
goto __pyx_L0;
+1016: expterm = exp(-(<double>delta) * invtemp)
__pyx_v_expterm = exp(((-((double)__pyx_v_delta)) * __pyx_v_invtemp));
+1017: if rng_uniform(rng) < expterm:
__pyx_t_1 = (__pyx_f_5pimms_15mega_crank_fast_rng_uniform(__pyx_v_rng) < __pyx_v_expterm);
if (__pyx_t_1) {
/* … */
}
+1018: return 1
__pyx_r = 1;
goto __pyx_L0;
+1019: return 0
__pyx_r = 0; goto __pyx_L0;
1020:
1021:
1022: # ---- move proposals using a per-thread PRNG (mirror the _c versions) ----
+1023: @cython.wraparound(False)
static CYTHON_INLINE int __pyx_f_5pimms_15mega_crank_fast_single_bead_crank_cp(int __pyx_v_ox, int __pyx_v_oy, int __pyx_v_oz, __Pyx_memviewslice __pyx_v_grid, int __pyx_v_XDIM, int __pyx_v_YDIM, int __pyx_v_ZDIM, unsigned PY_LONG_LONG *__pyx_v_rng, int *__pyx_v_out) {
int __pyx_v_x_off;
int __pyx_v_y_off;
int __pyx_v_z_off;
int __pyx_v_local_x;
int __pyx_v_local_y;
int __pyx_v_local_z;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
1024: @cython.boundscheck(False)
1025: cdef inline int single_bead_crank_cp(int ox, int oy, int oz,
1026: NUMPY_INT_TYPE[:, :, :] grid,
1027: int XDIM, int YDIM, int ZDIM,
1028: unsigned long long* rng, int* out) noexcept nogil:
+1029: cdef int x_off = rng_randint(rng, 0, 2) - 1
__pyx_v_x_off = (__pyx_f_5pimms_15mega_crank_fast_rng_randint(__pyx_v_rng, 0, 2) - 1);
+1030: cdef int y_off = rng_randint(rng, 0, 2) - 1
__pyx_v_y_off = (__pyx_f_5pimms_15mega_crank_fast_rng_randint(__pyx_v_rng, 0, 2) - 1);
+1031: cdef int z_off = rng_randint(rng, 0, 2) - 1
__pyx_v_z_off = (__pyx_f_5pimms_15mega_crank_fast_rng_randint(__pyx_v_rng, 0, 2) - 1);
+1032: cdef int local_x = pbc_correction(ox + x_off, XDIM)
__pyx_v_local_x = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_ox + __pyx_v_x_off), __pyx_v_XDIM);
+1033: cdef int local_y = pbc_correction(oy + y_off, YDIM)
__pyx_v_local_y = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_oy + __pyx_v_y_off), __pyx_v_YDIM);
+1034: cdef int local_z = pbc_correction(oz + z_off, ZDIM)
__pyx_v_local_z = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_oz + __pyx_v_z_off), __pyx_v_ZDIM);
+1035: if grid[local_x, local_y, local_z] > 0:
__pyx_t_1 = __pyx_v_local_x;
__pyx_t_2 = __pyx_v_local_y;
__pyx_t_3 = __pyx_v_local_z;
__pyx_t_4 = ((*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_1 * __pyx_v_grid.strides[0]) ) + __pyx_t_2 * __pyx_v_grid.strides[1]) ) + __pyx_t_3 * __pyx_v_grid.strides[2]) ))) > 0);
if (__pyx_t_4) {
/* … */
}
+1036: out[0] = -1
(__pyx_v_out[0]) = -1;
+1037: out[1] = 0
(__pyx_v_out[1]) = 0;
+1038: out[2] = 0
(__pyx_v_out[2]) = 0;
+1039: return 0
__pyx_r = 0;
goto __pyx_L0;
+1040: out[0] = local_x
(__pyx_v_out[0]) = __pyx_v_local_x;
+1041: out[1] = local_y
(__pyx_v_out[1]) = __pyx_v_local_y;
+1042: out[2] = local_z
(__pyx_v_out[2]) = __pyx_v_local_z;
+1043: return 1
__pyx_r = 1; goto __pyx_L0;
1044:
1045:
+1046: @cython.wraparound(False)
static CYTHON_INLINE int __pyx_f_5pimms_15mega_crank_fast_crank_it_cp(int __pyx_v_N_side_x, int __pyx_v_N_side_y, int __pyx_v_N_side_z, int __pyx_v_C_side_x, int __pyx_v_C_side_y, int __pyx_v_C_side_z, __Pyx_memviewslice __pyx_v_grid, int __pyx_v_XDIM, int __pyx_v_YDIM, int __pyx_v_ZDIM, unsigned PY_LONG_LONG *__pyx_v_rng, int *__pyx_v_out) {
int __pyx_v_x_min;
int __pyx_v_x_max;
int __pyx_v_y_min;
int __pyx_v_y_max;
int __pyx_v_z_min;
int __pyx_v_z_max;
int __pyx_v_local_x;
int __pyx_v_local_y;
int __pyx_v_local_z;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast.crank_it_cp", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
return __pyx_r;
}
1047: @cython.boundscheck(False)
1048: cdef inline int crank_it_cp(int N_side_x, int N_side_y, int N_side_z,
1049: int C_side_x, int C_side_y, int C_side_z,
1050: NUMPY_INT_TYPE[:, :, :] grid,
1051: int XDIM, int YDIM, int ZDIM,
1052: unsigned long long* rng, int* out) noexcept nogil:
1053: cdef int x_min, x_max, y_min, y_max, z_min, z_max
1054: cdef int local_x, local_y, local_z
1055:
+1056: if abs(N_side_x - C_side_x) > 2:
__pyx_t_1 = abs((__pyx_v_N_side_x - __pyx_v_C_side_x)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1056, __pyx_L1_error)
__pyx_t_2 = (__pyx_t_1 > 2);
if (__pyx_t_2) {
/* … */
}
+1057: if N_side_x > C_side_x:
__pyx_t_2 = (__pyx_v_N_side_x > __pyx_v_C_side_x);
if (__pyx_t_2) {
/* … */
goto __pyx_L4;
}
+1058: C_side_x = C_side_x + XDIM
__pyx_v_C_side_x = (__pyx_v_C_side_x + __pyx_v_XDIM);
1059: else:
+1060: N_side_x = N_side_x + XDIM
/*else*/ {
__pyx_v_N_side_x = (__pyx_v_N_side_x + __pyx_v_XDIM);
}
__pyx_L4:;
+1061: if abs(N_side_y - C_side_y) > 2:
__pyx_t_1 = abs((__pyx_v_N_side_y - __pyx_v_C_side_y)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1061, __pyx_L1_error)
__pyx_t_2 = (__pyx_t_1 > 2);
if (__pyx_t_2) {
/* … */
}
+1062: if N_side_y > C_side_y:
__pyx_t_2 = (__pyx_v_N_side_y > __pyx_v_C_side_y);
if (__pyx_t_2) {
/* … */
goto __pyx_L6;
}
+1063: C_side_y = C_side_y + YDIM
__pyx_v_C_side_y = (__pyx_v_C_side_y + __pyx_v_YDIM);
1064: else:
+1065: N_side_y = N_side_y + YDIM
/*else*/ {
__pyx_v_N_side_y = (__pyx_v_N_side_y + __pyx_v_YDIM);
}
__pyx_L6:;
+1066: if abs(N_side_z - C_side_z) > 2:
__pyx_t_1 = abs((__pyx_v_N_side_z - __pyx_v_C_side_z)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1066, __pyx_L1_error)
__pyx_t_2 = (__pyx_t_1 > 2);
if (__pyx_t_2) {
/* … */
}
+1067: if N_side_z > C_side_z:
__pyx_t_2 = (__pyx_v_N_side_z > __pyx_v_C_side_z);
if (__pyx_t_2) {
/* … */
goto __pyx_L8;
}
+1068: C_side_z = C_side_z + ZDIM
__pyx_v_C_side_z = (__pyx_v_C_side_z + __pyx_v_ZDIM);
1069: else:
+1070: N_side_z = N_side_z + ZDIM
/*else*/ {
__pyx_v_N_side_z = (__pyx_v_N_side_z + __pyx_v_ZDIM);
}
__pyx_L8:;
1071:
+1072: x_min = int_max(N_side_x - 1, C_side_x - 1)
__pyx_v_x_min = __pyx_f_5pimms_15mega_crank_fast_int_max((__pyx_v_N_side_x - 1), (__pyx_v_C_side_x - 1));
+1073: x_max = int_min(N_side_x + 1, C_side_x + 1)
__pyx_v_x_max = __pyx_f_5pimms_15mega_crank_fast_int_min((__pyx_v_N_side_x + 1), (__pyx_v_C_side_x + 1));
+1074: y_min = int_max(N_side_y - 1, C_side_y - 1)
__pyx_v_y_min = __pyx_f_5pimms_15mega_crank_fast_int_max((__pyx_v_N_side_y - 1), (__pyx_v_C_side_y - 1));
+1075: y_max = int_min(N_side_y + 1, C_side_y + 1)
__pyx_v_y_max = __pyx_f_5pimms_15mega_crank_fast_int_min((__pyx_v_N_side_y + 1), (__pyx_v_C_side_y + 1));
+1076: z_min = int_max(N_side_z - 1, C_side_z - 1)
__pyx_v_z_min = __pyx_f_5pimms_15mega_crank_fast_int_max((__pyx_v_N_side_z - 1), (__pyx_v_C_side_z - 1));
+1077: z_max = int_min(N_side_z + 1, C_side_z + 1)
__pyx_v_z_max = __pyx_f_5pimms_15mega_crank_fast_int_min((__pyx_v_N_side_z + 1), (__pyx_v_C_side_z + 1));
1078:
+1079: local_x = pbc_correction((x_min + rng_randint(rng, 1, (x_max - x_min + 1)) - 1), XDIM)
__pyx_v_local_x = __pyx_f_5pimms_15mega_crank_fast_pbc_correction(((__pyx_v_x_min + __pyx_f_5pimms_15mega_crank_fast_rng_randint(__pyx_v_rng, 1, ((__pyx_v_x_max - __pyx_v_x_min) + 1))) - 1), __pyx_v_XDIM);
+1080: local_y = pbc_correction((y_min + rng_randint(rng, 1, (y_max - y_min + 1)) - 1), YDIM)
__pyx_v_local_y = __pyx_f_5pimms_15mega_crank_fast_pbc_correction(((__pyx_v_y_min + __pyx_f_5pimms_15mega_crank_fast_rng_randint(__pyx_v_rng, 1, ((__pyx_v_y_max - __pyx_v_y_min) + 1))) - 1), __pyx_v_YDIM);
+1081: local_z = pbc_correction((z_min + rng_randint(rng, 1, (z_max - z_min + 1)) - 1), ZDIM)
__pyx_v_local_z = __pyx_f_5pimms_15mega_crank_fast_pbc_correction(((__pyx_v_z_min + __pyx_f_5pimms_15mega_crank_fast_rng_randint(__pyx_v_rng, 1, ((__pyx_v_z_max - __pyx_v_z_min) + 1))) - 1), __pyx_v_ZDIM);
1082:
+1083: if grid[local_x, local_y, local_z] > 0:
__pyx_t_3 = __pyx_v_local_x;
__pyx_t_4 = __pyx_v_local_y;
__pyx_t_5 = __pyx_v_local_z;
__pyx_t_2 = ((*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_3 * __pyx_v_grid.strides[0]) ) + __pyx_t_4 * __pyx_v_grid.strides[1]) ) + __pyx_t_5 * __pyx_v_grid.strides[2]) ))) > 0);
if (__pyx_t_2) {
/* … */
}
+1084: out[0] = -1
(__pyx_v_out[0]) = -1;
+1085: out[1] = 0
(__pyx_v_out[1]) = 0;
+1086: out[2] = 0
(__pyx_v_out[2]) = 0;
+1087: return 0
__pyx_r = 0;
goto __pyx_L0;
+1088: out[0] = local_x
(__pyx_v_out[0]) = __pyx_v_local_x;
+1089: out[1] = local_y
(__pyx_v_out[1]) = __pyx_v_local_y;
+1090: out[2] = local_z
(__pyx_v_out[2]) = __pyx_v_local_z;
+1091: return 1
__pyx_r = 1; goto __pyx_L0;
1092:
1093:
1094: # ---- per-block worker (runs entirely without the GIL) ---------------
+1095: @cython.wraparound(False)
static void __pyx_f_5pimms_15mega_crank_fast_run_block(int __pyx_v_b, __Pyx_memviewslice __pyx_v_ids, __Pyx_memviewslice __pyx_v_starts, __Pyx_memviewslice __pyx_v_attempts, __Pyx_memviewslice __pyx_v_seeds, __Pyx_memviewslice __pyx_v_blo_x, __Pyx_memviewslice __pyx_v_blo_y, __Pyx_memviewslice __pyx_v_blo_z, int __pyx_v_Lx, int __pyx_v_Ly, int __pyx_v_Lz, int __pyx_v_nbx, int __pyx_v_nby, int __pyx_v_nbz, int __pyx_v_shift_x, int __pyx_v_shift_y, int __pyx_v_shift_z, int __pyx_v_W, __Pyx_memviewslice __pyx_v_grid, __Pyx_memviewslice __pyx_v_type_grid, __Pyx_memviewslice __pyx_v_idx_to_bead, __Pyx_memviewslice __pyx_v_interaction_table, __Pyx_memviewslice __pyx_v_LR_interaction_table, __Pyx_memviewslice __pyx_v_SLR_interaction_table, __Pyx_memviewslice __pyx_v_angle_lookup, float __pyx_v_invtemp, int __pyx_v_XDIM, int __pyx_v_YDIM, int __pyx_v_ZDIM, int __pyx_v_hardwall, __Pyx_memviewslice __pyx_v_out_delta, __Pyx_memviewslice __pyx_v_out_accepted) {
int __pyx_v_lo;
int __pyx_v_hi;
int __pyx_v_n_block;
unsigned PY_LONG_LONG __pyx_v_rng;
long __pyx_v_dsum;
int __pyx_v_acc;
CYTHON_UNUSED int __pyx_v_k;
int __pyx_v_pick;
int __pyx_v_bead_index;
int __pyx_v_beadflag;
int __pyx_v_gx;
int __pyx_v_gy;
int __pyx_v_gz;
int __pyx_v_sx;
int __pyx_v_sy;
int __pyx_v_sz;
int __pyx_v_wx;
int __pyx_v_wy;
int __pyx_v_wz;
int __pyx_v_old0;
int __pyx_v_old1;
int __pyx_v_old2;
int __pyx_v_new_position[3];
int __pyx_v_anchor0;
int __pyx_v_anchor1;
int __pyx_v_anchor2;
int __pyx_v_Nx;
int __pyx_v_Ny;
int __pyx_v_Nz;
int __pyx_v_Cx;
int __pyx_v_Cy;
int __pyx_v_Cz;
long __pyx_v_delta_energy;
long __pyx_v_delta_angle_energy;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast.run_block", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
}
1096: @cython.boundscheck(False)
1097: cdef void run_block(int b,
1098: int[::1] ids, int[::1] starts, int[::1] attempts,
1099: unsigned long long[::1] seeds,
1100: int[::1] blo_x, int[::1] blo_y, int[::1] blo_z,
1101: int Lx, int Ly, int Lz,
1102: int nbx, int nby, int nbz,
1103: int shift_x, int shift_y, int shift_z, int W,
1104: NUMPY_INT_TYPE[:, :, :] grid,
1105: NUMPY_INT_TYPE[:, :, :] type_grid,
1106: NUMPY_INT_TYPE_long[:, :] idx_to_bead,
1107: NUMPY_INT_TYPE[:, :] interaction_table,
1108: NUMPY_INT_TYPE[:, :] LR_interaction_table,
1109: NUMPY_INT_TYPE[:, :] SLR_interaction_table,
1110: NUMPY_INT_TYPE[:, :, :, :, :, :, :] angle_lookup,
1111: float invtemp, int XDIM, int YDIM, int ZDIM, int hardwall,
1112: long[::1] out_delta, int[::1] out_accepted) noexcept nogil:
1113:
+1114: cdef int lo = starts[b]
__pyx_t_1 = __pyx_v_b; __pyx_v_lo = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_starts.data) + __pyx_t_1)) )));
+1115: cdef int hi = starts[b + 1]
__pyx_t_1 = (__pyx_v_b + 1); __pyx_v_hi = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_starts.data) + __pyx_t_1)) )));
+1116: cdef int n_block = hi - lo
__pyx_v_n_block = (__pyx_v_hi - __pyx_v_lo);
+1117: out_delta[b] = 0
__pyx_t_1 = __pyx_v_b; *((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_out_delta.data) + __pyx_t_1)) )) = 0;
+1118: out_accepted[b] = 0
__pyx_t_1 = __pyx_v_b; *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_out_accepted.data) + __pyx_t_1)) )) = 0;
+1119: if n_block <= 0:
__pyx_t_2 = (__pyx_v_n_block <= 0);
if (__pyx_t_2) {
/* … */
}
+1120: return
goto __pyx_L0;
1121:
+1122: cdef unsigned long long rng = seeds[b]
__pyx_t_1 = __pyx_v_b; __pyx_v_rng = (*((unsigned PY_LONG_LONG *) ( /* dim=0 */ ((char *) (((unsigned PY_LONG_LONG *) __pyx_v_seeds.data) + __pyx_t_1)) )));
+1123: cdef long dsum = 0
__pyx_v_dsum = 0;
+1124: cdef int acc = 0
__pyx_v_acc = 0;
1125: cdef int k, pick, bead_index, beadflag, ok
1126: cdef int gx, gy, gz, sx, sy, sz, wx, wy, wz
1127: cdef int old0, old1, old2
1128: cdef int new_position[3]
1129: cdef int anchor0, anchor1, anchor2
1130: cdef int Nx, Ny, Nz, Cx, Cy, Cz
1131: cdef long delta_energy, delta_angle_energy
1132:
+1133: for k in range(attempts[b]):
__pyx_t_1 = __pyx_v_b;
__pyx_t_3 = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_attempts.data) + __pyx_t_1)) )));
__pyx_t_4 = __pyx_t_3;
for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
__pyx_v_k = __pyx_t_5;
1134: # pick a random bead from this block's list
+1135: pick = lo + <int>(rng_uniform(&rng) * n_block)
__pyx_v_pick = (__pyx_v_lo + ((int)(__pyx_f_5pimms_15mega_crank_fast_rng_uniform((&__pyx_v_rng)) * __pyx_v_n_block)));
+1136: if pick >= hi:
__pyx_t_2 = (__pyx_v_pick >= __pyx_v_hi);
if (__pyx_t_2) {
/* … */
}
+1137: pick = hi - 1
__pyx_v_pick = (__pyx_v_hi - 1);
+1138: bead_index = ids[pick]
__pyx_t_1 = __pyx_v_pick;
__pyx_v_bead_index = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_ids.data) + __pyx_t_1)) )));
1139:
+1140: gx = idx_to_bead[bead_index, 5]
__pyx_t_1 = __pyx_v_bead_index;
__pyx_t_6 = 5;
__pyx_v_gx = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+1141: gy = idx_to_bead[bead_index, 6]
__pyx_t_6 = __pyx_v_bead_index;
__pyx_t_1 = 6;
__pyx_v_gy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
+1142: gz = idx_to_bead[bead_index, 7]
__pyx_t_1 = __pyx_v_bead_index;
__pyx_t_6 = 7;
__pyx_v_gz = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
1143:
1144: # re-test interior membership against the CURRENT position (a bead may
1145: # have drifted to the frozen halo during this block's run). Skip if not
1146: # at least W inside every blocked dimension - guarantees the footprint
1147: # stays in-block.
+1148: if nbx > 1:
__pyx_t_2 = (__pyx_v_nbx > 1);
if (__pyx_t_2) {
/* … */
}
+1149: sx = (gx - shift_x + XDIM) % XDIM
__pyx_t_7 = ((__pyx_v_gx - __pyx_v_shift_x) + __pyx_v_XDIM);
if (unlikely(__pyx_v_XDIM == 0)) {
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__PYX_ERR(0, 1149, __pyx_L1_error)
}
__pyx_v_sx = __Pyx_mod_int(__pyx_t_7, __pyx_v_XDIM, 0);
+1150: wx = sx - blo_x[b]
__pyx_t_6 = __pyx_v_b;
__pyx_v_wx = (__pyx_v_sx - (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_blo_x.data) + __pyx_t_6)) ))));
+1151: if wx < W or wx >= Lx - W:
__pyx_t_8 = (__pyx_v_wx < __pyx_v_W);
if (!__pyx_t_8) {
} else {
__pyx_t_2 = __pyx_t_8;
goto __pyx_L9_bool_binop_done;
}
__pyx_t_8 = (__pyx_v_wx >= (__pyx_v_Lx - __pyx_v_W));
__pyx_t_2 = __pyx_t_8;
__pyx_L9_bool_binop_done:;
if (__pyx_t_2) {
/* … */
}
+1152: continue
goto __pyx_L4_continue;
+1153: if nby > 1:
__pyx_t_2 = (__pyx_v_nby > 1);
if (__pyx_t_2) {
/* … */
}
+1154: sy = (gy - shift_y + YDIM) % YDIM
__pyx_t_7 = ((__pyx_v_gy - __pyx_v_shift_y) + __pyx_v_YDIM);
if (unlikely(__pyx_v_YDIM == 0)) {
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__PYX_ERR(0, 1154, __pyx_L1_error)
}
__pyx_v_sy = __Pyx_mod_int(__pyx_t_7, __pyx_v_YDIM, 0);
+1155: wy = sy - blo_y[b]
__pyx_t_6 = __pyx_v_b;
__pyx_v_wy = (__pyx_v_sy - (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_blo_y.data) + __pyx_t_6)) ))));
+1156: if wy < W or wy >= Ly - W:
__pyx_t_8 = (__pyx_v_wy < __pyx_v_W);
if (!__pyx_t_8) {
} else {
__pyx_t_2 = __pyx_t_8;
goto __pyx_L13_bool_binop_done;
}
__pyx_t_8 = (__pyx_v_wy >= (__pyx_v_Ly - __pyx_v_W));
__pyx_t_2 = __pyx_t_8;
__pyx_L13_bool_binop_done:;
if (__pyx_t_2) {
/* … */
}
+1157: continue
goto __pyx_L4_continue;
+1158: if nbz > 1:
__pyx_t_2 = (__pyx_v_nbz > 1);
if (__pyx_t_2) {
/* … */
}
+1159: sz = (gz - shift_z + ZDIM) % ZDIM
__pyx_t_7 = ((__pyx_v_gz - __pyx_v_shift_z) + __pyx_v_ZDIM);
if (unlikely(__pyx_v_ZDIM == 0)) {
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__PYX_ERR(0, 1159, __pyx_L1_error)
}
__pyx_v_sz = __Pyx_mod_int(__pyx_t_7, __pyx_v_ZDIM, 0);
+1160: wz = sz - blo_z[b]
__pyx_t_6 = __pyx_v_b;
__pyx_v_wz = (__pyx_v_sz - (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_blo_z.data) + __pyx_t_6)) ))));
+1161: if wz < W or wz >= Lz - W:
__pyx_t_8 = (__pyx_v_wz < __pyx_v_W);
if (!__pyx_t_8) {
} else {
__pyx_t_2 = __pyx_t_8;
goto __pyx_L17_bool_binop_done;
}
__pyx_t_8 = (__pyx_v_wz >= (__pyx_v_Lz - __pyx_v_W));
__pyx_t_2 = __pyx_t_8;
__pyx_L17_bool_binop_done:;
if (__pyx_t_2) {
/* … */
}
+1162: continue
goto __pyx_L4_continue;
1163:
+1164: old0 = gx
__pyx_v_old0 = __pyx_v_gx;
+1165: old1 = gy
__pyx_v_old1 = __pyx_v_gy;
+1166: old2 = gz
__pyx_v_old2 = __pyx_v_gz;
+1167: beadflag = idx_to_bead[bead_index, 0]
__pyx_t_6 = __pyx_v_bead_index;
__pyx_t_1 = 0;
__pyx_v_beadflag = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
1168:
+1169: if beadflag == 0:
switch (__pyx_v_beadflag) {
case 0:
/* … */
break;
case 1:
+1170: single_bead_crank_cp(old0, old1, old2, grid, XDIM, YDIM, ZDIM, &rng, new_position)
(void)(__pyx_f_5pimms_15mega_crank_fast_single_bead_crank_cp(__pyx_v_old0, __pyx_v_old1, __pyx_v_old2, __pyx_v_grid, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, (&__pyx_v_rng), __pyx_v_new_position));
1171:
+1172: elif beadflag == 1:
break;
case 3:
+1173: anchor0 = idx_to_bead[bead_index + 1, 5]
__pyx_t_1 = (__pyx_v_bead_index + 1);
__pyx_t_6 = 5;
__pyx_v_anchor0 = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+1174: anchor1 = idx_to_bead[bead_index + 1, 6]
__pyx_t_6 = (__pyx_v_bead_index + 1);
__pyx_t_1 = 6;
__pyx_v_anchor1 = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
+1175: anchor2 = idx_to_bead[bead_index + 1, 7]
__pyx_t_1 = (__pyx_v_bead_index + 1);
__pyx_t_6 = 7;
__pyx_v_anchor2 = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+1176: single_bead_crank_cp(anchor0, anchor1, anchor2, grid, XDIM, YDIM, ZDIM, &rng, new_position)
(void)(__pyx_f_5pimms_15mega_crank_fast_single_bead_crank_cp(__pyx_v_anchor0, __pyx_v_anchor1, __pyx_v_anchor2, __pyx_v_grid, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, (&__pyx_v_rng), __pyx_v_new_position));
+1177: if hardwall == 1:
__pyx_t_2 = (__pyx_v_hardwall == 1);
if (__pyx_t_2) {
/* … */
}
+1178: if straddle_pair(new_position[0], new_position[1], new_position[2],
if (__pyx_t_2) {
/* … */
}
+1179: anchor0, anchor1, anchor2) == 1:
__pyx_t_2 = (__pyx_f_5pimms_15mega_crank_fast_straddle_pair((__pyx_v_new_position[0]), (__pyx_v_new_position[1]), (__pyx_v_new_position[2]), __pyx_v_anchor0, __pyx_v_anchor1, __pyx_v_anchor2) == 1);
+1180: continue
goto __pyx_L4_continue;
1181:
+1182: elif beadflag == 3:
break;
default:
+1183: anchor0 = idx_to_bead[bead_index - 1, 5]
__pyx_t_6 = (__pyx_v_bead_index - 1);
__pyx_t_1 = 5;
__pyx_v_anchor0 = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
+1184: anchor1 = idx_to_bead[bead_index - 1, 6]
__pyx_t_1 = (__pyx_v_bead_index - 1);
__pyx_t_6 = 6;
__pyx_v_anchor1 = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+1185: anchor2 = idx_to_bead[bead_index - 1, 7]
__pyx_t_6 = (__pyx_v_bead_index - 1);
__pyx_t_1 = 7;
__pyx_v_anchor2 = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
+1186: single_bead_crank_cp(anchor0, anchor1, anchor2, grid, XDIM, YDIM, ZDIM, &rng, new_position)
(void)(__pyx_f_5pimms_15mega_crank_fast_single_bead_crank_cp(__pyx_v_anchor0, __pyx_v_anchor1, __pyx_v_anchor2, __pyx_v_grid, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, (&__pyx_v_rng), __pyx_v_new_position));
+1187: if hardwall == 1:
__pyx_t_2 = (__pyx_v_hardwall == 1);
if (__pyx_t_2) {
/* … */
}
+1188: if straddle_pair(anchor0, anchor1, anchor2,
if (__pyx_t_2) {
/* … */
}
+1189: new_position[0], new_position[1], new_position[2]) == 1:
__pyx_t_2 = (__pyx_f_5pimms_15mega_crank_fast_straddle_pair(__pyx_v_anchor0, __pyx_v_anchor1, __pyx_v_anchor2, (__pyx_v_new_position[0]), (__pyx_v_new_position[1]), (__pyx_v_new_position[2])) == 1);
+1190: continue
goto __pyx_L4_continue;
1191:
1192: else:
+1193: Nx = idx_to_bead[bead_index - 1, 5]
__pyx_t_1 = (__pyx_v_bead_index - 1);
__pyx_t_6 = 5;
__pyx_v_Nx = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+1194: Ny = idx_to_bead[bead_index - 1, 6]
__pyx_t_6 = (__pyx_v_bead_index - 1);
__pyx_t_1 = 6;
__pyx_v_Ny = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
+1195: Nz = idx_to_bead[bead_index - 1, 7]
__pyx_t_1 = (__pyx_v_bead_index - 1);
__pyx_t_6 = 7;
__pyx_v_Nz = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+1196: Cx = idx_to_bead[bead_index + 1, 5]
__pyx_t_6 = (__pyx_v_bead_index + 1);
__pyx_t_1 = 5;
__pyx_v_Cx = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
+1197: Cy = idx_to_bead[bead_index + 1, 6]
__pyx_t_1 = (__pyx_v_bead_index + 1);
__pyx_t_6 = 6;
__pyx_v_Cy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+1198: Cz = idx_to_bead[bead_index + 1, 7]
__pyx_t_6 = (__pyx_v_bead_index + 1);
__pyx_t_1 = 7;
__pyx_v_Cz = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
+1199: crank_it_cp(Nx, Ny, Nz, Cx, Cy, Cz, grid, XDIM, YDIM, ZDIM, &rng, new_position)
(void)(__pyx_f_5pimms_15mega_crank_fast_crank_it_cp(__pyx_v_Nx, __pyx_v_Ny, __pyx_v_Nz, __pyx_v_Cx, __pyx_v_Cy, __pyx_v_Cz, __pyx_v_grid, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, (&__pyx_v_rng), __pyx_v_new_position));
+1200: if hardwall == 1:
__pyx_t_2 = (__pyx_v_hardwall == 1);
if (__pyx_t_2) {
/* … */
}
break;
}
+1201: if (straddle_pair(Nx, Ny, Nz,
if (__pyx_t_2) {
/* … */
}
+1202: new_position[0], new_position[1], new_position[2]) == 1
__pyx_t_8 = (__pyx_f_5pimms_15mega_crank_fast_straddle_pair(__pyx_v_Nx, __pyx_v_Ny, __pyx_v_Nz, (__pyx_v_new_position[0]), (__pyx_v_new_position[1]), (__pyx_v_new_position[2])) == 1);
if (!__pyx_t_8) {
} else {
__pyx_t_2 = __pyx_t_8;
goto __pyx_L25_bool_binop_done;
}
1203: or straddle_pair(new_position[0], new_position[1], new_position[2],
+1204: Cx, Cy, Cz) == 1):
__pyx_t_8 = (__pyx_f_5pimms_15mega_crank_fast_straddle_pair((__pyx_v_new_position[0]), (__pyx_v_new_position[1]), (__pyx_v_new_position[2]), __pyx_v_Cx, __pyx_v_Cy, __pyx_v_Cz) == 1);
__pyx_t_2 = __pyx_t_8;
__pyx_L25_bool_binop_done:;
+1205: continue
goto __pyx_L4_continue;
1206:
+1207: if not new_position[0] < 0:
__pyx_t_2 = (!((__pyx_v_new_position[0]) < 0));
if (__pyx_t_2) {
/* … */
}
__pyx_L4_continue:;
}
1208: # DETAILED BALANCE: reject any move whose NEW position would leave
1209: # the movable interior (i.e. land in the frozen halo). A halo bead is
1210: # never selected, so it could never make the reverse move; allowing
1211: # the forward move (interior -> halo) without the reverse breaks
1212: # detailed balance and biases the sampled ensemble. Rejecting these
1213: # out-of-interior proposals (the bead simply stays put) keeps the
1214: # movable region closed and the move set symmetric.
+1215: if nbx > 1:
__pyx_t_2 = (__pyx_v_nbx > 1);
if (__pyx_t_2) {
/* … */
}
+1216: sx = (new_position[0] - shift_x + XDIM) % XDIM
__pyx_t_7 = (((__pyx_v_new_position[0]) - __pyx_v_shift_x) + __pyx_v_XDIM);
if (unlikely(__pyx_v_XDIM == 0)) {
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__PYX_ERR(0, 1216, __pyx_L1_error)
}
__pyx_v_sx = __Pyx_mod_int(__pyx_t_7, __pyx_v_XDIM, 0);
+1217: wx = sx - blo_x[b]
__pyx_t_1 = __pyx_v_b;
__pyx_v_wx = (__pyx_v_sx - (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_blo_x.data) + __pyx_t_1)) ))));
+1218: if wx < W or wx >= Lx - W:
__pyx_t_8 = (__pyx_v_wx < __pyx_v_W);
if (!__pyx_t_8) {
} else {
__pyx_t_2 = __pyx_t_8;
goto __pyx_L30_bool_binop_done;
}
__pyx_t_8 = (__pyx_v_wx >= (__pyx_v_Lx - __pyx_v_W));
__pyx_t_2 = __pyx_t_8;
__pyx_L30_bool_binop_done:;
if (__pyx_t_2) {
/* … */
}
+1219: continue
goto __pyx_L4_continue;
+1220: if nby > 1:
__pyx_t_2 = (__pyx_v_nby > 1);
if (__pyx_t_2) {
/* … */
}
+1221: sy = (new_position[1] - shift_y + YDIM) % YDIM
__pyx_t_7 = (((__pyx_v_new_position[1]) - __pyx_v_shift_y) + __pyx_v_YDIM);
if (unlikely(__pyx_v_YDIM == 0)) {
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__PYX_ERR(0, 1221, __pyx_L1_error)
}
__pyx_v_sy = __Pyx_mod_int(__pyx_t_7, __pyx_v_YDIM, 0);
+1222: wy = sy - blo_y[b]
__pyx_t_1 = __pyx_v_b;
__pyx_v_wy = (__pyx_v_sy - (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_blo_y.data) + __pyx_t_1)) ))));
+1223: if wy < W or wy >= Ly - W:
__pyx_t_8 = (__pyx_v_wy < __pyx_v_W);
if (!__pyx_t_8) {
} else {
__pyx_t_2 = __pyx_t_8;
goto __pyx_L34_bool_binop_done;
}
__pyx_t_8 = (__pyx_v_wy >= (__pyx_v_Ly - __pyx_v_W));
__pyx_t_2 = __pyx_t_8;
__pyx_L34_bool_binop_done:;
if (__pyx_t_2) {
/* … */
}
+1224: continue
goto __pyx_L4_continue;
+1225: if nbz > 1:
__pyx_t_2 = (__pyx_v_nbz > 1);
if (__pyx_t_2) {
/* … */
}
+1226: sz = (new_position[2] - shift_z + ZDIM) % ZDIM
__pyx_t_7 = (((__pyx_v_new_position[2]) - __pyx_v_shift_z) + __pyx_v_ZDIM);
if (unlikely(__pyx_v_ZDIM == 0)) {
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__PYX_ERR(0, 1226, __pyx_L1_error)
}
__pyx_v_sz = __Pyx_mod_int(__pyx_t_7, __pyx_v_ZDIM, 0);
+1227: wz = sz - blo_z[b]
__pyx_t_1 = __pyx_v_b;
__pyx_v_wz = (__pyx_v_sz - (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_blo_z.data) + __pyx_t_1)) ))));
+1228: if wz < W or wz >= Lz - W:
__pyx_t_8 = (__pyx_v_wz < __pyx_v_W);
if (!__pyx_t_8) {
} else {
__pyx_t_2 = __pyx_t_8;
goto __pyx_L38_bool_binop_done;
}
__pyx_t_8 = (__pyx_v_wz >= (__pyx_v_Lz - __pyx_v_W));
__pyx_t_2 = __pyx_t_8;
__pyx_L38_bool_binop_done:;
if (__pyx_t_2) {
/* … */
}
+1229: continue
goto __pyx_L4_continue;
1230:
+1231: delta_energy = get_energy_change_c(grid, type_grid,
__pyx_v_delta_energy = __pyx_f_5pimms_15mega_crank_fast_get_energy_change_c(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_old0, __pyx_v_old1, __pyx_v_old2, (__pyx_v_new_position[0]), (__pyx_v_new_position[1]), (__pyx_v_new_position[2]), (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_hardwall);
1232: old0, old1, old2,
1233: new_position[0], new_position[1], new_position[2],
+1234: idx_to_bead[bead_index, 1],
__pyx_t_1 = __pyx_v_bead_index;
__pyx_t_6 = 1;
1235: interaction_table, LR_interaction_table,
1236: SLR_interaction_table,
1237: XDIM, YDIM, ZDIM, hardwall)
+1238: delta_angle_energy = get_angle_energy_change_c(bead_index, idx_to_bead,
__pyx_v_delta_angle_energy = __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_c(__pyx_v_bead_index, __pyx_v_idx_to_bead, __pyx_v_new_position, __pyx_v_angle_lookup);
1239: new_position, angle_lookup)
+1240: if accept_p(invtemp, delta_energy + delta_angle_energy, &rng) == 1:
__pyx_t_2 = (__pyx_f_5pimms_15mega_crank_fast_accept_p(__pyx_v_invtemp, (__pyx_v_delta_energy + __pyx_v_delta_angle_energy), (&__pyx_v_rng)) == 1);
if (__pyx_t_2) {
/* … */
}
+1241: grid[old0, old1, old2] = 0
__pyx_t_6 = __pyx_v_old0;
__pyx_t_1 = __pyx_v_old1;
__pyx_t_9 = __pyx_v_old2;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_6 * __pyx_v_grid.strides[0]) ) + __pyx_t_1 * __pyx_v_grid.strides[1]) ) + __pyx_t_9 * __pyx_v_grid.strides[2]) )) = 0;
+1242: grid[new_position[0], new_position[1], new_position[2]] = idx_to_bead[bead_index, 4]
__pyx_t_9 = __pyx_v_bead_index;
__pyx_t_1 = 4;
__pyx_t_6 = (__pyx_v_new_position[0]);
__pyx_t_10 = (__pyx_v_new_position[1]);
__pyx_t_11 = (__pyx_v_new_position[2]);
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_6 * __pyx_v_grid.strides[0]) ) + __pyx_t_10 * __pyx_v_grid.strides[1]) ) + __pyx_t_11 * __pyx_v_grid.strides[2]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_9 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
+1243: type_grid[new_position[0], new_position[1], new_position[2]] = type_grid[old0, old1, old2]
__pyx_t_1 = __pyx_v_old0;
__pyx_t_9 = __pyx_v_old1;
__pyx_t_11 = __pyx_v_old2;
__pyx_t_10 = (__pyx_v_new_position[0]);
__pyx_t_6 = (__pyx_v_new_position[1]);
__pyx_t_12 = (__pyx_v_new_position[2]);
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_10 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_6 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_12 * __pyx_v_type_grid.strides[2]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_1 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_9 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_11 * __pyx_v_type_grid.strides[2]) )));
+1244: type_grid[old0, old1, old2] = 0
__pyx_t_11 = __pyx_v_old0;
__pyx_t_9 = __pyx_v_old1;
__pyx_t_1 = __pyx_v_old2;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_11 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_9 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_1 * __pyx_v_type_grid.strides[2]) )) = 0;
+1245: idx_to_bead[bead_index, 5] = new_position[0]
__pyx_t_1 = __pyx_v_bead_index;
__pyx_t_9 = 5;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_9 * __pyx_v_idx_to_bead.strides[1]) )) = (__pyx_v_new_position[0]);
+1246: idx_to_bead[bead_index, 6] = new_position[1]
__pyx_t_9 = __pyx_v_bead_index;
__pyx_t_1 = 6;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_9 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )) = (__pyx_v_new_position[1]);
+1247: idx_to_bead[bead_index, 7] = new_position[2]
__pyx_t_1 = __pyx_v_bead_index;
__pyx_t_9 = 7;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_9 * __pyx_v_idx_to_bead.strides[1]) )) = (__pyx_v_new_position[2]);
+1248: dsum = dsum + delta_energy + delta_angle_energy
__pyx_v_dsum = ((__pyx_v_dsum + __pyx_v_delta_energy) + __pyx_v_delta_angle_energy);
+1249: acc = acc + 1
__pyx_v_acc = (__pyx_v_acc + 1);
1250:
+1251: out_delta[b] = dsum
__pyx_t_9 = __pyx_v_b; *((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_out_delta.data) + __pyx_t_9)) )) = __pyx_v_dsum;
+1252: out_accepted[b] = acc
__pyx_t_9 = __pyx_v_b; *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_out_accepted.data) + __pyx_t_9)) )) = __pyx_v_acc;
1253:
1254:
+1255: def _choose_nb(int DIM, int W, int cap):
/* Python wrapper */ static PyObject *__pyx_pw_5pimms_15mega_crank_fast_5_choose_nb(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_5pimms_15mega_crank_fast_4_choose_nb, "Pick the number of blocks along one dimension: large enough blocks\n (>= 4W so the movable interior is a healthy fraction) and at most `cap`."); static PyMethodDef __pyx_mdef_5pimms_15mega_crank_fast_5_choose_nb = {"_choose_nb", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5pimms_15mega_crank_fast_5_choose_nb, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_5pimms_15mega_crank_fast_4_choose_nb}; static PyObject *__pyx_pw_5pimms_15mega_crank_fast_5_choose_nb(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { int __pyx_v_DIM; int __pyx_v_W; int __pyx_v_cap; #if !CYTHON_METH_FASTCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_choose_nb (wrapper)", 0); #if !CYTHON_METH_FASTCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_DIM,&__pyx_mstate_global->__pyx_n_u_W,&__pyx_mstate_global->__pyx_n_u_cap,0}; PyObject* values[3] = {0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 1255, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 3: values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1255, __pyx_L3_error) CYTHON_FALLTHROUGH; case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1255, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1255, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_choose_nb", 0) < (0)) __PYX_ERR(0, 1255, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 3; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_choose_nb", 1, 3, 3, i); __PYX_ERR(0, 1255, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 3)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1255, __pyx_L3_error) values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1255, __pyx_L3_error) values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1255, __pyx_L3_error) } __pyx_v_DIM = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_DIM == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1255, __pyx_L3_error) __pyx_v_W = __Pyx_PyLong_As_int(values[1]); if (unlikely((__pyx_v_W == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1255, __pyx_L3_error) __pyx_v_cap = __Pyx_PyLong_As_int(values[2]); if (unlikely((__pyx_v_cap == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1255, __pyx_L3_error) } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_choose_nb", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 1255, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("pimms.mega_crank_fast._choose_nb", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5pimms_15mega_crank_fast_4_choose_nb(__pyx_self, __pyx_v_DIM, __pyx_v_W, __pyx_v_cap); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5pimms_15mega_crank_fast_4_choose_nb(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_DIM, int __pyx_v_W, int __pyx_v_cap) { int __pyx_v_max_nb; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("pimms.mega_crank_fast._choose_nb", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_5pimms_15mega_crank_fast_5_choose_nb, 0, __pyx_mstate_global->__pyx_n_u_choose_nb, NULL, __pyx_mstate_global->__pyx_n_u_pimms_mega_crank_fast, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[8])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1255, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_choose_nb, __pyx_t_4) < (0)) __PYX_ERR(0, 1255, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
1256: """Pick the number of blocks along one dimension: large enough blocks
1257: (>= 4W so the movable interior is a healthy fraction) and at most `cap`."""
+1258: cdef int max_nb = DIM // (4 * W)
__pyx_t_1 = (4 * __pyx_v_W);
if (unlikely(__pyx_t_1 == 0)) {
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__PYX_ERR(0, 1258, __pyx_L1_error)
}
else if (sizeof(long) == sizeof(long) && (!(((long)-1) > 0)) && unlikely(__pyx_t_1 == (long)-1) && unlikely(__Pyx_UNARY_NEG_WOULD_OVERFLOW(__pyx_v_DIM))) {
PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
__PYX_ERR(0, 1258, __pyx_L1_error)
}
__pyx_v_max_nb = __Pyx_div_long(__pyx_v_DIM, __pyx_t_1, 0);
+1259: if max_nb < 1:
__pyx_t_2 = (__pyx_v_max_nb < 1);
if (__pyx_t_2) {
/* … */
}
+1260: return 1
__Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_mstate_global->__pyx_int_1); __pyx_r = __pyx_mstate_global->__pyx_int_1; goto __pyx_L0;
+1261: if max_nb > cap:
__pyx_t_2 = (__pyx_v_max_nb > __pyx_v_cap);
if (__pyx_t_2) {
/* … */
}
+1262: return cap
__Pyx_XDECREF(__pyx_r); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_cap); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1262, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0;
+1263: return max_nb
__Pyx_XDECREF(__pyx_r); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_max_nb); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1263, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0;
1264:
1265:
+1266: @cython.wraparound(False)
/* Python wrapper */ static PyObject *__pyx_pw_5pimms_15mega_crank_fast_7mega_crank_parallel(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_5pimms_15mega_crank_fast_6mega_crank_parallel, "\n Parallel checkerboard crankshaft kernel.\n\n Same role as mega_crank() but distributes the substep work across\n `num_threads` OpenMP threads using a frozen-halo block decomposition.\n Does NOT take a pre-built bead_selector (it selects beads per block); does\n NOT preserve the serial RNG stream. `frozen_mask` is a per-bead int array\n (1 = bead belongs to a frozen chain) - frozen beads are excluded from the\n movable set (never proposed for a move) but remain in the grid as fixed,\n energy-contributing obstacles. Returns (energy, accepted_moves).\n\n Falls back to a single-block (effectively serial) sweep when the box is too\n small to decompose.\n "); static PyMethodDef __pyx_mdef_5pimms_15mega_crank_fast_7mega_crank_parallel = {"mega_crank_parallel", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5pimms_15mega_crank_fast_7mega_crank_parallel, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_5pimms_15mega_crank_fast_6mega_crank_parallel}; static PyObject *__pyx_pw_5pimms_15mega_crank_fast_7mega_crank_parallel(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { __Pyx_memviewslice __pyx_v_grid = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_type_grid = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_idx_to_bead = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_LR_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_SLR_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_angle_lookup = { 0, 0, { 0 }, { 0 }, { 0 } }; long __pyx_v_energy; float __pyx_v_invtemp; int __pyx_v_nsteps; int __pyx_v_passed_seed; int __pyx_v_hardwall; int __pyx_v_num_threads; __Pyx_memviewslice __pyx_v_frozen_mask = { 0, 0, { 0 }, { 0 }, { 0 } }; #if !CYTHON_METH_FASTCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("mega_crank_parallel (wrapper)", 0); #if !CYTHON_METH_FASTCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_grid,&__pyx_mstate_global->__pyx_n_u_type_grid,&__pyx_mstate_global->__pyx_n_u_idx_to_bead,&__pyx_mstate_global->__pyx_n_u_interaction_table,&__pyx_mstate_global->__pyx_n_u_LR_interaction_table,&__pyx_mstate_global->__pyx_n_u_SLR_interaction_table,&__pyx_mstate_global->__pyx_n_u_angle_lookup,&__pyx_mstate_global->__pyx_n_u_energy,&__pyx_mstate_global->__pyx_n_u_invtemp,&__pyx_mstate_global->__pyx_n_u_nsteps,&__pyx_mstate_global->__pyx_n_u_passed_seed,&__pyx_mstate_global->__pyx_n_u_hardwall,&__pyx_mstate_global->__pyx_n_u_num_threads,&__pyx_mstate_global->__pyx_n_u_frozen_mask,0}; PyObject* values[14] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 1266, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 14: values[13] = __Pyx_ArgRef_FASTCALL(__pyx_args, 13); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[13])) __PYX_ERR(0, 1266, __pyx_L3_error) CYTHON_FALLTHROUGH; case 13: values[12] = __Pyx_ArgRef_FASTCALL(__pyx_args, 12); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[12])) __PYX_ERR(0, 1266, __pyx_L3_error) CYTHON_FALLTHROUGH; case 12: values[11] = __Pyx_ArgRef_FASTCALL(__pyx_args, 11); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[11])) __PYX_ERR(0, 1266, __pyx_L3_error) CYTHON_FALLTHROUGH; case 11: values[10] = __Pyx_ArgRef_FASTCALL(__pyx_args, 10); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[10])) __PYX_ERR(0, 1266, __pyx_L3_error) CYTHON_FALLTHROUGH; case 10: values[9] = __Pyx_ArgRef_FASTCALL(__pyx_args, 9); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[9])) __PYX_ERR(0, 1266, __pyx_L3_error) CYTHON_FALLTHROUGH; case 9: values[8] = __Pyx_ArgRef_FASTCALL(__pyx_args, 8); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[8])) __PYX_ERR(0, 1266, __pyx_L3_error) CYTHON_FALLTHROUGH; case 8: values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 1266, __pyx_L3_error) CYTHON_FALLTHROUGH; case 7: values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 1266, __pyx_L3_error) CYTHON_FALLTHROUGH; case 6: values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 1266, __pyx_L3_error) CYTHON_FALLTHROUGH; case 5: values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 1266, __pyx_L3_error) CYTHON_FALLTHROUGH; case 4: values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 1266, __pyx_L3_error) CYTHON_FALLTHROUGH; case 3: values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1266, __pyx_L3_error) CYTHON_FALLTHROUGH; case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1266, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1266, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "mega_crank_parallel", 0) < (0)) __PYX_ERR(0, 1266, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 14; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("mega_crank_parallel", 1, 14, 14, i); __PYX_ERR(0, 1266, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 14)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1266, __pyx_L3_error) values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1266, __pyx_L3_error) values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1266, __pyx_L3_error) values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 1266, __pyx_L3_error) values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 1266, __pyx_L3_error) values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 1266, __pyx_L3_error) values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 1266, __pyx_L3_error) values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 1266, __pyx_L3_error) values[8] = __Pyx_ArgRef_FASTCALL(__pyx_args, 8); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[8])) __PYX_ERR(0, 1266, __pyx_L3_error) values[9] = __Pyx_ArgRef_FASTCALL(__pyx_args, 9); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[9])) __PYX_ERR(0, 1266, __pyx_L3_error) values[10] = __Pyx_ArgRef_FASTCALL(__pyx_args, 10); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[10])) __PYX_ERR(0, 1266, __pyx_L3_error) values[11] = __Pyx_ArgRef_FASTCALL(__pyx_args, 11); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[11])) __PYX_ERR(0, 1266, __pyx_L3_error) values[12] = __Pyx_ArgRef_FASTCALL(__pyx_args, 12); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[12])) __PYX_ERR(0, 1266, __pyx_L3_error) values[13] = __Pyx_ArgRef_FASTCALL(__pyx_args, 13); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[13])) __PYX_ERR(0, 1266, __pyx_L3_error) } __pyx_v_grid = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_grid.memview)) __PYX_ERR(0, 1268, __pyx_L3_error) __pyx_v_type_grid = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_type_grid.memview)) __PYX_ERR(0, 1269, __pyx_L3_error) __pyx_v_idx_to_bead = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_idx_to_bead.memview)) __PYX_ERR(0, 1270, __pyx_L3_error) __pyx_v_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interaction_table.memview)) __PYX_ERR(0, 1271, __pyx_L3_error) __pyx_v_LR_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_LR_interaction_table.memview)) __PYX_ERR(0, 1272, __pyx_L3_error) __pyx_v_SLR_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_SLR_interaction_table.memview)) __PYX_ERR(0, 1273, __pyx_L3_error) __pyx_v_angle_lookup = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsdsdsdsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_angle_lookup.memview)) __PYX_ERR(0, 1274, __pyx_L3_error) __pyx_v_energy = __Pyx_PyLong_As_long(values[7]); if (unlikely((__pyx_v_energy == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1275, __pyx_L3_error) __pyx_v_invtemp = __Pyx_PyFloat_AsFloat(values[8]); if (unlikely((__pyx_v_invtemp == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 1276, __pyx_L3_error) __pyx_v_nsteps = __Pyx_PyLong_As_int(values[9]); if (unlikely((__pyx_v_nsteps == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1277, __pyx_L3_error) __pyx_v_passed_seed = __Pyx_PyLong_As_int(values[10]); if (unlikely((__pyx_v_passed_seed == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1278, __pyx_L3_error) __pyx_v_hardwall = __Pyx_PyLong_As_int(values[11]); if (unlikely((__pyx_v_hardwall == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1279, __pyx_L3_error) __pyx_v_num_threads = __Pyx_PyLong_As_int(values[12]); if (unlikely((__pyx_v_num_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1280, __pyx_L3_error) __pyx_v_frozen_mask = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[13], PyBUF_WRITABLE); if (unlikely(!__pyx_v_frozen_mask.memview)) __PYX_ERR(0, 1281, __pyx_L3_error) } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("mega_crank_parallel", 1, 14, 14, __pyx_nargs); __PYX_ERR(0, 1266, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __PYX_XCLEAR_MEMVIEW(&__pyx_v_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_type_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_idx_to_bead, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_LR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_SLR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_angle_lookup, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_frozen_mask, 1); __Pyx_AddTraceback("pimms.mega_crank_fast.mega_crank_parallel", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5pimms_15mega_crank_fast_6mega_crank_parallel(__pyx_self, __pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_angle_lookup, __pyx_v_energy, __pyx_v_invtemp, __pyx_v_nsteps, __pyx_v_passed_seed, __pyx_v_hardwall, __pyx_v_num_threads, __pyx_v_frozen_mask); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __PYX_XCLEAR_MEMVIEW(&__pyx_v_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_type_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_idx_to_bead, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_LR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_SLR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_angle_lookup, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_frozen_mask, 1); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ static PyObject *__pyx_pf_5pimms_15mega_crank_fast_6mega_crank_parallel(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_grid, __Pyx_memviewslice __pyx_v_type_grid, __Pyx_memviewslice __pyx_v_idx_to_bead, __Pyx_memviewslice __pyx_v_interaction_table, __Pyx_memviewslice __pyx_v_LR_interaction_table, __Pyx_memviewslice __pyx_v_SLR_interaction_table, __Pyx_memviewslice __pyx_v_angle_lookup, long __pyx_v_energy, float __pyx_v_invtemp, int __pyx_v_nsteps, int __pyx_v_passed_seed, int __pyx_v_hardwall, int __pyx_v_num_threads, __Pyx_memviewslice __pyx_v_frozen_mask) { struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct__mega_crank_parallel *__pyx_cur_scope; int __pyx_v_XDIM; int __pyx_v_YDIM; int __pyx_v_ZDIM; PyObject *__pyx_v_idx_np = NULL; int __pyx_v_R_int; int __pyx_v_cap; int __pyx_v_nbx; int __pyx_v_nby; int __pyx_v_nbz; int __pyx_v_Lx; int __pyx_v_Ly; int __pyx_v_Lz; int __pyx_v_num_blocks; PyObject *__pyx_v_rstate = NULL; int __pyx_v_shift_x; int __pyx_v_shift_y; int __pyx_v_shift_z; PyObject *__pyx_v_gx = NULL; PyObject *__pyx_v_gy = NULL; PyObject *__pyx_v_gz = NULL; PyObject *__pyx_v_dim_block = 0; PyObject *__pyx_v_bxj = NULL; PyObject *__pyx_v_byj = NULL; PyObject *__pyx_v_bzj = NULL; PyObject *__pyx_v_movable = NULL; PyObject *__pyx_v_block_of_bead = NULL; PyObject *__pyx_v_sel = NULL; PyObject *__pyx_v_sel_blocks = NULL; PyObject *__pyx_v_order = NULL; PyObject *__pyx_v_ids = NULL; PyObject *__pyx_v_sorted_blocks = NULL; PyObject *__pyx_v_counts = NULL; PyObject *__pyx_v_starts = NULL; PyObject *__pyx_v_total_interior = NULL; PyObject *__pyx_v_attempts = NULL; PyObject *__pyx_v_bix = NULL; PyObject *__pyx_v_biy = NULL; PyObject *__pyx_v_biz = NULL; PyObject *__pyx_v_blo_x = NULL; PyObject *__pyx_v_blo_y = NULL; PyObject *__pyx_v_blo_z = NULL; PyObject *__pyx_v_seeds = NULL; PyObject *__pyx_v_out_delta = NULL; PyObject *__pyx_v_out_accepted = NULL; __Pyx_memviewslice __pyx_v_ids_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_starts_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_attempts_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_seeds_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_blo_x_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_blo_y_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_blo_z_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_out_delta_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_out_accepted_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; int __pyx_v_b; CYTHON_UNUSED int __pyx_v_nthreads; long __pyx_v_total_delta; int __pyx_v_total_accepted; PyObject *__pyx_r = NULL; __pyx_cur_scope = (struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct__mega_crank_parallel *)__pyx_tp_new_5pimms_15mega_crank_fast___pyx_scope_struct__mega_crank_parallel(__pyx_mstate_global->__pyx_ptype_5pimms_15mega_crank_fast___pyx_scope_struct__mega_crank_parallel, __pyx_mstate_global->__pyx_empty_tuple, NULL); if (unlikely(!__pyx_cur_scope)) { __pyx_cur_scope = ((struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct__mega_crank_parallel *)Py_None); __Pyx_INCREF(Py_None); __PYX_ERR(0, 1266, __pyx_L1_error) } else { __Pyx_GOTREF((PyObject *)__pyx_cur_scope); } /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_11); __Pyx_XDECREF(__pyx_t_12); __Pyx_XDECREF(__pyx_t_13); __Pyx_XDECREF(__pyx_t_14); __Pyx_XDECREF(__pyx_t_16); __PYX_XCLEAR_MEMVIEW(&__pyx_t_17, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_t_18, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_t_19, 1); __Pyx_AddTraceback("pimms.mega_crank_fast.mega_crank_parallel", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_idx_np); __Pyx_XDECREF(__pyx_v_rstate); __Pyx_XDECREF(__pyx_v_gx); __Pyx_XDECREF(__pyx_v_gy); __Pyx_XDECREF(__pyx_v_gz); __Pyx_XDECREF(__pyx_v_dim_block); __Pyx_XDECREF(__pyx_v_bxj); __Pyx_XDECREF(__pyx_v_byj); __Pyx_XDECREF(__pyx_v_bzj); __Pyx_XDECREF(__pyx_v_movable); __Pyx_XDECREF(__pyx_v_block_of_bead); __Pyx_XDECREF(__pyx_v_sel); __Pyx_XDECREF(__pyx_v_sel_blocks); __Pyx_XDECREF(__pyx_v_order); __Pyx_XDECREF(__pyx_v_ids); __Pyx_XDECREF(__pyx_v_sorted_blocks); __Pyx_XDECREF(__pyx_v_counts); __Pyx_XDECREF(__pyx_v_starts); __Pyx_XDECREF(__pyx_v_total_interior); __Pyx_XDECREF(__pyx_v_attempts); __Pyx_XDECREF(__pyx_v_bix); __Pyx_XDECREF(__pyx_v_biy); __Pyx_XDECREF(__pyx_v_biz); __Pyx_XDECREF(__pyx_v_blo_x); __Pyx_XDECREF(__pyx_v_blo_y); __Pyx_XDECREF(__pyx_v_blo_z); __Pyx_XDECREF(__pyx_v_seeds); __Pyx_XDECREF(__pyx_v_out_delta); __Pyx_XDECREF(__pyx_v_out_accepted); __PYX_XCLEAR_MEMVIEW(&__pyx_v_ids_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_starts_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_attempts_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_seeds_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_blo_x_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_blo_y_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_blo_z_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_out_delta_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_out_accepted_mv, 1); __Pyx_DECREF((PyObject *)__pyx_cur_scope); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_5pimms_15mega_crank_fast_7mega_crank_parallel, 0, __pyx_mstate_global->__pyx_n_u_mega_crank_parallel, NULL, __pyx_mstate_global->__pyx_n_u_pimms_mega_crank_fast, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[9])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1266, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_mega_crank_parallel, __pyx_t_4) < (0)) __PYX_ERR(0, 1266, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* … */ struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct__mega_crank_parallel { PyObject_HEAD int __pyx_v_W; int __pyx_v_num_beads; };
1267: @cython.boundscheck(False)
1268: def mega_crank_parallel(NUMPY_INT_TYPE[:, :, :] grid,
1269: NUMPY_INT_TYPE[:, :, :] type_grid,
1270: NUMPY_INT_TYPE_long[:, :] idx_to_bead,
1271: NUMPY_INT_TYPE[:, :] interaction_table,
1272: NUMPY_INT_TYPE[:, :] LR_interaction_table,
1273: NUMPY_INT_TYPE[:, :] SLR_interaction_table,
1274: NUMPY_INT_TYPE[:, :, :, :, :, :, :] angle_lookup,
1275: long energy,
1276: float invtemp,
1277: int nsteps,
1278: int passed_seed,
1279: int hardwall,
1280: int num_threads,
1281: NUMPY_INT_TYPE[::1] frozen_mask):
1282: """
1283: Parallel checkerboard crankshaft kernel.
1284:
1285: Same role as mega_crank() but distributes the substep work across
1286: `num_threads` OpenMP threads using a frozen-halo block decomposition.
1287: Does NOT take a pre-built bead_selector (it selects beads per block); does
1288: NOT preserve the serial RNG stream. `frozen_mask` is a per-bead int array
1289: (1 = bead belongs to a frozen chain) - frozen beads are excluded from the
1290: movable set (never proposed for a move) but remain in the grid as fixed,
1291: energy-contributing obstacles. Returns (energy, accepted_moves).
1292:
1293: Falls back to a single-block (effectively serial) sweep when the box is too
1294: small to decompose.
1295: """
+1296: cdef int XDIM = grid.shape[0]
__pyx_v_XDIM = (__pyx_v_grid.shape[0]);
+1297: cdef int YDIM = grid.shape[1]
__pyx_v_YDIM = (__pyx_v_grid.shape[1]);
+1298: cdef int ZDIM = grid.shape[2]
__pyx_v_ZDIM = (__pyx_v_grid.shape[2]);
+1299: cdef int num_beads = idx_to_bead.shape[0]
__pyx_cur_scope->__pyx_v_num_beads = (__pyx_v_idx_to_bead.shape[0]);
1300:
1301: # interaction radius -> halo width W = R_int + 2 (2 covers the max bead
1302: # displacement of a terminal/internal move; R_int covers the energy read).
+1303: idx_np = np.asarray(idx_to_bead)
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1303, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_asarray); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1303, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_idx_to_bead, 2, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1303, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1303, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_idx_np = __pyx_t_1; __pyx_t_1 = 0;
+1304: cdef int R_int = 3 if np.any(idx_np[:, 1] == 1) else 1
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1304, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_any); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1304, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_idx_np, __pyx_mstate_global->__pyx_tuple[1]); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1304, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyLong_EqObjC(__pyx_t_3, __pyx_mstate_global->__pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1304, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1304, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1304, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_8) { __pyx_t_6 = 3; } else { __pyx_t_6 = 1; } __pyx_v_R_int = __pyx_t_6; /* … */ __pyx_mstate_global->__pyx_tuple[1] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_slice[0], __pyx_mstate_global->__pyx_int_1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[1])) __PYX_ERR(0, 1304, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[1]); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[1]);
+1305: cdef int W = R_int + 2
__pyx_cur_scope->__pyx_v_W = (__pyx_v_R_int + 2);
1306:
1307: # block counts per dim. IMPORTANT: this depends ONLY on box geometry (and W),
1308: # NOT on num_threads, so the decomposition - and therefore the result - is
1309: # identical for any thread count. Threads only change how fast the fixed set
1310: # of independent blocks is processed. cap=4 -> up to 4^3=64 blocks, which is
1311: # plenty for dynamic load-balancing across typical core counts.
+1312: cdef int cap = 4
__pyx_v_cap = 4;
+1313: cdef int nbx = _choose_nb(XDIM, W, cap)
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_choose_nb); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1313, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_XDIM); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1313, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_W); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1313, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_cap); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1313, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_t_4, __pyx_t_3, __pyx_t_9}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1313, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1313, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_nbx = __pyx_t_6;
+1314: cdef int nby = _choose_nb(YDIM, W, cap)
__pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_choose_nb); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1314, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_YDIM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1314, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_W); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1314, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_cap); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1314, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[4] = {__pyx_t_7, __pyx_t_3, __pyx_t_4, __pyx_t_2}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1314, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1314, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_nby = __pyx_t_6;
+1315: cdef int nbz = _choose_nb(ZDIM, W, cap)
__pyx_t_9 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_choose_nb); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1315, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_ZDIM); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1315, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_W); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1315, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_cap); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1315, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_9); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[4] = {__pyx_t_9, __pyx_t_4, __pyx_t_3, __pyx_t_7}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1315, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1315, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_nbz = __pyx_t_6;
+1316: cdef int Lx = XDIM // nbx
if (unlikely(__pyx_v_nbx == 0)) {
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__PYX_ERR(0, 1316, __pyx_L1_error)
}
else if (sizeof(int) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_nbx == (int)-1) && unlikely(__Pyx_UNARY_NEG_WOULD_OVERFLOW(__pyx_v_XDIM))) {
PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
__PYX_ERR(0, 1316, __pyx_L1_error)
}
__pyx_v_Lx = __Pyx_div_int(__pyx_v_XDIM, __pyx_v_nbx, 0);
+1317: cdef int Ly = YDIM // nby
if (unlikely(__pyx_v_nby == 0)) {
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__PYX_ERR(0, 1317, __pyx_L1_error)
}
else if (sizeof(int) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_nby == (int)-1) && unlikely(__Pyx_UNARY_NEG_WOULD_OVERFLOW(__pyx_v_YDIM))) {
PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
__PYX_ERR(0, 1317, __pyx_L1_error)
}
__pyx_v_Ly = __Pyx_div_int(__pyx_v_YDIM, __pyx_v_nby, 0);
+1318: cdef int Lz = ZDIM // nbz
if (unlikely(__pyx_v_nbz == 0)) {
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__PYX_ERR(0, 1318, __pyx_L1_error)
}
else if (sizeof(int) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_nbz == (int)-1) && unlikely(__Pyx_UNARY_NEG_WOULD_OVERFLOW(__pyx_v_ZDIM))) {
PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
__PYX_ERR(0, 1318, __pyx_L1_error)
}
__pyx_v_Lz = __Pyx_div_int(__pyx_v_ZDIM, __pyx_v_nbz, 0);
+1319: cdef int num_blocks = nbx * nby * nbz
__pyx_v_num_blocks = ((__pyx_v_nbx * __pyx_v_nby) * __pyx_v_nbz);
1320:
1321: # reproducible shifts + per-block seeds derived from passed_seed
+1322: rstate = np.random.RandomState(passed_seed & 0x7FFFFFFF)
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1322, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_random); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1322, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_2 = __pyx_t_3; __Pyx_INCREF(__pyx_t_2); __pyx_t_7 = __Pyx_PyLong_From_long((__pyx_v_passed_seed & 0x7FFFFFFF)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1322, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_7}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_RandomState, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1322, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_rstate = __pyx_t_1; __pyx_t_1 = 0;
+1323: cdef int shift_x = int(rstate.randint(0, Lx)) if nbx > 1 else 0
__pyx_t_8 = (__pyx_v_nbx > 1);
if (__pyx_t_8) {
__pyx_t_3 = __pyx_v_rstate;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_Lx); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1323, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_mstate_global->__pyx_int_0, __pyx_t_7};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_randint, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1323, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_t_7 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1323, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_10 = __Pyx_PyLong_As_int(__pyx_t_7); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1323, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__pyx_t_6 = __pyx_t_10;
} else {
__pyx_t_6 = 0;
}
__pyx_v_shift_x = __pyx_t_6;
+1324: cdef int shift_y = int(rstate.randint(0, Ly)) if nby > 1 else 0
__pyx_t_8 = (__pyx_v_nby > 1);
if (__pyx_t_8) {
__pyx_t_1 = __pyx_v_rstate;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_Ly); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1324, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_mstate_global->__pyx_int_0, __pyx_t_3};
__pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_randint, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1324, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
}
__pyx_t_3 = __Pyx_PyNumber_Int(__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1324, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__pyx_t_10 = __Pyx_PyLong_As_int(__pyx_t_3); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1324, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_6 = __pyx_t_10;
} else {
__pyx_t_6 = 0;
}
__pyx_v_shift_y = __pyx_t_6;
+1325: cdef int shift_z = int(rstate.randint(0, Lz)) if nbz > 1 else 0
__pyx_t_8 = (__pyx_v_nbz > 1);
if (__pyx_t_8) {
__pyx_t_7 = __pyx_v_rstate;
__Pyx_INCREF(__pyx_t_7);
__pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_Lz); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1325, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_mstate_global->__pyx_int_0, __pyx_t_1};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_randint, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1325, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__pyx_t_1 = __Pyx_PyNumber_Int(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1325, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_10 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1325, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_6 = __pyx_t_10;
} else {
__pyx_t_6 = 0;
}
__pyx_v_shift_z = __pyx_t_6;
1326:
1327: # ---- bucket beads into blocks (interior beads only) -----------------
+1328: gx = idx_np[:, 5].astype(np.int64)
__pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_idx_np, __pyx_mstate_global->__pyx_tuple[2]); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1328, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_3 = __pyx_t_7; __Pyx_INCREF(__pyx_t_3); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1328, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1328, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_4}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1328, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_gx = __pyx_t_1; __pyx_t_1 = 0; /* … */ __pyx_mstate_global->__pyx_tuple[2] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_slice[0], __pyx_mstate_global->__pyx_int_5); if (unlikely(!__pyx_mstate_global->__pyx_tuple[2])) __PYX_ERR(0, 1328, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[2]); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[2]);
+1329: gy = idx_np[:, 6].astype(np.int64)
__pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_idx_np, __pyx_mstate_global->__pyx_tuple[3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1329, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_7 = __pyx_t_4; __Pyx_INCREF(__pyx_t_7); __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1329, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1329, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_2}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1329, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_gy = __pyx_t_1; __pyx_t_1 = 0; /* … */ __pyx_mstate_global->__pyx_tuple[3] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_slice[0], __pyx_mstate_global->__pyx_int_6); if (unlikely(!__pyx_mstate_global->__pyx_tuple[3])) __PYX_ERR(0, 1329, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[3]); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[3]);
+1330: gz = idx_np[:, 7].astype(np.int64)
__pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_idx_np, __pyx_mstate_global->__pyx_tuple[4]); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1330, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __pyx_t_2; __Pyx_INCREF(__pyx_t_4); __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1330, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1330, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_3}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1330, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_gz = __pyx_t_1; __pyx_t_1 = 0; /* … */ __pyx_mstate_global->__pyx_tuple[4] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_slice[0], __pyx_mstate_global->__pyx_int_7); if (unlikely(!__pyx_mstate_global->__pyx_tuple[4])) __PYX_ERR(0, 1330, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[4]); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[4]);
1331:
1332: # per-dim block index (-1 => frozen: in halo or remainder or wrong region)
+1333: def dim_block(g, nb, L, DIM, shift):
/* Python wrapper */
static PyObject *__pyx_pw_5pimms_15mega_crank_fast_19mega_crank_parallel_1dim_block(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_5pimms_15mega_crank_fast_19mega_crank_parallel_1dim_block = {"dim_block", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5pimms_15mega_crank_fast_19mega_crank_parallel_1dim_block, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5pimms_15mega_crank_fast_19mega_crank_parallel_1dim_block(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_g = 0;
PyObject *__pyx_v_nb = 0;
PyObject *__pyx_v_L = 0;
PyObject *__pyx_v_DIM = 0;
PyObject *__pyx_v_shift = 0;
#if !CYTHON_METH_FASTCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("dim_block (wrapper)", 0);
#if !CYTHON_METH_FASTCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_g,&__pyx_mstate_global->__pyx_n_u_nb,&__pyx_mstate_global->__pyx_n_u_L,&__pyx_mstate_global->__pyx_n_u_DIM,&__pyx_mstate_global->__pyx_n_u_shift,0};
PyObject* values[5] = {0,0,0,0,0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 1333, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 5:
values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 1333, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 4:
values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 1333, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 3:
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1333, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1333, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1333, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "dim_block", 0) < (0)) __PYX_ERR(0, 1333, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 5; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("dim_block", 1, 5, 5, i); __PYX_ERR(0, 1333, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 5)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1333, __pyx_L3_error)
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1333, __pyx_L3_error)
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1333, __pyx_L3_error)
values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 1333, __pyx_L3_error)
values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 1333, __pyx_L3_error)
}
__pyx_v_g = values[0];
__pyx_v_nb = values[1];
__pyx_v_L = values[2];
__pyx_v_DIM = values[3];
__pyx_v_shift = values[4];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("dim_block", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 1333, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("pimms.mega_crank_fast.mega_crank_parallel.dim_block", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_5pimms_15mega_crank_fast_19mega_crank_parallel_dim_block(__pyx_self, __pyx_v_g, __pyx_v_nb, __pyx_v_L, __pyx_v_DIM, __pyx_v_shift);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_5pimms_15mega_crank_fast_19mega_crank_parallel_dim_block(PyObject *__pyx_self, PyObject *__pyx_v_g, PyObject *__pyx_v_nb, PyObject *__pyx_v_L, PyObject *__pyx_v_DIM, PyObject *__pyx_v_shift) {
struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct__mega_crank_parallel *__pyx_cur_scope;
struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct__mega_crank_parallel *__pyx_outer_scope;
PyObject *__pyx_v_s = NULL;
PyObject *__pyx_v_bj = NULL;
PyObject *__pyx_v_within = NULL;
PyObject *__pyx_v_bad = NULL;
PyObject *__pyx_r = NULL;
__pyx_outer_scope = (struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct__mega_crank_parallel *) __Pyx_CyFunction_GetClosure(__pyx_self);
__pyx_cur_scope = __pyx_outer_scope;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("pimms.mega_crank_fast.mega_crank_parallel.dim_block", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_s);
__Pyx_XDECREF(__pyx_v_bj);
__Pyx_XDECREF(__pyx_v_within);
__Pyx_XDECREF(__pyx_v_bad);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_5pimms_15mega_crank_fast_19mega_crank_parallel_1dim_block, 0, __pyx_mstate_global->__pyx_n_u_mega_crank_parallel_locals_dim_b, ((PyObject*)__pyx_cur_scope), __pyx_mstate_global->__pyx_n_u_pimms_mega_crank_fast, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1333, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_v_dim_block = __pyx_t_1;
__pyx_t_1 = 0;
+1334: if nb == 1:
__pyx_t_1 = (__Pyx_PyLong_BoolEqObjC(__pyx_v_nb, __pyx_mstate_global->__pyx_int_1, 1, 0)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1334, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+1335: return np.zeros(num_beads, dtype=np.int64) # whole dim = block 0
__Pyx_XDECREF(__pyx_r); __pyx_t_3 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1335, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_zeros); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1335, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_num_beads); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1335, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1335, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1335, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_3, __pyx_t_4}; __pyx_t_6 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1335, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_7, __pyx_t_6, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 1335, __pyx_L1_error) __pyx_t_2 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_6); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1335, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0;
+1336: s = (g - shift) % DIM
__pyx_t_2 = PyNumber_Subtract(__pyx_v_g, __pyx_v_shift); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1336, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = PyNumber_Remainder(__pyx_t_2, __pyx_v_DIM); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1336, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_s = __pyx_t_5; __pyx_t_5 = 0;
+1337: bj = s // L
__pyx_t_5 = PyNumber_FloorDivide(__pyx_v_s, __pyx_v_L); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1337, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_v_bj = __pyx_t_5; __pyx_t_5 = 0;
+1338: within = s - bj * L
__pyx_t_5 = PyNumber_Multiply(__pyx_v_bj, __pyx_v_L); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1338, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = PyNumber_Subtract(__pyx_v_s, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1338, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_within = __pyx_t_2; __pyx_t_2 = 0;
1339: # frozen if outside valid region (remainder) or inside the W halo
+1340: bad = (s >= nb * L) | (within < W) | (within >= L - W)
__pyx_t_2 = PyNumber_Multiply(__pyx_v_nb, __pyx_v_L); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1340, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = PyObject_RichCompare(__pyx_v_s, __pyx_t_2, Py_GE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1340, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_W); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1340, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = PyObject_RichCompare(__pyx_v_within, __pyx_t_2, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1340, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Or(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1340, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_W); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1340, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = PyNumber_Subtract(__pyx_v_L, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1340, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyObject_RichCompare(__pyx_v_within, __pyx_t_5, Py_GE); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1340, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyNumber_Or(__pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1340, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_bad = __pyx_t_5; __pyx_t_5 = 0;
+1341: bj = bj.copy()
__pyx_t_6 = __pyx_v_bj; __Pyx_INCREF(__pyx_t_6); __pyx_t_8 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL}; __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_copy, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1341, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } __Pyx_DECREF_SET(__pyx_v_bj, __pyx_t_5); __pyx_t_5 = 0;
+1342: bj[bad] = -1
if (unlikely((PyObject_SetItem(__pyx_v_bj, __pyx_v_bad, __pyx_mstate_global->__pyx_int_neg_1) < 0))) __PYX_ERR(0, 1342, __pyx_L1_error)
+1343: return bj
__Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_bj); __pyx_r = __pyx_v_bj; goto __pyx_L0;
1344:
+1345: bxj = dim_block(gx, nbx, Lx, XDIM, shift_x)
__pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_nbx); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1345, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_Lx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1345, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_XDIM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1345, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_shift_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1345, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_7 = __pyx_pf_5pimms_15mega_crank_fast_19mega_crank_parallel_dim_block(__pyx_v_dim_block, __pyx_v_gx, __pyx_t_1, __pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1345, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_bxj = __pyx_t_7; __pyx_t_7 = 0;
+1346: byj = dim_block(gy, nby, Ly, YDIM, shift_y)
__pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_nby); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1346, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_Ly); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1346, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_YDIM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1346, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_shift_y); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1346, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __pyx_pf_5pimms_15mega_crank_fast_19mega_crank_parallel_dim_block(__pyx_v_dim_block, __pyx_v_gy, __pyx_t_7, __pyx_t_4, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1346, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_byj = __pyx_t_1; __pyx_t_1 = 0;
+1347: bzj = dim_block(gz, nbz, Lz, ZDIM, shift_z)
__pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_nbz); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1347, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_Lz); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1347, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_ZDIM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1347, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_shift_z); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1347, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_7 = __pyx_pf_5pimms_15mega_crank_fast_19mega_crank_parallel_dim_block(__pyx_v_dim_block, __pyx_v_gz, __pyx_t_1, __pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1347, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_bzj = __pyx_t_7; __pyx_t_7 = 0;
1348:
1349: # a bead is movable iff it is in a block interior AND not frozen (frozen beads
1350: # stay in the grid as fixed obstacles but are never selected for a move)
+1351: movable = (bxj >= 0) & (byj >= 0) & (bzj >= 0) & (np.asarray(frozen_mask) == 0)
__pyx_t_7 = PyObject_RichCompare(__pyx_v_bxj, __pyx_mstate_global->__pyx_int_0, Py_GE); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1351, __pyx_L1_error) __pyx_t_4 = PyObject_RichCompare(__pyx_v_byj, __pyx_mstate_global->__pyx_int_0, Py_GE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1351, __pyx_L1_error) __pyx_t_3 = PyNumber_And(__pyx_t_7, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1351, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_RichCompare(__pyx_v_bzj, __pyx_mstate_global->__pyx_int_0, Py_GE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1351, __pyx_L1_error) __pyx_t_7 = PyNumber_And(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1351, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_3 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1351, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_asarray); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1351, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_frozen_mask, 1, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1351, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_1))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_1, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_2}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1351, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_1 = __Pyx_PyLong_EqObjC(__pyx_t_4, __pyx_mstate_global->__pyx_int_0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1351, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyNumber_And(__pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1351, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_movable = __pyx_t_4; __pyx_t_4 = 0;
+1352: block_of_bead = (bxj * nby * nbz + byj * nbz + bzj)
__pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_nby); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1352, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyNumber_Multiply(__pyx_v_bxj, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1352, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_nbz); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1352, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_7 = PyNumber_Multiply(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1352, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_nbz); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1352, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyNumber_Multiply(__pyx_v_byj, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1352, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyNumber_Add(__pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1352, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyNumber_Add(__pyx_t_4, __pyx_v_bzj); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1352, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_block_of_bead = __pyx_t_1; __pyx_t_1 = 0;
+1353: block_of_bead[~movable] = -1
__pyx_t_1 = PyNumber_Invert(__pyx_v_movable); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1353, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (unlikely((PyObject_SetItem(__pyx_v_block_of_bead, __pyx_t_1, __pyx_mstate_global->__pyx_int_neg_1) < 0))) __PYX_ERR(0, 1353, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
1354:
+1355: sel = np.nonzero(movable)[0].astype(np.int32)
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1355, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_nonzero); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1355, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_movable}; __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1355, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_7, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 0, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1355, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_4 = __pyx_t_9; __Pyx_INCREF(__pyx_t_4); __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1355, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1355, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_2}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1355, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_sel = __pyx_t_1; __pyx_t_1 = 0;
+1356: if sel.shape[0] == 0:
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_sel, __pyx_mstate_global->__pyx_n_u_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1356, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 0, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1356, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_8 = (__Pyx_PyLong_BoolEqObjC(__pyx_t_9, __pyx_mstate_global->__pyx_int_0, 0, 0)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1356, __pyx_L1_error) __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (__pyx_t_8) { /* … */ }
1357: # nothing movable this sweep (tiny box / unlucky shift) - no-op
+1358: return (energy, 0)
__Pyx_XDECREF(__pyx_r); __pyx_t_9 = __Pyx_PyLong_From_long(__pyx_v_energy); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1358, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1358, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_9); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_9) != (0)) __PYX_ERR(0, 1358, __pyx_L1_error); __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_0); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_mstate_global->__pyx_int_0) != (0)) __PYX_ERR(0, 1358, __pyx_L1_error); __pyx_t_9 = 0; __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0;
1359:
+1360: sel_blocks = block_of_bead[sel]
__pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_block_of_bead, __pyx_v_sel); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1360, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_sel_blocks = __pyx_t_1; __pyx_t_1 = 0;
+1361: order = np.argsort(sel_blocks, kind="stable")
__pyx_t_9 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1361, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_argsort); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1361, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_9); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_9, __pyx_v_sel_blocks}; __pyx_t_2 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1361, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_kind, __pyx_mstate_global->__pyx_n_u_stable, __pyx_t_2, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 1361, __pyx_L1_error) __pyx_t_1 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_2); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1361, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_order = __pyx_t_1; __pyx_t_1 = 0;
+1362: ids = sel[order].astype(np.int32)
__pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_sel, __pyx_v_order); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1362, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __pyx_t_2; __Pyx_INCREF(__pyx_t_4); __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1362, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1362, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1362, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_ids = __pyx_t_1; __pyx_t_1 = 0;
+1363: sorted_blocks = sel_blocks[order]
__pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_sel_blocks, __pyx_v_order); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1363, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_sorted_blocks = __pyx_t_1; __pyx_t_1 = 0;
1364:
+1365: counts = np.bincount(sorted_blocks, minlength=num_blocks).astype(np.int32)
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1365, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_bincount); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1365, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1365, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_4, __pyx_v_sorted_blocks}; __pyx_t_11 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1365, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_minlength, __pyx_t_9, __pyx_t_11, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 1365, __pyx_L1_error) __pyx_t_7 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_11); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1365, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } __pyx_t_2 = __pyx_t_7; __Pyx_INCREF(__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1365, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1365, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_11}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1365, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_counts = __pyx_t_1; __pyx_t_1 = 0;
+1366: starts = np.zeros(num_blocks + 1, dtype=np.int32)
__pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1366, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1366, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = __Pyx_PyLong_From_long((__pyx_v_num_blocks + 1)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1366, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1366, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1366, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_7, __pyx_t_11}; __pyx_t_3 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1366, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_9, __pyx_t_3, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 1366, __pyx_L1_error) __pyx_t_1 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_3); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1366, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_starts = __pyx_t_1; __pyx_t_1 = 0;
+1367: starts[1:] = np.cumsum(counts)
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1367, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_cumsum); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1367, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_counts}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1367, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } if (__Pyx_PyObject_SetSlice(__pyx_v_starts, __pyx_t_1, 1, 0, NULL, NULL, &__pyx_mstate_global->__pyx_slice[1], 1, 0, 0) < (0)) __PYX_ERR(0, 1367, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
1368:
1369: # distribute nsteps proportional to each block's movable bead count
+1370: total_interior = int(counts.sum())
__pyx_t_9 = __pyx_v_counts; __Pyx_INCREF(__pyx_t_9); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_9, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_sum, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1370, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_9 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1370, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_total_interior = ((PyObject*)__pyx_t_9); __pyx_t_9 = 0;
+1371: attempts = np.maximum(
__pyx_t_3 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1371, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_maximum); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1371, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+1372: (nsteps * counts.astype(np.int64) // max(total_interior, 1)), 0).astype(np.int32)
__pyx_t_11 = __Pyx_PyLong_From_int(__pyx_v_nsteps); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1372, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = __pyx_v_counts; __Pyx_INCREF(__pyx_t_12); __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1372, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1372, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_14}; __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1372, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_14 = PyNumber_Multiply(__pyx_t_11, __pyx_t_4); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1372, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_15 = 1; __Pyx_INCREF(__pyx_v_total_interior); __pyx_t_16 = __pyx_v_total_interior; __pyx_t_11 = __Pyx_PyLong_From_long(__pyx_t_15); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1372, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = PyObject_RichCompare(__pyx_t_11, __pyx_t_16, Py_GT); __Pyx_XGOTREF(__pyx_t_12); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1372, __pyx_L1_error) __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1372, __pyx_L1_error) __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (__pyx_t_8) { __pyx_t_12 = __Pyx_PyLong_From_long(__pyx_t_15); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1372, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); if (__Pyx_PyInt_FromNumber(&__pyx_t_12, NULL, 0) < (0)) __PYX_ERR(0, 1372, __pyx_L1_error) __pyx_t_4 = __pyx_t_12; __pyx_t_12 = 0; } else { __Pyx_INCREF(__pyx_t_16); __pyx_t_4 = __pyx_t_16; } __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_12 = PyNumber_FloorDivide(__pyx_t_14, __pyx_t_4); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1372, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_12, __pyx_mstate_global->__pyx_int_0}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1371, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1372, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1372, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_12}; __pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1372, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_v_attempts = __pyx_t_9; __pyx_t_9 = 0;
1373:
1374: # shifted lower bound of each block per dim (for the in-worker interior test)
+1375: bix = np.arange(num_blocks, dtype=np.int32) // (nby * nbz)
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1375, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_arange); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1375, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_12 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1375, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1375, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1375, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_1))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_1, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_2, __pyx_t_12}; __pyx_t_7 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1375, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_3, __pyx_t_7, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 1375, __pyx_L1_error) __pyx_t_9 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_7); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1375, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_t_1 = __Pyx_PyLong_From_int((__pyx_v_nby * __pyx_v_nbz)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1375, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = PyNumber_FloorDivide(__pyx_t_9, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1375, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_bix = __pyx_t_7; __pyx_t_7 = 0;
+1376: biy = (np.arange(num_blocks, dtype=np.int32) // nbz) % nby
__pyx_t_1 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1376, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_arange); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1376, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1376, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1376, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1376, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_1, __pyx_t_9}; __pyx_t_12 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1376, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_2, __pyx_t_12, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 1376, __pyx_L1_error) __pyx_t_7 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_12); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1376, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_nbz); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1376, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_12 = PyNumber_FloorDivide(__pyx_t_7, __pyx_t_3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1376, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_nby); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1376, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = PyNumber_Remainder(__pyx_t_12, __pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1376, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_biy = __pyx_t_7; __pyx_t_7 = 0;
+1377: biz = np.arange(num_blocks, dtype=np.int32) % nbz
__pyx_t_3 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1377, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_arange); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1377, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_12 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1377, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1377, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1377, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_3, __pyx_t_12}; __pyx_t_9 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1377, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_1, __pyx_t_9, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 1377, __pyx_L1_error) __pyx_t_7 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_9); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1377, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_nbz); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1377, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_9 = PyNumber_Remainder(__pyx_t_7, __pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1377, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_biz = __pyx_t_9; __pyx_t_9 = 0;
+1378: blo_x = (bix * Lx).astype(np.int32)
__pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_Lx); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1378, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = PyNumber_Multiply(__pyx_v_bix, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1378, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1378, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1378, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_12}; __pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1378, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_v_blo_x = __pyx_t_9; __pyx_t_9 = 0;
+1379: blo_y = (biy * Ly).astype(np.int32)
__pyx_t_12 = __Pyx_PyLong_From_int(__pyx_v_Ly); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1379, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_2 = PyNumber_Multiply(__pyx_v_biy, __pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1379, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1379, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1379, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_7}; __pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1379, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_v_blo_y = __pyx_t_9; __pyx_t_9 = 0;
+1380: blo_z = (biz * Lz).astype(np.int32)
__pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_Lz); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1380, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = PyNumber_Multiply(__pyx_v_biz, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1380, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1380, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1380, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_12}; __pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1380, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_v_blo_z = __pyx_t_9; __pyx_t_9 = 0;
1381:
1382: # independent PRNG seed per block
+1383: seeds = (np.arange(num_blocks, dtype=np.uint64) + np.uint64(passed_seed) + np.uint64(0x9E3779B9)) \
__pyx_t_1 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1383, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_arange); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1383, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_12 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1383, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1383, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_uint64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1383, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_1, __pyx_t_12}; __pyx_t_7 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1383, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_3, __pyx_t_7, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 1383, __pyx_L1_error) __pyx_t_9 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_7); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1383, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1383, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_uint64); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1383, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_passed_seed); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1383, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_12))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_12); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_12); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_12, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_3}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_12, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1383, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_t_12 = PyNumber_Add(__pyx_t_9, __pyx_t_2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1383, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_9 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1383, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_uint64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1383, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_9); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_mstate_global->__pyx_int_2654435769}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1383, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_t_7 = PyNumber_Add(__pyx_t_12, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1383, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1384: * np.uint64(0x2545F4914F6CDD1D) + np.uint64(1)
__pyx_t_12 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1384, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_uint64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1384, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_12); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_12); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_mstate_global->__pyx_int_0x2545f4914f6cdd1d}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1384, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_t_3 = PyNumber_Multiply(__pyx_t_7, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1384, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1384, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_uint64); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1384, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_int_1}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1384, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_t_9 = PyNumber_Add(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1384, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_seeds = __pyx_t_9; __pyx_t_9 = 0;
1385:
+1386: out_delta = np.zeros(num_blocks, dtype=np.int64)
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1386, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_zeros); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1386, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1386, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1386, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1386, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_2, __pyx_t_3}; __pyx_t_12 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1386, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_1, __pyx_t_12, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 1386, __pyx_L1_error) __pyx_t_9 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_12); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1386, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_v_out_delta = __pyx_t_9; __pyx_t_9 = 0;
+1387: out_accepted = np.zeros(num_blocks, dtype=np.int32)
__pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1387, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1387, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_12 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1387, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1387, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1387, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_1))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_1, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_7, __pyx_t_12}; __pyx_t_3 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1387, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_2, __pyx_t_3, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 1387, __pyx_L1_error) __pyx_t_9 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_3); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1387, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_v_out_accepted = __pyx_t_9; __pyx_t_9 = 0;
1388:
1389: # typed memoryviews for the nogil region
+1390: cdef int[::1] ids_mv = ids
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_ids, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 1390, __pyx_L1_error) __pyx_v_ids_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+1391: cdef int[::1] starts_mv = starts
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_starts, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 1391, __pyx_L1_error) __pyx_v_starts_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+1392: cdef int[::1] attempts_mv = attempts
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_attempts, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 1392, __pyx_L1_error) __pyx_v_attempts_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+1393: cdef unsigned long long[::1] seeds_mv = seeds
__pyx_t_18 = __Pyx_PyObject_to_MemoryviewSlice_dc_unsigned_PY_LONG_LONG(__pyx_v_seeds, PyBUF_WRITABLE); if (unlikely(!__pyx_t_18.memview)) __PYX_ERR(0, 1393, __pyx_L1_error) __pyx_v_seeds_mv = __pyx_t_18; __pyx_t_18.memview = NULL; __pyx_t_18.data = NULL;
+1394: cdef int[::1] blo_x_mv = blo_x
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_blo_x, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 1394, __pyx_L1_error) __pyx_v_blo_x_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+1395: cdef int[::1] blo_y_mv = blo_y
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_blo_y, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 1395, __pyx_L1_error) __pyx_v_blo_y_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+1396: cdef int[::1] blo_z_mv = blo_z
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_blo_z, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 1396, __pyx_L1_error) __pyx_v_blo_z_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+1397: cdef long[::1] out_delta_mv = out_delta
__pyx_t_19 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_v_out_delta, PyBUF_WRITABLE); if (unlikely(!__pyx_t_19.memview)) __PYX_ERR(0, 1397, __pyx_L1_error) __pyx_v_out_delta_mv = __pyx_t_19; __pyx_t_19.memview = NULL; __pyx_t_19.data = NULL;
+1398: cdef int[::1] out_accepted_mv = out_accepted
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_out_accepted, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 1398, __pyx_L1_error) __pyx_v_out_accepted_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
1399:
1400: cdef int b
+1401: cdef int nthreads = num_threads if num_threads > 0 else 1
__pyx_t_8 = (__pyx_v_num_threads > 0);
if (__pyx_t_8) {
__pyx_t_6 = __pyx_v_num_threads;
} else {
__pyx_t_6 = 1;
}
__pyx_v_nthreads = __pyx_t_6;
1402:
1403: # ---- parallel region: each block is independent -----------------
+1404: for b in prange(num_blocks, nogil=True, num_threads=nthreads, schedule='dynamic'):
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
__pyx_t_6 = __pyx_v_num_blocks;
{
#if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
#undef likely
#undef unlikely
#define likely(x) (x)
#define unlikely(x) (x)
#endif
__pyx_t_20 = (__pyx_t_6 - 0 + 1 - 1/abs(1)) / 1;
if (__pyx_t_20 > 0)
{
#ifdef _OPENMP
#pragma omp parallel
#endif /* _OPENMP */
{
#ifdef _OPENMP
#pragma omp for firstprivate(__pyx_v_b) lastprivate(__pyx_v_b) schedule(dynamic) __pyx_t_6 = __pyx_v_num_blocks;
{
#if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
#undef likely
#undef unlikely
#define likely(x) (x)
#define unlikely(x) (x)
#endif
__pyx_t_20 = (__pyx_t_6 - 0 + 1 - 1/abs(1)) / 1;
if (__pyx_t_20 > 0)
{
#ifdef _OPENMP
#pragma omp parallel
#endif /* _OPENMP */
{
#ifdef _OPENMP
#pragma omp for firstprivate(__pyx_v_b) lastprivate(__pyx_v_b) schedule(dynamic) num_threads(__pyx_v_nthreads)
#endif /* _OPENMP */
for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_20; __pyx_t_10++){
{
__pyx_v_b = (int)(0 + 1 * __pyx_t_10);
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L6;
}
__pyx_L6:;
}
}
+1405: run_block(b, ids_mv, starts_mv, attempts_mv, seeds_mv,
__pyx_f_5pimms_15mega_crank_fast_run_block(__pyx_v_b, __pyx_v_ids_mv, __pyx_v_starts_mv, __pyx_v_attempts_mv, __pyx_v_seeds_mv, __pyx_v_blo_x_mv, __pyx_v_blo_y_mv, __pyx_v_blo_z_mv, __pyx_v_Lx, __pyx_v_Ly, __pyx_v_Lz, __pyx_v_nbx, __pyx_v_nby, __pyx_v_nbz, __pyx_v_shift_x, __pyx_v_shift_y, __pyx_v_shift_z, __pyx_cur_scope->__pyx_v_W, __pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_angle_lookup, __pyx_v_invtemp, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_hardwall, __pyx_v_out_delta_mv, __pyx_v_out_accepted_mv);
}
}
}
}
}
#if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
#undef likely
#undef unlikely
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
#endif
}
1406: blo_x_mv, blo_y_mv, blo_z_mv,
1407: Lx, Ly, Lz, nbx, nby, nbz,
1408: shift_x, shift_y, shift_z, W,
1409: grid, type_grid, idx_to_bead,
1410: interaction_table, LR_interaction_table, SLR_interaction_table,
1411: angle_lookup, invtemp, XDIM, YDIM, ZDIM, hardwall,
1412: out_delta_mv, out_accepted_mv)
1413:
+1414: cdef long total_delta = 0
__pyx_v_total_delta = 0;
+1415: cdef int total_accepted = 0
__pyx_v_total_accepted = 0;
+1416: for b in range(num_blocks):
__pyx_t_20 = __pyx_v_num_blocks;
__pyx_t_10 = __pyx_t_20;
for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_10; __pyx_t_6+=1) {
__pyx_v_b = __pyx_t_6;
+1417: total_delta += out_delta_mv[b]
__pyx_t_21 = __pyx_v_b;
__pyx_v_total_delta = (__pyx_v_total_delta + (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_out_delta_mv.data) + __pyx_t_21)) ))));
+1418: total_accepted += out_accepted_mv[b]
__pyx_t_21 = __pyx_v_b;
__pyx_v_total_accepted = (__pyx_v_total_accepted + (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_out_accepted_mv.data) + __pyx_t_21)) ))));
}
1419:
+1420: return (energy + total_delta, total_accepted)
__Pyx_XDECREF(__pyx_r); __pyx_t_9 = __Pyx_PyLong_From_long((__pyx_v_energy + __pyx_v_total_delta)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1420, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_total_accepted); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1420, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1420, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_9); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_9) != (0)) __PYX_ERR(0, 1420, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_1); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1) != (0)) __PYX_ERR(0, 1420, __pyx_L1_error); __pyx_t_9 = 0; __pyx_t_1 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0;
1421:
1422:
1423: # =====================================================================
1424: # PARALLEL checkerboard crankshaft kernel - 2D
1425: #
1426: # Exact 2D analogue of the 3D kernel above: same frozen-halo block
1427: # decomposition (independent of num_threads), same per-block splitmix64
1428: # streams, same detailed-balance halo handling - just over a 2D grid using
1429: # the 2D move/energy helpers. Targets the same Boltzmann distribution as the
1430: # serial 2D kernel (mega_crank_2D); not bit-identical to it.
1431: # =====================================================================
1432:
1433: # ---- 2D move proposals using a per-thread PRNG (mirror the _c versions) ----
+1434: @cython.wraparound(False)
static CYTHON_INLINE int __pyx_f_5pimms_15mega_crank_fast_single_bead_crank_cp_2D(int __pyx_v_ox, int __pyx_v_oy, __Pyx_memviewslice __pyx_v_grid, int __pyx_v_XDIM, int __pyx_v_YDIM, unsigned PY_LONG_LONG *__pyx_v_rng, int *__pyx_v_out) {
int __pyx_v_x_off;
int __pyx_v_y_off;
int __pyx_v_local_x;
int __pyx_v_local_y;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
1435: @cython.boundscheck(False)
1436: cdef inline int single_bead_crank_cp_2D(int ox, int oy,
1437: NUMPY_INT_TYPE[:, :] grid,
1438: int XDIM, int YDIM,
1439: unsigned long long* rng, int* out) noexcept nogil:
+1440: cdef int x_off = rng_randint(rng, 0, 2) - 1
__pyx_v_x_off = (__pyx_f_5pimms_15mega_crank_fast_rng_randint(__pyx_v_rng, 0, 2) - 1);
+1441: cdef int y_off = rng_randint(rng, 0, 2) - 1
__pyx_v_y_off = (__pyx_f_5pimms_15mega_crank_fast_rng_randint(__pyx_v_rng, 0, 2) - 1);
+1442: cdef int local_x = pbc_correction(ox + x_off, XDIM)
__pyx_v_local_x = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_ox + __pyx_v_x_off), __pyx_v_XDIM);
+1443: cdef int local_y = pbc_correction(oy + y_off, YDIM)
__pyx_v_local_y = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_oy + __pyx_v_y_off), __pyx_v_YDIM);
+1444: if grid[local_x, local_y] > 0:
__pyx_t_1 = __pyx_v_local_x;
__pyx_t_2 = __pyx_v_local_y;
__pyx_t_3 = ((*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_1 * __pyx_v_grid.strides[0]) ) + __pyx_t_2 * __pyx_v_grid.strides[1]) ))) > 0);
if (__pyx_t_3) {
/* … */
}
+1445: out[0] = -1
(__pyx_v_out[0]) = -1;
+1446: out[1] = 0
(__pyx_v_out[1]) = 0;
+1447: return 0
__pyx_r = 0;
goto __pyx_L0;
+1448: out[0] = local_x
(__pyx_v_out[0]) = __pyx_v_local_x;
+1449: out[1] = local_y
(__pyx_v_out[1]) = __pyx_v_local_y;
+1450: return 1
__pyx_r = 1; goto __pyx_L0;
1451:
1452:
+1453: @cython.wraparound(False)
static CYTHON_INLINE int __pyx_f_5pimms_15mega_crank_fast_crank_it_cp_2D(int __pyx_v_N_side_x, int __pyx_v_N_side_y, int __pyx_v_C_side_x, int __pyx_v_C_side_y, __Pyx_memviewslice __pyx_v_grid, int __pyx_v_XDIM, int __pyx_v_YDIM, unsigned PY_LONG_LONG *__pyx_v_rng, int *__pyx_v_out) {
int __pyx_v_x_min;
int __pyx_v_x_max;
int __pyx_v_y_min;
int __pyx_v_y_max;
int __pyx_v_local_x;
int __pyx_v_local_y;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast.crank_it_cp_2D", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
return __pyx_r;
}
1454: @cython.boundscheck(False)
1455: cdef inline int crank_it_cp_2D(int N_side_x, int N_side_y,
1456: int C_side_x, int C_side_y,
1457: NUMPY_INT_TYPE[:, :] grid,
1458: int XDIM, int YDIM,
1459: unsigned long long* rng, int* out) noexcept nogil:
1460: cdef int x_min, x_max, y_min, y_max, local_x, local_y
1461:
+1462: if abs(N_side_x - C_side_x) > 2:
__pyx_t_1 = abs((__pyx_v_N_side_x - __pyx_v_C_side_x)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1462, __pyx_L1_error)
__pyx_t_2 = (__pyx_t_1 > 2);
if (__pyx_t_2) {
/* … */
}
+1463: if N_side_x > C_side_x:
__pyx_t_2 = (__pyx_v_N_side_x > __pyx_v_C_side_x);
if (__pyx_t_2) {
/* … */
goto __pyx_L4;
}
+1464: C_side_x = C_side_x + XDIM
__pyx_v_C_side_x = (__pyx_v_C_side_x + __pyx_v_XDIM);
1465: else:
+1466: N_side_x = N_side_x + XDIM
/*else*/ {
__pyx_v_N_side_x = (__pyx_v_N_side_x + __pyx_v_XDIM);
}
__pyx_L4:;
+1467: if abs(N_side_y - C_side_y) > 2:
__pyx_t_1 = abs((__pyx_v_N_side_y - __pyx_v_C_side_y)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1467, __pyx_L1_error)
__pyx_t_2 = (__pyx_t_1 > 2);
if (__pyx_t_2) {
/* … */
}
+1468: if N_side_y > C_side_y:
__pyx_t_2 = (__pyx_v_N_side_y > __pyx_v_C_side_y);
if (__pyx_t_2) {
/* … */
goto __pyx_L6;
}
+1469: C_side_y = C_side_y + YDIM
__pyx_v_C_side_y = (__pyx_v_C_side_y + __pyx_v_YDIM);
1470: else:
+1471: N_side_y = N_side_y + YDIM
/*else*/ {
__pyx_v_N_side_y = (__pyx_v_N_side_y + __pyx_v_YDIM);
}
__pyx_L6:;
1472:
+1473: x_min = int_max(N_side_x - 1, C_side_x - 1)
__pyx_v_x_min = __pyx_f_5pimms_15mega_crank_fast_int_max((__pyx_v_N_side_x - 1), (__pyx_v_C_side_x - 1));
+1474: x_max = int_min(N_side_x + 1, C_side_x + 1)
__pyx_v_x_max = __pyx_f_5pimms_15mega_crank_fast_int_min((__pyx_v_N_side_x + 1), (__pyx_v_C_side_x + 1));
+1475: y_min = int_max(N_side_y - 1, C_side_y - 1)
__pyx_v_y_min = __pyx_f_5pimms_15mega_crank_fast_int_max((__pyx_v_N_side_y - 1), (__pyx_v_C_side_y - 1));
+1476: y_max = int_min(N_side_y + 1, C_side_y + 1)
__pyx_v_y_max = __pyx_f_5pimms_15mega_crank_fast_int_min((__pyx_v_N_side_y + 1), (__pyx_v_C_side_y + 1));
1477:
+1478: local_x = pbc_correction((x_min + rng_randint(rng, 1, (x_max - x_min + 1)) - 1), XDIM)
__pyx_v_local_x = __pyx_f_5pimms_15mega_crank_fast_pbc_correction(((__pyx_v_x_min + __pyx_f_5pimms_15mega_crank_fast_rng_randint(__pyx_v_rng, 1, ((__pyx_v_x_max - __pyx_v_x_min) + 1))) - 1), __pyx_v_XDIM);
+1479: local_y = pbc_correction((y_min + rng_randint(rng, 1, (y_max - y_min + 1)) - 1), YDIM)
__pyx_v_local_y = __pyx_f_5pimms_15mega_crank_fast_pbc_correction(((__pyx_v_y_min + __pyx_f_5pimms_15mega_crank_fast_rng_randint(__pyx_v_rng, 1, ((__pyx_v_y_max - __pyx_v_y_min) + 1))) - 1), __pyx_v_YDIM);
1480:
+1481: if grid[local_x, local_y] > 0:
__pyx_t_3 = __pyx_v_local_x;
__pyx_t_4 = __pyx_v_local_y;
__pyx_t_2 = ((*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_3 * __pyx_v_grid.strides[0]) ) + __pyx_t_4 * __pyx_v_grid.strides[1]) ))) > 0);
if (__pyx_t_2) {
/* … */
}
+1482: out[0] = -1
(__pyx_v_out[0]) = -1;
+1483: out[1] = 0
(__pyx_v_out[1]) = 0;
+1484: return 0
__pyx_r = 0;
goto __pyx_L0;
+1485: out[0] = local_x
(__pyx_v_out[0]) = __pyx_v_local_x;
+1486: out[1] = local_y
(__pyx_v_out[1]) = __pyx_v_local_y;
+1487: return 1
__pyx_r = 1; goto __pyx_L0;
1488:
1489:
1490: # ---- per-block worker (2D), runs entirely without the GIL ----
+1491: @cython.wraparound(False)
static void __pyx_f_5pimms_15mega_crank_fast_run_block_2D(int __pyx_v_b, __Pyx_memviewslice __pyx_v_ids, __Pyx_memviewslice __pyx_v_starts, __Pyx_memviewslice __pyx_v_attempts, __Pyx_memviewslice __pyx_v_seeds, __Pyx_memviewslice __pyx_v_blo_x, __Pyx_memviewslice __pyx_v_blo_y, int __pyx_v_Lx, int __pyx_v_Ly, int __pyx_v_nbx, int __pyx_v_nby, int __pyx_v_shift_x, int __pyx_v_shift_y, int __pyx_v_W, __Pyx_memviewslice __pyx_v_grid, __Pyx_memviewslice __pyx_v_type_grid, __Pyx_memviewslice __pyx_v_idx_to_bead, __Pyx_memviewslice __pyx_v_interaction_table, __Pyx_memviewslice __pyx_v_LR_interaction_table, __Pyx_memviewslice __pyx_v_SLR_interaction_table, __Pyx_memviewslice __pyx_v_angle_lookup, float __pyx_v_invtemp, int __pyx_v_XDIM, int __pyx_v_YDIM, int __pyx_v_hardwall, __Pyx_memviewslice __pyx_v_out_delta, __Pyx_memviewslice __pyx_v_out_accepted) {
int __pyx_v_lo;
int __pyx_v_hi;
int __pyx_v_n_block;
unsigned PY_LONG_LONG __pyx_v_rng;
long __pyx_v_dsum;
int __pyx_v_acc;
CYTHON_UNUSED int __pyx_v_k;
int __pyx_v_pick;
int __pyx_v_bead_index;
int __pyx_v_beadflag;
int __pyx_v_gx;
int __pyx_v_gy;
int __pyx_v_sx;
int __pyx_v_sy;
int __pyx_v_wx;
int __pyx_v_wy;
int __pyx_v_old0;
int __pyx_v_old1;
int __pyx_v_new_position[2];
int __pyx_v_anchor0;
int __pyx_v_anchor1;
int __pyx_v_Nx;
int __pyx_v_Ny;
int __pyx_v_Cx;
int __pyx_v_Cy;
long __pyx_v_delta_energy;
long __pyx_v_delta_angle_energy;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast.run_block_2D", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
}
1492: @cython.boundscheck(False)
1493: cdef void run_block_2D(int b,
1494: int[::1] ids, int[::1] starts, int[::1] attempts,
1495: unsigned long long[::1] seeds,
1496: int[::1] blo_x, int[::1] blo_y,
1497: int Lx, int Ly,
1498: int nbx, int nby,
1499: int shift_x, int shift_y, int W,
1500: NUMPY_INT_TYPE[:, :] grid,
1501: NUMPY_INT_TYPE[:, :] type_grid,
1502: NUMPY_INT_TYPE_long[:, :] idx_to_bead,
1503: NUMPY_INT_TYPE[:, :] interaction_table,
1504: NUMPY_INT_TYPE[:, :] LR_interaction_table,
1505: NUMPY_INT_TYPE[:, :] SLR_interaction_table,
1506: NUMPY_INT_TYPE[:, :, :, :, :] angle_lookup,
1507: float invtemp, int XDIM, int YDIM, int hardwall,
1508: long[::1] out_delta, int[::1] out_accepted) noexcept nogil:
1509:
+1510: cdef int lo = starts[b]
__pyx_t_1 = __pyx_v_b; __pyx_v_lo = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_starts.data) + __pyx_t_1)) )));
+1511: cdef int hi = starts[b + 1]
__pyx_t_1 = (__pyx_v_b + 1); __pyx_v_hi = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_starts.data) + __pyx_t_1)) )));
+1512: cdef int n_block = hi - lo
__pyx_v_n_block = (__pyx_v_hi - __pyx_v_lo);
+1513: out_delta[b] = 0
__pyx_t_1 = __pyx_v_b; *((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_out_delta.data) + __pyx_t_1)) )) = 0;
+1514: out_accepted[b] = 0
__pyx_t_1 = __pyx_v_b; *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_out_accepted.data) + __pyx_t_1)) )) = 0;
+1515: if n_block <= 0:
__pyx_t_2 = (__pyx_v_n_block <= 0);
if (__pyx_t_2) {
/* … */
}
+1516: return
goto __pyx_L0;
1517:
+1518: cdef unsigned long long rng = seeds[b]
__pyx_t_1 = __pyx_v_b; __pyx_v_rng = (*((unsigned PY_LONG_LONG *) ( /* dim=0 */ ((char *) (((unsigned PY_LONG_LONG *) __pyx_v_seeds.data) + __pyx_t_1)) )));
+1519: cdef long dsum = 0
__pyx_v_dsum = 0;
+1520: cdef int acc = 0
__pyx_v_acc = 0;
1521: cdef int k, pick, bead_index, beadflag
1522: cdef int gx, gy, sx, sy, wx, wy
1523: cdef int old0, old1
1524: cdef int new_position[2]
1525: cdef int anchor0, anchor1
1526: cdef int Nx, Ny, Cx, Cy
1527: cdef long delta_energy, delta_angle_energy
1528:
+1529: for k in range(attempts[b]):
__pyx_t_1 = __pyx_v_b;
__pyx_t_3 = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_attempts.data) + __pyx_t_1)) )));
__pyx_t_4 = __pyx_t_3;
for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
__pyx_v_k = __pyx_t_5;
1530: # pick a random bead from this block's list
+1531: pick = lo + <int>(rng_uniform(&rng) * n_block)
__pyx_v_pick = (__pyx_v_lo + ((int)(__pyx_f_5pimms_15mega_crank_fast_rng_uniform((&__pyx_v_rng)) * __pyx_v_n_block)));
+1532: if pick >= hi:
__pyx_t_2 = (__pyx_v_pick >= __pyx_v_hi);
if (__pyx_t_2) {
/* … */
}
+1533: pick = hi - 1
__pyx_v_pick = (__pyx_v_hi - 1);
+1534: bead_index = ids[pick]
__pyx_t_1 = __pyx_v_pick;
__pyx_v_bead_index = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_ids.data) + __pyx_t_1)) )));
1535:
+1536: gx = idx_to_bead[bead_index, 5]
__pyx_t_1 = __pyx_v_bead_index;
__pyx_t_6 = 5;
__pyx_v_gx = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+1537: gy = idx_to_bead[bead_index, 6]
__pyx_t_6 = __pyx_v_bead_index;
__pyx_t_1 = 6;
__pyx_v_gy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
1538:
1539: # re-test interior membership against the CURRENT position (a bead may
1540: # have drifted into the frozen halo during this block's run).
+1541: if nbx > 1:
__pyx_t_2 = (__pyx_v_nbx > 1);
if (__pyx_t_2) {
/* … */
}
+1542: sx = (gx - shift_x + XDIM) % XDIM
__pyx_t_7 = ((__pyx_v_gx - __pyx_v_shift_x) + __pyx_v_XDIM);
if (unlikely(__pyx_v_XDIM == 0)) {
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__PYX_ERR(0, 1542, __pyx_L1_error)
}
__pyx_v_sx = __Pyx_mod_int(__pyx_t_7, __pyx_v_XDIM, 0);
+1543: wx = sx - blo_x[b]
__pyx_t_1 = __pyx_v_b;
__pyx_v_wx = (__pyx_v_sx - (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_blo_x.data) + __pyx_t_1)) ))));
+1544: if wx < W or wx >= Lx - W:
__pyx_t_8 = (__pyx_v_wx < __pyx_v_W);
if (!__pyx_t_8) {
} else {
__pyx_t_2 = __pyx_t_8;
goto __pyx_L9_bool_binop_done;
}
__pyx_t_8 = (__pyx_v_wx >= (__pyx_v_Lx - __pyx_v_W));
__pyx_t_2 = __pyx_t_8;
__pyx_L9_bool_binop_done:;
if (__pyx_t_2) {
/* … */
}
+1545: continue
goto __pyx_L4_continue;
+1546: if nby > 1:
__pyx_t_2 = (__pyx_v_nby > 1);
if (__pyx_t_2) {
/* … */
}
+1547: sy = (gy - shift_y + YDIM) % YDIM
__pyx_t_7 = ((__pyx_v_gy - __pyx_v_shift_y) + __pyx_v_YDIM);
if (unlikely(__pyx_v_YDIM == 0)) {
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__PYX_ERR(0, 1547, __pyx_L1_error)
}
__pyx_v_sy = __Pyx_mod_int(__pyx_t_7, __pyx_v_YDIM, 0);
+1548: wy = sy - blo_y[b]
__pyx_t_1 = __pyx_v_b;
__pyx_v_wy = (__pyx_v_sy - (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_blo_y.data) + __pyx_t_1)) ))));
+1549: if wy < W or wy >= Ly - W:
__pyx_t_8 = (__pyx_v_wy < __pyx_v_W);
if (!__pyx_t_8) {
} else {
__pyx_t_2 = __pyx_t_8;
goto __pyx_L13_bool_binop_done;
}
__pyx_t_8 = (__pyx_v_wy >= (__pyx_v_Ly - __pyx_v_W));
__pyx_t_2 = __pyx_t_8;
__pyx_L13_bool_binop_done:;
if (__pyx_t_2) {
/* … */
}
+1550: continue
goto __pyx_L4_continue;
1551:
+1552: old0 = gx
__pyx_v_old0 = __pyx_v_gx;
+1553: old1 = gy
__pyx_v_old1 = __pyx_v_gy;
+1554: beadflag = idx_to_bead[bead_index, 0]
__pyx_t_1 = __pyx_v_bead_index;
__pyx_t_6 = 0;
__pyx_v_beadflag = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
1555:
+1556: if beadflag == 0:
switch (__pyx_v_beadflag) {
case 0:
/* … */
break;
case 1:
+1557: single_bead_crank_cp_2D(old0, old1, grid, XDIM, YDIM, &rng, new_position)
(void)(__pyx_f_5pimms_15mega_crank_fast_single_bead_crank_cp_2D(__pyx_v_old0, __pyx_v_old1, __pyx_v_grid, __pyx_v_XDIM, __pyx_v_YDIM, (&__pyx_v_rng), __pyx_v_new_position));
1558:
+1559: elif beadflag == 1:
break;
case 3:
+1560: anchor0 = idx_to_bead[bead_index + 1, 5]
__pyx_t_6 = (__pyx_v_bead_index + 1);
__pyx_t_1 = 5;
__pyx_v_anchor0 = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
+1561: anchor1 = idx_to_bead[bead_index + 1, 6]
__pyx_t_1 = (__pyx_v_bead_index + 1);
__pyx_t_6 = 6;
__pyx_v_anchor1 = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+1562: single_bead_crank_cp_2D(anchor0, anchor1, grid, XDIM, YDIM, &rng, new_position)
(void)(__pyx_f_5pimms_15mega_crank_fast_single_bead_crank_cp_2D(__pyx_v_anchor0, __pyx_v_anchor1, __pyx_v_grid, __pyx_v_XDIM, __pyx_v_YDIM, (&__pyx_v_rng), __pyx_v_new_position));
+1563: if hardwall == 1:
__pyx_t_2 = (__pyx_v_hardwall == 1);
if (__pyx_t_2) {
/* … */
}
+1564: if straddle_pair(new_position[0], new_position[1], 0,
if (__pyx_t_2) {
/* … */
}
+1565: anchor0, anchor1, 0) == 1:
__pyx_t_2 = (__pyx_f_5pimms_15mega_crank_fast_straddle_pair((__pyx_v_new_position[0]), (__pyx_v_new_position[1]), 0, __pyx_v_anchor0, __pyx_v_anchor1, 0) == 1);
+1566: continue
goto __pyx_L4_continue;
1567:
+1568: elif beadflag == 3:
break;
default:
+1569: anchor0 = idx_to_bead[bead_index - 1, 5]
__pyx_t_6 = (__pyx_v_bead_index - 1);
__pyx_t_1 = 5;
__pyx_v_anchor0 = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
+1570: anchor1 = idx_to_bead[bead_index - 1, 6]
__pyx_t_1 = (__pyx_v_bead_index - 1);
__pyx_t_6 = 6;
__pyx_v_anchor1 = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+1571: single_bead_crank_cp_2D(anchor0, anchor1, grid, XDIM, YDIM, &rng, new_position)
(void)(__pyx_f_5pimms_15mega_crank_fast_single_bead_crank_cp_2D(__pyx_v_anchor0, __pyx_v_anchor1, __pyx_v_grid, __pyx_v_XDIM, __pyx_v_YDIM, (&__pyx_v_rng), __pyx_v_new_position));
+1572: if hardwall == 1:
__pyx_t_2 = (__pyx_v_hardwall == 1);
if (__pyx_t_2) {
/* … */
}
+1573: if straddle_pair(anchor0, anchor1, 0,
if (__pyx_t_2) {
/* … */
}
+1574: new_position[0], new_position[1], 0) == 1:
__pyx_t_2 = (__pyx_f_5pimms_15mega_crank_fast_straddle_pair(__pyx_v_anchor0, __pyx_v_anchor1, 0, (__pyx_v_new_position[0]), (__pyx_v_new_position[1]), 0) == 1);
+1575: continue
goto __pyx_L4_continue;
1576:
1577: else:
+1578: Nx = idx_to_bead[bead_index - 1, 5]
__pyx_t_6 = (__pyx_v_bead_index - 1);
__pyx_t_1 = 5;
__pyx_v_Nx = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
+1579: Ny = idx_to_bead[bead_index - 1, 6]
__pyx_t_1 = (__pyx_v_bead_index - 1);
__pyx_t_6 = 6;
__pyx_v_Ny = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+1580: Cx = idx_to_bead[bead_index + 1, 5]
__pyx_t_6 = (__pyx_v_bead_index + 1);
__pyx_t_1 = 5;
__pyx_v_Cx = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
+1581: Cy = idx_to_bead[bead_index + 1, 6]
__pyx_t_1 = (__pyx_v_bead_index + 1);
__pyx_t_6 = 6;
__pyx_v_Cy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+1582: crank_it_cp_2D(Nx, Ny, Cx, Cy, grid, XDIM, YDIM, &rng, new_position)
(void)(__pyx_f_5pimms_15mega_crank_fast_crank_it_cp_2D(__pyx_v_Nx, __pyx_v_Ny, __pyx_v_Cx, __pyx_v_Cy, __pyx_v_grid, __pyx_v_XDIM, __pyx_v_YDIM, (&__pyx_v_rng), __pyx_v_new_position));
+1583: if hardwall == 1:
__pyx_t_2 = (__pyx_v_hardwall == 1);
if (__pyx_t_2) {
/* … */
}
break;
}
+1584: if (straddle_pair(Nx, Ny, 0,
if (__pyx_t_2) {
/* … */
}
+1585: new_position[0], new_position[1], 0) == 1
__pyx_t_8 = (__pyx_f_5pimms_15mega_crank_fast_straddle_pair(__pyx_v_Nx, __pyx_v_Ny, 0, (__pyx_v_new_position[0]), (__pyx_v_new_position[1]), 0) == 1);
if (!__pyx_t_8) {
} else {
__pyx_t_2 = __pyx_t_8;
goto __pyx_L21_bool_binop_done;
}
1586: or straddle_pair(new_position[0], new_position[1], 0,
+1587: Cx, Cy, 0) == 1):
__pyx_t_8 = (__pyx_f_5pimms_15mega_crank_fast_straddle_pair((__pyx_v_new_position[0]), (__pyx_v_new_position[1]), 0, __pyx_v_Cx, __pyx_v_Cy, 0) == 1);
__pyx_t_2 = __pyx_t_8;
__pyx_L21_bool_binop_done:;
+1588: continue
goto __pyx_L4_continue;
1589:
+1590: if not new_position[0] < 0:
__pyx_t_2 = (!((__pyx_v_new_position[0]) < 0));
if (__pyx_t_2) {
/* … */
}
__pyx_L4_continue:;
}
1591: # DETAILED BALANCE: reject any move whose NEW position would leave the
1592: # movable interior (land in the frozen halo); see run_block for the
1593: # full argument.
+1594: if nbx > 1:
__pyx_t_2 = (__pyx_v_nbx > 1);
if (__pyx_t_2) {
/* … */
}
+1595: sx = (new_position[0] - shift_x + XDIM) % XDIM
__pyx_t_7 = (((__pyx_v_new_position[0]) - __pyx_v_shift_x) + __pyx_v_XDIM);
if (unlikely(__pyx_v_XDIM == 0)) {
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__PYX_ERR(0, 1595, __pyx_L1_error)
}
__pyx_v_sx = __Pyx_mod_int(__pyx_t_7, __pyx_v_XDIM, 0);
+1596: wx = sx - blo_x[b]
__pyx_t_6 = __pyx_v_b;
__pyx_v_wx = (__pyx_v_sx - (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_blo_x.data) + __pyx_t_6)) ))));
+1597: if wx < W or wx >= Lx - W:
__pyx_t_8 = (__pyx_v_wx < __pyx_v_W);
if (!__pyx_t_8) {
} else {
__pyx_t_2 = __pyx_t_8;
goto __pyx_L26_bool_binop_done;
}
__pyx_t_8 = (__pyx_v_wx >= (__pyx_v_Lx - __pyx_v_W));
__pyx_t_2 = __pyx_t_8;
__pyx_L26_bool_binop_done:;
if (__pyx_t_2) {
/* … */
}
+1598: continue
goto __pyx_L4_continue;
+1599: if nby > 1:
__pyx_t_2 = (__pyx_v_nby > 1);
if (__pyx_t_2) {
/* … */
}
+1600: sy = (new_position[1] - shift_y + YDIM) % YDIM
__pyx_t_7 = (((__pyx_v_new_position[1]) - __pyx_v_shift_y) + __pyx_v_YDIM);
if (unlikely(__pyx_v_YDIM == 0)) {
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__PYX_ERR(0, 1600, __pyx_L1_error)
}
__pyx_v_sy = __Pyx_mod_int(__pyx_t_7, __pyx_v_YDIM, 0);
+1601: wy = sy - blo_y[b]
__pyx_t_6 = __pyx_v_b;
__pyx_v_wy = (__pyx_v_sy - (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_blo_y.data) + __pyx_t_6)) ))));
+1602: if wy < W or wy >= Ly - W:
__pyx_t_8 = (__pyx_v_wy < __pyx_v_W);
if (!__pyx_t_8) {
} else {
__pyx_t_2 = __pyx_t_8;
goto __pyx_L30_bool_binop_done;
}
__pyx_t_8 = (__pyx_v_wy >= (__pyx_v_Ly - __pyx_v_W));
__pyx_t_2 = __pyx_t_8;
__pyx_L30_bool_binop_done:;
if (__pyx_t_2) {
/* … */
}
+1603: continue
goto __pyx_L4_continue;
1604:
+1605: delta_energy = get_energy_change_2D_c(grid, type_grid,
__pyx_v_delta_energy = __pyx_f_5pimms_15mega_crank_fast_get_energy_change_2D_c(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_old0, __pyx_v_old1, (__pyx_v_new_position[0]), (__pyx_v_new_position[1]), (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_hardwall);
1606: old0, old1,
1607: new_position[0], new_position[1],
+1608: idx_to_bead[bead_index, 1],
__pyx_t_6 = __pyx_v_bead_index;
__pyx_t_1 = 1;
1609: interaction_table, LR_interaction_table,
1610: SLR_interaction_table,
1611: XDIM, YDIM, hardwall)
+1612: delta_angle_energy = get_angle_energy_change_2D_c(bead_index, idx_to_bead,
__pyx_v_delta_angle_energy = __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_2D_c(__pyx_v_bead_index, __pyx_v_idx_to_bead, __pyx_v_new_position, __pyx_v_angle_lookup);
1613: new_position, angle_lookup)
+1614: if accept_p(invtemp, delta_energy + delta_angle_energy, &rng) == 1:
__pyx_t_2 = (__pyx_f_5pimms_15mega_crank_fast_accept_p(__pyx_v_invtemp, (__pyx_v_delta_energy + __pyx_v_delta_angle_energy), (&__pyx_v_rng)) == 1);
if (__pyx_t_2) {
/* … */
}
+1615: grid[old0, old1] = 0
__pyx_t_1 = __pyx_v_old0;
__pyx_t_6 = __pyx_v_old1;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_1 * __pyx_v_grid.strides[0]) ) + __pyx_t_6 * __pyx_v_grid.strides[1]) )) = 0;
+1616: grid[new_position[0], new_position[1]] = idx_to_bead[bead_index, 4]
__pyx_t_6 = __pyx_v_bead_index;
__pyx_t_1 = 4;
__pyx_t_9 = (__pyx_v_new_position[0]);
__pyx_t_10 = (__pyx_v_new_position[1]);
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_9 * __pyx_v_grid.strides[0]) ) + __pyx_t_10 * __pyx_v_grid.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
+1617: type_grid[new_position[0], new_position[1]] = type_grid[old0, old1]
__pyx_t_1 = __pyx_v_old0;
__pyx_t_6 = __pyx_v_old1;
__pyx_t_10 = (__pyx_v_new_position[0]);
__pyx_t_9 = (__pyx_v_new_position[1]);
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_10 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_9 * __pyx_v_type_grid.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_1 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_6 * __pyx_v_type_grid.strides[1]) )));
+1618: type_grid[old0, old1] = 0
__pyx_t_6 = __pyx_v_old0;
__pyx_t_1 = __pyx_v_old1;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_6 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_1 * __pyx_v_type_grid.strides[1]) )) = 0;
+1619: idx_to_bead[bead_index, 5] = new_position[0]
__pyx_t_1 = __pyx_v_bead_index;
__pyx_t_6 = 5;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )) = (__pyx_v_new_position[0]);
+1620: idx_to_bead[bead_index, 6] = new_position[1]
__pyx_t_6 = __pyx_v_bead_index;
__pyx_t_1 = 6;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )) = (__pyx_v_new_position[1]);
+1621: dsum = dsum + delta_energy + delta_angle_energy
__pyx_v_dsum = ((__pyx_v_dsum + __pyx_v_delta_energy) + __pyx_v_delta_angle_energy);
+1622: acc = acc + 1
__pyx_v_acc = (__pyx_v_acc + 1);
1623:
+1624: out_delta[b] = dsum
__pyx_t_1 = __pyx_v_b; *((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_out_delta.data) + __pyx_t_1)) )) = __pyx_v_dsum;
+1625: out_accepted[b] = acc
__pyx_t_1 = __pyx_v_b; *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_out_accepted.data) + __pyx_t_1)) )) = __pyx_v_acc;
1626:
1627:
+1628: @cython.wraparound(False)
/* Python wrapper */ static PyObject *__pyx_pw_5pimms_15mega_crank_fast_9mega_crank_parallel_2D(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_5pimms_15mega_crank_fast_8mega_crank_parallel_2D, "\n Parallel checkerboard crankshaft kernel (2D).\n\n The 2D analogue of mega_crank_parallel: distributes the substep work across\n `num_threads` OpenMP threads using the same frozen-halo block decomposition,\n over a 2D grid. The decomposition depends only on box geometry (and the halo\n width W), NOT on num_threads, so the result is identical for any thread count.\n `frozen_mask` is a per-bead int array (1 = frozen) - frozen beads are excluded\n from the movable set but kept as fixed obstacles. Targets the same Boltzmann\n distribution as the serial 2D kernel (mega_crank_2D); it is not bit-identical\n to it. Returns (energy, accepted).\n "); static PyMethodDef __pyx_mdef_5pimms_15mega_crank_fast_9mega_crank_parallel_2D = {"mega_crank_parallel_2D", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5pimms_15mega_crank_fast_9mega_crank_parallel_2D, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_5pimms_15mega_crank_fast_8mega_crank_parallel_2D}; static PyObject *__pyx_pw_5pimms_15mega_crank_fast_9mega_crank_parallel_2D(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { __Pyx_memviewslice __pyx_v_grid = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_type_grid = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_idx_to_bead = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_LR_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_SLR_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_angle_lookup = { 0, 0, { 0 }, { 0 }, { 0 } }; long __pyx_v_energy; float __pyx_v_invtemp; int __pyx_v_nsteps; int __pyx_v_passed_seed; int __pyx_v_hardwall; int __pyx_v_num_threads; __Pyx_memviewslice __pyx_v_frozen_mask = { 0, 0, { 0 }, { 0 }, { 0 } }; #if !CYTHON_METH_FASTCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("mega_crank_parallel_2D (wrapper)", 0); #if !CYTHON_METH_FASTCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_grid,&__pyx_mstate_global->__pyx_n_u_type_grid,&__pyx_mstate_global->__pyx_n_u_idx_to_bead,&__pyx_mstate_global->__pyx_n_u_interaction_table,&__pyx_mstate_global->__pyx_n_u_LR_interaction_table,&__pyx_mstate_global->__pyx_n_u_SLR_interaction_table,&__pyx_mstate_global->__pyx_n_u_angle_lookup,&__pyx_mstate_global->__pyx_n_u_energy,&__pyx_mstate_global->__pyx_n_u_invtemp,&__pyx_mstate_global->__pyx_n_u_nsteps,&__pyx_mstate_global->__pyx_n_u_passed_seed,&__pyx_mstate_global->__pyx_n_u_hardwall,&__pyx_mstate_global->__pyx_n_u_num_threads,&__pyx_mstate_global->__pyx_n_u_frozen_mask,0}; PyObject* values[14] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 1628, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 14: values[13] = __Pyx_ArgRef_FASTCALL(__pyx_args, 13); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[13])) __PYX_ERR(0, 1628, __pyx_L3_error) CYTHON_FALLTHROUGH; case 13: values[12] = __Pyx_ArgRef_FASTCALL(__pyx_args, 12); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[12])) __PYX_ERR(0, 1628, __pyx_L3_error) CYTHON_FALLTHROUGH; case 12: values[11] = __Pyx_ArgRef_FASTCALL(__pyx_args, 11); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[11])) __PYX_ERR(0, 1628, __pyx_L3_error) CYTHON_FALLTHROUGH; case 11: values[10] = __Pyx_ArgRef_FASTCALL(__pyx_args, 10); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[10])) __PYX_ERR(0, 1628, __pyx_L3_error) CYTHON_FALLTHROUGH; case 10: values[9] = __Pyx_ArgRef_FASTCALL(__pyx_args, 9); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[9])) __PYX_ERR(0, 1628, __pyx_L3_error) CYTHON_FALLTHROUGH; case 9: values[8] = __Pyx_ArgRef_FASTCALL(__pyx_args, 8); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[8])) __PYX_ERR(0, 1628, __pyx_L3_error) CYTHON_FALLTHROUGH; case 8: values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 1628, __pyx_L3_error) CYTHON_FALLTHROUGH; case 7: values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 1628, __pyx_L3_error) CYTHON_FALLTHROUGH; case 6: values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 1628, __pyx_L3_error) CYTHON_FALLTHROUGH; case 5: values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 1628, __pyx_L3_error) CYTHON_FALLTHROUGH; case 4: values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 1628, __pyx_L3_error) CYTHON_FALLTHROUGH; case 3: values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1628, __pyx_L3_error) CYTHON_FALLTHROUGH; case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1628, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1628, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "mega_crank_parallel_2D", 0) < (0)) __PYX_ERR(0, 1628, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 14; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("mega_crank_parallel_2D", 1, 14, 14, i); __PYX_ERR(0, 1628, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 14)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1628, __pyx_L3_error) values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1628, __pyx_L3_error) values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1628, __pyx_L3_error) values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 1628, __pyx_L3_error) values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 1628, __pyx_L3_error) values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 1628, __pyx_L3_error) values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 1628, __pyx_L3_error) values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 1628, __pyx_L3_error) values[8] = __Pyx_ArgRef_FASTCALL(__pyx_args, 8); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[8])) __PYX_ERR(0, 1628, __pyx_L3_error) values[9] = __Pyx_ArgRef_FASTCALL(__pyx_args, 9); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[9])) __PYX_ERR(0, 1628, __pyx_L3_error) values[10] = __Pyx_ArgRef_FASTCALL(__pyx_args, 10); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[10])) __PYX_ERR(0, 1628, __pyx_L3_error) values[11] = __Pyx_ArgRef_FASTCALL(__pyx_args, 11); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[11])) __PYX_ERR(0, 1628, __pyx_L3_error) values[12] = __Pyx_ArgRef_FASTCALL(__pyx_args, 12); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[12])) __PYX_ERR(0, 1628, __pyx_L3_error) values[13] = __Pyx_ArgRef_FASTCALL(__pyx_args, 13); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[13])) __PYX_ERR(0, 1628, __pyx_L3_error) } __pyx_v_grid = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_grid.memview)) __PYX_ERR(0, 1630, __pyx_L3_error) __pyx_v_type_grid = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_type_grid.memview)) __PYX_ERR(0, 1631, __pyx_L3_error) __pyx_v_idx_to_bead = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_idx_to_bead.memview)) __PYX_ERR(0, 1632, __pyx_L3_error) __pyx_v_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interaction_table.memview)) __PYX_ERR(0, 1633, __pyx_L3_error) __pyx_v_LR_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_LR_interaction_table.memview)) __PYX_ERR(0, 1634, __pyx_L3_error) __pyx_v_SLR_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_SLR_interaction_table.memview)) __PYX_ERR(0, 1635, __pyx_L3_error) __pyx_v_angle_lookup = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsdsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_angle_lookup.memview)) __PYX_ERR(0, 1636, __pyx_L3_error) __pyx_v_energy = __Pyx_PyLong_As_long(values[7]); if (unlikely((__pyx_v_energy == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1637, __pyx_L3_error) __pyx_v_invtemp = __Pyx_PyFloat_AsFloat(values[8]); if (unlikely((__pyx_v_invtemp == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 1638, __pyx_L3_error) __pyx_v_nsteps = __Pyx_PyLong_As_int(values[9]); if (unlikely((__pyx_v_nsteps == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1639, __pyx_L3_error) __pyx_v_passed_seed = __Pyx_PyLong_As_int(values[10]); if (unlikely((__pyx_v_passed_seed == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1640, __pyx_L3_error) __pyx_v_hardwall = __Pyx_PyLong_As_int(values[11]); if (unlikely((__pyx_v_hardwall == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1641, __pyx_L3_error) __pyx_v_num_threads = __Pyx_PyLong_As_int(values[12]); if (unlikely((__pyx_v_num_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1642, __pyx_L3_error) __pyx_v_frozen_mask = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[13], PyBUF_WRITABLE); if (unlikely(!__pyx_v_frozen_mask.memview)) __PYX_ERR(0, 1643, __pyx_L3_error) } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("mega_crank_parallel_2D", 1, 14, 14, __pyx_nargs); __PYX_ERR(0, 1628, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __PYX_XCLEAR_MEMVIEW(&__pyx_v_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_type_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_idx_to_bead, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_LR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_SLR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_angle_lookup, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_frozen_mask, 1); __Pyx_AddTraceback("pimms.mega_crank_fast.mega_crank_parallel_2D", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5pimms_15mega_crank_fast_8mega_crank_parallel_2D(__pyx_self, __pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_angle_lookup, __pyx_v_energy, __pyx_v_invtemp, __pyx_v_nsteps, __pyx_v_passed_seed, __pyx_v_hardwall, __pyx_v_num_threads, __pyx_v_frozen_mask); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __PYX_XCLEAR_MEMVIEW(&__pyx_v_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_type_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_idx_to_bead, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_LR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_SLR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_angle_lookup, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_frozen_mask, 1); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ static PyObject *__pyx_pf_5pimms_15mega_crank_fast_8mega_crank_parallel_2D(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_grid, __Pyx_memviewslice __pyx_v_type_grid, __Pyx_memviewslice __pyx_v_idx_to_bead, __Pyx_memviewslice __pyx_v_interaction_table, __Pyx_memviewslice __pyx_v_LR_interaction_table, __Pyx_memviewslice __pyx_v_SLR_interaction_table, __Pyx_memviewslice __pyx_v_angle_lookup, long __pyx_v_energy, float __pyx_v_invtemp, int __pyx_v_nsteps, int __pyx_v_passed_seed, int __pyx_v_hardwall, int __pyx_v_num_threads, __Pyx_memviewslice __pyx_v_frozen_mask) { struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_1_mega_crank_parallel_2D *__pyx_cur_scope; int __pyx_v_XDIM; int __pyx_v_YDIM; PyObject *__pyx_v_idx_np = NULL; int __pyx_v_R_int; int __pyx_v_cap; int __pyx_v_nbx; int __pyx_v_nby; int __pyx_v_Lx; int __pyx_v_Ly; int __pyx_v_num_blocks; PyObject *__pyx_v_rstate = NULL; int __pyx_v_shift_x; int __pyx_v_shift_y; PyObject *__pyx_v_gx = NULL; PyObject *__pyx_v_gy = NULL; PyObject *__pyx_v_dim_block = 0; PyObject *__pyx_v_bxj = NULL; PyObject *__pyx_v_byj = NULL; PyObject *__pyx_v_movable = NULL; PyObject *__pyx_v_block_of_bead = NULL; PyObject *__pyx_v_sel = NULL; PyObject *__pyx_v_sel_blocks = NULL; PyObject *__pyx_v_order = NULL; PyObject *__pyx_v_ids = NULL; PyObject *__pyx_v_sorted_blocks = NULL; PyObject *__pyx_v_counts = NULL; PyObject *__pyx_v_starts = NULL; PyObject *__pyx_v_total_interior = NULL; PyObject *__pyx_v_attempts = NULL; PyObject *__pyx_v_bix = NULL; PyObject *__pyx_v_biy = NULL; PyObject *__pyx_v_blo_x = NULL; PyObject *__pyx_v_blo_y = NULL; PyObject *__pyx_v_seeds = NULL; PyObject *__pyx_v_out_delta = NULL; PyObject *__pyx_v_out_accepted = NULL; __Pyx_memviewslice __pyx_v_ids_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_starts_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_attempts_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_seeds_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_blo_x_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_blo_y_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_out_delta_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_out_accepted_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; int __pyx_v_b; CYTHON_UNUSED int __pyx_v_nthreads; long __pyx_v_total_delta_2d; int __pyx_v_total_accepted_2d; PyObject *__pyx_r = NULL; __pyx_cur_scope = (struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_1_mega_crank_parallel_2D *)__pyx_tp_new_5pimms_15mega_crank_fast___pyx_scope_struct_1_mega_crank_parallel_2D(__pyx_mstate_global->__pyx_ptype_5pimms_15mega_crank_fast___pyx_scope_struct_1_mega_crank_parallel_2D, __pyx_mstate_global->__pyx_empty_tuple, NULL); if (unlikely(!__pyx_cur_scope)) { __pyx_cur_scope = ((struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_1_mega_crank_parallel_2D *)Py_None); __Pyx_INCREF(Py_None); __PYX_ERR(0, 1628, __pyx_L1_error) } else { __Pyx_GOTREF((PyObject *)__pyx_cur_scope); } /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_11); __Pyx_XDECREF(__pyx_t_12); __Pyx_XDECREF(__pyx_t_13); __Pyx_XDECREF(__pyx_t_14); __Pyx_XDECREF(__pyx_t_16); __PYX_XCLEAR_MEMVIEW(&__pyx_t_17, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_t_18, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_t_19, 1); __Pyx_AddTraceback("pimms.mega_crank_fast.mega_crank_parallel_2D", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_idx_np); __Pyx_XDECREF(__pyx_v_rstate); __Pyx_XDECREF(__pyx_v_gx); __Pyx_XDECREF(__pyx_v_gy); __Pyx_XDECREF(__pyx_v_dim_block); __Pyx_XDECREF(__pyx_v_bxj); __Pyx_XDECREF(__pyx_v_byj); __Pyx_XDECREF(__pyx_v_movable); __Pyx_XDECREF(__pyx_v_block_of_bead); __Pyx_XDECREF(__pyx_v_sel); __Pyx_XDECREF(__pyx_v_sel_blocks); __Pyx_XDECREF(__pyx_v_order); __Pyx_XDECREF(__pyx_v_ids); __Pyx_XDECREF(__pyx_v_sorted_blocks); __Pyx_XDECREF(__pyx_v_counts); __Pyx_XDECREF(__pyx_v_starts); __Pyx_XDECREF(__pyx_v_total_interior); __Pyx_XDECREF(__pyx_v_attempts); __Pyx_XDECREF(__pyx_v_bix); __Pyx_XDECREF(__pyx_v_biy); __Pyx_XDECREF(__pyx_v_blo_x); __Pyx_XDECREF(__pyx_v_blo_y); __Pyx_XDECREF(__pyx_v_seeds); __Pyx_XDECREF(__pyx_v_out_delta); __Pyx_XDECREF(__pyx_v_out_accepted); __PYX_XCLEAR_MEMVIEW(&__pyx_v_ids_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_starts_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_attempts_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_seeds_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_blo_x_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_blo_y_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_out_delta_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_out_accepted_mv, 1); __Pyx_DECREF((PyObject *)__pyx_cur_scope); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_5pimms_15mega_crank_fast_9mega_crank_parallel_2D, 0, __pyx_mstate_global->__pyx_n_u_mega_crank_parallel_2D, NULL, __pyx_mstate_global->__pyx_n_u_pimms_mega_crank_fast, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[10])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1628, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_mega_crank_parallel_2D, __pyx_t_4) < (0)) __PYX_ERR(0, 1628, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* … */ struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_1_mega_crank_parallel_2D { PyObject_HEAD int __pyx_v_W; int __pyx_v_num_beads; };
1629: @cython.boundscheck(False)
1630: def mega_crank_parallel_2D(NUMPY_INT_TYPE[:, :] grid,
1631: NUMPY_INT_TYPE[:, :] type_grid,
1632: NUMPY_INT_TYPE_long[:, :] idx_to_bead,
1633: NUMPY_INT_TYPE[:, :] interaction_table,
1634: NUMPY_INT_TYPE[:, :] LR_interaction_table,
1635: NUMPY_INT_TYPE[:, :] SLR_interaction_table,
1636: NUMPY_INT_TYPE[:, :, :, :, :] angle_lookup,
1637: long energy,
1638: float invtemp,
1639: int nsteps,
1640: int passed_seed,
1641: int hardwall,
1642: int num_threads,
1643: NUMPY_INT_TYPE[::1] frozen_mask):
1644: """
1645: Parallel checkerboard crankshaft kernel (2D).
1646:
1647: The 2D analogue of mega_crank_parallel: distributes the substep work across
1648: `num_threads` OpenMP threads using the same frozen-halo block decomposition,
1649: over a 2D grid. The decomposition depends only on box geometry (and the halo
1650: width W), NOT on num_threads, so the result is identical for any thread count.
1651: `frozen_mask` is a per-bead int array (1 = frozen) - frozen beads are excluded
1652: from the movable set but kept as fixed obstacles. Targets the same Boltzmann
1653: distribution as the serial 2D kernel (mega_crank_2D); it is not bit-identical
1654: to it. Returns (energy, accepted).
1655: """
+1656: cdef int XDIM = grid.shape[0]
__pyx_v_XDIM = (__pyx_v_grid.shape[0]);
+1657: cdef int YDIM = grid.shape[1]
__pyx_v_YDIM = (__pyx_v_grid.shape[1]);
+1658: cdef int num_beads = idx_to_bead.shape[0]
__pyx_cur_scope->__pyx_v_num_beads = (__pyx_v_idx_to_bead.shape[0]);
1659:
1660: # interaction radius -> halo width W = R_int + 2 (2 covers the max bead
1661: # displacement of a terminal/internal move; R_int covers the energy read).
+1662: idx_np = np.asarray(idx_to_bead)
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1662, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_asarray); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1662, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_idx_to_bead, 2, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1662, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1662, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_idx_np = __pyx_t_1; __pyx_t_1 = 0;
+1663: cdef int R_int = 3 if np.any(idx_np[:, 1] == 1) else 1
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1663, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_any); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1663, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_idx_np, __pyx_mstate_global->__pyx_tuple[1]); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1663, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyLong_EqObjC(__pyx_t_3, __pyx_mstate_global->__pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1663, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1663, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1663, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_8) { __pyx_t_6 = 3; } else { __pyx_t_6 = 1; } __pyx_v_R_int = __pyx_t_6;
+1664: cdef int W = R_int + 2
__pyx_cur_scope->__pyx_v_W = (__pyx_v_R_int + 2);
1665:
+1666: cdef int cap = 4
__pyx_v_cap = 4;
+1667: cdef int nbx = _choose_nb(XDIM, W, cap)
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_choose_nb); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1667, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_XDIM); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1667, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_W); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1667, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_cap); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1667, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_t_4, __pyx_t_3, __pyx_t_9}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1667, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1667, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_nbx = __pyx_t_6;
+1668: cdef int nby = _choose_nb(YDIM, W, cap)
__pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_choose_nb); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1668, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_YDIM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1668, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_W); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1668, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_cap); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1668, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[4] = {__pyx_t_7, __pyx_t_3, __pyx_t_4, __pyx_t_2}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1668, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1668, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_nby = __pyx_t_6;
+1669: cdef int Lx = XDIM // nbx
if (unlikely(__pyx_v_nbx == 0)) {
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__PYX_ERR(0, 1669, __pyx_L1_error)
}
else if (sizeof(int) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_nbx == (int)-1) && unlikely(__Pyx_UNARY_NEG_WOULD_OVERFLOW(__pyx_v_XDIM))) {
PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
__PYX_ERR(0, 1669, __pyx_L1_error)
}
__pyx_v_Lx = __Pyx_div_int(__pyx_v_XDIM, __pyx_v_nbx, 0);
+1670: cdef int Ly = YDIM // nby
if (unlikely(__pyx_v_nby == 0)) {
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__PYX_ERR(0, 1670, __pyx_L1_error)
}
else if (sizeof(int) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_nby == (int)-1) && unlikely(__Pyx_UNARY_NEG_WOULD_OVERFLOW(__pyx_v_YDIM))) {
PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
__PYX_ERR(0, 1670, __pyx_L1_error)
}
__pyx_v_Ly = __Pyx_div_int(__pyx_v_YDIM, __pyx_v_nby, 0);
+1671: cdef int num_blocks = nbx * nby
__pyx_v_num_blocks = (__pyx_v_nbx * __pyx_v_nby);
1672:
1673: # reproducible shifts + per-block seeds derived from passed_seed
+1674: rstate = np.random.RandomState(passed_seed & 0x7FFFFFFF)
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1674, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_random); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1674, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_9 = __pyx_t_4; __Pyx_INCREF(__pyx_t_9); __pyx_t_2 = __Pyx_PyLong_From_long((__pyx_v_passed_seed & 0x7FFFFFFF)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1674, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_2}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_RandomState, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1674, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_rstate = __pyx_t_1; __pyx_t_1 = 0;
+1675: cdef int shift_x = int(rstate.randint(0, Lx)) if nbx > 1 else 0
__pyx_t_8 = (__pyx_v_nbx > 1);
if (__pyx_t_8) {
__pyx_t_4 = __pyx_v_rstate;
__Pyx_INCREF(__pyx_t_4);
__pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_Lx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1675, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_mstate_global->__pyx_int_0, __pyx_t_2};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_randint, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1675, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_t_2 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1675, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_10 = __Pyx_PyLong_As_int(__pyx_t_2); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1675, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_6 = __pyx_t_10;
} else {
__pyx_t_6 = 0;
}
__pyx_v_shift_x = __pyx_t_6;
+1676: cdef int shift_y = int(rstate.randint(0, Ly)) if nby > 1 else 0
__pyx_t_8 = (__pyx_v_nby > 1);
if (__pyx_t_8) {
__pyx_t_1 = __pyx_v_rstate;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_Ly); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1676, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_mstate_global->__pyx_int_0, __pyx_t_4};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_randint, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1676, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_4 = __Pyx_PyNumber_Int(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1676, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_10 = __Pyx_PyLong_As_int(__pyx_t_4); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1676, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_6 = __pyx_t_10;
} else {
__pyx_t_6 = 0;
}
__pyx_v_shift_y = __pyx_t_6;
1677:
1678: # ---- bucket beads into blocks (interior beads only) -----------------
+1679: gx = idx_np[:, 5].astype(np.int64)
__pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_idx_np, __pyx_mstate_global->__pyx_tuple[2]); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1679, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1679, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1679, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3}; __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1679, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_v_gx = __pyx_t_4; __pyx_t_4 = 0;
+1680: gy = idx_np[:, 6].astype(np.int64)
__pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_idx_np, __pyx_mstate_global->__pyx_tuple[3]); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1680, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __pyx_t_3; __Pyx_INCREF(__pyx_t_1); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1680, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1680, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_9}; __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1680, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_v_gy = __pyx_t_4; __pyx_t_4 = 0;
1681:
1682: # per-dim block index (-1 => frozen: in halo or remainder or wrong region)
+1683: def dim_block(g, nb, L, DIM, shift):
/* Python wrapper */
static PyObject *__pyx_pw_5pimms_15mega_crank_fast_22mega_crank_parallel_2D_1dim_block(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_5pimms_15mega_crank_fast_22mega_crank_parallel_2D_1dim_block = {"dim_block", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5pimms_15mega_crank_fast_22mega_crank_parallel_2D_1dim_block, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5pimms_15mega_crank_fast_22mega_crank_parallel_2D_1dim_block(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_g = 0;
PyObject *__pyx_v_nb = 0;
PyObject *__pyx_v_L = 0;
PyObject *__pyx_v_DIM = 0;
PyObject *__pyx_v_shift = 0;
#if !CYTHON_METH_FASTCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("dim_block (wrapper)", 0);
#if !CYTHON_METH_FASTCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_g,&__pyx_mstate_global->__pyx_n_u_nb,&__pyx_mstate_global->__pyx_n_u_L,&__pyx_mstate_global->__pyx_n_u_DIM,&__pyx_mstate_global->__pyx_n_u_shift,0};
PyObject* values[5] = {0,0,0,0,0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 1683, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 5:
values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 1683, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 4:
values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 1683, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 3:
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1683, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1683, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1683, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "dim_block", 0) < (0)) __PYX_ERR(0, 1683, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 5; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("dim_block", 1, 5, 5, i); __PYX_ERR(0, 1683, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 5)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1683, __pyx_L3_error)
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1683, __pyx_L3_error)
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1683, __pyx_L3_error)
values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 1683, __pyx_L3_error)
values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 1683, __pyx_L3_error)
}
__pyx_v_g = values[0];
__pyx_v_nb = values[1];
__pyx_v_L = values[2];
__pyx_v_DIM = values[3];
__pyx_v_shift = values[4];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("dim_block", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 1683, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("pimms.mega_crank_fast.mega_crank_parallel_2D.dim_block", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_5pimms_15mega_crank_fast_22mega_crank_parallel_2D_dim_block(__pyx_self, __pyx_v_g, __pyx_v_nb, __pyx_v_L, __pyx_v_DIM, __pyx_v_shift);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_5pimms_15mega_crank_fast_22mega_crank_parallel_2D_dim_block(PyObject *__pyx_self, PyObject *__pyx_v_g, PyObject *__pyx_v_nb, PyObject *__pyx_v_L, PyObject *__pyx_v_DIM, PyObject *__pyx_v_shift) {
struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_1_mega_crank_parallel_2D *__pyx_cur_scope;
struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_1_mega_crank_parallel_2D *__pyx_outer_scope;
PyObject *__pyx_v_s = NULL;
PyObject *__pyx_v_bj = NULL;
PyObject *__pyx_v_within = NULL;
PyObject *__pyx_v_bad = NULL;
PyObject *__pyx_r = NULL;
__pyx_outer_scope = (struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_1_mega_crank_parallel_2D *) __Pyx_CyFunction_GetClosure(__pyx_self);
__pyx_cur_scope = __pyx_outer_scope;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("pimms.mega_crank_fast.mega_crank_parallel_2D.dim_block", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_s);
__Pyx_XDECREF(__pyx_v_bj);
__Pyx_XDECREF(__pyx_v_within);
__Pyx_XDECREF(__pyx_v_bad);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_5pimms_15mega_crank_fast_22mega_crank_parallel_2D_1dim_block, 0, __pyx_mstate_global->__pyx_n_u_mega_crank_parallel_2D_locals_di, ((PyObject*)__pyx_cur_scope), __pyx_mstate_global->__pyx_n_u_pimms_mega_crank_fast, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[1])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1683, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_v_dim_block = __pyx_t_4;
__pyx_t_4 = 0;
+1684: if nb == 1:
__pyx_t_1 = (__Pyx_PyLong_BoolEqObjC(__pyx_v_nb, __pyx_mstate_global->__pyx_int_1, 1, 0)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1684, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+1685: return np.zeros(num_beads, dtype=np.int64) # whole dim = block 0
__Pyx_XDECREF(__pyx_r); __pyx_t_3 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1685, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_zeros); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1685, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_num_beads); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1685, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1685, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1685, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_3, __pyx_t_4}; __pyx_t_6 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1685, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_7, __pyx_t_6, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 1685, __pyx_L1_error) __pyx_t_2 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_6); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1685, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0;
+1686: s = (g - shift) % DIM
__pyx_t_2 = PyNumber_Subtract(__pyx_v_g, __pyx_v_shift); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1686, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = PyNumber_Remainder(__pyx_t_2, __pyx_v_DIM); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1686, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_s = __pyx_t_5; __pyx_t_5 = 0;
+1687: bj = s // L
__pyx_t_5 = PyNumber_FloorDivide(__pyx_v_s, __pyx_v_L); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1687, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_v_bj = __pyx_t_5; __pyx_t_5 = 0;
+1688: within = s - bj * L
__pyx_t_5 = PyNumber_Multiply(__pyx_v_bj, __pyx_v_L); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1688, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = PyNumber_Subtract(__pyx_v_s, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1688, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_within = __pyx_t_2; __pyx_t_2 = 0;
+1689: bad = (s >= nb * L) | (within < W) | (within >= L - W)
__pyx_t_2 = PyNumber_Multiply(__pyx_v_nb, __pyx_v_L); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1689, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = PyObject_RichCompare(__pyx_v_s, __pyx_t_2, Py_GE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1689, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_W); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1689, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = PyObject_RichCompare(__pyx_v_within, __pyx_t_2, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1689, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Or(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1689, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_W); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1689, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = PyNumber_Subtract(__pyx_v_L, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1689, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyObject_RichCompare(__pyx_v_within, __pyx_t_5, Py_GE); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1689, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyNumber_Or(__pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1689, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_bad = __pyx_t_5; __pyx_t_5 = 0;
+1690: bj = bj.copy()
__pyx_t_6 = __pyx_v_bj; __Pyx_INCREF(__pyx_t_6); __pyx_t_8 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL}; __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_copy, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1690, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } __Pyx_DECREF_SET(__pyx_v_bj, __pyx_t_5); __pyx_t_5 = 0;
+1691: bj[bad] = -1
if (unlikely((PyObject_SetItem(__pyx_v_bj, __pyx_v_bad, __pyx_mstate_global->__pyx_int_neg_1) < 0))) __PYX_ERR(0, 1691, __pyx_L1_error)
+1692: return bj
__Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_bj); __pyx_r = __pyx_v_bj; goto __pyx_L0;
1693:
+1694: bxj = dim_block(gx, nbx, Lx, XDIM, shift_x)
__pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_nbx); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_Lx); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_XDIM); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_shift_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __pyx_pf_5pimms_15mega_crank_fast_22mega_crank_parallel_2D_dim_block(__pyx_v_dim_block, __pyx_v_gx, __pyx_t_4, __pyx_t_3, __pyx_t_9, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_bxj = __pyx_t_2; __pyx_t_2 = 0;
+1695: byj = dim_block(gy, nby, Ly, YDIM, shift_y)
__pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_nby); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1695, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_Ly); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1695, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_YDIM); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1695, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_shift_y); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1695, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __pyx_pf_5pimms_15mega_crank_fast_22mega_crank_parallel_2D_dim_block(__pyx_v_dim_block, __pyx_v_gy, __pyx_t_2, __pyx_t_1, __pyx_t_9, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1695, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_byj = __pyx_t_4; __pyx_t_4 = 0;
1696:
1697: # movable iff in a block interior AND not frozen (frozen beads remain as
1698: # fixed obstacles but are never selected for a move)
+1699: movable = (bxj >= 0) & (byj >= 0) & (np.asarray(frozen_mask) == 0)
__pyx_t_4 = PyObject_RichCompare(__pyx_v_bxj, __pyx_mstate_global->__pyx_int_0, Py_GE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1699, __pyx_L1_error) __pyx_t_3 = PyObject_RichCompare(__pyx_v_byj, __pyx_mstate_global->__pyx_int_0, Py_GE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1699, __pyx_L1_error) __pyx_t_9 = PyNumber_And(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1699, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1699, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_asarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1699, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_frozen_mask, 1, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1699, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_1}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1699, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_t_2 = __Pyx_PyLong_EqObjC(__pyx_t_3, __pyx_mstate_global->__pyx_int_0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1699, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyNumber_And(__pyx_t_9, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1699, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_movable = __pyx_t_3; __pyx_t_3 = 0;
+1700: block_of_bead = (bxj * nby + byj)
__pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_nby); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1700, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyNumber_Multiply(__pyx_v_bxj, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1700, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_v_byj); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1700, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_block_of_bead = __pyx_t_3; __pyx_t_3 = 0;
+1701: block_of_bead[~movable] = -1
__pyx_t_3 = PyNumber_Invert(__pyx_v_movable); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1701, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (unlikely((PyObject_SetItem(__pyx_v_block_of_bead, __pyx_t_3, __pyx_mstate_global->__pyx_int_neg_1) < 0))) __PYX_ERR(0, 1701, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
1702:
+1703: sel = np.nonzero(movable)[0].astype(np.int32)
__pyx_t_1 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1703, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_nonzero); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1703, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_movable}; __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1703, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_9, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 0, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1703, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_2 = __pyx_t_7; __Pyx_INCREF(__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1703, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1703, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_1}; __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1703, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_v_sel = __pyx_t_3; __pyx_t_3 = 0;
+1704: if sel.shape[0] == 0:
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_sel, __pyx_mstate_global->__pyx_n_u_shape); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1704, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 0, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1704, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_8 = (__Pyx_PyLong_BoolEqObjC(__pyx_t_7, __pyx_mstate_global->__pyx_int_0, 0, 0)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1704, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (__pyx_t_8) { /* … */ }
1705: # nothing movable this sweep (tiny box / unlucky shift) - no-op
+1706: return (energy, 0)
__Pyx_XDECREF(__pyx_r); __pyx_t_7 = __Pyx_PyLong_From_long(__pyx_v_energy); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1706, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1706, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_7); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_7) != (0)) __PYX_ERR(0, 1706, __pyx_L1_error); __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_0); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_mstate_global->__pyx_int_0) != (0)) __PYX_ERR(0, 1706, __pyx_L1_error); __pyx_t_7 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0;
1707:
+1708: sel_blocks = block_of_bead[sel]
__pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_block_of_bead, __pyx_v_sel); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1708, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_sel_blocks = __pyx_t_3; __pyx_t_3 = 0;
+1709: order = np.argsort(sel_blocks, kind="stable")
__pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1709, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_argsort); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1709, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_7, __pyx_v_sel_blocks}; __pyx_t_1 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1709, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_kind, __pyx_mstate_global->__pyx_n_u_stable, __pyx_t_1, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 1709, __pyx_L1_error) __pyx_t_3 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_1); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1709, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_v_order = __pyx_t_3; __pyx_t_3 = 0;
+1710: ids = sel[order].astype(np.int32)
__pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_sel, __pyx_v_order); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1710, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1710, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1710, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_9}; __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1710, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_v_ids = __pyx_t_3; __pyx_t_3 = 0;
+1711: sorted_blocks = sel_blocks[order]
__pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_sel_blocks, __pyx_v_order); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1711, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_sorted_blocks = __pyx_t_3; __pyx_t_3 = 0;
1712:
+1713: counts = np.bincount(sorted_blocks, minlength=num_blocks).astype(np.int32)
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1713, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_bincount); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1713, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1713, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_2, __pyx_v_sorted_blocks}; __pyx_t_11 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1713, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_minlength, __pyx_t_7, __pyx_t_11, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 1713, __pyx_L1_error) __pyx_t_9 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_11); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1713, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_t_1 = __pyx_t_9; __Pyx_INCREF(__pyx_t_1); __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1713, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1713, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_11}; __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1713, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_v_counts = __pyx_t_3; __pyx_t_3 = 0;
+1714: starts = np.zeros(num_blocks + 1, dtype=np.int32)
__pyx_t_9 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1714, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1714, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = __Pyx_PyLong_From_long((__pyx_v_num_blocks + 1)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1714, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1714, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1714, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_1))) { __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_1); assert(__pyx_t_9); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1); __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_1, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_9, __pyx_t_11}; __pyx_t_4 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1714, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_7, __pyx_t_4, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 1714, __pyx_L1_error) __pyx_t_3 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_4); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1714, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_v_starts = __pyx_t_3; __pyx_t_3 = 0;
+1715: starts[1:] = np.cumsum(counts)
__pyx_t_1 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1715, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_cumsum); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1715, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_counts}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1715, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } if (__Pyx_PyObject_SetSlice(__pyx_v_starts, __pyx_t_3, 1, 0, NULL, NULL, &__pyx_mstate_global->__pyx_slice[1], 1, 0, 0) < (0)) __PYX_ERR(0, 1715, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
1716:
1717: # distribute nsteps proportional to each block's movable bead count
+1718: total_interior = int(counts.sum())
__pyx_t_7 = __pyx_v_counts; __Pyx_INCREF(__pyx_t_7); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL}; __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_sum, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1718, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_t_7 = __Pyx_PyNumber_Int(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1718, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_total_interior = ((PyObject*)__pyx_t_7); __pyx_t_7 = 0;
+1719: attempts = np.maximum(
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1719, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_maximum); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1719, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+1720: (nsteps * counts.astype(np.int64) // max(total_interior, 1)), 0).astype(np.int32)
__pyx_t_11 = __Pyx_PyLong_From_int(__pyx_v_nsteps); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1720, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = __pyx_v_counts; __Pyx_INCREF(__pyx_t_12); __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1720, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1720, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_14}; __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1720, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_t_14 = PyNumber_Multiply(__pyx_t_11, __pyx_t_2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1720, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_15 = 1; __Pyx_INCREF(__pyx_v_total_interior); __pyx_t_16 = __pyx_v_total_interior; __pyx_t_11 = __Pyx_PyLong_From_long(__pyx_t_15); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1720, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = PyObject_RichCompare(__pyx_t_11, __pyx_t_16, Py_GT); __Pyx_XGOTREF(__pyx_t_12); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1720, __pyx_L1_error) __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1720, __pyx_L1_error) __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (__pyx_t_8) { __pyx_t_12 = __Pyx_PyLong_From_long(__pyx_t_15); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1720, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); if (__Pyx_PyInt_FromNumber(&__pyx_t_12, NULL, 0) < (0)) __PYX_ERR(0, 1720, __pyx_L1_error) __pyx_t_2 = __pyx_t_12; __pyx_t_12 = 0; } else { __Pyx_INCREF(__pyx_t_16); __pyx_t_2 = __pyx_t_16; } __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_12 = PyNumber_FloorDivide(__pyx_t_14, __pyx_t_2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1720, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_12, __pyx_mstate_global->__pyx_int_0}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1719, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_3 = __pyx_t_1; __Pyx_INCREF(__pyx_t_3); __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1720, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1720, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_12}; __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1720, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } __pyx_v_attempts = __pyx_t_7; __pyx_t_7 = 0;
1721:
1722: # shifted lower bound of each block per dim (for the in-worker interior test)
+1723: bix = np.arange(num_blocks, dtype=np.int32) // nby
__pyx_t_1 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1723, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_arange); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1723, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_12 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1723, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1723, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1723, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_1, __pyx_t_12}; __pyx_t_9 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1723, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_4, __pyx_t_9, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 1723, __pyx_L1_error) __pyx_t_7 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_9); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1723, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_nby); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1723, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_9 = PyNumber_FloorDivide(__pyx_t_7, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1723, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_bix = __pyx_t_9; __pyx_t_9 = 0;
+1724: biy = np.arange(num_blocks, dtype=np.int32) % nby
__pyx_t_3 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1724, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_arange); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1724, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1724, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1724, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1724, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_3, __pyx_t_7}; __pyx_t_12 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1724, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_1, __pyx_t_12, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 1724, __pyx_L1_error) __pyx_t_9 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_12); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1724, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_nby); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1724, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_12 = PyNumber_Remainder(__pyx_t_9, __pyx_t_4); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1724, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_biy = __pyx_t_12; __pyx_t_12 = 0;
+1725: blo_x = (bix * Lx).astype(np.int32)
__pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_Lx); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1725, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = PyNumber_Multiply(__pyx_v_bix, __pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1725, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_4 = __pyx_t_1; __Pyx_INCREF(__pyx_t_4); __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1725, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1725, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7}; __pyx_t_12 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1725, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); } __pyx_v_blo_x = __pyx_t_12; __pyx_t_12 = 0;
+1726: blo_y = (biy * Ly).astype(np.int32)
__pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_Ly); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1726, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = PyNumber_Multiply(__pyx_v_biy, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1726, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_1 = __pyx_t_4; __Pyx_INCREF(__pyx_t_1); __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1726, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1726, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_9}; __pyx_t_12 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1726, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); } __pyx_v_blo_y = __pyx_t_12; __pyx_t_12 = 0;
1727:
1728: # independent PRNG seed per block
+1729: seeds = (np.arange(num_blocks, dtype=np.uint64) + np.uint64(passed_seed) + np.uint64(0x9E3779B9)) \
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1729, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_arange); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1729, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1729, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1729, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_uint64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1729, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_1))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_1, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_4, __pyx_t_9}; __pyx_t_7 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1729, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_3, __pyx_t_7, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 1729, __pyx_L1_error) __pyx_t_12 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_7); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1729, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); } __pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1729, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_uint64); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1729, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_passed_seed); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1729, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_3}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1729, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_9 = PyNumber_Add(__pyx_t_12, __pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1729, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_12 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1729, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_uint64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1729, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_12); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_12); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_mstate_global->__pyx_int_2654435769}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1729, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_7 = PyNumber_Add(__pyx_t_9, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1729, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1730: * np.uint64(0x2545F4914F6CDD1D) + np.uint64(1)
__pyx_t_9 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1730, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_uint64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1730, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_9); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_mstate_global->__pyx_int_0x2545f4914f6cdd1d}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1730, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_3 = PyNumber_Multiply(__pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1730, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1730, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_uint64); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1730, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_12))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_12); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_12); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_12, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_int_1}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_12, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1730, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_12 = PyNumber_Add(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1730, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_seeds = __pyx_t_12; __pyx_t_12 = 0;
1731:
+1732: out_delta = np.zeros(num_blocks, dtype=np.int64)
__pyx_t_1 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1732, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_zeros); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1732, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1732, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1732, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1732, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_1, __pyx_t_3}; __pyx_t_9 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1732, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_4, __pyx_t_9, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 1732, __pyx_L1_error) __pyx_t_12 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_9); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1732, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); } __pyx_v_out_delta = __pyx_t_12; __pyx_t_12 = 0;
+1733: out_accepted = np.zeros(num_blocks, dtype=np.int32)
__pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1733, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_zeros); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1733, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1733, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1733, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1733, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_7, __pyx_t_9}; __pyx_t_3 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1733, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_1, __pyx_t_3, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 1733, __pyx_L1_error) __pyx_t_12 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_3); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1733, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); } __pyx_v_out_accepted = __pyx_t_12; __pyx_t_12 = 0;
1734:
1735: # typed memoryviews for the nogil region
+1736: cdef int[::1] ids_mv = ids
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_ids, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 1736, __pyx_L1_error) __pyx_v_ids_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+1737: cdef int[::1] starts_mv = starts
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_starts, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 1737, __pyx_L1_error) __pyx_v_starts_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+1738: cdef int[::1] attempts_mv = attempts
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_attempts, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 1738, __pyx_L1_error) __pyx_v_attempts_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+1739: cdef unsigned long long[::1] seeds_mv = seeds
__pyx_t_18 = __Pyx_PyObject_to_MemoryviewSlice_dc_unsigned_PY_LONG_LONG(__pyx_v_seeds, PyBUF_WRITABLE); if (unlikely(!__pyx_t_18.memview)) __PYX_ERR(0, 1739, __pyx_L1_error) __pyx_v_seeds_mv = __pyx_t_18; __pyx_t_18.memview = NULL; __pyx_t_18.data = NULL;
+1740: cdef int[::1] blo_x_mv = blo_x
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_blo_x, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 1740, __pyx_L1_error) __pyx_v_blo_x_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+1741: cdef int[::1] blo_y_mv = blo_y
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_blo_y, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 1741, __pyx_L1_error) __pyx_v_blo_y_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+1742: cdef long[::1] out_delta_mv = out_delta
__pyx_t_19 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_v_out_delta, PyBUF_WRITABLE); if (unlikely(!__pyx_t_19.memview)) __PYX_ERR(0, 1742, __pyx_L1_error) __pyx_v_out_delta_mv = __pyx_t_19; __pyx_t_19.memview = NULL; __pyx_t_19.data = NULL;
+1743: cdef int[::1] out_accepted_mv = out_accepted
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_out_accepted, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 1743, __pyx_L1_error) __pyx_v_out_accepted_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
1744:
1745: cdef int b
+1746: cdef int nthreads = num_threads if num_threads > 0 else 1
__pyx_t_8 = (__pyx_v_num_threads > 0);
if (__pyx_t_8) {
__pyx_t_6 = __pyx_v_num_threads;
} else {
__pyx_t_6 = 1;
}
__pyx_v_nthreads = __pyx_t_6;
1747:
1748: # ---- parallel region: each block is independent -----------------
+1749: for b in prange(num_blocks, nogil=True, num_threads=nthreads, schedule='dynamic'):
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
__pyx_t_6 = __pyx_v_num_blocks;
{
#if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
#undef likely
#undef unlikely
#define likely(x) (x)
#define unlikely(x) (x)
#endif
__pyx_t_20 = (__pyx_t_6 - 0 + 1 - 1/abs(1)) / 1;
if (__pyx_t_20 > 0)
{
#ifdef _OPENMP
#pragma omp parallel
#endif /* _OPENMP */
{
#ifdef _OPENMP
#pragma omp for firstprivate(__pyx_v_b) lastprivate(__pyx_v_b) schedule(dynamic) __pyx_t_6 = __pyx_v_num_blocks;
{
#if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
#undef likely
#undef unlikely
#define likely(x) (x)
#define unlikely(x) (x)
#endif
__pyx_t_20 = (__pyx_t_6 - 0 + 1 - 1/abs(1)) / 1;
if (__pyx_t_20 > 0)
{
#ifdef _OPENMP
#pragma omp parallel
#endif /* _OPENMP */
{
#ifdef _OPENMP
#pragma omp for firstprivate(__pyx_v_b) lastprivate(__pyx_v_b) schedule(dynamic) num_threads(__pyx_v_nthreads)
#endif /* _OPENMP */
for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_20; __pyx_t_10++){
{
__pyx_v_b = (int)(0 + 1 * __pyx_t_10);
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L6;
}
__pyx_L6:;
}
}
+1750: run_block_2D(b, ids_mv, starts_mv, attempts_mv, seeds_mv,
__pyx_f_5pimms_15mega_crank_fast_run_block_2D(__pyx_v_b, __pyx_v_ids_mv, __pyx_v_starts_mv, __pyx_v_attempts_mv, __pyx_v_seeds_mv, __pyx_v_blo_x_mv, __pyx_v_blo_y_mv, __pyx_v_Lx, __pyx_v_Ly, __pyx_v_nbx, __pyx_v_nby, __pyx_v_shift_x, __pyx_v_shift_y, __pyx_cur_scope->__pyx_v_W, __pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_angle_lookup, __pyx_v_invtemp, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_hardwall, __pyx_v_out_delta_mv, __pyx_v_out_accepted_mv);
}
}
}
}
}
#if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
#undef likely
#undef unlikely
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
#endif
}
1751: blo_x_mv, blo_y_mv,
1752: Lx, Ly, nbx, nby,
1753: shift_x, shift_y, W,
1754: grid, type_grid, idx_to_bead,
1755: interaction_table, LR_interaction_table, SLR_interaction_table,
1756: angle_lookup, invtemp, XDIM, YDIM, hardwall,
1757: out_delta_mv, out_accepted_mv)
1758:
+1759: cdef long total_delta_2d = 0
__pyx_v_total_delta_2d = 0;
+1760: cdef int total_accepted_2d = 0
__pyx_v_total_accepted_2d = 0;
+1761: for b in range(num_blocks):
__pyx_t_20 = __pyx_v_num_blocks;
__pyx_t_10 = __pyx_t_20;
for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_10; __pyx_t_6+=1) {
__pyx_v_b = __pyx_t_6;
+1762: total_delta_2d += out_delta_mv[b]
__pyx_t_21 = __pyx_v_b;
__pyx_v_total_delta_2d = (__pyx_v_total_delta_2d + (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_out_delta_mv.data) + __pyx_t_21)) ))));
+1763: total_accepted_2d += out_accepted_mv[b]
__pyx_t_21 = __pyx_v_b;
__pyx_v_total_accepted_2d = (__pyx_v_total_accepted_2d + (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_out_accepted_mv.data) + __pyx_t_21)) ))));
}
1764:
+1765: return (energy + total_delta_2d, total_accepted_2d)
__Pyx_XDECREF(__pyx_r); __pyx_t_12 = __Pyx_PyLong_From_long((__pyx_v_energy + __pyx_v_total_delta_2d)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1765, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_total_accepted_2d); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1765, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1765, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_12); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_12) != (0)) __PYX_ERR(0, 1765, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_4); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4) != (0)) __PYX_ERR(0, 1765, __pyx_L1_error); __pyx_t_12 = 0; __pyx_t_4 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0;
1766:
1767:
+1768: def parallel_layout_info(int XDIM, int YDIM, int ZDIM, has_LR, int num_threads=1):
/* Python wrapper */ static PyObject *__pyx_pw_5pimms_15mega_crank_fast_11parallel_layout_info(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_5pimms_15mega_crank_fast_10parallel_layout_info, "Introspection helper: returns the block decomposition the parallel kernel\n would use for a given box (decomposition is independent of num_threads)."); static PyMethodDef __pyx_mdef_5pimms_15mega_crank_fast_11parallel_layout_info = {"parallel_layout_info", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5pimms_15mega_crank_fast_11parallel_layout_info, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_5pimms_15mega_crank_fast_10parallel_layout_info}; static PyObject *__pyx_pw_5pimms_15mega_crank_fast_11parallel_layout_info(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { int __pyx_v_XDIM; int __pyx_v_YDIM; int __pyx_v_ZDIM; PyObject *__pyx_v_has_LR = 0; CYTHON_UNUSED int __pyx_v_num_threads; #if !CYTHON_METH_FASTCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("parallel_layout_info (wrapper)", 0); #if !CYTHON_METH_FASTCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_XDIM,&__pyx_mstate_global->__pyx_n_u_YDIM,&__pyx_mstate_global->__pyx_n_u_ZDIM,&__pyx_mstate_global->__pyx_n_u_has_LR,&__pyx_mstate_global->__pyx_n_u_num_threads,0}; PyObject* values[5] = {0,0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 1768, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 5: values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 1768, __pyx_L3_error) CYTHON_FALLTHROUGH; case 4: values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 1768, __pyx_L3_error) CYTHON_FALLTHROUGH; case 3: values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1768, __pyx_L3_error) CYTHON_FALLTHROUGH; case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1768, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1768, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "parallel_layout_info", 0) < (0)) __PYX_ERR(0, 1768, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 4; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("parallel_layout_info", 0, 4, 5, i); __PYX_ERR(0, 1768, __pyx_L3_error) } } } else { switch (__pyx_nargs) { case 5: values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 1768, __pyx_L3_error) CYTHON_FALLTHROUGH; case 4: values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 1768, __pyx_L3_error) values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1768, __pyx_L3_error) values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1768, __pyx_L3_error) values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1768, __pyx_L3_error) break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_XDIM = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_XDIM == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1768, __pyx_L3_error) __pyx_v_YDIM = __Pyx_PyLong_As_int(values[1]); if (unlikely((__pyx_v_YDIM == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1768, __pyx_L3_error) __pyx_v_ZDIM = __Pyx_PyLong_As_int(values[2]); if (unlikely((__pyx_v_ZDIM == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1768, __pyx_L3_error) __pyx_v_has_LR = values[3]; if (values[4]) { __pyx_v_num_threads = __Pyx_PyLong_As_int(values[4]); if (unlikely((__pyx_v_num_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1768, __pyx_L3_error) } else { __pyx_v_num_threads = ((int)((int)1)); } } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("parallel_layout_info", 0, 4, 5, __pyx_nargs); __PYX_ERR(0, 1768, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("pimms.mega_crank_fast.parallel_layout_info", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5pimms_15mega_crank_fast_10parallel_layout_info(__pyx_self, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_has_LR, __pyx_v_num_threads); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5pimms_15mega_crank_fast_10parallel_layout_info(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_XDIM, int __pyx_v_YDIM, int __pyx_v_ZDIM, PyObject *__pyx_v_has_LR, CYTHON_UNUSED int __pyx_v_num_threads) { int __pyx_v_R_int; int __pyx_v_W; int __pyx_v_cap; int __pyx_v_nbx; int __pyx_v_nby; int __pyx_v_nbz; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("pimms.mega_crank_fast.parallel_layout_info", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_4 = __Pyx_PyLong_From_int(((int)1)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1768, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyTuple_Pack(1, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1768, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_5pimms_15mega_crank_fast_11parallel_layout_info, 0, __pyx_mstate_global->__pyx_n_u_parallel_layout_info, NULL, __pyx_mstate_global->__pyx_n_u_pimms_mega_crank_fast, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[11])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1768, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4); #endif __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_t_5); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_parallel_layout_info, __pyx_t_4) < (0)) __PYX_ERR(0, 1768, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
1769: """Introspection helper: returns the block decomposition the parallel kernel
1770: would use for a given box (decomposition is independent of num_threads)."""
+1771: cdef int R_int = 3 if has_LR else 1
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_has_LR); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1771, __pyx_L1_error) if (__pyx_t_2) { __pyx_t_1 = 3; } else { __pyx_t_1 = 1; } __pyx_v_R_int = __pyx_t_1;
+1772: cdef int W = R_int + 2
__pyx_v_W = (__pyx_v_R_int + 2);
+1773: cdef int cap = 4
__pyx_v_cap = 4;
+1774: cdef int nbx = _choose_nb(XDIM, W, cap)
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_choose_nb); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1774, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyLong_From_int(__pyx_v_XDIM); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1774, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_W); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1774, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyLong_From_int(__pyx_v_cap); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1774, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_t_6, __pyx_t_7, __pyx_t_8}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_9, (4-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1774, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_t_3); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1774, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_nbx = __pyx_t_1;
+1775: cdef int nby = _choose_nb(YDIM, W, cap)
__pyx_t_5 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_choose_nb); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1775, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_YDIM); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1775, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = __Pyx_PyLong_From_int(__pyx_v_W); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1775, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_cap); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1775, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_8))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_8); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_8, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[4] = {__pyx_t_5, __pyx_t_7, __pyx_t_6, __pyx_t_4}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_9, (4-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1775, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_t_3); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1775, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_nby = __pyx_t_1;
+1776: cdef int nbz = _choose_nb(ZDIM, W, cap)
__pyx_t_8 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_choose_nb); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1776, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = __Pyx_PyLong_From_int(__pyx_v_ZDIM); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1776, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_W); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1776, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_5 = __Pyx_PyLong_From_int(__pyx_v_cap); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1776, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_8); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[4] = {__pyx_t_8, __pyx_t_6, __pyx_t_7, __pyx_t_5}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_9, (4-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1776, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_t_3); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1776, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_nbz = __pyx_t_1;
+1777: return {
__Pyx_XDECREF(__pyx_r);
+1778: "W": W, "blocks": (nbx, nby, nbz), "num_blocks": nbx * nby * nbz,
__pyx_t_3 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1778, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_W); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1778, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_W, __pyx_t_4) < (0)) __PYX_ERR(0, 1778, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_nbx); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1778, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyLong_From_int(__pyx_v_nby); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1778, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_nbz); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1778, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1778, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_GIVEREF(__pyx_t_4); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4) != (0)) __PYX_ERR(0, 1778, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_5); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5) != (0)) __PYX_ERR(0, 1778, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_7); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_7) != (0)) __PYX_ERR(0, 1778, __pyx_L1_error); __pyx_t_4 = 0; __pyx_t_5 = 0; __pyx_t_7 = 0; if (PyDict_SetItem(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_blocks, __pyx_t_6) < (0)) __PYX_ERR(0, 1778, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyLong_From_int(((__pyx_v_nbx * __pyx_v_nby) * __pyx_v_nbz)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1778, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (PyDict_SetItem(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_num_blocks, __pyx_t_6) < (0)) __PYX_ERR(0, 1778, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+1779: "block_size": (XDIM // nbx, YDIM // nby, ZDIM // nbz),
if (unlikely(__pyx_v_nbx == 0)) {
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__PYX_ERR(0, 1779, __pyx_L1_error)
}
else if (sizeof(int) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_nbx == (int)-1) && unlikely(__Pyx_UNARY_NEG_WOULD_OVERFLOW(__pyx_v_XDIM))) {
PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
__PYX_ERR(0, 1779, __pyx_L1_error)
}
__pyx_t_6 = __Pyx_PyLong_From_int(__Pyx_div_int(__pyx_v_XDIM, __pyx_v_nbx, 0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1779, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
if (unlikely(__pyx_v_nby == 0)) {
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__PYX_ERR(0, 1779, __pyx_L1_error)
}
else if (sizeof(int) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_nby == (int)-1) && unlikely(__Pyx_UNARY_NEG_WOULD_OVERFLOW(__pyx_v_YDIM))) {
PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
__PYX_ERR(0, 1779, __pyx_L1_error)
}
__pyx_t_7 = __Pyx_PyLong_From_int(__Pyx_div_int(__pyx_v_YDIM, __pyx_v_nby, 0)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1779, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
if (unlikely(__pyx_v_nbz == 0)) {
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__PYX_ERR(0, 1779, __pyx_L1_error)
}
else if (sizeof(int) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_nbz == (int)-1) && unlikely(__Pyx_UNARY_NEG_WOULD_OVERFLOW(__pyx_v_ZDIM))) {
PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
__PYX_ERR(0, 1779, __pyx_L1_error)
}
__pyx_t_5 = __Pyx_PyLong_From_int(__Pyx_div_int(__pyx_v_ZDIM, __pyx_v_nbz, 0)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1779, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1779, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_GIVEREF(__pyx_t_6);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6) != (0)) __PYX_ERR(0, 1779, __pyx_L1_error);
__Pyx_GIVEREF(__pyx_t_7);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_7) != (0)) __PYX_ERR(0, 1779, __pyx_L1_error);
__Pyx_GIVEREF(__pyx_t_5);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_5) != (0)) __PYX_ERR(0, 1779, __pyx_L1_error);
__pyx_t_6 = 0;
__pyx_t_7 = 0;
__pyx_t_5 = 0;
if (PyDict_SetItem(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_block_size, __pyx_t_4) < (0)) __PYX_ERR(0, 1778, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_r = __pyx_t_3;
__pyx_t_3 = 0;
goto __pyx_L0;
1780: }
1781:
1782:
1783:
1784: # =====================================================================
1785: #
1786: # SLITHER (reptation) megamove kernel
1787: #
1788: # A slither advances a chain forwards or backwards like a snake: one end
1789: # "grows" into a random adjacent empty site and the other end retracts,
1790: # preserving the chain's shape (path) shifted by one bead.
1791: #
1792: # * Single-bead chains -> a local translation (single_bead_crank).
1793: # * Homopolymers -> O(1) interaction energy: only the vacated tail and
1794: # the new head sites change type, so dE is exactly
1795: # get_energy_change_c(vacated, new_end). Angle energy
1796: # is the (cheap) before/after chain-angle difference.
1797: # * Heteropolymers -> the reptation is decomposed into L single-bead moves
1798: # (move each bead, from the leading end inwards, into
1799: # the now-empty site ahead of it). dE is the sum of the
1800: # already-validated get_energy_change_c +
1801: # get_angle_energy_change_c over those L moves, which
1802: # is exact and energy-consistent by construction.
1803: #
1804: # Detailed balance: direction (head/tail grow) is 1/2 each and the new end is
1805: # proposed uniformly over the leading end's 27 neighbour offsets (the self
1806: # offset lands on the occupied end bead and is rejected), so the forward and
1807: # reverse proposals are symmetric and plain Metropolis on the total dE holds.
1808: # =====================================================================
1809:
+1810: cdef inline long _triplet_angle_3D(int mx, int my, int mz,
static CYTHON_INLINE long __pyx_f_5pimms_15mega_crank_fast__triplet_angle_3D(int __pyx_v_mx, int __pyx_v_my, int __pyx_v_mz, int __pyx_v_lx, int __pyx_v_ly, int __pyx_v_lz, int __pyx_v_rx, int __pyx_v_ry, int __pyx_v_rz, int __pyx_v_ic, __Pyx_memviewslice __pyx_v_angle_lookup) {
int __pyx_v_a0;
int __pyx_v_a1;
int __pyx_v_a2;
int __pyx_v_b0;
int __pyx_v_b1;
int __pyx_v_b2;
long __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast._triplet_angle_3D", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
return __pyx_r;
}
1811: int lx, int ly, int lz,
1812: int rx, int ry, int rz,
1813: int ic,
1814: NUMPY_INT_TYPE[:, :, :, :, :, :, :] angle_lookup) noexcept nogil:
+1815: cdef int a0 = fix_angle_pbc_issues(mx - lx)
__pyx_v_a0 = __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues((__pyx_v_mx - __pyx_v_lx));
+1816: cdef int a1 = fix_angle_pbc_issues(my - ly)
__pyx_v_a1 = __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues((__pyx_v_my - __pyx_v_ly));
+1817: cdef int a2 = fix_angle_pbc_issues(mz - lz)
__pyx_v_a2 = __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues((__pyx_v_mz - __pyx_v_lz));
+1818: cdef int b0 = fix_angle_pbc_issues(mx - rx)
__pyx_v_b0 = __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues((__pyx_v_mx - __pyx_v_rx));
+1819: cdef int b1 = fix_angle_pbc_issues(my - ry)
__pyx_v_b1 = __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues((__pyx_v_my - __pyx_v_ry));
+1820: cdef int b2 = fix_angle_pbc_issues(mz - rz)
__pyx_v_b2 = __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues((__pyx_v_mz - __pyx_v_rz));
+1821: return angle_lookup[ic, a0 + 1, a1 + 1, a2 + 1, b0 + 1, b1 + 1, b2 + 1]
__pyx_t_1 = __pyx_v_ic;
__pyx_t_2 = (__pyx_v_a0 + 1);
__pyx_t_3 = (__pyx_v_a1 + 1);
__pyx_t_4 = (__pyx_v_a2 + 1);
__pyx_t_5 = (__pyx_v_b0 + 1);
__pyx_t_6 = (__pyx_v_b1 + 1);
__pyx_t_7 = (__pyx_v_b2 + 1);
__pyx_t_8 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_angle_lookup.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_8 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_angle_lookup.shape[0])) __pyx_t_8 = 0;
if (__pyx_t_2 < 0) {
__pyx_t_2 += __pyx_v_angle_lookup.shape[1];
if (unlikely(__pyx_t_2 < 0)) __pyx_t_8 = 1;
} else if (unlikely(__pyx_t_2 >= __pyx_v_angle_lookup.shape[1])) __pyx_t_8 = 1;
if (__pyx_t_3 < 0) {
__pyx_t_3 += __pyx_v_angle_lookup.shape[2];
if (unlikely(__pyx_t_3 < 0)) __pyx_t_8 = 2;
} else if (unlikely(__pyx_t_3 >= __pyx_v_angle_lookup.shape[2])) __pyx_t_8 = 2;
if (__pyx_t_4 < 0) {
__pyx_t_4 += __pyx_v_angle_lookup.shape[3];
if (unlikely(__pyx_t_4 < 0)) __pyx_t_8 = 3;
} else if (unlikely(__pyx_t_4 >= __pyx_v_angle_lookup.shape[3])) __pyx_t_8 = 3;
if (__pyx_t_5 < 0) {
__pyx_t_5 += __pyx_v_angle_lookup.shape[4];
if (unlikely(__pyx_t_5 < 0)) __pyx_t_8 = 4;
} else if (unlikely(__pyx_t_5 >= __pyx_v_angle_lookup.shape[4])) __pyx_t_8 = 4;
if (__pyx_t_6 < 0) {
__pyx_t_6 += __pyx_v_angle_lookup.shape[5];
if (unlikely(__pyx_t_6 < 0)) __pyx_t_8 = 5;
} else if (unlikely(__pyx_t_6 >= __pyx_v_angle_lookup.shape[5])) __pyx_t_8 = 5;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_angle_lookup.shape[6];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_8 = 6;
} else if (unlikely(__pyx_t_7 >= __pyx_v_angle_lookup.shape[6])) __pyx_t_8 = 6;
if (unlikely(__pyx_t_8 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_8);
__PYX_ERR(0, 1821, __pyx_L1_error)
}
__pyx_r = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=6 */ (( /* dim=5 */ (( /* dim=4 */ (( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_angle_lookup.data + __pyx_t_1 * __pyx_v_angle_lookup.strides[0]) ) + __pyx_t_2 * __pyx_v_angle_lookup.strides[1]) ) + __pyx_t_3 * __pyx_v_angle_lookup.strides[2]) ) + __pyx_t_4 * __pyx_v_angle_lookup.strides[3]) ) + __pyx_t_5 * __pyx_v_angle_lookup.strides[4]) ) + __pyx_t_6 * __pyx_v_angle_lookup.strides[5]) ) + __pyx_t_7 * __pyx_v_angle_lookup.strides[6]) )));
goto __pyx_L0;
1822:
1823:
1824: # position of chain-index k under a slither mode:
1825: # mode 0 = current (old) positions; 1 = head-grow proposal; 2 = tail-grow proposal
+1826: cdef inline void _smode_pos(NUMPY_INT_TYPE_long[:, :] idx, int off, int L, int mode,
static CYTHON_INLINE void __pyx_f_5pimms_15mega_crank_fast__smode_pos(__Pyx_memviewslice __pyx_v_idx, int __pyx_v_off, int __pyx_v_L, int __pyx_v_mode, int __pyx_v_nex, int __pyx_v_ney, int __pyx_v_nez, int __pyx_v_k, int *__pyx_v_o) {
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast._smode_pos", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
}
1827: int nex, int ney, int nez, int k, int* o) noexcept nogil:
+1828: if mode == 0:
switch (__pyx_v_mode) {
case 0:
/* … */
break;
case 1:
+1829: o[0] = idx[off + k, 5]; o[1] = idx[off + k, 6]; o[2] = idx[off + k, 7]
__pyx_t_1 = (__pyx_v_off + __pyx_v_k);
__pyx_t_2 = 5;
__pyx_t_3 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_3 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx.shape[0])) __pyx_t_3 = 0;
if (__pyx_t_2 < 0) {
__pyx_t_2 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_2 < 0)) __pyx_t_3 = 1;
} else if (unlikely(__pyx_t_2 >= __pyx_v_idx.shape[1])) __pyx_t_3 = 1;
if (unlikely(__pyx_t_3 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_3);
__PYX_ERR(0, 1829, __pyx_L1_error)
}
(__pyx_v_o[0]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_1 * __pyx_v_idx.strides[0]) ) + __pyx_t_2 * __pyx_v_idx.strides[1]) )));
__pyx_t_2 = (__pyx_v_off + __pyx_v_k);
__pyx_t_1 = 6;
__pyx_t_3 = -1;
if (__pyx_t_2 < 0) {
__pyx_t_2 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_2 < 0)) __pyx_t_3 = 0;
} else if (unlikely(__pyx_t_2 >= __pyx_v_idx.shape[0])) __pyx_t_3 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_3 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx.shape[1])) __pyx_t_3 = 1;
if (unlikely(__pyx_t_3 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_3);
__PYX_ERR(0, 1829, __pyx_L1_error)
}
(__pyx_v_o[1]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_2 * __pyx_v_idx.strides[0]) ) + __pyx_t_1 * __pyx_v_idx.strides[1]) )));
__pyx_t_1 = (__pyx_v_off + __pyx_v_k);
__pyx_t_2 = 7;
__pyx_t_3 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_3 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx.shape[0])) __pyx_t_3 = 0;
if (__pyx_t_2 < 0) {
__pyx_t_2 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_2 < 0)) __pyx_t_3 = 1;
} else if (unlikely(__pyx_t_2 >= __pyx_v_idx.shape[1])) __pyx_t_3 = 1;
if (unlikely(__pyx_t_3 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_3);
__PYX_ERR(0, 1829, __pyx_L1_error)
}
(__pyx_v_o[2]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_1 * __pyx_v_idx.strides[0]) ) + __pyx_t_2 * __pyx_v_idx.strides[1]) )));
+1830: elif mode == 1: # head-grow: bead k takes bead (k+1)'s old site, last takes new end
break;
default:
+1831: if k < L - 1:
__pyx_t_4 = (__pyx_v_k < (__pyx_v_L - 1));
if (__pyx_t_4) {
/* … */
goto __pyx_L3;
}
+1832: o[0] = idx[off + k + 1, 5]; o[1] = idx[off + k + 1, 6]; o[2] = idx[off + k + 1, 7]
__pyx_t_2 = ((__pyx_v_off + __pyx_v_k) + 1);
__pyx_t_1 = 5;
__pyx_t_3 = -1;
if (__pyx_t_2 < 0) {
__pyx_t_2 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_2 < 0)) __pyx_t_3 = 0;
} else if (unlikely(__pyx_t_2 >= __pyx_v_idx.shape[0])) __pyx_t_3 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_3 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx.shape[1])) __pyx_t_3 = 1;
if (unlikely(__pyx_t_3 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_3);
__PYX_ERR(0, 1832, __pyx_L1_error)
}
(__pyx_v_o[0]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_2 * __pyx_v_idx.strides[0]) ) + __pyx_t_1 * __pyx_v_idx.strides[1]) )));
__pyx_t_1 = ((__pyx_v_off + __pyx_v_k) + 1);
__pyx_t_2 = 6;
__pyx_t_3 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_3 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx.shape[0])) __pyx_t_3 = 0;
if (__pyx_t_2 < 0) {
__pyx_t_2 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_2 < 0)) __pyx_t_3 = 1;
} else if (unlikely(__pyx_t_2 >= __pyx_v_idx.shape[1])) __pyx_t_3 = 1;
if (unlikely(__pyx_t_3 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_3);
__PYX_ERR(0, 1832, __pyx_L1_error)
}
(__pyx_v_o[1]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_1 * __pyx_v_idx.strides[0]) ) + __pyx_t_2 * __pyx_v_idx.strides[1]) )));
__pyx_t_2 = ((__pyx_v_off + __pyx_v_k) + 1);
__pyx_t_1 = 7;
__pyx_t_3 = -1;
if (__pyx_t_2 < 0) {
__pyx_t_2 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_2 < 0)) __pyx_t_3 = 0;
} else if (unlikely(__pyx_t_2 >= __pyx_v_idx.shape[0])) __pyx_t_3 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_3 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx.shape[1])) __pyx_t_3 = 1;
if (unlikely(__pyx_t_3 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_3);
__PYX_ERR(0, 1832, __pyx_L1_error)
}
(__pyx_v_o[2]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_2 * __pyx_v_idx.strides[0]) ) + __pyx_t_1 * __pyx_v_idx.strides[1]) )));
1833: else:
+1834: o[0] = nex; o[1] = ney; o[2] = nez
/*else*/ {
(__pyx_v_o[0]) = __pyx_v_nex;
(__pyx_v_o[1]) = __pyx_v_ney;
(__pyx_v_o[2]) = __pyx_v_nez;
}
__pyx_L3:;
1835: else: # tail-grow: bead k takes bead (k-1)'s old site, first takes new end
+1836: if k > 0:
__pyx_t_4 = (__pyx_v_k > 0);
if (__pyx_t_4) {
/* … */
goto __pyx_L4;
}
+1837: o[0] = idx[off + k - 1, 5]; o[1] = idx[off + k - 1, 6]; o[2] = idx[off + k - 1, 7]
__pyx_t_1 = ((__pyx_v_off + __pyx_v_k) - 1);
__pyx_t_2 = 5;
__pyx_t_3 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_3 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx.shape[0])) __pyx_t_3 = 0;
if (__pyx_t_2 < 0) {
__pyx_t_2 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_2 < 0)) __pyx_t_3 = 1;
} else if (unlikely(__pyx_t_2 >= __pyx_v_idx.shape[1])) __pyx_t_3 = 1;
if (unlikely(__pyx_t_3 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_3);
__PYX_ERR(0, 1837, __pyx_L1_error)
}
(__pyx_v_o[0]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_1 * __pyx_v_idx.strides[0]) ) + __pyx_t_2 * __pyx_v_idx.strides[1]) )));
__pyx_t_2 = ((__pyx_v_off + __pyx_v_k) - 1);
__pyx_t_1 = 6;
__pyx_t_3 = -1;
if (__pyx_t_2 < 0) {
__pyx_t_2 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_2 < 0)) __pyx_t_3 = 0;
} else if (unlikely(__pyx_t_2 >= __pyx_v_idx.shape[0])) __pyx_t_3 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_3 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx.shape[1])) __pyx_t_3 = 1;
if (unlikely(__pyx_t_3 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_3);
__PYX_ERR(0, 1837, __pyx_L1_error)
}
(__pyx_v_o[1]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_2 * __pyx_v_idx.strides[0]) ) + __pyx_t_1 * __pyx_v_idx.strides[1]) )));
__pyx_t_1 = ((__pyx_v_off + __pyx_v_k) - 1);
__pyx_t_2 = 7;
__pyx_t_3 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_3 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx.shape[0])) __pyx_t_3 = 0;
if (__pyx_t_2 < 0) {
__pyx_t_2 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_2 < 0)) __pyx_t_3 = 1;
} else if (unlikely(__pyx_t_2 >= __pyx_v_idx.shape[1])) __pyx_t_3 = 1;
if (unlikely(__pyx_t_3 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_3);
__PYX_ERR(0, 1837, __pyx_L1_error)
}
(__pyx_v_o[2]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_1 * __pyx_v_idx.strides[0]) ) + __pyx_t_2 * __pyx_v_idx.strides[1]) )));
1838: else:
+1839: o[0] = nex; o[1] = ney; o[2] = nez
/*else*/ {
(__pyx_v_o[0]) = __pyx_v_nex;
(__pyx_v_o[1]) = __pyx_v_ney;
(__pyx_v_o[2]) = __pyx_v_nez;
}
__pyx_L4:;
break;
}
1840:
1841:
+1842: cdef long _chain_angle_mode(NUMPY_INT_TYPE_long[:, :] idx, int off, int L, int mode,
static long __pyx_f_5pimms_15mega_crank_fast__chain_angle_mode(__Pyx_memviewslice __pyx_v_idx, int __pyx_v_off, int __pyx_v_L, int __pyx_v_mode, int __pyx_v_nex, int __pyx_v_ney, int __pyx_v_nez, __Pyx_memviewslice __pyx_v_angle_lookup) {
long __pyx_v_e;
int __pyx_v_k;
int __pyx_v_pl[3];
int __pyx_v_pm[3];
int __pyx_v_pr[3];
long __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast._chain_angle_mode", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
return __pyx_r;
}
1843: int nex, int ney, int nez,
1844: NUMPY_INT_TYPE[:, :, :, :, :, :, :] angle_lookup) noexcept nogil:
1845: # total angle energy of the chain under the given mode (reads idx; does not mutate)
+1846: cdef long e = 0
__pyx_v_e = 0;
1847: cdef int k
1848: cdef int pl[3]
1849: cdef int pm[3]
1850: cdef int pr[3]
+1851: for k in range(1, L - 1):
__pyx_t_1 = (__pyx_v_L - 1);
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = 1; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_k = __pyx_t_3;
+1852: if idx[off + k, 3] == 1: # skip-angle bead
__pyx_t_4 = (__pyx_v_off + __pyx_v_k);
__pyx_t_5 = 3;
__pyx_t_6 = -1;
if (__pyx_t_4 < 0) {
__pyx_t_4 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_4 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_4 >= __pyx_v_idx.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_5 < 0) {
__pyx_t_5 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_5 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_5 >= __pyx_v_idx.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 1852, __pyx_L1_error)
}
__pyx_t_7 = ((*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_4 * __pyx_v_idx.strides[0]) ) + __pyx_t_5 * __pyx_v_idx.strides[1]) ))) == 1);
if (__pyx_t_7) {
/* … */
}
+1853: continue
goto __pyx_L3_continue;
+1854: _smode_pos(idx, off, L, mode, nex, ney, nez, k - 1, pl)
__pyx_f_5pimms_15mega_crank_fast__smode_pos(__pyx_v_idx, __pyx_v_off, __pyx_v_L, __pyx_v_mode, __pyx_v_nex, __pyx_v_ney, __pyx_v_nez, (__pyx_v_k - 1), __pyx_v_pl);
+1855: _smode_pos(idx, off, L, mode, nex, ney, nez, k, pm)
__pyx_f_5pimms_15mega_crank_fast__smode_pos(__pyx_v_idx, __pyx_v_off, __pyx_v_L, __pyx_v_mode, __pyx_v_nex, __pyx_v_ney, __pyx_v_nez, __pyx_v_k, __pyx_v_pm);
+1856: _smode_pos(idx, off, L, mode, nex, ney, nez, k + 1, pr)
__pyx_f_5pimms_15mega_crank_fast__smode_pos(__pyx_v_idx, __pyx_v_off, __pyx_v_L, __pyx_v_mode, __pyx_v_nex, __pyx_v_ney, __pyx_v_nez, (__pyx_v_k + 1), __pyx_v_pr);
+1857: e = e + _triplet_angle_3D(pm[0], pm[1], pm[2], pl[0], pl[1], pl[2],
__pyx_v_e = (__pyx_v_e + __pyx_f_5pimms_15mega_crank_fast__triplet_angle_3D((__pyx_v_pm[0]), (__pyx_v_pm[1]), (__pyx_v_pm[2]), (__pyx_v_pl[0]), (__pyx_v_pl[1]), (__pyx_v_pl[2]), (__pyx_v_pr[0]), (__pyx_v_pr[1]), (__pyx_v_pr[2]), (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_5 * __pyx_v_idx.strides[0]) ) + __pyx_t_4 * __pyx_v_idx.strides[1]) ))), __pyx_v_angle_lookup));
__pyx_L3_continue:;
}
+1858: pr[0], pr[1], pr[2], idx[off + k, 2], angle_lookup)
__pyx_t_5 = (__pyx_v_off + __pyx_v_k);
__pyx_t_4 = 2;
__pyx_t_6 = -1;
if (__pyx_t_5 < 0) {
__pyx_t_5 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_5 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_5 >= __pyx_v_idx.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_4 < 0) {
__pyx_t_4 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_4 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_4 >= __pyx_v_idx.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 1858, __pyx_L1_error)
}
+1859: return e
__pyx_r = __pyx_v_e; goto __pyx_L0;
1860:
1861:
+1862: cdef inline void _apply_bead_move(NUMPY_INT_TYPE[:, :, :] grid, NUMPY_INT_TYPE[:, :, :] type_grid,
static CYTHON_INLINE void __pyx_f_5pimms_15mega_crank_fast__apply_bead_move(__Pyx_memviewslice __pyx_v_grid, __Pyx_memviewslice __pyx_v_type_grid, __Pyx_memviewslice __pyx_v_idx, int __pyx_v_bead_index, int __pyx_v_ox, int __pyx_v_oy, int __pyx_v_oz, int __pyx_v_nx, int __pyx_v_ny, int __pyx_v_nz, int __pyx_v_chainID) {
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast._apply_bead_move", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
}
1863: NUMPY_INT_TYPE_long[:, :] idx, int bead_index,
1864: int ox, int oy, int oz, int nx, int ny, int nz,
1865: int chainID) noexcept nogil:
+1866: grid[ox, oy, oz] = 0
__pyx_t_1 = __pyx_v_ox;
__pyx_t_2 = __pyx_v_oy;
__pyx_t_3 = __pyx_v_oz;
__pyx_t_4 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_grid.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_4 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_grid.shape[0])) __pyx_t_4 = 0;
if (__pyx_t_2 < 0) {
__pyx_t_2 += __pyx_v_grid.shape[1];
if (unlikely(__pyx_t_2 < 0)) __pyx_t_4 = 1;
} else if (unlikely(__pyx_t_2 >= __pyx_v_grid.shape[1])) __pyx_t_4 = 1;
if (__pyx_t_3 < 0) {
__pyx_t_3 += __pyx_v_grid.shape[2];
if (unlikely(__pyx_t_3 < 0)) __pyx_t_4 = 2;
} else if (unlikely(__pyx_t_3 >= __pyx_v_grid.shape[2])) __pyx_t_4 = 2;
if (unlikely(__pyx_t_4 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_4);
__PYX_ERR(0, 1866, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_1 * __pyx_v_grid.strides[0]) ) + __pyx_t_2 * __pyx_v_grid.strides[1]) ) + __pyx_t_3 * __pyx_v_grid.strides[2]) )) = 0;
+1867: grid[nx, ny, nz] = chainID
__pyx_t_3 = __pyx_v_nx;
__pyx_t_2 = __pyx_v_ny;
__pyx_t_1 = __pyx_v_nz;
__pyx_t_4 = -1;
if (__pyx_t_3 < 0) {
__pyx_t_3 += __pyx_v_grid.shape[0];
if (unlikely(__pyx_t_3 < 0)) __pyx_t_4 = 0;
} else if (unlikely(__pyx_t_3 >= __pyx_v_grid.shape[0])) __pyx_t_4 = 0;
if (__pyx_t_2 < 0) {
__pyx_t_2 += __pyx_v_grid.shape[1];
if (unlikely(__pyx_t_2 < 0)) __pyx_t_4 = 1;
} else if (unlikely(__pyx_t_2 >= __pyx_v_grid.shape[1])) __pyx_t_4 = 1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_grid.shape[2];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_4 = 2;
} else if (unlikely(__pyx_t_1 >= __pyx_v_grid.shape[2])) __pyx_t_4 = 2;
if (unlikely(__pyx_t_4 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_4);
__PYX_ERR(0, 1867, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_3 * __pyx_v_grid.strides[0]) ) + __pyx_t_2 * __pyx_v_grid.strides[1]) ) + __pyx_t_1 * __pyx_v_grid.strides[2]) )) = __pyx_v_chainID;
+1868: type_grid[nx, ny, nz] = type_grid[ox, oy, oz]
__pyx_t_1 = __pyx_v_ox;
__pyx_t_2 = __pyx_v_oy;
__pyx_t_3 = __pyx_v_oz;
__pyx_t_4 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_type_grid.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_4 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_type_grid.shape[0])) __pyx_t_4 = 0;
if (__pyx_t_2 < 0) {
__pyx_t_2 += __pyx_v_type_grid.shape[1];
if (unlikely(__pyx_t_2 < 0)) __pyx_t_4 = 1;
} else if (unlikely(__pyx_t_2 >= __pyx_v_type_grid.shape[1])) __pyx_t_4 = 1;
if (__pyx_t_3 < 0) {
__pyx_t_3 += __pyx_v_type_grid.shape[2];
if (unlikely(__pyx_t_3 < 0)) __pyx_t_4 = 2;
} else if (unlikely(__pyx_t_3 >= __pyx_v_type_grid.shape[2])) __pyx_t_4 = 2;
if (unlikely(__pyx_t_4 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_4);
__PYX_ERR(0, 1868, __pyx_L1_error)
}
__pyx_t_5 = __pyx_v_nx;
__pyx_t_6 = __pyx_v_ny;
__pyx_t_7 = __pyx_v_nz;
__pyx_t_4 = -1;
if (__pyx_t_5 < 0) {
__pyx_t_5 += __pyx_v_type_grid.shape[0];
if (unlikely(__pyx_t_5 < 0)) __pyx_t_4 = 0;
} else if (unlikely(__pyx_t_5 >= __pyx_v_type_grid.shape[0])) __pyx_t_4 = 0;
if (__pyx_t_6 < 0) {
__pyx_t_6 += __pyx_v_type_grid.shape[1];
if (unlikely(__pyx_t_6 < 0)) __pyx_t_4 = 1;
} else if (unlikely(__pyx_t_6 >= __pyx_v_type_grid.shape[1])) __pyx_t_4 = 1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_type_grid.shape[2];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_4 = 2;
} else if (unlikely(__pyx_t_7 >= __pyx_v_type_grid.shape[2])) __pyx_t_4 = 2;
if (unlikely(__pyx_t_4 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_4);
__PYX_ERR(0, 1868, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_5 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_6 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_7 * __pyx_v_type_grid.strides[2]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_1 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_2 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_3 * __pyx_v_type_grid.strides[2]) )));
+1869: type_grid[ox, oy, oz] = 0
__pyx_t_3 = __pyx_v_ox;
__pyx_t_2 = __pyx_v_oy;
__pyx_t_1 = __pyx_v_oz;
__pyx_t_4 = -1;
if (__pyx_t_3 < 0) {
__pyx_t_3 += __pyx_v_type_grid.shape[0];
if (unlikely(__pyx_t_3 < 0)) __pyx_t_4 = 0;
} else if (unlikely(__pyx_t_3 >= __pyx_v_type_grid.shape[0])) __pyx_t_4 = 0;
if (__pyx_t_2 < 0) {
__pyx_t_2 += __pyx_v_type_grid.shape[1];
if (unlikely(__pyx_t_2 < 0)) __pyx_t_4 = 1;
} else if (unlikely(__pyx_t_2 >= __pyx_v_type_grid.shape[1])) __pyx_t_4 = 1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_type_grid.shape[2];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_4 = 2;
} else if (unlikely(__pyx_t_1 >= __pyx_v_type_grid.shape[2])) __pyx_t_4 = 2;
if (unlikely(__pyx_t_4 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_4);
__PYX_ERR(0, 1869, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_3 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_2 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_1 * __pyx_v_type_grid.strides[2]) )) = 0;
+1870: idx[bead_index, 5] = nx
__pyx_t_1 = __pyx_v_bead_index;
__pyx_t_2 = 5;
__pyx_t_4 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_4 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx.shape[0])) __pyx_t_4 = 0;
if (__pyx_t_2 < 0) {
__pyx_t_2 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_2 < 0)) __pyx_t_4 = 1;
} else if (unlikely(__pyx_t_2 >= __pyx_v_idx.shape[1])) __pyx_t_4 = 1;
if (unlikely(__pyx_t_4 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_4);
__PYX_ERR(0, 1870, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_1 * __pyx_v_idx.strides[0]) ) + __pyx_t_2 * __pyx_v_idx.strides[1]) )) = __pyx_v_nx;
+1871: idx[bead_index, 6] = ny
__pyx_t_2 = __pyx_v_bead_index;
__pyx_t_1 = 6;
__pyx_t_4 = -1;
if (__pyx_t_2 < 0) {
__pyx_t_2 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_2 < 0)) __pyx_t_4 = 0;
} else if (unlikely(__pyx_t_2 >= __pyx_v_idx.shape[0])) __pyx_t_4 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_4 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx.shape[1])) __pyx_t_4 = 1;
if (unlikely(__pyx_t_4 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_4);
__PYX_ERR(0, 1871, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_2 * __pyx_v_idx.strides[0]) ) + __pyx_t_1 * __pyx_v_idx.strides[1]) )) = __pyx_v_ny;
+1872: idx[bead_index, 7] = nz
__pyx_t_1 = __pyx_v_bead_index;
__pyx_t_2 = 7;
__pyx_t_4 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_4 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx.shape[0])) __pyx_t_4 = 0;
if (__pyx_t_2 < 0) {
__pyx_t_2 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_2 < 0)) __pyx_t_4 = 1;
} else if (unlikely(__pyx_t_2 >= __pyx_v_idx.shape[1])) __pyx_t_4 = 1;
if (unlikely(__pyx_t_4 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_4);
__PYX_ERR(0, 1872, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_1 * __pyx_v_idx.strides[0]) ) + __pyx_t_2 * __pyx_v_idx.strides[1]) )) = __pyx_v_nz;
1873:
1874:
+1875: @cython.wraparound(False)
/* Python wrapper */ static PyObject *__pyx_pw_5pimms_15mega_crank_fast_13mega_slither(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_5pimms_15mega_crank_fast_12mega_slither, "\n 3D slither (reptation) megamove. chain_selector lists chain indices to slither,\n one per entry (build it so every chain appears SLITHER_SUBSTEPS times, shuffled).\n Mutates grid / type_grid / idx_to_bead in place. Returns (energy, accepted).\n "); static PyMethodDef __pyx_mdef_5pimms_15mega_crank_fast_13mega_slither = {"mega_slither", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5pimms_15mega_crank_fast_13mega_slither, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_5pimms_15mega_crank_fast_12mega_slither}; static PyObject *__pyx_pw_5pimms_15mega_crank_fast_13mega_slither(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { __Pyx_memviewslice __pyx_v_grid = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_type_grid = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_idx_to_bead = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_chain_offset = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_chain_length = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_chain_homo = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_chain_selector = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_LR_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_SLR_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_angle_lookup = { 0, 0, { 0 }, { 0 }, { 0 } }; long __pyx_v_energy; float __pyx_v_invtemp; int __pyx_v_passed_seed; int __pyx_v_hardwall; int __pyx_v_max_chain_len; #if !CYTHON_METH_FASTCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("mega_slither (wrapper)", 0); #if !CYTHON_METH_FASTCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_grid,&__pyx_mstate_global->__pyx_n_u_type_grid,&__pyx_mstate_global->__pyx_n_u_idx_to_bead,&__pyx_mstate_global->__pyx_n_u_chain_offset,&__pyx_mstate_global->__pyx_n_u_chain_length,&__pyx_mstate_global->__pyx_n_u_chain_homo,&__pyx_mstate_global->__pyx_n_u_chain_selector,&__pyx_mstate_global->__pyx_n_u_interaction_table,&__pyx_mstate_global->__pyx_n_u_LR_interaction_table,&__pyx_mstate_global->__pyx_n_u_SLR_interaction_table,&__pyx_mstate_global->__pyx_n_u_angle_lookup,&__pyx_mstate_global->__pyx_n_u_energy,&__pyx_mstate_global->__pyx_n_u_invtemp,&__pyx_mstate_global->__pyx_n_u_passed_seed,&__pyx_mstate_global->__pyx_n_u_hardwall,&__pyx_mstate_global->__pyx_n_u_max_chain_len,0}; PyObject* values[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 1875, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 16: values[15] = __Pyx_ArgRef_FASTCALL(__pyx_args, 15); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[15])) __PYX_ERR(0, 1875, __pyx_L3_error) CYTHON_FALLTHROUGH; case 15: values[14] = __Pyx_ArgRef_FASTCALL(__pyx_args, 14); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[14])) __PYX_ERR(0, 1875, __pyx_L3_error) CYTHON_FALLTHROUGH; case 14: values[13] = __Pyx_ArgRef_FASTCALL(__pyx_args, 13); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[13])) __PYX_ERR(0, 1875, __pyx_L3_error) CYTHON_FALLTHROUGH; case 13: values[12] = __Pyx_ArgRef_FASTCALL(__pyx_args, 12); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[12])) __PYX_ERR(0, 1875, __pyx_L3_error) CYTHON_FALLTHROUGH; case 12: values[11] = __Pyx_ArgRef_FASTCALL(__pyx_args, 11); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[11])) __PYX_ERR(0, 1875, __pyx_L3_error) CYTHON_FALLTHROUGH; case 11: values[10] = __Pyx_ArgRef_FASTCALL(__pyx_args, 10); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[10])) __PYX_ERR(0, 1875, __pyx_L3_error) CYTHON_FALLTHROUGH; case 10: values[9] = __Pyx_ArgRef_FASTCALL(__pyx_args, 9); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[9])) __PYX_ERR(0, 1875, __pyx_L3_error) CYTHON_FALLTHROUGH; case 9: values[8] = __Pyx_ArgRef_FASTCALL(__pyx_args, 8); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[8])) __PYX_ERR(0, 1875, __pyx_L3_error) CYTHON_FALLTHROUGH; case 8: values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 1875, __pyx_L3_error) CYTHON_FALLTHROUGH; case 7: values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 1875, __pyx_L3_error) CYTHON_FALLTHROUGH; case 6: values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 1875, __pyx_L3_error) CYTHON_FALLTHROUGH; case 5: values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 1875, __pyx_L3_error) CYTHON_FALLTHROUGH; case 4: values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 1875, __pyx_L3_error) CYTHON_FALLTHROUGH; case 3: values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1875, __pyx_L3_error) CYTHON_FALLTHROUGH; case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1875, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1875, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "mega_slither", 0) < (0)) __PYX_ERR(0, 1875, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 16; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("mega_slither", 1, 16, 16, i); __PYX_ERR(0, 1875, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 16)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1875, __pyx_L3_error) values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1875, __pyx_L3_error) values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1875, __pyx_L3_error) values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 1875, __pyx_L3_error) values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 1875, __pyx_L3_error) values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 1875, __pyx_L3_error) values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 1875, __pyx_L3_error) values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 1875, __pyx_L3_error) values[8] = __Pyx_ArgRef_FASTCALL(__pyx_args, 8); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[8])) __PYX_ERR(0, 1875, __pyx_L3_error) values[9] = __Pyx_ArgRef_FASTCALL(__pyx_args, 9); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[9])) __PYX_ERR(0, 1875, __pyx_L3_error) values[10] = __Pyx_ArgRef_FASTCALL(__pyx_args, 10); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[10])) __PYX_ERR(0, 1875, __pyx_L3_error) values[11] = __Pyx_ArgRef_FASTCALL(__pyx_args, 11); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[11])) __PYX_ERR(0, 1875, __pyx_L3_error) values[12] = __Pyx_ArgRef_FASTCALL(__pyx_args, 12); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[12])) __PYX_ERR(0, 1875, __pyx_L3_error) values[13] = __Pyx_ArgRef_FASTCALL(__pyx_args, 13); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[13])) __PYX_ERR(0, 1875, __pyx_L3_error) values[14] = __Pyx_ArgRef_FASTCALL(__pyx_args, 14); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[14])) __PYX_ERR(0, 1875, __pyx_L3_error) values[15] = __Pyx_ArgRef_FASTCALL(__pyx_args, 15); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[15])) __PYX_ERR(0, 1875, __pyx_L3_error) } __pyx_v_grid = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_grid.memview)) __PYX_ERR(0, 1877, __pyx_L3_error) __pyx_v_type_grid = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_type_grid.memview)) __PYX_ERR(0, 1878, __pyx_L3_error) __pyx_v_idx_to_bead = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_idx_to_bead.memview)) __PYX_ERR(0, 1879, __pyx_L3_error) __pyx_v_chain_offset = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_offset.memview)) __PYX_ERR(0, 1880, __pyx_L3_error) __pyx_v_chain_length = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_length.memview)) __PYX_ERR(0, 1881, __pyx_L3_error) __pyx_v_chain_homo = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_homo.memview)) __PYX_ERR(0, 1882, __pyx_L3_error) __pyx_v_chain_selector = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_selector.memview)) __PYX_ERR(0, 1883, __pyx_L3_error) __pyx_v_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[7], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interaction_table.memview)) __PYX_ERR(0, 1884, __pyx_L3_error) __pyx_v_LR_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_LR_interaction_table.memview)) __PYX_ERR(0, 1885, __pyx_L3_error) __pyx_v_SLR_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_SLR_interaction_table.memview)) __PYX_ERR(0, 1886, __pyx_L3_error) __pyx_v_angle_lookup = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsdsdsdsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_angle_lookup.memview)) __PYX_ERR(0, 1887, __pyx_L3_error) __pyx_v_energy = __Pyx_PyLong_As_long(values[11]); if (unlikely((__pyx_v_energy == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1888, __pyx_L3_error) __pyx_v_invtemp = __Pyx_PyFloat_AsFloat(values[12]); if (unlikely((__pyx_v_invtemp == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 1889, __pyx_L3_error) __pyx_v_passed_seed = __Pyx_PyLong_As_int(values[13]); if (unlikely((__pyx_v_passed_seed == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1890, __pyx_L3_error) __pyx_v_hardwall = __Pyx_PyLong_As_int(values[14]); if (unlikely((__pyx_v_hardwall == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1891, __pyx_L3_error) __pyx_v_max_chain_len = __Pyx_PyLong_As_int(values[15]); if (unlikely((__pyx_v_max_chain_len == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1892, __pyx_L3_error) } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("mega_slither", 1, 16, 16, __pyx_nargs); __PYX_ERR(0, 1875, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __PYX_XCLEAR_MEMVIEW(&__pyx_v_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_type_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_idx_to_bead, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_offset, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_length, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_homo, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_selector, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_LR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_SLR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_angle_lookup, 1); __Pyx_AddTraceback("pimms.mega_crank_fast.mega_slither", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5pimms_15mega_crank_fast_12mega_slither(__pyx_self, __pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, __pyx_v_chain_offset, __pyx_v_chain_length, __pyx_v_chain_homo, __pyx_v_chain_selector, __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_angle_lookup, __pyx_v_energy, __pyx_v_invtemp, __pyx_v_passed_seed, __pyx_v_hardwall, __pyx_v_max_chain_len); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __PYX_XCLEAR_MEMVIEW(&__pyx_v_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_type_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_idx_to_bead, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_offset, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_length, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_homo, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_selector, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_LR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_SLR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_angle_lookup, 1); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5pimms_15mega_crank_fast_12mega_slither(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_grid, __Pyx_memviewslice __pyx_v_type_grid, __Pyx_memviewslice __pyx_v_idx_to_bead, __Pyx_memviewslice __pyx_v_chain_offset, __Pyx_memviewslice __pyx_v_chain_length, __Pyx_memviewslice __pyx_v_chain_homo, __Pyx_memviewslice __pyx_v_chain_selector, __Pyx_memviewslice __pyx_v_interaction_table, __Pyx_memviewslice __pyx_v_LR_interaction_table, __Pyx_memviewslice __pyx_v_SLR_interaction_table, __Pyx_memviewslice __pyx_v_angle_lookup, long __pyx_v_energy, float __pyx_v_invtemp, int __pyx_v_passed_seed, int __pyx_v_hardwall, int __pyx_v_max_chain_len) { int __pyx_v_XDIM; int __pyx_v_YDIM; int __pyx_v_ZDIM; int __pyx_v_n_steps; int __pyx_v_accepted; int __pyx_v_i; int __pyx_v_c; int __pyx_v_off; int __pyx_v_L; int __pyx_v_homo; int __pyx_v_chainID; int __pyx_v_direction; int __pyx_v_k; int __pyx_v_ex; int __pyx_v_ey; int __pyx_v_ez; int __pyx_v_nx; int __pyx_v_ny; int __pyx_v_nz; int __pyx_v_vx; int __pyx_v_vy; int __pyx_v_vz; int __pyx_v_ox; int __pyx_v_oy; int __pyx_v_oz; int __pyx_v_tx; int __pyx_v_ty; int __pyx_v_tz; int __pyx_v_cx; int __pyx_v_cy; int __pyx_v_cz; long __pyx_v_de; int __pyx_v_newp[3]; int *__pyx_v_bx; int *__pyx_v_by; int *__pyx_v_bz; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_16); __Pyx_XDECREF(__pyx_t_17); __Pyx_XDECREF(__pyx_t_18); __Pyx_AddTraceback("pimms.mega_crank_fast.mega_slither", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_5pimms_15mega_crank_fast_13mega_slither, 0, __pyx_mstate_global->__pyx_n_u_mega_slither, NULL, __pyx_mstate_global->__pyx_n_u_pimms_mega_crank_fast, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[12])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1875, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_mega_slither, __pyx_t_4) < (0)) __PYX_ERR(0, 1875, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
1876: @cython.boundscheck(False)
1877: def mega_slither(NUMPY_INT_TYPE[:, :, :] grid,
1878: NUMPY_INT_TYPE[:, :, :] type_grid,
1879: NUMPY_INT_TYPE_long[:, :] idx_to_bead,
1880: int[::1] chain_offset,
1881: int[::1] chain_length,
1882: int[::1] chain_homo,
1883: int[::1] chain_selector,
1884: NUMPY_INT_TYPE[:, :] interaction_table,
1885: NUMPY_INT_TYPE[:, :] LR_interaction_table,
1886: NUMPY_INT_TYPE[:, :] SLR_interaction_table,
1887: NUMPY_INT_TYPE[:, :, :, :, :, :, :] angle_lookup,
1888: long energy,
1889: float invtemp,
1890: int passed_seed,
1891: int hardwall,
1892: int max_chain_len):
1893: """
1894: 3D slither (reptation) megamove. chain_selector lists chain indices to slither,
1895: one per entry (build it so every chain appears SLITHER_SUBSTEPS times, shuffled).
1896: Mutates grid / type_grid / idx_to_bead in place. Returns (energy, accepted).
1897: """
+1898: mc_seed(passed_seed)
__pyx_f_5pimms_15mega_crank_fast_mc_seed(__pyx_v_passed_seed);
1899:
+1900: cdef int XDIM = grid.shape[0]
__pyx_v_XDIM = (__pyx_v_grid.shape[0]);
+1901: cdef int YDIM = grid.shape[1]
__pyx_v_YDIM = (__pyx_v_grid.shape[1]);
+1902: cdef int ZDIM = grid.shape[2]
__pyx_v_ZDIM = (__pyx_v_grid.shape[2]);
+1903: cdef int n_steps = chain_selector.shape[0]
__pyx_v_n_steps = (__pyx_v_chain_selector.shape[0]);
+1904: cdef int accepted = 0
__pyx_v_accepted = 0;
1905:
1906: cdef int i, c, off, L, homo, chainID, direction, k
1907: cdef int ex, ey, ez, nx, ny, nz, vx, vy, vz, ox, oy, oz, tx, ty, tz, cx, cy, cz
1908: cdef long de
1909: cdef int newp[3]
1910:
1911: # work buffers for the heteropolymer revert (old chain positions)
+1912: cdef int* bx = <int*> malloc(max_chain_len * sizeof(int))
__pyx_v_bx = ((int *)malloc((__pyx_v_max_chain_len * (sizeof(int)))));
+1913: cdef int* by = <int*> malloc(max_chain_len * sizeof(int))
__pyx_v_by = ((int *)malloc((__pyx_v_max_chain_len * (sizeof(int)))));
+1914: cdef int* bz = <int*> malloc(max_chain_len * sizeof(int))
__pyx_v_bz = ((int *)malloc((__pyx_v_max_chain_len * (sizeof(int)))));
+1915: if bx == NULL or by == NULL or bz == NULL:
__pyx_t_2 = (__pyx_v_bx == NULL);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = (__pyx_v_by == NULL);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = (__pyx_v_bz == NULL);
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+1916: if bx != NULL: free(bx)
__pyx_t_1 = (__pyx_v_bx != NULL);
if (__pyx_t_1) {
free(__pyx_v_bx);
}
+1917: if by != NULL: free(by)
__pyx_t_1 = (__pyx_v_by != NULL);
if (__pyx_t_1) {
free(__pyx_v_by);
}
+1918: if bz != NULL: free(bz)
__pyx_t_1 = (__pyx_v_bz != NULL);
if (__pyx_t_1) {
free(__pyx_v_bz);
}
+1919: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 1919, __pyx_L1_error)
1920:
+1921: try:
/*try:*/ {
+1922: for i in range(n_steps):
__pyx_t_3 = __pyx_v_n_steps;
__pyx_t_4 = __pyx_t_3;
for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
__pyx_v_i = __pyx_t_5;
+1923: c = chain_selector[i]
__pyx_t_6 = __pyx_v_i;
__pyx_v_c = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_chain_selector.data) + __pyx_t_6)) )));
+1924: off = chain_offset[c]
__pyx_t_6 = __pyx_v_c;
__pyx_v_off = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_chain_offset.data) + __pyx_t_6)) )));
+1925: L = chain_length[c]
__pyx_t_6 = __pyx_v_c;
__pyx_v_L = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_chain_length.data) + __pyx_t_6)) )));
+1926: homo = chain_homo[c]
__pyx_t_6 = __pyx_v_c;
__pyx_v_homo = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_chain_homo.data) + __pyx_t_6)) )));
+1927: chainID = idx_to_bead[off, 4]
__pyx_t_6 = __pyx_v_off;
__pyx_t_7 = 4;
__pyx_v_chainID = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
1928:
1929: # ----- single-bead chain: local translation -----
+1930: if L == 1:
__pyx_t_1 = (__pyx_v_L == 1);
if (__pyx_t_1) {
/* … */
}
+1931: ox = idx_to_bead[off, 5]; oy = idx_to_bead[off, 6]; oz = idx_to_bead[off, 7]
__pyx_t_7 = __pyx_v_off;
__pyx_t_6 = 5;
__pyx_v_ox = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_6 = __pyx_v_off;
__pyx_t_7 = 6;
__pyx_v_oy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_7 = __pyx_v_off;
__pyx_t_6 = 7;
__pyx_v_oz = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+1932: if single_bead_crank_c(ox, oy, oz, grid, XDIM, YDIM, ZDIM, newp) == 1:
__pyx_t_1 = (__pyx_f_5pimms_15mega_crank_fast_single_bead_crank_c(__pyx_v_ox, __pyx_v_oy, __pyx_v_oz, __pyx_v_grid, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_newp) == 1);
if (__pyx_t_1) {
/* … */
}
+1933: de = get_energy_change_c(grid, type_grid, ox, oy, oz,
__pyx_v_de = __pyx_f_5pimms_15mega_crank_fast_get_energy_change_c(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_ox, __pyx_v_oy, __pyx_v_oz, (__pyx_v_newp[0]), (__pyx_v_newp[1]), (__pyx_v_newp[2]), (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_hardwall);
+1934: newp[0], newp[1], newp[2], idx_to_bead[off, 1],
__pyx_t_6 = __pyx_v_off;
__pyx_t_7 = 1;
1935: interaction_table, LR_interaction_table,
1936: SLR_interaction_table, XDIM, YDIM, ZDIM, hardwall)
+1937: de = de + get_angle_energy_change_c(off, idx_to_bead, newp, angle_lookup)
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_c(__pyx_v_off, __pyx_v_idx_to_bead, __pyx_v_newp, __pyx_v_angle_lookup));
+1938: if accept_or_reject(invtemp, energy, energy + de) == 1:
__pyx_t_1 = (__pyx_f_5pimms_15mega_crank_fast_accept_or_reject(__pyx_v_invtemp, __pyx_v_energy, (__pyx_v_energy + __pyx_v_de)) == 1);
if (__pyx_t_1) {
/* … */
}
+1939: _apply_bead_move(grid, type_grid, idx_to_bead, off,
__pyx_f_5pimms_15mega_crank_fast__apply_bead_move(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, __pyx_v_off, __pyx_v_ox, __pyx_v_oy, __pyx_v_oz, (__pyx_v_newp[0]), (__pyx_v_newp[1]), (__pyx_v_newp[2]), __pyx_v_chainID);
1940: ox, oy, oz, newp[0], newp[1], newp[2], chainID)
+1941: energy = energy + de
__pyx_v_energy = (__pyx_v_energy + __pyx_v_de);
+1942: accepted = accepted + 1
__pyx_v_accepted = (__pyx_v_accepted + 1);
+1943: continue
goto __pyx_L13_continue;
1944:
1945: # ----- reptation: pick a growing end and propose a new end site -----
+1946: direction = randint(0, 1) # 0 = head-grow (last bead), 1 = tail-grow (first bead)
__pyx_v_direction = __pyx_f_5pimms_15mega_crank_fast_randint(0, 1);
+1947: if direction == 0:
__pyx_t_1 = (__pyx_v_direction == 0);
if (__pyx_t_1) {
/* … */
goto __pyx_L18;
}
+1948: ex = idx_to_bead[off + L - 1, 5]; ey = idx_to_bead[off + L - 1, 6]; ez = idx_to_bead[off + L - 1, 7]
__pyx_t_7 = ((__pyx_v_off + __pyx_v_L) - 1);
__pyx_t_6 = 5;
__pyx_v_ex = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_6 = ((__pyx_v_off + __pyx_v_L) - 1);
__pyx_t_7 = 6;
__pyx_v_ey = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_7 = ((__pyx_v_off + __pyx_v_L) - 1);
__pyx_t_6 = 7;
__pyx_v_ez = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
1949: else:
+1950: ex = idx_to_bead[off, 5]; ey = idx_to_bead[off, 6]; ez = idx_to_bead[off, 7]
/*else*/ {
__pyx_t_6 = __pyx_v_off;
__pyx_t_7 = 5;
__pyx_v_ex = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_7 = __pyx_v_off;
__pyx_t_6 = 6;
__pyx_v_ey = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_6 = __pyx_v_off;
__pyx_t_7 = 7;
__pyx_v_ez = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
}
__pyx_L18:;
1951:
+1952: nx = pbc_correction(ex + randint(0, 2) - 1, XDIM)
__pyx_v_nx = __pyx_f_5pimms_15mega_crank_fast_pbc_correction(((__pyx_v_ex + __pyx_f_5pimms_15mega_crank_fast_randint(0, 2)) - 1), __pyx_v_XDIM);
+1953: ny = pbc_correction(ey + randint(0, 2) - 1, YDIM)
__pyx_v_ny = __pyx_f_5pimms_15mega_crank_fast_pbc_correction(((__pyx_v_ey + __pyx_f_5pimms_15mega_crank_fast_randint(0, 2)) - 1), __pyx_v_YDIM);
+1954: nz = pbc_correction(ez + randint(0, 2) - 1, ZDIM)
__pyx_v_nz = __pyx_f_5pimms_15mega_crank_fast_pbc_correction(((__pyx_v_ez + __pyx_f_5pimms_15mega_crank_fast_randint(0, 2)) - 1), __pyx_v_ZDIM);
1955:
+1956: if grid[nx, ny, nz] > 0: # occupied (incl. self when offset is 0) -> reject
__pyx_t_7 = __pyx_v_nx;
__pyx_t_6 = __pyx_v_ny;
__pyx_t_8 = __pyx_v_nz;
__pyx_t_1 = ((*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_7 * __pyx_v_grid.strides[0]) ) + __pyx_t_6 * __pyx_v_grid.strides[1]) ) + __pyx_t_8 * __pyx_v_grid.strides[2]) ))) > 0);
if (__pyx_t_1) {
/* … */
}
+1957: continue
goto __pyx_L13_continue;
+1958: if hardwall == 1:
__pyx_t_1 = (__pyx_v_hardwall == 1);
if (__pyx_t_1) {
/* … */
}
+1959: if straddle_pair(ex, ey, ez, nx, ny, nz) == 1:
__pyx_t_1 = (__pyx_f_5pimms_15mega_crank_fast_straddle_pair(__pyx_v_ex, __pyx_v_ey, __pyx_v_ez, __pyx_v_nx, __pyx_v_ny, __pyx_v_nz) == 1);
if (__pyx_t_1) {
/* … */
}
+1960: continue
goto __pyx_L13_continue;
1961:
+1962: if homo == 1:
__pyx_t_1 = (__pyx_v_homo == 1);
if (__pyx_t_1) {
/* … */
}
1963: # vacated end (opposite the growing end)
+1964: if direction == 0:
__pyx_t_1 = (__pyx_v_direction == 0);
if (__pyx_t_1) {
/* … */
goto __pyx_L23;
}
+1965: vx = idx_to_bead[off, 5]; vy = idx_to_bead[off, 6]; vz = idx_to_bead[off, 7]
__pyx_t_8 = __pyx_v_off;
__pyx_t_6 = 5;
__pyx_v_vx = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_6 = __pyx_v_off;
__pyx_t_8 = 6;
__pyx_v_vy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_8 = __pyx_v_off;
__pyx_t_6 = 7;
__pyx_v_vz = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
1966: else:
+1967: vx = idx_to_bead[off + L - 1, 5]; vy = idx_to_bead[off + L - 1, 6]; vz = idx_to_bead[off + L - 1, 7]
/*else*/ {
__pyx_t_6 = ((__pyx_v_off + __pyx_v_L) - 1);
__pyx_t_8 = 5;
__pyx_v_vx = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_8 = ((__pyx_v_off + __pyx_v_L) - 1);
__pyx_t_6 = 6;
__pyx_v_vy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_6 = ((__pyx_v_off + __pyx_v_L) - 1);
__pyx_t_8 = 7;
__pyx_v_vz = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) )));
}
__pyx_L23:;
1968:
+1969: de = get_energy_change_c(grid, type_grid, vx, vy, vz, nx, ny, nz,
__pyx_v_de = __pyx_f_5pimms_15mega_crank_fast_get_energy_change_c(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_vx, __pyx_v_vy, __pyx_v_vz, __pyx_v_nx, __pyx_v_ny, __pyx_v_nz, (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_hardwall);
+1970: idx_to_bead[off, 1], interaction_table, LR_interaction_table,
__pyx_t_8 = __pyx_v_off;
__pyx_t_6 = 1;
1971: SLR_interaction_table, XDIM, YDIM, ZDIM, hardwall)
1972: # angle change: new-config chain angle minus old-config chain angle
+1973: de = de + (_chain_angle_mode(idx_to_bead, off, L, 1 if direction == 0 else 2, nx, ny, nz, angle_lookup)
__pyx_t_1 = (__pyx_v_direction == 0);
if (__pyx_t_1) {
__pyx_t_9 = 1;
} else {
__pyx_t_9 = 2;
}
/* … */
__pyx_v_de = (__pyx_v_de + (__pyx_f_5pimms_15mega_crank_fast__chain_angle_mode(__pyx_v_idx_to_bead, __pyx_v_off, __pyx_v_L, __pyx_t_9, __pyx_v_nx, __pyx_v_ny, __pyx_v_nz, __pyx_v_angle_lookup) - __pyx_f_5pimms_15mega_crank_fast__chain_angle_mode(__pyx_v_idx_to_bead, __pyx_v_off, __pyx_v_L, 0, 0, 0, 0, __pyx_v_angle_lookup)));
1974: - _chain_angle_mode(idx_to_bead, off, L, 0, 0, 0, 0, angle_lookup))
1975:
+1976: if accept_or_reject(invtemp, energy, energy + de) == 1:
__pyx_t_1 = (__pyx_f_5pimms_15mega_crank_fast_accept_or_reject(__pyx_v_invtemp, __pyx_v_energy, (__pyx_v_energy + __pyx_v_de)) == 1);
if (__pyx_t_1) {
/* … */
}
1977: # apply: only the two end sites change in grid/type_grid; all positions shift
+1978: grid[vx, vy, vz] = 0; type_grid[vx, vy, vz] = 0
__pyx_t_6 = __pyx_v_vx;
__pyx_t_8 = __pyx_v_vy;
__pyx_t_7 = __pyx_v_vz;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_6 * __pyx_v_grid.strides[0]) ) + __pyx_t_8 * __pyx_v_grid.strides[1]) ) + __pyx_t_7 * __pyx_v_grid.strides[2]) )) = 0;
__pyx_t_7 = __pyx_v_vx;
__pyx_t_8 = __pyx_v_vy;
__pyx_t_6 = __pyx_v_vz;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_7 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_8 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_6 * __pyx_v_type_grid.strides[2]) )) = 0;
+1979: grid[nx, ny, nz] = chainID; type_grid[nx, ny, nz] = idx_to_bead[off, 2]
__pyx_t_6 = __pyx_v_nx;
__pyx_t_8 = __pyx_v_ny;
__pyx_t_7 = __pyx_v_nz;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_6 * __pyx_v_grid.strides[0]) ) + __pyx_t_8 * __pyx_v_grid.strides[1]) ) + __pyx_t_7 * __pyx_v_grid.strides[2]) )) = __pyx_v_chainID;
__pyx_t_7 = __pyx_v_off;
__pyx_t_8 = 2;
__pyx_t_6 = __pyx_v_nx;
__pyx_t_10 = __pyx_v_ny;
__pyx_t_11 = __pyx_v_nz;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_6 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_10 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_11 * __pyx_v_type_grid.strides[2]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) )));
+1980: if direction == 0: # head-grow: bead k -> bead (k+1)'s old site
__pyx_t_1 = (__pyx_v_direction == 0);
if (__pyx_t_1) {
/* … */
goto __pyx_L25;
}
+1981: for k in range(0, L - 1):
__pyx_t_12 = (__pyx_v_L - 1);
__pyx_t_13 = __pyx_t_12;
for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_13; __pyx_t_9+=1) {
__pyx_v_k = __pyx_t_9;
+1982: idx_to_bead[off + k, 5] = idx_to_bead[off + k + 1, 5]
__pyx_t_8 = ((__pyx_v_off + __pyx_v_k) + 1);
__pyx_t_7 = 5;
__pyx_t_11 = (__pyx_v_off + __pyx_v_k);
__pyx_t_10 = 5;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_11 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_10 * __pyx_v_idx_to_bead.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
+1983: idx_to_bead[off + k, 6] = idx_to_bead[off + k + 1, 6]
__pyx_t_7 = ((__pyx_v_off + __pyx_v_k) + 1);
__pyx_t_8 = 6;
__pyx_t_10 = (__pyx_v_off + __pyx_v_k);
__pyx_t_11 = 6;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_10 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_11 * __pyx_v_idx_to_bead.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) )));
+1984: idx_to_bead[off + k, 7] = idx_to_bead[off + k + 1, 7]
__pyx_t_8 = ((__pyx_v_off + __pyx_v_k) + 1);
__pyx_t_7 = 7;
__pyx_t_11 = (__pyx_v_off + __pyx_v_k);
__pyx_t_10 = 7;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_11 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_10 * __pyx_v_idx_to_bead.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
}
+1985: idx_to_bead[off + L - 1, 5] = nx; idx_to_bead[off + L - 1, 6] = ny; idx_to_bead[off + L - 1, 7] = nz
__pyx_t_7 = ((__pyx_v_off + __pyx_v_L) - 1);
__pyx_t_8 = 5;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) )) = __pyx_v_nx;
__pyx_t_8 = ((__pyx_v_off + __pyx_v_L) - 1);
__pyx_t_7 = 6;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )) = __pyx_v_ny;
__pyx_t_7 = ((__pyx_v_off + __pyx_v_L) - 1);
__pyx_t_8 = 7;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) )) = __pyx_v_nz;
1986: else: # tail-grow: bead k -> bead (k-1)'s old site
+1987: for k in range(L - 1, 0, -1):
/*else*/ {
for (__pyx_t_9 = (__pyx_v_L - 1); __pyx_t_9 > 0; __pyx_t_9-=1) {
__pyx_v_k = __pyx_t_9;
+1988: idx_to_bead[off + k, 5] = idx_to_bead[off + k - 1, 5]
__pyx_t_8 = ((__pyx_v_off + __pyx_v_k) - 1);
__pyx_t_7 = 5;
__pyx_t_10 = (__pyx_v_off + __pyx_v_k);
__pyx_t_11 = 5;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_10 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_11 * __pyx_v_idx_to_bead.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
+1989: idx_to_bead[off + k, 6] = idx_to_bead[off + k - 1, 6]
__pyx_t_7 = ((__pyx_v_off + __pyx_v_k) - 1);
__pyx_t_8 = 6;
__pyx_t_11 = (__pyx_v_off + __pyx_v_k);
__pyx_t_10 = 6;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_11 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_10 * __pyx_v_idx_to_bead.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) )));
+1990: idx_to_bead[off + k, 7] = idx_to_bead[off + k - 1, 7]
__pyx_t_8 = ((__pyx_v_off + __pyx_v_k) - 1);
__pyx_t_7 = 7;
__pyx_t_10 = (__pyx_v_off + __pyx_v_k);
__pyx_t_11 = 7;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_10 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_11 * __pyx_v_idx_to_bead.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
}
+1991: idx_to_bead[off, 5] = nx; idx_to_bead[off, 6] = ny; idx_to_bead[off, 7] = nz
__pyx_t_7 = __pyx_v_off;
__pyx_t_8 = 5;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) )) = __pyx_v_nx;
__pyx_t_8 = __pyx_v_off;
__pyx_t_7 = 6;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )) = __pyx_v_ny;
__pyx_t_7 = __pyx_v_off;
__pyx_t_8 = 7;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) )) = __pyx_v_nz;
}
__pyx_L25:;
+1992: energy = energy + de
__pyx_v_energy = (__pyx_v_energy + __pyx_v_de);
+1993: accepted = accepted + 1
__pyx_v_accepted = (__pyx_v_accepted + 1);
1994: # reject: get_energy_change_c self-reverted type_grid; idx untouched
+1995: continue
goto __pyx_L13_continue;
1996:
1997: # ----- heteropolymer: decompose into L single-bead moves -----
+1998: for k in range(L):
__pyx_t_9 = __pyx_v_L;
__pyx_t_14 = __pyx_t_9;
for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
__pyx_v_k = __pyx_t_15;
+1999: bx[k] = idx_to_bead[off + k, 5]; by[k] = idx_to_bead[off + k, 6]; bz[k] = idx_to_bead[off + k, 7]
__pyx_t_8 = (__pyx_v_off + __pyx_v_k);
__pyx_t_7 = 5;
(__pyx_v_bx[__pyx_v_k]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_8 = 6;
(__pyx_v_by[__pyx_v_k]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_8 = (__pyx_v_off + __pyx_v_k);
__pyx_t_7 = 7;
(__pyx_v_bz[__pyx_v_k]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
}
2000:
+2001: de = 0
__pyx_v_de = 0;
+2002: if direction == 0: # head-grow: move bead L-1 -> new, then L-2 -> P[L-1], ...
__pyx_t_1 = (__pyx_v_direction == 0);
if (__pyx_t_1) {
/* … */
goto __pyx_L32;
}
+2003: for k in range(L - 1, -1, -1):
for (__pyx_t_9 = (__pyx_v_L - 1); __pyx_t_9 > -1; __pyx_t_9-=1) {
__pyx_v_k = __pyx_t_9;
+2004: ox = idx_to_bead[off + k, 5]; oy = idx_to_bead[off + k, 6]; oz = idx_to_bead[off + k, 7]
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_8 = 5;
__pyx_v_ox = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_8 = (__pyx_v_off + __pyx_v_k);
__pyx_t_7 = 6;
__pyx_v_oy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_8 = 7;
__pyx_v_oz = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) )));
+2005: if k == L - 1:
__pyx_t_1 = (__pyx_v_k == (__pyx_v_L - 1));
if (__pyx_t_1) {
/* … */
goto __pyx_L35;
}
+2006: tx = nx; ty = ny; tz = nz
__pyx_v_tx = __pyx_v_nx;
__pyx_v_ty = __pyx_v_ny;
__pyx_v_tz = __pyx_v_nz;
2007: else:
+2008: tx = bx[k + 1]; ty = by[k + 1]; tz = bz[k + 1]
/*else*/ {
__pyx_v_tx = (__pyx_v_bx[(__pyx_v_k + 1)]);
__pyx_v_ty = (__pyx_v_by[(__pyx_v_k + 1)]);
__pyx_v_tz = (__pyx_v_bz[(__pyx_v_k + 1)]);
}
__pyx_L35:;
+2009: de = de + get_energy_change_c(grid, type_grid, ox, oy, oz, tx, ty, tz,
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_energy_change_c(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_ox, __pyx_v_oy, __pyx_v_oz, __pyx_v_tx, __pyx_v_ty, __pyx_v_tz, (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_hardwall));
+2010: idx_to_bead[off + k, 1], interaction_table,
__pyx_t_8 = (__pyx_v_off + __pyx_v_k);
__pyx_t_7 = 1;
2011: LR_interaction_table, SLR_interaction_table,
2012: XDIM, YDIM, ZDIM, hardwall)
+2013: newp[0] = tx; newp[1] = ty; newp[2] = tz
(__pyx_v_newp[0]) = __pyx_v_tx;
(__pyx_v_newp[1]) = __pyx_v_ty;
(__pyx_v_newp[2]) = __pyx_v_tz;
+2014: de = de + get_angle_energy_change_c(off + k, idx_to_bead, newp, angle_lookup)
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_c((__pyx_v_off + __pyx_v_k), __pyx_v_idx_to_bead, __pyx_v_newp, __pyx_v_angle_lookup));
+2015: _apply_bead_move(grid, type_grid, idx_to_bead, off + k, ox, oy, oz, tx, ty, tz, chainID)
__pyx_f_5pimms_15mega_crank_fast__apply_bead_move(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, (__pyx_v_off + __pyx_v_k), __pyx_v_ox, __pyx_v_oy, __pyx_v_oz, __pyx_v_tx, __pyx_v_ty, __pyx_v_tz, __pyx_v_chainID);
}
2016: else: # tail-grow: move bead 0 -> new, then 1 -> P[0], ...
+2017: for k in range(0, L):
/*else*/ {
__pyx_t_9 = __pyx_v_L;
__pyx_t_14 = __pyx_t_9;
for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
__pyx_v_k = __pyx_t_15;
+2018: ox = idx_to_bead[off + k, 5]; oy = idx_to_bead[off + k, 6]; oz = idx_to_bead[off + k, 7]
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_8 = 5;
__pyx_v_ox = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_8 = (__pyx_v_off + __pyx_v_k);
__pyx_t_7 = 6;
__pyx_v_oy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_8 = 7;
__pyx_v_oz = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) )));
+2019: if k == 0:
__pyx_t_1 = (__pyx_v_k == 0);
if (__pyx_t_1) {
/* … */
goto __pyx_L38;
}
+2020: tx = nx; ty = ny; tz = nz
__pyx_v_tx = __pyx_v_nx;
__pyx_v_ty = __pyx_v_ny;
__pyx_v_tz = __pyx_v_nz;
2021: else:
+2022: tx = bx[k - 1]; ty = by[k - 1]; tz = bz[k - 1]
/*else*/ {
__pyx_v_tx = (__pyx_v_bx[(__pyx_v_k - 1)]);
__pyx_v_ty = (__pyx_v_by[(__pyx_v_k - 1)]);
__pyx_v_tz = (__pyx_v_bz[(__pyx_v_k - 1)]);
}
__pyx_L38:;
+2023: de = de + get_energy_change_c(grid, type_grid, ox, oy, oz, tx, ty, tz,
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_energy_change_c(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_ox, __pyx_v_oy, __pyx_v_oz, __pyx_v_tx, __pyx_v_ty, __pyx_v_tz, (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_hardwall));
+2024: idx_to_bead[off + k, 1], interaction_table,
__pyx_t_8 = (__pyx_v_off + __pyx_v_k);
__pyx_t_7 = 1;
2025: LR_interaction_table, SLR_interaction_table,
2026: XDIM, YDIM, ZDIM, hardwall)
+2027: newp[0] = tx; newp[1] = ty; newp[2] = tz
(__pyx_v_newp[0]) = __pyx_v_tx;
(__pyx_v_newp[1]) = __pyx_v_ty;
(__pyx_v_newp[2]) = __pyx_v_tz;
+2028: de = de + get_angle_energy_change_c(off + k, idx_to_bead, newp, angle_lookup)
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_c((__pyx_v_off + __pyx_v_k), __pyx_v_idx_to_bead, __pyx_v_newp, __pyx_v_angle_lookup));
+2029: _apply_bead_move(grid, type_grid, idx_to_bead, off + k, ox, oy, oz, tx, ty, tz, chainID)
__pyx_f_5pimms_15mega_crank_fast__apply_bead_move(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, (__pyx_v_off + __pyx_v_k), __pyx_v_ox, __pyx_v_oy, __pyx_v_oz, __pyx_v_tx, __pyx_v_ty, __pyx_v_tz, __pyx_v_chainID);
}
}
__pyx_L32:;
2030:
+2031: if accept_or_reject(invtemp, energy, energy + de) == 1:
__pyx_t_1 = (__pyx_f_5pimms_15mega_crank_fast_accept_or_reject(__pyx_v_invtemp, __pyx_v_energy, (__pyx_v_energy + __pyx_v_de)) == 1);
if (__pyx_t_1) {
/* … */
goto __pyx_L39;
}
+2032: energy = energy + de
__pyx_v_energy = (__pyx_v_energy + __pyx_v_de);
+2033: accepted = accepted + 1
__pyx_v_accepted = (__pyx_v_accepted + 1);
2034: else:
2035: # revert: clear current (new) chain sites, then restore the buffered old chain
+2036: for k in range(L):
/*else*/ {
__pyx_t_9 = __pyx_v_L;
__pyx_t_14 = __pyx_t_9;
for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
__pyx_v_k = __pyx_t_15;
+2037: cx = idx_to_bead[off + k, 5]; cy = idx_to_bead[off + k, 6]; cz = idx_to_bead[off + k, 7]
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_8 = 5;
__pyx_v_cx = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_8 = (__pyx_v_off + __pyx_v_k);
__pyx_t_7 = 6;
__pyx_v_cy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_8 = 7;
__pyx_v_cz = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) )));
+2038: grid[cx, cy, cz] = 0; type_grid[cx, cy, cz] = 0
__pyx_t_8 = __pyx_v_cx;
__pyx_t_7 = __pyx_v_cy;
__pyx_t_11 = __pyx_v_cz;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_8 * __pyx_v_grid.strides[0]) ) + __pyx_t_7 * __pyx_v_grid.strides[1]) ) + __pyx_t_11 * __pyx_v_grid.strides[2]) )) = 0;
__pyx_t_11 = __pyx_v_cx;
__pyx_t_7 = __pyx_v_cy;
__pyx_t_8 = __pyx_v_cz;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_11 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_7 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_8 * __pyx_v_type_grid.strides[2]) )) = 0;
}
+2039: for k in range(L):
__pyx_t_9 = __pyx_v_L;
__pyx_t_14 = __pyx_t_9;
for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
__pyx_v_k = __pyx_t_15;
+2040: grid[bx[k], by[k], bz[k]] = chainID
__pyx_t_8 = (__pyx_v_bx[__pyx_v_k]);
__pyx_t_7 = (__pyx_v_by[__pyx_v_k]);
__pyx_t_11 = (__pyx_v_bz[__pyx_v_k]);
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_8 * __pyx_v_grid.strides[0]) ) + __pyx_t_7 * __pyx_v_grid.strides[1]) ) + __pyx_t_11 * __pyx_v_grid.strides[2]) )) = __pyx_v_chainID;
+2041: type_grid[bx[k], by[k], bz[k]] = idx_to_bead[off + k, 2]
__pyx_t_11 = (__pyx_v_off + __pyx_v_k);
__pyx_t_7 = 2;
__pyx_t_8 = (__pyx_v_bx[__pyx_v_k]);
__pyx_t_10 = (__pyx_v_by[__pyx_v_k]);
__pyx_t_6 = (__pyx_v_bz[__pyx_v_k]);
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_8 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_10 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_6 * __pyx_v_type_grid.strides[2]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_11 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
+2042: idx_to_bead[off + k, 5] = bx[k]; idx_to_bead[off + k, 6] = by[k]; idx_to_bead[off + k, 7] = bz[k]
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_11 = 5;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_11 * __pyx_v_idx_to_bead.strides[1]) )) = (__pyx_v_bx[__pyx_v_k]);
__pyx_t_11 = (__pyx_v_off + __pyx_v_k);
__pyx_t_7 = 6;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_11 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )) = (__pyx_v_by[__pyx_v_k]);
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_11 = 7;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_11 * __pyx_v_idx_to_bead.strides[1]) )) = (__pyx_v_bz[__pyx_v_k]);
}
}
__pyx_L39:;
__pyx_L13_continue:;
}
}
2043: finally:
+2044: free(bx); free(by); free(bz)
/*finally:*/ {
/*normal exit:*/{
free(__pyx_v_bx);
free(__pyx_v_by);
free(__pyx_v_bz);
goto __pyx_L12;
}
__pyx_L12:;
}
2045:
+2046: return (energy, accepted)
__Pyx_XDECREF(__pyx_r); __pyx_t_16 = __Pyx_PyLong_From_long(__pyx_v_energy); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2046, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_17 = __Pyx_PyLong_From_int(__pyx_v_accepted); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2046, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_18 = PyTuple_New(2); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 2046, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_GIVEREF(__pyx_t_16); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_t_16) != (0)) __PYX_ERR(0, 2046, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_17); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_18, 1, __pyx_t_17) != (0)) __PYX_ERR(0, 2046, __pyx_L1_error); __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_r = __pyx_t_18; __pyx_t_18 = 0; goto __pyx_L0;
2047:
2048:
2049: # =====================================================================
2050: # SLITHER (reptation) megamove kernel - 2D variant
2051: #
2052: # Identical logic to mega_slither (3D) but on a 2D lattice, reusing the
2053: # bit-exact 2D primitives (get_energy_change_2D_c, get_angle_energy_change_2D_c,
2054: # single_bead_crank_2D_c). See mega_slither for the full design notes.
2055: # =====================================================================
2056:
+2057: cdef inline long _triplet_angle_2D(int mx, int my,
static CYTHON_INLINE long __pyx_f_5pimms_15mega_crank_fast__triplet_angle_2D(int __pyx_v_mx, int __pyx_v_my, int __pyx_v_lx, int __pyx_v_ly, int __pyx_v_rx, int __pyx_v_ry, int __pyx_v_ic, __Pyx_memviewslice __pyx_v_angle_lookup) {
int __pyx_v_a0;
int __pyx_v_a1;
int __pyx_v_b0;
int __pyx_v_b1;
long __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast._triplet_angle_2D", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
return __pyx_r;
}
2058: int lx, int ly,
2059: int rx, int ry,
2060: int ic,
2061: NUMPY_INT_TYPE[:, :, :, :, :] angle_lookup) noexcept nogil:
+2062: cdef int a0 = fix_angle_pbc_issues(mx - lx)
__pyx_v_a0 = __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues((__pyx_v_mx - __pyx_v_lx));
+2063: cdef int a1 = fix_angle_pbc_issues(my - ly)
__pyx_v_a1 = __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues((__pyx_v_my - __pyx_v_ly));
+2064: cdef int b0 = fix_angle_pbc_issues(mx - rx)
__pyx_v_b0 = __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues((__pyx_v_mx - __pyx_v_rx));
+2065: cdef int b1 = fix_angle_pbc_issues(my - ry)
__pyx_v_b1 = __pyx_f_5pimms_15mega_crank_fast_fix_angle_pbc_issues((__pyx_v_my - __pyx_v_ry));
+2066: return angle_lookup[ic, a0 + 1, a1 + 1, b0 + 1, b1 + 1]
__pyx_t_1 = __pyx_v_ic;
__pyx_t_2 = (__pyx_v_a0 + 1);
__pyx_t_3 = (__pyx_v_a1 + 1);
__pyx_t_4 = (__pyx_v_b0 + 1);
__pyx_t_5 = (__pyx_v_b1 + 1);
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_angle_lookup.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_angle_lookup.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_2 < 0) {
__pyx_t_2 += __pyx_v_angle_lookup.shape[1];
if (unlikely(__pyx_t_2 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_2 >= __pyx_v_angle_lookup.shape[1])) __pyx_t_6 = 1;
if (__pyx_t_3 < 0) {
__pyx_t_3 += __pyx_v_angle_lookup.shape[2];
if (unlikely(__pyx_t_3 < 0)) __pyx_t_6 = 2;
} else if (unlikely(__pyx_t_3 >= __pyx_v_angle_lookup.shape[2])) __pyx_t_6 = 2;
if (__pyx_t_4 < 0) {
__pyx_t_4 += __pyx_v_angle_lookup.shape[3];
if (unlikely(__pyx_t_4 < 0)) __pyx_t_6 = 3;
} else if (unlikely(__pyx_t_4 >= __pyx_v_angle_lookup.shape[3])) __pyx_t_6 = 3;
if (__pyx_t_5 < 0) {
__pyx_t_5 += __pyx_v_angle_lookup.shape[4];
if (unlikely(__pyx_t_5 < 0)) __pyx_t_6 = 4;
} else if (unlikely(__pyx_t_5 >= __pyx_v_angle_lookup.shape[4])) __pyx_t_6 = 4;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2066, __pyx_L1_error)
}
__pyx_r = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=4 */ (( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_angle_lookup.data + __pyx_t_1 * __pyx_v_angle_lookup.strides[0]) ) + __pyx_t_2 * __pyx_v_angle_lookup.strides[1]) ) + __pyx_t_3 * __pyx_v_angle_lookup.strides[2]) ) + __pyx_t_4 * __pyx_v_angle_lookup.strides[3]) ) + __pyx_t_5 * __pyx_v_angle_lookup.strides[4]) )));
goto __pyx_L0;
2067:
2068:
+2069: cdef inline void _smode_pos_2D(NUMPY_INT_TYPE_long[:, :] idx, int off, int L, int mode,
static CYTHON_INLINE void __pyx_f_5pimms_15mega_crank_fast__smode_pos_2D(__Pyx_memviewslice __pyx_v_idx, int __pyx_v_off, int __pyx_v_L, int __pyx_v_mode, int __pyx_v_nex, int __pyx_v_ney, int __pyx_v_k, int *__pyx_v_o) {
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast._smode_pos_2D", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
}
2070: int nex, int ney, int k, int* o) noexcept nogil:
+2071: if mode == 0:
switch (__pyx_v_mode) {
case 0:
/* … */
break;
case 1:
+2072: o[0] = idx[off + k, 5]; o[1] = idx[off + k, 6]
__pyx_t_1 = (__pyx_v_off + __pyx_v_k);
__pyx_t_2 = 5;
__pyx_t_3 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_3 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx.shape[0])) __pyx_t_3 = 0;
if (__pyx_t_2 < 0) {
__pyx_t_2 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_2 < 0)) __pyx_t_3 = 1;
} else if (unlikely(__pyx_t_2 >= __pyx_v_idx.shape[1])) __pyx_t_3 = 1;
if (unlikely(__pyx_t_3 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_3);
__PYX_ERR(0, 2072, __pyx_L1_error)
}
(__pyx_v_o[0]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_1 * __pyx_v_idx.strides[0]) ) + __pyx_t_2 * __pyx_v_idx.strides[1]) )));
__pyx_t_2 = (__pyx_v_off + __pyx_v_k);
__pyx_t_1 = 6;
__pyx_t_3 = -1;
if (__pyx_t_2 < 0) {
__pyx_t_2 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_2 < 0)) __pyx_t_3 = 0;
} else if (unlikely(__pyx_t_2 >= __pyx_v_idx.shape[0])) __pyx_t_3 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_3 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx.shape[1])) __pyx_t_3 = 1;
if (unlikely(__pyx_t_3 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_3);
__PYX_ERR(0, 2072, __pyx_L1_error)
}
(__pyx_v_o[1]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_2 * __pyx_v_idx.strides[0]) ) + __pyx_t_1 * __pyx_v_idx.strides[1]) )));
+2073: elif mode == 1: # head-grow
break;
default:
+2074: if k < L - 1:
__pyx_t_4 = (__pyx_v_k < (__pyx_v_L - 1));
if (__pyx_t_4) {
/* … */
goto __pyx_L3;
}
+2075: o[0] = idx[off + k + 1, 5]; o[1] = idx[off + k + 1, 6]
__pyx_t_1 = ((__pyx_v_off + __pyx_v_k) + 1);
__pyx_t_2 = 5;
__pyx_t_3 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_3 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx.shape[0])) __pyx_t_3 = 0;
if (__pyx_t_2 < 0) {
__pyx_t_2 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_2 < 0)) __pyx_t_3 = 1;
} else if (unlikely(__pyx_t_2 >= __pyx_v_idx.shape[1])) __pyx_t_3 = 1;
if (unlikely(__pyx_t_3 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_3);
__PYX_ERR(0, 2075, __pyx_L1_error)
}
(__pyx_v_o[0]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_1 * __pyx_v_idx.strides[0]) ) + __pyx_t_2 * __pyx_v_idx.strides[1]) )));
__pyx_t_2 = ((__pyx_v_off + __pyx_v_k) + 1);
__pyx_t_1 = 6;
__pyx_t_3 = -1;
if (__pyx_t_2 < 0) {
__pyx_t_2 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_2 < 0)) __pyx_t_3 = 0;
} else if (unlikely(__pyx_t_2 >= __pyx_v_idx.shape[0])) __pyx_t_3 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_3 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx.shape[1])) __pyx_t_3 = 1;
if (unlikely(__pyx_t_3 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_3);
__PYX_ERR(0, 2075, __pyx_L1_error)
}
(__pyx_v_o[1]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_2 * __pyx_v_idx.strides[0]) ) + __pyx_t_1 * __pyx_v_idx.strides[1]) )));
2076: else:
+2077: o[0] = nex; o[1] = ney
/*else*/ {
(__pyx_v_o[0]) = __pyx_v_nex;
(__pyx_v_o[1]) = __pyx_v_ney;
}
__pyx_L3:;
2078: else: # tail-grow
+2079: if k > 0:
__pyx_t_4 = (__pyx_v_k > 0);
if (__pyx_t_4) {
/* … */
goto __pyx_L4;
}
+2080: o[0] = idx[off + k - 1, 5]; o[1] = idx[off + k - 1, 6]
__pyx_t_1 = ((__pyx_v_off + __pyx_v_k) - 1);
__pyx_t_2 = 5;
__pyx_t_3 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_3 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx.shape[0])) __pyx_t_3 = 0;
if (__pyx_t_2 < 0) {
__pyx_t_2 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_2 < 0)) __pyx_t_3 = 1;
} else if (unlikely(__pyx_t_2 >= __pyx_v_idx.shape[1])) __pyx_t_3 = 1;
if (unlikely(__pyx_t_3 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_3);
__PYX_ERR(0, 2080, __pyx_L1_error)
}
(__pyx_v_o[0]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_1 * __pyx_v_idx.strides[0]) ) + __pyx_t_2 * __pyx_v_idx.strides[1]) )));
__pyx_t_2 = ((__pyx_v_off + __pyx_v_k) - 1);
__pyx_t_1 = 6;
__pyx_t_3 = -1;
if (__pyx_t_2 < 0) {
__pyx_t_2 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_2 < 0)) __pyx_t_3 = 0;
} else if (unlikely(__pyx_t_2 >= __pyx_v_idx.shape[0])) __pyx_t_3 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_3 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx.shape[1])) __pyx_t_3 = 1;
if (unlikely(__pyx_t_3 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_3);
__PYX_ERR(0, 2080, __pyx_L1_error)
}
(__pyx_v_o[1]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_2 * __pyx_v_idx.strides[0]) ) + __pyx_t_1 * __pyx_v_idx.strides[1]) )));
2081: else:
+2082: o[0] = nex; o[1] = ney
/*else*/ {
(__pyx_v_o[0]) = __pyx_v_nex;
(__pyx_v_o[1]) = __pyx_v_ney;
}
__pyx_L4:;
break;
}
2083:
2084:
+2085: cdef long _chain_angle_mode_2D(NUMPY_INT_TYPE_long[:, :] idx, int off, int L, int mode,
static long __pyx_f_5pimms_15mega_crank_fast__chain_angle_mode_2D(__Pyx_memviewslice __pyx_v_idx, int __pyx_v_off, int __pyx_v_L, int __pyx_v_mode, int __pyx_v_nex, int __pyx_v_ney, __Pyx_memviewslice __pyx_v_angle_lookup) {
long __pyx_v_e;
int __pyx_v_k;
int __pyx_v_pl[2];
int __pyx_v_pm[2];
int __pyx_v_pr[2];
long __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast._chain_angle_mode_2D", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
return __pyx_r;
}
2086: int nex, int ney,
2087: NUMPY_INT_TYPE[:, :, :, :, :] angle_lookup) noexcept nogil:
+2088: cdef long e = 0
__pyx_v_e = 0;
2089: cdef int k
2090: cdef int pl[2]
2091: cdef int pm[2]
2092: cdef int pr[2]
+2093: for k in range(1, L - 1):
__pyx_t_1 = (__pyx_v_L - 1);
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = 1; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_k = __pyx_t_3;
+2094: if idx[off + k, 3] == 1:
__pyx_t_4 = (__pyx_v_off + __pyx_v_k);
__pyx_t_5 = 3;
__pyx_t_6 = -1;
if (__pyx_t_4 < 0) {
__pyx_t_4 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_4 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_4 >= __pyx_v_idx.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_5 < 0) {
__pyx_t_5 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_5 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_5 >= __pyx_v_idx.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2094, __pyx_L1_error)
}
__pyx_t_7 = ((*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_4 * __pyx_v_idx.strides[0]) ) + __pyx_t_5 * __pyx_v_idx.strides[1]) ))) == 1);
if (__pyx_t_7) {
/* … */
}
+2095: continue
goto __pyx_L3_continue;
+2096: _smode_pos_2D(idx, off, L, mode, nex, ney, k - 1, pl)
__pyx_f_5pimms_15mega_crank_fast__smode_pos_2D(__pyx_v_idx, __pyx_v_off, __pyx_v_L, __pyx_v_mode, __pyx_v_nex, __pyx_v_ney, (__pyx_v_k - 1), __pyx_v_pl);
+2097: _smode_pos_2D(idx, off, L, mode, nex, ney, k, pm)
__pyx_f_5pimms_15mega_crank_fast__smode_pos_2D(__pyx_v_idx, __pyx_v_off, __pyx_v_L, __pyx_v_mode, __pyx_v_nex, __pyx_v_ney, __pyx_v_k, __pyx_v_pm);
+2098: _smode_pos_2D(idx, off, L, mode, nex, ney, k + 1, pr)
__pyx_f_5pimms_15mega_crank_fast__smode_pos_2D(__pyx_v_idx, __pyx_v_off, __pyx_v_L, __pyx_v_mode, __pyx_v_nex, __pyx_v_ney, (__pyx_v_k + 1), __pyx_v_pr);
+2099: e = e + _triplet_angle_2D(pm[0], pm[1], pl[0], pl[1], pr[0], pr[1], idx[off + k, 2], angle_lookup)
__pyx_t_5 = (__pyx_v_off + __pyx_v_k);
__pyx_t_4 = 2;
__pyx_t_6 = -1;
if (__pyx_t_5 < 0) {
__pyx_t_5 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_5 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_5 >= __pyx_v_idx.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_4 < 0) {
__pyx_t_4 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_4 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_4 >= __pyx_v_idx.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2099, __pyx_L1_error)
}
__pyx_v_e = (__pyx_v_e + __pyx_f_5pimms_15mega_crank_fast__triplet_angle_2D((__pyx_v_pm[0]), (__pyx_v_pm[1]), (__pyx_v_pl[0]), (__pyx_v_pl[1]), (__pyx_v_pr[0]), (__pyx_v_pr[1]), (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_5 * __pyx_v_idx.strides[0]) ) + __pyx_t_4 * __pyx_v_idx.strides[1]) ))), __pyx_v_angle_lookup));
__pyx_L3_continue:;
}
+2100: return e
__pyx_r = __pyx_v_e; goto __pyx_L0;
2101:
2102:
+2103: cdef inline void _apply_bead_move_2D(NUMPY_INT_TYPE[:, :] grid, NUMPY_INT_TYPE[:, :] type_grid,
static CYTHON_INLINE void __pyx_f_5pimms_15mega_crank_fast__apply_bead_move_2D(__Pyx_memviewslice __pyx_v_grid, __Pyx_memviewslice __pyx_v_type_grid, __Pyx_memviewslice __pyx_v_idx, int __pyx_v_bead_index, int __pyx_v_ox, int __pyx_v_oy, int __pyx_v_nx, int __pyx_v_ny, int __pyx_v_chainID) {
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast._apply_bead_move_2D", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
}
2104: NUMPY_INT_TYPE_long[:, :] idx, int bead_index,
2105: int ox, int oy, int nx, int ny, int chainID) noexcept nogil:
+2106: grid[ox, oy] = 0
__pyx_t_1 = __pyx_v_ox;
__pyx_t_2 = __pyx_v_oy;
__pyx_t_3 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_grid.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_3 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_grid.shape[0])) __pyx_t_3 = 0;
if (__pyx_t_2 < 0) {
__pyx_t_2 += __pyx_v_grid.shape[1];
if (unlikely(__pyx_t_2 < 0)) __pyx_t_3 = 1;
} else if (unlikely(__pyx_t_2 >= __pyx_v_grid.shape[1])) __pyx_t_3 = 1;
if (unlikely(__pyx_t_3 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_3);
__PYX_ERR(0, 2106, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_1 * __pyx_v_grid.strides[0]) ) + __pyx_t_2 * __pyx_v_grid.strides[1]) )) = 0;
+2107: grid[nx, ny] = chainID
__pyx_t_2 = __pyx_v_nx;
__pyx_t_1 = __pyx_v_ny;
__pyx_t_3 = -1;
if (__pyx_t_2 < 0) {
__pyx_t_2 += __pyx_v_grid.shape[0];
if (unlikely(__pyx_t_2 < 0)) __pyx_t_3 = 0;
} else if (unlikely(__pyx_t_2 >= __pyx_v_grid.shape[0])) __pyx_t_3 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_grid.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_3 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_grid.shape[1])) __pyx_t_3 = 1;
if (unlikely(__pyx_t_3 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_3);
__PYX_ERR(0, 2107, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_2 * __pyx_v_grid.strides[0]) ) + __pyx_t_1 * __pyx_v_grid.strides[1]) )) = __pyx_v_chainID;
+2108: type_grid[nx, ny] = type_grid[ox, oy]
__pyx_t_1 = __pyx_v_ox;
__pyx_t_2 = __pyx_v_oy;
__pyx_t_3 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_type_grid.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_3 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_type_grid.shape[0])) __pyx_t_3 = 0;
if (__pyx_t_2 < 0) {
__pyx_t_2 += __pyx_v_type_grid.shape[1];
if (unlikely(__pyx_t_2 < 0)) __pyx_t_3 = 1;
} else if (unlikely(__pyx_t_2 >= __pyx_v_type_grid.shape[1])) __pyx_t_3 = 1;
if (unlikely(__pyx_t_3 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_3);
__PYX_ERR(0, 2108, __pyx_L1_error)
}
__pyx_t_4 = __pyx_v_nx;
__pyx_t_5 = __pyx_v_ny;
__pyx_t_3 = -1;
if (__pyx_t_4 < 0) {
__pyx_t_4 += __pyx_v_type_grid.shape[0];
if (unlikely(__pyx_t_4 < 0)) __pyx_t_3 = 0;
} else if (unlikely(__pyx_t_4 >= __pyx_v_type_grid.shape[0])) __pyx_t_3 = 0;
if (__pyx_t_5 < 0) {
__pyx_t_5 += __pyx_v_type_grid.shape[1];
if (unlikely(__pyx_t_5 < 0)) __pyx_t_3 = 1;
} else if (unlikely(__pyx_t_5 >= __pyx_v_type_grid.shape[1])) __pyx_t_3 = 1;
if (unlikely(__pyx_t_3 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_3);
__PYX_ERR(0, 2108, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_4 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_5 * __pyx_v_type_grid.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_1 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_2 * __pyx_v_type_grid.strides[1]) )));
+2109: type_grid[ox, oy] = 0
__pyx_t_2 = __pyx_v_ox;
__pyx_t_1 = __pyx_v_oy;
__pyx_t_3 = -1;
if (__pyx_t_2 < 0) {
__pyx_t_2 += __pyx_v_type_grid.shape[0];
if (unlikely(__pyx_t_2 < 0)) __pyx_t_3 = 0;
} else if (unlikely(__pyx_t_2 >= __pyx_v_type_grid.shape[0])) __pyx_t_3 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_type_grid.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_3 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_type_grid.shape[1])) __pyx_t_3 = 1;
if (unlikely(__pyx_t_3 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_3);
__PYX_ERR(0, 2109, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_2 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_1 * __pyx_v_type_grid.strides[1]) )) = 0;
+2110: idx[bead_index, 5] = nx
__pyx_t_1 = __pyx_v_bead_index;
__pyx_t_2 = 5;
__pyx_t_3 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_3 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx.shape[0])) __pyx_t_3 = 0;
if (__pyx_t_2 < 0) {
__pyx_t_2 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_2 < 0)) __pyx_t_3 = 1;
} else if (unlikely(__pyx_t_2 >= __pyx_v_idx.shape[1])) __pyx_t_3 = 1;
if (unlikely(__pyx_t_3 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_3);
__PYX_ERR(0, 2110, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_1 * __pyx_v_idx.strides[0]) ) + __pyx_t_2 * __pyx_v_idx.strides[1]) )) = __pyx_v_nx;
+2111: idx[bead_index, 6] = ny
__pyx_t_2 = __pyx_v_bead_index;
__pyx_t_1 = 6;
__pyx_t_3 = -1;
if (__pyx_t_2 < 0) {
__pyx_t_2 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_2 < 0)) __pyx_t_3 = 0;
} else if (unlikely(__pyx_t_2 >= __pyx_v_idx.shape[0])) __pyx_t_3 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_3 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx.shape[1])) __pyx_t_3 = 1;
if (unlikely(__pyx_t_3 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_3);
__PYX_ERR(0, 2111, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_2 * __pyx_v_idx.strides[0]) ) + __pyx_t_1 * __pyx_v_idx.strides[1]) )) = __pyx_v_ny;
2112:
2113:
+2114: @cython.wraparound(False)
/* Python wrapper */ static PyObject *__pyx_pw_5pimms_15mega_crank_fast_15mega_slither_2D(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_5pimms_15mega_crank_fast_14mega_slither_2D, "2D slither (reptation) megamove. See mega_slither for semantics."); static PyMethodDef __pyx_mdef_5pimms_15mega_crank_fast_15mega_slither_2D = {"mega_slither_2D", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5pimms_15mega_crank_fast_15mega_slither_2D, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_5pimms_15mega_crank_fast_14mega_slither_2D}; static PyObject *__pyx_pw_5pimms_15mega_crank_fast_15mega_slither_2D(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { __Pyx_memviewslice __pyx_v_grid = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_type_grid = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_idx_to_bead = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_chain_offset = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_chain_length = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_chain_homo = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_chain_selector = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_LR_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_SLR_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_angle_lookup = { 0, 0, { 0 }, { 0 }, { 0 } }; long __pyx_v_energy; float __pyx_v_invtemp; int __pyx_v_passed_seed; int __pyx_v_hardwall; int __pyx_v_max_chain_len; #if !CYTHON_METH_FASTCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("mega_slither_2D (wrapper)", 0); #if !CYTHON_METH_FASTCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_grid,&__pyx_mstate_global->__pyx_n_u_type_grid,&__pyx_mstate_global->__pyx_n_u_idx_to_bead,&__pyx_mstate_global->__pyx_n_u_chain_offset,&__pyx_mstate_global->__pyx_n_u_chain_length,&__pyx_mstate_global->__pyx_n_u_chain_homo,&__pyx_mstate_global->__pyx_n_u_chain_selector,&__pyx_mstate_global->__pyx_n_u_interaction_table,&__pyx_mstate_global->__pyx_n_u_LR_interaction_table,&__pyx_mstate_global->__pyx_n_u_SLR_interaction_table,&__pyx_mstate_global->__pyx_n_u_angle_lookup,&__pyx_mstate_global->__pyx_n_u_energy,&__pyx_mstate_global->__pyx_n_u_invtemp,&__pyx_mstate_global->__pyx_n_u_passed_seed,&__pyx_mstate_global->__pyx_n_u_hardwall,&__pyx_mstate_global->__pyx_n_u_max_chain_len,0}; PyObject* values[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 2114, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 16: values[15] = __Pyx_ArgRef_FASTCALL(__pyx_args, 15); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[15])) __PYX_ERR(0, 2114, __pyx_L3_error) CYTHON_FALLTHROUGH; case 15: values[14] = __Pyx_ArgRef_FASTCALL(__pyx_args, 14); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[14])) __PYX_ERR(0, 2114, __pyx_L3_error) CYTHON_FALLTHROUGH; case 14: values[13] = __Pyx_ArgRef_FASTCALL(__pyx_args, 13); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[13])) __PYX_ERR(0, 2114, __pyx_L3_error) CYTHON_FALLTHROUGH; case 13: values[12] = __Pyx_ArgRef_FASTCALL(__pyx_args, 12); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[12])) __PYX_ERR(0, 2114, __pyx_L3_error) CYTHON_FALLTHROUGH; case 12: values[11] = __Pyx_ArgRef_FASTCALL(__pyx_args, 11); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[11])) __PYX_ERR(0, 2114, __pyx_L3_error) CYTHON_FALLTHROUGH; case 11: values[10] = __Pyx_ArgRef_FASTCALL(__pyx_args, 10); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[10])) __PYX_ERR(0, 2114, __pyx_L3_error) CYTHON_FALLTHROUGH; case 10: values[9] = __Pyx_ArgRef_FASTCALL(__pyx_args, 9); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[9])) __PYX_ERR(0, 2114, __pyx_L3_error) CYTHON_FALLTHROUGH; case 9: values[8] = __Pyx_ArgRef_FASTCALL(__pyx_args, 8); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[8])) __PYX_ERR(0, 2114, __pyx_L3_error) CYTHON_FALLTHROUGH; case 8: values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 2114, __pyx_L3_error) CYTHON_FALLTHROUGH; case 7: values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 2114, __pyx_L3_error) CYTHON_FALLTHROUGH; case 6: values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 2114, __pyx_L3_error) CYTHON_FALLTHROUGH; case 5: values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 2114, __pyx_L3_error) CYTHON_FALLTHROUGH; case 4: values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 2114, __pyx_L3_error) CYTHON_FALLTHROUGH; case 3: values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 2114, __pyx_L3_error) CYTHON_FALLTHROUGH; case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 2114, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 2114, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "mega_slither_2D", 0) < (0)) __PYX_ERR(0, 2114, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 16; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("mega_slither_2D", 1, 16, 16, i); __PYX_ERR(0, 2114, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 16)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 2114, __pyx_L3_error) values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 2114, __pyx_L3_error) values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 2114, __pyx_L3_error) values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 2114, __pyx_L3_error) values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 2114, __pyx_L3_error) values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 2114, __pyx_L3_error) values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 2114, __pyx_L3_error) values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 2114, __pyx_L3_error) values[8] = __Pyx_ArgRef_FASTCALL(__pyx_args, 8); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[8])) __PYX_ERR(0, 2114, __pyx_L3_error) values[9] = __Pyx_ArgRef_FASTCALL(__pyx_args, 9); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[9])) __PYX_ERR(0, 2114, __pyx_L3_error) values[10] = __Pyx_ArgRef_FASTCALL(__pyx_args, 10); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[10])) __PYX_ERR(0, 2114, __pyx_L3_error) values[11] = __Pyx_ArgRef_FASTCALL(__pyx_args, 11); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[11])) __PYX_ERR(0, 2114, __pyx_L3_error) values[12] = __Pyx_ArgRef_FASTCALL(__pyx_args, 12); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[12])) __PYX_ERR(0, 2114, __pyx_L3_error) values[13] = __Pyx_ArgRef_FASTCALL(__pyx_args, 13); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[13])) __PYX_ERR(0, 2114, __pyx_L3_error) values[14] = __Pyx_ArgRef_FASTCALL(__pyx_args, 14); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[14])) __PYX_ERR(0, 2114, __pyx_L3_error) values[15] = __Pyx_ArgRef_FASTCALL(__pyx_args, 15); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[15])) __PYX_ERR(0, 2114, __pyx_L3_error) } __pyx_v_grid = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_grid.memview)) __PYX_ERR(0, 2116, __pyx_L3_error) __pyx_v_type_grid = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_type_grid.memview)) __PYX_ERR(0, 2117, __pyx_L3_error) __pyx_v_idx_to_bead = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_idx_to_bead.memview)) __PYX_ERR(0, 2118, __pyx_L3_error) __pyx_v_chain_offset = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_offset.memview)) __PYX_ERR(0, 2119, __pyx_L3_error) __pyx_v_chain_length = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_length.memview)) __PYX_ERR(0, 2120, __pyx_L3_error) __pyx_v_chain_homo = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_homo.memview)) __PYX_ERR(0, 2121, __pyx_L3_error) __pyx_v_chain_selector = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_selector.memview)) __PYX_ERR(0, 2122, __pyx_L3_error) __pyx_v_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[7], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interaction_table.memview)) __PYX_ERR(0, 2123, __pyx_L3_error) __pyx_v_LR_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_LR_interaction_table.memview)) __PYX_ERR(0, 2124, __pyx_L3_error) __pyx_v_SLR_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_SLR_interaction_table.memview)) __PYX_ERR(0, 2125, __pyx_L3_error) __pyx_v_angle_lookup = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsdsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_angle_lookup.memview)) __PYX_ERR(0, 2126, __pyx_L3_error) __pyx_v_energy = __Pyx_PyLong_As_long(values[11]); if (unlikely((__pyx_v_energy == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 2127, __pyx_L3_error) __pyx_v_invtemp = __Pyx_PyFloat_AsFloat(values[12]); if (unlikely((__pyx_v_invtemp == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 2128, __pyx_L3_error) __pyx_v_passed_seed = __Pyx_PyLong_As_int(values[13]); if (unlikely((__pyx_v_passed_seed == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2129, __pyx_L3_error) __pyx_v_hardwall = __Pyx_PyLong_As_int(values[14]); if (unlikely((__pyx_v_hardwall == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2130, __pyx_L3_error) __pyx_v_max_chain_len = __Pyx_PyLong_As_int(values[15]); if (unlikely((__pyx_v_max_chain_len == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2131, __pyx_L3_error) } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("mega_slither_2D", 1, 16, 16, __pyx_nargs); __PYX_ERR(0, 2114, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __PYX_XCLEAR_MEMVIEW(&__pyx_v_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_type_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_idx_to_bead, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_offset, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_length, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_homo, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_selector, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_LR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_SLR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_angle_lookup, 1); __Pyx_AddTraceback("pimms.mega_crank_fast.mega_slither_2D", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5pimms_15mega_crank_fast_14mega_slither_2D(__pyx_self, __pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, __pyx_v_chain_offset, __pyx_v_chain_length, __pyx_v_chain_homo, __pyx_v_chain_selector, __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_angle_lookup, __pyx_v_energy, __pyx_v_invtemp, __pyx_v_passed_seed, __pyx_v_hardwall, __pyx_v_max_chain_len); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __PYX_XCLEAR_MEMVIEW(&__pyx_v_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_type_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_idx_to_bead, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_offset, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_length, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_homo, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_selector, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_LR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_SLR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_angle_lookup, 1); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5pimms_15mega_crank_fast_14mega_slither_2D(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_grid, __Pyx_memviewslice __pyx_v_type_grid, __Pyx_memviewslice __pyx_v_idx_to_bead, __Pyx_memviewslice __pyx_v_chain_offset, __Pyx_memviewslice __pyx_v_chain_length, __Pyx_memviewslice __pyx_v_chain_homo, __Pyx_memviewslice __pyx_v_chain_selector, __Pyx_memviewslice __pyx_v_interaction_table, __Pyx_memviewslice __pyx_v_LR_interaction_table, __Pyx_memviewslice __pyx_v_SLR_interaction_table, __Pyx_memviewslice __pyx_v_angle_lookup, long __pyx_v_energy, float __pyx_v_invtemp, int __pyx_v_passed_seed, int __pyx_v_hardwall, int __pyx_v_max_chain_len) { int __pyx_v_XDIM; int __pyx_v_YDIM; int __pyx_v_n_steps; int __pyx_v_accepted; int __pyx_v_i; int __pyx_v_c; int __pyx_v_off; int __pyx_v_L; int __pyx_v_homo; int __pyx_v_chainID; int __pyx_v_direction; int __pyx_v_k; int __pyx_v_ex; int __pyx_v_ey; int __pyx_v_nx; int __pyx_v_ny; int __pyx_v_vx; int __pyx_v_vy; int __pyx_v_ox; int __pyx_v_oy; int __pyx_v_tx; int __pyx_v_ty; int __pyx_v_cx; int __pyx_v_cy; long __pyx_v_de; int __pyx_v_newp[2]; int *__pyx_v_bx; int *__pyx_v_by; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_15); __Pyx_XDECREF(__pyx_t_16); __Pyx_XDECREF(__pyx_t_17); __Pyx_AddTraceback("pimms.mega_crank_fast.mega_slither_2D", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_5pimms_15mega_crank_fast_15mega_slither_2D, 0, __pyx_mstate_global->__pyx_n_u_mega_slither_2D, NULL, __pyx_mstate_global->__pyx_n_u_pimms_mega_crank_fast, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[13])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2114, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_mega_slither_2D, __pyx_t_4) < (0)) __PYX_ERR(0, 2114, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
2115: @cython.boundscheck(False)
2116: def mega_slither_2D(NUMPY_INT_TYPE[:, :] grid,
2117: NUMPY_INT_TYPE[:, :] type_grid,
2118: NUMPY_INT_TYPE_long[:, :] idx_to_bead,
2119: int[::1] chain_offset,
2120: int[::1] chain_length,
2121: int[::1] chain_homo,
2122: int[::1] chain_selector,
2123: NUMPY_INT_TYPE[:, :] interaction_table,
2124: NUMPY_INT_TYPE[:, :] LR_interaction_table,
2125: NUMPY_INT_TYPE[:, :] SLR_interaction_table,
2126: NUMPY_INT_TYPE[:, :, :, :, :] angle_lookup,
2127: long energy,
2128: float invtemp,
2129: int passed_seed,
2130: int hardwall,
2131: int max_chain_len):
2132: """2D slither (reptation) megamove. See mega_slither for semantics."""
+2133: mc_seed(passed_seed)
__pyx_f_5pimms_15mega_crank_fast_mc_seed(__pyx_v_passed_seed);
2134:
+2135: cdef int XDIM = grid.shape[0]
__pyx_v_XDIM = (__pyx_v_grid.shape[0]);
+2136: cdef int YDIM = grid.shape[1]
__pyx_v_YDIM = (__pyx_v_grid.shape[1]);
+2137: cdef int n_steps = chain_selector.shape[0]
__pyx_v_n_steps = (__pyx_v_chain_selector.shape[0]);
+2138: cdef int accepted = 0
__pyx_v_accepted = 0;
2139:
2140: cdef int i, c, off, L, homo, chainID, direction, k
2141: cdef int ex, ey, nx, ny, vx, vy, ox, oy, tx, ty, cx, cy
2142: cdef long de
2143: cdef int newp[2]
2144:
+2145: cdef int* bx = <int*> malloc(max_chain_len * sizeof(int))
__pyx_v_bx = ((int *)malloc((__pyx_v_max_chain_len * (sizeof(int)))));
+2146: cdef int* by = <int*> malloc(max_chain_len * sizeof(int))
__pyx_v_by = ((int *)malloc((__pyx_v_max_chain_len * (sizeof(int)))));
+2147: if bx == NULL or by == NULL:
__pyx_t_2 = (__pyx_v_bx == NULL);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = (__pyx_v_by == NULL);
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+2148: if bx != NULL: free(bx)
__pyx_t_1 = (__pyx_v_bx != NULL);
if (__pyx_t_1) {
free(__pyx_v_bx);
}
+2149: if by != NULL: free(by)
__pyx_t_1 = (__pyx_v_by != NULL);
if (__pyx_t_1) {
free(__pyx_v_by);
}
+2150: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 2150, __pyx_L1_error)
2151:
+2152: try:
/*try:*/ {
+2153: for i in range(n_steps):
__pyx_t_3 = __pyx_v_n_steps;
__pyx_t_4 = __pyx_t_3;
for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
__pyx_v_i = __pyx_t_5;
+2154: c = chain_selector[i]
__pyx_t_6 = __pyx_v_i;
__pyx_v_c = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_chain_selector.data) + __pyx_t_6)) )));
+2155: off = chain_offset[c]
__pyx_t_6 = __pyx_v_c;
__pyx_v_off = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_chain_offset.data) + __pyx_t_6)) )));
+2156: L = chain_length[c]
__pyx_t_6 = __pyx_v_c;
__pyx_v_L = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_chain_length.data) + __pyx_t_6)) )));
+2157: homo = chain_homo[c]
__pyx_t_6 = __pyx_v_c;
__pyx_v_homo = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_chain_homo.data) + __pyx_t_6)) )));
+2158: chainID = idx_to_bead[off, 4]
__pyx_t_6 = __pyx_v_off;
__pyx_t_7 = 4;
__pyx_v_chainID = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
2159:
2160: # ----- single-bead chain: local translation -----
+2161: if L == 1:
__pyx_t_1 = (__pyx_v_L == 1);
if (__pyx_t_1) {
/* … */
}
+2162: ox = idx_to_bead[off, 5]; oy = idx_to_bead[off, 6]
__pyx_t_7 = __pyx_v_off;
__pyx_t_6 = 5;
__pyx_v_ox = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_6 = __pyx_v_off;
__pyx_t_7 = 6;
__pyx_v_oy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
+2163: if single_bead_crank_2D_c(ox, oy, grid, XDIM, YDIM, newp) == 1:
__pyx_t_1 = (__pyx_f_5pimms_15mega_crank_fast_single_bead_crank_2D_c(__pyx_v_ox, __pyx_v_oy, __pyx_v_grid, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_newp) == 1);
if (__pyx_t_1) {
/* … */
}
+2164: de = get_energy_change_2D_c(grid, type_grid, ox, oy, newp[0], newp[1],
__pyx_v_de = __pyx_f_5pimms_15mega_crank_fast_get_energy_change_2D_c(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_ox, __pyx_v_oy, (__pyx_v_newp[0]), (__pyx_v_newp[1]), (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_hardwall);
+2165: idx_to_bead[off, 1], interaction_table,
__pyx_t_7 = __pyx_v_off;
__pyx_t_6 = 1;
2166: LR_interaction_table, SLR_interaction_table,
2167: XDIM, YDIM, hardwall)
+2168: de = de + get_angle_energy_change_2D_c(off, idx_to_bead, newp, angle_lookup)
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_2D_c(__pyx_v_off, __pyx_v_idx_to_bead, __pyx_v_newp, __pyx_v_angle_lookup));
+2169: if accept_or_reject(invtemp, energy, energy + de) == 1:
__pyx_t_1 = (__pyx_f_5pimms_15mega_crank_fast_accept_or_reject(__pyx_v_invtemp, __pyx_v_energy, (__pyx_v_energy + __pyx_v_de)) == 1);
if (__pyx_t_1) {
/* … */
}
+2170: _apply_bead_move_2D(grid, type_grid, idx_to_bead, off,
__pyx_f_5pimms_15mega_crank_fast__apply_bead_move_2D(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, __pyx_v_off, __pyx_v_ox, __pyx_v_oy, (__pyx_v_newp[0]), (__pyx_v_newp[1]), __pyx_v_chainID);
2171: ox, oy, newp[0], newp[1], chainID)
+2172: energy = energy + de
__pyx_v_energy = (__pyx_v_energy + __pyx_v_de);
+2173: accepted = accepted + 1
__pyx_v_accepted = (__pyx_v_accepted + 1);
+2174: continue
goto __pyx_L11_continue;
2175:
2176: # ----- reptation -----
+2177: direction = randint(0, 1)
__pyx_v_direction = __pyx_f_5pimms_15mega_crank_fast_randint(0, 1);
+2178: if direction == 0:
__pyx_t_1 = (__pyx_v_direction == 0);
if (__pyx_t_1) {
/* … */
goto __pyx_L16;
}
+2179: ex = idx_to_bead[off + L - 1, 5]; ey = idx_to_bead[off + L - 1, 6]
__pyx_t_6 = ((__pyx_v_off + __pyx_v_L) - 1);
__pyx_t_7 = 5;
__pyx_v_ex = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_7 = ((__pyx_v_off + __pyx_v_L) - 1);
__pyx_t_6 = 6;
__pyx_v_ey = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
2180: else:
+2181: ex = idx_to_bead[off, 5]; ey = idx_to_bead[off, 6]
/*else*/ {
__pyx_t_6 = __pyx_v_off;
__pyx_t_7 = 5;
__pyx_v_ex = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_7 = __pyx_v_off;
__pyx_t_6 = 6;
__pyx_v_ey = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
}
__pyx_L16:;
2182:
+2183: nx = pbc_correction(ex + randint(0, 2) - 1, XDIM)
__pyx_v_nx = __pyx_f_5pimms_15mega_crank_fast_pbc_correction(((__pyx_v_ex + __pyx_f_5pimms_15mega_crank_fast_randint(0, 2)) - 1), __pyx_v_XDIM);
+2184: ny = pbc_correction(ey + randint(0, 2) - 1, YDIM)
__pyx_v_ny = __pyx_f_5pimms_15mega_crank_fast_pbc_correction(((__pyx_v_ey + __pyx_f_5pimms_15mega_crank_fast_randint(0, 2)) - 1), __pyx_v_YDIM);
2185:
+2186: if grid[nx, ny] > 0:
__pyx_t_6 = __pyx_v_nx;
__pyx_t_7 = __pyx_v_ny;
__pyx_t_1 = ((*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_6 * __pyx_v_grid.strides[0]) ) + __pyx_t_7 * __pyx_v_grid.strides[1]) ))) > 0);
if (__pyx_t_1) {
/* … */
}
+2187: continue
goto __pyx_L11_continue;
+2188: if hardwall == 1:
__pyx_t_1 = (__pyx_v_hardwall == 1);
if (__pyx_t_1) {
/* … */
}
+2189: if straddle_pair(ex, ey, 0, nx, ny, 0) == 1:
__pyx_t_1 = (__pyx_f_5pimms_15mega_crank_fast_straddle_pair(__pyx_v_ex, __pyx_v_ey, 0, __pyx_v_nx, __pyx_v_ny, 0) == 1);
if (__pyx_t_1) {
/* … */
}
+2190: continue
goto __pyx_L11_continue;
2191:
+2192: if homo == 1:
__pyx_t_1 = (__pyx_v_homo == 1);
if (__pyx_t_1) {
/* … */
}
+2193: if direction == 0:
__pyx_t_1 = (__pyx_v_direction == 0);
if (__pyx_t_1) {
/* … */
goto __pyx_L21;
}
+2194: vx = idx_to_bead[off, 5]; vy = idx_to_bead[off, 6]
__pyx_t_7 = __pyx_v_off;
__pyx_t_6 = 5;
__pyx_v_vx = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_6 = __pyx_v_off;
__pyx_t_7 = 6;
__pyx_v_vy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
2195: else:
+2196: vx = idx_to_bead[off + L - 1, 5]; vy = idx_to_bead[off + L - 1, 6]
/*else*/ {
__pyx_t_7 = ((__pyx_v_off + __pyx_v_L) - 1);
__pyx_t_6 = 5;
__pyx_v_vx = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_6 = ((__pyx_v_off + __pyx_v_L) - 1);
__pyx_t_7 = 6;
__pyx_v_vy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
}
__pyx_L21:;
2197:
+2198: de = get_energy_change_2D_c(grid, type_grid, vx, vy, nx, ny,
__pyx_v_de = __pyx_f_5pimms_15mega_crank_fast_get_energy_change_2D_c(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_vx, __pyx_v_vy, __pyx_v_nx, __pyx_v_ny, (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_hardwall);
+2199: idx_to_bead[off, 1], interaction_table,
__pyx_t_7 = __pyx_v_off;
__pyx_t_6 = 1;
2200: LR_interaction_table, SLR_interaction_table,
2201: XDIM, YDIM, hardwall)
+2202: de = de + (_chain_angle_mode_2D(idx_to_bead, off, L, 1 if direction == 0 else 2, nx, ny, angle_lookup)
__pyx_t_1 = (__pyx_v_direction == 0);
if (__pyx_t_1) {
__pyx_t_8 = 1;
} else {
__pyx_t_8 = 2;
}
/* … */
__pyx_v_de = (__pyx_v_de + (__pyx_f_5pimms_15mega_crank_fast__chain_angle_mode_2D(__pyx_v_idx_to_bead, __pyx_v_off, __pyx_v_L, __pyx_t_8, __pyx_v_nx, __pyx_v_ny, __pyx_v_angle_lookup) - __pyx_f_5pimms_15mega_crank_fast__chain_angle_mode_2D(__pyx_v_idx_to_bead, __pyx_v_off, __pyx_v_L, 0, 0, 0, __pyx_v_angle_lookup)));
2203: - _chain_angle_mode_2D(idx_to_bead, off, L, 0, 0, 0, angle_lookup))
2204:
+2205: if accept_or_reject(invtemp, energy, energy + de) == 1:
__pyx_t_1 = (__pyx_f_5pimms_15mega_crank_fast_accept_or_reject(__pyx_v_invtemp, __pyx_v_energy, (__pyx_v_energy + __pyx_v_de)) == 1);
if (__pyx_t_1) {
/* … */
}
+2206: grid[vx, vy] = 0; type_grid[vx, vy] = 0
__pyx_t_6 = __pyx_v_vx;
__pyx_t_7 = __pyx_v_vy;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_6 * __pyx_v_grid.strides[0]) ) + __pyx_t_7 * __pyx_v_grid.strides[1]) )) = 0;
__pyx_t_7 = __pyx_v_vx;
__pyx_t_6 = __pyx_v_vy;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_7 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_6 * __pyx_v_type_grid.strides[1]) )) = 0;
+2207: grid[nx, ny] = chainID; type_grid[nx, ny] = idx_to_bead[off, 2]
__pyx_t_6 = __pyx_v_nx;
__pyx_t_7 = __pyx_v_ny;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_6 * __pyx_v_grid.strides[0]) ) + __pyx_t_7 * __pyx_v_grid.strides[1]) )) = __pyx_v_chainID;
__pyx_t_7 = __pyx_v_off;
__pyx_t_6 = 2;
__pyx_t_9 = __pyx_v_nx;
__pyx_t_10 = __pyx_v_ny;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_9 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_10 * __pyx_v_type_grid.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+2208: if direction == 0:
__pyx_t_1 = (__pyx_v_direction == 0);
if (__pyx_t_1) {
/* … */
goto __pyx_L23;
}
+2209: for k in range(0, L - 1):
__pyx_t_11 = (__pyx_v_L - 1);
__pyx_t_12 = __pyx_t_11;
for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_12; __pyx_t_8+=1) {
__pyx_v_k = __pyx_t_8;
+2210: idx_to_bead[off + k, 5] = idx_to_bead[off + k + 1, 5]
__pyx_t_6 = ((__pyx_v_off + __pyx_v_k) + 1);
__pyx_t_7 = 5;
__pyx_t_10 = (__pyx_v_off + __pyx_v_k);
__pyx_t_9 = 5;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_10 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_9 * __pyx_v_idx_to_bead.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
+2211: idx_to_bead[off + k, 6] = idx_to_bead[off + k + 1, 6]
__pyx_t_7 = ((__pyx_v_off + __pyx_v_k) + 1);
__pyx_t_6 = 6;
__pyx_t_9 = (__pyx_v_off + __pyx_v_k);
__pyx_t_10 = 6;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_9 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_10 * __pyx_v_idx_to_bead.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
}
+2212: idx_to_bead[off + L - 1, 5] = nx; idx_to_bead[off + L - 1, 6] = ny
__pyx_t_6 = ((__pyx_v_off + __pyx_v_L) - 1);
__pyx_t_7 = 5;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )) = __pyx_v_nx;
__pyx_t_7 = ((__pyx_v_off + __pyx_v_L) - 1);
__pyx_t_6 = 6;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )) = __pyx_v_ny;
2213: else:
+2214: for k in range(L - 1, 0, -1):
/*else*/ {
for (__pyx_t_8 = (__pyx_v_L - 1); __pyx_t_8 > 0; __pyx_t_8-=1) {
__pyx_v_k = __pyx_t_8;
+2215: idx_to_bead[off + k, 5] = idx_to_bead[off + k - 1, 5]
__pyx_t_6 = ((__pyx_v_off + __pyx_v_k) - 1);
__pyx_t_7 = 5;
__pyx_t_10 = (__pyx_v_off + __pyx_v_k);
__pyx_t_9 = 5;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_10 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_9 * __pyx_v_idx_to_bead.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
+2216: idx_to_bead[off + k, 6] = idx_to_bead[off + k - 1, 6]
__pyx_t_7 = ((__pyx_v_off + __pyx_v_k) - 1);
__pyx_t_6 = 6;
__pyx_t_9 = (__pyx_v_off + __pyx_v_k);
__pyx_t_10 = 6;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_9 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_10 * __pyx_v_idx_to_bead.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
}
+2217: idx_to_bead[off, 5] = nx; idx_to_bead[off, 6] = ny
__pyx_t_6 = __pyx_v_off;
__pyx_t_7 = 5;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )) = __pyx_v_nx;
__pyx_t_7 = __pyx_v_off;
__pyx_t_6 = 6;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )) = __pyx_v_ny;
}
__pyx_L23:;
+2218: energy = energy + de
__pyx_v_energy = (__pyx_v_energy + __pyx_v_de);
+2219: accepted = accepted + 1
__pyx_v_accepted = (__pyx_v_accepted + 1);
+2220: continue
goto __pyx_L11_continue;
2221:
2222: # ----- heteropolymer: decompose into L single-bead moves -----
+2223: for k in range(L):
__pyx_t_8 = __pyx_v_L;
__pyx_t_13 = __pyx_t_8;
for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
__pyx_v_k = __pyx_t_14;
+2224: bx[k] = idx_to_bead[off + k, 5]; by[k] = idx_to_bead[off + k, 6]
__pyx_t_6 = (__pyx_v_off + __pyx_v_k);
__pyx_t_7 = 5;
(__pyx_v_bx[__pyx_v_k]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_6 = 6;
(__pyx_v_by[__pyx_v_k]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
}
2225:
+2226: de = 0
__pyx_v_de = 0;
+2227: if direction == 0:
__pyx_t_1 = (__pyx_v_direction == 0);
if (__pyx_t_1) {
/* … */
goto __pyx_L30;
}
+2228: for k in range(L - 1, -1, -1):
for (__pyx_t_8 = (__pyx_v_L - 1); __pyx_t_8 > -1; __pyx_t_8-=1) {
__pyx_v_k = __pyx_t_8;
+2229: ox = idx_to_bead[off + k, 5]; oy = idx_to_bead[off + k, 6]
__pyx_t_6 = (__pyx_v_off + __pyx_v_k);
__pyx_t_7 = 5;
__pyx_v_ox = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_6 = 6;
__pyx_v_oy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+2230: if k == L - 1:
__pyx_t_1 = (__pyx_v_k == (__pyx_v_L - 1));
if (__pyx_t_1) {
/* … */
goto __pyx_L33;
}
+2231: tx = nx; ty = ny
__pyx_v_tx = __pyx_v_nx;
__pyx_v_ty = __pyx_v_ny;
2232: else:
+2233: tx = bx[k + 1]; ty = by[k + 1]
/*else*/ {
__pyx_v_tx = (__pyx_v_bx[(__pyx_v_k + 1)]);
__pyx_v_ty = (__pyx_v_by[(__pyx_v_k + 1)]);
}
__pyx_L33:;
+2234: de = de + get_energy_change_2D_c(grid, type_grid, ox, oy, tx, ty,
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_energy_change_2D_c(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_ox, __pyx_v_oy, __pyx_v_tx, __pyx_v_ty, (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_hardwall));
+2235: idx_to_bead[off + k, 1], interaction_table,
__pyx_t_6 = (__pyx_v_off + __pyx_v_k);
__pyx_t_7 = 1;
2236: LR_interaction_table, SLR_interaction_table,
2237: XDIM, YDIM, hardwall)
+2238: newp[0] = tx; newp[1] = ty
(__pyx_v_newp[0]) = __pyx_v_tx;
(__pyx_v_newp[1]) = __pyx_v_ty;
+2239: de = de + get_angle_energy_change_2D_c(off + k, idx_to_bead, newp, angle_lookup)
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_2D_c((__pyx_v_off + __pyx_v_k), __pyx_v_idx_to_bead, __pyx_v_newp, __pyx_v_angle_lookup));
+2240: _apply_bead_move_2D(grid, type_grid, idx_to_bead, off + k, ox, oy, tx, ty, chainID)
__pyx_f_5pimms_15mega_crank_fast__apply_bead_move_2D(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, (__pyx_v_off + __pyx_v_k), __pyx_v_ox, __pyx_v_oy, __pyx_v_tx, __pyx_v_ty, __pyx_v_chainID);
}
2241: else:
+2242: for k in range(0, L):
/*else*/ {
__pyx_t_8 = __pyx_v_L;
__pyx_t_13 = __pyx_t_8;
for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
__pyx_v_k = __pyx_t_14;
+2243: ox = idx_to_bead[off + k, 5]; oy = idx_to_bead[off + k, 6]
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_6 = 5;
__pyx_v_ox = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_6 = (__pyx_v_off + __pyx_v_k);
__pyx_t_7 = 6;
__pyx_v_oy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
+2244: if k == 0:
__pyx_t_1 = (__pyx_v_k == 0);
if (__pyx_t_1) {
/* … */
goto __pyx_L36;
}
+2245: tx = nx; ty = ny
__pyx_v_tx = __pyx_v_nx;
__pyx_v_ty = __pyx_v_ny;
2246: else:
+2247: tx = bx[k - 1]; ty = by[k - 1]
/*else*/ {
__pyx_v_tx = (__pyx_v_bx[(__pyx_v_k - 1)]);
__pyx_v_ty = (__pyx_v_by[(__pyx_v_k - 1)]);
}
__pyx_L36:;
+2248: de = de + get_energy_change_2D_c(grid, type_grid, ox, oy, tx, ty,
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_energy_change_2D_c(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_ox, __pyx_v_oy, __pyx_v_tx, __pyx_v_ty, (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_hardwall));
+2249: idx_to_bead[off + k, 1], interaction_table,
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_6 = 1;
2250: LR_interaction_table, SLR_interaction_table,
2251: XDIM, YDIM, hardwall)
+2252: newp[0] = tx; newp[1] = ty
(__pyx_v_newp[0]) = __pyx_v_tx;
(__pyx_v_newp[1]) = __pyx_v_ty;
+2253: de = de + get_angle_energy_change_2D_c(off + k, idx_to_bead, newp, angle_lookup)
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_2D_c((__pyx_v_off + __pyx_v_k), __pyx_v_idx_to_bead, __pyx_v_newp, __pyx_v_angle_lookup));
+2254: _apply_bead_move_2D(grid, type_grid, idx_to_bead, off + k, ox, oy, tx, ty, chainID)
__pyx_f_5pimms_15mega_crank_fast__apply_bead_move_2D(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, (__pyx_v_off + __pyx_v_k), __pyx_v_ox, __pyx_v_oy, __pyx_v_tx, __pyx_v_ty, __pyx_v_chainID);
}
}
__pyx_L30:;
2255:
+2256: if accept_or_reject(invtemp, energy, energy + de) == 1:
__pyx_t_1 = (__pyx_f_5pimms_15mega_crank_fast_accept_or_reject(__pyx_v_invtemp, __pyx_v_energy, (__pyx_v_energy + __pyx_v_de)) == 1);
if (__pyx_t_1) {
/* … */
goto __pyx_L37;
}
+2257: energy = energy + de
__pyx_v_energy = (__pyx_v_energy + __pyx_v_de);
+2258: accepted = accepted + 1
__pyx_v_accepted = (__pyx_v_accepted + 1);
2259: else:
+2260: for k in range(L):
/*else*/ {
__pyx_t_8 = __pyx_v_L;
__pyx_t_13 = __pyx_t_8;
for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
__pyx_v_k = __pyx_t_14;
+2261: cx = idx_to_bead[off + k, 5]; cy = idx_to_bead[off + k, 6]
__pyx_t_6 = (__pyx_v_off + __pyx_v_k);
__pyx_t_7 = 5;
__pyx_v_cx = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_6 = 6;
__pyx_v_cy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+2262: grid[cx, cy] = 0; type_grid[cx, cy] = 0
__pyx_t_6 = __pyx_v_cx;
__pyx_t_7 = __pyx_v_cy;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_6 * __pyx_v_grid.strides[0]) ) + __pyx_t_7 * __pyx_v_grid.strides[1]) )) = 0;
__pyx_t_7 = __pyx_v_cx;
__pyx_t_6 = __pyx_v_cy;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_7 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_6 * __pyx_v_type_grid.strides[1]) )) = 0;
}
+2263: for k in range(L):
__pyx_t_8 = __pyx_v_L;
__pyx_t_13 = __pyx_t_8;
for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
__pyx_v_k = __pyx_t_14;
+2264: grid[bx[k], by[k]] = chainID
__pyx_t_6 = (__pyx_v_bx[__pyx_v_k]);
__pyx_t_7 = (__pyx_v_by[__pyx_v_k]);
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_6 * __pyx_v_grid.strides[0]) ) + __pyx_t_7 * __pyx_v_grid.strides[1]) )) = __pyx_v_chainID;
+2265: type_grid[bx[k], by[k]] = idx_to_bead[off + k, 2]
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_6 = 2;
__pyx_t_10 = (__pyx_v_bx[__pyx_v_k]);
__pyx_t_9 = (__pyx_v_by[__pyx_v_k]);
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_10 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_9 * __pyx_v_type_grid.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+2266: idx_to_bead[off + k, 5] = bx[k]; idx_to_bead[off + k, 6] = by[k]
__pyx_t_6 = (__pyx_v_off + __pyx_v_k);
__pyx_t_7 = 5;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )) = (__pyx_v_bx[__pyx_v_k]);
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_6 = 6;
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )) = (__pyx_v_by[__pyx_v_k]);
}
}
__pyx_L37:;
__pyx_L11_continue:;
}
}
2267: finally:
+2268: free(bx); free(by)
/*finally:*/ {
/*normal exit:*/{
free(__pyx_v_bx);
free(__pyx_v_by);
goto __pyx_L10;
}
__pyx_L10:;
}
2269:
+2270: return (energy, accepted)
__Pyx_XDECREF(__pyx_r); __pyx_t_15 = __Pyx_PyLong_From_long(__pyx_v_energy); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2270, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __pyx_t_16 = __Pyx_PyLong_From_int(__pyx_v_accepted); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2270, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_17 = PyTuple_New(2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2270, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_GIVEREF(__pyx_t_15); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_15) != (0)) __PYX_ERR(0, 2270, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_16); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_17, 1, __pyx_t_16) != (0)) __PYX_ERR(0, 2270, __pyx_L1_error); __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_r = __pyx_t_17; __pyx_t_17 = 0; goto __pyx_L0;
2271:
2272:
2273: # =====================================================================
2274: # PARALLEL slither (reptation) megamove - chain-level frozen-halo
2275: #
2276: # Slither/pull are WHOLE-CHAIN moves, so the per-bead frozen-halo of the
2277: # crankshaft kernel does not apply directly. Instead the decomposition is at the
2278: # chain level: a chain is movable in a block only if ALL of its beads lie in
2279: # that block's interior (>= W = R_int + 2 inside every split face). A chain that
2280: # straddles a block boundary is frozen for that sweep. The only NEW occupied site
2281: # a slither creates is the growing end; every other site is relabelled in place
2282: # (homo) or revisited (hetero), so requiring the new end to stay in the interior
2283: # keeps the whole chain invariantly inside the block -> block footprints are
2284: # disjoint and the blocks run concurrently with no locks. Rejecting a move whose
2285: # new end would enter the halo keeps the movable region closed (the same
2286: # detailed-balance argument as the crankshaft kernel: a halo chain is never
2287: # selected, so the reverse move could not occur). The decomposition is
2288: # independent of the thread count, so the result is identical for any number of
2289: # threads. Targets the same Boltzmann distribution as the serial slither.
2290: # =====================================================================
2291:
+2292: cdef inline int _in_interior_3d(int x, int y, int z,
static CYTHON_INLINE int __pyx_f_5pimms_15mega_crank_fast__in_interior_3d(int __pyx_v_x, int __pyx_v_y, int __pyx_v_z, int __pyx_v_blo_x_b, int __pyx_v_blo_y_b, int __pyx_v_blo_z_b, int __pyx_v_Lx, int __pyx_v_Ly, int __pyx_v_Lz, int __pyx_v_nbx, int __pyx_v_nby, int __pyx_v_nbz, int __pyx_v_shift_x, int __pyx_v_shift_y, int __pyx_v_shift_z, int __pyx_v_W, int __pyx_v_XDIM, int __pyx_v_YDIM, int __pyx_v_ZDIM) {
int __pyx_v_s;
int __pyx_v_w;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast._in_interior_3d", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
return __pyx_r;
}
2293: int blo_x_b, int blo_y_b, int blo_z_b,
2294: int Lx, int Ly, int Lz, int nbx, int nby, int nbz,
2295: int shift_x, int shift_y, int shift_z, int W,
2296: int XDIM, int YDIM, int ZDIM) noexcept nogil:
2297: cdef int s, w
+2298: if nbx > 1:
__pyx_t_1 = (__pyx_v_nbx > 1);
if (__pyx_t_1) {
/* … */
}
+2299: s = (x - shift_x + XDIM) % XDIM
__pyx_t_2 = ((__pyx_v_x - __pyx_v_shift_x) + __pyx_v_XDIM);
if (unlikely(__pyx_v_XDIM == 0)) {
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__PYX_ERR(0, 2299, __pyx_L1_error)
}
__pyx_v_s = __Pyx_mod_int(__pyx_t_2, __pyx_v_XDIM, 0);
+2300: w = s - blo_x_b
__pyx_v_w = (__pyx_v_s - __pyx_v_blo_x_b);
+2301: if w < W or w >= Lx - W:
__pyx_t_3 = (__pyx_v_w < __pyx_v_W);
if (!__pyx_t_3) {
} else {
__pyx_t_1 = __pyx_t_3;
goto __pyx_L5_bool_binop_done;
}
__pyx_t_3 = (__pyx_v_w >= (__pyx_v_Lx - __pyx_v_W));
__pyx_t_1 = __pyx_t_3;
__pyx_L5_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+2302: return 0
__pyx_r = 0;
goto __pyx_L0;
+2303: if nby > 1:
__pyx_t_1 = (__pyx_v_nby > 1);
if (__pyx_t_1) {
/* … */
}
+2304: s = (y - shift_y + YDIM) % YDIM
__pyx_t_2 = ((__pyx_v_y - __pyx_v_shift_y) + __pyx_v_YDIM);
if (unlikely(__pyx_v_YDIM == 0)) {
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__PYX_ERR(0, 2304, __pyx_L1_error)
}
__pyx_v_s = __Pyx_mod_int(__pyx_t_2, __pyx_v_YDIM, 0);
+2305: w = s - blo_y_b
__pyx_v_w = (__pyx_v_s - __pyx_v_blo_y_b);
+2306: if w < W or w >= Ly - W:
__pyx_t_3 = (__pyx_v_w < __pyx_v_W);
if (!__pyx_t_3) {
} else {
__pyx_t_1 = __pyx_t_3;
goto __pyx_L9_bool_binop_done;
}
__pyx_t_3 = (__pyx_v_w >= (__pyx_v_Ly - __pyx_v_W));
__pyx_t_1 = __pyx_t_3;
__pyx_L9_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+2307: return 0
__pyx_r = 0;
goto __pyx_L0;
+2308: if nbz > 1:
__pyx_t_1 = (__pyx_v_nbz > 1);
if (__pyx_t_1) {
/* … */
}
+2309: s = (z - shift_z + ZDIM) % ZDIM
__pyx_t_2 = ((__pyx_v_z - __pyx_v_shift_z) + __pyx_v_ZDIM);
if (unlikely(__pyx_v_ZDIM == 0)) {
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__PYX_ERR(0, 2309, __pyx_L1_error)
}
__pyx_v_s = __Pyx_mod_int(__pyx_t_2, __pyx_v_ZDIM, 0);
+2310: w = s - blo_z_b
__pyx_v_w = (__pyx_v_s - __pyx_v_blo_z_b);
+2311: if w < W or w >= Lz - W:
__pyx_t_3 = (__pyx_v_w < __pyx_v_W);
if (!__pyx_t_3) {
} else {
__pyx_t_1 = __pyx_t_3;
goto __pyx_L13_bool_binop_done;
}
__pyx_t_3 = (__pyx_v_w >= (__pyx_v_Lz - __pyx_v_W));
__pyx_t_1 = __pyx_t_3;
__pyx_L13_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+2312: return 0
__pyx_r = 0;
goto __pyx_L0;
+2313: return 1
__pyx_r = 1; goto __pyx_L0;
2314:
2315:
+2316: cdef void run_block_slither(int b,
static void __pyx_f_5pimms_15mega_crank_fast_run_block_slither(int __pyx_v_b, __Pyx_memviewslice __pyx_v_chain_ids, __Pyx_memviewslice __pyx_v_starts, __Pyx_memviewslice __pyx_v_attempts, __Pyx_memviewslice __pyx_v_seeds, __Pyx_memviewslice __pyx_v_chain_offset, __Pyx_memviewslice __pyx_v_chain_length, __Pyx_memviewslice __pyx_v_chain_homo, __Pyx_memviewslice __pyx_v_blo_x, __Pyx_memviewslice __pyx_v_blo_y, __Pyx_memviewslice __pyx_v_blo_z, int __pyx_v_Lx, int __pyx_v_Ly, int __pyx_v_Lz, int __pyx_v_nbx, int __pyx_v_nby, int __pyx_v_nbz, int __pyx_v_shift_x, int __pyx_v_shift_y, int __pyx_v_shift_z, int __pyx_v_W, __Pyx_memviewslice __pyx_v_grid, __Pyx_memviewslice __pyx_v_type_grid, __Pyx_memviewslice __pyx_v_idx_to_bead, __Pyx_memviewslice __pyx_v_interaction_table, __Pyx_memviewslice __pyx_v_LR_interaction_table, __Pyx_memviewslice __pyx_v_SLR_interaction_table, __Pyx_memviewslice __pyx_v_angle_lookup, float __pyx_v_invtemp, int __pyx_v_XDIM, int __pyx_v_YDIM, int __pyx_v_ZDIM, int __pyx_v_hardwall, __Pyx_memviewslice __pyx_v_out_delta, __Pyx_memviewslice __pyx_v_out_accepted) {
int __pyx_v_lo;
int __pyx_v_hi;
int __pyx_v_n_block;
unsigned PY_LONG_LONG __pyx_v_rng;
long __pyx_v_dsum;
int __pyx_v_acc;
CYTHON_UNUSED int __pyx_v_step;
int __pyx_v_pick;
int __pyx_v_c;
int __pyx_v_off;
int __pyx_v_L;
int __pyx_v_homo;
int __pyx_v_chainID;
int __pyx_v_direction;
int __pyx_v_k;
int __pyx_v_ex;
int __pyx_v_ey;
int __pyx_v_ez;
int __pyx_v_nx;
int __pyx_v_ny;
int __pyx_v_nz;
int __pyx_v_vx;
int __pyx_v_vy;
int __pyx_v_vz;
int __pyx_v_ox;
int __pyx_v_oy;
int __pyx_v_oz;
int __pyx_v_tx;
int __pyx_v_ty;
int __pyx_v_tz;
int __pyx_v_cx;
int __pyx_v_cy;
int __pyx_v_cz;
long __pyx_v_de;
int __pyx_v_newp[3];
int __pyx_v_bx[512];
int __pyx_v_by[512];
int __pyx_v_bz[512];
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast.run_block_slither", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
}
2317: int[::1] chain_ids, int[::1] starts, int[::1] attempts,
2318: unsigned long long[::1] seeds,
2319: int[::1] chain_offset, int[::1] chain_length, int[::1] chain_homo,
2320: int[::1] blo_x, int[::1] blo_y, int[::1] blo_z,
2321: int Lx, int Ly, int Lz, int nbx, int nby, int nbz,
2322: int shift_x, int shift_y, int shift_z, int W,
2323: NUMPY_INT_TYPE[:, :, :] grid, NUMPY_INT_TYPE[:, :, :] type_grid,
2324: NUMPY_INT_TYPE_long[:, :] idx_to_bead,
2325: NUMPY_INT_TYPE[:, :] interaction_table,
2326: NUMPY_INT_TYPE[:, :] LR_interaction_table,
2327: NUMPY_INT_TYPE[:, :] SLR_interaction_table,
2328: NUMPY_INT_TYPE[:, :, :, :, :, :, :] angle_lookup,
2329: float invtemp, int XDIM, int YDIM, int ZDIM, int hardwall,
2330: long[::1] out_delta, int[::1] out_accepted) noexcept nogil:
2331:
+2332: cdef int lo = starts[b]
__pyx_t_1 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_starts.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_starts.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 2332, __pyx_L1_error)
}
__pyx_v_lo = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_starts.data) + __pyx_t_1)) )));
+2333: cdef int hi = starts[b + 1]
__pyx_t_1 = (__pyx_v_b + 1);
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_starts.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_starts.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 2333, __pyx_L1_error)
}
__pyx_v_hi = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_starts.data) + __pyx_t_1)) )));
+2334: cdef int n_block = hi - lo
__pyx_v_n_block = (__pyx_v_hi - __pyx_v_lo);
+2335: out_delta[b] = 0
__pyx_t_1 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_out_delta.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_out_delta.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 2335, __pyx_L1_error)
}
*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_out_delta.data) + __pyx_t_1)) )) = 0;
+2336: out_accepted[b] = 0
__pyx_t_1 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_out_accepted.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_out_accepted.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 2336, __pyx_L1_error)
}
*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_out_accepted.data) + __pyx_t_1)) )) = 0;
+2337: if n_block <= 0:
__pyx_t_3 = (__pyx_v_n_block <= 0);
if (__pyx_t_3) {
/* … */
}
+2338: return
goto __pyx_L0;
2339:
+2340: cdef unsigned long long rng = seeds[b]
__pyx_t_1 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_seeds.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_seeds.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 2340, __pyx_L1_error)
}
__pyx_v_rng = (*((unsigned PY_LONG_LONG *) ( /* dim=0 */ ((char *) (((unsigned PY_LONG_LONG *) __pyx_v_seeds.data) + __pyx_t_1)) )));
+2341: cdef long dsum = 0
__pyx_v_dsum = 0;
+2342: cdef int acc = 0
__pyx_v_acc = 0;
2343: cdef int step, pick, c, off, L, homo, chainID, direction, k
2344: cdef int ex, ey, ez, nx, ny, nz, vx, vy, vz, ox, oy, oz, tx, ty, tz, cx, cy, cz
2345: cdef long de
2346: cdef int newp[3]
2347: cdef int bx[512]
2348: cdef int by[512]
2349: cdef int bz[512]
2350:
+2351: for step in range(attempts[b]):
__pyx_t_1 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_attempts.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_attempts.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 2351, __pyx_L1_error)
}
__pyx_t_2 = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_attempts.data) + __pyx_t_1)) )));
__pyx_t_4 = __pyx_t_2;
for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
__pyx_v_step = __pyx_t_5;
+2352: pick = lo + <int>(rng_uniform(&rng) * n_block)
__pyx_v_pick = (__pyx_v_lo + ((int)(__pyx_f_5pimms_15mega_crank_fast_rng_uniform((&__pyx_v_rng)) * __pyx_v_n_block)));
+2353: if pick >= hi:
__pyx_t_3 = (__pyx_v_pick >= __pyx_v_hi);
if (__pyx_t_3) {
/* … */
}
+2354: pick = hi - 1
__pyx_v_pick = (__pyx_v_hi - 1);
+2355: c = chain_ids[pick]
__pyx_t_1 = __pyx_v_pick;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_chain_ids.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_chain_ids.shape[0])) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2355, __pyx_L1_error)
}
__pyx_v_c = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_chain_ids.data) + __pyx_t_1)) )));
+2356: off = chain_offset[c]
__pyx_t_1 = __pyx_v_c;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_chain_offset.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_chain_offset.shape[0])) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2356, __pyx_L1_error)
}
__pyx_v_off = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_chain_offset.data) + __pyx_t_1)) )));
+2357: L = chain_length[c]
__pyx_t_1 = __pyx_v_c;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_chain_length.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_chain_length.shape[0])) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2357, __pyx_L1_error)
}
__pyx_v_L = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_chain_length.data) + __pyx_t_1)) )));
+2358: homo = chain_homo[c]
__pyx_t_1 = __pyx_v_c;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_chain_homo.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_chain_homo.shape[0])) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2358, __pyx_L1_error)
}
__pyx_v_homo = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_chain_homo.data) + __pyx_t_1)) )));
+2359: chainID = idx_to_bead[off, 4]
__pyx_t_1 = __pyx_v_off;
__pyx_t_7 = 4;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2359, __pyx_L1_error)
}
__pyx_v_chainID = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
2360:
2361: # ----- single-bead chain: local translation -----
+2362: if L == 1:
__pyx_t_3 = (__pyx_v_L == 1);
if (__pyx_t_3) {
/* … */
}
+2363: ox = idx_to_bead[off, 5]; oy = idx_to_bead[off, 6]; oz = idx_to_bead[off, 7]
__pyx_t_7 = __pyx_v_off;
__pyx_t_1 = 5;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2363, __pyx_L1_error)
}
__pyx_v_ox = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_1 = __pyx_v_off;
__pyx_t_7 = 6;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2363, __pyx_L1_error)
}
__pyx_v_oy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_7 = __pyx_v_off;
__pyx_t_1 = 7;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2363, __pyx_L1_error)
}
__pyx_v_oz = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
+2364: if single_bead_crank_cp(ox, oy, oz, grid, XDIM, YDIM, ZDIM, &rng, newp) == 1:
__pyx_t_3 = (__pyx_f_5pimms_15mega_crank_fast_single_bead_crank_cp(__pyx_v_ox, __pyx_v_oy, __pyx_v_oz, __pyx_v_grid, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, (&__pyx_v_rng), __pyx_v_newp) == 1);
if (__pyx_t_3) {
/* … */
}
+2365: if _in_interior_3d(newp[0], newp[1], newp[2], blo_x[b], blo_y[b], blo_z[b],
__pyx_t_1 = __pyx_v_b;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_blo_x.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_blo_x.shape[0])) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2365, __pyx_L1_error)
}
__pyx_t_7 = __pyx_v_b;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_blo_y.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_blo_y.shape[0])) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2365, __pyx_L1_error)
}
__pyx_t_8 = __pyx_v_b;
__pyx_t_6 = -1;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_blo_z.shape[0];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_8 >= __pyx_v_blo_z.shape[0])) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2365, __pyx_L1_error)
}
/* … */
if (__pyx_t_3) {
/* … */
}
2366: Lx, Ly, Lz, nbx, nby, nbz, shift_x, shift_y, shift_z, W,
+2367: XDIM, YDIM, ZDIM) == 0:
__pyx_t_3 = (__pyx_f_5pimms_15mega_crank_fast__in_interior_3d((__pyx_v_newp[0]), (__pyx_v_newp[1]), (__pyx_v_newp[2]), (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_blo_x.data) + __pyx_t_1)) ))), (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_blo_y.data) + __pyx_t_7)) ))), (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_blo_z.data) + __pyx_t_8)) ))), __pyx_v_Lx, __pyx_v_Ly, __pyx_v_Lz, __pyx_v_nbx, __pyx_v_nby, __pyx_v_nbz, __pyx_v_shift_x, __pyx_v_shift_y, __pyx_v_shift_z, __pyx_v_W, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM) == 0);
+2368: continue
goto __pyx_L4_continue;
+2369: de = get_energy_change_c(grid, type_grid, ox, oy, oz, newp[0], newp[1], newp[2],
__pyx_v_de = __pyx_f_5pimms_15mega_crank_fast_get_energy_change_c(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_ox, __pyx_v_oy, __pyx_v_oz, (__pyx_v_newp[0]), (__pyx_v_newp[1]), (__pyx_v_newp[2]), (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_hardwall);
+2370: idx_to_bead[off, 1], interaction_table, LR_interaction_table,
__pyx_t_8 = __pyx_v_off;
__pyx_t_7 = 1;
__pyx_t_6 = -1;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_8 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2370, __pyx_L1_error)
}
2371: SLR_interaction_table, XDIM, YDIM, ZDIM, hardwall)
+2372: de = de + get_angle_energy_change_c(off, idx_to_bead, newp, angle_lookup)
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_c(__pyx_v_off, __pyx_v_idx_to_bead, __pyx_v_newp, __pyx_v_angle_lookup));
+2373: if accept_p(invtemp, de, &rng) == 1:
__pyx_t_3 = (__pyx_f_5pimms_15mega_crank_fast_accept_p(__pyx_v_invtemp, __pyx_v_de, (&__pyx_v_rng)) == 1);
if (__pyx_t_3) {
/* … */
}
+2374: _apply_bead_move(grid, type_grid, idx_to_bead, off, ox, oy, oz,
__pyx_f_5pimms_15mega_crank_fast__apply_bead_move(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, __pyx_v_off, __pyx_v_ox, __pyx_v_oy, __pyx_v_oz, (__pyx_v_newp[0]), (__pyx_v_newp[1]), (__pyx_v_newp[2]), __pyx_v_chainID);
2375: newp[0], newp[1], newp[2], chainID)
+2376: dsum = dsum + de
__pyx_v_dsum = (__pyx_v_dsum + __pyx_v_de);
+2377: acc = acc + 1
__pyx_v_acc = (__pyx_v_acc + 1);
+2378: continue
goto __pyx_L4_continue;
2379:
2380: # cap the heteropolymer revert buffer (long hetero chains stay frozen)
+2381: if homo == 0 and L > 512:
__pyx_t_9 = (__pyx_v_homo == 0);
if (__pyx_t_9) {
} else {
__pyx_t_3 = __pyx_t_9;
goto __pyx_L12_bool_binop_done;
}
__pyx_t_9 = (__pyx_v_L > 0x200);
__pyx_t_3 = __pyx_t_9;
__pyx_L12_bool_binop_done:;
if (__pyx_t_3) {
/* … */
}
+2382: continue
goto __pyx_L4_continue;
2383:
2384: # ----- reptation: pick a growing end and propose a new end site -----
+2385: direction = rng_randint(&rng, 0, 1)
__pyx_v_direction = __pyx_f_5pimms_15mega_crank_fast_rng_randint((&__pyx_v_rng), 0, 1);
+2386: if direction == 0:
__pyx_t_3 = (__pyx_v_direction == 0);
if (__pyx_t_3) {
/* … */
goto __pyx_L14;
}
+2387: ex = idx_to_bead[off + L - 1, 5]; ey = idx_to_bead[off + L - 1, 6]; ez = idx_to_bead[off + L - 1, 7]
__pyx_t_7 = ((__pyx_v_off + __pyx_v_L) - 1);
__pyx_t_8 = 5;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_8 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2387, __pyx_L1_error)
}
__pyx_v_ex = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_8 = ((__pyx_v_off + __pyx_v_L) - 1);
__pyx_t_7 = 6;
__pyx_t_6 = -1;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_8 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2387, __pyx_L1_error)
}
__pyx_v_ey = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_7 = ((__pyx_v_off + __pyx_v_L) - 1);
__pyx_t_8 = 7;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_8 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2387, __pyx_L1_error)
}
__pyx_v_ez = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) )));
2388: else:
+2389: ex = idx_to_bead[off, 5]; ey = idx_to_bead[off, 6]; ez = idx_to_bead[off, 7]
/*else*/ {
__pyx_t_8 = __pyx_v_off;
__pyx_t_7 = 5;
__pyx_t_6 = -1;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_8 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2389, __pyx_L1_error)
}
__pyx_v_ex = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_7 = __pyx_v_off;
__pyx_t_8 = 6;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_8 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2389, __pyx_L1_error)
}
__pyx_v_ey = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_8 = __pyx_v_off;
__pyx_t_7 = 7;
__pyx_t_6 = -1;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_8 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2389, __pyx_L1_error)
}
__pyx_v_ez = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
}
__pyx_L14:;
2390:
+2391: nx = pbc_correction(ex + rng_randint(&rng, 0, 2) - 1, XDIM)
__pyx_v_nx = __pyx_f_5pimms_15mega_crank_fast_pbc_correction(((__pyx_v_ex + __pyx_f_5pimms_15mega_crank_fast_rng_randint((&__pyx_v_rng), 0, 2)) - 1), __pyx_v_XDIM);
+2392: ny = pbc_correction(ey + rng_randint(&rng, 0, 2) - 1, YDIM)
__pyx_v_ny = __pyx_f_5pimms_15mega_crank_fast_pbc_correction(((__pyx_v_ey + __pyx_f_5pimms_15mega_crank_fast_rng_randint((&__pyx_v_rng), 0, 2)) - 1), __pyx_v_YDIM);
+2393: nz = pbc_correction(ez + rng_randint(&rng, 0, 2) - 1, ZDIM)
__pyx_v_nz = __pyx_f_5pimms_15mega_crank_fast_pbc_correction(((__pyx_v_ez + __pyx_f_5pimms_15mega_crank_fast_rng_randint((&__pyx_v_rng), 0, 2)) - 1), __pyx_v_ZDIM);
2394:
+2395: if grid[nx, ny, nz] > 0:
__pyx_t_7 = __pyx_v_nx;
__pyx_t_8 = __pyx_v_ny;
__pyx_t_1 = __pyx_v_nz;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_grid.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_grid.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_grid.shape[1];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_8 >= __pyx_v_grid.shape[1])) __pyx_t_6 = 1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_grid.shape[2];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 2;
} else if (unlikely(__pyx_t_1 >= __pyx_v_grid.shape[2])) __pyx_t_6 = 2;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2395, __pyx_L1_error)
}
__pyx_t_3 = ((*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_7 * __pyx_v_grid.strides[0]) ) + __pyx_t_8 * __pyx_v_grid.strides[1]) ) + __pyx_t_1 * __pyx_v_grid.strides[2]) ))) > 0);
if (__pyx_t_3) {
/* … */
}
+2396: continue
goto __pyx_L4_continue;
+2397: if hardwall == 1:
__pyx_t_3 = (__pyx_v_hardwall == 1);
if (__pyx_t_3) {
/* … */
}
+2398: if straddle_pair(ex, ey, ez, nx, ny, nz) == 1:
__pyx_t_3 = (__pyx_f_5pimms_15mega_crank_fast_straddle_pair(__pyx_v_ex, __pyx_v_ey, __pyx_v_ez, __pyx_v_nx, __pyx_v_ny, __pyx_v_nz) == 1);
if (__pyx_t_3) {
/* … */
}
+2399: continue
goto __pyx_L4_continue;
2400:
2401: # the only new occupied site is the growing end - keep it in the interior
+2402: if _in_interior_3d(nx, ny, nz, blo_x[b], blo_y[b], blo_z[b],
__pyx_t_1 = __pyx_v_b;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_blo_x.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_blo_x.shape[0])) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2402, __pyx_L1_error)
}
__pyx_t_8 = __pyx_v_b;
__pyx_t_6 = -1;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_blo_y.shape[0];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_8 >= __pyx_v_blo_y.shape[0])) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2402, __pyx_L1_error)
}
__pyx_t_7 = __pyx_v_b;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_blo_z.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_blo_z.shape[0])) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2402, __pyx_L1_error)
}
/* … */
if (__pyx_t_3) {
/* … */
}
2403: Lx, Ly, Lz, nbx, nby, nbz, shift_x, shift_y, shift_z, W,
+2404: XDIM, YDIM, ZDIM) == 0:
__pyx_t_3 = (__pyx_f_5pimms_15mega_crank_fast__in_interior_3d(__pyx_v_nx, __pyx_v_ny, __pyx_v_nz, (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_blo_x.data) + __pyx_t_1)) ))), (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_blo_y.data) + __pyx_t_8)) ))), (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_blo_z.data) + __pyx_t_7)) ))), __pyx_v_Lx, __pyx_v_Ly, __pyx_v_Lz, __pyx_v_nbx, __pyx_v_nby, __pyx_v_nbz, __pyx_v_shift_x, __pyx_v_shift_y, __pyx_v_shift_z, __pyx_v_W, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM) == 0);
+2405: continue
goto __pyx_L4_continue;
2406:
+2407: if homo == 1:
__pyx_t_3 = (__pyx_v_homo == 1);
if (__pyx_t_3) {
/* … */
}
+2408: if direction == 0:
__pyx_t_3 = (__pyx_v_direction == 0);
if (__pyx_t_3) {
/* … */
goto __pyx_L20;
}
+2409: vx = idx_to_bead[off, 5]; vy = idx_to_bead[off, 6]; vz = idx_to_bead[off, 7]
__pyx_t_7 = __pyx_v_off;
__pyx_t_8 = 5;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_8 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2409, __pyx_L1_error)
}
__pyx_v_vx = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_8 = __pyx_v_off;
__pyx_t_7 = 6;
__pyx_t_6 = -1;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_8 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2409, __pyx_L1_error)
}
__pyx_v_vy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_7 = __pyx_v_off;
__pyx_t_8 = 7;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_8 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2409, __pyx_L1_error)
}
__pyx_v_vz = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) )));
2410: else:
+2411: vx = idx_to_bead[off + L - 1, 5]; vy = idx_to_bead[off + L - 1, 6]; vz = idx_to_bead[off + L - 1, 7]
/*else*/ {
__pyx_t_8 = ((__pyx_v_off + __pyx_v_L) - 1);
__pyx_t_7 = 5;
__pyx_t_6 = -1;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_8 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2411, __pyx_L1_error)
}
__pyx_v_vx = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_7 = ((__pyx_v_off + __pyx_v_L) - 1);
__pyx_t_8 = 6;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_8 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2411, __pyx_L1_error)
}
__pyx_v_vy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_8 = ((__pyx_v_off + __pyx_v_L) - 1);
__pyx_t_7 = 7;
__pyx_t_6 = -1;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_8 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2411, __pyx_L1_error)
}
__pyx_v_vz = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
}
__pyx_L20:;
2412:
+2413: de = get_energy_change_c(grid, type_grid, vx, vy, vz, nx, ny, nz,
__pyx_v_de = __pyx_f_5pimms_15mega_crank_fast_get_energy_change_c(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_vx, __pyx_v_vy, __pyx_v_vz, __pyx_v_nx, __pyx_v_ny, __pyx_v_nz, (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_hardwall);
+2414: idx_to_bead[off, 1], interaction_table, LR_interaction_table,
__pyx_t_7 = __pyx_v_off;
__pyx_t_8 = 1;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_8 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2414, __pyx_L1_error)
}
2415: SLR_interaction_table, XDIM, YDIM, ZDIM, hardwall)
+2416: de = de + (_chain_angle_mode(idx_to_bead, off, L, 1 if direction == 0 else 2, nx, ny, nz, angle_lookup)
__pyx_t_3 = (__pyx_v_direction == 0);
if (__pyx_t_3) {
__pyx_t_6 = 1;
} else {
__pyx_t_6 = 2;
}
/* … */
__pyx_v_de = (__pyx_v_de + (__pyx_f_5pimms_15mega_crank_fast__chain_angle_mode(__pyx_v_idx_to_bead, __pyx_v_off, __pyx_v_L, __pyx_t_6, __pyx_v_nx, __pyx_v_ny, __pyx_v_nz, __pyx_v_angle_lookup) - __pyx_f_5pimms_15mega_crank_fast__chain_angle_mode(__pyx_v_idx_to_bead, __pyx_v_off, __pyx_v_L, 0, 0, 0, 0, __pyx_v_angle_lookup)));
2417: - _chain_angle_mode(idx_to_bead, off, L, 0, 0, 0, 0, angle_lookup))
2418:
+2419: if accept_p(invtemp, de, &rng) == 1:
__pyx_t_3 = (__pyx_f_5pimms_15mega_crank_fast_accept_p(__pyx_v_invtemp, __pyx_v_de, (&__pyx_v_rng)) == 1);
if (__pyx_t_3) {
/* … */
}
+2420: grid[vx, vy, vz] = 0; type_grid[vx, vy, vz] = 0
__pyx_t_8 = __pyx_v_vx;
__pyx_t_7 = __pyx_v_vy;
__pyx_t_1 = __pyx_v_vz;
__pyx_t_6 = -1;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_grid.shape[0];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_8 >= __pyx_v_grid.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_grid.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_grid.shape[1])) __pyx_t_6 = 1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_grid.shape[2];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 2;
} else if (unlikely(__pyx_t_1 >= __pyx_v_grid.shape[2])) __pyx_t_6 = 2;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2420, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_8 * __pyx_v_grid.strides[0]) ) + __pyx_t_7 * __pyx_v_grid.strides[1]) ) + __pyx_t_1 * __pyx_v_grid.strides[2]) )) = 0;
__pyx_t_1 = __pyx_v_vx;
__pyx_t_7 = __pyx_v_vy;
__pyx_t_8 = __pyx_v_vz;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_type_grid.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_type_grid.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_type_grid.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_type_grid.shape[1])) __pyx_t_6 = 1;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_type_grid.shape[2];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 2;
} else if (unlikely(__pyx_t_8 >= __pyx_v_type_grid.shape[2])) __pyx_t_6 = 2;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2420, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_1 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_7 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_8 * __pyx_v_type_grid.strides[2]) )) = 0;
+2421: grid[nx, ny, nz] = chainID; type_grid[nx, ny, nz] = idx_to_bead[off, 2]
__pyx_t_8 = __pyx_v_nx;
__pyx_t_7 = __pyx_v_ny;
__pyx_t_1 = __pyx_v_nz;
__pyx_t_6 = -1;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_grid.shape[0];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_8 >= __pyx_v_grid.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_grid.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_grid.shape[1])) __pyx_t_6 = 1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_grid.shape[2];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 2;
} else if (unlikely(__pyx_t_1 >= __pyx_v_grid.shape[2])) __pyx_t_6 = 2;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2421, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_8 * __pyx_v_grid.strides[0]) ) + __pyx_t_7 * __pyx_v_grid.strides[1]) ) + __pyx_t_1 * __pyx_v_grid.strides[2]) )) = __pyx_v_chainID;
__pyx_t_1 = __pyx_v_off;
__pyx_t_7 = 2;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2421, __pyx_L1_error)
}
__pyx_t_8 = __pyx_v_nx;
__pyx_t_10 = __pyx_v_ny;
__pyx_t_11 = __pyx_v_nz;
__pyx_t_6 = -1;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_type_grid.shape[0];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_8 >= __pyx_v_type_grid.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_10 < 0) {
__pyx_t_10 += __pyx_v_type_grid.shape[1];
if (unlikely(__pyx_t_10 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_10 >= __pyx_v_type_grid.shape[1])) __pyx_t_6 = 1;
if (__pyx_t_11 < 0) {
__pyx_t_11 += __pyx_v_type_grid.shape[2];
if (unlikely(__pyx_t_11 < 0)) __pyx_t_6 = 2;
} else if (unlikely(__pyx_t_11 >= __pyx_v_type_grid.shape[2])) __pyx_t_6 = 2;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2421, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_8 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_10 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_11 * __pyx_v_type_grid.strides[2]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
+2422: if direction == 0:
__pyx_t_3 = (__pyx_v_direction == 0);
if (__pyx_t_3) {
/* … */
goto __pyx_L22;
}
+2423: for k in range(0, L - 1):
__pyx_t_12 = (__pyx_v_L - 1);
__pyx_t_13 = __pyx_t_12;
for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_13; __pyx_t_6+=1) {
__pyx_v_k = __pyx_t_6;
+2424: idx_to_bead[off + k, 5] = idx_to_bead[off + k + 1, 5]
__pyx_t_7 = ((__pyx_v_off + __pyx_v_k) + 1);
__pyx_t_1 = 5;
__pyx_t_14 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_14 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_14 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_14 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_14 = 1;
if (unlikely(__pyx_t_14 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_14);
__PYX_ERR(0, 2424, __pyx_L1_error)
}
__pyx_t_11 = (__pyx_v_off + __pyx_v_k);
__pyx_t_10 = 5;
__pyx_t_14 = -1;
if (__pyx_t_11 < 0) {
__pyx_t_11 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_11 < 0)) __pyx_t_14 = 0;
} else if (unlikely(__pyx_t_11 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_14 = 0;
if (__pyx_t_10 < 0) {
__pyx_t_10 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_10 < 0)) __pyx_t_14 = 1;
} else if (unlikely(__pyx_t_10 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_14 = 1;
if (unlikely(__pyx_t_14 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_14);
__PYX_ERR(0, 2424, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_11 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_10 * __pyx_v_idx_to_bead.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
+2425: idx_to_bead[off + k, 6] = idx_to_bead[off + k + 1, 6]
__pyx_t_1 = ((__pyx_v_off + __pyx_v_k) + 1);
__pyx_t_7 = 6;
__pyx_t_14 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_14 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_14 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_14 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_14 = 1;
if (unlikely(__pyx_t_14 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_14);
__PYX_ERR(0, 2425, __pyx_L1_error)
}
__pyx_t_10 = (__pyx_v_off + __pyx_v_k);
__pyx_t_11 = 6;
__pyx_t_14 = -1;
if (__pyx_t_10 < 0) {
__pyx_t_10 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_10 < 0)) __pyx_t_14 = 0;
} else if (unlikely(__pyx_t_10 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_14 = 0;
if (__pyx_t_11 < 0) {
__pyx_t_11 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_11 < 0)) __pyx_t_14 = 1;
} else if (unlikely(__pyx_t_11 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_14 = 1;
if (unlikely(__pyx_t_14 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_14);
__PYX_ERR(0, 2425, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_10 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_11 * __pyx_v_idx_to_bead.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
+2426: idx_to_bead[off + k, 7] = idx_to_bead[off + k + 1, 7]
__pyx_t_7 = ((__pyx_v_off + __pyx_v_k) + 1);
__pyx_t_1 = 7;
__pyx_t_14 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_14 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_14 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_14 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_14 = 1;
if (unlikely(__pyx_t_14 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_14);
__PYX_ERR(0, 2426, __pyx_L1_error)
}
__pyx_t_11 = (__pyx_v_off + __pyx_v_k);
__pyx_t_10 = 7;
__pyx_t_14 = -1;
if (__pyx_t_11 < 0) {
__pyx_t_11 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_11 < 0)) __pyx_t_14 = 0;
} else if (unlikely(__pyx_t_11 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_14 = 0;
if (__pyx_t_10 < 0) {
__pyx_t_10 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_10 < 0)) __pyx_t_14 = 1;
} else if (unlikely(__pyx_t_10 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_14 = 1;
if (unlikely(__pyx_t_14 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_14);
__PYX_ERR(0, 2426, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_11 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_10 * __pyx_v_idx_to_bead.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
}
+2427: idx_to_bead[off + L - 1, 5] = nx; idx_to_bead[off + L - 1, 6] = ny; idx_to_bead[off + L - 1, 7] = nz
__pyx_t_1 = ((__pyx_v_off + __pyx_v_L) - 1);
__pyx_t_7 = 5;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2427, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )) = __pyx_v_nx;
__pyx_t_7 = ((__pyx_v_off + __pyx_v_L) - 1);
__pyx_t_1 = 6;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2427, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )) = __pyx_v_ny;
__pyx_t_1 = ((__pyx_v_off + __pyx_v_L) - 1);
__pyx_t_7 = 7;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2427, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )) = __pyx_v_nz;
2428: else:
+2429: for k in range(L - 1, 0, -1):
/*else*/ {
for (__pyx_t_6 = (__pyx_v_L - 1); __pyx_t_6 > 0; __pyx_t_6-=1) {
__pyx_v_k = __pyx_t_6;
+2430: idx_to_bead[off + k, 5] = idx_to_bead[off + k - 1, 5]
__pyx_t_7 = ((__pyx_v_off + __pyx_v_k) - 1);
__pyx_t_1 = 5;
__pyx_t_14 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_14 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_14 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_14 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_14 = 1;
if (unlikely(__pyx_t_14 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_14);
__PYX_ERR(0, 2430, __pyx_L1_error)
}
__pyx_t_10 = (__pyx_v_off + __pyx_v_k);
__pyx_t_11 = 5;
__pyx_t_14 = -1;
if (__pyx_t_10 < 0) {
__pyx_t_10 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_10 < 0)) __pyx_t_14 = 0;
} else if (unlikely(__pyx_t_10 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_14 = 0;
if (__pyx_t_11 < 0) {
__pyx_t_11 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_11 < 0)) __pyx_t_14 = 1;
} else if (unlikely(__pyx_t_11 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_14 = 1;
if (unlikely(__pyx_t_14 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_14);
__PYX_ERR(0, 2430, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_10 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_11 * __pyx_v_idx_to_bead.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
+2431: idx_to_bead[off + k, 6] = idx_to_bead[off + k - 1, 6]
__pyx_t_1 = ((__pyx_v_off + __pyx_v_k) - 1);
__pyx_t_7 = 6;
__pyx_t_14 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_14 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_14 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_14 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_14 = 1;
if (unlikely(__pyx_t_14 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_14);
__PYX_ERR(0, 2431, __pyx_L1_error)
}
__pyx_t_11 = (__pyx_v_off + __pyx_v_k);
__pyx_t_10 = 6;
__pyx_t_14 = -1;
if (__pyx_t_11 < 0) {
__pyx_t_11 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_11 < 0)) __pyx_t_14 = 0;
} else if (unlikely(__pyx_t_11 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_14 = 0;
if (__pyx_t_10 < 0) {
__pyx_t_10 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_10 < 0)) __pyx_t_14 = 1;
} else if (unlikely(__pyx_t_10 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_14 = 1;
if (unlikely(__pyx_t_14 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_14);
__PYX_ERR(0, 2431, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_11 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_10 * __pyx_v_idx_to_bead.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
+2432: idx_to_bead[off + k, 7] = idx_to_bead[off + k - 1, 7]
__pyx_t_7 = ((__pyx_v_off + __pyx_v_k) - 1);
__pyx_t_1 = 7;
__pyx_t_14 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_14 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_14 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_14 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_14 = 1;
if (unlikely(__pyx_t_14 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_14);
__PYX_ERR(0, 2432, __pyx_L1_error)
}
__pyx_t_10 = (__pyx_v_off + __pyx_v_k);
__pyx_t_11 = 7;
__pyx_t_14 = -1;
if (__pyx_t_10 < 0) {
__pyx_t_10 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_10 < 0)) __pyx_t_14 = 0;
} else if (unlikely(__pyx_t_10 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_14 = 0;
if (__pyx_t_11 < 0) {
__pyx_t_11 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_11 < 0)) __pyx_t_14 = 1;
} else if (unlikely(__pyx_t_11 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_14 = 1;
if (unlikely(__pyx_t_14 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_14);
__PYX_ERR(0, 2432, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_10 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_11 * __pyx_v_idx_to_bead.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
}
+2433: idx_to_bead[off, 5] = nx; idx_to_bead[off, 6] = ny; idx_to_bead[off, 7] = nz
__pyx_t_1 = __pyx_v_off;
__pyx_t_7 = 5;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2433, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )) = __pyx_v_nx;
__pyx_t_7 = __pyx_v_off;
__pyx_t_1 = 6;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2433, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )) = __pyx_v_ny;
__pyx_t_1 = __pyx_v_off;
__pyx_t_7 = 7;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2433, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )) = __pyx_v_nz;
}
__pyx_L22:;
+2434: dsum = dsum + de
__pyx_v_dsum = (__pyx_v_dsum + __pyx_v_de);
+2435: acc = acc + 1
__pyx_v_acc = (__pyx_v_acc + 1);
+2436: continue
goto __pyx_L4_continue;
2437:
2438: # ----- heteropolymer: decompose into L single-bead moves -----
+2439: for k in range(L):
__pyx_t_6 = __pyx_v_L;
__pyx_t_14 = __pyx_t_6;
for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
__pyx_v_k = __pyx_t_15;
+2440: bx[k] = idx_to_bead[off + k, 5]; by[k] = idx_to_bead[off + k, 6]; bz[k] = idx_to_bead[off + k, 7]
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_1 = 5;
__pyx_t_16 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_16 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_16 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_16 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_16 = 1;
if (unlikely(__pyx_t_16 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_16);
__PYX_ERR(0, 2440, __pyx_L1_error)
}
(__pyx_v_bx[__pyx_v_k]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_1 = (__pyx_v_off + __pyx_v_k);
__pyx_t_7 = 6;
__pyx_t_16 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_16 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_16 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_16 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_16 = 1;
if (unlikely(__pyx_t_16 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_16);
__PYX_ERR(0, 2440, __pyx_L1_error)
}
(__pyx_v_by[__pyx_v_k]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_1 = 7;
__pyx_t_16 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_16 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_16 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_16 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_16 = 1;
if (unlikely(__pyx_t_16 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_16);
__PYX_ERR(0, 2440, __pyx_L1_error)
}
(__pyx_v_bz[__pyx_v_k]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
}
2441:
+2442: de = 0
__pyx_v_de = 0;
+2443: if direction == 0:
__pyx_t_3 = (__pyx_v_direction == 0);
if (__pyx_t_3) {
/* … */
goto __pyx_L29;
}
+2444: for k in range(L - 1, -1, -1):
for (__pyx_t_6 = (__pyx_v_L - 1); __pyx_t_6 > -1; __pyx_t_6-=1) {
__pyx_v_k = __pyx_t_6;
+2445: ox = idx_to_bead[off + k, 5]; oy = idx_to_bead[off + k, 6]; oz = idx_to_bead[off + k, 7]
__pyx_t_1 = (__pyx_v_off + __pyx_v_k);
__pyx_t_7 = 5;
__pyx_t_14 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_14 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_14 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_14 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_14 = 1;
if (unlikely(__pyx_t_14 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_14);
__PYX_ERR(0, 2445, __pyx_L1_error)
}
__pyx_v_ox = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_1 = 6;
__pyx_t_14 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_14 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_14 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_14 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_14 = 1;
if (unlikely(__pyx_t_14 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_14);
__PYX_ERR(0, 2445, __pyx_L1_error)
}
__pyx_v_oy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_1 = (__pyx_v_off + __pyx_v_k);
__pyx_t_7 = 7;
__pyx_t_14 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_14 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_14 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_14 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_14 = 1;
if (unlikely(__pyx_t_14 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_14);
__PYX_ERR(0, 2445, __pyx_L1_error)
}
__pyx_v_oz = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
+2446: if k == L - 1:
__pyx_t_3 = (__pyx_v_k == (__pyx_v_L - 1));
if (__pyx_t_3) {
/* … */
goto __pyx_L32;
}
+2447: tx = nx; ty = ny; tz = nz
__pyx_v_tx = __pyx_v_nx;
__pyx_v_ty = __pyx_v_ny;
__pyx_v_tz = __pyx_v_nz;
2448: else:
+2449: tx = bx[k + 1]; ty = by[k + 1]; tz = bz[k + 1]
/*else*/ {
__pyx_v_tx = (__pyx_v_bx[(__pyx_v_k + 1)]);
__pyx_v_ty = (__pyx_v_by[(__pyx_v_k + 1)]);
__pyx_v_tz = (__pyx_v_bz[(__pyx_v_k + 1)]);
}
__pyx_L32:;
+2450: de = de + get_energy_change_c(grid, type_grid, ox, oy, oz, tx, ty, tz,
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_energy_change_c(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_ox, __pyx_v_oy, __pyx_v_oz, __pyx_v_tx, __pyx_v_ty, __pyx_v_tz, (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_hardwall));
+2451: idx_to_bead[off + k, 1], interaction_table,
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_1 = 1;
__pyx_t_14 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_14 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_14 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_14 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_14 = 1;
if (unlikely(__pyx_t_14 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_14);
__PYX_ERR(0, 2451, __pyx_L1_error)
}
2452: LR_interaction_table, SLR_interaction_table,
2453: XDIM, YDIM, ZDIM, hardwall)
+2454: newp[0] = tx; newp[1] = ty; newp[2] = tz
(__pyx_v_newp[0]) = __pyx_v_tx;
(__pyx_v_newp[1]) = __pyx_v_ty;
(__pyx_v_newp[2]) = __pyx_v_tz;
+2455: de = de + get_angle_energy_change_c(off + k, idx_to_bead, newp, angle_lookup)
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_c((__pyx_v_off + __pyx_v_k), __pyx_v_idx_to_bead, __pyx_v_newp, __pyx_v_angle_lookup));
+2456: _apply_bead_move(grid, type_grid, idx_to_bead, off + k, ox, oy, oz, tx, ty, tz, chainID)
__pyx_f_5pimms_15mega_crank_fast__apply_bead_move(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, (__pyx_v_off + __pyx_v_k), __pyx_v_ox, __pyx_v_oy, __pyx_v_oz, __pyx_v_tx, __pyx_v_ty, __pyx_v_tz, __pyx_v_chainID);
}
2457: else:
+2458: for k in range(0, L):
/*else*/ {
__pyx_t_6 = __pyx_v_L;
__pyx_t_14 = __pyx_t_6;
for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
__pyx_v_k = __pyx_t_15;
+2459: ox = idx_to_bead[off + k, 5]; oy = idx_to_bead[off + k, 6]; oz = idx_to_bead[off + k, 7]
__pyx_t_1 = (__pyx_v_off + __pyx_v_k);
__pyx_t_7 = 5;
__pyx_t_16 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_16 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_16 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_16 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_16 = 1;
if (unlikely(__pyx_t_16 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_16);
__PYX_ERR(0, 2459, __pyx_L1_error)
}
__pyx_v_ox = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_1 = 6;
__pyx_t_16 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_16 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_16 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_16 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_16 = 1;
if (unlikely(__pyx_t_16 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_16);
__PYX_ERR(0, 2459, __pyx_L1_error)
}
__pyx_v_oy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_1 = (__pyx_v_off + __pyx_v_k);
__pyx_t_7 = 7;
__pyx_t_16 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_16 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_16 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_16 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_16 = 1;
if (unlikely(__pyx_t_16 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_16);
__PYX_ERR(0, 2459, __pyx_L1_error)
}
__pyx_v_oz = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
+2460: if k == 0:
__pyx_t_3 = (__pyx_v_k == 0);
if (__pyx_t_3) {
/* … */
goto __pyx_L35;
}
+2461: tx = nx; ty = ny; tz = nz
__pyx_v_tx = __pyx_v_nx;
__pyx_v_ty = __pyx_v_ny;
__pyx_v_tz = __pyx_v_nz;
2462: else:
+2463: tx = bx[k - 1]; ty = by[k - 1]; tz = bz[k - 1]
/*else*/ {
__pyx_v_tx = (__pyx_v_bx[(__pyx_v_k - 1)]);
__pyx_v_ty = (__pyx_v_by[(__pyx_v_k - 1)]);
__pyx_v_tz = (__pyx_v_bz[(__pyx_v_k - 1)]);
}
__pyx_L35:;
+2464: de = de + get_energy_change_c(grid, type_grid, ox, oy, oz, tx, ty, tz,
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_energy_change_c(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_ox, __pyx_v_oy, __pyx_v_oz, __pyx_v_tx, __pyx_v_ty, __pyx_v_tz, (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_hardwall));
+2465: idx_to_bead[off + k, 1], interaction_table,
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_1 = 1;
__pyx_t_16 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_16 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_16 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_16 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_16 = 1;
if (unlikely(__pyx_t_16 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_16);
__PYX_ERR(0, 2465, __pyx_L1_error)
}
2466: LR_interaction_table, SLR_interaction_table,
2467: XDIM, YDIM, ZDIM, hardwall)
+2468: newp[0] = tx; newp[1] = ty; newp[2] = tz
(__pyx_v_newp[0]) = __pyx_v_tx;
(__pyx_v_newp[1]) = __pyx_v_ty;
(__pyx_v_newp[2]) = __pyx_v_tz;
+2469: de = de + get_angle_energy_change_c(off + k, idx_to_bead, newp, angle_lookup)
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_c((__pyx_v_off + __pyx_v_k), __pyx_v_idx_to_bead, __pyx_v_newp, __pyx_v_angle_lookup));
+2470: _apply_bead_move(grid, type_grid, idx_to_bead, off + k, ox, oy, oz, tx, ty, tz, chainID)
__pyx_f_5pimms_15mega_crank_fast__apply_bead_move(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, (__pyx_v_off + __pyx_v_k), __pyx_v_ox, __pyx_v_oy, __pyx_v_oz, __pyx_v_tx, __pyx_v_ty, __pyx_v_tz, __pyx_v_chainID);
}
}
__pyx_L29:;
2471:
+2472: if accept_p(invtemp, de, &rng) == 1:
__pyx_t_3 = (__pyx_f_5pimms_15mega_crank_fast_accept_p(__pyx_v_invtemp, __pyx_v_de, (&__pyx_v_rng)) == 1);
if (__pyx_t_3) {
/* … */
goto __pyx_L36;
}
+2473: dsum = dsum + de
__pyx_v_dsum = (__pyx_v_dsum + __pyx_v_de);
+2474: acc = acc + 1
__pyx_v_acc = (__pyx_v_acc + 1);
2475: else:
+2476: for k in range(L):
/*else*/ {
__pyx_t_6 = __pyx_v_L;
__pyx_t_14 = __pyx_t_6;
for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
__pyx_v_k = __pyx_t_15;
+2477: cx = idx_to_bead[off + k, 5]; cy = idx_to_bead[off + k, 6]; cz = idx_to_bead[off + k, 7]
__pyx_t_1 = (__pyx_v_off + __pyx_v_k);
__pyx_t_7 = 5;
__pyx_t_16 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_16 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_16 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_16 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_16 = 1;
if (unlikely(__pyx_t_16 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_16);
__PYX_ERR(0, 2477, __pyx_L1_error)
}
__pyx_v_cx = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_1 = 6;
__pyx_t_16 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_16 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_16 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_16 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_16 = 1;
if (unlikely(__pyx_t_16 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_16);
__PYX_ERR(0, 2477, __pyx_L1_error)
}
__pyx_v_cy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_1 = (__pyx_v_off + __pyx_v_k);
__pyx_t_7 = 7;
__pyx_t_16 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_16 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_16 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_16 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_16 = 1;
if (unlikely(__pyx_t_16 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_16);
__PYX_ERR(0, 2477, __pyx_L1_error)
}
__pyx_v_cz = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
+2478: grid[cx, cy, cz] = 0; type_grid[cx, cy, cz] = 0
__pyx_t_7 = __pyx_v_cx;
__pyx_t_1 = __pyx_v_cy;
__pyx_t_11 = __pyx_v_cz;
__pyx_t_16 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_grid.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_16 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_grid.shape[0])) __pyx_t_16 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_grid.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_16 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_grid.shape[1])) __pyx_t_16 = 1;
if (__pyx_t_11 < 0) {
__pyx_t_11 += __pyx_v_grid.shape[2];
if (unlikely(__pyx_t_11 < 0)) __pyx_t_16 = 2;
} else if (unlikely(__pyx_t_11 >= __pyx_v_grid.shape[2])) __pyx_t_16 = 2;
if (unlikely(__pyx_t_16 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_16);
__PYX_ERR(0, 2478, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_7 * __pyx_v_grid.strides[0]) ) + __pyx_t_1 * __pyx_v_grid.strides[1]) ) + __pyx_t_11 * __pyx_v_grid.strides[2]) )) = 0;
__pyx_t_11 = __pyx_v_cx;
__pyx_t_1 = __pyx_v_cy;
__pyx_t_7 = __pyx_v_cz;
__pyx_t_16 = -1;
if (__pyx_t_11 < 0) {
__pyx_t_11 += __pyx_v_type_grid.shape[0];
if (unlikely(__pyx_t_11 < 0)) __pyx_t_16 = 0;
} else if (unlikely(__pyx_t_11 >= __pyx_v_type_grid.shape[0])) __pyx_t_16 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_type_grid.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_16 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_type_grid.shape[1])) __pyx_t_16 = 1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_type_grid.shape[2];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_16 = 2;
} else if (unlikely(__pyx_t_7 >= __pyx_v_type_grid.shape[2])) __pyx_t_16 = 2;
if (unlikely(__pyx_t_16 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_16);
__PYX_ERR(0, 2478, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_11 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_1 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_7 * __pyx_v_type_grid.strides[2]) )) = 0;
}
+2479: for k in range(L):
__pyx_t_6 = __pyx_v_L;
__pyx_t_14 = __pyx_t_6;
for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
__pyx_v_k = __pyx_t_15;
+2480: grid[bx[k], by[k], bz[k]] = chainID
__pyx_t_7 = (__pyx_v_bx[__pyx_v_k]);
__pyx_t_1 = (__pyx_v_by[__pyx_v_k]);
__pyx_t_11 = (__pyx_v_bz[__pyx_v_k]);
__pyx_t_16 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_grid.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_16 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_grid.shape[0])) __pyx_t_16 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_grid.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_16 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_grid.shape[1])) __pyx_t_16 = 1;
if (__pyx_t_11 < 0) {
__pyx_t_11 += __pyx_v_grid.shape[2];
if (unlikely(__pyx_t_11 < 0)) __pyx_t_16 = 2;
} else if (unlikely(__pyx_t_11 >= __pyx_v_grid.shape[2])) __pyx_t_16 = 2;
if (unlikely(__pyx_t_16 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_16);
__PYX_ERR(0, 2480, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_7 * __pyx_v_grid.strides[0]) ) + __pyx_t_1 * __pyx_v_grid.strides[1]) ) + __pyx_t_11 * __pyx_v_grid.strides[2]) )) = __pyx_v_chainID;
+2481: type_grid[bx[k], by[k], bz[k]] = idx_to_bead[off + k, 2]
__pyx_t_11 = (__pyx_v_off + __pyx_v_k);
__pyx_t_1 = 2;
__pyx_t_16 = -1;
if (__pyx_t_11 < 0) {
__pyx_t_11 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_11 < 0)) __pyx_t_16 = 0;
} else if (unlikely(__pyx_t_11 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_16 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_16 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_16 = 1;
if (unlikely(__pyx_t_16 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_16);
__PYX_ERR(0, 2481, __pyx_L1_error)
}
__pyx_t_7 = (__pyx_v_bx[__pyx_v_k]);
__pyx_t_10 = (__pyx_v_by[__pyx_v_k]);
__pyx_t_8 = (__pyx_v_bz[__pyx_v_k]);
__pyx_t_16 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_type_grid.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_16 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_type_grid.shape[0])) __pyx_t_16 = 0;
if (__pyx_t_10 < 0) {
__pyx_t_10 += __pyx_v_type_grid.shape[1];
if (unlikely(__pyx_t_10 < 0)) __pyx_t_16 = 1;
} else if (unlikely(__pyx_t_10 >= __pyx_v_type_grid.shape[1])) __pyx_t_16 = 1;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_type_grid.shape[2];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_16 = 2;
} else if (unlikely(__pyx_t_8 >= __pyx_v_type_grid.shape[2])) __pyx_t_16 = 2;
if (unlikely(__pyx_t_16 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_16);
__PYX_ERR(0, 2481, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_7 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_10 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_8 * __pyx_v_type_grid.strides[2]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_11 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
+2482: idx_to_bead[off + k, 5] = bx[k]; idx_to_bead[off + k, 6] = by[k]; idx_to_bead[off + k, 7] = bz[k]
__pyx_t_1 = (__pyx_v_off + __pyx_v_k);
__pyx_t_11 = 5;
__pyx_t_16 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_16 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_16 = 0;
if (__pyx_t_11 < 0) {
__pyx_t_11 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_11 < 0)) __pyx_t_16 = 1;
} else if (unlikely(__pyx_t_11 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_16 = 1;
if (unlikely(__pyx_t_16 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_16);
__PYX_ERR(0, 2482, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_11 * __pyx_v_idx_to_bead.strides[1]) )) = (__pyx_v_bx[__pyx_v_k]);
__pyx_t_11 = (__pyx_v_off + __pyx_v_k);
__pyx_t_1 = 6;
__pyx_t_16 = -1;
if (__pyx_t_11 < 0) {
__pyx_t_11 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_11 < 0)) __pyx_t_16 = 0;
} else if (unlikely(__pyx_t_11 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_16 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_16 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_16 = 1;
if (unlikely(__pyx_t_16 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_16);
__PYX_ERR(0, 2482, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_11 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )) = (__pyx_v_by[__pyx_v_k]);
__pyx_t_1 = (__pyx_v_off + __pyx_v_k);
__pyx_t_11 = 7;
__pyx_t_16 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_16 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_16 = 0;
if (__pyx_t_11 < 0) {
__pyx_t_11 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_11 < 0)) __pyx_t_16 = 1;
} else if (unlikely(__pyx_t_11 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_16 = 1;
if (unlikely(__pyx_t_16 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_16);
__PYX_ERR(0, 2482, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_11 * __pyx_v_idx_to_bead.strides[1]) )) = (__pyx_v_bz[__pyx_v_k]);
}
}
__pyx_L36:;
__pyx_L4_continue:;
}
2483:
+2484: out_delta[b] = dsum
__pyx_t_11 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_11 < 0) {
__pyx_t_11 += __pyx_v_out_delta.shape[0];
if (unlikely(__pyx_t_11 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_11 >= __pyx_v_out_delta.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 2484, __pyx_L1_error)
}
*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_out_delta.data) + __pyx_t_11)) )) = __pyx_v_dsum;
+2485: out_accepted[b] = acc
__pyx_t_11 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_11 < 0) {
__pyx_t_11 += __pyx_v_out_accepted.shape[0];
if (unlikely(__pyx_t_11 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_11 >= __pyx_v_out_accepted.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 2485, __pyx_L1_error)
}
*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_out_accepted.data) + __pyx_t_11)) )) = __pyx_v_acc;
2486:
2487:
2488: # helper shared by both slither/pull parallel kernels: assign each chain to the
2489: # block whose interior contains ALL of its beads, or -1 (frozen) otherwise.
+2490: def _chain_block_assignment(block_of_bead, chain_offset, num_chains):
/* Python wrapper */
static PyObject *__pyx_pw_5pimms_15mega_crank_fast_17_chain_block_assignment(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_5pimms_15mega_crank_fast_17_chain_block_assignment = {"_chain_block_assignment", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5pimms_15mega_crank_fast_17_chain_block_assignment, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5pimms_15mega_crank_fast_17_chain_block_assignment(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_block_of_bead = 0;
PyObject *__pyx_v_chain_offset = 0;
CYTHON_UNUSED PyObject *__pyx_v_num_chains = 0;
#if !CYTHON_METH_FASTCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_chain_block_assignment (wrapper)", 0);
#if !CYTHON_METH_FASTCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_block_of_bead,&__pyx_mstate_global->__pyx_n_u_chain_offset,&__pyx_mstate_global->__pyx_n_u_num_chains,0};
PyObject* values[3] = {0,0,0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 2490, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 3:
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 2490, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 2490, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 2490, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_chain_block_assignment", 0) < (0)) __PYX_ERR(0, 2490, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_chain_block_assignment", 1, 3, 3, i); __PYX_ERR(0, 2490, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 3)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 2490, __pyx_L3_error)
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 2490, __pyx_L3_error)
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 2490, __pyx_L3_error)
}
__pyx_v_block_of_bead = values[0];
__pyx_v_chain_offset = values[1];
__pyx_v_num_chains = values[2];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("_chain_block_assignment", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 2490, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("pimms.mega_crank_fast._chain_block_assignment", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_5pimms_15mega_crank_fast_16_chain_block_assignment(__pyx_self, __pyx_v_block_of_bead, __pyx_v_chain_offset, __pyx_v_num_chains);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_5pimms_15mega_crank_fast_16_chain_block_assignment(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_block_of_bead, PyObject *__pyx_v_chain_offset, CYTHON_UNUSED PyObject *__pyx_v_num_chains) {
PyObject *__pyx_v_offs = NULL;
PyObject *__pyx_v_bmin = NULL;
PyObject *__pyx_v_bmax = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_AddTraceback("pimms.mega_crank_fast._chain_block_assignment", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_offs);
__Pyx_XDECREF(__pyx_v_bmin);
__Pyx_XDECREF(__pyx_v_bmax);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_5pimms_15mega_crank_fast_17_chain_block_assignment, 0, __pyx_mstate_global->__pyx_n_u_chain_block_assignment, NULL, __pyx_mstate_global->__pyx_n_u_pimms_mega_crank_fast, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[14])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2490, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
#endif
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_chain_block_assignment, __pyx_t_4) < (0)) __PYX_ERR(0, 2490, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+2491: offs = np.asarray(chain_offset).astype(np.intp)
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2491, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_asarray); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2491, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_chain_offset}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2491, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_t_2 = __pyx_t_3; __Pyx_INCREF(__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2491, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_intp); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2491, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_7 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2491, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_offs = __pyx_t_1; __pyx_t_1 = 0;
+2492: bmin = np.minimum.reduceat(block_of_bead, offs)
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2492, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_minimum); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2492, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_7 = 0; { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_v_block_of_bead, __pyx_v_offs}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_reduceat, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2492, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_bmin = __pyx_t_1; __pyx_t_1 = 0;
+2493: bmax = np.maximum.reduceat(block_of_bead, offs)
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2493, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_maximum); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2493, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_2 = __pyx_t_4; __Pyx_INCREF(__pyx_t_2); __pyx_t_7 = 0; { PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_v_block_of_bead, __pyx_v_offs}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_reduceat, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2493, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_bmax = __pyx_t_1; __pyx_t_1 = 0;
+2494: return np.where((bmin == bmax) & (bmin >= 0), bmin, -1).astype(np.int64)
__Pyx_XDECREF(__pyx_r); __pyx_t_3 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2494, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_where); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2494, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyObject_RichCompare(__pyx_v_bmin, __pyx_v_bmax, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2494, __pyx_L1_error) __pyx_t_8 = PyObject_RichCompare(__pyx_v_bmin, __pyx_mstate_global->__pyx_int_0, Py_GE); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2494, __pyx_L1_error) __pyx_t_9 = PyNumber_And(__pyx_t_6, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2494, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[4] = {__pyx_t_3, __pyx_t_9, __pyx_v_bmin, __pyx_mstate_global->__pyx_int_neg_1}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_7, (4-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2494, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_t_4 = __pyx_t_2; __Pyx_INCREF(__pyx_t_4); __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2494, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2494, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_9}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2494, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0;
2495:
2496:
+2497: @cython.wraparound(False)
/* Python wrapper */ static PyObject *__pyx_pw_5pimms_15mega_crank_fast_19mega_slither_parallel(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_5pimms_15mega_crank_fast_18mega_slither_parallel, "\n Parallel 3D slither megamove. Same role/return as mega_slither, but distributes\n the per-chain slithers across `num_threads` threads using a chain-level\n frozen-halo block decomposition (a chain is only moved if all its beads lie in\n one block's interior). `chain_selector` is used only for the total work count\n (its length); chains are picked per block. Returns (energy, accepted).\n "); static PyMethodDef __pyx_mdef_5pimms_15mega_crank_fast_19mega_slither_parallel = {"mega_slither_parallel", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5pimms_15mega_crank_fast_19mega_slither_parallel, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_5pimms_15mega_crank_fast_18mega_slither_parallel}; static PyObject *__pyx_pw_5pimms_15mega_crank_fast_19mega_slither_parallel(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { __Pyx_memviewslice __pyx_v_grid = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_type_grid = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_idx_to_bead = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_chain_offset = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_chain_length = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_chain_homo = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_chain_selector = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_LR_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_SLR_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_angle_lookup = { 0, 0, { 0 }, { 0 }, { 0 } }; long __pyx_v_energy; float __pyx_v_invtemp; int __pyx_v_passed_seed; int __pyx_v_hardwall; CYTHON_UNUSED int __pyx_v_max_chain_len; int __pyx_v_num_threads; __Pyx_memviewslice __pyx_v_frozen_mask = { 0, 0, { 0 }, { 0 }, { 0 } }; #if !CYTHON_METH_FASTCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("mega_slither_parallel (wrapper)", 0); #if !CYTHON_METH_FASTCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_grid,&__pyx_mstate_global->__pyx_n_u_type_grid,&__pyx_mstate_global->__pyx_n_u_idx_to_bead,&__pyx_mstate_global->__pyx_n_u_chain_offset,&__pyx_mstate_global->__pyx_n_u_chain_length,&__pyx_mstate_global->__pyx_n_u_chain_homo,&__pyx_mstate_global->__pyx_n_u_chain_selector,&__pyx_mstate_global->__pyx_n_u_interaction_table,&__pyx_mstate_global->__pyx_n_u_LR_interaction_table,&__pyx_mstate_global->__pyx_n_u_SLR_interaction_table,&__pyx_mstate_global->__pyx_n_u_angle_lookup,&__pyx_mstate_global->__pyx_n_u_energy,&__pyx_mstate_global->__pyx_n_u_invtemp,&__pyx_mstate_global->__pyx_n_u_passed_seed,&__pyx_mstate_global->__pyx_n_u_hardwall,&__pyx_mstate_global->__pyx_n_u_max_chain_len,&__pyx_mstate_global->__pyx_n_u_num_threads,&__pyx_mstate_global->__pyx_n_u_frozen_mask,0}; PyObject* values[18] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 2497, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 18: values[17] = __Pyx_ArgRef_FASTCALL(__pyx_args, 17); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[17])) __PYX_ERR(0, 2497, __pyx_L3_error) CYTHON_FALLTHROUGH; case 17: values[16] = __Pyx_ArgRef_FASTCALL(__pyx_args, 16); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[16])) __PYX_ERR(0, 2497, __pyx_L3_error) CYTHON_FALLTHROUGH; case 16: values[15] = __Pyx_ArgRef_FASTCALL(__pyx_args, 15); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[15])) __PYX_ERR(0, 2497, __pyx_L3_error) CYTHON_FALLTHROUGH; case 15: values[14] = __Pyx_ArgRef_FASTCALL(__pyx_args, 14); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[14])) __PYX_ERR(0, 2497, __pyx_L3_error) CYTHON_FALLTHROUGH; case 14: values[13] = __Pyx_ArgRef_FASTCALL(__pyx_args, 13); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[13])) __PYX_ERR(0, 2497, __pyx_L3_error) CYTHON_FALLTHROUGH; case 13: values[12] = __Pyx_ArgRef_FASTCALL(__pyx_args, 12); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[12])) __PYX_ERR(0, 2497, __pyx_L3_error) CYTHON_FALLTHROUGH; case 12: values[11] = __Pyx_ArgRef_FASTCALL(__pyx_args, 11); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[11])) __PYX_ERR(0, 2497, __pyx_L3_error) CYTHON_FALLTHROUGH; case 11: values[10] = __Pyx_ArgRef_FASTCALL(__pyx_args, 10); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[10])) __PYX_ERR(0, 2497, __pyx_L3_error) CYTHON_FALLTHROUGH; case 10: values[9] = __Pyx_ArgRef_FASTCALL(__pyx_args, 9); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[9])) __PYX_ERR(0, 2497, __pyx_L3_error) CYTHON_FALLTHROUGH; case 9: values[8] = __Pyx_ArgRef_FASTCALL(__pyx_args, 8); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[8])) __PYX_ERR(0, 2497, __pyx_L3_error) CYTHON_FALLTHROUGH; case 8: values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 2497, __pyx_L3_error) CYTHON_FALLTHROUGH; case 7: values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 2497, __pyx_L3_error) CYTHON_FALLTHROUGH; case 6: values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 2497, __pyx_L3_error) CYTHON_FALLTHROUGH; case 5: values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 2497, __pyx_L3_error) CYTHON_FALLTHROUGH; case 4: values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 2497, __pyx_L3_error) CYTHON_FALLTHROUGH; case 3: values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 2497, __pyx_L3_error) CYTHON_FALLTHROUGH; case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 2497, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 2497, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "mega_slither_parallel", 0) < (0)) __PYX_ERR(0, 2497, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 18; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("mega_slither_parallel", 1, 18, 18, i); __PYX_ERR(0, 2497, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 18)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 2497, __pyx_L3_error) values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 2497, __pyx_L3_error) values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 2497, __pyx_L3_error) values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 2497, __pyx_L3_error) values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 2497, __pyx_L3_error) values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 2497, __pyx_L3_error) values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 2497, __pyx_L3_error) values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 2497, __pyx_L3_error) values[8] = __Pyx_ArgRef_FASTCALL(__pyx_args, 8); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[8])) __PYX_ERR(0, 2497, __pyx_L3_error) values[9] = __Pyx_ArgRef_FASTCALL(__pyx_args, 9); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[9])) __PYX_ERR(0, 2497, __pyx_L3_error) values[10] = __Pyx_ArgRef_FASTCALL(__pyx_args, 10); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[10])) __PYX_ERR(0, 2497, __pyx_L3_error) values[11] = __Pyx_ArgRef_FASTCALL(__pyx_args, 11); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[11])) __PYX_ERR(0, 2497, __pyx_L3_error) values[12] = __Pyx_ArgRef_FASTCALL(__pyx_args, 12); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[12])) __PYX_ERR(0, 2497, __pyx_L3_error) values[13] = __Pyx_ArgRef_FASTCALL(__pyx_args, 13); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[13])) __PYX_ERR(0, 2497, __pyx_L3_error) values[14] = __Pyx_ArgRef_FASTCALL(__pyx_args, 14); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[14])) __PYX_ERR(0, 2497, __pyx_L3_error) values[15] = __Pyx_ArgRef_FASTCALL(__pyx_args, 15); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[15])) __PYX_ERR(0, 2497, __pyx_L3_error) values[16] = __Pyx_ArgRef_FASTCALL(__pyx_args, 16); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[16])) __PYX_ERR(0, 2497, __pyx_L3_error) values[17] = __Pyx_ArgRef_FASTCALL(__pyx_args, 17); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[17])) __PYX_ERR(0, 2497, __pyx_L3_error) } __pyx_v_grid = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_grid.memview)) __PYX_ERR(0, 2499, __pyx_L3_error) __pyx_v_type_grid = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_type_grid.memview)) __PYX_ERR(0, 2500, __pyx_L3_error) __pyx_v_idx_to_bead = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_idx_to_bead.memview)) __PYX_ERR(0, 2501, __pyx_L3_error) __pyx_v_chain_offset = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_offset.memview)) __PYX_ERR(0, 2502, __pyx_L3_error) __pyx_v_chain_length = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_length.memview)) __PYX_ERR(0, 2503, __pyx_L3_error) __pyx_v_chain_homo = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_homo.memview)) __PYX_ERR(0, 2504, __pyx_L3_error) __pyx_v_chain_selector = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_selector.memview)) __PYX_ERR(0, 2505, __pyx_L3_error) __pyx_v_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[7], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interaction_table.memview)) __PYX_ERR(0, 2506, __pyx_L3_error) __pyx_v_LR_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_LR_interaction_table.memview)) __PYX_ERR(0, 2507, __pyx_L3_error) __pyx_v_SLR_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_SLR_interaction_table.memview)) __PYX_ERR(0, 2508, __pyx_L3_error) __pyx_v_angle_lookup = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsdsdsdsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_angle_lookup.memview)) __PYX_ERR(0, 2509, __pyx_L3_error) __pyx_v_energy = __Pyx_PyLong_As_long(values[11]); if (unlikely((__pyx_v_energy == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 2510, __pyx_L3_error) __pyx_v_invtemp = __Pyx_PyFloat_AsFloat(values[12]); if (unlikely((__pyx_v_invtemp == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 2511, __pyx_L3_error) __pyx_v_passed_seed = __Pyx_PyLong_As_int(values[13]); if (unlikely((__pyx_v_passed_seed == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2512, __pyx_L3_error) __pyx_v_hardwall = __Pyx_PyLong_As_int(values[14]); if (unlikely((__pyx_v_hardwall == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2513, __pyx_L3_error) __pyx_v_max_chain_len = __Pyx_PyLong_As_int(values[15]); if (unlikely((__pyx_v_max_chain_len == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2514, __pyx_L3_error) __pyx_v_num_threads = __Pyx_PyLong_As_int(values[16]); if (unlikely((__pyx_v_num_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2515, __pyx_L3_error) __pyx_v_frozen_mask = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[17], PyBUF_WRITABLE); if (unlikely(!__pyx_v_frozen_mask.memview)) __PYX_ERR(0, 2516, __pyx_L3_error) } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("mega_slither_parallel", 1, 18, 18, __pyx_nargs); __PYX_ERR(0, 2497, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __PYX_XCLEAR_MEMVIEW(&__pyx_v_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_type_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_idx_to_bead, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_offset, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_length, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_homo, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_selector, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_LR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_SLR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_angle_lookup, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_frozen_mask, 1); __Pyx_AddTraceback("pimms.mega_crank_fast.mega_slither_parallel", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5pimms_15mega_crank_fast_18mega_slither_parallel(__pyx_self, __pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, __pyx_v_chain_offset, __pyx_v_chain_length, __pyx_v_chain_homo, __pyx_v_chain_selector, __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_angle_lookup, __pyx_v_energy, __pyx_v_invtemp, __pyx_v_passed_seed, __pyx_v_hardwall, __pyx_v_max_chain_len, __pyx_v_num_threads, __pyx_v_frozen_mask); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __PYX_XCLEAR_MEMVIEW(&__pyx_v_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_type_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_idx_to_bead, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_offset, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_length, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_homo, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_selector, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_LR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_SLR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_angle_lookup, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_frozen_mask, 1); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ static PyObject *__pyx_pf_5pimms_15mega_crank_fast_18mega_slither_parallel(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_grid, __Pyx_memviewslice __pyx_v_type_grid, __Pyx_memviewslice __pyx_v_idx_to_bead, __Pyx_memviewslice __pyx_v_chain_offset, __Pyx_memviewslice __pyx_v_chain_length, __Pyx_memviewslice __pyx_v_chain_homo, __Pyx_memviewslice __pyx_v_chain_selector, __Pyx_memviewslice __pyx_v_interaction_table, __Pyx_memviewslice __pyx_v_LR_interaction_table, __Pyx_memviewslice __pyx_v_SLR_interaction_table, __Pyx_memviewslice __pyx_v_angle_lookup, long __pyx_v_energy, float __pyx_v_invtemp, int __pyx_v_passed_seed, int __pyx_v_hardwall, CYTHON_UNUSED int __pyx_v_max_chain_len, int __pyx_v_num_threads, __Pyx_memviewslice __pyx_v_frozen_mask) { struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_2_mega_slither_parallel *__pyx_cur_scope; int __pyx_v_XDIM; int __pyx_v_YDIM; int __pyx_v_ZDIM; int __pyx_v_num_chains; int __pyx_v_n_steps; PyObject *__pyx_v_idx_np = NULL; int __pyx_v_R_int; int __pyx_v_cap; int __pyx_v_nbx; int __pyx_v_nby; int __pyx_v_nbz; int __pyx_v_Lx; int __pyx_v_Ly; int __pyx_v_Lz; int __pyx_v_num_blocks; PyObject *__pyx_v_rstate = NULL; int __pyx_v_shift_x; int __pyx_v_shift_y; int __pyx_v_shift_z; PyObject *__pyx_v_gx = NULL; PyObject *__pyx_v_gy = NULL; PyObject *__pyx_v_gz = NULL; PyObject *__pyx_v_dim_block = 0; PyObject *__pyx_v_bxj = NULL; PyObject *__pyx_v_byj = NULL; PyObject *__pyx_v_bzj = NULL; PyObject *__pyx_v_block_of_bead = NULL; PyObject *__pyx_v_chain_block = NULL; PyObject *__pyx_v_movable = NULL; PyObject *__pyx_v_mblocks = NULL; PyObject *__pyx_v_order = NULL; PyObject *__pyx_v_chain_ids = NULL; PyObject *__pyx_v_sorted_blocks = NULL; PyObject *__pyx_v_counts = NULL; PyObject *__pyx_v_starts = NULL; PyObject *__pyx_v_total_movable = NULL; PyObject *__pyx_v_attempts = NULL; PyObject *__pyx_v_bix = NULL; PyObject *__pyx_v_biy = NULL; PyObject *__pyx_v_biz = NULL; PyObject *__pyx_v_blo_x = NULL; PyObject *__pyx_v_blo_y = NULL; PyObject *__pyx_v_blo_z = NULL; PyObject *__pyx_v_seeds = NULL; PyObject *__pyx_v_out_delta = NULL; PyObject *__pyx_v_out_accepted = NULL; __Pyx_memviewslice __pyx_v_chain_ids_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_starts_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_attempts_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_seeds_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_blo_x_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_blo_y_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_blo_z_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_out_delta_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_out_accepted_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; int __pyx_v_b; CYTHON_UNUSED int __pyx_v_nthreads; long __pyx_v_tot_d; int __pyx_v_tot_a; PyObject *__pyx_r = NULL; __pyx_cur_scope = (struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_2_mega_slither_parallel *)__pyx_tp_new_5pimms_15mega_crank_fast___pyx_scope_struct_2_mega_slither_parallel(__pyx_mstate_global->__pyx_ptype_5pimms_15mega_crank_fast___pyx_scope_struct_2_mega_slither_parallel, __pyx_mstate_global->__pyx_empty_tuple, NULL); if (unlikely(!__pyx_cur_scope)) { __pyx_cur_scope = ((struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_2_mega_slither_parallel *)Py_None); __Pyx_INCREF(Py_None); __PYX_ERR(0, 2497, __pyx_L1_error) } else { __Pyx_GOTREF((PyObject *)__pyx_cur_scope); } /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_11); __Pyx_XDECREF(__pyx_t_12); __Pyx_XDECREF(__pyx_t_13); __Pyx_XDECREF(__pyx_t_14); __Pyx_XDECREF(__pyx_t_16); __PYX_XCLEAR_MEMVIEW(&__pyx_t_17, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_t_18, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_t_19, 1); __Pyx_AddTraceback("pimms.mega_crank_fast.mega_slither_parallel", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_idx_np); __Pyx_XDECREF(__pyx_v_rstate); __Pyx_XDECREF(__pyx_v_gx); __Pyx_XDECREF(__pyx_v_gy); __Pyx_XDECREF(__pyx_v_gz); __Pyx_XDECREF(__pyx_v_dim_block); __Pyx_XDECREF(__pyx_v_bxj); __Pyx_XDECREF(__pyx_v_byj); __Pyx_XDECREF(__pyx_v_bzj); __Pyx_XDECREF(__pyx_v_block_of_bead); __Pyx_XDECREF(__pyx_v_chain_block); __Pyx_XDECREF(__pyx_v_movable); __Pyx_XDECREF(__pyx_v_mblocks); __Pyx_XDECREF(__pyx_v_order); __Pyx_XDECREF(__pyx_v_chain_ids); __Pyx_XDECREF(__pyx_v_sorted_blocks); __Pyx_XDECREF(__pyx_v_counts); __Pyx_XDECREF(__pyx_v_starts); __Pyx_XDECREF(__pyx_v_total_movable); __Pyx_XDECREF(__pyx_v_attempts); __Pyx_XDECREF(__pyx_v_bix); __Pyx_XDECREF(__pyx_v_biy); __Pyx_XDECREF(__pyx_v_biz); __Pyx_XDECREF(__pyx_v_blo_x); __Pyx_XDECREF(__pyx_v_blo_y); __Pyx_XDECREF(__pyx_v_blo_z); __Pyx_XDECREF(__pyx_v_seeds); __Pyx_XDECREF(__pyx_v_out_delta); __Pyx_XDECREF(__pyx_v_out_accepted); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_ids_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_starts_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_attempts_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_seeds_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_blo_x_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_blo_y_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_blo_z_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_out_delta_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_out_accepted_mv, 1); __Pyx_DECREF((PyObject *)__pyx_cur_scope); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_5pimms_15mega_crank_fast_19mega_slither_parallel, 0, __pyx_mstate_global->__pyx_n_u_mega_slither_parallel, NULL, __pyx_mstate_global->__pyx_n_u_pimms_mega_crank_fast, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[15])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2497, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_mega_slither_parallel, __pyx_t_4) < (0)) __PYX_ERR(0, 2497, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* … */ struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_2_mega_slither_parallel { PyObject_HEAD int __pyx_v_W; int __pyx_v_num_beads; };
2498: @cython.boundscheck(False)
2499: def mega_slither_parallel(NUMPY_INT_TYPE[:, :, :] grid,
2500: NUMPY_INT_TYPE[:, :, :] type_grid,
2501: NUMPY_INT_TYPE_long[:, :] idx_to_bead,
2502: int[::1] chain_offset,
2503: int[::1] chain_length,
2504: int[::1] chain_homo,
2505: int[::1] chain_selector,
2506: NUMPY_INT_TYPE[:, :] interaction_table,
2507: NUMPY_INT_TYPE[:, :] LR_interaction_table,
2508: NUMPY_INT_TYPE[:, :] SLR_interaction_table,
2509: NUMPY_INT_TYPE[:, :, :, :, :, :, :] angle_lookup,
2510: long energy,
2511: float invtemp,
2512: int passed_seed,
2513: int hardwall,
2514: int max_chain_len,
2515: int num_threads,
2516: NUMPY_INT_TYPE[::1] frozen_mask):
2517: """
2518: Parallel 3D slither megamove. Same role/return as mega_slither, but distributes
2519: the per-chain slithers across `num_threads` threads using a chain-level
2520: frozen-halo block decomposition (a chain is only moved if all its beads lie in
2521: one block's interior). `chain_selector` is used only for the total work count
2522: (its length); chains are picked per block. Returns (energy, accepted).
2523: """
+2524: cdef int XDIM = grid.shape[0]
__pyx_v_XDIM = (__pyx_v_grid.shape[0]);
+2525: cdef int YDIM = grid.shape[1]
__pyx_v_YDIM = (__pyx_v_grid.shape[1]);
+2526: cdef int ZDIM = grid.shape[2]
__pyx_v_ZDIM = (__pyx_v_grid.shape[2]);
+2527: cdef int num_beads = idx_to_bead.shape[0]
__pyx_cur_scope->__pyx_v_num_beads = (__pyx_v_idx_to_bead.shape[0]);
+2528: cdef int num_chains = chain_offset.shape[0]
__pyx_v_num_chains = (__pyx_v_chain_offset.shape[0]);
+2529: cdef int n_steps = chain_selector.shape[0]
__pyx_v_n_steps = (__pyx_v_chain_selector.shape[0]);
2530:
+2531: idx_np = np.asarray(idx_to_bead)
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2531, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_asarray); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2531, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_idx_to_bead, 2, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2531, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2531, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_idx_np = __pyx_t_1; __pyx_t_1 = 0;
+2532: cdef int R_int = 3 if np.any(idx_np[:, 1] == 1) else 1
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2532, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_any); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2532, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_idx_np, __pyx_mstate_global->__pyx_tuple[1]); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2532, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyLong_EqObjC(__pyx_t_3, __pyx_mstate_global->__pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2532, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2532, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 2532, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_8) { __pyx_t_6 = 3; } else { __pyx_t_6 = 1; } __pyx_v_R_int = __pyx_t_6;
+2533: cdef int W = R_int + 2
__pyx_cur_scope->__pyx_v_W = (__pyx_v_R_int + 2);
2534:
+2535: cdef int cap = 4
__pyx_v_cap = 4;
+2536: cdef int nbx = _choose_nb(XDIM, W, cap)
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_choose_nb); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2536, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_XDIM); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2536, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_W); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2536, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_cap); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2536, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_t_4, __pyx_t_3, __pyx_t_9}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2536, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2536, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_nbx = __pyx_t_6;
+2537: cdef int nby = _choose_nb(YDIM, W, cap)
__pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_choose_nb); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2537, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_YDIM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2537, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_W); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2537, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_cap); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2537, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[4] = {__pyx_t_7, __pyx_t_3, __pyx_t_4, __pyx_t_2}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2537, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2537, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_nby = __pyx_t_6;
+2538: cdef int nbz = _choose_nb(ZDIM, W, cap)
__pyx_t_9 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_choose_nb); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2538, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_ZDIM); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2538, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_W); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2538, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_cap); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2538, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_9); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[4] = {__pyx_t_9, __pyx_t_4, __pyx_t_3, __pyx_t_7}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2538, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2538, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_nbz = __pyx_t_6;
+2539: cdef int Lx = XDIM // nbx
if (unlikely(__pyx_v_nbx == 0)) {
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__PYX_ERR(0, 2539, __pyx_L1_error)
}
else if (sizeof(int) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_nbx == (int)-1) && unlikely(__Pyx_UNARY_NEG_WOULD_OVERFLOW(__pyx_v_XDIM))) {
PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
__PYX_ERR(0, 2539, __pyx_L1_error)
}
__pyx_v_Lx = __Pyx_div_int(__pyx_v_XDIM, __pyx_v_nbx, 0);
+2540: cdef int Ly = YDIM // nby
if (unlikely(__pyx_v_nby == 0)) {
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__PYX_ERR(0, 2540, __pyx_L1_error)
}
else if (sizeof(int) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_nby == (int)-1) && unlikely(__Pyx_UNARY_NEG_WOULD_OVERFLOW(__pyx_v_YDIM))) {
PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
__PYX_ERR(0, 2540, __pyx_L1_error)
}
__pyx_v_Ly = __Pyx_div_int(__pyx_v_YDIM, __pyx_v_nby, 0);
+2541: cdef int Lz = ZDIM // nbz
if (unlikely(__pyx_v_nbz == 0)) {
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__PYX_ERR(0, 2541, __pyx_L1_error)
}
else if (sizeof(int) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_nbz == (int)-1) && unlikely(__Pyx_UNARY_NEG_WOULD_OVERFLOW(__pyx_v_ZDIM))) {
PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
__PYX_ERR(0, 2541, __pyx_L1_error)
}
__pyx_v_Lz = __Pyx_div_int(__pyx_v_ZDIM, __pyx_v_nbz, 0);
+2542: cdef int num_blocks = nbx * nby * nbz
__pyx_v_num_blocks = ((__pyx_v_nbx * __pyx_v_nby) * __pyx_v_nbz);
2543:
+2544: rstate = np.random.RandomState(passed_seed & 0x7FFFFFFF)
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2544, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_random); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2544, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_2 = __pyx_t_3; __Pyx_INCREF(__pyx_t_2); __pyx_t_7 = __Pyx_PyLong_From_long((__pyx_v_passed_seed & 0x7FFFFFFF)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2544, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_7}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_RandomState, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2544, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_rstate = __pyx_t_1; __pyx_t_1 = 0;
+2545: cdef int shift_x = int(rstate.randint(0, Lx)) if nbx > 1 else 0
__pyx_t_8 = (__pyx_v_nbx > 1);
if (__pyx_t_8) {
__pyx_t_3 = __pyx_v_rstate;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_Lx); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2545, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_mstate_global->__pyx_int_0, __pyx_t_7};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_randint, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2545, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_t_7 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2545, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_10 = __Pyx_PyLong_As_int(__pyx_t_7); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2545, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__pyx_t_6 = __pyx_t_10;
} else {
__pyx_t_6 = 0;
}
__pyx_v_shift_x = __pyx_t_6;
+2546: cdef int shift_y = int(rstate.randint(0, Ly)) if nby > 1 else 0
__pyx_t_8 = (__pyx_v_nby > 1);
if (__pyx_t_8) {
__pyx_t_1 = __pyx_v_rstate;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_Ly); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2546, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_mstate_global->__pyx_int_0, __pyx_t_3};
__pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_randint, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2546, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
}
__pyx_t_3 = __Pyx_PyNumber_Int(__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2546, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__pyx_t_10 = __Pyx_PyLong_As_int(__pyx_t_3); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2546, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_6 = __pyx_t_10;
} else {
__pyx_t_6 = 0;
}
__pyx_v_shift_y = __pyx_t_6;
+2547: cdef int shift_z = int(rstate.randint(0, Lz)) if nbz > 1 else 0
__pyx_t_8 = (__pyx_v_nbz > 1);
if (__pyx_t_8) {
__pyx_t_7 = __pyx_v_rstate;
__Pyx_INCREF(__pyx_t_7);
__pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_Lz); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2547, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_mstate_global->__pyx_int_0, __pyx_t_1};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_randint, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2547, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__pyx_t_1 = __Pyx_PyNumber_Int(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2547, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_10 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2547, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_6 = __pyx_t_10;
} else {
__pyx_t_6 = 0;
}
__pyx_v_shift_z = __pyx_t_6;
2548:
+2549: gx = idx_np[:, 5].astype(np.int64)
__pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_idx_np, __pyx_mstate_global->__pyx_tuple[2]); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2549, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_3 = __pyx_t_7; __Pyx_INCREF(__pyx_t_3); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2549, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2549, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_4}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2549, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_gx = __pyx_t_1; __pyx_t_1 = 0;
+2550: gy = idx_np[:, 6].astype(np.int64)
__pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_idx_np, __pyx_mstate_global->__pyx_tuple[3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2550, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_7 = __pyx_t_4; __Pyx_INCREF(__pyx_t_7); __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2550, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2550, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_2}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2550, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_gy = __pyx_t_1; __pyx_t_1 = 0;
+2551: gz = idx_np[:, 7].astype(np.int64)
__pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_idx_np, __pyx_mstate_global->__pyx_tuple[4]); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2551, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __pyx_t_2; __Pyx_INCREF(__pyx_t_4); __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2551, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2551, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_3}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2551, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_gz = __pyx_t_1; __pyx_t_1 = 0;
2552:
+2553: def dim_block(g, nb, L, DIM, shift):
/* Python wrapper */
static PyObject *__pyx_pw_5pimms_15mega_crank_fast_21mega_slither_parallel_1dim_block(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_5pimms_15mega_crank_fast_21mega_slither_parallel_1dim_block = {"dim_block", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5pimms_15mega_crank_fast_21mega_slither_parallel_1dim_block, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5pimms_15mega_crank_fast_21mega_slither_parallel_1dim_block(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_g = 0;
PyObject *__pyx_v_nb = 0;
PyObject *__pyx_v_L = 0;
PyObject *__pyx_v_DIM = 0;
PyObject *__pyx_v_shift = 0;
#if !CYTHON_METH_FASTCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("dim_block (wrapper)", 0);
#if !CYTHON_METH_FASTCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_g,&__pyx_mstate_global->__pyx_n_u_nb,&__pyx_mstate_global->__pyx_n_u_L,&__pyx_mstate_global->__pyx_n_u_DIM,&__pyx_mstate_global->__pyx_n_u_shift,0};
PyObject* values[5] = {0,0,0,0,0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 2553, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 5:
values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 2553, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 4:
values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 2553, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 3:
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 2553, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 2553, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 2553, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "dim_block", 0) < (0)) __PYX_ERR(0, 2553, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 5; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("dim_block", 1, 5, 5, i); __PYX_ERR(0, 2553, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 5)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 2553, __pyx_L3_error)
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 2553, __pyx_L3_error)
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 2553, __pyx_L3_error)
values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 2553, __pyx_L3_error)
values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 2553, __pyx_L3_error)
}
__pyx_v_g = values[0];
__pyx_v_nb = values[1];
__pyx_v_L = values[2];
__pyx_v_DIM = values[3];
__pyx_v_shift = values[4];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("dim_block", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 2553, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("pimms.mega_crank_fast.mega_slither_parallel.dim_block", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_5pimms_15mega_crank_fast_21mega_slither_parallel_dim_block(__pyx_self, __pyx_v_g, __pyx_v_nb, __pyx_v_L, __pyx_v_DIM, __pyx_v_shift);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_5pimms_15mega_crank_fast_21mega_slither_parallel_dim_block(PyObject *__pyx_self, PyObject *__pyx_v_g, PyObject *__pyx_v_nb, PyObject *__pyx_v_L, PyObject *__pyx_v_DIM, PyObject *__pyx_v_shift) {
struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_2_mega_slither_parallel *__pyx_cur_scope;
struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_2_mega_slither_parallel *__pyx_outer_scope;
PyObject *__pyx_v_s = NULL;
PyObject *__pyx_v_bj = NULL;
PyObject *__pyx_v_within = NULL;
PyObject *__pyx_v_bad = NULL;
PyObject *__pyx_r = NULL;
__pyx_outer_scope = (struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_2_mega_slither_parallel *) __Pyx_CyFunction_GetClosure(__pyx_self);
__pyx_cur_scope = __pyx_outer_scope;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("pimms.mega_crank_fast.mega_slither_parallel.dim_block", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_s);
__Pyx_XDECREF(__pyx_v_bj);
__Pyx_XDECREF(__pyx_v_within);
__Pyx_XDECREF(__pyx_v_bad);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_5pimms_15mega_crank_fast_21mega_slither_parallel_1dim_block, 0, __pyx_mstate_global->__pyx_n_u_mega_slither_parallel_locals_dim, ((PyObject*)__pyx_cur_scope), __pyx_mstate_global->__pyx_n_u_pimms_mega_crank_fast, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[2])); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2553, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_v_dim_block = __pyx_t_1;
__pyx_t_1 = 0;
+2554: if nb == 1:
__pyx_t_1 = (__Pyx_PyLong_BoolEqObjC(__pyx_v_nb, __pyx_mstate_global->__pyx_int_1, 1, 0)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2554, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+2555: return np.zeros(num_beads, dtype=np.int64)
__Pyx_XDECREF(__pyx_r); __pyx_t_3 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2555, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_zeros); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2555, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_num_beads); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2555, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2555, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2555, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_3, __pyx_t_4}; __pyx_t_6 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2555, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_7, __pyx_t_6, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 2555, __pyx_L1_error) __pyx_t_2 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_6); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2555, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0;
+2556: s = (g - shift) % DIM
__pyx_t_2 = PyNumber_Subtract(__pyx_v_g, __pyx_v_shift); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2556, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = PyNumber_Remainder(__pyx_t_2, __pyx_v_DIM); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2556, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_s = __pyx_t_5; __pyx_t_5 = 0;
+2557: bj = s // L
__pyx_t_5 = PyNumber_FloorDivide(__pyx_v_s, __pyx_v_L); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2557, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_v_bj = __pyx_t_5; __pyx_t_5 = 0;
+2558: within = s - bj * L
__pyx_t_5 = PyNumber_Multiply(__pyx_v_bj, __pyx_v_L); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2558, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = PyNumber_Subtract(__pyx_v_s, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2558, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_within = __pyx_t_2; __pyx_t_2 = 0;
+2559: bad = (s >= nb * L) | (within < W) | (within >= L - W)
__pyx_t_2 = PyNumber_Multiply(__pyx_v_nb, __pyx_v_L); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2559, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = PyObject_RichCompare(__pyx_v_s, __pyx_t_2, Py_GE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2559, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_W); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2559, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = PyObject_RichCompare(__pyx_v_within, __pyx_t_2, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2559, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Or(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2559, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_W); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2559, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = PyNumber_Subtract(__pyx_v_L, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2559, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyObject_RichCompare(__pyx_v_within, __pyx_t_5, Py_GE); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2559, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyNumber_Or(__pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2559, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_bad = __pyx_t_5; __pyx_t_5 = 0;
+2560: bj = bj.copy()
__pyx_t_6 = __pyx_v_bj; __Pyx_INCREF(__pyx_t_6); __pyx_t_8 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL}; __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_copy, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2560, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } __Pyx_DECREF_SET(__pyx_v_bj, __pyx_t_5); __pyx_t_5 = 0;
+2561: bj[bad] = -1
if (unlikely((PyObject_SetItem(__pyx_v_bj, __pyx_v_bad, __pyx_mstate_global->__pyx_int_neg_1) < 0))) __PYX_ERR(0, 2561, __pyx_L1_error)
+2562: return bj
__Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_bj); __pyx_r = __pyx_v_bj; goto __pyx_L0;
2563:
+2564: bxj = dim_block(gx, nbx, Lx, XDIM, shift_x)
__pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_nbx); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2564, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_Lx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2564, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_XDIM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2564, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_shift_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2564, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_7 = __pyx_pf_5pimms_15mega_crank_fast_21mega_slither_parallel_dim_block(__pyx_v_dim_block, __pyx_v_gx, __pyx_t_1, __pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2564, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_bxj = __pyx_t_7; __pyx_t_7 = 0;
+2565: byj = dim_block(gy, nby, Ly, YDIM, shift_y)
__pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_nby); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2565, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_Ly); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2565, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_YDIM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2565, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_shift_y); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2565, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __pyx_pf_5pimms_15mega_crank_fast_21mega_slither_parallel_dim_block(__pyx_v_dim_block, __pyx_v_gy, __pyx_t_7, __pyx_t_4, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2565, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_byj = __pyx_t_1; __pyx_t_1 = 0;
+2566: bzj = dim_block(gz, nbz, Lz, ZDIM, shift_z)
__pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_nbz); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2566, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_Lz); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2566, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_ZDIM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2566, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_shift_z); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2566, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_7 = __pyx_pf_5pimms_15mega_crank_fast_21mega_slither_parallel_dim_block(__pyx_v_dim_block, __pyx_v_gz, __pyx_t_1, __pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2566, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_bzj = __pyx_t_7; __pyx_t_7 = 0;
+2567: block_of_bead = (bxj * nby * nbz + byj * nbz + bzj)
__pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_nby); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2567, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = PyNumber_Multiply(__pyx_v_bxj, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2567, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_nbz); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2567, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_3 = PyNumber_Multiply(__pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2567, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_nbz); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2567, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = PyNumber_Multiply(__pyx_v_byj, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2567, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = PyNumber_Add(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2567, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyNumber_Add(__pyx_t_7, __pyx_v_bzj); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2567, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_block_of_bead = __pyx_t_4; __pyx_t_4 = 0;
+2568: block_of_bead[(bxj < 0) | (byj < 0) | (bzj < 0)] = -1
__pyx_t_4 = PyObject_RichCompare(__pyx_v_bxj, __pyx_mstate_global->__pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2568, __pyx_L1_error) __pyx_t_7 = PyObject_RichCompare(__pyx_v_byj, __pyx_mstate_global->__pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2568, __pyx_L1_error) __pyx_t_3 = PyNumber_Or(__pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2568, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = PyObject_RichCompare(__pyx_v_bzj, __pyx_mstate_global->__pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2568, __pyx_L1_error) __pyx_t_4 = PyNumber_Or(__pyx_t_3, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2568, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely((PyObject_SetItem(__pyx_v_block_of_bead, __pyx_t_4, __pyx_mstate_global->__pyx_int_neg_1) < 0))) __PYX_ERR(0, 2568, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
2569:
+2570: block_of_bead[np.asarray(frozen_mask) != 0] = -1 # frozen beads -> whole chain frozen
__pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2570, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_asarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2570, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_frozen_mask, 1, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2570, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_3}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2570, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_2 = __Pyx_PyLong_NeObjC(__pyx_t_4, __pyx_mstate_global->__pyx_int_0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2570, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely((PyObject_SetItem(__pyx_v_block_of_bead, __pyx_t_2, __pyx_mstate_global->__pyx_int_neg_1) < 0))) __PYX_ERR(0, 2570, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+2571: chain_block = _chain_block_assignment(block_of_bead, chain_offset, num_chains)
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_chain_block_assignment); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2571, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __pyx_memoryview_fromslice(__pyx_v_chain_offset, 1, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2571, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_num_chains); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2571, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_v_block_of_bead, __pyx_t_7, __pyx_t_1}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2571, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_v_chain_block = __pyx_t_2; __pyx_t_2 = 0;
+2572: movable = np.nonzero(chain_block >= 0)[0].astype(np.int32)
__pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2572, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_nonzero); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2572, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_RichCompare(__pyx_v_chain_block, __pyx_mstate_global->__pyx_int_0, Py_GE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2572, __pyx_L1_error) __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_4}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2572, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 0, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2572, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = __pyx_t_9; __Pyx_INCREF(__pyx_t_3); __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2572, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2572, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_4}; __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2572, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_v_movable = __pyx_t_2; __pyx_t_2 = 0;
+2573: if movable.shape[0] == 0:
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_movable, __pyx_mstate_global->__pyx_n_u_shape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2573, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_2, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 0, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2573, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_8 = (__Pyx_PyLong_BoolEqObjC(__pyx_t_9, __pyx_mstate_global->__pyx_int_0, 0, 0)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 2573, __pyx_L1_error) __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (__pyx_t_8) { /* … */ }
+2574: return (energy, 0)
__Pyx_XDECREF(__pyx_r); __pyx_t_9 = __Pyx_PyLong_From_long(__pyx_v_energy); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2574, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2574, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_9); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_9) != (0)) __PYX_ERR(0, 2574, __pyx_L1_error); __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_0); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_mstate_global->__pyx_int_0) != (0)) __PYX_ERR(0, 2574, __pyx_L1_error); __pyx_t_9 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0;
2575:
+2576: mblocks = chain_block[movable]
__pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_chain_block, __pyx_v_movable); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2576, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_mblocks = __pyx_t_2; __pyx_t_2 = 0;
+2577: order = np.argsort(mblocks, kind="stable")
__pyx_t_9 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2577, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_argsort); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2577, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_9); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_9, __pyx_v_mblocks}; __pyx_t_4 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2577, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_kind, __pyx_mstate_global->__pyx_n_u_stable, __pyx_t_4, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 2577, __pyx_L1_error) __pyx_t_2 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_4); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2577, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_v_order = __pyx_t_2; __pyx_t_2 = 0;
+2578: chain_ids = movable[order].astype(np.int32)
__pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_movable, __pyx_v_order); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2578, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __pyx_t_4; __Pyx_INCREF(__pyx_t_3); __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2578, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2578, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_1}; __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2578, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_v_chain_ids = __pyx_t_2; __pyx_t_2 = 0;
+2579: sorted_blocks = mblocks[order]
__pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_mblocks, __pyx_v_order); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2579, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_sorted_blocks = __pyx_t_2; __pyx_t_2 = 0;
2580:
+2581: counts = np.bincount(sorted_blocks, minlength=num_blocks).astype(np.int32)
__pyx_t_3 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2581, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_bincount); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2581, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2581, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_3, __pyx_v_sorted_blocks}; __pyx_t_11 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2581, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_minlength, __pyx_t_9, __pyx_t_11, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 2581, __pyx_L1_error) __pyx_t_1 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_11); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2581, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_4 = __pyx_t_1; __Pyx_INCREF(__pyx_t_4); __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2581, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2581, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_11}; __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2581, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_v_counts = __pyx_t_2; __pyx_t_2 = 0;
+2582: starts = np.zeros(num_blocks + 1, dtype=np.int32)
__pyx_t_1 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2582, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_zeros); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2582, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = __Pyx_PyLong_From_long((__pyx_v_num_blocks + 1)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2582, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2582, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2582, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_1, __pyx_t_11}; __pyx_t_7 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2582, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_9, __pyx_t_7, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 2582, __pyx_L1_error) __pyx_t_2 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_7); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2582, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_v_starts = __pyx_t_2; __pyx_t_2 = 0;
+2583: starts[1:] = np.cumsum(counts)
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2583, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_cumsum); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2583, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_counts}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2583, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } if (__Pyx_PyObject_SetSlice(__pyx_v_starts, __pyx_t_2, 1, 0, NULL, NULL, &__pyx_mstate_global->__pyx_slice[1], 1, 0, 0) < (0)) __PYX_ERR(0, 2583, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
2584:
+2585: total_movable = int(counts.sum())
__pyx_t_9 = __pyx_v_counts; __Pyx_INCREF(__pyx_t_9); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_9, NULL}; __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_sum, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2585, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_t_9 = __Pyx_PyNumber_Int(__pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2585, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_total_movable = ((PyObject*)__pyx_t_9); __pyx_t_9 = 0;
+2586: attempts = np.maximum(
__pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2586, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_maximum); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2586, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+2587: (n_steps * counts.astype(np.int64) // max(total_movable, 1)), 0).astype(np.int32)
__pyx_t_11 = __Pyx_PyLong_From_int(__pyx_v_n_steps); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2587, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = __pyx_v_counts; __Pyx_INCREF(__pyx_t_12); __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2587, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2587, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_14}; __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2587, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_t_14 = PyNumber_Multiply(__pyx_t_11, __pyx_t_3); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2587, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_15 = 1; __Pyx_INCREF(__pyx_v_total_movable); __pyx_t_16 = __pyx_v_total_movable; __pyx_t_11 = __Pyx_PyLong_From_long(__pyx_t_15); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2587, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = PyObject_RichCompare(__pyx_t_11, __pyx_t_16, Py_GT); __Pyx_XGOTREF(__pyx_t_12); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2587, __pyx_L1_error) __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 2587, __pyx_L1_error) __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (__pyx_t_8) { __pyx_t_12 = __Pyx_PyLong_From_long(__pyx_t_15); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2587, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); if (__Pyx_PyInt_FromNumber(&__pyx_t_12, NULL, 0) < (0)) __PYX_ERR(0, 2587, __pyx_L1_error) __pyx_t_3 = __pyx_t_12; __pyx_t_12 = 0; } else { __Pyx_INCREF(__pyx_t_16); __pyx_t_3 = __pyx_t_16; } __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_12 = PyNumber_FloorDivide(__pyx_t_14, __pyx_t_3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2587, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_1))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_1, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_12, __pyx_mstate_global->__pyx_int_0}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2586, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_2 = __pyx_t_4; __Pyx_INCREF(__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2587, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2587, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_12}; __pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2587, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_v_attempts = __pyx_t_9; __pyx_t_9 = 0;
2588:
+2589: bix = np.arange(num_blocks, dtype=np.int32) // (nby * nbz)
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2589, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_arange); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2589, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_12 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2589, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2589, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2589, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_4, __pyx_t_12}; __pyx_t_1 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2589, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_7, __pyx_t_1, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 2589, __pyx_L1_error) __pyx_t_9 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_1); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2589, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_t_2 = __Pyx_PyLong_From_int((__pyx_v_nby * __pyx_v_nbz)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2589, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyNumber_FloorDivide(__pyx_t_9, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2589, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_bix = __pyx_t_1; __pyx_t_1 = 0;
+2590: biy = (np.arange(num_blocks, dtype=np.int32) // nbz) % nby
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2590, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_arange); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2590, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2590, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2590, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2590, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_2, __pyx_t_9}; __pyx_t_12 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2590, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_4, __pyx_t_12, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 2590, __pyx_L1_error) __pyx_t_1 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_12); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2590, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_nbz); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2590, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_12 = PyNumber_FloorDivide(__pyx_t_1, __pyx_t_7); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2590, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_nby); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2590, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = PyNumber_Remainder(__pyx_t_12, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2590, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_biy = __pyx_t_1; __pyx_t_1 = 0;
+2591: biz = np.arange(num_blocks, dtype=np.int32) % nbz
__pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2591, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_arange); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2591, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_12 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2591, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2591, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2591, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_7, __pyx_t_12}; __pyx_t_9 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2591, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_2, __pyx_t_9, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 2591, __pyx_L1_error) __pyx_t_1 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_9); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2591, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_nbz); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2591, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_9 = PyNumber_Remainder(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2591, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_biz = __pyx_t_9; __pyx_t_9 = 0;
+2592: blo_x = (bix * Lx).astype(np.int32)
__pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_Lx); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2592, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyNumber_Multiply(__pyx_v_bix, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2592, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_4 = __pyx_t_2; __Pyx_INCREF(__pyx_t_4); __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2592, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2592, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_12}; __pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2592, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_v_blo_x = __pyx_t_9; __pyx_t_9 = 0;
+2593: blo_y = (biy * Ly).astype(np.int32)
__pyx_t_12 = __Pyx_PyLong_From_int(__pyx_v_Ly); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2593, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_4 = PyNumber_Multiply(__pyx_v_biy, __pyx_t_12); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2593, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_2 = __pyx_t_4; __Pyx_INCREF(__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2593, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2593, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_1}; __pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2593, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_v_blo_y = __pyx_t_9; __pyx_t_9 = 0;
+2594: blo_z = (biz * Lz).astype(np.int32)
__pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_Lz); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2594, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyNumber_Multiply(__pyx_v_biz, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2594, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_4 = __pyx_t_2; __Pyx_INCREF(__pyx_t_4); __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2594, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2594, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_12}; __pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2594, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_v_blo_z = __pyx_t_9; __pyx_t_9 = 0;
2595:
+2596: seeds = (np.arange(num_blocks, dtype=np.uint64) + np.uint64(passed_seed) + np.uint64(0x9E3779B9)) \
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2596, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_arange); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2596, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_12 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2596, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2596, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_uint64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2596, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_2, __pyx_t_12}; __pyx_t_1 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2596, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_7, __pyx_t_1, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 2596, __pyx_L1_error) __pyx_t_9 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2596, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_t_1 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2596, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_uint64); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2596, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_passed_seed); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2596, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_12))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_12); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_12); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_12, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_7}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_12, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2596, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_12 = PyNumber_Add(__pyx_t_9, __pyx_t_4); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2596, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_9 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2596, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_uint64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2596, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_1))) { __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_1); assert(__pyx_t_9); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1); __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_1, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_mstate_global->__pyx_int_2654435769}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2596, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_1 = PyNumber_Add(__pyx_t_12, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2596, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+2597: * np.uint64(0x2545F4914F6CDD1D) + np.uint64(1)
__pyx_t_12 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2597, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_uint64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2597, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_12); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_12); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_mstate_global->__pyx_int_0x2545f4914f6cdd1d}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2597, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_7 = PyNumber_Multiply(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2597, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_1 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2597, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_uint64); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2597, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_mstate_global->__pyx_int_1}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2597, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_9 = PyNumber_Add(__pyx_t_7, __pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2597, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_seeds = __pyx_t_9; __pyx_t_9 = 0;
2598:
+2599: out_delta = np.zeros(num_blocks, dtype=np.int64)
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_1))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_1, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_4, __pyx_t_7}; __pyx_t_12 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_2, __pyx_t_12, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 2599, __pyx_L1_error) __pyx_t_9 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_12); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_v_out_delta = __pyx_t_9; __pyx_t_9 = 0;
+2600: out_accepted = np.zeros(num_blocks, dtype=np.int32)
__pyx_t_1 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2600, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2600, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_12 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2600, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2600, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2600, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_1, __pyx_t_12}; __pyx_t_7 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2600, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_4, __pyx_t_7, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 2600, __pyx_L1_error) __pyx_t_9 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_7); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2600, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_v_out_accepted = __pyx_t_9; __pyx_t_9 = 0;
2601:
+2602: cdef int[::1] chain_ids_mv = chain_ids
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_chain_ids, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 2602, __pyx_L1_error) __pyx_v_chain_ids_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+2603: cdef int[::1] starts_mv = starts
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_starts, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 2603, __pyx_L1_error) __pyx_v_starts_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+2604: cdef int[::1] attempts_mv = attempts
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_attempts, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 2604, __pyx_L1_error) __pyx_v_attempts_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+2605: cdef unsigned long long[::1] seeds_mv = seeds
__pyx_t_18 = __Pyx_PyObject_to_MemoryviewSlice_dc_unsigned_PY_LONG_LONG(__pyx_v_seeds, PyBUF_WRITABLE); if (unlikely(!__pyx_t_18.memview)) __PYX_ERR(0, 2605, __pyx_L1_error) __pyx_v_seeds_mv = __pyx_t_18; __pyx_t_18.memview = NULL; __pyx_t_18.data = NULL;
+2606: cdef int[::1] blo_x_mv = blo_x
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_blo_x, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 2606, __pyx_L1_error) __pyx_v_blo_x_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+2607: cdef int[::1] blo_y_mv = blo_y
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_blo_y, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 2607, __pyx_L1_error) __pyx_v_blo_y_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+2608: cdef int[::1] blo_z_mv = blo_z
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_blo_z, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 2608, __pyx_L1_error) __pyx_v_blo_z_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+2609: cdef long[::1] out_delta_mv = out_delta
__pyx_t_19 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_v_out_delta, PyBUF_WRITABLE); if (unlikely(!__pyx_t_19.memview)) __PYX_ERR(0, 2609, __pyx_L1_error) __pyx_v_out_delta_mv = __pyx_t_19; __pyx_t_19.memview = NULL; __pyx_t_19.data = NULL;
+2610: cdef int[::1] out_accepted_mv = out_accepted
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_out_accepted, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 2610, __pyx_L1_error) __pyx_v_out_accepted_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
2611:
2612: cdef int b
+2613: cdef int nthreads = num_threads if num_threads > 0 else 1
__pyx_t_8 = (__pyx_v_num_threads > 0);
if (__pyx_t_8) {
__pyx_t_6 = __pyx_v_num_threads;
} else {
__pyx_t_6 = 1;
}
__pyx_v_nthreads = __pyx_t_6;
2614:
+2615: for b in prange(num_blocks, nogil=True, num_threads=nthreads, schedule='dynamic'):
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
__pyx_t_6 = __pyx_v_num_blocks;
{
#if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
#undef likely
#undef unlikely
#define likely(x) (x)
#define unlikely(x) (x)
#endif
__pyx_t_20 = (__pyx_t_6 - 0 + 1 - 1/abs(1)) / 1;
if (__pyx_t_20 > 0)
{
#ifdef _OPENMP
#pragma omp parallel
#endif /* _OPENMP */
{
#ifdef _OPENMP
#pragma omp for firstprivate(__pyx_v_b) lastprivate(__pyx_v_b) schedule(dynamic) __pyx_t_6 = __pyx_v_num_blocks;
{
#if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
#undef likely
#undef unlikely
#define likely(x) (x)
#define unlikely(x) (x)
#endif
__pyx_t_20 = (__pyx_t_6 - 0 + 1 - 1/abs(1)) / 1;
if (__pyx_t_20 > 0)
{
#ifdef _OPENMP
#pragma omp parallel
#endif /* _OPENMP */
{
#ifdef _OPENMP
#pragma omp for firstprivate(__pyx_v_b) lastprivate(__pyx_v_b) schedule(dynamic) num_threads(__pyx_v_nthreads)
#endif /* _OPENMP */
for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_20; __pyx_t_10++){
{
__pyx_v_b = (int)(0 + 1 * __pyx_t_10);
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L6;
}
__pyx_L6:;
}
}
+2616: run_block_slither(b, chain_ids_mv, starts_mv, attempts_mv, seeds_mv,
__pyx_f_5pimms_15mega_crank_fast_run_block_slither(__pyx_v_b, __pyx_v_chain_ids_mv, __pyx_v_starts_mv, __pyx_v_attempts_mv, __pyx_v_seeds_mv, __pyx_v_chain_offset, __pyx_v_chain_length, __pyx_v_chain_homo, __pyx_v_blo_x_mv, __pyx_v_blo_y_mv, __pyx_v_blo_z_mv, __pyx_v_Lx, __pyx_v_Ly, __pyx_v_Lz, __pyx_v_nbx, __pyx_v_nby, __pyx_v_nbz, __pyx_v_shift_x, __pyx_v_shift_y, __pyx_v_shift_z, __pyx_cur_scope->__pyx_v_W, __pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_angle_lookup, __pyx_v_invtemp, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_hardwall, __pyx_v_out_delta_mv, __pyx_v_out_accepted_mv);
}
}
}
}
}
#if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
#undef likely
#undef unlikely
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
#endif
}
2617: chain_offset, chain_length, chain_homo,
2618: blo_x_mv, blo_y_mv, blo_z_mv,
2619: Lx, Ly, Lz, nbx, nby, nbz,
2620: shift_x, shift_y, shift_z, W,
2621: grid, type_grid, idx_to_bead,
2622: interaction_table, LR_interaction_table, SLR_interaction_table,
2623: angle_lookup, invtemp, XDIM, YDIM, ZDIM, hardwall,
2624: out_delta_mv, out_accepted_mv)
2625:
+2626: cdef long tot_d = 0
__pyx_v_tot_d = 0;
+2627: cdef int tot_a = 0
__pyx_v_tot_a = 0;
+2628: for b in range(num_blocks):
__pyx_t_20 = __pyx_v_num_blocks;
__pyx_t_10 = __pyx_t_20;
for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_10; __pyx_t_6+=1) {
__pyx_v_b = __pyx_t_6;
+2629: tot_d += out_delta_mv[b]
__pyx_t_21 = __pyx_v_b;
__pyx_v_tot_d = (__pyx_v_tot_d + (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_out_delta_mv.data) + __pyx_t_21)) ))));
+2630: tot_a += out_accepted_mv[b]
__pyx_t_21 = __pyx_v_b;
__pyx_v_tot_a = (__pyx_v_tot_a + (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_out_accepted_mv.data) + __pyx_t_21)) ))));
}
+2631: return (energy + tot_d, tot_a)
__Pyx_XDECREF(__pyx_r); __pyx_t_9 = __Pyx_PyLong_From_long((__pyx_v_energy + __pyx_v_tot_d)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2631, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_tot_a); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2631, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2631, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_GIVEREF(__pyx_t_9); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_9) != (0)) __PYX_ERR(0, 2631, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_2); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_2) != (0)) __PYX_ERR(0, 2631, __pyx_L1_error); __pyx_t_9 = 0; __pyx_t_2 = 0; __pyx_r = __pyx_t_7; __pyx_t_7 = 0; goto __pyx_L0;
2632:
2633:
+2634: cdef inline int _in_interior_2d(int x, int y,
static CYTHON_INLINE int __pyx_f_5pimms_15mega_crank_fast__in_interior_2d(int __pyx_v_x, int __pyx_v_y, int __pyx_v_blo_x_b, int __pyx_v_blo_y_b, int __pyx_v_Lx, int __pyx_v_Ly, int __pyx_v_nbx, int __pyx_v_nby, int __pyx_v_shift_x, int __pyx_v_shift_y, int __pyx_v_W, int __pyx_v_XDIM, int __pyx_v_YDIM) {
int __pyx_v_s;
int __pyx_v_w;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast._in_interior_2d", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
return __pyx_r;
}
2635: int blo_x_b, int blo_y_b,
2636: int Lx, int Ly, int nbx, int nby,
2637: int shift_x, int shift_y, int W,
2638: int XDIM, int YDIM) noexcept nogil:
2639: cdef int s, w
+2640: if nbx > 1:
__pyx_t_1 = (__pyx_v_nbx > 1);
if (__pyx_t_1) {
/* … */
}
+2641: s = (x - shift_x + XDIM) % XDIM
__pyx_t_2 = ((__pyx_v_x - __pyx_v_shift_x) + __pyx_v_XDIM);
if (unlikely(__pyx_v_XDIM == 0)) {
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__PYX_ERR(0, 2641, __pyx_L1_error)
}
__pyx_v_s = __Pyx_mod_int(__pyx_t_2, __pyx_v_XDIM, 0);
+2642: w = s - blo_x_b
__pyx_v_w = (__pyx_v_s - __pyx_v_blo_x_b);
+2643: if w < W or w >= Lx - W:
__pyx_t_3 = (__pyx_v_w < __pyx_v_W);
if (!__pyx_t_3) {
} else {
__pyx_t_1 = __pyx_t_3;
goto __pyx_L5_bool_binop_done;
}
__pyx_t_3 = (__pyx_v_w >= (__pyx_v_Lx - __pyx_v_W));
__pyx_t_1 = __pyx_t_3;
__pyx_L5_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+2644: return 0
__pyx_r = 0;
goto __pyx_L0;
+2645: if nby > 1:
__pyx_t_1 = (__pyx_v_nby > 1);
if (__pyx_t_1) {
/* … */
}
+2646: s = (y - shift_y + YDIM) % YDIM
__pyx_t_2 = ((__pyx_v_y - __pyx_v_shift_y) + __pyx_v_YDIM);
if (unlikely(__pyx_v_YDIM == 0)) {
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__PYX_ERR(0, 2646, __pyx_L1_error)
}
__pyx_v_s = __Pyx_mod_int(__pyx_t_2, __pyx_v_YDIM, 0);
+2647: w = s - blo_y_b
__pyx_v_w = (__pyx_v_s - __pyx_v_blo_y_b);
+2648: if w < W or w >= Ly - W:
__pyx_t_3 = (__pyx_v_w < __pyx_v_W);
if (!__pyx_t_3) {
} else {
__pyx_t_1 = __pyx_t_3;
goto __pyx_L9_bool_binop_done;
}
__pyx_t_3 = (__pyx_v_w >= (__pyx_v_Ly - __pyx_v_W));
__pyx_t_1 = __pyx_t_3;
__pyx_L9_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+2649: return 0
__pyx_r = 0;
goto __pyx_L0;
+2650: return 1
__pyx_r = 1; goto __pyx_L0;
2651:
2652:
+2653: cdef void run_block_slither_2D(int b,
static void __pyx_f_5pimms_15mega_crank_fast_run_block_slither_2D(int __pyx_v_b, __Pyx_memviewslice __pyx_v_chain_ids, __Pyx_memviewslice __pyx_v_starts, __Pyx_memviewslice __pyx_v_attempts, __Pyx_memviewslice __pyx_v_seeds, __Pyx_memviewslice __pyx_v_chain_offset, __Pyx_memviewslice __pyx_v_chain_length, __Pyx_memviewslice __pyx_v_chain_homo, __Pyx_memviewslice __pyx_v_blo_x, __Pyx_memviewslice __pyx_v_blo_y, int __pyx_v_Lx, int __pyx_v_Ly, int __pyx_v_nbx, int __pyx_v_nby, int __pyx_v_shift_x, int __pyx_v_shift_y, int __pyx_v_W, __Pyx_memviewslice __pyx_v_grid, __Pyx_memviewslice __pyx_v_type_grid, __Pyx_memviewslice __pyx_v_idx_to_bead, __Pyx_memviewslice __pyx_v_interaction_table, __Pyx_memviewslice __pyx_v_LR_interaction_table, __Pyx_memviewslice __pyx_v_SLR_interaction_table, __Pyx_memviewslice __pyx_v_angle_lookup, float __pyx_v_invtemp, int __pyx_v_XDIM, int __pyx_v_YDIM, int __pyx_v_hardwall, __Pyx_memviewslice __pyx_v_out_delta, __Pyx_memviewslice __pyx_v_out_accepted) {
int __pyx_v_lo;
int __pyx_v_hi;
int __pyx_v_n_block;
unsigned PY_LONG_LONG __pyx_v_rng;
long __pyx_v_dsum;
int __pyx_v_acc;
CYTHON_UNUSED int __pyx_v_step;
int __pyx_v_pick;
int __pyx_v_c;
int __pyx_v_off;
int __pyx_v_L;
int __pyx_v_homo;
int __pyx_v_chainID;
int __pyx_v_direction;
int __pyx_v_k;
int __pyx_v_ex;
int __pyx_v_ey;
int __pyx_v_nx;
int __pyx_v_ny;
int __pyx_v_vx;
int __pyx_v_vy;
int __pyx_v_ox;
int __pyx_v_oy;
int __pyx_v_tx;
int __pyx_v_ty;
int __pyx_v_cx;
int __pyx_v_cy;
long __pyx_v_de;
int __pyx_v_newp[2];
int __pyx_v_bx[512];
int __pyx_v_by[512];
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast.run_block_slither_2D", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
}
2654: int[::1] chain_ids, int[::1] starts, int[::1] attempts,
2655: unsigned long long[::1] seeds,
2656: int[::1] chain_offset, int[::1] chain_length, int[::1] chain_homo,
2657: int[::1] blo_x, int[::1] blo_y,
2658: int Lx, int Ly, int nbx, int nby,
2659: int shift_x, int shift_y, int W,
2660: NUMPY_INT_TYPE[:, :] grid, NUMPY_INT_TYPE[:, :] type_grid,
2661: NUMPY_INT_TYPE_long[:, :] idx_to_bead,
2662: NUMPY_INT_TYPE[:, :] interaction_table,
2663: NUMPY_INT_TYPE[:, :] LR_interaction_table,
2664: NUMPY_INT_TYPE[:, :] SLR_interaction_table,
2665: NUMPY_INT_TYPE[:, :, :, :, :] angle_lookup,
2666: float invtemp, int XDIM, int YDIM, int hardwall,
2667: long[::1] out_delta, int[::1] out_accepted) noexcept nogil:
2668:
+2669: cdef int lo = starts[b]
__pyx_t_1 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_starts.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_starts.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 2669, __pyx_L1_error)
}
__pyx_v_lo = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_starts.data) + __pyx_t_1)) )));
+2670: cdef int hi = starts[b + 1]
__pyx_t_1 = (__pyx_v_b + 1);
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_starts.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_starts.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 2670, __pyx_L1_error)
}
__pyx_v_hi = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_starts.data) + __pyx_t_1)) )));
+2671: cdef int n_block = hi - lo
__pyx_v_n_block = (__pyx_v_hi - __pyx_v_lo);
+2672: out_delta[b] = 0
__pyx_t_1 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_out_delta.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_out_delta.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 2672, __pyx_L1_error)
}
*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_out_delta.data) + __pyx_t_1)) )) = 0;
+2673: out_accepted[b] = 0
__pyx_t_1 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_out_accepted.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_out_accepted.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 2673, __pyx_L1_error)
}
*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_out_accepted.data) + __pyx_t_1)) )) = 0;
+2674: if n_block <= 0:
__pyx_t_3 = (__pyx_v_n_block <= 0);
if (__pyx_t_3) {
/* … */
}
+2675: return
goto __pyx_L0;
2676:
+2677: cdef unsigned long long rng = seeds[b]
__pyx_t_1 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_seeds.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_seeds.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 2677, __pyx_L1_error)
}
__pyx_v_rng = (*((unsigned PY_LONG_LONG *) ( /* dim=0 */ ((char *) (((unsigned PY_LONG_LONG *) __pyx_v_seeds.data) + __pyx_t_1)) )));
+2678: cdef long dsum = 0
__pyx_v_dsum = 0;
+2679: cdef int acc = 0
__pyx_v_acc = 0;
2680: cdef int step, pick, c, off, L, homo, chainID, direction, k
2681: cdef int ex, ey, nx, ny, vx, vy, ox, oy, tx, ty, cx, cy
2682: cdef long de
2683: cdef int newp[2]
2684: cdef int bx[512]
2685: cdef int by[512]
2686:
+2687: for step in range(attempts[b]):
__pyx_t_1 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_attempts.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_attempts.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 2687, __pyx_L1_error)
}
__pyx_t_2 = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_attempts.data) + __pyx_t_1)) )));
__pyx_t_4 = __pyx_t_2;
for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
__pyx_v_step = __pyx_t_5;
+2688: pick = lo + <int>(rng_uniform(&rng) * n_block)
__pyx_v_pick = (__pyx_v_lo + ((int)(__pyx_f_5pimms_15mega_crank_fast_rng_uniform((&__pyx_v_rng)) * __pyx_v_n_block)));
+2689: if pick >= hi:
__pyx_t_3 = (__pyx_v_pick >= __pyx_v_hi);
if (__pyx_t_3) {
/* … */
}
+2690: pick = hi - 1
__pyx_v_pick = (__pyx_v_hi - 1);
+2691: c = chain_ids[pick]
__pyx_t_1 = __pyx_v_pick;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_chain_ids.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_chain_ids.shape[0])) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2691, __pyx_L1_error)
}
__pyx_v_c = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_chain_ids.data) + __pyx_t_1)) )));
+2692: off = chain_offset[c]
__pyx_t_1 = __pyx_v_c;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_chain_offset.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_chain_offset.shape[0])) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2692, __pyx_L1_error)
}
__pyx_v_off = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_chain_offset.data) + __pyx_t_1)) )));
+2693: L = chain_length[c]
__pyx_t_1 = __pyx_v_c;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_chain_length.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_chain_length.shape[0])) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2693, __pyx_L1_error)
}
__pyx_v_L = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_chain_length.data) + __pyx_t_1)) )));
+2694: homo = chain_homo[c]
__pyx_t_1 = __pyx_v_c;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_chain_homo.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_chain_homo.shape[0])) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2694, __pyx_L1_error)
}
__pyx_v_homo = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_chain_homo.data) + __pyx_t_1)) )));
+2695: chainID = idx_to_bead[off, 4]
__pyx_t_1 = __pyx_v_off;
__pyx_t_7 = 4;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2695, __pyx_L1_error)
}
__pyx_v_chainID = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
2696:
+2697: if L == 1:
__pyx_t_3 = (__pyx_v_L == 1);
if (__pyx_t_3) {
/* … */
}
+2698: ox = idx_to_bead[off, 5]; oy = idx_to_bead[off, 6]
__pyx_t_7 = __pyx_v_off;
__pyx_t_1 = 5;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2698, __pyx_L1_error)
}
__pyx_v_ox = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_1 = __pyx_v_off;
__pyx_t_7 = 6;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2698, __pyx_L1_error)
}
__pyx_v_oy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
+2699: if single_bead_crank_cp_2D(ox, oy, grid, XDIM, YDIM, &rng, newp) == 1:
__pyx_t_3 = (__pyx_f_5pimms_15mega_crank_fast_single_bead_crank_cp_2D(__pyx_v_ox, __pyx_v_oy, __pyx_v_grid, __pyx_v_XDIM, __pyx_v_YDIM, (&__pyx_v_rng), __pyx_v_newp) == 1);
if (__pyx_t_3) {
/* … */
}
+2700: if _in_interior_2d(newp[0], newp[1], blo_x[b], blo_y[b],
__pyx_t_7 = __pyx_v_b;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_blo_x.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_blo_x.shape[0])) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2700, __pyx_L1_error)
}
__pyx_t_1 = __pyx_v_b;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_blo_y.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_blo_y.shape[0])) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2700, __pyx_L1_error)
}
/* … */
if (__pyx_t_3) {
/* … */
}
+2701: Lx, Ly, nbx, nby, shift_x, shift_y, W, XDIM, YDIM) == 0:
__pyx_t_3 = (__pyx_f_5pimms_15mega_crank_fast__in_interior_2d((__pyx_v_newp[0]), (__pyx_v_newp[1]), (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_blo_x.data) + __pyx_t_7)) ))), (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_blo_y.data) + __pyx_t_1)) ))), __pyx_v_Lx, __pyx_v_Ly, __pyx_v_nbx, __pyx_v_nby, __pyx_v_shift_x, __pyx_v_shift_y, __pyx_v_W, __pyx_v_XDIM, __pyx_v_YDIM) == 0);
+2702: continue
goto __pyx_L4_continue;
+2703: de = get_energy_change_2D_c(grid, type_grid, ox, oy, newp[0], newp[1],
__pyx_v_de = __pyx_f_5pimms_15mega_crank_fast_get_energy_change_2D_c(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_ox, __pyx_v_oy, (__pyx_v_newp[0]), (__pyx_v_newp[1]), (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_hardwall);
+2704: idx_to_bead[off, 1], interaction_table, LR_interaction_table,
__pyx_t_1 = __pyx_v_off;
__pyx_t_7 = 1;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2704, __pyx_L1_error)
}
2705: SLR_interaction_table, XDIM, YDIM, hardwall)
+2706: de = de + get_angle_energy_change_2D_c(off, idx_to_bead, newp, angle_lookup)
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_2D_c(__pyx_v_off, __pyx_v_idx_to_bead, __pyx_v_newp, __pyx_v_angle_lookup));
+2707: if accept_p(invtemp, de, &rng) == 1:
__pyx_t_3 = (__pyx_f_5pimms_15mega_crank_fast_accept_p(__pyx_v_invtemp, __pyx_v_de, (&__pyx_v_rng)) == 1);
if (__pyx_t_3) {
/* … */
}
+2708: _apply_bead_move_2D(grid, type_grid, idx_to_bead, off, ox, oy, newp[0], newp[1], chainID)
__pyx_f_5pimms_15mega_crank_fast__apply_bead_move_2D(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, __pyx_v_off, __pyx_v_ox, __pyx_v_oy, (__pyx_v_newp[0]), (__pyx_v_newp[1]), __pyx_v_chainID);
+2709: dsum = dsum + de
__pyx_v_dsum = (__pyx_v_dsum + __pyx_v_de);
+2710: acc = acc + 1
__pyx_v_acc = (__pyx_v_acc + 1);
+2711: continue
goto __pyx_L4_continue;
2712:
+2713: if homo == 0 and L > 512:
__pyx_t_8 = (__pyx_v_homo == 0);
if (__pyx_t_8) {
} else {
__pyx_t_3 = __pyx_t_8;
goto __pyx_L12_bool_binop_done;
}
__pyx_t_8 = (__pyx_v_L > 0x200);
__pyx_t_3 = __pyx_t_8;
__pyx_L12_bool_binop_done:;
if (__pyx_t_3) {
/* … */
}
+2714: continue
goto __pyx_L4_continue;
2715:
+2716: direction = rng_randint(&rng, 0, 1)
__pyx_v_direction = __pyx_f_5pimms_15mega_crank_fast_rng_randint((&__pyx_v_rng), 0, 1);
+2717: if direction == 0:
__pyx_t_3 = (__pyx_v_direction == 0);
if (__pyx_t_3) {
/* … */
goto __pyx_L14;
}
+2718: ex = idx_to_bead[off + L - 1, 5]; ey = idx_to_bead[off + L - 1, 6]
__pyx_t_7 = ((__pyx_v_off + __pyx_v_L) - 1);
__pyx_t_1 = 5;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2718, __pyx_L1_error)
}
__pyx_v_ex = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_1 = ((__pyx_v_off + __pyx_v_L) - 1);
__pyx_t_7 = 6;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2718, __pyx_L1_error)
}
__pyx_v_ey = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
2719: else:
+2720: ex = idx_to_bead[off, 5]; ey = idx_to_bead[off, 6]
/*else*/ {
__pyx_t_7 = __pyx_v_off;
__pyx_t_1 = 5;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2720, __pyx_L1_error)
}
__pyx_v_ex = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_1 = __pyx_v_off;
__pyx_t_7 = 6;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2720, __pyx_L1_error)
}
__pyx_v_ey = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
}
__pyx_L14:;
2721:
+2722: nx = pbc_correction(ex + rng_randint(&rng, 0, 2) - 1, XDIM)
__pyx_v_nx = __pyx_f_5pimms_15mega_crank_fast_pbc_correction(((__pyx_v_ex + __pyx_f_5pimms_15mega_crank_fast_rng_randint((&__pyx_v_rng), 0, 2)) - 1), __pyx_v_XDIM);
+2723: ny = pbc_correction(ey + rng_randint(&rng, 0, 2) - 1, YDIM)
__pyx_v_ny = __pyx_f_5pimms_15mega_crank_fast_pbc_correction(((__pyx_v_ey + __pyx_f_5pimms_15mega_crank_fast_rng_randint((&__pyx_v_rng), 0, 2)) - 1), __pyx_v_YDIM);
2724:
+2725: if grid[nx, ny] > 0:
__pyx_t_7 = __pyx_v_nx;
__pyx_t_1 = __pyx_v_ny;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_grid.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_grid.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_grid.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_grid.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2725, __pyx_L1_error)
}
__pyx_t_3 = ((*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_7 * __pyx_v_grid.strides[0]) ) + __pyx_t_1 * __pyx_v_grid.strides[1]) ))) > 0);
if (__pyx_t_3) {
/* … */
}
+2726: continue
goto __pyx_L4_continue;
+2727: if hardwall == 1:
__pyx_t_3 = (__pyx_v_hardwall == 1);
if (__pyx_t_3) {
/* … */
}
+2728: if straddle_pair(ex, ey, 0, nx, ny, 0) == 1:
__pyx_t_3 = (__pyx_f_5pimms_15mega_crank_fast_straddle_pair(__pyx_v_ex, __pyx_v_ey, 0, __pyx_v_nx, __pyx_v_ny, 0) == 1);
if (__pyx_t_3) {
/* … */
}
+2729: continue
goto __pyx_L4_continue;
2730:
+2731: if _in_interior_2d(nx, ny, blo_x[b], blo_y[b],
__pyx_t_1 = __pyx_v_b;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_blo_x.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_blo_x.shape[0])) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2731, __pyx_L1_error)
}
__pyx_t_7 = __pyx_v_b;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_blo_y.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_blo_y.shape[0])) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2731, __pyx_L1_error)
}
/* … */
if (__pyx_t_3) {
/* … */
}
+2732: Lx, Ly, nbx, nby, shift_x, shift_y, W, XDIM, YDIM) == 0:
__pyx_t_3 = (__pyx_f_5pimms_15mega_crank_fast__in_interior_2d(__pyx_v_nx, __pyx_v_ny, (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_blo_x.data) + __pyx_t_1)) ))), (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_blo_y.data) + __pyx_t_7)) ))), __pyx_v_Lx, __pyx_v_Ly, __pyx_v_nbx, __pyx_v_nby, __pyx_v_shift_x, __pyx_v_shift_y, __pyx_v_W, __pyx_v_XDIM, __pyx_v_YDIM) == 0);
+2733: continue
goto __pyx_L4_continue;
2734:
+2735: if homo == 1:
__pyx_t_3 = (__pyx_v_homo == 1);
if (__pyx_t_3) {
/* … */
}
+2736: if direction == 0:
__pyx_t_3 = (__pyx_v_direction == 0);
if (__pyx_t_3) {
/* … */
goto __pyx_L20;
}
+2737: vx = idx_to_bead[off, 5]; vy = idx_to_bead[off, 6]
__pyx_t_7 = __pyx_v_off;
__pyx_t_1 = 5;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2737, __pyx_L1_error)
}
__pyx_v_vx = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_1 = __pyx_v_off;
__pyx_t_7 = 6;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2737, __pyx_L1_error)
}
__pyx_v_vy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
2738: else:
+2739: vx = idx_to_bead[off + L - 1, 5]; vy = idx_to_bead[off + L - 1, 6]
/*else*/ {
__pyx_t_7 = ((__pyx_v_off + __pyx_v_L) - 1);
__pyx_t_1 = 5;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2739, __pyx_L1_error)
}
__pyx_v_vx = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_1 = ((__pyx_v_off + __pyx_v_L) - 1);
__pyx_t_7 = 6;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2739, __pyx_L1_error)
}
__pyx_v_vy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
}
__pyx_L20:;
2740:
+2741: de = get_energy_change_2D_c(grid, type_grid, vx, vy, nx, ny,
__pyx_v_de = __pyx_f_5pimms_15mega_crank_fast_get_energy_change_2D_c(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_vx, __pyx_v_vy, __pyx_v_nx, __pyx_v_ny, (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_hardwall);
+2742: idx_to_bead[off, 1], interaction_table, LR_interaction_table,
__pyx_t_7 = __pyx_v_off;
__pyx_t_1 = 1;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2742, __pyx_L1_error)
}
2743: SLR_interaction_table, XDIM, YDIM, hardwall)
+2744: de = de + (_chain_angle_mode_2D(idx_to_bead, off, L, 1 if direction == 0 else 2, nx, ny, angle_lookup)
__pyx_t_3 = (__pyx_v_direction == 0);
if (__pyx_t_3) {
__pyx_t_6 = 1;
} else {
__pyx_t_6 = 2;
}
/* … */
__pyx_v_de = (__pyx_v_de + (__pyx_f_5pimms_15mega_crank_fast__chain_angle_mode_2D(__pyx_v_idx_to_bead, __pyx_v_off, __pyx_v_L, __pyx_t_6, __pyx_v_nx, __pyx_v_ny, __pyx_v_angle_lookup) - __pyx_f_5pimms_15mega_crank_fast__chain_angle_mode_2D(__pyx_v_idx_to_bead, __pyx_v_off, __pyx_v_L, 0, 0, 0, __pyx_v_angle_lookup)));
2745: - _chain_angle_mode_2D(idx_to_bead, off, L, 0, 0, 0, angle_lookup))
2746:
+2747: if accept_p(invtemp, de, &rng) == 1:
__pyx_t_3 = (__pyx_f_5pimms_15mega_crank_fast_accept_p(__pyx_v_invtemp, __pyx_v_de, (&__pyx_v_rng)) == 1);
if (__pyx_t_3) {
/* … */
}
+2748: grid[vx, vy] = 0; type_grid[vx, vy] = 0
__pyx_t_1 = __pyx_v_vx;
__pyx_t_7 = __pyx_v_vy;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_grid.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_grid.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_grid.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_grid.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2748, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_1 * __pyx_v_grid.strides[0]) ) + __pyx_t_7 * __pyx_v_grid.strides[1]) )) = 0;
__pyx_t_7 = __pyx_v_vx;
__pyx_t_1 = __pyx_v_vy;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_type_grid.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_type_grid.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_type_grid.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_type_grid.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2748, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_7 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_1 * __pyx_v_type_grid.strides[1]) )) = 0;
+2749: grid[nx, ny] = chainID; type_grid[nx, ny] = idx_to_bead[off, 2]
__pyx_t_1 = __pyx_v_nx;
__pyx_t_7 = __pyx_v_ny;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_grid.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_grid.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_grid.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_grid.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2749, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_1 * __pyx_v_grid.strides[0]) ) + __pyx_t_7 * __pyx_v_grid.strides[1]) )) = __pyx_v_chainID;
__pyx_t_7 = __pyx_v_off;
__pyx_t_1 = 2;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2749, __pyx_L1_error)
}
__pyx_t_9 = __pyx_v_nx;
__pyx_t_10 = __pyx_v_ny;
__pyx_t_6 = -1;
if (__pyx_t_9 < 0) {
__pyx_t_9 += __pyx_v_type_grid.shape[0];
if (unlikely(__pyx_t_9 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_9 >= __pyx_v_type_grid.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_10 < 0) {
__pyx_t_10 += __pyx_v_type_grid.shape[1];
if (unlikely(__pyx_t_10 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_10 >= __pyx_v_type_grid.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2749, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_9 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_10 * __pyx_v_type_grid.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
+2750: if direction == 0:
__pyx_t_3 = (__pyx_v_direction == 0);
if (__pyx_t_3) {
/* … */
goto __pyx_L22;
}
+2751: for k in range(0, L - 1):
__pyx_t_11 = (__pyx_v_L - 1);
__pyx_t_12 = __pyx_t_11;
for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_12; __pyx_t_6+=1) {
__pyx_v_k = __pyx_t_6;
+2752: idx_to_bead[off + k, 5] = idx_to_bead[off + k + 1, 5]
__pyx_t_1 = ((__pyx_v_off + __pyx_v_k) + 1);
__pyx_t_7 = 5;
__pyx_t_13 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_13 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_13 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_13 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_13 = 1;
if (unlikely(__pyx_t_13 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_13);
__PYX_ERR(0, 2752, __pyx_L1_error)
}
__pyx_t_10 = (__pyx_v_off + __pyx_v_k);
__pyx_t_9 = 5;
__pyx_t_13 = -1;
if (__pyx_t_10 < 0) {
__pyx_t_10 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_10 < 0)) __pyx_t_13 = 0;
} else if (unlikely(__pyx_t_10 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_13 = 0;
if (__pyx_t_9 < 0) {
__pyx_t_9 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_9 < 0)) __pyx_t_13 = 1;
} else if (unlikely(__pyx_t_9 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_13 = 1;
if (unlikely(__pyx_t_13 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_13);
__PYX_ERR(0, 2752, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_10 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_9 * __pyx_v_idx_to_bead.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
+2753: idx_to_bead[off + k, 6] = idx_to_bead[off + k + 1, 6]
__pyx_t_7 = ((__pyx_v_off + __pyx_v_k) + 1);
__pyx_t_1 = 6;
__pyx_t_13 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_13 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_13 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_13 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_13 = 1;
if (unlikely(__pyx_t_13 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_13);
__PYX_ERR(0, 2753, __pyx_L1_error)
}
__pyx_t_9 = (__pyx_v_off + __pyx_v_k);
__pyx_t_10 = 6;
__pyx_t_13 = -1;
if (__pyx_t_9 < 0) {
__pyx_t_9 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_9 < 0)) __pyx_t_13 = 0;
} else if (unlikely(__pyx_t_9 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_13 = 0;
if (__pyx_t_10 < 0) {
__pyx_t_10 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_10 < 0)) __pyx_t_13 = 1;
} else if (unlikely(__pyx_t_10 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_13 = 1;
if (unlikely(__pyx_t_13 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_13);
__PYX_ERR(0, 2753, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_9 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_10 * __pyx_v_idx_to_bead.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
}
+2754: idx_to_bead[off + L - 1, 5] = nx; idx_to_bead[off + L - 1, 6] = ny
__pyx_t_1 = ((__pyx_v_off + __pyx_v_L) - 1);
__pyx_t_7 = 5;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2754, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )) = __pyx_v_nx;
__pyx_t_7 = ((__pyx_v_off + __pyx_v_L) - 1);
__pyx_t_1 = 6;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2754, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )) = __pyx_v_ny;
2755: else:
+2756: for k in range(L - 1, 0, -1):
/*else*/ {
for (__pyx_t_6 = (__pyx_v_L - 1); __pyx_t_6 > 0; __pyx_t_6-=1) {
__pyx_v_k = __pyx_t_6;
+2757: idx_to_bead[off + k, 5] = idx_to_bead[off + k - 1, 5]
__pyx_t_1 = ((__pyx_v_off + __pyx_v_k) - 1);
__pyx_t_7 = 5;
__pyx_t_13 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_13 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_13 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_13 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_13 = 1;
if (unlikely(__pyx_t_13 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_13);
__PYX_ERR(0, 2757, __pyx_L1_error)
}
__pyx_t_10 = (__pyx_v_off + __pyx_v_k);
__pyx_t_9 = 5;
__pyx_t_13 = -1;
if (__pyx_t_10 < 0) {
__pyx_t_10 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_10 < 0)) __pyx_t_13 = 0;
} else if (unlikely(__pyx_t_10 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_13 = 0;
if (__pyx_t_9 < 0) {
__pyx_t_9 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_9 < 0)) __pyx_t_13 = 1;
} else if (unlikely(__pyx_t_9 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_13 = 1;
if (unlikely(__pyx_t_13 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_13);
__PYX_ERR(0, 2757, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_10 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_9 * __pyx_v_idx_to_bead.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
+2758: idx_to_bead[off + k, 6] = idx_to_bead[off + k - 1, 6]
__pyx_t_7 = ((__pyx_v_off + __pyx_v_k) - 1);
__pyx_t_1 = 6;
__pyx_t_13 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_13 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_13 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_13 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_13 = 1;
if (unlikely(__pyx_t_13 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_13);
__PYX_ERR(0, 2758, __pyx_L1_error)
}
__pyx_t_9 = (__pyx_v_off + __pyx_v_k);
__pyx_t_10 = 6;
__pyx_t_13 = -1;
if (__pyx_t_9 < 0) {
__pyx_t_9 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_9 < 0)) __pyx_t_13 = 0;
} else if (unlikely(__pyx_t_9 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_13 = 0;
if (__pyx_t_10 < 0) {
__pyx_t_10 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_10 < 0)) __pyx_t_13 = 1;
} else if (unlikely(__pyx_t_10 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_13 = 1;
if (unlikely(__pyx_t_13 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_13);
__PYX_ERR(0, 2758, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_9 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_10 * __pyx_v_idx_to_bead.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
}
+2759: idx_to_bead[off, 5] = nx; idx_to_bead[off, 6] = ny
__pyx_t_1 = __pyx_v_off;
__pyx_t_7 = 5;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2759, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )) = __pyx_v_nx;
__pyx_t_7 = __pyx_v_off;
__pyx_t_1 = 6;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 2759, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )) = __pyx_v_ny;
}
__pyx_L22:;
+2760: dsum = dsum + de
__pyx_v_dsum = (__pyx_v_dsum + __pyx_v_de);
+2761: acc = acc + 1
__pyx_v_acc = (__pyx_v_acc + 1);
+2762: continue
goto __pyx_L4_continue;
2763:
+2764: for k in range(L):
__pyx_t_6 = __pyx_v_L;
__pyx_t_13 = __pyx_t_6;
for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
__pyx_v_k = __pyx_t_14;
+2765: bx[k] = idx_to_bead[off + k, 5]; by[k] = idx_to_bead[off + k, 6]
__pyx_t_1 = (__pyx_v_off + __pyx_v_k);
__pyx_t_7 = 5;
__pyx_t_15 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_15 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_15 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_15 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_15 = 1;
if (unlikely(__pyx_t_15 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_15);
__PYX_ERR(0, 2765, __pyx_L1_error)
}
(__pyx_v_bx[__pyx_v_k]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_1 = 6;
__pyx_t_15 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_15 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_15 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_15 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_15 = 1;
if (unlikely(__pyx_t_15 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_15);
__PYX_ERR(0, 2765, __pyx_L1_error)
}
(__pyx_v_by[__pyx_v_k]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
}
2766:
+2767: de = 0
__pyx_v_de = 0;
+2768: if direction == 0:
__pyx_t_3 = (__pyx_v_direction == 0);
if (__pyx_t_3) {
/* … */
goto __pyx_L29;
}
+2769: for k in range(L - 1, -1, -1):
for (__pyx_t_6 = (__pyx_v_L - 1); __pyx_t_6 > -1; __pyx_t_6-=1) {
__pyx_v_k = __pyx_t_6;
+2770: ox = idx_to_bead[off + k, 5]; oy = idx_to_bead[off + k, 6]
__pyx_t_1 = (__pyx_v_off + __pyx_v_k);
__pyx_t_7 = 5;
__pyx_t_13 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_13 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_13 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_13 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_13 = 1;
if (unlikely(__pyx_t_13 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_13);
__PYX_ERR(0, 2770, __pyx_L1_error)
}
__pyx_v_ox = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_1 = 6;
__pyx_t_13 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_13 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_13 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_13 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_13 = 1;
if (unlikely(__pyx_t_13 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_13);
__PYX_ERR(0, 2770, __pyx_L1_error)
}
__pyx_v_oy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
+2771: if k == L - 1:
__pyx_t_3 = (__pyx_v_k == (__pyx_v_L - 1));
if (__pyx_t_3) {
/* … */
goto __pyx_L32;
}
+2772: tx = nx; ty = ny
__pyx_v_tx = __pyx_v_nx;
__pyx_v_ty = __pyx_v_ny;
2773: else:
+2774: tx = bx[k + 1]; ty = by[k + 1]
/*else*/ {
__pyx_v_tx = (__pyx_v_bx[(__pyx_v_k + 1)]);
__pyx_v_ty = (__pyx_v_by[(__pyx_v_k + 1)]);
}
__pyx_L32:;
+2775: de = de + get_energy_change_2D_c(grid, type_grid, ox, oy, tx, ty,
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_energy_change_2D_c(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_ox, __pyx_v_oy, __pyx_v_tx, __pyx_v_ty, (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_hardwall));
+2776: idx_to_bead[off + k, 1], interaction_table,
__pyx_t_1 = (__pyx_v_off + __pyx_v_k);
__pyx_t_7 = 1;
__pyx_t_13 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_13 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_13 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_13 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_13 = 1;
if (unlikely(__pyx_t_13 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_13);
__PYX_ERR(0, 2776, __pyx_L1_error)
}
2777: LR_interaction_table, SLR_interaction_table,
2778: XDIM, YDIM, hardwall)
+2779: newp[0] = tx; newp[1] = ty
(__pyx_v_newp[0]) = __pyx_v_tx;
(__pyx_v_newp[1]) = __pyx_v_ty;
+2780: de = de + get_angle_energy_change_2D_c(off + k, idx_to_bead, newp, angle_lookup)
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_2D_c((__pyx_v_off + __pyx_v_k), __pyx_v_idx_to_bead, __pyx_v_newp, __pyx_v_angle_lookup));
+2781: _apply_bead_move_2D(grid, type_grid, idx_to_bead, off + k, ox, oy, tx, ty, chainID)
__pyx_f_5pimms_15mega_crank_fast__apply_bead_move_2D(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, (__pyx_v_off + __pyx_v_k), __pyx_v_ox, __pyx_v_oy, __pyx_v_tx, __pyx_v_ty, __pyx_v_chainID);
}
2782: else:
+2783: for k in range(0, L):
/*else*/ {
__pyx_t_6 = __pyx_v_L;
__pyx_t_13 = __pyx_t_6;
for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
__pyx_v_k = __pyx_t_14;
+2784: ox = idx_to_bead[off + k, 5]; oy = idx_to_bead[off + k, 6]
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_1 = 5;
__pyx_t_15 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_15 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_15 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_15 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_15 = 1;
if (unlikely(__pyx_t_15 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_15);
__PYX_ERR(0, 2784, __pyx_L1_error)
}
__pyx_v_ox = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_1 = (__pyx_v_off + __pyx_v_k);
__pyx_t_7 = 6;
__pyx_t_15 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_15 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_15 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_15 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_15 = 1;
if (unlikely(__pyx_t_15 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_15);
__PYX_ERR(0, 2784, __pyx_L1_error)
}
__pyx_v_oy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
+2785: if k == 0:
__pyx_t_3 = (__pyx_v_k == 0);
if (__pyx_t_3) {
/* … */
goto __pyx_L35;
}
+2786: tx = nx; ty = ny
__pyx_v_tx = __pyx_v_nx;
__pyx_v_ty = __pyx_v_ny;
2787: else:
+2788: tx = bx[k - 1]; ty = by[k - 1]
/*else*/ {
__pyx_v_tx = (__pyx_v_bx[(__pyx_v_k - 1)]);
__pyx_v_ty = (__pyx_v_by[(__pyx_v_k - 1)]);
}
__pyx_L35:;
+2789: de = de + get_energy_change_2D_c(grid, type_grid, ox, oy, tx, ty,
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_energy_change_2D_c(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_ox, __pyx_v_oy, __pyx_v_tx, __pyx_v_ty, (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_hardwall));
+2790: idx_to_bead[off + k, 1], interaction_table,
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_1 = 1;
__pyx_t_15 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_15 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_15 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_15 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_15 = 1;
if (unlikely(__pyx_t_15 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_15);
__PYX_ERR(0, 2790, __pyx_L1_error)
}
2791: LR_interaction_table, SLR_interaction_table,
2792: XDIM, YDIM, hardwall)
+2793: newp[0] = tx; newp[1] = ty
(__pyx_v_newp[0]) = __pyx_v_tx;
(__pyx_v_newp[1]) = __pyx_v_ty;
+2794: de = de + get_angle_energy_change_2D_c(off + k, idx_to_bead, newp, angle_lookup)
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_2D_c((__pyx_v_off + __pyx_v_k), __pyx_v_idx_to_bead, __pyx_v_newp, __pyx_v_angle_lookup));
+2795: _apply_bead_move_2D(grid, type_grid, idx_to_bead, off + k, ox, oy, tx, ty, chainID)
__pyx_f_5pimms_15mega_crank_fast__apply_bead_move_2D(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, (__pyx_v_off + __pyx_v_k), __pyx_v_ox, __pyx_v_oy, __pyx_v_tx, __pyx_v_ty, __pyx_v_chainID);
}
}
__pyx_L29:;
2796:
+2797: if accept_p(invtemp, de, &rng) == 1:
__pyx_t_3 = (__pyx_f_5pimms_15mega_crank_fast_accept_p(__pyx_v_invtemp, __pyx_v_de, (&__pyx_v_rng)) == 1);
if (__pyx_t_3) {
/* … */
goto __pyx_L36;
}
+2798: dsum = dsum + de
__pyx_v_dsum = (__pyx_v_dsum + __pyx_v_de);
+2799: acc = acc + 1
__pyx_v_acc = (__pyx_v_acc + 1);
2800: else:
+2801: for k in range(L):
/*else*/ {
__pyx_t_6 = __pyx_v_L;
__pyx_t_13 = __pyx_t_6;
for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
__pyx_v_k = __pyx_t_14;
+2802: cx = idx_to_bead[off + k, 5]; cy = idx_to_bead[off + k, 6]
__pyx_t_1 = (__pyx_v_off + __pyx_v_k);
__pyx_t_7 = 5;
__pyx_t_15 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_15 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_15 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_15 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_15 = 1;
if (unlikely(__pyx_t_15 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_15);
__PYX_ERR(0, 2802, __pyx_L1_error)
}
__pyx_v_cx = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_1 = 6;
__pyx_t_15 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_15 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_15 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_15 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_15 = 1;
if (unlikely(__pyx_t_15 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_15);
__PYX_ERR(0, 2802, __pyx_L1_error)
}
__pyx_v_cy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
+2803: grid[cx, cy] = 0; type_grid[cx, cy] = 0
__pyx_t_1 = __pyx_v_cx;
__pyx_t_7 = __pyx_v_cy;
__pyx_t_15 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_grid.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_15 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_grid.shape[0])) __pyx_t_15 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_grid.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_15 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_grid.shape[1])) __pyx_t_15 = 1;
if (unlikely(__pyx_t_15 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_15);
__PYX_ERR(0, 2803, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_1 * __pyx_v_grid.strides[0]) ) + __pyx_t_7 * __pyx_v_grid.strides[1]) )) = 0;
__pyx_t_7 = __pyx_v_cx;
__pyx_t_1 = __pyx_v_cy;
__pyx_t_15 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_type_grid.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_15 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_type_grid.shape[0])) __pyx_t_15 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_type_grid.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_15 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_type_grid.shape[1])) __pyx_t_15 = 1;
if (unlikely(__pyx_t_15 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_15);
__PYX_ERR(0, 2803, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_7 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_1 * __pyx_v_type_grid.strides[1]) )) = 0;
}
+2804: for k in range(L):
__pyx_t_6 = __pyx_v_L;
__pyx_t_13 = __pyx_t_6;
for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
__pyx_v_k = __pyx_t_14;
+2805: grid[bx[k], by[k]] = chainID
__pyx_t_1 = (__pyx_v_bx[__pyx_v_k]);
__pyx_t_7 = (__pyx_v_by[__pyx_v_k]);
__pyx_t_15 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_grid.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_15 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_grid.shape[0])) __pyx_t_15 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_grid.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_15 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_grid.shape[1])) __pyx_t_15 = 1;
if (unlikely(__pyx_t_15 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_15);
__PYX_ERR(0, 2805, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_1 * __pyx_v_grid.strides[0]) ) + __pyx_t_7 * __pyx_v_grid.strides[1]) )) = __pyx_v_chainID;
+2806: type_grid[bx[k], by[k]] = idx_to_bead[off + k, 2]
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_1 = 2;
__pyx_t_15 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_15 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_15 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_15 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_15 = 1;
if (unlikely(__pyx_t_15 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_15);
__PYX_ERR(0, 2806, __pyx_L1_error)
}
__pyx_t_10 = (__pyx_v_bx[__pyx_v_k]);
__pyx_t_9 = (__pyx_v_by[__pyx_v_k]);
__pyx_t_15 = -1;
if (__pyx_t_10 < 0) {
__pyx_t_10 += __pyx_v_type_grid.shape[0];
if (unlikely(__pyx_t_10 < 0)) __pyx_t_15 = 0;
} else if (unlikely(__pyx_t_10 >= __pyx_v_type_grid.shape[0])) __pyx_t_15 = 0;
if (__pyx_t_9 < 0) {
__pyx_t_9 += __pyx_v_type_grid.shape[1];
if (unlikely(__pyx_t_9 < 0)) __pyx_t_15 = 1;
} else if (unlikely(__pyx_t_9 >= __pyx_v_type_grid.shape[1])) __pyx_t_15 = 1;
if (unlikely(__pyx_t_15 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_15);
__PYX_ERR(0, 2806, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_10 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_9 * __pyx_v_type_grid.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
+2807: idx_to_bead[off + k, 5] = bx[k]; idx_to_bead[off + k, 6] = by[k]
__pyx_t_1 = (__pyx_v_off + __pyx_v_k);
__pyx_t_7 = 5;
__pyx_t_15 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_15 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_15 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_15 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_15 = 1;
if (unlikely(__pyx_t_15 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_15);
__PYX_ERR(0, 2807, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )) = (__pyx_v_bx[__pyx_v_k]);
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_1 = 6;
__pyx_t_15 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_15 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_15 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_15 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_15 = 1;
if (unlikely(__pyx_t_15 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_15);
__PYX_ERR(0, 2807, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )) = (__pyx_v_by[__pyx_v_k]);
}
}
__pyx_L36:;
__pyx_L4_continue:;
}
2808:
+2809: out_delta[b] = dsum
__pyx_t_1 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_out_delta.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_out_delta.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 2809, __pyx_L1_error)
}
*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_out_delta.data) + __pyx_t_1)) )) = __pyx_v_dsum;
+2810: out_accepted[b] = acc
__pyx_t_1 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_out_accepted.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_out_accepted.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 2810, __pyx_L1_error)
}
*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_out_accepted.data) + __pyx_t_1)) )) = __pyx_v_acc;
2811:
2812:
+2813: @cython.wraparound(False)
/* Python wrapper */ static PyObject *__pyx_pw_5pimms_15mega_crank_fast_21mega_slither_parallel_2D(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_5pimms_15mega_crank_fast_20mega_slither_parallel_2D, "\n Parallel 2D slither megamove (the 2D analogue of mega_slither_parallel).\n Returns (energy, accepted).\n "); static PyMethodDef __pyx_mdef_5pimms_15mega_crank_fast_21mega_slither_parallel_2D = {"mega_slither_parallel_2D", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5pimms_15mega_crank_fast_21mega_slither_parallel_2D, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_5pimms_15mega_crank_fast_20mega_slither_parallel_2D}; static PyObject *__pyx_pw_5pimms_15mega_crank_fast_21mega_slither_parallel_2D(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { __Pyx_memviewslice __pyx_v_grid = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_type_grid = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_idx_to_bead = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_chain_offset = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_chain_length = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_chain_homo = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_chain_selector = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_LR_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_SLR_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_angle_lookup = { 0, 0, { 0 }, { 0 }, { 0 } }; long __pyx_v_energy; float __pyx_v_invtemp; int __pyx_v_passed_seed; int __pyx_v_hardwall; CYTHON_UNUSED int __pyx_v_max_chain_len; int __pyx_v_num_threads; __Pyx_memviewslice __pyx_v_frozen_mask = { 0, 0, { 0 }, { 0 }, { 0 } }; #if !CYTHON_METH_FASTCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("mega_slither_parallel_2D (wrapper)", 0); #if !CYTHON_METH_FASTCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_grid,&__pyx_mstate_global->__pyx_n_u_type_grid,&__pyx_mstate_global->__pyx_n_u_idx_to_bead,&__pyx_mstate_global->__pyx_n_u_chain_offset,&__pyx_mstate_global->__pyx_n_u_chain_length,&__pyx_mstate_global->__pyx_n_u_chain_homo,&__pyx_mstate_global->__pyx_n_u_chain_selector,&__pyx_mstate_global->__pyx_n_u_interaction_table,&__pyx_mstate_global->__pyx_n_u_LR_interaction_table,&__pyx_mstate_global->__pyx_n_u_SLR_interaction_table,&__pyx_mstate_global->__pyx_n_u_angle_lookup,&__pyx_mstate_global->__pyx_n_u_energy,&__pyx_mstate_global->__pyx_n_u_invtemp,&__pyx_mstate_global->__pyx_n_u_passed_seed,&__pyx_mstate_global->__pyx_n_u_hardwall,&__pyx_mstate_global->__pyx_n_u_max_chain_len,&__pyx_mstate_global->__pyx_n_u_num_threads,&__pyx_mstate_global->__pyx_n_u_frozen_mask,0}; PyObject* values[18] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 2813, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 18: values[17] = __Pyx_ArgRef_FASTCALL(__pyx_args, 17); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[17])) __PYX_ERR(0, 2813, __pyx_L3_error) CYTHON_FALLTHROUGH; case 17: values[16] = __Pyx_ArgRef_FASTCALL(__pyx_args, 16); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[16])) __PYX_ERR(0, 2813, __pyx_L3_error) CYTHON_FALLTHROUGH; case 16: values[15] = __Pyx_ArgRef_FASTCALL(__pyx_args, 15); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[15])) __PYX_ERR(0, 2813, __pyx_L3_error) CYTHON_FALLTHROUGH; case 15: values[14] = __Pyx_ArgRef_FASTCALL(__pyx_args, 14); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[14])) __PYX_ERR(0, 2813, __pyx_L3_error) CYTHON_FALLTHROUGH; case 14: values[13] = __Pyx_ArgRef_FASTCALL(__pyx_args, 13); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[13])) __PYX_ERR(0, 2813, __pyx_L3_error) CYTHON_FALLTHROUGH; case 13: values[12] = __Pyx_ArgRef_FASTCALL(__pyx_args, 12); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[12])) __PYX_ERR(0, 2813, __pyx_L3_error) CYTHON_FALLTHROUGH; case 12: values[11] = __Pyx_ArgRef_FASTCALL(__pyx_args, 11); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[11])) __PYX_ERR(0, 2813, __pyx_L3_error) CYTHON_FALLTHROUGH; case 11: values[10] = __Pyx_ArgRef_FASTCALL(__pyx_args, 10); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[10])) __PYX_ERR(0, 2813, __pyx_L3_error) CYTHON_FALLTHROUGH; case 10: values[9] = __Pyx_ArgRef_FASTCALL(__pyx_args, 9); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[9])) __PYX_ERR(0, 2813, __pyx_L3_error) CYTHON_FALLTHROUGH; case 9: values[8] = __Pyx_ArgRef_FASTCALL(__pyx_args, 8); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[8])) __PYX_ERR(0, 2813, __pyx_L3_error) CYTHON_FALLTHROUGH; case 8: values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 2813, __pyx_L3_error) CYTHON_FALLTHROUGH; case 7: values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 2813, __pyx_L3_error) CYTHON_FALLTHROUGH; case 6: values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 2813, __pyx_L3_error) CYTHON_FALLTHROUGH; case 5: values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 2813, __pyx_L3_error) CYTHON_FALLTHROUGH; case 4: values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 2813, __pyx_L3_error) CYTHON_FALLTHROUGH; case 3: values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 2813, __pyx_L3_error) CYTHON_FALLTHROUGH; case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 2813, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 2813, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "mega_slither_parallel_2D", 0) < (0)) __PYX_ERR(0, 2813, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 18; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("mega_slither_parallel_2D", 1, 18, 18, i); __PYX_ERR(0, 2813, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 18)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 2813, __pyx_L3_error) values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 2813, __pyx_L3_error) values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 2813, __pyx_L3_error) values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 2813, __pyx_L3_error) values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 2813, __pyx_L3_error) values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 2813, __pyx_L3_error) values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 2813, __pyx_L3_error) values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 2813, __pyx_L3_error) values[8] = __Pyx_ArgRef_FASTCALL(__pyx_args, 8); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[8])) __PYX_ERR(0, 2813, __pyx_L3_error) values[9] = __Pyx_ArgRef_FASTCALL(__pyx_args, 9); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[9])) __PYX_ERR(0, 2813, __pyx_L3_error) values[10] = __Pyx_ArgRef_FASTCALL(__pyx_args, 10); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[10])) __PYX_ERR(0, 2813, __pyx_L3_error) values[11] = __Pyx_ArgRef_FASTCALL(__pyx_args, 11); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[11])) __PYX_ERR(0, 2813, __pyx_L3_error) values[12] = __Pyx_ArgRef_FASTCALL(__pyx_args, 12); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[12])) __PYX_ERR(0, 2813, __pyx_L3_error) values[13] = __Pyx_ArgRef_FASTCALL(__pyx_args, 13); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[13])) __PYX_ERR(0, 2813, __pyx_L3_error) values[14] = __Pyx_ArgRef_FASTCALL(__pyx_args, 14); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[14])) __PYX_ERR(0, 2813, __pyx_L3_error) values[15] = __Pyx_ArgRef_FASTCALL(__pyx_args, 15); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[15])) __PYX_ERR(0, 2813, __pyx_L3_error) values[16] = __Pyx_ArgRef_FASTCALL(__pyx_args, 16); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[16])) __PYX_ERR(0, 2813, __pyx_L3_error) values[17] = __Pyx_ArgRef_FASTCALL(__pyx_args, 17); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[17])) __PYX_ERR(0, 2813, __pyx_L3_error) } __pyx_v_grid = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_grid.memview)) __PYX_ERR(0, 2815, __pyx_L3_error) __pyx_v_type_grid = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_type_grid.memview)) __PYX_ERR(0, 2816, __pyx_L3_error) __pyx_v_idx_to_bead = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_idx_to_bead.memview)) __PYX_ERR(0, 2817, __pyx_L3_error) __pyx_v_chain_offset = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_offset.memview)) __PYX_ERR(0, 2818, __pyx_L3_error) __pyx_v_chain_length = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_length.memview)) __PYX_ERR(0, 2819, __pyx_L3_error) __pyx_v_chain_homo = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_homo.memview)) __PYX_ERR(0, 2820, __pyx_L3_error) __pyx_v_chain_selector = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_selector.memview)) __PYX_ERR(0, 2821, __pyx_L3_error) __pyx_v_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[7], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interaction_table.memview)) __PYX_ERR(0, 2822, __pyx_L3_error) __pyx_v_LR_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_LR_interaction_table.memview)) __PYX_ERR(0, 2823, __pyx_L3_error) __pyx_v_SLR_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_SLR_interaction_table.memview)) __PYX_ERR(0, 2824, __pyx_L3_error) __pyx_v_angle_lookup = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsdsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_angle_lookup.memview)) __PYX_ERR(0, 2825, __pyx_L3_error) __pyx_v_energy = __Pyx_PyLong_As_long(values[11]); if (unlikely((__pyx_v_energy == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 2826, __pyx_L3_error) __pyx_v_invtemp = __Pyx_PyFloat_AsFloat(values[12]); if (unlikely((__pyx_v_invtemp == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 2827, __pyx_L3_error) __pyx_v_passed_seed = __Pyx_PyLong_As_int(values[13]); if (unlikely((__pyx_v_passed_seed == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2828, __pyx_L3_error) __pyx_v_hardwall = __Pyx_PyLong_As_int(values[14]); if (unlikely((__pyx_v_hardwall == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2829, __pyx_L3_error) __pyx_v_max_chain_len = __Pyx_PyLong_As_int(values[15]); if (unlikely((__pyx_v_max_chain_len == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2830, __pyx_L3_error) __pyx_v_num_threads = __Pyx_PyLong_As_int(values[16]); if (unlikely((__pyx_v_num_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2831, __pyx_L3_error) __pyx_v_frozen_mask = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[17], PyBUF_WRITABLE); if (unlikely(!__pyx_v_frozen_mask.memview)) __PYX_ERR(0, 2832, __pyx_L3_error) } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("mega_slither_parallel_2D", 1, 18, 18, __pyx_nargs); __PYX_ERR(0, 2813, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __PYX_XCLEAR_MEMVIEW(&__pyx_v_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_type_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_idx_to_bead, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_offset, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_length, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_homo, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_selector, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_LR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_SLR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_angle_lookup, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_frozen_mask, 1); __Pyx_AddTraceback("pimms.mega_crank_fast.mega_slither_parallel_2D", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5pimms_15mega_crank_fast_20mega_slither_parallel_2D(__pyx_self, __pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, __pyx_v_chain_offset, __pyx_v_chain_length, __pyx_v_chain_homo, __pyx_v_chain_selector, __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_angle_lookup, __pyx_v_energy, __pyx_v_invtemp, __pyx_v_passed_seed, __pyx_v_hardwall, __pyx_v_max_chain_len, __pyx_v_num_threads, __pyx_v_frozen_mask); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __PYX_XCLEAR_MEMVIEW(&__pyx_v_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_type_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_idx_to_bead, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_offset, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_length, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_homo, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_selector, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_LR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_SLR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_angle_lookup, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_frozen_mask, 1); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ static PyObject *__pyx_pf_5pimms_15mega_crank_fast_20mega_slither_parallel_2D(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_grid, __Pyx_memviewslice __pyx_v_type_grid, __Pyx_memviewslice __pyx_v_idx_to_bead, __Pyx_memviewslice __pyx_v_chain_offset, __Pyx_memviewslice __pyx_v_chain_length, __Pyx_memviewslice __pyx_v_chain_homo, __Pyx_memviewslice __pyx_v_chain_selector, __Pyx_memviewslice __pyx_v_interaction_table, __Pyx_memviewslice __pyx_v_LR_interaction_table, __Pyx_memviewslice __pyx_v_SLR_interaction_table, __Pyx_memviewslice __pyx_v_angle_lookup, long __pyx_v_energy, float __pyx_v_invtemp, int __pyx_v_passed_seed, int __pyx_v_hardwall, CYTHON_UNUSED int __pyx_v_max_chain_len, int __pyx_v_num_threads, __Pyx_memviewslice __pyx_v_frozen_mask) { struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_3_mega_slither_parallel_2D *__pyx_cur_scope; int __pyx_v_XDIM; int __pyx_v_YDIM; int __pyx_v_num_chains; int __pyx_v_n_steps; PyObject *__pyx_v_idx_np = NULL; int __pyx_v_R_int; int __pyx_v_cap; int __pyx_v_nbx; int __pyx_v_nby; int __pyx_v_Lx; int __pyx_v_Ly; int __pyx_v_num_blocks; PyObject *__pyx_v_rstate = NULL; int __pyx_v_shift_x; int __pyx_v_shift_y; PyObject *__pyx_v_gx = NULL; PyObject *__pyx_v_gy = NULL; PyObject *__pyx_v_dim_block = 0; PyObject *__pyx_v_bxj = NULL; PyObject *__pyx_v_byj = NULL; PyObject *__pyx_v_block_of_bead = NULL; PyObject *__pyx_v_chain_block = NULL; PyObject *__pyx_v_movable = NULL; PyObject *__pyx_v_mblocks = NULL; PyObject *__pyx_v_order = NULL; PyObject *__pyx_v_chain_ids = NULL; PyObject *__pyx_v_sorted_blocks = NULL; PyObject *__pyx_v_counts = NULL; PyObject *__pyx_v_starts = NULL; PyObject *__pyx_v_total_movable = NULL; PyObject *__pyx_v_attempts = NULL; PyObject *__pyx_v_bix = NULL; PyObject *__pyx_v_biy = NULL; PyObject *__pyx_v_blo_x = NULL; PyObject *__pyx_v_blo_y = NULL; PyObject *__pyx_v_seeds = NULL; PyObject *__pyx_v_out_delta = NULL; PyObject *__pyx_v_out_accepted = NULL; __Pyx_memviewslice __pyx_v_chain_ids_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_starts_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_attempts_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_seeds_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_blo_x_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_blo_y_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_out_delta_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_out_accepted_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; int __pyx_v_b; CYTHON_UNUSED int __pyx_v_nthreads; long __pyx_v_tot_d; int __pyx_v_tot_a; PyObject *__pyx_r = NULL; __pyx_cur_scope = (struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_3_mega_slither_parallel_2D *)__pyx_tp_new_5pimms_15mega_crank_fast___pyx_scope_struct_3_mega_slither_parallel_2D(__pyx_mstate_global->__pyx_ptype_5pimms_15mega_crank_fast___pyx_scope_struct_3_mega_slither_parallel_2D, __pyx_mstate_global->__pyx_empty_tuple, NULL); if (unlikely(!__pyx_cur_scope)) { __pyx_cur_scope = ((struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_3_mega_slither_parallel_2D *)Py_None); __Pyx_INCREF(Py_None); __PYX_ERR(0, 2813, __pyx_L1_error) } else { __Pyx_GOTREF((PyObject *)__pyx_cur_scope); } /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_11); __Pyx_XDECREF(__pyx_t_12); __Pyx_XDECREF(__pyx_t_13); __Pyx_XDECREF(__pyx_t_14); __Pyx_XDECREF(__pyx_t_16); __PYX_XCLEAR_MEMVIEW(&__pyx_t_17, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_t_18, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_t_19, 1); __Pyx_AddTraceback("pimms.mega_crank_fast.mega_slither_parallel_2D", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_idx_np); __Pyx_XDECREF(__pyx_v_rstate); __Pyx_XDECREF(__pyx_v_gx); __Pyx_XDECREF(__pyx_v_gy); __Pyx_XDECREF(__pyx_v_dim_block); __Pyx_XDECREF(__pyx_v_bxj); __Pyx_XDECREF(__pyx_v_byj); __Pyx_XDECREF(__pyx_v_block_of_bead); __Pyx_XDECREF(__pyx_v_chain_block); __Pyx_XDECREF(__pyx_v_movable); __Pyx_XDECREF(__pyx_v_mblocks); __Pyx_XDECREF(__pyx_v_order); __Pyx_XDECREF(__pyx_v_chain_ids); __Pyx_XDECREF(__pyx_v_sorted_blocks); __Pyx_XDECREF(__pyx_v_counts); __Pyx_XDECREF(__pyx_v_starts); __Pyx_XDECREF(__pyx_v_total_movable); __Pyx_XDECREF(__pyx_v_attempts); __Pyx_XDECREF(__pyx_v_bix); __Pyx_XDECREF(__pyx_v_biy); __Pyx_XDECREF(__pyx_v_blo_x); __Pyx_XDECREF(__pyx_v_blo_y); __Pyx_XDECREF(__pyx_v_seeds); __Pyx_XDECREF(__pyx_v_out_delta); __Pyx_XDECREF(__pyx_v_out_accepted); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_ids_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_starts_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_attempts_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_seeds_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_blo_x_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_blo_y_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_out_delta_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_out_accepted_mv, 1); __Pyx_DECREF((PyObject *)__pyx_cur_scope); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_5pimms_15mega_crank_fast_21mega_slither_parallel_2D, 0, __pyx_mstate_global->__pyx_n_u_mega_slither_parallel_2D, NULL, __pyx_mstate_global->__pyx_n_u_pimms_mega_crank_fast, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[16])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2813, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_mega_slither_parallel_2D, __pyx_t_4) < (0)) __PYX_ERR(0, 2813, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* … */ struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_3_mega_slither_parallel_2D { PyObject_HEAD int __pyx_v_W; int __pyx_v_num_beads; };
2814: @cython.boundscheck(False)
2815: def mega_slither_parallel_2D(NUMPY_INT_TYPE[:, :] grid,
2816: NUMPY_INT_TYPE[:, :] type_grid,
2817: NUMPY_INT_TYPE_long[:, :] idx_to_bead,
2818: int[::1] chain_offset,
2819: int[::1] chain_length,
2820: int[::1] chain_homo,
2821: int[::1] chain_selector,
2822: NUMPY_INT_TYPE[:, :] interaction_table,
2823: NUMPY_INT_TYPE[:, :] LR_interaction_table,
2824: NUMPY_INT_TYPE[:, :] SLR_interaction_table,
2825: NUMPY_INT_TYPE[:, :, :, :, :] angle_lookup,
2826: long energy,
2827: float invtemp,
2828: int passed_seed,
2829: int hardwall,
2830: int max_chain_len,
2831: int num_threads,
2832: NUMPY_INT_TYPE[::1] frozen_mask):
2833: """
2834: Parallel 2D slither megamove (the 2D analogue of mega_slither_parallel).
2835: Returns (energy, accepted).
2836: """
+2837: cdef int XDIM = grid.shape[0]
__pyx_v_XDIM = (__pyx_v_grid.shape[0]);
+2838: cdef int YDIM = grid.shape[1]
__pyx_v_YDIM = (__pyx_v_grid.shape[1]);
+2839: cdef int num_beads = idx_to_bead.shape[0]
__pyx_cur_scope->__pyx_v_num_beads = (__pyx_v_idx_to_bead.shape[0]);
+2840: cdef int num_chains = chain_offset.shape[0]
__pyx_v_num_chains = (__pyx_v_chain_offset.shape[0]);
+2841: cdef int n_steps = chain_selector.shape[0]
__pyx_v_n_steps = (__pyx_v_chain_selector.shape[0]);
2842:
+2843: idx_np = np.asarray(idx_to_bead)
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2843, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_asarray); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2843, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_idx_to_bead, 2, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2843, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2843, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_idx_np = __pyx_t_1; __pyx_t_1 = 0;
+2844: cdef int R_int = 3 if np.any(idx_np[:, 1] == 1) else 1
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2844, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_any); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2844, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_idx_np, __pyx_mstate_global->__pyx_tuple[1]); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2844, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyLong_EqObjC(__pyx_t_3, __pyx_mstate_global->__pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2844, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2844, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 2844, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_8) { __pyx_t_6 = 3; } else { __pyx_t_6 = 1; } __pyx_v_R_int = __pyx_t_6;
+2845: cdef int W = R_int + 2
__pyx_cur_scope->__pyx_v_W = (__pyx_v_R_int + 2);
2846:
+2847: cdef int cap = 4
__pyx_v_cap = 4;
+2848: cdef int nbx = _choose_nb(XDIM, W, cap)
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_choose_nb); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2848, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_XDIM); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2848, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_W); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2848, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_cap); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2848, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_t_4, __pyx_t_3, __pyx_t_9}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2848, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2848, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_nbx = __pyx_t_6;
+2849: cdef int nby = _choose_nb(YDIM, W, cap)
__pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_choose_nb); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2849, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_YDIM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2849, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_W); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2849, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_cap); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2849, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[4] = {__pyx_t_7, __pyx_t_3, __pyx_t_4, __pyx_t_2}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2849, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2849, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_nby = __pyx_t_6;
+2850: cdef int Lx = XDIM // nbx
if (unlikely(__pyx_v_nbx == 0)) {
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__PYX_ERR(0, 2850, __pyx_L1_error)
}
else if (sizeof(int) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_nbx == (int)-1) && unlikely(__Pyx_UNARY_NEG_WOULD_OVERFLOW(__pyx_v_XDIM))) {
PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
__PYX_ERR(0, 2850, __pyx_L1_error)
}
__pyx_v_Lx = __Pyx_div_int(__pyx_v_XDIM, __pyx_v_nbx, 0);
+2851: cdef int Ly = YDIM // nby
if (unlikely(__pyx_v_nby == 0)) {
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__PYX_ERR(0, 2851, __pyx_L1_error)
}
else if (sizeof(int) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_nby == (int)-1) && unlikely(__Pyx_UNARY_NEG_WOULD_OVERFLOW(__pyx_v_YDIM))) {
PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
__PYX_ERR(0, 2851, __pyx_L1_error)
}
__pyx_v_Ly = __Pyx_div_int(__pyx_v_YDIM, __pyx_v_nby, 0);
+2852: cdef int num_blocks = nbx * nby
__pyx_v_num_blocks = (__pyx_v_nbx * __pyx_v_nby);
2853:
+2854: rstate = np.random.RandomState(passed_seed & 0x7FFFFFFF)
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2854, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_random); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2854, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_9 = __pyx_t_4; __Pyx_INCREF(__pyx_t_9); __pyx_t_2 = __Pyx_PyLong_From_long((__pyx_v_passed_seed & 0x7FFFFFFF)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2854, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_2}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_RandomState, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2854, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_rstate = __pyx_t_1; __pyx_t_1 = 0;
+2855: cdef int shift_x = int(rstate.randint(0, Lx)) if nbx > 1 else 0
__pyx_t_8 = (__pyx_v_nbx > 1);
if (__pyx_t_8) {
__pyx_t_4 = __pyx_v_rstate;
__Pyx_INCREF(__pyx_t_4);
__pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_Lx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2855, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_mstate_global->__pyx_int_0, __pyx_t_2};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_randint, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2855, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_t_2 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2855, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_10 = __Pyx_PyLong_As_int(__pyx_t_2); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2855, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_6 = __pyx_t_10;
} else {
__pyx_t_6 = 0;
}
__pyx_v_shift_x = __pyx_t_6;
+2856: cdef int shift_y = int(rstate.randint(0, Ly)) if nby > 1 else 0
__pyx_t_8 = (__pyx_v_nby > 1);
if (__pyx_t_8) {
__pyx_t_1 = __pyx_v_rstate;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_Ly); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2856, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_mstate_global->__pyx_int_0, __pyx_t_4};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_randint, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2856, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_4 = __Pyx_PyNumber_Int(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2856, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_10 = __Pyx_PyLong_As_int(__pyx_t_4); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2856, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_6 = __pyx_t_10;
} else {
__pyx_t_6 = 0;
}
__pyx_v_shift_y = __pyx_t_6;
2857:
+2858: gx = idx_np[:, 5].astype(np.int64)
__pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_idx_np, __pyx_mstate_global->__pyx_tuple[2]); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2858, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2858, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2858, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3}; __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2858, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_v_gx = __pyx_t_4; __pyx_t_4 = 0;
+2859: gy = idx_np[:, 6].astype(np.int64)
__pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_idx_np, __pyx_mstate_global->__pyx_tuple[3]); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2859, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __pyx_t_3; __Pyx_INCREF(__pyx_t_1); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2859, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2859, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_9}; __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2859, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_v_gy = __pyx_t_4; __pyx_t_4 = 0;
2860:
+2861: def dim_block(g, nb, L, DIM, shift):
/* Python wrapper */
static PyObject *__pyx_pw_5pimms_15mega_crank_fast_24mega_slither_parallel_2D_1dim_block(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_5pimms_15mega_crank_fast_24mega_slither_parallel_2D_1dim_block = {"dim_block", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5pimms_15mega_crank_fast_24mega_slither_parallel_2D_1dim_block, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5pimms_15mega_crank_fast_24mega_slither_parallel_2D_1dim_block(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_g = 0;
PyObject *__pyx_v_nb = 0;
PyObject *__pyx_v_L = 0;
PyObject *__pyx_v_DIM = 0;
PyObject *__pyx_v_shift = 0;
#if !CYTHON_METH_FASTCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("dim_block (wrapper)", 0);
#if !CYTHON_METH_FASTCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_g,&__pyx_mstate_global->__pyx_n_u_nb,&__pyx_mstate_global->__pyx_n_u_L,&__pyx_mstate_global->__pyx_n_u_DIM,&__pyx_mstate_global->__pyx_n_u_shift,0};
PyObject* values[5] = {0,0,0,0,0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 2861, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 5:
values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 2861, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 4:
values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 2861, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 3:
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 2861, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 2861, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 2861, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "dim_block", 0) < (0)) __PYX_ERR(0, 2861, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 5; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("dim_block", 1, 5, 5, i); __PYX_ERR(0, 2861, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 5)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 2861, __pyx_L3_error)
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 2861, __pyx_L3_error)
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 2861, __pyx_L3_error)
values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 2861, __pyx_L3_error)
values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 2861, __pyx_L3_error)
}
__pyx_v_g = values[0];
__pyx_v_nb = values[1];
__pyx_v_L = values[2];
__pyx_v_DIM = values[3];
__pyx_v_shift = values[4];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("dim_block", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 2861, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("pimms.mega_crank_fast.mega_slither_parallel_2D.dim_block", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_5pimms_15mega_crank_fast_24mega_slither_parallel_2D_dim_block(__pyx_self, __pyx_v_g, __pyx_v_nb, __pyx_v_L, __pyx_v_DIM, __pyx_v_shift);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_5pimms_15mega_crank_fast_24mega_slither_parallel_2D_dim_block(PyObject *__pyx_self, PyObject *__pyx_v_g, PyObject *__pyx_v_nb, PyObject *__pyx_v_L, PyObject *__pyx_v_DIM, PyObject *__pyx_v_shift) {
struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_3_mega_slither_parallel_2D *__pyx_cur_scope;
struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_3_mega_slither_parallel_2D *__pyx_outer_scope;
PyObject *__pyx_v_s = NULL;
PyObject *__pyx_v_bj = NULL;
PyObject *__pyx_v_within = NULL;
PyObject *__pyx_v_bad = NULL;
PyObject *__pyx_r = NULL;
__pyx_outer_scope = (struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_3_mega_slither_parallel_2D *) __Pyx_CyFunction_GetClosure(__pyx_self);
__pyx_cur_scope = __pyx_outer_scope;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("pimms.mega_crank_fast.mega_slither_parallel_2D.dim_block", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_s);
__Pyx_XDECREF(__pyx_v_bj);
__Pyx_XDECREF(__pyx_v_within);
__Pyx_XDECREF(__pyx_v_bad);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_5pimms_15mega_crank_fast_24mega_slither_parallel_2D_1dim_block, 0, __pyx_mstate_global->__pyx_n_u_mega_slither_parallel_2D_locals, ((PyObject*)__pyx_cur_scope), __pyx_mstate_global->__pyx_n_u_pimms_mega_crank_fast, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[3])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2861, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_v_dim_block = __pyx_t_4;
__pyx_t_4 = 0;
+2862: if nb == 1:
__pyx_t_1 = (__Pyx_PyLong_BoolEqObjC(__pyx_v_nb, __pyx_mstate_global->__pyx_int_1, 1, 0)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2862, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+2863: return np.zeros(num_beads, dtype=np.int64)
__Pyx_XDECREF(__pyx_r); __pyx_t_3 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2863, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_zeros); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2863, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_num_beads); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2863, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2863, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2863, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_3, __pyx_t_4}; __pyx_t_6 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2863, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_7, __pyx_t_6, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 2863, __pyx_L1_error) __pyx_t_2 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_6); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2863, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0;
+2864: s = (g - shift) % DIM
__pyx_t_2 = PyNumber_Subtract(__pyx_v_g, __pyx_v_shift); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2864, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = PyNumber_Remainder(__pyx_t_2, __pyx_v_DIM); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2864, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_s = __pyx_t_5; __pyx_t_5 = 0;
+2865: bj = s // L
__pyx_t_5 = PyNumber_FloorDivide(__pyx_v_s, __pyx_v_L); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2865, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_v_bj = __pyx_t_5; __pyx_t_5 = 0;
+2866: within = s - bj * L
__pyx_t_5 = PyNumber_Multiply(__pyx_v_bj, __pyx_v_L); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2866, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = PyNumber_Subtract(__pyx_v_s, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2866, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_within = __pyx_t_2; __pyx_t_2 = 0;
+2867: bad = (s >= nb * L) | (within < W) | (within >= L - W)
__pyx_t_2 = PyNumber_Multiply(__pyx_v_nb, __pyx_v_L); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2867, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = PyObject_RichCompare(__pyx_v_s, __pyx_t_2, Py_GE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2867, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_W); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2867, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = PyObject_RichCompare(__pyx_v_within, __pyx_t_2, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2867, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Or(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2867, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_W); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2867, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = PyNumber_Subtract(__pyx_v_L, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2867, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyObject_RichCompare(__pyx_v_within, __pyx_t_5, Py_GE); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2867, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyNumber_Or(__pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2867, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_bad = __pyx_t_5; __pyx_t_5 = 0;
+2868: bj = bj.copy()
__pyx_t_6 = __pyx_v_bj; __Pyx_INCREF(__pyx_t_6); __pyx_t_8 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL}; __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_copy, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2868, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } __Pyx_DECREF_SET(__pyx_v_bj, __pyx_t_5); __pyx_t_5 = 0;
+2869: bj[bad] = -1
if (unlikely((PyObject_SetItem(__pyx_v_bj, __pyx_v_bad, __pyx_mstate_global->__pyx_int_neg_1) < 0))) __PYX_ERR(0, 2869, __pyx_L1_error)
+2870: return bj
__Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_bj); __pyx_r = __pyx_v_bj; goto __pyx_L0;
2871:
+2872: bxj = dim_block(gx, nbx, Lx, XDIM, shift_x)
__pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_nbx); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2872, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_Lx); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2872, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_XDIM); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2872, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_shift_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2872, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __pyx_pf_5pimms_15mega_crank_fast_24mega_slither_parallel_2D_dim_block(__pyx_v_dim_block, __pyx_v_gx, __pyx_t_4, __pyx_t_3, __pyx_t_9, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2872, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_bxj = __pyx_t_2; __pyx_t_2 = 0;
+2873: byj = dim_block(gy, nby, Ly, YDIM, shift_y)
__pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_nby); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2873, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_Ly); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2873, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_YDIM); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2873, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_shift_y); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2873, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __pyx_pf_5pimms_15mega_crank_fast_24mega_slither_parallel_2D_dim_block(__pyx_v_dim_block, __pyx_v_gy, __pyx_t_2, __pyx_t_1, __pyx_t_9, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2873, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_byj = __pyx_t_4; __pyx_t_4 = 0;
+2874: block_of_bead = (bxj * nby + byj)
__pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_nby); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2874, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyNumber_Multiply(__pyx_v_bxj, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2874, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_v_byj); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2874, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_block_of_bead = __pyx_t_4; __pyx_t_4 = 0;
+2875: block_of_bead[(bxj < 0) | (byj < 0)] = -1
__pyx_t_4 = PyObject_RichCompare(__pyx_v_bxj, __pyx_mstate_global->__pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2875, __pyx_L1_error) __pyx_t_3 = PyObject_RichCompare(__pyx_v_byj, __pyx_mstate_global->__pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2875, __pyx_L1_error) __pyx_t_9 = PyNumber_Or(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2875, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely((PyObject_SetItem(__pyx_v_block_of_bead, __pyx_t_9, __pyx_mstate_global->__pyx_int_neg_1) < 0))) __PYX_ERR(0, 2875, __pyx_L1_error) __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
2876:
+2877: block_of_bead[np.asarray(frozen_mask) != 0] = -1 # frozen beads -> whole chain frozen
__pyx_t_3 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2877, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_asarray); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2877, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_frozen_mask, 1, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2877, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_1))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_1, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_4}; __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2877, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_t_1 = __Pyx_PyLong_NeObjC(__pyx_t_9, __pyx_mstate_global->__pyx_int_0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2877, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely((PyObject_SetItem(__pyx_v_block_of_bead, __pyx_t_1, __pyx_mstate_global->__pyx_int_neg_1) < 0))) __PYX_ERR(0, 2877, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2878: chain_block = _chain_block_assignment(block_of_bead, chain_offset, num_chains)
__pyx_t_9 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_chain_block_assignment); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2878, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_chain_offset, 1, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2878, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_num_chains); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2878, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_9); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[4] = {__pyx_t_9, __pyx_v_block_of_bead, __pyx_t_3, __pyx_t_2}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2878, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_chain_block = __pyx_t_1; __pyx_t_1 = 0;
+2879: movable = np.nonzero(chain_block >= 0)[0].astype(np.int32)
__pyx_t_3 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2879, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_nonzero); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2879, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_9 = PyObject_RichCompare(__pyx_v_chain_block, __pyx_mstate_global->__pyx_int_0, Py_GE); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2879, __pyx_L1_error) __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_9}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2879, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_2, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 0, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2879, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = __pyx_t_7; __Pyx_INCREF(__pyx_t_4); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2879, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2879, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_9}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2879, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_movable = __pyx_t_1; __pyx_t_1 = 0;
+2880: if movable.shape[0] == 0:
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_movable, __pyx_mstate_global->__pyx_n_u_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2880, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 0, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2880, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_8 = (__Pyx_PyLong_BoolEqObjC(__pyx_t_7, __pyx_mstate_global->__pyx_int_0, 0, 0)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 2880, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (__pyx_t_8) { /* … */ }
+2881: return (energy, 0)
__Pyx_XDECREF(__pyx_r); __pyx_t_7 = __Pyx_PyLong_From_long(__pyx_v_energy); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2881, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2881, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_7); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_7) != (0)) __PYX_ERR(0, 2881, __pyx_L1_error); __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_0); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_mstate_global->__pyx_int_0) != (0)) __PYX_ERR(0, 2881, __pyx_L1_error); __pyx_t_7 = 0; __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0;
2882:
+2883: mblocks = chain_block[movable]
__pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_chain_block, __pyx_v_movable); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2883, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_mblocks = __pyx_t_1; __pyx_t_1 = 0;
+2884: order = np.argsort(mblocks, kind="stable")
__pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2884, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_argsort); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2884, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_7, __pyx_v_mblocks}; __pyx_t_9 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2884, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_kind, __pyx_mstate_global->__pyx_n_u_stable, __pyx_t_9, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 2884, __pyx_L1_error) __pyx_t_1 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_9); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2884, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_order = __pyx_t_1; __pyx_t_1 = 0;
+2885: chain_ids = movable[order].astype(np.int32)
__pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_v_movable, __pyx_v_order); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2885, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_4 = __pyx_t_9; __Pyx_INCREF(__pyx_t_4); __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2885, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2885, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_2}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2885, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_chain_ids = __pyx_t_1; __pyx_t_1 = 0;
+2886: sorted_blocks = mblocks[order]
__pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_mblocks, __pyx_v_order); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2886, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_sorted_blocks = __pyx_t_1; __pyx_t_1 = 0;
2887:
+2888: counts = np.bincount(sorted_blocks, minlength=num_blocks).astype(np.int32)
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2888, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_bincount); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2888, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2888, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_4, __pyx_v_sorted_blocks}; __pyx_t_11 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2888, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_minlength, __pyx_t_7, __pyx_t_11, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 2888, __pyx_L1_error) __pyx_t_2 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_11); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2888, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_t_9 = __pyx_t_2; __Pyx_INCREF(__pyx_t_9); __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2888, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2888, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_11}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2888, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_counts = __pyx_t_1; __pyx_t_1 = 0;
+2889: starts = np.zeros(num_blocks + 1, dtype=np.int32)
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2889, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_zeros); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2889, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = __Pyx_PyLong_From_long((__pyx_v_num_blocks + 1)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2889, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2889, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2889, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_2, __pyx_t_11}; __pyx_t_3 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2889, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_7, __pyx_t_3, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 2889, __pyx_L1_error) __pyx_t_1 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_3); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2889, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_starts = __pyx_t_1; __pyx_t_1 = 0;
+2890: starts[1:] = np.cumsum(counts)
__pyx_t_9 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2890, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_cumsum); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2890, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_9); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_v_counts}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2890, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } if (__Pyx_PyObject_SetSlice(__pyx_v_starts, __pyx_t_1, 1, 0, NULL, NULL, &__pyx_mstate_global->__pyx_slice[1], 1, 0, 0) < (0)) __PYX_ERR(0, 2890, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
2891:
+2892: total_movable = int(counts.sum())
__pyx_t_7 = __pyx_v_counts; __Pyx_INCREF(__pyx_t_7); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_sum, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2892, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_7 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2892, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_total_movable = ((PyObject*)__pyx_t_7); __pyx_t_7 = 0;
+2893: attempts = np.maximum(
__pyx_t_3 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2893, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_maximum); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2893, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+2894: (n_steps * counts.astype(np.int64) // max(total_movable, 1)), 0).astype(np.int32)
__pyx_t_11 = __Pyx_PyLong_From_int(__pyx_v_n_steps); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2894, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = __pyx_v_counts; __Pyx_INCREF(__pyx_t_12); __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2894, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2894, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_14}; __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2894, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_14 = PyNumber_Multiply(__pyx_t_11, __pyx_t_4); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2894, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_15 = 1; __Pyx_INCREF(__pyx_v_total_movable); __pyx_t_16 = __pyx_v_total_movable; __pyx_t_11 = __Pyx_PyLong_From_long(__pyx_t_15); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2894, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = PyObject_RichCompare(__pyx_t_11, __pyx_t_16, Py_GT); __Pyx_XGOTREF(__pyx_t_12); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2894, __pyx_L1_error) __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 2894, __pyx_L1_error) __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (__pyx_t_8) { __pyx_t_12 = __Pyx_PyLong_From_long(__pyx_t_15); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2894, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); if (__Pyx_PyInt_FromNumber(&__pyx_t_12, NULL, 0) < (0)) __PYX_ERR(0, 2894, __pyx_L1_error) __pyx_t_4 = __pyx_t_12; __pyx_t_12 = 0; } else { __Pyx_INCREF(__pyx_t_16); __pyx_t_4 = __pyx_t_16; } __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_12 = PyNumber_FloorDivide(__pyx_t_14, __pyx_t_4); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2894, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_12, __pyx_mstate_global->__pyx_int_0}; __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2893, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_t_1 = __pyx_t_9; __Pyx_INCREF(__pyx_t_1); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2894, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2894, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_12}; __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2894, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } __pyx_v_attempts = __pyx_t_7; __pyx_t_7 = 0;
2895:
+2896: bix = np.arange(num_blocks, dtype=np.int32) // nby
__pyx_t_9 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2896, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_arange); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2896, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_12 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2896, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2896, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2896, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_1))) { __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_1); assert(__pyx_t_9); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1); __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_1, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_9, __pyx_t_12}; __pyx_t_2 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2896, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_3, __pyx_t_2, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 2896, __pyx_L1_error) __pyx_t_7 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_2); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2896, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_nby); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2896, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyNumber_FloorDivide(__pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2896, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_bix = __pyx_t_2; __pyx_t_2 = 0;
+2897: biy = np.arange(num_blocks, dtype=np.int32) % nby
__pyx_t_1 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2897, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_arange); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2897, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2897, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2897, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2897, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_1, __pyx_t_7}; __pyx_t_12 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2897, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_9, __pyx_t_12, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 2897, __pyx_L1_error) __pyx_t_2 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_12); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2897, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_nby); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2897, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_12 = PyNumber_Remainder(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2897, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_biy = __pyx_t_12; __pyx_t_12 = 0;
+2898: blo_x = (bix * Lx).astype(np.int32)
__pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_Lx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2898, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_9 = PyNumber_Multiply(__pyx_v_bix, __pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2898, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = __pyx_t_9; __Pyx_INCREF(__pyx_t_3); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2898, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2898, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_7}; __pyx_t_12 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2898, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); } __pyx_v_blo_x = __pyx_t_12; __pyx_t_12 = 0;
+2899: blo_y = (biy * Ly).astype(np.int32)
__pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_Ly); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2899, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_3 = PyNumber_Multiply(__pyx_v_biy, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2899, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_9 = __pyx_t_3; __Pyx_INCREF(__pyx_t_9); __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2899, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2899, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_2}; __pyx_t_12 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2899, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); } __pyx_v_blo_y = __pyx_t_12; __pyx_t_12 = 0;
2900:
+2901: seeds = (np.arange(num_blocks, dtype=np.uint64) + np.uint64(passed_seed) + np.uint64(0x9E3779B9)) \
__pyx_t_3 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2901, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_arange); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2901, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2901, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2901, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_uint64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2901, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_3, __pyx_t_2}; __pyx_t_7 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2901, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_1, __pyx_t_7, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 2901, __pyx_L1_error) __pyx_t_12 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_7); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2901, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); } __pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2901, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_uint64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2901, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_passed_seed); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2901, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_1}; __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2901, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_t_2 = PyNumber_Add(__pyx_t_12, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2901, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_12 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2901, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_uint64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2901, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_12); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_12); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_mstate_global->__pyx_int_2654435769}; __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2901, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_t_7 = PyNumber_Add(__pyx_t_2, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2901, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+2902: * np.uint64(0x2545F4914F6CDD1D) + np.uint64(1)
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2902, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_uint64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2902, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_1))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_1, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_int_0x2545f4914f6cdd1d}; __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2902, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_t_1 = PyNumber_Multiply(__pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2902, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2902, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_uint64); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2902, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_12))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_12); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_12); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_12, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_int_1}; __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_12, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2902, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_t_12 = PyNumber_Add(__pyx_t_1, __pyx_t_9); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2902, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_v_seeds = __pyx_t_12; __pyx_t_12 = 0;
2903:
+2904: out_delta = np.zeros(num_blocks, dtype=np.int64)
__pyx_t_9 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2904, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_zeros); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2904, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2904, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2904, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2904, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_9); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_9, __pyx_t_1}; __pyx_t_2 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2904, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_3, __pyx_t_2, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 2904, __pyx_L1_error) __pyx_t_12 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_2); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2904, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); } __pyx_v_out_delta = __pyx_t_12; __pyx_t_12 = 0;
+2905: out_accepted = np.zeros(num_blocks, dtype=np.int32)
__pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2905, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_zeros); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2905, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2905, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2905, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2905, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_7, __pyx_t_2}; __pyx_t_1 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2905, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_9, __pyx_t_1, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 2905, __pyx_L1_error) __pyx_t_12 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_1); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2905, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); } __pyx_v_out_accepted = __pyx_t_12; __pyx_t_12 = 0;
2906:
+2907: cdef int[::1] chain_ids_mv = chain_ids
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_chain_ids, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 2907, __pyx_L1_error) __pyx_v_chain_ids_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+2908: cdef int[::1] starts_mv = starts
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_starts, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 2908, __pyx_L1_error) __pyx_v_starts_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+2909: cdef int[::1] attempts_mv = attempts
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_attempts, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 2909, __pyx_L1_error) __pyx_v_attempts_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+2910: cdef unsigned long long[::1] seeds_mv = seeds
__pyx_t_18 = __Pyx_PyObject_to_MemoryviewSlice_dc_unsigned_PY_LONG_LONG(__pyx_v_seeds, PyBUF_WRITABLE); if (unlikely(!__pyx_t_18.memview)) __PYX_ERR(0, 2910, __pyx_L1_error) __pyx_v_seeds_mv = __pyx_t_18; __pyx_t_18.memview = NULL; __pyx_t_18.data = NULL;
+2911: cdef int[::1] blo_x_mv = blo_x
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_blo_x, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 2911, __pyx_L1_error) __pyx_v_blo_x_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+2912: cdef int[::1] blo_y_mv = blo_y
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_blo_y, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 2912, __pyx_L1_error) __pyx_v_blo_y_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+2913: cdef long[::1] out_delta_mv = out_delta
__pyx_t_19 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_v_out_delta, PyBUF_WRITABLE); if (unlikely(!__pyx_t_19.memview)) __PYX_ERR(0, 2913, __pyx_L1_error) __pyx_v_out_delta_mv = __pyx_t_19; __pyx_t_19.memview = NULL; __pyx_t_19.data = NULL;
+2914: cdef int[::1] out_accepted_mv = out_accepted
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_out_accepted, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 2914, __pyx_L1_error) __pyx_v_out_accepted_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
2915:
2916: cdef int b
+2917: cdef int nthreads = num_threads if num_threads > 0 else 1
__pyx_t_8 = (__pyx_v_num_threads > 0);
if (__pyx_t_8) {
__pyx_t_6 = __pyx_v_num_threads;
} else {
__pyx_t_6 = 1;
}
__pyx_v_nthreads = __pyx_t_6;
2918:
+2919: for b in prange(num_blocks, nogil=True, num_threads=nthreads, schedule='dynamic'):
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
__pyx_t_6 = __pyx_v_num_blocks;
{
#if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
#undef likely
#undef unlikely
#define likely(x) (x)
#define unlikely(x) (x)
#endif
__pyx_t_20 = (__pyx_t_6 - 0 + 1 - 1/abs(1)) / 1;
if (__pyx_t_20 > 0)
{
#ifdef _OPENMP
#pragma omp parallel
#endif /* _OPENMP */
{
#ifdef _OPENMP
#pragma omp for firstprivate(__pyx_v_b) lastprivate(__pyx_v_b) schedule(dynamic) __pyx_t_6 = __pyx_v_num_blocks;
{
#if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
#undef likely
#undef unlikely
#define likely(x) (x)
#define unlikely(x) (x)
#endif
__pyx_t_20 = (__pyx_t_6 - 0 + 1 - 1/abs(1)) / 1;
if (__pyx_t_20 > 0)
{
#ifdef _OPENMP
#pragma omp parallel
#endif /* _OPENMP */
{
#ifdef _OPENMP
#pragma omp for firstprivate(__pyx_v_b) lastprivate(__pyx_v_b) schedule(dynamic) num_threads(__pyx_v_nthreads)
#endif /* _OPENMP */
for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_20; __pyx_t_10++){
{
__pyx_v_b = (int)(0 + 1 * __pyx_t_10);
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L6;
}
__pyx_L6:;
}
}
+2920: run_block_slither_2D(b, chain_ids_mv, starts_mv, attempts_mv, seeds_mv,
__pyx_f_5pimms_15mega_crank_fast_run_block_slither_2D(__pyx_v_b, __pyx_v_chain_ids_mv, __pyx_v_starts_mv, __pyx_v_attempts_mv, __pyx_v_seeds_mv, __pyx_v_chain_offset, __pyx_v_chain_length, __pyx_v_chain_homo, __pyx_v_blo_x_mv, __pyx_v_blo_y_mv, __pyx_v_Lx, __pyx_v_Ly, __pyx_v_nbx, __pyx_v_nby, __pyx_v_shift_x, __pyx_v_shift_y, __pyx_cur_scope->__pyx_v_W, __pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_angle_lookup, __pyx_v_invtemp, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_hardwall, __pyx_v_out_delta_mv, __pyx_v_out_accepted_mv);
}
}
}
}
}
#if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
#undef likely
#undef unlikely
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
#endif
}
2921: chain_offset, chain_length, chain_homo,
2922: blo_x_mv, blo_y_mv,
2923: Lx, Ly, nbx, nby,
2924: shift_x, shift_y, W,
2925: grid, type_grid, idx_to_bead,
2926: interaction_table, LR_interaction_table, SLR_interaction_table,
2927: angle_lookup, invtemp, XDIM, YDIM, hardwall,
2928: out_delta_mv, out_accepted_mv)
2929:
+2930: cdef long tot_d = 0
__pyx_v_tot_d = 0;
+2931: cdef int tot_a = 0
__pyx_v_tot_a = 0;
+2932: for b in range(num_blocks):
__pyx_t_20 = __pyx_v_num_blocks;
__pyx_t_10 = __pyx_t_20;
for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_10; __pyx_t_6+=1) {
__pyx_v_b = __pyx_t_6;
+2933: tot_d += out_delta_mv[b]
__pyx_t_21 = __pyx_v_b;
__pyx_v_tot_d = (__pyx_v_tot_d + (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_out_delta_mv.data) + __pyx_t_21)) ))));
+2934: tot_a += out_accepted_mv[b]
__pyx_t_21 = __pyx_v_b;
__pyx_v_tot_a = (__pyx_v_tot_a + (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_out_accepted_mv.data) + __pyx_t_21)) ))));
}
+2935: return (energy + tot_d, tot_a)
__Pyx_XDECREF(__pyx_r); __pyx_t_12 = __Pyx_PyLong_From_long((__pyx_v_energy + __pyx_v_tot_d)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2935, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_tot_a); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2935, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2935, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_12); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_12) != (0)) __PYX_ERR(0, 2935, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_3); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3) != (0)) __PYX_ERR(0, 2935, __pyx_L1_error); __pyx_t_12 = 0; __pyx_t_3 = 0; __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0;
2936:
2937:
2938: # =====================================================================
2939: #
2940: # PULL (cooperative reptation) megamove kernel
2941: #
2942: # A pull move displaces an interior bead i to a neighbouring empty site and
2943: # then cooperatively "pulls" the following beads into the just-vacated sites
2944: # until chain connectivity is restored - local reptation of a sub-segment.
2945: # Because it threads through occupied space one bead at a time it rearranges
2946: # chains in DENSE systems where rigid translate/rotate/pivot would clash.
2947: #
2948: # Detailed balance: the move is reversible (the reverse of a C-ward pull whose
2949: # cascade ends at bead k is an N-ward pull at bead k, and vice-versa - the
2950: # forward "did-not-stop" conditions force the reverse cascade to retrace the
2951: # same beads). Acceptance is Metropolis-Hastings with the proposal-multiplicity
2952: # ratio nF/nR, where nF/nR are the forward/reverse first-target counts computed
2953: # by the SAME predicate (pull_first_targets) so they can never diverge. Cascades
2954: # that reach a terminus are rejected (their reverse has no valid anchor).
2955: # Energy is the telescoping per-bead-move sum (the proven mega_slither approach).
2956: # =====================================================================
2957:
+2958: cdef inline int accept_or_reject_ratio(float invtemp, long old_energy, long new_energy,
static CYTHON_INLINE int __pyx_f_5pimms_15mega_crank_fast_accept_or_reject_ratio(float __pyx_v_invtemp, long __pyx_v_old_energy, long __pyx_v_new_energy, int __pyx_v_nF, int __pyx_v_nR) {
double __pyx_v_acc;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast.accept_or_reject_ratio", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
return __pyx_r;
}
2959: int nF, int nR) noexcept nogil:
2960: # Metropolis-Hastings: accept iff rand < (nF/nR) * exp(-(dE)*invtemp)
2961: cdef double acc
+2962: if nR <= 0:
__pyx_t_1 = (__pyx_v_nR <= 0);
if (__pyx_t_1) {
/* … */
}
+2963: return 0
__pyx_r = 0;
goto __pyx_L0;
+2964: acc = (<double>nF / <double>nR) * exp(-(<double>(new_energy - old_energy)) * invtemp)
if (unlikely(((double)__pyx_v_nR) == 0)) {
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
PyErr_SetString(PyExc_ZeroDivisionError, "float division");
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__PYX_ERR(0, 2964, __pyx_L1_error)
}
__pyx_v_acc = ((((double)__pyx_v_nF) / ((double)__pyx_v_nR)) * exp(((-((double)(__pyx_v_new_energy - __pyx_v_old_energy))) * __pyx_v_invtemp)));
+2965: if acc >= 1.0:
__pyx_t_1 = (__pyx_v_acc >= 1.0);
if (__pyx_t_1) {
/* … */
}
+2966: return 1
__pyx_r = 1;
goto __pyx_L0;
+2967: if (<double>mc_rand() / <double>PRNG_MAX) < acc:
__pyx_t_2 = ((double)__pyx_f_5pimms_15mega_crank_fast_mc_rand());
if (unlikely(((double)__pyx_v_5pimms_15mega_crank_fast_PRNG_MAX) == 0)) {
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
PyErr_SetString(PyExc_ZeroDivisionError, "float division");
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__PYX_ERR(0, 2967, __pyx_L1_error)
}
__pyx_t_1 = ((__pyx_t_2 / ((double)__pyx_v_5pimms_15mega_crank_fast_PRNG_MAX)) < __pyx_v_acc);
if (__pyx_t_1) {
/* … */
}
+2968: return 1
__pyx_r = 1;
goto __pyx_L0;
+2969: return 0
__pyx_r = 0; goto __pyx_L0;
2970:
2971:
+2972: cdef inline int cheby_adjacent(int ax, int ay, int az, int bx, int by, int bz,
static CYTHON_INLINE int __pyx_f_5pimms_15mega_crank_fast_cheby_adjacent(int __pyx_v_ax, int __pyx_v_ay, int __pyx_v_az, int __pyx_v_bx, int __pyx_v_by, int __pyx_v_bz, int __pyx_v_XDIM, int __pyx_v_YDIM, int __pyx_v_ZDIM, int __pyx_v_hardwall) {
int __pyx_v_dx;
int __pyx_v_dy;
int __pyx_v_dz;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
2973: int XDIM, int YDIM, int ZDIM, int hardwall) noexcept nogil:
2974: # 1 iff the two sites are Chebyshev-1 neighbours (minimal-image under PBC;
2975: # literal coordinate distance under hardwall, so wrapped sites are NOT adjacent)
+2976: cdef int dx = ax - bx
__pyx_v_dx = (__pyx_v_ax - __pyx_v_bx);
+2977: cdef int dy = ay - by
__pyx_v_dy = (__pyx_v_ay - __pyx_v_by);
+2978: cdef int dz = az - bz
__pyx_v_dz = (__pyx_v_az - __pyx_v_bz);
+2979: if dx < 0: dx = -dx
__pyx_t_1 = (__pyx_v_dx < 0);
if (__pyx_t_1) {
__pyx_v_dx = (-__pyx_v_dx);
}
+2980: if dy < 0: dy = -dy
__pyx_t_1 = (__pyx_v_dy < 0);
if (__pyx_t_1) {
__pyx_v_dy = (-__pyx_v_dy);
}
+2981: if dz < 0: dz = -dz
__pyx_t_1 = (__pyx_v_dz < 0);
if (__pyx_t_1) {
__pyx_v_dz = (-__pyx_v_dz);
}
+2982: if hardwall == 0:
__pyx_t_1 = (__pyx_v_hardwall == 0);
if (__pyx_t_1) {
/* … */
}
+2983: if XDIM - dx < dx: dx = XDIM - dx
__pyx_t_1 = ((__pyx_v_XDIM - __pyx_v_dx) < __pyx_v_dx);
if (__pyx_t_1) {
__pyx_v_dx = (__pyx_v_XDIM - __pyx_v_dx);
}
+2984: if YDIM - dy < dy: dy = YDIM - dy
__pyx_t_1 = ((__pyx_v_YDIM - __pyx_v_dy) < __pyx_v_dy);
if (__pyx_t_1) {
__pyx_v_dy = (__pyx_v_YDIM - __pyx_v_dy);
}
+2985: if ZDIM - dz < dz: dz = ZDIM - dz
__pyx_t_1 = ((__pyx_v_ZDIM - __pyx_v_dz) < __pyx_v_dz);
if (__pyx_t_1) {
__pyx_v_dz = (__pyx_v_ZDIM - __pyx_v_dz);
}
+2986: if dx <= 1 and dy <= 1 and dz <= 1:
__pyx_t_2 = (__pyx_v_dx <= 1);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L11_bool_binop_done;
}
__pyx_t_2 = (__pyx_v_dy <= 1);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L11_bool_binop_done;
}
__pyx_t_2 = (__pyx_v_dz <= 1);
__pyx_t_1 = __pyx_t_2;
__pyx_L11_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+2987: return 1
__pyx_r = 1;
goto __pyx_L0;
+2988: return 0
__pyx_r = 0; goto __pyx_L0;
2989:
2990:
+2991: cdef int pull_first_targets(NUMPY_INT_TYPE[:, :, :] grid,
static int __pyx_f_5pimms_15mega_crank_fast_pull_first_targets(__Pyx_memviewslice __pyx_v_grid, int __pyx_v_anchor_x, int __pyx_v_anchor_y, int __pyx_v_anchor_z, int __pyx_v_mov_x, int __pyx_v_mov_y, int __pyx_v_mov_z, int __pyx_v_hardwall, int __pyx_v_XDIM, int __pyx_v_YDIM, int __pyx_v_ZDIM, int *__pyx_v_out_buf) {
int __pyx_v_count;
int __pyx_v_dx;
int __pyx_v_dy;
int __pyx_v_dz;
int __pyx_v_tx;
int __pyx_v_ty;
int __pyx_v_tz;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast.pull_first_targets", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
return __pyx_r;
}
2992: int anchor_x, int anchor_y, int anchor_z,
2993: int mov_x, int mov_y, int mov_z,
2994: int hardwall, int XDIM, int YDIM, int ZDIM,
2995: int* out_buf) noexcept nogil:
2996: # empty sites that are Chebyshev-1 neighbours of BOTH the moving bead and the
2997: # anchor (so the moved bead stays bonded to the anchor and the next pulled
2998: # bead can occupy the moving bead's old site). Writes (x,y,z) triples into
2999: # out_buf, returns the count. The current moving-bead site is occupied so it
3000: # is never returned. (Assumes each box dim >= 3 so the 27 offsets are distinct.)
+3001: cdef int count = 0
__pyx_v_count = 0;
3002: cdef int dx, dy, dz, tx, ty, tz
+3003: for dx in range(-1, 2):
for (__pyx_t_1 = -1; __pyx_t_1 < 2; __pyx_t_1+=1) {
__pyx_v_dx = __pyx_t_1;
+3004: for dy in range(-1, 2):
for (__pyx_t_2 = -1; __pyx_t_2 < 2; __pyx_t_2+=1) {
__pyx_v_dy = __pyx_t_2;
+3005: for dz in range(-1, 2):
for (__pyx_t_3 = -1; __pyx_t_3 < 2; __pyx_t_3+=1) {
__pyx_v_dz = __pyx_t_3;
+3006: tx = pbc_correction(mov_x + dx, XDIM)
__pyx_v_tx = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_mov_x + __pyx_v_dx), __pyx_v_XDIM);
+3007: ty = pbc_correction(mov_y + dy, YDIM)
__pyx_v_ty = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_mov_y + __pyx_v_dy), __pyx_v_YDIM);
+3008: tz = pbc_correction(mov_z + dz, ZDIM)
__pyx_v_tz = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_mov_z + __pyx_v_dz), __pyx_v_ZDIM);
+3009: if grid[tx, ty, tz] != 0:
__pyx_t_4 = __pyx_v_tx;
__pyx_t_5 = __pyx_v_ty;
__pyx_t_6 = __pyx_v_tz;
__pyx_t_7 = -1;
if (__pyx_t_4 < 0) {
__pyx_t_4 += __pyx_v_grid.shape[0];
if (unlikely(__pyx_t_4 < 0)) __pyx_t_7 = 0;
} else if (unlikely(__pyx_t_4 >= __pyx_v_grid.shape[0])) __pyx_t_7 = 0;
if (__pyx_t_5 < 0) {
__pyx_t_5 += __pyx_v_grid.shape[1];
if (unlikely(__pyx_t_5 < 0)) __pyx_t_7 = 1;
} else if (unlikely(__pyx_t_5 >= __pyx_v_grid.shape[1])) __pyx_t_7 = 1;
if (__pyx_t_6 < 0) {
__pyx_t_6 += __pyx_v_grid.shape[2];
if (unlikely(__pyx_t_6 < 0)) __pyx_t_7 = 2;
} else if (unlikely(__pyx_t_6 >= __pyx_v_grid.shape[2])) __pyx_t_7 = 2;
if (unlikely(__pyx_t_7 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_7);
__PYX_ERR(0, 3009, __pyx_L1_error)
}
__pyx_t_8 = ((*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_4 * __pyx_v_grid.strides[0]) ) + __pyx_t_5 * __pyx_v_grid.strides[1]) ) + __pyx_t_6 * __pyx_v_grid.strides[2]) ))) != 0);
if (__pyx_t_8) {
/* … */
}
+3010: continue
goto __pyx_L7_continue;
+3011: if cheby_adjacent(tx, ty, tz, mov_x, mov_y, mov_z, XDIM, YDIM, ZDIM, hardwall) == 0:
__pyx_t_8 = (__pyx_f_5pimms_15mega_crank_fast_cheby_adjacent(__pyx_v_tx, __pyx_v_ty, __pyx_v_tz, __pyx_v_mov_x, __pyx_v_mov_y, __pyx_v_mov_z, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_hardwall) == 0);
if (__pyx_t_8) {
/* … */
}
+3012: continue
goto __pyx_L7_continue;
+3013: if cheby_adjacent(tx, ty, tz, anchor_x, anchor_y, anchor_z, XDIM, YDIM, ZDIM, hardwall) == 0:
__pyx_t_8 = (__pyx_f_5pimms_15mega_crank_fast_cheby_adjacent(__pyx_v_tx, __pyx_v_ty, __pyx_v_tz, __pyx_v_anchor_x, __pyx_v_anchor_y, __pyx_v_anchor_z, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_hardwall) == 0);
if (__pyx_t_8) {
/* … */
}
+3014: continue
goto __pyx_L7_continue;
+3015: out_buf[3 * count] = tx
(__pyx_v_out_buf[(3 * __pyx_v_count)]) = __pyx_v_tx;
+3016: out_buf[3 * count + 1] = ty
(__pyx_v_out_buf[((3 * __pyx_v_count) + 1)]) = __pyx_v_ty;
+3017: out_buf[3 * count + 2] = tz
(__pyx_v_out_buf[((3 * __pyx_v_count) + 2)]) = __pyx_v_tz;
+3018: count = count + 1
__pyx_v_count = (__pyx_v_count + 1);
__pyx_L7_continue:;
}
}
}
+3019: return count
__pyx_r = __pyx_v_count; goto __pyx_L0;
3020:
3021:
+3022: cdef inline void _revert_segment(NUMPY_INT_TYPE[:, :, :] grid, NUMPY_INT_TYPE[:, :, :] type_grid,
static CYTHON_INLINE void __pyx_f_5pimms_15mega_crank_fast__revert_segment(__Pyx_memviewslice __pyx_v_grid, __Pyx_memviewslice __pyx_v_type_grid, __Pyx_memviewslice __pyx_v_idx, int __pyx_v_off, int __pyx_v_lo, int __pyx_v_hi, int *__pyx_v_bx, int *__pyx_v_by, int *__pyx_v_bz, int __pyx_v_chainID) {
int __pyx_v_j;
int __pyx_v_ox;
int __pyx_v_oy;
int __pyx_v_oz;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast._revert_segment", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
}
3023: NUMPY_INT_TYPE_long[:, :] idx, int off, int lo, int hi,
3024: int* bx, int* by, int* bz, int chainID) noexcept nogil:
3025: # restore beads [lo..hi] to their buffered old positions (clear current sites
3026: # first, then write old, to handle overlap) - mirrors the mega_slither revert
3027: cdef int j, ox, oy, oz
+3028: for j in range(lo, hi + 1):
__pyx_t_1 = (__pyx_v_hi + 1);
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = __pyx_v_lo; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_j = __pyx_t_3;
+3029: ox = idx[off + j, 5]; oy = idx[off + j, 6]; oz = idx[off + j, 7]
__pyx_t_4 = (__pyx_v_off + __pyx_v_j);
__pyx_t_5 = 5;
__pyx_t_6 = -1;
if (__pyx_t_4 < 0) {
__pyx_t_4 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_4 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_4 >= __pyx_v_idx.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_5 < 0) {
__pyx_t_5 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_5 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_5 >= __pyx_v_idx.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3029, __pyx_L1_error)
}
__pyx_v_ox = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_4 * __pyx_v_idx.strides[0]) ) + __pyx_t_5 * __pyx_v_idx.strides[1]) )));
__pyx_t_5 = (__pyx_v_off + __pyx_v_j);
__pyx_t_4 = 6;
__pyx_t_6 = -1;
if (__pyx_t_5 < 0) {
__pyx_t_5 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_5 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_5 >= __pyx_v_idx.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_4 < 0) {
__pyx_t_4 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_4 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_4 >= __pyx_v_idx.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3029, __pyx_L1_error)
}
__pyx_v_oy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_5 * __pyx_v_idx.strides[0]) ) + __pyx_t_4 * __pyx_v_idx.strides[1]) )));
__pyx_t_4 = (__pyx_v_off + __pyx_v_j);
__pyx_t_5 = 7;
__pyx_t_6 = -1;
if (__pyx_t_4 < 0) {
__pyx_t_4 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_4 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_4 >= __pyx_v_idx.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_5 < 0) {
__pyx_t_5 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_5 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_5 >= __pyx_v_idx.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3029, __pyx_L1_error)
}
__pyx_v_oz = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_4 * __pyx_v_idx.strides[0]) ) + __pyx_t_5 * __pyx_v_idx.strides[1]) )));
+3030: grid[ox, oy, oz] = 0; type_grid[ox, oy, oz] = 0
__pyx_t_5 = __pyx_v_ox;
__pyx_t_4 = __pyx_v_oy;
__pyx_t_7 = __pyx_v_oz;
__pyx_t_6 = -1;
if (__pyx_t_5 < 0) {
__pyx_t_5 += __pyx_v_grid.shape[0];
if (unlikely(__pyx_t_5 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_5 >= __pyx_v_grid.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_4 < 0) {
__pyx_t_4 += __pyx_v_grid.shape[1];
if (unlikely(__pyx_t_4 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_4 >= __pyx_v_grid.shape[1])) __pyx_t_6 = 1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_grid.shape[2];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 2;
} else if (unlikely(__pyx_t_7 >= __pyx_v_grid.shape[2])) __pyx_t_6 = 2;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3030, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_5 * __pyx_v_grid.strides[0]) ) + __pyx_t_4 * __pyx_v_grid.strides[1]) ) + __pyx_t_7 * __pyx_v_grid.strides[2]) )) = 0;
__pyx_t_7 = __pyx_v_ox;
__pyx_t_4 = __pyx_v_oy;
__pyx_t_5 = __pyx_v_oz;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_type_grid.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_type_grid.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_4 < 0) {
__pyx_t_4 += __pyx_v_type_grid.shape[1];
if (unlikely(__pyx_t_4 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_4 >= __pyx_v_type_grid.shape[1])) __pyx_t_6 = 1;
if (__pyx_t_5 < 0) {
__pyx_t_5 += __pyx_v_type_grid.shape[2];
if (unlikely(__pyx_t_5 < 0)) __pyx_t_6 = 2;
} else if (unlikely(__pyx_t_5 >= __pyx_v_type_grid.shape[2])) __pyx_t_6 = 2;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3030, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_7 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_4 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_5 * __pyx_v_type_grid.strides[2]) )) = 0;
}
+3031: for j in range(lo, hi + 1):
__pyx_t_1 = (__pyx_v_hi + 1);
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = __pyx_v_lo; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_j = __pyx_t_3;
+3032: grid[bx[j], by[j], bz[j]] = chainID
__pyx_t_5 = (__pyx_v_bx[__pyx_v_j]);
__pyx_t_4 = (__pyx_v_by[__pyx_v_j]);
__pyx_t_7 = (__pyx_v_bz[__pyx_v_j]);
__pyx_t_6 = -1;
if (__pyx_t_5 < 0) {
__pyx_t_5 += __pyx_v_grid.shape[0];
if (unlikely(__pyx_t_5 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_5 >= __pyx_v_grid.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_4 < 0) {
__pyx_t_4 += __pyx_v_grid.shape[1];
if (unlikely(__pyx_t_4 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_4 >= __pyx_v_grid.shape[1])) __pyx_t_6 = 1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_grid.shape[2];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 2;
} else if (unlikely(__pyx_t_7 >= __pyx_v_grid.shape[2])) __pyx_t_6 = 2;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3032, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_5 * __pyx_v_grid.strides[0]) ) + __pyx_t_4 * __pyx_v_grid.strides[1]) ) + __pyx_t_7 * __pyx_v_grid.strides[2]) )) = __pyx_v_chainID;
+3033: type_grid[bx[j], by[j], bz[j]] = idx[off + j, 2]
__pyx_t_7 = (__pyx_v_off + __pyx_v_j);
__pyx_t_4 = 2;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_4 < 0) {
__pyx_t_4 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_4 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_4 >= __pyx_v_idx.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3033, __pyx_L1_error)
}
__pyx_t_5 = (__pyx_v_bx[__pyx_v_j]);
__pyx_t_8 = (__pyx_v_by[__pyx_v_j]);
__pyx_t_9 = (__pyx_v_bz[__pyx_v_j]);
__pyx_t_6 = -1;
if (__pyx_t_5 < 0) {
__pyx_t_5 += __pyx_v_type_grid.shape[0];
if (unlikely(__pyx_t_5 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_5 >= __pyx_v_type_grid.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_type_grid.shape[1];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_8 >= __pyx_v_type_grid.shape[1])) __pyx_t_6 = 1;
if (__pyx_t_9 < 0) {
__pyx_t_9 += __pyx_v_type_grid.shape[2];
if (unlikely(__pyx_t_9 < 0)) __pyx_t_6 = 2;
} else if (unlikely(__pyx_t_9 >= __pyx_v_type_grid.shape[2])) __pyx_t_6 = 2;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3033, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_5 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_8 * __pyx_v_type_grid.strides[1]) ) + __pyx_t_9 * __pyx_v_type_grid.strides[2]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_7 * __pyx_v_idx.strides[0]) ) + __pyx_t_4 * __pyx_v_idx.strides[1]) )));
+3034: idx[off + j, 5] = bx[j]; idx[off + j, 6] = by[j]; idx[off + j, 7] = bz[j]
__pyx_t_4 = (__pyx_v_off + __pyx_v_j);
__pyx_t_7 = 5;
__pyx_t_6 = -1;
if (__pyx_t_4 < 0) {
__pyx_t_4 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_4 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_4 >= __pyx_v_idx.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3034, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_4 * __pyx_v_idx.strides[0]) ) + __pyx_t_7 * __pyx_v_idx.strides[1]) )) = (__pyx_v_bx[__pyx_v_j]);
__pyx_t_7 = (__pyx_v_off + __pyx_v_j);
__pyx_t_4 = 6;
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_4 < 0) {
__pyx_t_4 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_4 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_4 >= __pyx_v_idx.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3034, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_7 * __pyx_v_idx.strides[0]) ) + __pyx_t_4 * __pyx_v_idx.strides[1]) )) = (__pyx_v_by[__pyx_v_j]);
__pyx_t_4 = (__pyx_v_off + __pyx_v_j);
__pyx_t_7 = 7;
__pyx_t_6 = -1;
if (__pyx_t_4 < 0) {
__pyx_t_4 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_4 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_4 >= __pyx_v_idx.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_7 >= __pyx_v_idx.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3034, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_4 * __pyx_v_idx.strides[0]) ) + __pyx_t_7 * __pyx_v_idx.strides[1]) )) = (__pyx_v_bz[__pyx_v_j]);
}
3035:
3036:
+3037: @cython.wraparound(False)
/* Python wrapper */ static PyObject *__pyx_pw_5pimms_15mega_crank_fast_23mega_pull(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_5pimms_15mega_crank_fast_22mega_pull, "\n 3D pull (cooperative reptation) megamove. chain_selector lists chain indices\n to pull (each pull-eligible chain appears PULL_SUBSTEPS times, shuffled).\n Mutates grid / type_grid / idx_to_bead in place. Returns (energy, accepted).\n chain_homo is accepted for signature symmetry with mega_slither but unused.\n "); static PyMethodDef __pyx_mdef_5pimms_15mega_crank_fast_23mega_pull = {"mega_pull", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5pimms_15mega_crank_fast_23mega_pull, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_5pimms_15mega_crank_fast_22mega_pull}; static PyObject *__pyx_pw_5pimms_15mega_crank_fast_23mega_pull(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { __Pyx_memviewslice __pyx_v_grid = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_type_grid = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_idx_to_bead = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_chain_offset = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_chain_length = { 0, 0, { 0 }, { 0 }, { 0 } }; CYTHON_UNUSED __Pyx_memviewslice __pyx_v_chain_homo = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_chain_selector = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_LR_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_SLR_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_angle_lookup = { 0, 0, { 0 }, { 0 }, { 0 } }; long __pyx_v_energy; float __pyx_v_invtemp; int __pyx_v_passed_seed; int __pyx_v_hardwall; int __pyx_v_max_chain_len; #if !CYTHON_METH_FASTCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("mega_pull (wrapper)", 0); #if !CYTHON_METH_FASTCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_grid,&__pyx_mstate_global->__pyx_n_u_type_grid,&__pyx_mstate_global->__pyx_n_u_idx_to_bead,&__pyx_mstate_global->__pyx_n_u_chain_offset,&__pyx_mstate_global->__pyx_n_u_chain_length,&__pyx_mstate_global->__pyx_n_u_chain_homo,&__pyx_mstate_global->__pyx_n_u_chain_selector,&__pyx_mstate_global->__pyx_n_u_interaction_table,&__pyx_mstate_global->__pyx_n_u_LR_interaction_table,&__pyx_mstate_global->__pyx_n_u_SLR_interaction_table,&__pyx_mstate_global->__pyx_n_u_angle_lookup,&__pyx_mstate_global->__pyx_n_u_energy,&__pyx_mstate_global->__pyx_n_u_invtemp,&__pyx_mstate_global->__pyx_n_u_passed_seed,&__pyx_mstate_global->__pyx_n_u_hardwall,&__pyx_mstate_global->__pyx_n_u_max_chain_len,0}; PyObject* values[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 3037, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 16: values[15] = __Pyx_ArgRef_FASTCALL(__pyx_args, 15); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[15])) __PYX_ERR(0, 3037, __pyx_L3_error) CYTHON_FALLTHROUGH; case 15: values[14] = __Pyx_ArgRef_FASTCALL(__pyx_args, 14); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[14])) __PYX_ERR(0, 3037, __pyx_L3_error) CYTHON_FALLTHROUGH; case 14: values[13] = __Pyx_ArgRef_FASTCALL(__pyx_args, 13); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[13])) __PYX_ERR(0, 3037, __pyx_L3_error) CYTHON_FALLTHROUGH; case 13: values[12] = __Pyx_ArgRef_FASTCALL(__pyx_args, 12); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[12])) __PYX_ERR(0, 3037, __pyx_L3_error) CYTHON_FALLTHROUGH; case 12: values[11] = __Pyx_ArgRef_FASTCALL(__pyx_args, 11); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[11])) __PYX_ERR(0, 3037, __pyx_L3_error) CYTHON_FALLTHROUGH; case 11: values[10] = __Pyx_ArgRef_FASTCALL(__pyx_args, 10); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[10])) __PYX_ERR(0, 3037, __pyx_L3_error) CYTHON_FALLTHROUGH; case 10: values[9] = __Pyx_ArgRef_FASTCALL(__pyx_args, 9); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[9])) __PYX_ERR(0, 3037, __pyx_L3_error) CYTHON_FALLTHROUGH; case 9: values[8] = __Pyx_ArgRef_FASTCALL(__pyx_args, 8); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[8])) __PYX_ERR(0, 3037, __pyx_L3_error) CYTHON_FALLTHROUGH; case 8: values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 3037, __pyx_L3_error) CYTHON_FALLTHROUGH; case 7: values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 3037, __pyx_L3_error) CYTHON_FALLTHROUGH; case 6: values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 3037, __pyx_L3_error) CYTHON_FALLTHROUGH; case 5: values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 3037, __pyx_L3_error) CYTHON_FALLTHROUGH; case 4: values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 3037, __pyx_L3_error) CYTHON_FALLTHROUGH; case 3: values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 3037, __pyx_L3_error) CYTHON_FALLTHROUGH; case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 3037, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 3037, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "mega_pull", 0) < (0)) __PYX_ERR(0, 3037, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 16; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("mega_pull", 1, 16, 16, i); __PYX_ERR(0, 3037, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 16)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 3037, __pyx_L3_error) values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 3037, __pyx_L3_error) values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 3037, __pyx_L3_error) values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 3037, __pyx_L3_error) values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 3037, __pyx_L3_error) values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 3037, __pyx_L3_error) values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 3037, __pyx_L3_error) values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 3037, __pyx_L3_error) values[8] = __Pyx_ArgRef_FASTCALL(__pyx_args, 8); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[8])) __PYX_ERR(0, 3037, __pyx_L3_error) values[9] = __Pyx_ArgRef_FASTCALL(__pyx_args, 9); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[9])) __PYX_ERR(0, 3037, __pyx_L3_error) values[10] = __Pyx_ArgRef_FASTCALL(__pyx_args, 10); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[10])) __PYX_ERR(0, 3037, __pyx_L3_error) values[11] = __Pyx_ArgRef_FASTCALL(__pyx_args, 11); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[11])) __PYX_ERR(0, 3037, __pyx_L3_error) values[12] = __Pyx_ArgRef_FASTCALL(__pyx_args, 12); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[12])) __PYX_ERR(0, 3037, __pyx_L3_error) values[13] = __Pyx_ArgRef_FASTCALL(__pyx_args, 13); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[13])) __PYX_ERR(0, 3037, __pyx_L3_error) values[14] = __Pyx_ArgRef_FASTCALL(__pyx_args, 14); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[14])) __PYX_ERR(0, 3037, __pyx_L3_error) values[15] = __Pyx_ArgRef_FASTCALL(__pyx_args, 15); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[15])) __PYX_ERR(0, 3037, __pyx_L3_error) } __pyx_v_grid = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_grid.memview)) __PYX_ERR(0, 3039, __pyx_L3_error) __pyx_v_type_grid = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_type_grid.memview)) __PYX_ERR(0, 3040, __pyx_L3_error) __pyx_v_idx_to_bead = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_idx_to_bead.memview)) __PYX_ERR(0, 3041, __pyx_L3_error) __pyx_v_chain_offset = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_offset.memview)) __PYX_ERR(0, 3042, __pyx_L3_error) __pyx_v_chain_length = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_length.memview)) __PYX_ERR(0, 3043, __pyx_L3_error) __pyx_v_chain_homo = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_homo.memview)) __PYX_ERR(0, 3044, __pyx_L3_error) __pyx_v_chain_selector = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_selector.memview)) __PYX_ERR(0, 3045, __pyx_L3_error) __pyx_v_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[7], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interaction_table.memview)) __PYX_ERR(0, 3046, __pyx_L3_error) __pyx_v_LR_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_LR_interaction_table.memview)) __PYX_ERR(0, 3047, __pyx_L3_error) __pyx_v_SLR_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_SLR_interaction_table.memview)) __PYX_ERR(0, 3048, __pyx_L3_error) __pyx_v_angle_lookup = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsdsdsdsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_angle_lookup.memview)) __PYX_ERR(0, 3049, __pyx_L3_error) __pyx_v_energy = __Pyx_PyLong_As_long(values[11]); if (unlikely((__pyx_v_energy == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 3050, __pyx_L3_error) __pyx_v_invtemp = __Pyx_PyFloat_AsFloat(values[12]); if (unlikely((__pyx_v_invtemp == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 3051, __pyx_L3_error) __pyx_v_passed_seed = __Pyx_PyLong_As_int(values[13]); if (unlikely((__pyx_v_passed_seed == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3052, __pyx_L3_error) __pyx_v_hardwall = __Pyx_PyLong_As_int(values[14]); if (unlikely((__pyx_v_hardwall == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3053, __pyx_L3_error) __pyx_v_max_chain_len = __Pyx_PyLong_As_int(values[15]); if (unlikely((__pyx_v_max_chain_len == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3054, __pyx_L3_error) } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("mega_pull", 1, 16, 16, __pyx_nargs); __PYX_ERR(0, 3037, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __PYX_XCLEAR_MEMVIEW(&__pyx_v_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_type_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_idx_to_bead, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_offset, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_length, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_homo, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_selector, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_LR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_SLR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_angle_lookup, 1); __Pyx_AddTraceback("pimms.mega_crank_fast.mega_pull", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5pimms_15mega_crank_fast_22mega_pull(__pyx_self, __pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, __pyx_v_chain_offset, __pyx_v_chain_length, __pyx_v_chain_homo, __pyx_v_chain_selector, __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_angle_lookup, __pyx_v_energy, __pyx_v_invtemp, __pyx_v_passed_seed, __pyx_v_hardwall, __pyx_v_max_chain_len); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __PYX_XCLEAR_MEMVIEW(&__pyx_v_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_type_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_idx_to_bead, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_offset, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_length, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_homo, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_selector, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_LR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_SLR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_angle_lookup, 1); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5pimms_15mega_crank_fast_22mega_pull(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_grid, __Pyx_memviewslice __pyx_v_type_grid, __Pyx_memviewslice __pyx_v_idx_to_bead, __Pyx_memviewslice __pyx_v_chain_offset, __Pyx_memviewslice __pyx_v_chain_length, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_chain_homo, __Pyx_memviewslice __pyx_v_chain_selector, __Pyx_memviewslice __pyx_v_interaction_table, __Pyx_memviewslice __pyx_v_LR_interaction_table, __Pyx_memviewslice __pyx_v_SLR_interaction_table, __Pyx_memviewslice __pyx_v_angle_lookup, long __pyx_v_energy, float __pyx_v_invtemp, int __pyx_v_passed_seed, int __pyx_v_hardwall, int __pyx_v_max_chain_len) { int __pyx_v_XDIM; int __pyx_v_YDIM; int __pyx_v_ZDIM; int __pyx_v_n_steps; int __pyx_v_accepted; int __pyx_v_step; int __pyx_v_c; int __pyx_v_off; int __pyx_v_L; int __pyx_v_chainID; int __pyx_v_i; int __pyx_v_j; int __pyx_v_k; int __pyx_v_direction; int __pyx_v_nF; int __pyx_v_nR; int __pyx_v_r; int __pyx_v_restored; int __pyx_v_lo; int __pyx_v_hi; long __pyx_v_de; int __pyx_v_sx; int __pyx_v_sy; int __pyx_v_sz; int __pyx_v_ox; int __pyx_v_oy; int __pyx_v_oz; int __pyx_v_tx; int __pyx_v_ty; int __pyx_v_tz; int __pyx_v_pnx; int __pyx_v_pny; int __pyx_v_pnz; int __pyx_v_newp[3]; int __pyx_v_tbuf[81]; int *__pyx_v_bx; int *__pyx_v_by; int *__pyx_v_bz; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_15); __Pyx_XDECREF(__pyx_t_16); __Pyx_XDECREF(__pyx_t_17); __Pyx_AddTraceback("pimms.mega_crank_fast.mega_pull", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_5pimms_15mega_crank_fast_23mega_pull, 0, __pyx_mstate_global->__pyx_n_u_mega_pull, NULL, __pyx_mstate_global->__pyx_n_u_pimms_mega_crank_fast, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[17])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3037, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_mega_pull, __pyx_t_4) < (0)) __PYX_ERR(0, 3037, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
3038: @cython.boundscheck(False)
3039: def mega_pull(NUMPY_INT_TYPE[:, :, :] grid,
3040: NUMPY_INT_TYPE[:, :, :] type_grid,
3041: NUMPY_INT_TYPE_long[:, :] idx_to_bead,
3042: int[::1] chain_offset,
3043: int[::1] chain_length,
3044: int[::1] chain_homo,
3045: int[::1] chain_selector,
3046: NUMPY_INT_TYPE[:, :] interaction_table,
3047: NUMPY_INT_TYPE[:, :] LR_interaction_table,
3048: NUMPY_INT_TYPE[:, :] SLR_interaction_table,
3049: NUMPY_INT_TYPE[:, :, :, :, :, :, :] angle_lookup,
3050: long energy,
3051: float invtemp,
3052: int passed_seed,
3053: int hardwall,
3054: int max_chain_len):
3055: """
3056: 3D pull (cooperative reptation) megamove. chain_selector lists chain indices
3057: to pull (each pull-eligible chain appears PULL_SUBSTEPS times, shuffled).
3058: Mutates grid / type_grid / idx_to_bead in place. Returns (energy, accepted).
3059: chain_homo is accepted for signature symmetry with mega_slither but unused.
3060: """
+3061: mc_seed(passed_seed)
__pyx_f_5pimms_15mega_crank_fast_mc_seed(__pyx_v_passed_seed);
3062:
+3063: cdef int XDIM = grid.shape[0]
__pyx_v_XDIM = (__pyx_v_grid.shape[0]);
+3064: cdef int YDIM = grid.shape[1]
__pyx_v_YDIM = (__pyx_v_grid.shape[1]);
+3065: cdef int ZDIM = grid.shape[2]
__pyx_v_ZDIM = (__pyx_v_grid.shape[2]);
+3066: cdef int n_steps = chain_selector.shape[0]
__pyx_v_n_steps = (__pyx_v_chain_selector.shape[0]);
+3067: cdef int accepted = 0
__pyx_v_accepted = 0;
3068:
3069: cdef int step, c, off, L, chainID, i, j, k, direction, nF, nR, r, restored, lo, hi
3070: cdef long de
3071: cdef int sx, sy, sz, ox, oy, oz, tx, ty, tz, pnx, pny, pnz
3072: cdef int newp[3]
3073: cdef int tbuf[81]
3074:
+3075: cdef int* bx = <int*> malloc(max_chain_len * sizeof(int))
__pyx_v_bx = ((int *)malloc((__pyx_v_max_chain_len * (sizeof(int)))));
+3076: cdef int* by = <int*> malloc(max_chain_len * sizeof(int))
__pyx_v_by = ((int *)malloc((__pyx_v_max_chain_len * (sizeof(int)))));
+3077: cdef int* bz = <int*> malloc(max_chain_len * sizeof(int))
__pyx_v_bz = ((int *)malloc((__pyx_v_max_chain_len * (sizeof(int)))));
+3078: if bx == NULL or by == NULL or bz == NULL:
__pyx_t_2 = (__pyx_v_bx == NULL);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = (__pyx_v_by == NULL);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = (__pyx_v_bz == NULL);
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+3079: if bx != NULL: free(bx)
__pyx_t_1 = (__pyx_v_bx != NULL);
if (__pyx_t_1) {
free(__pyx_v_bx);
}
+3080: if by != NULL: free(by)
__pyx_t_1 = (__pyx_v_by != NULL);
if (__pyx_t_1) {
free(__pyx_v_by);
}
+3081: if bz != NULL: free(bz)
__pyx_t_1 = (__pyx_v_bz != NULL);
if (__pyx_t_1) {
free(__pyx_v_bz);
}
+3082: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 3082, __pyx_L1_error)
3083:
+3084: try:
/*try:*/ {
+3085: for step in range(n_steps):
__pyx_t_3 = __pyx_v_n_steps;
__pyx_t_4 = __pyx_t_3;
for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
__pyx_v_step = __pyx_t_5;
+3086: c = chain_selector[step]
__pyx_t_6 = __pyx_v_step;
__pyx_v_c = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_chain_selector.data) + __pyx_t_6)) )));
+3087: off = chain_offset[c]
__pyx_t_6 = __pyx_v_c;
__pyx_v_off = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_chain_offset.data) + __pyx_t_6)) )));
+3088: L = chain_length[c]
__pyx_t_6 = __pyx_v_c;
__pyx_v_L = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_chain_length.data) + __pyx_t_6)) )));
+3089: if L < 3:
__pyx_t_1 = (__pyx_v_L < 3);
if (__pyx_t_1) {
/* … */
}
+3090: continue
goto __pyx_L13_continue;
+3091: chainID = idx_to_bead[off, 4]
__pyx_t_6 = __pyx_v_off;
__pyx_t_7 = 4;
__pyx_v_chainID = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
3092:
+3093: for j in range(L):
__pyx_t_8 = __pyx_v_L;
__pyx_t_9 = __pyx_t_8;
for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
__pyx_v_j = __pyx_t_10;
+3094: bx[j] = idx_to_bead[off + j, 5]
__pyx_t_7 = (__pyx_v_off + __pyx_v_j);
__pyx_t_6 = 5;
(__pyx_v_bx[__pyx_v_j]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+3095: by[j] = idx_to_bead[off + j, 6]
__pyx_t_6 = (__pyx_v_off + __pyx_v_j);
__pyx_t_7 = 6;
(__pyx_v_by[__pyx_v_j]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
+3096: bz[j] = idx_to_bead[off + j, 7]
__pyx_t_7 = (__pyx_v_off + __pyx_v_j);
__pyx_t_6 = 7;
(__pyx_v_bz[__pyx_v_j]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
}
3097:
+3098: i = 1 + randint(0, L - 3) # interior bead in [1, L-2]
__pyx_v_i = (1 + __pyx_f_5pimms_15mega_crank_fast_randint(0, (__pyx_v_L - 3)));
+3099: direction = randint(0, 1) # 0 = C-ward (anchor i-1), 1 = N-ward (anchor i+1)
__pyx_v_direction = __pyx_f_5pimms_15mega_crank_fast_randint(0, 1);
+3100: restored = 0
__pyx_v_restored = 0;
+3101: nR = 0
__pyx_v_nR = 0;
3102:
+3103: if direction == 0:
__pyx_t_1 = (__pyx_v_direction == 0);
if (__pyx_t_1) {
/* … */
goto __pyx_L18;
}
+3104: nF = pull_first_targets(grid, bx[i - 1], by[i - 1], bz[i - 1],
__pyx_v_nF = __pyx_f_5pimms_15mega_crank_fast_pull_first_targets(__pyx_v_grid, (__pyx_v_bx[(__pyx_v_i - 1)]), (__pyx_v_by[(__pyx_v_i - 1)]), (__pyx_v_bz[(__pyx_v_i - 1)]), (__pyx_v_bx[__pyx_v_i]), (__pyx_v_by[__pyx_v_i]), (__pyx_v_bz[__pyx_v_i]), __pyx_v_hardwall, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_tbuf);
3105: bx[i], by[i], bz[i], hardwall, XDIM, YDIM, ZDIM, tbuf)
+3106: if nF == 0:
__pyx_t_1 = (__pyx_v_nF == 0);
if (__pyx_t_1) {
/* … */
}
+3107: continue
goto __pyx_L13_continue;
+3108: r = randint(0, nF - 1)
__pyx_v_r = __pyx_f_5pimms_15mega_crank_fast_randint(0, (__pyx_v_nF - 1));
+3109: sx = tbuf[3 * r]; sy = tbuf[3 * r + 1]; sz = tbuf[3 * r + 2]
__pyx_v_sx = (__pyx_v_tbuf[(3 * __pyx_v_r)]);
__pyx_v_sy = (__pyx_v_tbuf[((3 * __pyx_v_r) + 1)]);
__pyx_v_sz = (__pyx_v_tbuf[((3 * __pyx_v_r) + 2)]);
+3110: de = get_energy_change_c(grid, type_grid, bx[i], by[i], bz[i], sx, sy, sz,
__pyx_v_de = __pyx_f_5pimms_15mega_crank_fast_get_energy_change_c(__pyx_v_grid, __pyx_v_type_grid, (__pyx_v_bx[__pyx_v_i]), (__pyx_v_by[__pyx_v_i]), (__pyx_v_bz[__pyx_v_i]), __pyx_v_sx, __pyx_v_sy, __pyx_v_sz, (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_hardwall);
+3111: idx_to_bead[off + i, 1], interaction_table, LR_interaction_table,
__pyx_t_6 = (__pyx_v_off + __pyx_v_i);
__pyx_t_7 = 1;
3112: SLR_interaction_table, XDIM, YDIM, ZDIM, hardwall)
+3113: newp[0] = sx; newp[1] = sy; newp[2] = sz
(__pyx_v_newp[0]) = __pyx_v_sx;
(__pyx_v_newp[1]) = __pyx_v_sy;
(__pyx_v_newp[2]) = __pyx_v_sz;
+3114: de = de + get_angle_energy_change_c(off + i, idx_to_bead, newp, angle_lookup)
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_c((__pyx_v_off + __pyx_v_i), __pyx_v_idx_to_bead, __pyx_v_newp, __pyx_v_angle_lookup));
+3115: _apply_bead_move(grid, type_grid, idx_to_bead, off + i, bx[i], by[i], bz[i], sx, sy, sz, chainID)
__pyx_f_5pimms_15mega_crank_fast__apply_bead_move(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, (__pyx_v_off + __pyx_v_i), (__pyx_v_bx[__pyx_v_i]), (__pyx_v_by[__pyx_v_i]), (__pyx_v_bz[__pyx_v_i]), __pyx_v_sx, __pyx_v_sy, __pyx_v_sz, __pyx_v_chainID);
+3116: pnx = sx; pny = sy; pnz = sz
__pyx_v_pnx = __pyx_v_sx;
__pyx_v_pny = __pyx_v_sy;
__pyx_v_pnz = __pyx_v_sz;
+3117: k = i
__pyx_v_k = __pyx_v_i;
+3118: for j in range(i + 1, L):
__pyx_t_8 = __pyx_v_L;
__pyx_t_9 = __pyx_t_8;
for (__pyx_t_10 = (__pyx_v_i + 1); __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
__pyx_v_j = __pyx_t_10;
+3119: if cheby_adjacent(pnx, pny, pnz, bx[j], by[j], bz[j], XDIM, YDIM, ZDIM, hardwall) == 1:
__pyx_t_1 = (__pyx_f_5pimms_15mega_crank_fast_cheby_adjacent(__pyx_v_pnx, __pyx_v_pny, __pyx_v_pnz, (__pyx_v_bx[__pyx_v_j]), (__pyx_v_by[__pyx_v_j]), (__pyx_v_bz[__pyx_v_j]), __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_hardwall) == 1);
if (__pyx_t_1) {
/* … */
}
+3120: k = j - 1; restored = 1; break
__pyx_v_k = (__pyx_v_j - 1);
__pyx_v_restored = 1;
goto __pyx_L21_break;
+3121: ox = bx[j]; oy = by[j]; oz = bz[j]
__pyx_v_ox = (__pyx_v_bx[__pyx_v_j]);
__pyx_v_oy = (__pyx_v_by[__pyx_v_j]);
__pyx_v_oz = (__pyx_v_bz[__pyx_v_j]);
+3122: tx = bx[j - 1]; ty = by[j - 1]; tz = bz[j - 1]
__pyx_v_tx = (__pyx_v_bx[(__pyx_v_j - 1)]);
__pyx_v_ty = (__pyx_v_by[(__pyx_v_j - 1)]);
__pyx_v_tz = (__pyx_v_bz[(__pyx_v_j - 1)]);
+3123: de = de + get_energy_change_c(grid, type_grid, ox, oy, oz, tx, ty, tz,
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_energy_change_c(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_ox, __pyx_v_oy, __pyx_v_oz, __pyx_v_tx, __pyx_v_ty, __pyx_v_tz, (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_hardwall));
+3124: idx_to_bead[off + j, 1], interaction_table, LR_interaction_table,
__pyx_t_7 = (__pyx_v_off + __pyx_v_j);
__pyx_t_6 = 1;
3125: SLR_interaction_table, XDIM, YDIM, ZDIM, hardwall)
+3126: newp[0] = tx; newp[1] = ty; newp[2] = tz
(__pyx_v_newp[0]) = __pyx_v_tx;
(__pyx_v_newp[1]) = __pyx_v_ty;
(__pyx_v_newp[2]) = __pyx_v_tz;
+3127: de = de + get_angle_energy_change_c(off + j, idx_to_bead, newp, angle_lookup)
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_c((__pyx_v_off + __pyx_v_j), __pyx_v_idx_to_bead, __pyx_v_newp, __pyx_v_angle_lookup));
+3128: _apply_bead_move(grid, type_grid, idx_to_bead, off + j, ox, oy, oz, tx, ty, tz, chainID)
__pyx_f_5pimms_15mega_crank_fast__apply_bead_move(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, (__pyx_v_off + __pyx_v_j), __pyx_v_ox, __pyx_v_oy, __pyx_v_oz, __pyx_v_tx, __pyx_v_ty, __pyx_v_tz, __pyx_v_chainID);
+3129: pnx = tx; pny = ty; pnz = tz
__pyx_v_pnx = __pyx_v_tx;
__pyx_v_pny = __pyx_v_ty;
__pyx_v_pnz = __pyx_v_tz;
+3130: k = j
__pyx_v_k = __pyx_v_j;
}
__pyx_L21_break:;
+3131: lo = i; hi = k
__pyx_v_lo = __pyx_v_i;
__pyx_v_hi = __pyx_v_k;
+3132: if restored == 1:
__pyx_t_1 = (__pyx_v_restored == 1);
if (__pyx_t_1) {
/* … */
}
+3133: nR = pull_first_targets(grid, bx[k + 1], by[k + 1], bz[k + 1],
__pyx_v_nR = __pyx_f_5pimms_15mega_crank_fast_pull_first_targets(__pyx_v_grid, (__pyx_v_bx[(__pyx_v_k + 1)]), (__pyx_v_by[(__pyx_v_k + 1)]), (__pyx_v_bz[(__pyx_v_k + 1)]), (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) ))), (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_11 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_12 * __pyx_v_idx_to_bead.strides[1]) ))), (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_13 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_14 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_hardwall, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_tbuf);
+3134: idx_to_bead[off + k, 5], idx_to_bead[off + k, 6], idx_to_bead[off + k, 7],
__pyx_t_6 = (__pyx_v_off + __pyx_v_k);
__pyx_t_7 = 5;
__pyx_t_11 = (__pyx_v_off + __pyx_v_k);
__pyx_t_12 = 6;
__pyx_t_13 = (__pyx_v_off + __pyx_v_k);
__pyx_t_14 = 7;
3135: hardwall, XDIM, YDIM, ZDIM, tbuf)
3136: else:
+3137: nF = pull_first_targets(grid, bx[i + 1], by[i + 1], bz[i + 1],
/*else*/ {
/* … */
__pyx_v_nF = __pyx_f_5pimms_15mega_crank_fast_pull_first_targets(__pyx_v_grid, (__pyx_v_bx[(__pyx_v_i + 1)]), (__pyx_v_by[(__pyx_v_i + 1)]), (__pyx_v_bz[(__pyx_v_i + 1)]), (__pyx_v_bx[__pyx_v_i]), (__pyx_v_by[__pyx_v_i]), (__pyx_v_bz[__pyx_v_i]), __pyx_v_hardwall, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_tbuf);
3138: bx[i], by[i], bz[i], hardwall, XDIM, YDIM, ZDIM, tbuf)
+3139: if nF == 0:
__pyx_t_1 = (__pyx_v_nF == 0);
if (__pyx_t_1) {
/* … */
}
+3140: continue
goto __pyx_L13_continue;
+3141: r = randint(0, nF - 1)
__pyx_v_r = __pyx_f_5pimms_15mega_crank_fast_randint(0, (__pyx_v_nF - 1));
+3142: sx = tbuf[3 * r]; sy = tbuf[3 * r + 1]; sz = tbuf[3 * r + 2]
__pyx_v_sx = (__pyx_v_tbuf[(3 * __pyx_v_r)]);
__pyx_v_sy = (__pyx_v_tbuf[((3 * __pyx_v_r) + 1)]);
__pyx_v_sz = (__pyx_v_tbuf[((3 * __pyx_v_r) + 2)]);
+3143: de = get_energy_change_c(grid, type_grid, bx[i], by[i], bz[i], sx, sy, sz,
__pyx_v_de = __pyx_f_5pimms_15mega_crank_fast_get_energy_change_c(__pyx_v_grid, __pyx_v_type_grid, (__pyx_v_bx[__pyx_v_i]), (__pyx_v_by[__pyx_v_i]), (__pyx_v_bz[__pyx_v_i]), __pyx_v_sx, __pyx_v_sy, __pyx_v_sz, (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_14 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_13 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_hardwall);
+3144: idx_to_bead[off + i, 1], interaction_table, LR_interaction_table,
__pyx_t_14 = (__pyx_v_off + __pyx_v_i);
__pyx_t_13 = 1;
3145: SLR_interaction_table, XDIM, YDIM, ZDIM, hardwall)
+3146: newp[0] = sx; newp[1] = sy; newp[2] = sz
(__pyx_v_newp[0]) = __pyx_v_sx;
(__pyx_v_newp[1]) = __pyx_v_sy;
(__pyx_v_newp[2]) = __pyx_v_sz;
+3147: de = de + get_angle_energy_change_c(off + i, idx_to_bead, newp, angle_lookup)
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_c((__pyx_v_off + __pyx_v_i), __pyx_v_idx_to_bead, __pyx_v_newp, __pyx_v_angle_lookup));
+3148: _apply_bead_move(grid, type_grid, idx_to_bead, off + i, bx[i], by[i], bz[i], sx, sy, sz, chainID)
__pyx_f_5pimms_15mega_crank_fast__apply_bead_move(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, (__pyx_v_off + __pyx_v_i), (__pyx_v_bx[__pyx_v_i]), (__pyx_v_by[__pyx_v_i]), (__pyx_v_bz[__pyx_v_i]), __pyx_v_sx, __pyx_v_sy, __pyx_v_sz, __pyx_v_chainID);
+3149: pnx = sx; pny = sy; pnz = sz
__pyx_v_pnx = __pyx_v_sx;
__pyx_v_pny = __pyx_v_sy;
__pyx_v_pnz = __pyx_v_sz;
+3150: k = i
__pyx_v_k = __pyx_v_i;
+3151: for j in range(i - 1, -1, -1):
for (__pyx_t_8 = (__pyx_v_i - 1); __pyx_t_8 > -1; __pyx_t_8-=1) {
__pyx_v_j = __pyx_t_8;
+3152: if cheby_adjacent(pnx, pny, pnz, bx[j], by[j], bz[j], XDIM, YDIM, ZDIM, hardwall) == 1:
__pyx_t_1 = (__pyx_f_5pimms_15mega_crank_fast_cheby_adjacent(__pyx_v_pnx, __pyx_v_pny, __pyx_v_pnz, (__pyx_v_bx[__pyx_v_j]), (__pyx_v_by[__pyx_v_j]), (__pyx_v_bz[__pyx_v_j]), __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_hardwall) == 1);
if (__pyx_t_1) {
/* … */
}
+3153: k = j + 1; restored = 1; break
__pyx_v_k = (__pyx_v_j + 1);
__pyx_v_restored = 1;
goto __pyx_L26_break;
+3154: ox = bx[j]; oy = by[j]; oz = bz[j]
__pyx_v_ox = (__pyx_v_bx[__pyx_v_j]);
__pyx_v_oy = (__pyx_v_by[__pyx_v_j]);
__pyx_v_oz = (__pyx_v_bz[__pyx_v_j]);
+3155: tx = bx[j + 1]; ty = by[j + 1]; tz = bz[j + 1]
__pyx_v_tx = (__pyx_v_bx[(__pyx_v_j + 1)]);
__pyx_v_ty = (__pyx_v_by[(__pyx_v_j + 1)]);
__pyx_v_tz = (__pyx_v_bz[(__pyx_v_j + 1)]);
+3156: de = de + get_energy_change_c(grid, type_grid, ox, oy, oz, tx, ty, tz,
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_energy_change_c(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_ox, __pyx_v_oy, __pyx_v_oz, __pyx_v_tx, __pyx_v_ty, __pyx_v_tz, (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_13 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_14 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_hardwall));
+3157: idx_to_bead[off + j, 1], interaction_table, LR_interaction_table,
__pyx_t_13 = (__pyx_v_off + __pyx_v_j);
__pyx_t_14 = 1;
3158: SLR_interaction_table, XDIM, YDIM, ZDIM, hardwall)
+3159: newp[0] = tx; newp[1] = ty; newp[2] = tz
(__pyx_v_newp[0]) = __pyx_v_tx;
(__pyx_v_newp[1]) = __pyx_v_ty;
(__pyx_v_newp[2]) = __pyx_v_tz;
+3160: de = de + get_angle_energy_change_c(off + j, idx_to_bead, newp, angle_lookup)
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_c((__pyx_v_off + __pyx_v_j), __pyx_v_idx_to_bead, __pyx_v_newp, __pyx_v_angle_lookup));
+3161: _apply_bead_move(grid, type_grid, idx_to_bead, off + j, ox, oy, oz, tx, ty, tz, chainID)
__pyx_f_5pimms_15mega_crank_fast__apply_bead_move(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, (__pyx_v_off + __pyx_v_j), __pyx_v_ox, __pyx_v_oy, __pyx_v_oz, __pyx_v_tx, __pyx_v_ty, __pyx_v_tz, __pyx_v_chainID);
+3162: pnx = tx; pny = ty; pnz = tz
__pyx_v_pnx = __pyx_v_tx;
__pyx_v_pny = __pyx_v_ty;
__pyx_v_pnz = __pyx_v_tz;
+3163: k = j
__pyx_v_k = __pyx_v_j;
}
__pyx_L26_break:;
+3164: lo = k; hi = i
__pyx_v_lo = __pyx_v_k;
__pyx_v_hi = __pyx_v_i;
+3165: if restored == 1:
__pyx_t_1 = (__pyx_v_restored == 1);
if (__pyx_t_1) {
/* … */
}
}
__pyx_L18:;
+3166: nR = pull_first_targets(grid, bx[k - 1], by[k - 1], bz[k - 1],
__pyx_v_nR = __pyx_f_5pimms_15mega_crank_fast_pull_first_targets(__pyx_v_grid, (__pyx_v_bx[(__pyx_v_k - 1)]), (__pyx_v_by[(__pyx_v_k - 1)]), (__pyx_v_bz[(__pyx_v_k - 1)]), (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_14 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_13 * __pyx_v_idx_to_bead.strides[1]) ))), (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_12 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_11 * __pyx_v_idx_to_bead.strides[1]) ))), (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_hardwall, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_tbuf);
+3167: idx_to_bead[off + k, 5], idx_to_bead[off + k, 6], idx_to_bead[off + k, 7],
__pyx_t_14 = (__pyx_v_off + __pyx_v_k);
__pyx_t_13 = 5;
__pyx_t_12 = (__pyx_v_off + __pyx_v_k);
__pyx_t_11 = 6;
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_6 = 7;
3168: hardwall, XDIM, YDIM, ZDIM, tbuf)
3169:
+3170: if restored == 0:
__pyx_t_1 = (__pyx_v_restored == 0);
if (__pyx_t_1) {
/* … */
}
3171: # cascade reached a terminus -> reject (no valid reverse anchor)
+3172: _revert_segment(grid, type_grid, idx_to_bead, off, lo, hi, bx, by, bz, chainID)
__pyx_f_5pimms_15mega_crank_fast__revert_segment(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, __pyx_v_off, __pyx_v_lo, __pyx_v_hi, __pyx_v_bx, __pyx_v_by, __pyx_v_bz, __pyx_v_chainID);
+3173: continue
goto __pyx_L13_continue;
3174:
3175: # Metropolis-Hastings with the nF/nR proposal-multiplicity correction
+3176: if accept_or_reject_ratio(invtemp, energy, energy + de, nF, nR) == 1:
__pyx_t_1 = (__pyx_f_5pimms_15mega_crank_fast_accept_or_reject_ratio(__pyx_v_invtemp, __pyx_v_energy, (__pyx_v_energy + __pyx_v_de), __pyx_v_nF, __pyx_v_nR) == 1);
if (__pyx_t_1) {
/* … */
goto __pyx_L30;
}
+3177: energy = energy + de
__pyx_v_energy = (__pyx_v_energy + __pyx_v_de);
+3178: accepted = accepted + 1
__pyx_v_accepted = (__pyx_v_accepted + 1);
3179: else:
+3180: _revert_segment(grid, type_grid, idx_to_bead, off, lo, hi, bx, by, bz, chainID)
/*else*/ {
__pyx_f_5pimms_15mega_crank_fast__revert_segment(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, __pyx_v_off, __pyx_v_lo, __pyx_v_hi, __pyx_v_bx, __pyx_v_by, __pyx_v_bz, __pyx_v_chainID);
}
__pyx_L30:;
__pyx_L13_continue:;
}
}
3181: finally:
+3182: free(bx); free(by); free(bz)
/*finally:*/ {
/*normal exit:*/{
free(__pyx_v_bx);
free(__pyx_v_by);
free(__pyx_v_bz);
goto __pyx_L12;
}
__pyx_L12:;
}
3183:
+3184: return (energy, accepted)
__Pyx_XDECREF(__pyx_r); __pyx_t_15 = __Pyx_PyLong_From_long(__pyx_v_energy); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __pyx_t_16 = __Pyx_PyLong_From_int(__pyx_v_accepted); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_17 = PyTuple_New(2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_GIVEREF(__pyx_t_15); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_15) != (0)) __PYX_ERR(0, 3184, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_16); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_17, 1, __pyx_t_16) != (0)) __PYX_ERR(0, 3184, __pyx_L1_error); __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_r = __pyx_t_17; __pyx_t_17 = 0; goto __pyx_L0;
3185:
3186:
3187: # =====================================================================
3188: # PULL megamove kernel - 2D variant (mirrors mega_pull; see its notes)
3189: # =====================================================================
3190:
+3191: cdef inline int cheby_adjacent_2D(int ax, int ay, int bx, int by,
static CYTHON_INLINE int __pyx_f_5pimms_15mega_crank_fast_cheby_adjacent_2D(int __pyx_v_ax, int __pyx_v_ay, int __pyx_v_bx, int __pyx_v_by, int __pyx_v_XDIM, int __pyx_v_YDIM, int __pyx_v_hardwall) {
int __pyx_v_dx;
int __pyx_v_dy;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
3192: int XDIM, int YDIM, int hardwall) noexcept nogil:
+3193: cdef int dx = ax - bx
__pyx_v_dx = (__pyx_v_ax - __pyx_v_bx);
+3194: cdef int dy = ay - by
__pyx_v_dy = (__pyx_v_ay - __pyx_v_by);
+3195: if dx < 0: dx = -dx
__pyx_t_1 = (__pyx_v_dx < 0);
if (__pyx_t_1) {
__pyx_v_dx = (-__pyx_v_dx);
}
+3196: if dy < 0: dy = -dy
__pyx_t_1 = (__pyx_v_dy < 0);
if (__pyx_t_1) {
__pyx_v_dy = (-__pyx_v_dy);
}
+3197: if hardwall == 0:
__pyx_t_1 = (__pyx_v_hardwall == 0);
if (__pyx_t_1) {
/* … */
}
+3198: if XDIM - dx < dx: dx = XDIM - dx
__pyx_t_1 = ((__pyx_v_XDIM - __pyx_v_dx) < __pyx_v_dx);
if (__pyx_t_1) {
__pyx_v_dx = (__pyx_v_XDIM - __pyx_v_dx);
}
+3199: if YDIM - dy < dy: dy = YDIM - dy
__pyx_t_1 = ((__pyx_v_YDIM - __pyx_v_dy) < __pyx_v_dy);
if (__pyx_t_1) {
__pyx_v_dy = (__pyx_v_YDIM - __pyx_v_dy);
}
+3200: if dx <= 1 and dy <= 1:
__pyx_t_2 = (__pyx_v_dx <= 1);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L9_bool_binop_done;
}
__pyx_t_2 = (__pyx_v_dy <= 1);
__pyx_t_1 = __pyx_t_2;
__pyx_L9_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+3201: return 1
__pyx_r = 1;
goto __pyx_L0;
+3202: return 0
__pyx_r = 0; goto __pyx_L0;
3203:
3204:
+3205: cdef int pull_first_targets_2D(NUMPY_INT_TYPE[:, :] grid,
static int __pyx_f_5pimms_15mega_crank_fast_pull_first_targets_2D(__Pyx_memviewslice __pyx_v_grid, int __pyx_v_anchor_x, int __pyx_v_anchor_y, int __pyx_v_mov_x, int __pyx_v_mov_y, int __pyx_v_hardwall, int __pyx_v_XDIM, int __pyx_v_YDIM, int *__pyx_v_out_buf) {
int __pyx_v_count;
int __pyx_v_dx;
int __pyx_v_dy;
int __pyx_v_tx;
int __pyx_v_ty;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast.pull_first_targets_2D", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
return __pyx_r;
}
3206: int anchor_x, int anchor_y,
3207: int mov_x, int mov_y,
3208: int hardwall, int XDIM, int YDIM,
3209: int* out_buf) noexcept nogil:
+3210: cdef int count = 0
__pyx_v_count = 0;
3211: cdef int dx, dy, tx, ty
+3212: for dx in range(-1, 2):
for (__pyx_t_1 = -1; __pyx_t_1 < 2; __pyx_t_1+=1) {
__pyx_v_dx = __pyx_t_1;
+3213: for dy in range(-1, 2):
for (__pyx_t_2 = -1; __pyx_t_2 < 2; __pyx_t_2+=1) {
__pyx_v_dy = __pyx_t_2;
+3214: tx = pbc_correction(mov_x + dx, XDIM)
__pyx_v_tx = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_mov_x + __pyx_v_dx), __pyx_v_XDIM);
+3215: ty = pbc_correction(mov_y + dy, YDIM)
__pyx_v_ty = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_mov_y + __pyx_v_dy), __pyx_v_YDIM);
+3216: if grid[tx, ty] != 0:
__pyx_t_3 = __pyx_v_tx;
__pyx_t_4 = __pyx_v_ty;
__pyx_t_5 = -1;
if (__pyx_t_3 < 0) {
__pyx_t_3 += __pyx_v_grid.shape[0];
if (unlikely(__pyx_t_3 < 0)) __pyx_t_5 = 0;
} else if (unlikely(__pyx_t_3 >= __pyx_v_grid.shape[0])) __pyx_t_5 = 0;
if (__pyx_t_4 < 0) {
__pyx_t_4 += __pyx_v_grid.shape[1];
if (unlikely(__pyx_t_4 < 0)) __pyx_t_5 = 1;
} else if (unlikely(__pyx_t_4 >= __pyx_v_grid.shape[1])) __pyx_t_5 = 1;
if (unlikely(__pyx_t_5 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_5);
__PYX_ERR(0, 3216, __pyx_L1_error)
}
__pyx_t_6 = ((*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_3 * __pyx_v_grid.strides[0]) ) + __pyx_t_4 * __pyx_v_grid.strides[1]) ))) != 0);
if (__pyx_t_6) {
/* … */
}
+3217: continue
goto __pyx_L5_continue;
+3218: if cheby_adjacent_2D(tx, ty, mov_x, mov_y, XDIM, YDIM, hardwall) == 0:
__pyx_t_6 = (__pyx_f_5pimms_15mega_crank_fast_cheby_adjacent_2D(__pyx_v_tx, __pyx_v_ty, __pyx_v_mov_x, __pyx_v_mov_y, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_hardwall) == 0);
if (__pyx_t_6) {
/* … */
}
+3219: continue
goto __pyx_L5_continue;
+3220: if cheby_adjacent_2D(tx, ty, anchor_x, anchor_y, XDIM, YDIM, hardwall) == 0:
__pyx_t_6 = (__pyx_f_5pimms_15mega_crank_fast_cheby_adjacent_2D(__pyx_v_tx, __pyx_v_ty, __pyx_v_anchor_x, __pyx_v_anchor_y, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_hardwall) == 0);
if (__pyx_t_6) {
/* … */
}
+3221: continue
goto __pyx_L5_continue;
+3222: out_buf[2 * count] = tx
(__pyx_v_out_buf[(2 * __pyx_v_count)]) = __pyx_v_tx;
+3223: out_buf[2 * count + 1] = ty
(__pyx_v_out_buf[((2 * __pyx_v_count) + 1)]) = __pyx_v_ty;
+3224: count = count + 1
__pyx_v_count = (__pyx_v_count + 1);
__pyx_L5_continue:;
}
}
+3225: return count
__pyx_r = __pyx_v_count; goto __pyx_L0;
3226:
3227:
+3228: cdef inline void _revert_segment_2D(NUMPY_INT_TYPE[:, :] grid, NUMPY_INT_TYPE[:, :] type_grid,
static CYTHON_INLINE void __pyx_f_5pimms_15mega_crank_fast__revert_segment_2D(__Pyx_memviewslice __pyx_v_grid, __Pyx_memviewslice __pyx_v_type_grid, __Pyx_memviewslice __pyx_v_idx, int __pyx_v_off, int __pyx_v_lo, int __pyx_v_hi, int *__pyx_v_bx, int *__pyx_v_by, int __pyx_v_chainID) {
int __pyx_v_j;
int __pyx_v_ox;
int __pyx_v_oy;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast._revert_segment_2D", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
}
3229: NUMPY_INT_TYPE_long[:, :] idx, int off, int lo, int hi,
3230: int* bx, int* by, int chainID) noexcept nogil:
3231: cdef int j, ox, oy
+3232: for j in range(lo, hi + 1):
__pyx_t_1 = (__pyx_v_hi + 1);
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = __pyx_v_lo; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_j = __pyx_t_3;
+3233: ox = idx[off + j, 5]; oy = idx[off + j, 6]
__pyx_t_4 = (__pyx_v_off + __pyx_v_j);
__pyx_t_5 = 5;
__pyx_t_6 = -1;
if (__pyx_t_4 < 0) {
__pyx_t_4 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_4 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_4 >= __pyx_v_idx.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_5 < 0) {
__pyx_t_5 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_5 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_5 >= __pyx_v_idx.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3233, __pyx_L1_error)
}
__pyx_v_ox = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_4 * __pyx_v_idx.strides[0]) ) + __pyx_t_5 * __pyx_v_idx.strides[1]) )));
__pyx_t_5 = (__pyx_v_off + __pyx_v_j);
__pyx_t_4 = 6;
__pyx_t_6 = -1;
if (__pyx_t_5 < 0) {
__pyx_t_5 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_5 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_5 >= __pyx_v_idx.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_4 < 0) {
__pyx_t_4 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_4 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_4 >= __pyx_v_idx.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3233, __pyx_L1_error)
}
__pyx_v_oy = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_5 * __pyx_v_idx.strides[0]) ) + __pyx_t_4 * __pyx_v_idx.strides[1]) )));
+3234: grid[ox, oy] = 0; type_grid[ox, oy] = 0
__pyx_t_4 = __pyx_v_ox;
__pyx_t_5 = __pyx_v_oy;
__pyx_t_6 = -1;
if (__pyx_t_4 < 0) {
__pyx_t_4 += __pyx_v_grid.shape[0];
if (unlikely(__pyx_t_4 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_4 >= __pyx_v_grid.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_5 < 0) {
__pyx_t_5 += __pyx_v_grid.shape[1];
if (unlikely(__pyx_t_5 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_5 >= __pyx_v_grid.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3234, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_4 * __pyx_v_grid.strides[0]) ) + __pyx_t_5 * __pyx_v_grid.strides[1]) )) = 0;
__pyx_t_5 = __pyx_v_ox;
__pyx_t_4 = __pyx_v_oy;
__pyx_t_6 = -1;
if (__pyx_t_5 < 0) {
__pyx_t_5 += __pyx_v_type_grid.shape[0];
if (unlikely(__pyx_t_5 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_5 >= __pyx_v_type_grid.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_4 < 0) {
__pyx_t_4 += __pyx_v_type_grid.shape[1];
if (unlikely(__pyx_t_4 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_4 >= __pyx_v_type_grid.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3234, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_5 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_4 * __pyx_v_type_grid.strides[1]) )) = 0;
}
+3235: for j in range(lo, hi + 1):
__pyx_t_1 = (__pyx_v_hi + 1);
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = __pyx_v_lo; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_j = __pyx_t_3;
+3236: grid[bx[j], by[j]] = chainID
__pyx_t_4 = (__pyx_v_bx[__pyx_v_j]);
__pyx_t_5 = (__pyx_v_by[__pyx_v_j]);
__pyx_t_6 = -1;
if (__pyx_t_4 < 0) {
__pyx_t_4 += __pyx_v_grid.shape[0];
if (unlikely(__pyx_t_4 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_4 >= __pyx_v_grid.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_5 < 0) {
__pyx_t_5 += __pyx_v_grid.shape[1];
if (unlikely(__pyx_t_5 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_5 >= __pyx_v_grid.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3236, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_4 * __pyx_v_grid.strides[0]) ) + __pyx_t_5 * __pyx_v_grid.strides[1]) )) = __pyx_v_chainID;
+3237: type_grid[bx[j], by[j]] = idx[off + j, 2]
__pyx_t_5 = (__pyx_v_off + __pyx_v_j);
__pyx_t_4 = 2;
__pyx_t_6 = -1;
if (__pyx_t_5 < 0) {
__pyx_t_5 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_5 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_5 >= __pyx_v_idx.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_4 < 0) {
__pyx_t_4 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_4 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_4 >= __pyx_v_idx.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3237, __pyx_L1_error)
}
__pyx_t_7 = (__pyx_v_bx[__pyx_v_j]);
__pyx_t_8 = (__pyx_v_by[__pyx_v_j]);
__pyx_t_6 = -1;
if (__pyx_t_7 < 0) {
__pyx_t_7 += __pyx_v_type_grid.shape[0];
if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_7 >= __pyx_v_type_grid.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_type_grid.shape[1];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_8 >= __pyx_v_type_grid.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3237, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_type_grid.data + __pyx_t_7 * __pyx_v_type_grid.strides[0]) ) + __pyx_t_8 * __pyx_v_type_grid.strides[1]) )) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_5 * __pyx_v_idx.strides[0]) ) + __pyx_t_4 * __pyx_v_idx.strides[1]) )));
+3238: idx[off + j, 5] = bx[j]; idx[off + j, 6] = by[j]
__pyx_t_4 = (__pyx_v_off + __pyx_v_j);
__pyx_t_5 = 5;
__pyx_t_6 = -1;
if (__pyx_t_4 < 0) {
__pyx_t_4 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_4 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_4 >= __pyx_v_idx.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_5 < 0) {
__pyx_t_5 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_5 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_5 >= __pyx_v_idx.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3238, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_4 * __pyx_v_idx.strides[0]) ) + __pyx_t_5 * __pyx_v_idx.strides[1]) )) = (__pyx_v_bx[__pyx_v_j]);
__pyx_t_5 = (__pyx_v_off + __pyx_v_j);
__pyx_t_4 = 6;
__pyx_t_6 = -1;
if (__pyx_t_5 < 0) {
__pyx_t_5 += __pyx_v_idx.shape[0];
if (unlikely(__pyx_t_5 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_5 >= __pyx_v_idx.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_4 < 0) {
__pyx_t_4 += __pyx_v_idx.shape[1];
if (unlikely(__pyx_t_4 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_4 >= __pyx_v_idx.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3238, __pyx_L1_error)
}
*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_5 * __pyx_v_idx.strides[0]) ) + __pyx_t_4 * __pyx_v_idx.strides[1]) )) = (__pyx_v_by[__pyx_v_j]);
}
3239:
3240:
+3241: @cython.wraparound(False)
/* Python wrapper */ static PyObject *__pyx_pw_5pimms_15mega_crank_fast_25mega_pull_2D(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_5pimms_15mega_crank_fast_24mega_pull_2D, "2D pull megamove. See mega_pull for semantics."); static PyMethodDef __pyx_mdef_5pimms_15mega_crank_fast_25mega_pull_2D = {"mega_pull_2D", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5pimms_15mega_crank_fast_25mega_pull_2D, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_5pimms_15mega_crank_fast_24mega_pull_2D}; static PyObject *__pyx_pw_5pimms_15mega_crank_fast_25mega_pull_2D(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { __Pyx_memviewslice __pyx_v_grid = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_type_grid = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_idx_to_bead = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_chain_offset = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_chain_length = { 0, 0, { 0 }, { 0 }, { 0 } }; CYTHON_UNUSED __Pyx_memviewslice __pyx_v_chain_homo = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_chain_selector = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_LR_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_SLR_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_angle_lookup = { 0, 0, { 0 }, { 0 }, { 0 } }; long __pyx_v_energy; float __pyx_v_invtemp; int __pyx_v_passed_seed; int __pyx_v_hardwall; int __pyx_v_max_chain_len; #if !CYTHON_METH_FASTCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("mega_pull_2D (wrapper)", 0); #if !CYTHON_METH_FASTCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_grid,&__pyx_mstate_global->__pyx_n_u_type_grid,&__pyx_mstate_global->__pyx_n_u_idx_to_bead,&__pyx_mstate_global->__pyx_n_u_chain_offset,&__pyx_mstate_global->__pyx_n_u_chain_length,&__pyx_mstate_global->__pyx_n_u_chain_homo,&__pyx_mstate_global->__pyx_n_u_chain_selector,&__pyx_mstate_global->__pyx_n_u_interaction_table,&__pyx_mstate_global->__pyx_n_u_LR_interaction_table,&__pyx_mstate_global->__pyx_n_u_SLR_interaction_table,&__pyx_mstate_global->__pyx_n_u_angle_lookup,&__pyx_mstate_global->__pyx_n_u_energy,&__pyx_mstate_global->__pyx_n_u_invtemp,&__pyx_mstate_global->__pyx_n_u_passed_seed,&__pyx_mstate_global->__pyx_n_u_hardwall,&__pyx_mstate_global->__pyx_n_u_max_chain_len,0}; PyObject* values[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 3241, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 16: values[15] = __Pyx_ArgRef_FASTCALL(__pyx_args, 15); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[15])) __PYX_ERR(0, 3241, __pyx_L3_error) CYTHON_FALLTHROUGH; case 15: values[14] = __Pyx_ArgRef_FASTCALL(__pyx_args, 14); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[14])) __PYX_ERR(0, 3241, __pyx_L3_error) CYTHON_FALLTHROUGH; case 14: values[13] = __Pyx_ArgRef_FASTCALL(__pyx_args, 13); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[13])) __PYX_ERR(0, 3241, __pyx_L3_error) CYTHON_FALLTHROUGH; case 13: values[12] = __Pyx_ArgRef_FASTCALL(__pyx_args, 12); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[12])) __PYX_ERR(0, 3241, __pyx_L3_error) CYTHON_FALLTHROUGH; case 12: values[11] = __Pyx_ArgRef_FASTCALL(__pyx_args, 11); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[11])) __PYX_ERR(0, 3241, __pyx_L3_error) CYTHON_FALLTHROUGH; case 11: values[10] = __Pyx_ArgRef_FASTCALL(__pyx_args, 10); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[10])) __PYX_ERR(0, 3241, __pyx_L3_error) CYTHON_FALLTHROUGH; case 10: values[9] = __Pyx_ArgRef_FASTCALL(__pyx_args, 9); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[9])) __PYX_ERR(0, 3241, __pyx_L3_error) CYTHON_FALLTHROUGH; case 9: values[8] = __Pyx_ArgRef_FASTCALL(__pyx_args, 8); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[8])) __PYX_ERR(0, 3241, __pyx_L3_error) CYTHON_FALLTHROUGH; case 8: values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 3241, __pyx_L3_error) CYTHON_FALLTHROUGH; case 7: values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 3241, __pyx_L3_error) CYTHON_FALLTHROUGH; case 6: values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 3241, __pyx_L3_error) CYTHON_FALLTHROUGH; case 5: values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 3241, __pyx_L3_error) CYTHON_FALLTHROUGH; case 4: values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 3241, __pyx_L3_error) CYTHON_FALLTHROUGH; case 3: values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 3241, __pyx_L3_error) CYTHON_FALLTHROUGH; case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 3241, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 3241, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "mega_pull_2D", 0) < (0)) __PYX_ERR(0, 3241, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 16; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("mega_pull_2D", 1, 16, 16, i); __PYX_ERR(0, 3241, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 16)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 3241, __pyx_L3_error) values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 3241, __pyx_L3_error) values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 3241, __pyx_L3_error) values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 3241, __pyx_L3_error) values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 3241, __pyx_L3_error) values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 3241, __pyx_L3_error) values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 3241, __pyx_L3_error) values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 3241, __pyx_L3_error) values[8] = __Pyx_ArgRef_FASTCALL(__pyx_args, 8); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[8])) __PYX_ERR(0, 3241, __pyx_L3_error) values[9] = __Pyx_ArgRef_FASTCALL(__pyx_args, 9); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[9])) __PYX_ERR(0, 3241, __pyx_L3_error) values[10] = __Pyx_ArgRef_FASTCALL(__pyx_args, 10); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[10])) __PYX_ERR(0, 3241, __pyx_L3_error) values[11] = __Pyx_ArgRef_FASTCALL(__pyx_args, 11); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[11])) __PYX_ERR(0, 3241, __pyx_L3_error) values[12] = __Pyx_ArgRef_FASTCALL(__pyx_args, 12); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[12])) __PYX_ERR(0, 3241, __pyx_L3_error) values[13] = __Pyx_ArgRef_FASTCALL(__pyx_args, 13); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[13])) __PYX_ERR(0, 3241, __pyx_L3_error) values[14] = __Pyx_ArgRef_FASTCALL(__pyx_args, 14); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[14])) __PYX_ERR(0, 3241, __pyx_L3_error) values[15] = __Pyx_ArgRef_FASTCALL(__pyx_args, 15); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[15])) __PYX_ERR(0, 3241, __pyx_L3_error) } __pyx_v_grid = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_grid.memview)) __PYX_ERR(0, 3243, __pyx_L3_error) __pyx_v_type_grid = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_type_grid.memview)) __PYX_ERR(0, 3244, __pyx_L3_error) __pyx_v_idx_to_bead = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_idx_to_bead.memview)) __PYX_ERR(0, 3245, __pyx_L3_error) __pyx_v_chain_offset = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_offset.memview)) __PYX_ERR(0, 3246, __pyx_L3_error) __pyx_v_chain_length = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_length.memview)) __PYX_ERR(0, 3247, __pyx_L3_error) __pyx_v_chain_homo = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_homo.memview)) __PYX_ERR(0, 3248, __pyx_L3_error) __pyx_v_chain_selector = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_selector.memview)) __PYX_ERR(0, 3249, __pyx_L3_error) __pyx_v_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[7], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interaction_table.memview)) __PYX_ERR(0, 3250, __pyx_L3_error) __pyx_v_LR_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_LR_interaction_table.memview)) __PYX_ERR(0, 3251, __pyx_L3_error) __pyx_v_SLR_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_SLR_interaction_table.memview)) __PYX_ERR(0, 3252, __pyx_L3_error) __pyx_v_angle_lookup = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsdsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_angle_lookup.memview)) __PYX_ERR(0, 3253, __pyx_L3_error) __pyx_v_energy = __Pyx_PyLong_As_long(values[11]); if (unlikely((__pyx_v_energy == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 3254, __pyx_L3_error) __pyx_v_invtemp = __Pyx_PyFloat_AsFloat(values[12]); if (unlikely((__pyx_v_invtemp == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 3255, __pyx_L3_error) __pyx_v_passed_seed = __Pyx_PyLong_As_int(values[13]); if (unlikely((__pyx_v_passed_seed == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3256, __pyx_L3_error) __pyx_v_hardwall = __Pyx_PyLong_As_int(values[14]); if (unlikely((__pyx_v_hardwall == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3257, __pyx_L3_error) __pyx_v_max_chain_len = __Pyx_PyLong_As_int(values[15]); if (unlikely((__pyx_v_max_chain_len == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3258, __pyx_L3_error) } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("mega_pull_2D", 1, 16, 16, __pyx_nargs); __PYX_ERR(0, 3241, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __PYX_XCLEAR_MEMVIEW(&__pyx_v_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_type_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_idx_to_bead, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_offset, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_length, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_homo, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_selector, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_LR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_SLR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_angle_lookup, 1); __Pyx_AddTraceback("pimms.mega_crank_fast.mega_pull_2D", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5pimms_15mega_crank_fast_24mega_pull_2D(__pyx_self, __pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, __pyx_v_chain_offset, __pyx_v_chain_length, __pyx_v_chain_homo, __pyx_v_chain_selector, __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_angle_lookup, __pyx_v_energy, __pyx_v_invtemp, __pyx_v_passed_seed, __pyx_v_hardwall, __pyx_v_max_chain_len); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __PYX_XCLEAR_MEMVIEW(&__pyx_v_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_type_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_idx_to_bead, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_offset, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_length, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_homo, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_selector, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_LR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_SLR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_angle_lookup, 1); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5pimms_15mega_crank_fast_24mega_pull_2D(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_grid, __Pyx_memviewslice __pyx_v_type_grid, __Pyx_memviewslice __pyx_v_idx_to_bead, __Pyx_memviewslice __pyx_v_chain_offset, __Pyx_memviewslice __pyx_v_chain_length, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_chain_homo, __Pyx_memviewslice __pyx_v_chain_selector, __Pyx_memviewslice __pyx_v_interaction_table, __Pyx_memviewslice __pyx_v_LR_interaction_table, __Pyx_memviewslice __pyx_v_SLR_interaction_table, __Pyx_memviewslice __pyx_v_angle_lookup, long __pyx_v_energy, float __pyx_v_invtemp, int __pyx_v_passed_seed, int __pyx_v_hardwall, int __pyx_v_max_chain_len) { int __pyx_v_XDIM; int __pyx_v_YDIM; int __pyx_v_n_steps; int __pyx_v_accepted; int __pyx_v_step; int __pyx_v_c; int __pyx_v_off; int __pyx_v_L; int __pyx_v_chainID; int __pyx_v_i; int __pyx_v_j; int __pyx_v_k; int __pyx_v_direction; int __pyx_v_nF; int __pyx_v_nR; int __pyx_v_r; int __pyx_v_restored; int __pyx_v_lo; int __pyx_v_hi; long __pyx_v_de; int __pyx_v_sx; int __pyx_v_sy; int __pyx_v_ox; int __pyx_v_oy; int __pyx_v_tx; int __pyx_v_ty; int __pyx_v_pnx; int __pyx_v_pny; int __pyx_v_newp[2]; int __pyx_v_tbuf[18]; int *__pyx_v_bx; int *__pyx_v_by; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_13); __Pyx_XDECREF(__pyx_t_14); __Pyx_XDECREF(__pyx_t_15); __Pyx_AddTraceback("pimms.mega_crank_fast.mega_pull_2D", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_5pimms_15mega_crank_fast_25mega_pull_2D, 0, __pyx_mstate_global->__pyx_n_u_mega_pull_2D, NULL, __pyx_mstate_global->__pyx_n_u_pimms_mega_crank_fast, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[18])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3241, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_mega_pull_2D, __pyx_t_4) < (0)) __PYX_ERR(0, 3241, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
3242: @cython.boundscheck(False)
3243: def mega_pull_2D(NUMPY_INT_TYPE[:, :] grid,
3244: NUMPY_INT_TYPE[:, :] type_grid,
3245: NUMPY_INT_TYPE_long[:, :] idx_to_bead,
3246: int[::1] chain_offset,
3247: int[::1] chain_length,
3248: int[::1] chain_homo,
3249: int[::1] chain_selector,
3250: NUMPY_INT_TYPE[:, :] interaction_table,
3251: NUMPY_INT_TYPE[:, :] LR_interaction_table,
3252: NUMPY_INT_TYPE[:, :] SLR_interaction_table,
3253: NUMPY_INT_TYPE[:, :, :, :, :] angle_lookup,
3254: long energy,
3255: float invtemp,
3256: int passed_seed,
3257: int hardwall,
3258: int max_chain_len):
3259: """2D pull megamove. See mega_pull for semantics."""
+3260: mc_seed(passed_seed)
__pyx_f_5pimms_15mega_crank_fast_mc_seed(__pyx_v_passed_seed);
3261:
+3262: cdef int XDIM = grid.shape[0]
__pyx_v_XDIM = (__pyx_v_grid.shape[0]);
+3263: cdef int YDIM = grid.shape[1]
__pyx_v_YDIM = (__pyx_v_grid.shape[1]);
+3264: cdef int n_steps = chain_selector.shape[0]
__pyx_v_n_steps = (__pyx_v_chain_selector.shape[0]);
+3265: cdef int accepted = 0
__pyx_v_accepted = 0;
3266:
3267: cdef int step, c, off, L, chainID, i, j, k, direction, nF, nR, r, restored, lo, hi
3268: cdef long de
3269: cdef int sx, sy, ox, oy, tx, ty, pnx, pny
3270: cdef int newp[2]
3271: cdef int tbuf[18]
3272:
+3273: cdef int* bx = <int*> malloc(max_chain_len * sizeof(int))
__pyx_v_bx = ((int *)malloc((__pyx_v_max_chain_len * (sizeof(int)))));
+3274: cdef int* by = <int*> malloc(max_chain_len * sizeof(int))
__pyx_v_by = ((int *)malloc((__pyx_v_max_chain_len * (sizeof(int)))));
+3275: if bx == NULL or by == NULL:
__pyx_t_2 = (__pyx_v_bx == NULL);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = (__pyx_v_by == NULL);
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+3276: if bx != NULL: free(bx)
__pyx_t_1 = (__pyx_v_bx != NULL);
if (__pyx_t_1) {
free(__pyx_v_bx);
}
+3277: if by != NULL: free(by)
__pyx_t_1 = (__pyx_v_by != NULL);
if (__pyx_t_1) {
free(__pyx_v_by);
}
+3278: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 3278, __pyx_L1_error)
3279:
+3280: try:
/*try:*/ {
+3281: for step in range(n_steps):
__pyx_t_3 = __pyx_v_n_steps;
__pyx_t_4 = __pyx_t_3;
for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
__pyx_v_step = __pyx_t_5;
+3282: c = chain_selector[step]
__pyx_t_6 = __pyx_v_step;
__pyx_v_c = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_chain_selector.data) + __pyx_t_6)) )));
+3283: off = chain_offset[c]
__pyx_t_6 = __pyx_v_c;
__pyx_v_off = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_chain_offset.data) + __pyx_t_6)) )));
+3284: L = chain_length[c]
__pyx_t_6 = __pyx_v_c;
__pyx_v_L = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_chain_length.data) + __pyx_t_6)) )));
+3285: if L < 3:
__pyx_t_1 = (__pyx_v_L < 3);
if (__pyx_t_1) {
/* … */
}
+3286: continue
goto __pyx_L11_continue;
+3287: chainID = idx_to_bead[off, 4]
__pyx_t_6 = __pyx_v_off;
__pyx_t_7 = 4;
__pyx_v_chainID = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
3288:
+3289: for j in range(L):
__pyx_t_8 = __pyx_v_L;
__pyx_t_9 = __pyx_t_8;
for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
__pyx_v_j = __pyx_t_10;
+3290: bx[j] = idx_to_bead[off + j, 5]
__pyx_t_7 = (__pyx_v_off + __pyx_v_j);
__pyx_t_6 = 5;
(__pyx_v_bx[__pyx_v_j]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) )));
+3291: by[j] = idx_to_bead[off + j, 6]
__pyx_t_6 = (__pyx_v_off + __pyx_v_j);
__pyx_t_7 = 6;
(__pyx_v_by[__pyx_v_j]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) )));
}
3292:
+3293: i = 1 + randint(0, L - 3)
__pyx_v_i = (1 + __pyx_f_5pimms_15mega_crank_fast_randint(0, (__pyx_v_L - 3)));
+3294: direction = randint(0, 1)
__pyx_v_direction = __pyx_f_5pimms_15mega_crank_fast_randint(0, 1);
+3295: restored = 0
__pyx_v_restored = 0;
+3296: nR = 0
__pyx_v_nR = 0;
3297:
+3298: if direction == 0:
__pyx_t_1 = (__pyx_v_direction == 0);
if (__pyx_t_1) {
/* … */
goto __pyx_L16;
}
+3299: nF = pull_first_targets_2D(grid, bx[i - 1], by[i - 1], bx[i], by[i],
__pyx_v_nF = __pyx_f_5pimms_15mega_crank_fast_pull_first_targets_2D(__pyx_v_grid, (__pyx_v_bx[(__pyx_v_i - 1)]), (__pyx_v_by[(__pyx_v_i - 1)]), (__pyx_v_bx[__pyx_v_i]), (__pyx_v_by[__pyx_v_i]), __pyx_v_hardwall, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_tbuf);
3300: hardwall, XDIM, YDIM, tbuf)
+3301: if nF == 0:
__pyx_t_1 = (__pyx_v_nF == 0);
if (__pyx_t_1) {
/* … */
}
+3302: continue
goto __pyx_L11_continue;
+3303: r = randint(0, nF - 1)
__pyx_v_r = __pyx_f_5pimms_15mega_crank_fast_randint(0, (__pyx_v_nF - 1));
+3304: sx = tbuf[2 * r]; sy = tbuf[2 * r + 1]
__pyx_v_sx = (__pyx_v_tbuf[(2 * __pyx_v_r)]);
__pyx_v_sy = (__pyx_v_tbuf[((2 * __pyx_v_r) + 1)]);
+3305: de = get_energy_change_2D_c(grid, type_grid, bx[i], by[i], sx, sy,
__pyx_v_de = __pyx_f_5pimms_15mega_crank_fast_get_energy_change_2D_c(__pyx_v_grid, __pyx_v_type_grid, (__pyx_v_bx[__pyx_v_i]), (__pyx_v_by[__pyx_v_i]), __pyx_v_sx, __pyx_v_sy, (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_hardwall);
+3306: idx_to_bead[off + i, 1], interaction_table, LR_interaction_table,
__pyx_t_7 = (__pyx_v_off + __pyx_v_i);
__pyx_t_6 = 1;
3307: SLR_interaction_table, XDIM, YDIM, hardwall)
+3308: newp[0] = sx; newp[1] = sy
(__pyx_v_newp[0]) = __pyx_v_sx;
(__pyx_v_newp[1]) = __pyx_v_sy;
+3309: de = de + get_angle_energy_change_2D_c(off + i, idx_to_bead, newp, angle_lookup)
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_2D_c((__pyx_v_off + __pyx_v_i), __pyx_v_idx_to_bead, __pyx_v_newp, __pyx_v_angle_lookup));
+3310: _apply_bead_move_2D(grid, type_grid, idx_to_bead, off + i, bx[i], by[i], sx, sy, chainID)
__pyx_f_5pimms_15mega_crank_fast__apply_bead_move_2D(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, (__pyx_v_off + __pyx_v_i), (__pyx_v_bx[__pyx_v_i]), (__pyx_v_by[__pyx_v_i]), __pyx_v_sx, __pyx_v_sy, __pyx_v_chainID);
+3311: pnx = sx; pny = sy
__pyx_v_pnx = __pyx_v_sx;
__pyx_v_pny = __pyx_v_sy;
+3312: k = i
__pyx_v_k = __pyx_v_i;
+3313: for j in range(i + 1, L):
__pyx_t_8 = __pyx_v_L;
__pyx_t_9 = __pyx_t_8;
for (__pyx_t_10 = (__pyx_v_i + 1); __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
__pyx_v_j = __pyx_t_10;
+3314: if cheby_adjacent_2D(pnx, pny, bx[j], by[j], XDIM, YDIM, hardwall) == 1:
__pyx_t_1 = (__pyx_f_5pimms_15mega_crank_fast_cheby_adjacent_2D(__pyx_v_pnx, __pyx_v_pny, (__pyx_v_bx[__pyx_v_j]), (__pyx_v_by[__pyx_v_j]), __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_hardwall) == 1);
if (__pyx_t_1) {
/* … */
}
+3315: k = j - 1; restored = 1; break
__pyx_v_k = (__pyx_v_j - 1);
__pyx_v_restored = 1;
goto __pyx_L19_break;
+3316: ox = bx[j]; oy = by[j]
__pyx_v_ox = (__pyx_v_bx[__pyx_v_j]);
__pyx_v_oy = (__pyx_v_by[__pyx_v_j]);
+3317: tx = bx[j - 1]; ty = by[j - 1]
__pyx_v_tx = (__pyx_v_bx[(__pyx_v_j - 1)]);
__pyx_v_ty = (__pyx_v_by[(__pyx_v_j - 1)]);
+3318: de = de + get_energy_change_2D_c(grid, type_grid, ox, oy, tx, ty,
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_energy_change_2D_c(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_ox, __pyx_v_oy, __pyx_v_tx, __pyx_v_ty, (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_hardwall));
+3319: idx_to_bead[off + j, 1], interaction_table, LR_interaction_table,
__pyx_t_6 = (__pyx_v_off + __pyx_v_j);
__pyx_t_7 = 1;
3320: SLR_interaction_table, XDIM, YDIM, hardwall)
+3321: newp[0] = tx; newp[1] = ty
(__pyx_v_newp[0]) = __pyx_v_tx;
(__pyx_v_newp[1]) = __pyx_v_ty;
+3322: de = de + get_angle_energy_change_2D_c(off + j, idx_to_bead, newp, angle_lookup)
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_2D_c((__pyx_v_off + __pyx_v_j), __pyx_v_idx_to_bead, __pyx_v_newp, __pyx_v_angle_lookup));
+3323: _apply_bead_move_2D(grid, type_grid, idx_to_bead, off + j, ox, oy, tx, ty, chainID)
__pyx_f_5pimms_15mega_crank_fast__apply_bead_move_2D(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, (__pyx_v_off + __pyx_v_j), __pyx_v_ox, __pyx_v_oy, __pyx_v_tx, __pyx_v_ty, __pyx_v_chainID);
+3324: pnx = tx; pny = ty
__pyx_v_pnx = __pyx_v_tx;
__pyx_v_pny = __pyx_v_ty;
+3325: k = j
__pyx_v_k = __pyx_v_j;
}
__pyx_L19_break:;
+3326: lo = i; hi = k
__pyx_v_lo = __pyx_v_i;
__pyx_v_hi = __pyx_v_k;
+3327: if restored == 1:
__pyx_t_1 = (__pyx_v_restored == 1);
if (__pyx_t_1) {
/* … */
}
+3328: nR = pull_first_targets_2D(grid, bx[k + 1], by[k + 1],
__pyx_v_nR = __pyx_f_5pimms_15mega_crank_fast_pull_first_targets_2D(__pyx_v_grid, (__pyx_v_bx[(__pyx_v_k + 1)]), (__pyx_v_by[(__pyx_v_k + 1)]), (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_7 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_6 * __pyx_v_idx_to_bead.strides[1]) ))), (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_11 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_12 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_hardwall, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_tbuf);
+3329: idx_to_bead[off + k, 5], idx_to_bead[off + k, 6],
__pyx_t_7 = (__pyx_v_off + __pyx_v_k);
__pyx_t_6 = 5;
__pyx_t_11 = (__pyx_v_off + __pyx_v_k);
__pyx_t_12 = 6;
3330: hardwall, XDIM, YDIM, tbuf)
3331: else:
+3332: nF = pull_first_targets_2D(grid, bx[i + 1], by[i + 1], bx[i], by[i],
/*else*/ {
/* … */
__pyx_v_nF = __pyx_f_5pimms_15mega_crank_fast_pull_first_targets_2D(__pyx_v_grid, (__pyx_v_bx[(__pyx_v_i + 1)]), (__pyx_v_by[(__pyx_v_i + 1)]), (__pyx_v_bx[__pyx_v_i]), (__pyx_v_by[__pyx_v_i]), __pyx_v_hardwall, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_tbuf);
3333: hardwall, XDIM, YDIM, tbuf)
+3334: if nF == 0:
__pyx_t_1 = (__pyx_v_nF == 0);
if (__pyx_t_1) {
/* … */
}
+3335: continue
goto __pyx_L11_continue;
+3336: r = randint(0, nF - 1)
__pyx_v_r = __pyx_f_5pimms_15mega_crank_fast_randint(0, (__pyx_v_nF - 1));
+3337: sx = tbuf[2 * r]; sy = tbuf[2 * r + 1]
__pyx_v_sx = (__pyx_v_tbuf[(2 * __pyx_v_r)]);
__pyx_v_sy = (__pyx_v_tbuf[((2 * __pyx_v_r) + 1)]);
+3338: de = get_energy_change_2D_c(grid, type_grid, bx[i], by[i], sx, sy,
__pyx_v_de = __pyx_f_5pimms_15mega_crank_fast_get_energy_change_2D_c(__pyx_v_grid, __pyx_v_type_grid, (__pyx_v_bx[__pyx_v_i]), (__pyx_v_by[__pyx_v_i]), __pyx_v_sx, __pyx_v_sy, (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_12 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_11 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_hardwall);
+3339: idx_to_bead[off + i, 1], interaction_table, LR_interaction_table,
__pyx_t_12 = (__pyx_v_off + __pyx_v_i);
__pyx_t_11 = 1;
3340: SLR_interaction_table, XDIM, YDIM, hardwall)
+3341: newp[0] = sx; newp[1] = sy
(__pyx_v_newp[0]) = __pyx_v_sx;
(__pyx_v_newp[1]) = __pyx_v_sy;
+3342: de = de + get_angle_energy_change_2D_c(off + i, idx_to_bead, newp, angle_lookup)
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_2D_c((__pyx_v_off + __pyx_v_i), __pyx_v_idx_to_bead, __pyx_v_newp, __pyx_v_angle_lookup));
+3343: _apply_bead_move_2D(grid, type_grid, idx_to_bead, off + i, bx[i], by[i], sx, sy, chainID)
__pyx_f_5pimms_15mega_crank_fast__apply_bead_move_2D(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, (__pyx_v_off + __pyx_v_i), (__pyx_v_bx[__pyx_v_i]), (__pyx_v_by[__pyx_v_i]), __pyx_v_sx, __pyx_v_sy, __pyx_v_chainID);
+3344: pnx = sx; pny = sy
__pyx_v_pnx = __pyx_v_sx;
__pyx_v_pny = __pyx_v_sy;
+3345: k = i
__pyx_v_k = __pyx_v_i;
+3346: for j in range(i - 1, -1, -1):
for (__pyx_t_8 = (__pyx_v_i - 1); __pyx_t_8 > -1; __pyx_t_8-=1) {
__pyx_v_j = __pyx_t_8;
+3347: if cheby_adjacent_2D(pnx, pny, bx[j], by[j], XDIM, YDIM, hardwall) == 1:
__pyx_t_1 = (__pyx_f_5pimms_15mega_crank_fast_cheby_adjacent_2D(__pyx_v_pnx, __pyx_v_pny, (__pyx_v_bx[__pyx_v_j]), (__pyx_v_by[__pyx_v_j]), __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_hardwall) == 1);
if (__pyx_t_1) {
/* … */
}
+3348: k = j + 1; restored = 1; break
__pyx_v_k = (__pyx_v_j + 1);
__pyx_v_restored = 1;
goto __pyx_L24_break;
+3349: ox = bx[j]; oy = by[j]
__pyx_v_ox = (__pyx_v_bx[__pyx_v_j]);
__pyx_v_oy = (__pyx_v_by[__pyx_v_j]);
+3350: tx = bx[j + 1]; ty = by[j + 1]
__pyx_v_tx = (__pyx_v_bx[(__pyx_v_j + 1)]);
__pyx_v_ty = (__pyx_v_by[(__pyx_v_j + 1)]);
+3351: de = de + get_energy_change_2D_c(grid, type_grid, ox, oy, tx, ty,
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_energy_change_2D_c(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_ox, __pyx_v_oy, __pyx_v_tx, __pyx_v_ty, (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_11 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_12 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_hardwall));
+3352: idx_to_bead[off + j, 1], interaction_table, LR_interaction_table,
__pyx_t_11 = (__pyx_v_off + __pyx_v_j);
__pyx_t_12 = 1;
3353: SLR_interaction_table, XDIM, YDIM, hardwall)
+3354: newp[0] = tx; newp[1] = ty
(__pyx_v_newp[0]) = __pyx_v_tx;
(__pyx_v_newp[1]) = __pyx_v_ty;
+3355: de = de + get_angle_energy_change_2D_c(off + j, idx_to_bead, newp, angle_lookup)
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_2D_c((__pyx_v_off + __pyx_v_j), __pyx_v_idx_to_bead, __pyx_v_newp, __pyx_v_angle_lookup));
+3356: _apply_bead_move_2D(grid, type_grid, idx_to_bead, off + j, ox, oy, tx, ty, chainID)
__pyx_f_5pimms_15mega_crank_fast__apply_bead_move_2D(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, (__pyx_v_off + __pyx_v_j), __pyx_v_ox, __pyx_v_oy, __pyx_v_tx, __pyx_v_ty, __pyx_v_chainID);
+3357: pnx = tx; pny = ty
__pyx_v_pnx = __pyx_v_tx;
__pyx_v_pny = __pyx_v_ty;
+3358: k = j
__pyx_v_k = __pyx_v_j;
}
__pyx_L24_break:;
+3359: lo = k; hi = i
__pyx_v_lo = __pyx_v_k;
__pyx_v_hi = __pyx_v_i;
+3360: if restored == 1:
__pyx_t_1 = (__pyx_v_restored == 1);
if (__pyx_t_1) {
/* … */
}
}
__pyx_L16:;
+3361: nR = pull_first_targets_2D(grid, bx[k - 1], by[k - 1],
__pyx_v_nR = __pyx_f_5pimms_15mega_crank_fast_pull_first_targets_2D(__pyx_v_grid, (__pyx_v_bx[(__pyx_v_k - 1)]), (__pyx_v_by[(__pyx_v_k - 1)]), (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_12 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_11 * __pyx_v_idx_to_bead.strides[1]) ))), (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_6 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_7 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_hardwall, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_tbuf);
+3362: idx_to_bead[off + k, 5], idx_to_bead[off + k, 6],
__pyx_t_12 = (__pyx_v_off + __pyx_v_k);
__pyx_t_11 = 5;
__pyx_t_6 = (__pyx_v_off + __pyx_v_k);
__pyx_t_7 = 6;
3363: hardwall, XDIM, YDIM, tbuf)
3364:
+3365: if restored == 0:
__pyx_t_1 = (__pyx_v_restored == 0);
if (__pyx_t_1) {
/* … */
}
+3366: _revert_segment_2D(grid, type_grid, idx_to_bead, off, lo, hi, bx, by, chainID)
__pyx_f_5pimms_15mega_crank_fast__revert_segment_2D(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, __pyx_v_off, __pyx_v_lo, __pyx_v_hi, __pyx_v_bx, __pyx_v_by, __pyx_v_chainID);
+3367: continue
goto __pyx_L11_continue;
3368:
3369: # Metropolis-Hastings with the nF/nR proposal-multiplicity correction
+3370: if accept_or_reject_ratio(invtemp, energy, energy + de, nF, nR) == 1:
__pyx_t_1 = (__pyx_f_5pimms_15mega_crank_fast_accept_or_reject_ratio(__pyx_v_invtemp, __pyx_v_energy, (__pyx_v_energy + __pyx_v_de), __pyx_v_nF, __pyx_v_nR) == 1);
if (__pyx_t_1) {
/* … */
goto __pyx_L28;
}
+3371: energy = energy + de
__pyx_v_energy = (__pyx_v_energy + __pyx_v_de);
+3372: accepted = accepted + 1
__pyx_v_accepted = (__pyx_v_accepted + 1);
3373: else:
+3374: _revert_segment_2D(grid, type_grid, idx_to_bead, off, lo, hi, bx, by, chainID)
/*else*/ {
__pyx_f_5pimms_15mega_crank_fast__revert_segment_2D(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, __pyx_v_off, __pyx_v_lo, __pyx_v_hi, __pyx_v_bx, __pyx_v_by, __pyx_v_chainID);
}
__pyx_L28:;
__pyx_L11_continue:;
}
}
3375: finally:
+3376: free(bx); free(by)
/*finally:*/ {
/*normal exit:*/{
free(__pyx_v_bx);
free(__pyx_v_by);
goto __pyx_L10;
}
__pyx_L10:;
}
3377:
+3378: return (energy, accepted)
__Pyx_XDECREF(__pyx_r); __pyx_t_13 = __Pyx_PyLong_From_long(__pyx_v_energy); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3378, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14 = __Pyx_PyLong_From_int(__pyx_v_accepted); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3378, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3378, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_GIVEREF(__pyx_t_13); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_13) != (0)) __PYX_ERR(0, 3378, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_14); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_14) != (0)) __PYX_ERR(0, 3378, __pyx_L1_error); __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_r = __pyx_t_15; __pyx_t_15 = 0; goto __pyx_L0;
3379:
3380:
3381: # =====================================================================
3382: # PARALLEL pull (cooperative reptation) megamove - chain-level frozen-halo
3383: #
3384: # Like the parallel slither, pull is a whole-chain move, so it uses the same
3385: # chain-level decomposition: a chain (length >= 3) is pulled in a block only if
3386: # ALL of its beads lie in that block's interior. A pull cascade creates exactly
3387: # one NEW occupied site - the first target s the displaced interior bead moves
3388: # to - while every other touched site is a relabelling of an already-occupied
3389: # chain site. The extra subtlety vs slither is pull's asymmetric proposal: the
3390: # Metropolis-Hastings acceptance carries the first-target multiplicity ratio
3391: # nF/nR. To keep that ratio self-consistent AND keep the chain inside the block,
3392: # the first-target search is restricted to the block interior (pull_first_targets
3393: # _interior), so BOTH nF and nR count only interior targets and the moved beads
3394: # always land in the interior. The chain therefore stays invariantly in-block;
3395: # block footprints are disjoint and run concurrently. Independent of thread
3396: # count; targets the same Boltzmann distribution as the serial pull.
3397: # =====================================================================
3398:
+3399: cdef inline int accept_p_ratio(float invtemp, long de, int nF, int nR,
static CYTHON_INLINE int __pyx_f_5pimms_15mega_crank_fast_accept_p_ratio(float __pyx_v_invtemp, long __pyx_v_de, int __pyx_v_nF, int __pyx_v_nR, unsigned PY_LONG_LONG *__pyx_v_rng) {
double __pyx_v_acc;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast.accept_p_ratio", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
return __pyx_r;
}
3400: unsigned long long* rng) noexcept nogil:
3401: # per-block Metropolis-Hastings: accept iff rand < (nF/nR) * exp(-de*invtemp)
3402: cdef double acc
+3403: if nR <= 0:
__pyx_t_1 = (__pyx_v_nR <= 0);
if (__pyx_t_1) {
/* … */
}
+3404: return 0
__pyx_r = 0;
goto __pyx_L0;
+3405: acc = (<double>nF / <double>nR) * exp(-(<double>de) * invtemp)
if (unlikely(((double)__pyx_v_nR) == 0)) {
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
PyErr_SetString(PyExc_ZeroDivisionError, "float division");
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__PYX_ERR(0, 3405, __pyx_L1_error)
}
__pyx_v_acc = ((((double)__pyx_v_nF) / ((double)__pyx_v_nR)) * exp(((-((double)__pyx_v_de)) * __pyx_v_invtemp)));
+3406: if acc >= 1.0:
__pyx_t_1 = (__pyx_v_acc >= 1.0);
if (__pyx_t_1) {
/* … */
}
+3407: return 1
__pyx_r = 1;
goto __pyx_L0;
+3408: if rng_uniform(rng) < acc:
__pyx_t_1 = (__pyx_f_5pimms_15mega_crank_fast_rng_uniform(__pyx_v_rng) < __pyx_v_acc);
if (__pyx_t_1) {
/* … */
}
+3409: return 1
__pyx_r = 1;
goto __pyx_L0;
+3410: return 0
__pyx_r = 0; goto __pyx_L0;
3411:
3412:
+3413: cdef int pull_first_targets_interior(NUMPY_INT_TYPE[:, :, :] grid,
static int __pyx_f_5pimms_15mega_crank_fast_pull_first_targets_interior(__Pyx_memviewslice __pyx_v_grid, int __pyx_v_anchor_x, int __pyx_v_anchor_y, int __pyx_v_anchor_z, int __pyx_v_mov_x, int __pyx_v_mov_y, int __pyx_v_mov_z, int __pyx_v_hardwall, int __pyx_v_XDIM, int __pyx_v_YDIM, int __pyx_v_ZDIM, int *__pyx_v_out_buf, int __pyx_v_blo_x_b, int __pyx_v_blo_y_b, int __pyx_v_blo_z_b, int __pyx_v_Lx, int __pyx_v_Ly, int __pyx_v_Lz, int __pyx_v_nbx, int __pyx_v_nby, int __pyx_v_nbz, int __pyx_v_shift_x, int __pyx_v_shift_y, int __pyx_v_shift_z, int __pyx_v_W) {
int __pyx_v_count;
int __pyx_v_dx;
int __pyx_v_dy;
int __pyx_v_dz;
int __pyx_v_tx;
int __pyx_v_ty;
int __pyx_v_tz;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast.pull_first_targets_interior", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
return __pyx_r;
}
3414: int anchor_x, int anchor_y, int anchor_z,
3415: int mov_x, int mov_y, int mov_z,
3416: int hardwall, int XDIM, int YDIM, int ZDIM,
3417: int* out_buf,
3418: int blo_x_b, int blo_y_b, int blo_z_b,
3419: int Lx, int Ly, int Lz, int nbx, int nby, int nbz,
3420: int shift_x, int shift_y, int shift_z, int W) noexcept nogil:
3421: # as pull_first_targets, but additionally require the target to lie in the
3422: # block interior (so the moved bead stays in-block and nF/nR stay consistent).
+3423: cdef int count = 0
__pyx_v_count = 0;
3424: cdef int dx, dy, dz, tx, ty, tz
+3425: for dx in range(-1, 2):
for (__pyx_t_1 = -1; __pyx_t_1 < 2; __pyx_t_1+=1) {
__pyx_v_dx = __pyx_t_1;
+3426: for dy in range(-1, 2):
for (__pyx_t_2 = -1; __pyx_t_2 < 2; __pyx_t_2+=1) {
__pyx_v_dy = __pyx_t_2;
+3427: for dz in range(-1, 2):
for (__pyx_t_3 = -1; __pyx_t_3 < 2; __pyx_t_3+=1) {
__pyx_v_dz = __pyx_t_3;
+3428: tx = pbc_correction(mov_x + dx, XDIM)
__pyx_v_tx = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_mov_x + __pyx_v_dx), __pyx_v_XDIM);
+3429: ty = pbc_correction(mov_y + dy, YDIM)
__pyx_v_ty = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_mov_y + __pyx_v_dy), __pyx_v_YDIM);
+3430: tz = pbc_correction(mov_z + dz, ZDIM)
__pyx_v_tz = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_mov_z + __pyx_v_dz), __pyx_v_ZDIM);
+3431: if grid[tx, ty, tz] != 0:
__pyx_t_4 = __pyx_v_tx;
__pyx_t_5 = __pyx_v_ty;
__pyx_t_6 = __pyx_v_tz;
__pyx_t_7 = -1;
if (__pyx_t_4 < 0) {
__pyx_t_4 += __pyx_v_grid.shape[0];
if (unlikely(__pyx_t_4 < 0)) __pyx_t_7 = 0;
} else if (unlikely(__pyx_t_4 >= __pyx_v_grid.shape[0])) __pyx_t_7 = 0;
if (__pyx_t_5 < 0) {
__pyx_t_5 += __pyx_v_grid.shape[1];
if (unlikely(__pyx_t_5 < 0)) __pyx_t_7 = 1;
} else if (unlikely(__pyx_t_5 >= __pyx_v_grid.shape[1])) __pyx_t_7 = 1;
if (__pyx_t_6 < 0) {
__pyx_t_6 += __pyx_v_grid.shape[2];
if (unlikely(__pyx_t_6 < 0)) __pyx_t_7 = 2;
} else if (unlikely(__pyx_t_6 >= __pyx_v_grid.shape[2])) __pyx_t_7 = 2;
if (unlikely(__pyx_t_7 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_7);
__PYX_ERR(0, 3431, __pyx_L1_error)
}
__pyx_t_8 = ((*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_4 * __pyx_v_grid.strides[0]) ) + __pyx_t_5 * __pyx_v_grid.strides[1]) ) + __pyx_t_6 * __pyx_v_grid.strides[2]) ))) != 0);
if (__pyx_t_8) {
/* … */
}
+3432: continue
goto __pyx_L7_continue;
+3433: if cheby_adjacent(tx, ty, tz, mov_x, mov_y, mov_z, XDIM, YDIM, ZDIM, hardwall) == 0:
__pyx_t_8 = (__pyx_f_5pimms_15mega_crank_fast_cheby_adjacent(__pyx_v_tx, __pyx_v_ty, __pyx_v_tz, __pyx_v_mov_x, __pyx_v_mov_y, __pyx_v_mov_z, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_hardwall) == 0);
if (__pyx_t_8) {
/* … */
}
+3434: continue
goto __pyx_L7_continue;
+3435: if cheby_adjacent(tx, ty, tz, anchor_x, anchor_y, anchor_z, XDIM, YDIM, ZDIM, hardwall) == 0:
__pyx_t_8 = (__pyx_f_5pimms_15mega_crank_fast_cheby_adjacent(__pyx_v_tx, __pyx_v_ty, __pyx_v_tz, __pyx_v_anchor_x, __pyx_v_anchor_y, __pyx_v_anchor_z, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_hardwall) == 0);
if (__pyx_t_8) {
/* … */
}
+3436: continue
goto __pyx_L7_continue;
+3437: if _in_interior_3d(tx, ty, tz, blo_x_b, blo_y_b, blo_z_b,
if (__pyx_t_8) {
/* … */
}
3438: Lx, Ly, Lz, nbx, nby, nbz, shift_x, shift_y, shift_z, W,
+3439: XDIM, YDIM, ZDIM) == 0:
__pyx_t_8 = (__pyx_f_5pimms_15mega_crank_fast__in_interior_3d(__pyx_v_tx, __pyx_v_ty, __pyx_v_tz, __pyx_v_blo_x_b, __pyx_v_blo_y_b, __pyx_v_blo_z_b, __pyx_v_Lx, __pyx_v_Ly, __pyx_v_Lz, __pyx_v_nbx, __pyx_v_nby, __pyx_v_nbz, __pyx_v_shift_x, __pyx_v_shift_y, __pyx_v_shift_z, __pyx_v_W, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM) == 0);
+3440: continue
goto __pyx_L7_continue;
+3441: out_buf[3 * count] = tx
(__pyx_v_out_buf[(3 * __pyx_v_count)]) = __pyx_v_tx;
+3442: out_buf[3 * count + 1] = ty
(__pyx_v_out_buf[((3 * __pyx_v_count) + 1)]) = __pyx_v_ty;
+3443: out_buf[3 * count + 2] = tz
(__pyx_v_out_buf[((3 * __pyx_v_count) + 2)]) = __pyx_v_tz;
+3444: count = count + 1
__pyx_v_count = (__pyx_v_count + 1);
__pyx_L7_continue:;
}
}
}
+3445: return count
__pyx_r = __pyx_v_count; goto __pyx_L0;
3446:
3447:
+3448: cdef void run_block_pull(int b,
static void __pyx_f_5pimms_15mega_crank_fast_run_block_pull(int __pyx_v_b, __Pyx_memviewslice __pyx_v_chain_ids, __Pyx_memviewslice __pyx_v_starts, __Pyx_memviewslice __pyx_v_attempts, __Pyx_memviewslice __pyx_v_seeds, __Pyx_memviewslice __pyx_v_chain_offset, __Pyx_memviewslice __pyx_v_chain_length, __Pyx_memviewslice __pyx_v_blo_x, __Pyx_memviewslice __pyx_v_blo_y, __Pyx_memviewslice __pyx_v_blo_z, int __pyx_v_Lx, int __pyx_v_Ly, int __pyx_v_Lz, int __pyx_v_nbx, int __pyx_v_nby, int __pyx_v_nbz, int __pyx_v_shift_x, int __pyx_v_shift_y, int __pyx_v_shift_z, int __pyx_v_W, __Pyx_memviewslice __pyx_v_grid, __Pyx_memviewslice __pyx_v_type_grid, __Pyx_memviewslice __pyx_v_idx_to_bead, __Pyx_memviewslice __pyx_v_interaction_table, __Pyx_memviewslice __pyx_v_LR_interaction_table, __Pyx_memviewslice __pyx_v_SLR_interaction_table, __Pyx_memviewslice __pyx_v_angle_lookup, float __pyx_v_invtemp, int __pyx_v_XDIM, int __pyx_v_YDIM, int __pyx_v_ZDIM, int __pyx_v_hardwall, __Pyx_memviewslice __pyx_v_out_delta, __Pyx_memviewslice __pyx_v_out_accepted) {
int __pyx_v_lo_blk;
int __pyx_v_hi_blk;
int __pyx_v_n_block;
unsigned PY_LONG_LONG __pyx_v_rng;
long __pyx_v_dsum;
int __pyx_v_acc;
CYTHON_UNUSED int __pyx_v_step;
int __pyx_v_pick;
int __pyx_v_c;
int __pyx_v_off;
int __pyx_v_L;
int __pyx_v_chainID;
int __pyx_v_i;
int __pyx_v_j;
int __pyx_v_k;
int __pyx_v_direction;
int __pyx_v_nF;
int __pyx_v_nR;
int __pyx_v_r;
int __pyx_v_restored;
int __pyx_v_lo;
int __pyx_v_hi;
long __pyx_v_de;
int __pyx_v_sx;
int __pyx_v_sy;
int __pyx_v_sz;
int __pyx_v_ox;
int __pyx_v_oy;
int __pyx_v_oz;
int __pyx_v_tx;
int __pyx_v_ty;
int __pyx_v_tz;
int __pyx_v_pnx;
int __pyx_v_pny;
int __pyx_v_pnz;
int __pyx_v_newp[3];
int __pyx_v_tbuf[81];
int __pyx_v_bx[512];
int __pyx_v_by[512];
int __pyx_v_bz[512];
int __pyx_v_bxb;
int __pyx_v_byb;
int __pyx_v_bzb;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast.run_block_pull", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
}
3449: int[::1] chain_ids, int[::1] starts, int[::1] attempts,
3450: unsigned long long[::1] seeds,
3451: int[::1] chain_offset, int[::1] chain_length,
3452: int[::1] blo_x, int[::1] blo_y, int[::1] blo_z,
3453: int Lx, int Ly, int Lz, int nbx, int nby, int nbz,
3454: int shift_x, int shift_y, int shift_z, int W,
3455: NUMPY_INT_TYPE[:, :, :] grid, NUMPY_INT_TYPE[:, :, :] type_grid,
3456: NUMPY_INT_TYPE_long[:, :] idx_to_bead,
3457: NUMPY_INT_TYPE[:, :] interaction_table,
3458: NUMPY_INT_TYPE[:, :] LR_interaction_table,
3459: NUMPY_INT_TYPE[:, :] SLR_interaction_table,
3460: NUMPY_INT_TYPE[:, :, :, :, :, :, :] angle_lookup,
3461: float invtemp, int XDIM, int YDIM, int ZDIM, int hardwall,
3462: long[::1] out_delta, int[::1] out_accepted) noexcept nogil:
3463:
+3464: cdef int lo_blk = starts[b]
__pyx_t_1 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_starts.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_starts.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 3464, __pyx_L1_error)
}
__pyx_v_lo_blk = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_starts.data) + __pyx_t_1)) )));
+3465: cdef int hi_blk = starts[b + 1]
__pyx_t_1 = (__pyx_v_b + 1);
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_starts.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_starts.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 3465, __pyx_L1_error)
}
__pyx_v_hi_blk = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_starts.data) + __pyx_t_1)) )));
+3466: cdef int n_block = hi_blk - lo_blk
__pyx_v_n_block = (__pyx_v_hi_blk - __pyx_v_lo_blk);
+3467: out_delta[b] = 0
__pyx_t_1 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_out_delta.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_out_delta.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 3467, __pyx_L1_error)
}
*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_out_delta.data) + __pyx_t_1)) )) = 0;
+3468: out_accepted[b] = 0
__pyx_t_1 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_out_accepted.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_out_accepted.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 3468, __pyx_L1_error)
}
*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_out_accepted.data) + __pyx_t_1)) )) = 0;
+3469: if n_block <= 0:
__pyx_t_3 = (__pyx_v_n_block <= 0);
if (__pyx_t_3) {
/* … */
}
+3470: return
goto __pyx_L0;
3471:
+3472: cdef unsigned long long rng = seeds[b]
__pyx_t_1 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_seeds.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_seeds.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 3472, __pyx_L1_error)
}
__pyx_v_rng = (*((unsigned PY_LONG_LONG *) ( /* dim=0 */ ((char *) (((unsigned PY_LONG_LONG *) __pyx_v_seeds.data) + __pyx_t_1)) )));
+3473: cdef long dsum = 0
__pyx_v_dsum = 0;
+3474: cdef int acc = 0
__pyx_v_acc = 0;
3475: cdef int step, pick, c, off, L, chainID, i, j, k, direction, nF, nR, r, restored, lo, hi
3476: cdef long de
3477: cdef int sx, sy, sz, ox, oy, oz, tx, ty, tz, pnx, pny, pnz
3478: cdef int newp[3]
3479: cdef int tbuf[81]
3480: cdef int bx[512]
3481: cdef int by[512]
3482: cdef int bz[512]
3483:
+3484: cdef int bxb = blo_x[b]
__pyx_t_1 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_blo_x.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_blo_x.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 3484, __pyx_L1_error)
}
__pyx_v_bxb = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_blo_x.data) + __pyx_t_1)) )));
+3485: cdef int byb = blo_y[b]
__pyx_t_1 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_blo_y.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_blo_y.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 3485, __pyx_L1_error)
}
__pyx_v_byb = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_blo_y.data) + __pyx_t_1)) )));
+3486: cdef int bzb = blo_z[b]
__pyx_t_1 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_blo_z.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_blo_z.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 3486, __pyx_L1_error)
}
__pyx_v_bzb = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_blo_z.data) + __pyx_t_1)) )));
3487:
+3488: for step in range(attempts[b]):
__pyx_t_1 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_attempts.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_attempts.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 3488, __pyx_L1_error)
}
__pyx_t_2 = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_attempts.data) + __pyx_t_1)) )));
__pyx_t_4 = __pyx_t_2;
for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
__pyx_v_step = __pyx_t_5;
+3489: pick = lo_blk + <int>(rng_uniform(&rng) * n_block)
__pyx_v_pick = (__pyx_v_lo_blk + ((int)(__pyx_f_5pimms_15mega_crank_fast_rng_uniform((&__pyx_v_rng)) * __pyx_v_n_block)));
+3490: if pick >= hi_blk:
__pyx_t_3 = (__pyx_v_pick >= __pyx_v_hi_blk);
if (__pyx_t_3) {
/* … */
}
+3491: pick = hi_blk - 1
__pyx_v_pick = (__pyx_v_hi_blk - 1);
+3492: c = chain_ids[pick]
__pyx_t_1 = __pyx_v_pick;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_chain_ids.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_chain_ids.shape[0])) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3492, __pyx_L1_error)
}
__pyx_v_c = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_chain_ids.data) + __pyx_t_1)) )));
+3493: off = chain_offset[c]
__pyx_t_1 = __pyx_v_c;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_chain_offset.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_chain_offset.shape[0])) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3493, __pyx_L1_error)
}
__pyx_v_off = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_chain_offset.data) + __pyx_t_1)) )));
+3494: L = chain_length[c]
__pyx_t_1 = __pyx_v_c;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_chain_length.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_chain_length.shape[0])) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3494, __pyx_L1_error)
}
__pyx_v_L = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_chain_length.data) + __pyx_t_1)) )));
+3495: if L < 3 or L > 512:
__pyx_t_7 = (__pyx_v_L < 3);
if (!__pyx_t_7) {
} else {
__pyx_t_3 = __pyx_t_7;
goto __pyx_L8_bool_binop_done;
}
__pyx_t_7 = (__pyx_v_L > 0x200);
__pyx_t_3 = __pyx_t_7;
__pyx_L8_bool_binop_done:;
if (__pyx_t_3) {
/* … */
}
+3496: continue
goto __pyx_L4_continue;
+3497: chainID = idx_to_bead[off, 4]
__pyx_t_1 = __pyx_v_off;
__pyx_t_8 = 4;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_8 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3497, __pyx_L1_error)
}
__pyx_v_chainID = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) )));
3498:
+3499: for j in range(L):
__pyx_t_6 = __pyx_v_L;
__pyx_t_9 = __pyx_t_6;
for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
__pyx_v_j = __pyx_t_10;
+3500: bx[j] = idx_to_bead[off + j, 5]
__pyx_t_8 = (__pyx_v_off + __pyx_v_j);
__pyx_t_1 = 5;
__pyx_t_11 = -1;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_11 = 0;
} else if (unlikely(__pyx_t_8 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_11 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_11 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_11 = 1;
if (unlikely(__pyx_t_11 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_11);
__PYX_ERR(0, 3500, __pyx_L1_error)
}
(__pyx_v_bx[__pyx_v_j]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
+3501: by[j] = idx_to_bead[off + j, 6]
__pyx_t_1 = (__pyx_v_off + __pyx_v_j);
__pyx_t_8 = 6;
__pyx_t_11 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_11 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_11 = 0;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_11 = 1;
} else if (unlikely(__pyx_t_8 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_11 = 1;
if (unlikely(__pyx_t_11 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_11);
__PYX_ERR(0, 3501, __pyx_L1_error)
}
(__pyx_v_by[__pyx_v_j]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) )));
+3502: bz[j] = idx_to_bead[off + j, 7]
__pyx_t_8 = (__pyx_v_off + __pyx_v_j);
__pyx_t_1 = 7;
__pyx_t_11 = -1;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_11 = 0;
} else if (unlikely(__pyx_t_8 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_11 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_11 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_11 = 1;
if (unlikely(__pyx_t_11 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_11);
__PYX_ERR(0, 3502, __pyx_L1_error)
}
(__pyx_v_bz[__pyx_v_j]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
}
3503:
+3504: i = 1 + rng_randint(&rng, 0, L - 3)
__pyx_v_i = (1 + __pyx_f_5pimms_15mega_crank_fast_rng_randint((&__pyx_v_rng), 0, (__pyx_v_L - 3)));
+3505: direction = rng_randint(&rng, 0, 1)
__pyx_v_direction = __pyx_f_5pimms_15mega_crank_fast_rng_randint((&__pyx_v_rng), 0, 1);
+3506: restored = 0
__pyx_v_restored = 0;
+3507: nR = 0
__pyx_v_nR = 0;
3508:
+3509: if direction == 0:
__pyx_t_3 = (__pyx_v_direction == 0);
if (__pyx_t_3) {
/* … */
goto __pyx_L12;
}
+3510: nF = pull_first_targets_interior(grid, bx[i - 1], by[i - 1], bz[i - 1],
__pyx_v_nF = __pyx_f_5pimms_15mega_crank_fast_pull_first_targets_interior(__pyx_v_grid, (__pyx_v_bx[(__pyx_v_i - 1)]), (__pyx_v_by[(__pyx_v_i - 1)]), (__pyx_v_bz[(__pyx_v_i - 1)]), (__pyx_v_bx[__pyx_v_i]), (__pyx_v_by[__pyx_v_i]), (__pyx_v_bz[__pyx_v_i]), __pyx_v_hardwall, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_tbuf, __pyx_v_bxb, __pyx_v_byb, __pyx_v_bzb, __pyx_v_Lx, __pyx_v_Ly, __pyx_v_Lz, __pyx_v_nbx, __pyx_v_nby, __pyx_v_nbz, __pyx_v_shift_x, __pyx_v_shift_y, __pyx_v_shift_z, __pyx_v_W);
3511: bx[i], by[i], bz[i], hardwall, XDIM, YDIM, ZDIM, tbuf,
3512: bxb, byb, bzb, Lx, Ly, Lz, nbx, nby, nbz,
3513: shift_x, shift_y, shift_z, W)
+3514: if nF == 0:
__pyx_t_3 = (__pyx_v_nF == 0);
if (__pyx_t_3) {
/* … */
}
+3515: continue
goto __pyx_L4_continue;
+3516: r = rng_randint(&rng, 0, nF - 1)
__pyx_v_r = __pyx_f_5pimms_15mega_crank_fast_rng_randint((&__pyx_v_rng), 0, (__pyx_v_nF - 1));
+3517: sx = tbuf[3 * r]; sy = tbuf[3 * r + 1]; sz = tbuf[3 * r + 2]
__pyx_v_sx = (__pyx_v_tbuf[(3 * __pyx_v_r)]);
__pyx_v_sy = (__pyx_v_tbuf[((3 * __pyx_v_r) + 1)]);
__pyx_v_sz = (__pyx_v_tbuf[((3 * __pyx_v_r) + 2)]);
+3518: de = get_energy_change_c(grid, type_grid, bx[i], by[i], bz[i], sx, sy, sz,
__pyx_v_de = __pyx_f_5pimms_15mega_crank_fast_get_energy_change_c(__pyx_v_grid, __pyx_v_type_grid, (__pyx_v_bx[__pyx_v_i]), (__pyx_v_by[__pyx_v_i]), (__pyx_v_bz[__pyx_v_i]), __pyx_v_sx, __pyx_v_sy, __pyx_v_sz, (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_hardwall);
+3519: idx_to_bead[off + i, 1], interaction_table, LR_interaction_table,
__pyx_t_1 = (__pyx_v_off + __pyx_v_i);
__pyx_t_8 = 1;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_8 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3519, __pyx_L1_error)
}
3520: SLR_interaction_table, XDIM, YDIM, ZDIM, hardwall)
+3521: newp[0] = sx; newp[1] = sy; newp[2] = sz
(__pyx_v_newp[0]) = __pyx_v_sx;
(__pyx_v_newp[1]) = __pyx_v_sy;
(__pyx_v_newp[2]) = __pyx_v_sz;
+3522: de = de + get_angle_energy_change_c(off + i, idx_to_bead, newp, angle_lookup)
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_c((__pyx_v_off + __pyx_v_i), __pyx_v_idx_to_bead, __pyx_v_newp, __pyx_v_angle_lookup));
+3523: _apply_bead_move(grid, type_grid, idx_to_bead, off + i, bx[i], by[i], bz[i], sx, sy, sz, chainID)
__pyx_f_5pimms_15mega_crank_fast__apply_bead_move(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, (__pyx_v_off + __pyx_v_i), (__pyx_v_bx[__pyx_v_i]), (__pyx_v_by[__pyx_v_i]), (__pyx_v_bz[__pyx_v_i]), __pyx_v_sx, __pyx_v_sy, __pyx_v_sz, __pyx_v_chainID);
+3524: pnx = sx; pny = sy; pnz = sz
__pyx_v_pnx = __pyx_v_sx;
__pyx_v_pny = __pyx_v_sy;
__pyx_v_pnz = __pyx_v_sz;
+3525: k = i
__pyx_v_k = __pyx_v_i;
+3526: for j in range(i + 1, L):
__pyx_t_6 = __pyx_v_L;
__pyx_t_9 = __pyx_t_6;
for (__pyx_t_10 = (__pyx_v_i + 1); __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
__pyx_v_j = __pyx_t_10;
+3527: if cheby_adjacent(pnx, pny, pnz, bx[j], by[j], bz[j], XDIM, YDIM, ZDIM, hardwall) == 1:
__pyx_t_3 = (__pyx_f_5pimms_15mega_crank_fast_cheby_adjacent(__pyx_v_pnx, __pyx_v_pny, __pyx_v_pnz, (__pyx_v_bx[__pyx_v_j]), (__pyx_v_by[__pyx_v_j]), (__pyx_v_bz[__pyx_v_j]), __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_hardwall) == 1);
if (__pyx_t_3) {
/* … */
}
+3528: k = j - 1; restored = 1; break
__pyx_v_k = (__pyx_v_j - 1);
__pyx_v_restored = 1;
goto __pyx_L15_break;
+3529: ox = bx[j]; oy = by[j]; oz = bz[j]
__pyx_v_ox = (__pyx_v_bx[__pyx_v_j]);
__pyx_v_oy = (__pyx_v_by[__pyx_v_j]);
__pyx_v_oz = (__pyx_v_bz[__pyx_v_j]);
+3530: tx = bx[j - 1]; ty = by[j - 1]; tz = bz[j - 1]
__pyx_v_tx = (__pyx_v_bx[(__pyx_v_j - 1)]);
__pyx_v_ty = (__pyx_v_by[(__pyx_v_j - 1)]);
__pyx_v_tz = (__pyx_v_bz[(__pyx_v_j - 1)]);
+3531: de = de + get_energy_change_c(grid, type_grid, ox, oy, oz, tx, ty, tz,
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_energy_change_c(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_ox, __pyx_v_oy, __pyx_v_oz, __pyx_v_tx, __pyx_v_ty, __pyx_v_tz, (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_hardwall));
+3532: idx_to_bead[off + j, 1], interaction_table, LR_interaction_table,
__pyx_t_8 = (__pyx_v_off + __pyx_v_j);
__pyx_t_1 = 1;
__pyx_t_11 = -1;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_11 = 0;
} else if (unlikely(__pyx_t_8 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_11 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_11 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_11 = 1;
if (unlikely(__pyx_t_11 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_11);
__PYX_ERR(0, 3532, __pyx_L1_error)
}
3533: SLR_interaction_table, XDIM, YDIM, ZDIM, hardwall)
+3534: newp[0] = tx; newp[1] = ty; newp[2] = tz
(__pyx_v_newp[0]) = __pyx_v_tx;
(__pyx_v_newp[1]) = __pyx_v_ty;
(__pyx_v_newp[2]) = __pyx_v_tz;
+3535: de = de + get_angle_energy_change_c(off + j, idx_to_bead, newp, angle_lookup)
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_c((__pyx_v_off + __pyx_v_j), __pyx_v_idx_to_bead, __pyx_v_newp, __pyx_v_angle_lookup));
+3536: _apply_bead_move(grid, type_grid, idx_to_bead, off + j, ox, oy, oz, tx, ty, tz, chainID)
__pyx_f_5pimms_15mega_crank_fast__apply_bead_move(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, (__pyx_v_off + __pyx_v_j), __pyx_v_ox, __pyx_v_oy, __pyx_v_oz, __pyx_v_tx, __pyx_v_ty, __pyx_v_tz, __pyx_v_chainID);
+3537: pnx = tx; pny = ty; pnz = tz
__pyx_v_pnx = __pyx_v_tx;
__pyx_v_pny = __pyx_v_ty;
__pyx_v_pnz = __pyx_v_tz;
+3538: k = j
__pyx_v_k = __pyx_v_j;
}
__pyx_L15_break:;
+3539: lo = i; hi = k
__pyx_v_lo = __pyx_v_i;
__pyx_v_hi = __pyx_v_k;
+3540: if restored == 1:
__pyx_t_3 = (__pyx_v_restored == 1);
if (__pyx_t_3) {
/* … */
}
+3541: nR = pull_first_targets_interior(grid, bx[k + 1], by[k + 1], bz[k + 1],
__pyx_v_nR = __pyx_f_5pimms_15mega_crank_fast_pull_first_targets_interior(__pyx_v_grid, (__pyx_v_bx[(__pyx_v_k + 1)]), (__pyx_v_by[(__pyx_v_k + 1)]), (__pyx_v_bz[(__pyx_v_k + 1)]), (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) ))), (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_12 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_13 * __pyx_v_idx_to_bead.strides[1]) ))), (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_14 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_15 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_hardwall, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_tbuf, __pyx_v_bxb, __pyx_v_byb, __pyx_v_bzb, __pyx_v_Lx, __pyx_v_Ly, __pyx_v_Lz, __pyx_v_nbx, __pyx_v_nby, __pyx_v_nbz, __pyx_v_shift_x, __pyx_v_shift_y, __pyx_v_shift_z, __pyx_v_W);
+3542: idx_to_bead[off + k, 5], idx_to_bead[off + k, 6], idx_to_bead[off + k, 7],
__pyx_t_1 = (__pyx_v_off + __pyx_v_k);
__pyx_t_8 = 5;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_8 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3542, __pyx_L1_error)
}
__pyx_t_12 = (__pyx_v_off + __pyx_v_k);
__pyx_t_13 = 6;
__pyx_t_6 = -1;
if (__pyx_t_12 < 0) {
__pyx_t_12 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_12 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_12 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_13 < 0) {
__pyx_t_13 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_13 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_13 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3542, __pyx_L1_error)
}
__pyx_t_14 = (__pyx_v_off + __pyx_v_k);
__pyx_t_15 = 7;
__pyx_t_6 = -1;
if (__pyx_t_14 < 0) {
__pyx_t_14 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_14 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_14 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_15 < 0) {
__pyx_t_15 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_15 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_15 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3542, __pyx_L1_error)
}
3543: hardwall, XDIM, YDIM, ZDIM, tbuf,
3544: bxb, byb, bzb, Lx, Ly, Lz, nbx, nby, nbz,
3545: shift_x, shift_y, shift_z, W)
3546: else:
+3547: nF = pull_first_targets_interior(grid, bx[i + 1], by[i + 1], bz[i + 1],
/*else*/ {
/* … */
__pyx_v_nF = __pyx_f_5pimms_15mega_crank_fast_pull_first_targets_interior(__pyx_v_grid, (__pyx_v_bx[(__pyx_v_i + 1)]), (__pyx_v_by[(__pyx_v_i + 1)]), (__pyx_v_bz[(__pyx_v_i + 1)]), (__pyx_v_bx[__pyx_v_i]), (__pyx_v_by[__pyx_v_i]), (__pyx_v_bz[__pyx_v_i]), __pyx_v_hardwall, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_tbuf, __pyx_v_bxb, __pyx_v_byb, __pyx_v_bzb, __pyx_v_Lx, __pyx_v_Ly, __pyx_v_Lz, __pyx_v_nbx, __pyx_v_nby, __pyx_v_nbz, __pyx_v_shift_x, __pyx_v_shift_y, __pyx_v_shift_z, __pyx_v_W);
3548: bx[i], by[i], bz[i], hardwall, XDIM, YDIM, ZDIM, tbuf,
3549: bxb, byb, bzb, Lx, Ly, Lz, nbx, nby, nbz,
3550: shift_x, shift_y, shift_z, W)
+3551: if nF == 0:
__pyx_t_3 = (__pyx_v_nF == 0);
if (__pyx_t_3) {
/* … */
}
+3552: continue
goto __pyx_L4_continue;
+3553: r = rng_randint(&rng, 0, nF - 1)
__pyx_v_r = __pyx_f_5pimms_15mega_crank_fast_rng_randint((&__pyx_v_rng), 0, (__pyx_v_nF - 1));
+3554: sx = tbuf[3 * r]; sy = tbuf[3 * r + 1]; sz = tbuf[3 * r + 2]
__pyx_v_sx = (__pyx_v_tbuf[(3 * __pyx_v_r)]);
__pyx_v_sy = (__pyx_v_tbuf[((3 * __pyx_v_r) + 1)]);
__pyx_v_sz = (__pyx_v_tbuf[((3 * __pyx_v_r) + 2)]);
+3555: de = get_energy_change_c(grid, type_grid, bx[i], by[i], bz[i], sx, sy, sz,
__pyx_v_de = __pyx_f_5pimms_15mega_crank_fast_get_energy_change_c(__pyx_v_grid, __pyx_v_type_grid, (__pyx_v_bx[__pyx_v_i]), (__pyx_v_by[__pyx_v_i]), (__pyx_v_bz[__pyx_v_i]), __pyx_v_sx, __pyx_v_sy, __pyx_v_sz, (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_15 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_14 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_hardwall);
+3556: idx_to_bead[off + i, 1], interaction_table, LR_interaction_table,
__pyx_t_15 = (__pyx_v_off + __pyx_v_i);
__pyx_t_14 = 1;
__pyx_t_6 = -1;
if (__pyx_t_15 < 0) {
__pyx_t_15 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_15 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_15 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_14 < 0) {
__pyx_t_14 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_14 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_14 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3556, __pyx_L1_error)
}
3557: SLR_interaction_table, XDIM, YDIM, ZDIM, hardwall)
+3558: newp[0] = sx; newp[1] = sy; newp[2] = sz
(__pyx_v_newp[0]) = __pyx_v_sx;
(__pyx_v_newp[1]) = __pyx_v_sy;
(__pyx_v_newp[2]) = __pyx_v_sz;
+3559: de = de + get_angle_energy_change_c(off + i, idx_to_bead, newp, angle_lookup)
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_c((__pyx_v_off + __pyx_v_i), __pyx_v_idx_to_bead, __pyx_v_newp, __pyx_v_angle_lookup));
+3560: _apply_bead_move(grid, type_grid, idx_to_bead, off + i, bx[i], by[i], bz[i], sx, sy, sz, chainID)
__pyx_f_5pimms_15mega_crank_fast__apply_bead_move(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, (__pyx_v_off + __pyx_v_i), (__pyx_v_bx[__pyx_v_i]), (__pyx_v_by[__pyx_v_i]), (__pyx_v_bz[__pyx_v_i]), __pyx_v_sx, __pyx_v_sy, __pyx_v_sz, __pyx_v_chainID);
+3561: pnx = sx; pny = sy; pnz = sz
__pyx_v_pnx = __pyx_v_sx;
__pyx_v_pny = __pyx_v_sy;
__pyx_v_pnz = __pyx_v_sz;
+3562: k = i
__pyx_v_k = __pyx_v_i;
+3563: for j in range(i - 1, -1, -1):
for (__pyx_t_6 = (__pyx_v_i - 1); __pyx_t_6 > -1; __pyx_t_6-=1) {
__pyx_v_j = __pyx_t_6;
+3564: if cheby_adjacent(pnx, pny, pnz, bx[j], by[j], bz[j], XDIM, YDIM, ZDIM, hardwall) == 1:
__pyx_t_3 = (__pyx_f_5pimms_15mega_crank_fast_cheby_adjacent(__pyx_v_pnx, __pyx_v_pny, __pyx_v_pnz, (__pyx_v_bx[__pyx_v_j]), (__pyx_v_by[__pyx_v_j]), (__pyx_v_bz[__pyx_v_j]), __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_hardwall) == 1);
if (__pyx_t_3) {
/* … */
}
+3565: k = j + 1; restored = 1; break
__pyx_v_k = (__pyx_v_j + 1);
__pyx_v_restored = 1;
goto __pyx_L20_break;
+3566: ox = bx[j]; oy = by[j]; oz = bz[j]
__pyx_v_ox = (__pyx_v_bx[__pyx_v_j]);
__pyx_v_oy = (__pyx_v_by[__pyx_v_j]);
__pyx_v_oz = (__pyx_v_bz[__pyx_v_j]);
+3567: tx = bx[j + 1]; ty = by[j + 1]; tz = bz[j + 1]
__pyx_v_tx = (__pyx_v_bx[(__pyx_v_j + 1)]);
__pyx_v_ty = (__pyx_v_by[(__pyx_v_j + 1)]);
__pyx_v_tz = (__pyx_v_bz[(__pyx_v_j + 1)]);
+3568: de = de + get_energy_change_c(grid, type_grid, ox, oy, oz, tx, ty, tz,
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_energy_change_c(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_ox, __pyx_v_oy, __pyx_v_oz, __pyx_v_tx, __pyx_v_ty, __pyx_v_tz, (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_14 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_15 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_hardwall));
+3569: idx_to_bead[off + j, 1], interaction_table, LR_interaction_table,
__pyx_t_14 = (__pyx_v_off + __pyx_v_j);
__pyx_t_15 = 1;
__pyx_t_9 = -1;
if (__pyx_t_14 < 0) {
__pyx_t_14 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_14 < 0)) __pyx_t_9 = 0;
} else if (unlikely(__pyx_t_14 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_9 = 0;
if (__pyx_t_15 < 0) {
__pyx_t_15 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_15 < 0)) __pyx_t_9 = 1;
} else if (unlikely(__pyx_t_15 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_9 = 1;
if (unlikely(__pyx_t_9 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_9);
__PYX_ERR(0, 3569, __pyx_L1_error)
}
3570: SLR_interaction_table, XDIM, YDIM, ZDIM, hardwall)
+3571: newp[0] = tx; newp[1] = ty; newp[2] = tz
(__pyx_v_newp[0]) = __pyx_v_tx;
(__pyx_v_newp[1]) = __pyx_v_ty;
(__pyx_v_newp[2]) = __pyx_v_tz;
+3572: de = de + get_angle_energy_change_c(off + j, idx_to_bead, newp, angle_lookup)
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_c((__pyx_v_off + __pyx_v_j), __pyx_v_idx_to_bead, __pyx_v_newp, __pyx_v_angle_lookup));
+3573: _apply_bead_move(grid, type_grid, idx_to_bead, off + j, ox, oy, oz, tx, ty, tz, chainID)
__pyx_f_5pimms_15mega_crank_fast__apply_bead_move(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, (__pyx_v_off + __pyx_v_j), __pyx_v_ox, __pyx_v_oy, __pyx_v_oz, __pyx_v_tx, __pyx_v_ty, __pyx_v_tz, __pyx_v_chainID);
+3574: pnx = tx; pny = ty; pnz = tz
__pyx_v_pnx = __pyx_v_tx;
__pyx_v_pny = __pyx_v_ty;
__pyx_v_pnz = __pyx_v_tz;
+3575: k = j
__pyx_v_k = __pyx_v_j;
}
__pyx_L20_break:;
+3576: lo = k; hi = i
__pyx_v_lo = __pyx_v_k;
__pyx_v_hi = __pyx_v_i;
+3577: if restored == 1:
__pyx_t_3 = (__pyx_v_restored == 1);
if (__pyx_t_3) {
/* … */
}
}
__pyx_L12:;
+3578: nR = pull_first_targets_interior(grid, bx[k - 1], by[k - 1], bz[k - 1],
__pyx_v_nR = __pyx_f_5pimms_15mega_crank_fast_pull_first_targets_interior(__pyx_v_grid, (__pyx_v_bx[(__pyx_v_k - 1)]), (__pyx_v_by[(__pyx_v_k - 1)]), (__pyx_v_bz[(__pyx_v_k - 1)]), (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_15 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_14 * __pyx_v_idx_to_bead.strides[1]) ))), (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_13 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_12 * __pyx_v_idx_to_bead.strides[1]) ))), (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_hardwall, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_tbuf, __pyx_v_bxb, __pyx_v_byb, __pyx_v_bzb, __pyx_v_Lx, __pyx_v_Ly, __pyx_v_Lz, __pyx_v_nbx, __pyx_v_nby, __pyx_v_nbz, __pyx_v_shift_x, __pyx_v_shift_y, __pyx_v_shift_z, __pyx_v_W);
+3579: idx_to_bead[off + k, 5], idx_to_bead[off + k, 6], idx_to_bead[off + k, 7],
__pyx_t_15 = (__pyx_v_off + __pyx_v_k);
__pyx_t_14 = 5;
__pyx_t_6 = -1;
if (__pyx_t_15 < 0) {
__pyx_t_15 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_15 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_15 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_14 < 0) {
__pyx_t_14 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_14 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_14 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3579, __pyx_L1_error)
}
__pyx_t_13 = (__pyx_v_off + __pyx_v_k);
__pyx_t_12 = 6;
__pyx_t_6 = -1;
if (__pyx_t_13 < 0) {
__pyx_t_13 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_13 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_13 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_12 < 0) {
__pyx_t_12 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_12 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_12 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3579, __pyx_L1_error)
}
__pyx_t_8 = (__pyx_v_off + __pyx_v_k);
__pyx_t_1 = 7;
__pyx_t_6 = -1;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_8 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3579, __pyx_L1_error)
}
3580: hardwall, XDIM, YDIM, ZDIM, tbuf,
3581: bxb, byb, bzb, Lx, Ly, Lz, nbx, nby, nbz,
3582: shift_x, shift_y, shift_z, W)
3583:
+3584: if restored == 0:
__pyx_t_3 = (__pyx_v_restored == 0);
if (__pyx_t_3) {
/* … */
}
+3585: _revert_segment(grid, type_grid, idx_to_bead, off, lo, hi, bx, by, bz, chainID)
__pyx_f_5pimms_15mega_crank_fast__revert_segment(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, __pyx_v_off, __pyx_v_lo, __pyx_v_hi, __pyx_v_bx, __pyx_v_by, __pyx_v_bz, __pyx_v_chainID);
+3586: continue
goto __pyx_L4_continue;
3587:
+3588: if accept_p_ratio(invtemp, de, nF, nR, &rng) == 1:
__pyx_t_3 = (__pyx_f_5pimms_15mega_crank_fast_accept_p_ratio(__pyx_v_invtemp, __pyx_v_de, __pyx_v_nF, __pyx_v_nR, (&__pyx_v_rng)) == 1);
if (__pyx_t_3) {
/* … */
goto __pyx_L24;
}
+3589: dsum = dsum + de
__pyx_v_dsum = (__pyx_v_dsum + __pyx_v_de);
+3590: acc = acc + 1
__pyx_v_acc = (__pyx_v_acc + 1);
3591: else:
+3592: _revert_segment(grid, type_grid, idx_to_bead, off, lo, hi, bx, by, bz, chainID)
/*else*/ {
__pyx_f_5pimms_15mega_crank_fast__revert_segment(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, __pyx_v_off, __pyx_v_lo, __pyx_v_hi, __pyx_v_bx, __pyx_v_by, __pyx_v_bz, __pyx_v_chainID);
}
__pyx_L24:;
__pyx_L4_continue:;
}
3593:
+3594: out_delta[b] = dsum
__pyx_t_1 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_out_delta.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_out_delta.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 3594, __pyx_L1_error)
}
*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_out_delta.data) + __pyx_t_1)) )) = __pyx_v_dsum;
+3595: out_accepted[b] = acc
__pyx_t_1 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_out_accepted.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_out_accepted.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 3595, __pyx_L1_error)
}
*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_out_accepted.data) + __pyx_t_1)) )) = __pyx_v_acc;
3596:
3597:
+3598: @cython.wraparound(False)
/* Python wrapper */ static PyObject *__pyx_pw_5pimms_15mega_crank_fast_27mega_pull_parallel(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_5pimms_15mega_crank_fast_26mega_pull_parallel, "\n Parallel 3D pull megamove (the chain-level-frozen-halo analogue of\n mega_pull_parallel for slither). chain_selector is used only for the total\n work count; chains (length >= 3) are picked per block. Returns (energy, accepted).\n "); static PyMethodDef __pyx_mdef_5pimms_15mega_crank_fast_27mega_pull_parallel = {"mega_pull_parallel", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5pimms_15mega_crank_fast_27mega_pull_parallel, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_5pimms_15mega_crank_fast_26mega_pull_parallel}; static PyObject *__pyx_pw_5pimms_15mega_crank_fast_27mega_pull_parallel(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { __Pyx_memviewslice __pyx_v_grid = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_type_grid = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_idx_to_bead = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_chain_offset = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_chain_length = { 0, 0, { 0 }, { 0 }, { 0 } }; CYTHON_UNUSED __Pyx_memviewslice __pyx_v_chain_homo = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_chain_selector = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_LR_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_SLR_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_angle_lookup = { 0, 0, { 0 }, { 0 }, { 0 } }; long __pyx_v_energy; float __pyx_v_invtemp; int __pyx_v_passed_seed; int __pyx_v_hardwall; CYTHON_UNUSED int __pyx_v_max_chain_len; int __pyx_v_num_threads; __Pyx_memviewslice __pyx_v_frozen_mask = { 0, 0, { 0 }, { 0 }, { 0 } }; #if !CYTHON_METH_FASTCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("mega_pull_parallel (wrapper)", 0); #if !CYTHON_METH_FASTCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_grid,&__pyx_mstate_global->__pyx_n_u_type_grid,&__pyx_mstate_global->__pyx_n_u_idx_to_bead,&__pyx_mstate_global->__pyx_n_u_chain_offset,&__pyx_mstate_global->__pyx_n_u_chain_length,&__pyx_mstate_global->__pyx_n_u_chain_homo,&__pyx_mstate_global->__pyx_n_u_chain_selector,&__pyx_mstate_global->__pyx_n_u_interaction_table,&__pyx_mstate_global->__pyx_n_u_LR_interaction_table,&__pyx_mstate_global->__pyx_n_u_SLR_interaction_table,&__pyx_mstate_global->__pyx_n_u_angle_lookup,&__pyx_mstate_global->__pyx_n_u_energy,&__pyx_mstate_global->__pyx_n_u_invtemp,&__pyx_mstate_global->__pyx_n_u_passed_seed,&__pyx_mstate_global->__pyx_n_u_hardwall,&__pyx_mstate_global->__pyx_n_u_max_chain_len,&__pyx_mstate_global->__pyx_n_u_num_threads,&__pyx_mstate_global->__pyx_n_u_frozen_mask,0}; PyObject* values[18] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 3598, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 18: values[17] = __Pyx_ArgRef_FASTCALL(__pyx_args, 17); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[17])) __PYX_ERR(0, 3598, __pyx_L3_error) CYTHON_FALLTHROUGH; case 17: values[16] = __Pyx_ArgRef_FASTCALL(__pyx_args, 16); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[16])) __PYX_ERR(0, 3598, __pyx_L3_error) CYTHON_FALLTHROUGH; case 16: values[15] = __Pyx_ArgRef_FASTCALL(__pyx_args, 15); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[15])) __PYX_ERR(0, 3598, __pyx_L3_error) CYTHON_FALLTHROUGH; case 15: values[14] = __Pyx_ArgRef_FASTCALL(__pyx_args, 14); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[14])) __PYX_ERR(0, 3598, __pyx_L3_error) CYTHON_FALLTHROUGH; case 14: values[13] = __Pyx_ArgRef_FASTCALL(__pyx_args, 13); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[13])) __PYX_ERR(0, 3598, __pyx_L3_error) CYTHON_FALLTHROUGH; case 13: values[12] = __Pyx_ArgRef_FASTCALL(__pyx_args, 12); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[12])) __PYX_ERR(0, 3598, __pyx_L3_error) CYTHON_FALLTHROUGH; case 12: values[11] = __Pyx_ArgRef_FASTCALL(__pyx_args, 11); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[11])) __PYX_ERR(0, 3598, __pyx_L3_error) CYTHON_FALLTHROUGH; case 11: values[10] = __Pyx_ArgRef_FASTCALL(__pyx_args, 10); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[10])) __PYX_ERR(0, 3598, __pyx_L3_error) CYTHON_FALLTHROUGH; case 10: values[9] = __Pyx_ArgRef_FASTCALL(__pyx_args, 9); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[9])) __PYX_ERR(0, 3598, __pyx_L3_error) CYTHON_FALLTHROUGH; case 9: values[8] = __Pyx_ArgRef_FASTCALL(__pyx_args, 8); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[8])) __PYX_ERR(0, 3598, __pyx_L3_error) CYTHON_FALLTHROUGH; case 8: values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 3598, __pyx_L3_error) CYTHON_FALLTHROUGH; case 7: values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 3598, __pyx_L3_error) CYTHON_FALLTHROUGH; case 6: values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 3598, __pyx_L3_error) CYTHON_FALLTHROUGH; case 5: values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 3598, __pyx_L3_error) CYTHON_FALLTHROUGH; case 4: values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 3598, __pyx_L3_error) CYTHON_FALLTHROUGH; case 3: values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 3598, __pyx_L3_error) CYTHON_FALLTHROUGH; case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 3598, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 3598, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "mega_pull_parallel", 0) < (0)) __PYX_ERR(0, 3598, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 18; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("mega_pull_parallel", 1, 18, 18, i); __PYX_ERR(0, 3598, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 18)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 3598, __pyx_L3_error) values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 3598, __pyx_L3_error) values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 3598, __pyx_L3_error) values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 3598, __pyx_L3_error) values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 3598, __pyx_L3_error) values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 3598, __pyx_L3_error) values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 3598, __pyx_L3_error) values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 3598, __pyx_L3_error) values[8] = __Pyx_ArgRef_FASTCALL(__pyx_args, 8); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[8])) __PYX_ERR(0, 3598, __pyx_L3_error) values[9] = __Pyx_ArgRef_FASTCALL(__pyx_args, 9); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[9])) __PYX_ERR(0, 3598, __pyx_L3_error) values[10] = __Pyx_ArgRef_FASTCALL(__pyx_args, 10); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[10])) __PYX_ERR(0, 3598, __pyx_L3_error) values[11] = __Pyx_ArgRef_FASTCALL(__pyx_args, 11); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[11])) __PYX_ERR(0, 3598, __pyx_L3_error) values[12] = __Pyx_ArgRef_FASTCALL(__pyx_args, 12); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[12])) __PYX_ERR(0, 3598, __pyx_L3_error) values[13] = __Pyx_ArgRef_FASTCALL(__pyx_args, 13); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[13])) __PYX_ERR(0, 3598, __pyx_L3_error) values[14] = __Pyx_ArgRef_FASTCALL(__pyx_args, 14); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[14])) __PYX_ERR(0, 3598, __pyx_L3_error) values[15] = __Pyx_ArgRef_FASTCALL(__pyx_args, 15); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[15])) __PYX_ERR(0, 3598, __pyx_L3_error) values[16] = __Pyx_ArgRef_FASTCALL(__pyx_args, 16); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[16])) __PYX_ERR(0, 3598, __pyx_L3_error) values[17] = __Pyx_ArgRef_FASTCALL(__pyx_args, 17); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[17])) __PYX_ERR(0, 3598, __pyx_L3_error) } __pyx_v_grid = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_grid.memview)) __PYX_ERR(0, 3600, __pyx_L3_error) __pyx_v_type_grid = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_type_grid.memview)) __PYX_ERR(0, 3601, __pyx_L3_error) __pyx_v_idx_to_bead = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_idx_to_bead.memview)) __PYX_ERR(0, 3602, __pyx_L3_error) __pyx_v_chain_offset = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_offset.memview)) __PYX_ERR(0, 3603, __pyx_L3_error) __pyx_v_chain_length = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_length.memview)) __PYX_ERR(0, 3604, __pyx_L3_error) __pyx_v_chain_homo = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_homo.memview)) __PYX_ERR(0, 3605, __pyx_L3_error) __pyx_v_chain_selector = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_selector.memview)) __PYX_ERR(0, 3606, __pyx_L3_error) __pyx_v_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[7], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interaction_table.memview)) __PYX_ERR(0, 3607, __pyx_L3_error) __pyx_v_LR_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_LR_interaction_table.memview)) __PYX_ERR(0, 3608, __pyx_L3_error) __pyx_v_SLR_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_SLR_interaction_table.memview)) __PYX_ERR(0, 3609, __pyx_L3_error) __pyx_v_angle_lookup = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsdsdsdsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_angle_lookup.memview)) __PYX_ERR(0, 3610, __pyx_L3_error) __pyx_v_energy = __Pyx_PyLong_As_long(values[11]); if (unlikely((__pyx_v_energy == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 3611, __pyx_L3_error) __pyx_v_invtemp = __Pyx_PyFloat_AsFloat(values[12]); if (unlikely((__pyx_v_invtemp == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 3612, __pyx_L3_error) __pyx_v_passed_seed = __Pyx_PyLong_As_int(values[13]); if (unlikely((__pyx_v_passed_seed == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3613, __pyx_L3_error) __pyx_v_hardwall = __Pyx_PyLong_As_int(values[14]); if (unlikely((__pyx_v_hardwall == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3614, __pyx_L3_error) __pyx_v_max_chain_len = __Pyx_PyLong_As_int(values[15]); if (unlikely((__pyx_v_max_chain_len == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3615, __pyx_L3_error) __pyx_v_num_threads = __Pyx_PyLong_As_int(values[16]); if (unlikely((__pyx_v_num_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3616, __pyx_L3_error) __pyx_v_frozen_mask = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[17], PyBUF_WRITABLE); if (unlikely(!__pyx_v_frozen_mask.memview)) __PYX_ERR(0, 3617, __pyx_L3_error) } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("mega_pull_parallel", 1, 18, 18, __pyx_nargs); __PYX_ERR(0, 3598, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __PYX_XCLEAR_MEMVIEW(&__pyx_v_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_type_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_idx_to_bead, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_offset, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_length, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_homo, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_selector, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_LR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_SLR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_angle_lookup, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_frozen_mask, 1); __Pyx_AddTraceback("pimms.mega_crank_fast.mega_pull_parallel", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5pimms_15mega_crank_fast_26mega_pull_parallel(__pyx_self, __pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, __pyx_v_chain_offset, __pyx_v_chain_length, __pyx_v_chain_homo, __pyx_v_chain_selector, __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_angle_lookup, __pyx_v_energy, __pyx_v_invtemp, __pyx_v_passed_seed, __pyx_v_hardwall, __pyx_v_max_chain_len, __pyx_v_num_threads, __pyx_v_frozen_mask); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __PYX_XCLEAR_MEMVIEW(&__pyx_v_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_type_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_idx_to_bead, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_offset, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_length, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_homo, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_selector, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_LR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_SLR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_angle_lookup, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_frozen_mask, 1); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ static PyObject *__pyx_pf_5pimms_15mega_crank_fast_26mega_pull_parallel(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_grid, __Pyx_memviewslice __pyx_v_type_grid, __Pyx_memviewslice __pyx_v_idx_to_bead, __Pyx_memviewslice __pyx_v_chain_offset, __Pyx_memviewslice __pyx_v_chain_length, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_chain_homo, __Pyx_memviewslice __pyx_v_chain_selector, __Pyx_memviewslice __pyx_v_interaction_table, __Pyx_memviewslice __pyx_v_LR_interaction_table, __Pyx_memviewslice __pyx_v_SLR_interaction_table, __Pyx_memviewslice __pyx_v_angle_lookup, long __pyx_v_energy, float __pyx_v_invtemp, int __pyx_v_passed_seed, int __pyx_v_hardwall, CYTHON_UNUSED int __pyx_v_max_chain_len, int __pyx_v_num_threads, __Pyx_memviewslice __pyx_v_frozen_mask) { struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_4_mega_pull_parallel *__pyx_cur_scope; int __pyx_v_XDIM; int __pyx_v_YDIM; int __pyx_v_ZDIM; int __pyx_v_num_chains; int __pyx_v_n_steps; PyObject *__pyx_v_idx_np = NULL; int __pyx_v_R_int; int __pyx_v_cap; int __pyx_v_nbx; int __pyx_v_nby; int __pyx_v_nbz; int __pyx_v_Lx; int __pyx_v_Ly; int __pyx_v_Lz; int __pyx_v_num_blocks; PyObject *__pyx_v_rstate = NULL; int __pyx_v_shift_x; int __pyx_v_shift_y; int __pyx_v_shift_z; PyObject *__pyx_v_gx = NULL; PyObject *__pyx_v_gy = NULL; PyObject *__pyx_v_gz = NULL; PyObject *__pyx_v_dim_block = 0; PyObject *__pyx_v_bxj = NULL; PyObject *__pyx_v_byj = NULL; PyObject *__pyx_v_bzj = NULL; PyObject *__pyx_v_block_of_bead = NULL; PyObject *__pyx_v_chain_block = NULL; PyObject *__pyx_v_movable = NULL; PyObject *__pyx_v_mblocks = NULL; PyObject *__pyx_v_order = NULL; PyObject *__pyx_v_chain_ids = NULL; PyObject *__pyx_v_sorted_blocks = NULL; PyObject *__pyx_v_counts = NULL; PyObject *__pyx_v_starts = NULL; PyObject *__pyx_v_total_movable = NULL; PyObject *__pyx_v_attempts = NULL; PyObject *__pyx_v_bix = NULL; PyObject *__pyx_v_biy = NULL; PyObject *__pyx_v_biz = NULL; PyObject *__pyx_v_blo_x = NULL; PyObject *__pyx_v_blo_y = NULL; PyObject *__pyx_v_blo_z = NULL; PyObject *__pyx_v_seeds = NULL; PyObject *__pyx_v_out_delta = NULL; PyObject *__pyx_v_out_accepted = NULL; __Pyx_memviewslice __pyx_v_chain_ids_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_starts_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_attempts_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_seeds_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_blo_x_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_blo_y_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_blo_z_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_out_delta_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_out_accepted_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; int __pyx_v_b; CYTHON_UNUSED int __pyx_v_nthreads; long __pyx_v_tot_d; int __pyx_v_tot_a; PyObject *__pyx_r = NULL; __pyx_cur_scope = (struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_4_mega_pull_parallel *)__pyx_tp_new_5pimms_15mega_crank_fast___pyx_scope_struct_4_mega_pull_parallel(__pyx_mstate_global->__pyx_ptype_5pimms_15mega_crank_fast___pyx_scope_struct_4_mega_pull_parallel, __pyx_mstate_global->__pyx_empty_tuple, NULL); if (unlikely(!__pyx_cur_scope)) { __pyx_cur_scope = ((struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_4_mega_pull_parallel *)Py_None); __Pyx_INCREF(Py_None); __PYX_ERR(0, 3598, __pyx_L1_error) } else { __Pyx_GOTREF((PyObject *)__pyx_cur_scope); } /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_11); __Pyx_XDECREF(__pyx_t_12); __Pyx_XDECREF(__pyx_t_13); __Pyx_XDECREF(__pyx_t_14); __Pyx_XDECREF(__pyx_t_16); __PYX_XCLEAR_MEMVIEW(&__pyx_t_17, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_t_18, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_t_19, 1); __Pyx_AddTraceback("pimms.mega_crank_fast.mega_pull_parallel", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_idx_np); __Pyx_XDECREF(__pyx_v_rstate); __Pyx_XDECREF(__pyx_v_gx); __Pyx_XDECREF(__pyx_v_gy); __Pyx_XDECREF(__pyx_v_gz); __Pyx_XDECREF(__pyx_v_dim_block); __Pyx_XDECREF(__pyx_v_bxj); __Pyx_XDECREF(__pyx_v_byj); __Pyx_XDECREF(__pyx_v_bzj); __Pyx_XDECREF(__pyx_v_block_of_bead); __Pyx_XDECREF(__pyx_v_chain_block); __Pyx_XDECREF(__pyx_v_movable); __Pyx_XDECREF(__pyx_v_mblocks); __Pyx_XDECREF(__pyx_v_order); __Pyx_XDECREF(__pyx_v_chain_ids); __Pyx_XDECREF(__pyx_v_sorted_blocks); __Pyx_XDECREF(__pyx_v_counts); __Pyx_XDECREF(__pyx_v_starts); __Pyx_XDECREF(__pyx_v_total_movable); __Pyx_XDECREF(__pyx_v_attempts); __Pyx_XDECREF(__pyx_v_bix); __Pyx_XDECREF(__pyx_v_biy); __Pyx_XDECREF(__pyx_v_biz); __Pyx_XDECREF(__pyx_v_blo_x); __Pyx_XDECREF(__pyx_v_blo_y); __Pyx_XDECREF(__pyx_v_blo_z); __Pyx_XDECREF(__pyx_v_seeds); __Pyx_XDECREF(__pyx_v_out_delta); __Pyx_XDECREF(__pyx_v_out_accepted); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_ids_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_starts_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_attempts_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_seeds_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_blo_x_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_blo_y_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_blo_z_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_out_delta_mv, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_out_accepted_mv, 1); __Pyx_DECREF((PyObject *)__pyx_cur_scope); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_5pimms_15mega_crank_fast_27mega_pull_parallel, 0, __pyx_mstate_global->__pyx_n_u_mega_pull_parallel, NULL, __pyx_mstate_global->__pyx_n_u_pimms_mega_crank_fast, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[19])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3598, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_mega_pull_parallel, __pyx_t_4) < (0)) __PYX_ERR(0, 3598, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* … */ struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_4_mega_pull_parallel { PyObject_HEAD int __pyx_v_W; int __pyx_v_num_beads; };
3599: @cython.boundscheck(False)
3600: def mega_pull_parallel(NUMPY_INT_TYPE[:, :, :] grid,
3601: NUMPY_INT_TYPE[:, :, :] type_grid,
3602: NUMPY_INT_TYPE_long[:, :] idx_to_bead,
3603: int[::1] chain_offset,
3604: int[::1] chain_length,
3605: int[::1] chain_homo,
3606: int[::1] chain_selector,
3607: NUMPY_INT_TYPE[:, :] interaction_table,
3608: NUMPY_INT_TYPE[:, :] LR_interaction_table,
3609: NUMPY_INT_TYPE[:, :] SLR_interaction_table,
3610: NUMPY_INT_TYPE[:, :, :, :, :, :, :] angle_lookup,
3611: long energy,
3612: float invtemp,
3613: int passed_seed,
3614: int hardwall,
3615: int max_chain_len,
3616: int num_threads,
3617: NUMPY_INT_TYPE[::1] frozen_mask):
3618: """
3619: Parallel 3D pull megamove (the chain-level-frozen-halo analogue of
3620: mega_pull_parallel for slither). chain_selector is used only for the total
3621: work count; chains (length >= 3) are picked per block. Returns (energy, accepted).
3622: """
+3623: cdef int XDIM = grid.shape[0]
__pyx_v_XDIM = (__pyx_v_grid.shape[0]);
+3624: cdef int YDIM = grid.shape[1]
__pyx_v_YDIM = (__pyx_v_grid.shape[1]);
+3625: cdef int ZDIM = grid.shape[2]
__pyx_v_ZDIM = (__pyx_v_grid.shape[2]);
+3626: cdef int num_beads = idx_to_bead.shape[0]
__pyx_cur_scope->__pyx_v_num_beads = (__pyx_v_idx_to_bead.shape[0]);
+3627: cdef int num_chains = chain_offset.shape[0]
__pyx_v_num_chains = (__pyx_v_chain_offset.shape[0]);
+3628: cdef int n_steps = chain_selector.shape[0]
__pyx_v_n_steps = (__pyx_v_chain_selector.shape[0]);
3629:
+3630: idx_np = np.asarray(idx_to_bead)
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3630, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_asarray); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3630, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_idx_to_bead, 2, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3630, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3630, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_idx_np = __pyx_t_1; __pyx_t_1 = 0;
+3631: cdef int R_int = 3 if np.any(idx_np[:, 1] == 1) else 1
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3631, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_any); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3631, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_idx_np, __pyx_mstate_global->__pyx_tuple[1]); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3631, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyLong_EqObjC(__pyx_t_3, __pyx_mstate_global->__pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3631, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3631, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 3631, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_8) { __pyx_t_6 = 3; } else { __pyx_t_6 = 1; } __pyx_v_R_int = __pyx_t_6;
+3632: cdef int W = R_int + 2
__pyx_cur_scope->__pyx_v_W = (__pyx_v_R_int + 2);
3633:
+3634: cdef int cap = 4
__pyx_v_cap = 4;
+3635: cdef int nbx = _choose_nb(XDIM, W, cap)
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_choose_nb); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3635, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_XDIM); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3635, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_W); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3635, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_cap); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3635, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_t_4, __pyx_t_3, __pyx_t_9}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3635, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3635, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_nbx = __pyx_t_6;
+3636: cdef int nby = _choose_nb(YDIM, W, cap)
__pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_choose_nb); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3636, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_YDIM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3636, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_W); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3636, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_cap); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3636, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[4] = {__pyx_t_7, __pyx_t_3, __pyx_t_4, __pyx_t_2}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3636, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3636, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_nby = __pyx_t_6;
+3637: cdef int nbz = _choose_nb(ZDIM, W, cap)
__pyx_t_9 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_choose_nb); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3637, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_ZDIM); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3637, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_W); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3637, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_cap); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3637, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_9); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[4] = {__pyx_t_9, __pyx_t_4, __pyx_t_3, __pyx_t_7}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3637, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3637, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_nbz = __pyx_t_6;
+3638: cdef int Lx = XDIM // nbx
if (unlikely(__pyx_v_nbx == 0)) {
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__PYX_ERR(0, 3638, __pyx_L1_error)
}
else if (sizeof(int) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_nbx == (int)-1) && unlikely(__Pyx_UNARY_NEG_WOULD_OVERFLOW(__pyx_v_XDIM))) {
PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
__PYX_ERR(0, 3638, __pyx_L1_error)
}
__pyx_v_Lx = __Pyx_div_int(__pyx_v_XDIM, __pyx_v_nbx, 0);
+3639: cdef int Ly = YDIM // nby
if (unlikely(__pyx_v_nby == 0)) {
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__PYX_ERR(0, 3639, __pyx_L1_error)
}
else if (sizeof(int) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_nby == (int)-1) && unlikely(__Pyx_UNARY_NEG_WOULD_OVERFLOW(__pyx_v_YDIM))) {
PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
__PYX_ERR(0, 3639, __pyx_L1_error)
}
__pyx_v_Ly = __Pyx_div_int(__pyx_v_YDIM, __pyx_v_nby, 0);
+3640: cdef int Lz = ZDIM // nbz
if (unlikely(__pyx_v_nbz == 0)) {
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__PYX_ERR(0, 3640, __pyx_L1_error)
}
else if (sizeof(int) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_nbz == (int)-1) && unlikely(__Pyx_UNARY_NEG_WOULD_OVERFLOW(__pyx_v_ZDIM))) {
PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
__PYX_ERR(0, 3640, __pyx_L1_error)
}
__pyx_v_Lz = __Pyx_div_int(__pyx_v_ZDIM, __pyx_v_nbz, 0);
+3641: cdef int num_blocks = nbx * nby * nbz
__pyx_v_num_blocks = ((__pyx_v_nbx * __pyx_v_nby) * __pyx_v_nbz);
3642:
+3643: rstate = np.random.RandomState(passed_seed & 0x7FFFFFFF)
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3643, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_random); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3643, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_2 = __pyx_t_3; __Pyx_INCREF(__pyx_t_2); __pyx_t_7 = __Pyx_PyLong_From_long((__pyx_v_passed_seed & 0x7FFFFFFF)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3643, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_7}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_RandomState, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3643, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_rstate = __pyx_t_1; __pyx_t_1 = 0;
+3644: cdef int shift_x = int(rstate.randint(0, Lx)) if nbx > 1 else 0
__pyx_t_8 = (__pyx_v_nbx > 1);
if (__pyx_t_8) {
__pyx_t_3 = __pyx_v_rstate;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_Lx); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3644, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_mstate_global->__pyx_int_0, __pyx_t_7};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_randint, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3644, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_t_7 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3644, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_10 = __Pyx_PyLong_As_int(__pyx_t_7); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3644, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__pyx_t_6 = __pyx_t_10;
} else {
__pyx_t_6 = 0;
}
__pyx_v_shift_x = __pyx_t_6;
+3645: cdef int shift_y = int(rstate.randint(0, Ly)) if nby > 1 else 0
__pyx_t_8 = (__pyx_v_nby > 1);
if (__pyx_t_8) {
__pyx_t_1 = __pyx_v_rstate;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_Ly); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3645, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_mstate_global->__pyx_int_0, __pyx_t_3};
__pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_randint, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3645, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
}
__pyx_t_3 = __Pyx_PyNumber_Int(__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3645, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__pyx_t_10 = __Pyx_PyLong_As_int(__pyx_t_3); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3645, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_6 = __pyx_t_10;
} else {
__pyx_t_6 = 0;
}
__pyx_v_shift_y = __pyx_t_6;
+3646: cdef int shift_z = int(rstate.randint(0, Lz)) if nbz > 1 else 0
__pyx_t_8 = (__pyx_v_nbz > 1);
if (__pyx_t_8) {
__pyx_t_7 = __pyx_v_rstate;
__Pyx_INCREF(__pyx_t_7);
__pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_Lz); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3646, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_mstate_global->__pyx_int_0, __pyx_t_1};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_randint, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3646, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__pyx_t_1 = __Pyx_PyNumber_Int(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3646, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_10 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3646, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_6 = __pyx_t_10;
} else {
__pyx_t_6 = 0;
}
__pyx_v_shift_z = __pyx_t_6;
3647:
+3648: gx = idx_np[:, 5].astype(np.int64)
__pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_idx_np, __pyx_mstate_global->__pyx_tuple[2]); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3648, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_3 = __pyx_t_7; __Pyx_INCREF(__pyx_t_3); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3648, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3648, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_4}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3648, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_gx = __pyx_t_1; __pyx_t_1 = 0;
+3649: gy = idx_np[:, 6].astype(np.int64)
__pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_idx_np, __pyx_mstate_global->__pyx_tuple[3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3649, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_7 = __pyx_t_4; __Pyx_INCREF(__pyx_t_7); __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3649, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3649, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_2}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3649, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_gy = __pyx_t_1; __pyx_t_1 = 0;
+3650: gz = idx_np[:, 7].astype(np.int64)
__pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_idx_np, __pyx_mstate_global->__pyx_tuple[4]); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3650, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __pyx_t_2; __Pyx_INCREF(__pyx_t_4); __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3650, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3650, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_3}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3650, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_gz = __pyx_t_1; __pyx_t_1 = 0;
3651:
+3652: def dim_block(g, nb, L, DIM, shift):
/* Python wrapper */
static PyObject *__pyx_pw_5pimms_15mega_crank_fast_18mega_pull_parallel_1dim_block(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_5pimms_15mega_crank_fast_18mega_pull_parallel_1dim_block = {"dim_block", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5pimms_15mega_crank_fast_18mega_pull_parallel_1dim_block, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5pimms_15mega_crank_fast_18mega_pull_parallel_1dim_block(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_g = 0;
PyObject *__pyx_v_nb = 0;
PyObject *__pyx_v_L = 0;
PyObject *__pyx_v_DIM = 0;
PyObject *__pyx_v_shift = 0;
#if !CYTHON_METH_FASTCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("dim_block (wrapper)", 0);
#if !CYTHON_METH_FASTCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_g,&__pyx_mstate_global->__pyx_n_u_nb,&__pyx_mstate_global->__pyx_n_u_L,&__pyx_mstate_global->__pyx_n_u_DIM,&__pyx_mstate_global->__pyx_n_u_shift,0};
PyObject* values[5] = {0,0,0,0,0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 3652, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 5:
values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 3652, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 4:
values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 3652, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 3:
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 3652, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 3652, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 3652, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "dim_block", 0) < (0)) __PYX_ERR(0, 3652, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 5; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("dim_block", 1, 5, 5, i); __PYX_ERR(0, 3652, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 5)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 3652, __pyx_L3_error)
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 3652, __pyx_L3_error)
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 3652, __pyx_L3_error)
values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 3652, __pyx_L3_error)
values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 3652, __pyx_L3_error)
}
__pyx_v_g = values[0];
__pyx_v_nb = values[1];
__pyx_v_L = values[2];
__pyx_v_DIM = values[3];
__pyx_v_shift = values[4];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("dim_block", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 3652, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("pimms.mega_crank_fast.mega_pull_parallel.dim_block", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_5pimms_15mega_crank_fast_18mega_pull_parallel_dim_block(__pyx_self, __pyx_v_g, __pyx_v_nb, __pyx_v_L, __pyx_v_DIM, __pyx_v_shift);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_5pimms_15mega_crank_fast_18mega_pull_parallel_dim_block(PyObject *__pyx_self, PyObject *__pyx_v_g, PyObject *__pyx_v_nb, PyObject *__pyx_v_L, PyObject *__pyx_v_DIM, PyObject *__pyx_v_shift) {
struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_4_mega_pull_parallel *__pyx_cur_scope;
struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_4_mega_pull_parallel *__pyx_outer_scope;
PyObject *__pyx_v_s = NULL;
PyObject *__pyx_v_bj = NULL;
PyObject *__pyx_v_within = NULL;
PyObject *__pyx_v_bad = NULL;
PyObject *__pyx_r = NULL;
__pyx_outer_scope = (struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_4_mega_pull_parallel *) __Pyx_CyFunction_GetClosure(__pyx_self);
__pyx_cur_scope = __pyx_outer_scope;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("pimms.mega_crank_fast.mega_pull_parallel.dim_block", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_s);
__Pyx_XDECREF(__pyx_v_bj);
__Pyx_XDECREF(__pyx_v_within);
__Pyx_XDECREF(__pyx_v_bad);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_5pimms_15mega_crank_fast_18mega_pull_parallel_1dim_block, 0, __pyx_mstate_global->__pyx_n_u_mega_pull_parallel_locals_dim_bl, ((PyObject*)__pyx_cur_scope), __pyx_mstate_global->__pyx_n_u_pimms_mega_crank_fast, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[4])); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3652, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_v_dim_block = __pyx_t_1;
__pyx_t_1 = 0;
+3653: if nb == 1:
__pyx_t_1 = (__Pyx_PyLong_BoolEqObjC(__pyx_v_nb, __pyx_mstate_global->__pyx_int_1, 1, 0)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3653, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+3654: return np.zeros(num_beads, dtype=np.int64)
__Pyx_XDECREF(__pyx_r); __pyx_t_3 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3654, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_zeros); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3654, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_num_beads); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3654, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3654, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3654, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_3, __pyx_t_4}; __pyx_t_6 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3654, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_7, __pyx_t_6, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 3654, __pyx_L1_error) __pyx_t_2 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_6); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3654, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0;
+3655: s = (g - shift) % DIM
__pyx_t_2 = PyNumber_Subtract(__pyx_v_g, __pyx_v_shift); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3655, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = PyNumber_Remainder(__pyx_t_2, __pyx_v_DIM); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3655, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_s = __pyx_t_5; __pyx_t_5 = 0;
+3656: bj = s // L
__pyx_t_5 = PyNumber_FloorDivide(__pyx_v_s, __pyx_v_L); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3656, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_v_bj = __pyx_t_5; __pyx_t_5 = 0;
+3657: within = s - bj * L
__pyx_t_5 = PyNumber_Multiply(__pyx_v_bj, __pyx_v_L); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3657, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = PyNumber_Subtract(__pyx_v_s, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3657, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_within = __pyx_t_2; __pyx_t_2 = 0;
+3658: bad = (s >= nb * L) | (within < W) | (within >= L - W)
__pyx_t_2 = PyNumber_Multiply(__pyx_v_nb, __pyx_v_L); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = PyObject_RichCompare(__pyx_v_s, __pyx_t_2, Py_GE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3658, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_W); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = PyObject_RichCompare(__pyx_v_within, __pyx_t_2, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3658, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Or(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_W); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = PyNumber_Subtract(__pyx_v_L, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyObject_RichCompare(__pyx_v_within, __pyx_t_5, Py_GE); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3658, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyNumber_Or(__pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_bad = __pyx_t_5; __pyx_t_5 = 0;
+3659: bj = bj.copy()
__pyx_t_6 = __pyx_v_bj; __Pyx_INCREF(__pyx_t_6); __pyx_t_8 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL}; __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_copy, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3659, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } __Pyx_DECREF_SET(__pyx_v_bj, __pyx_t_5); __pyx_t_5 = 0;
+3660: bj[bad] = -1
if (unlikely((PyObject_SetItem(__pyx_v_bj, __pyx_v_bad, __pyx_mstate_global->__pyx_int_neg_1) < 0))) __PYX_ERR(0, 3660, __pyx_L1_error)
+3661: return bj
__Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_bj); __pyx_r = __pyx_v_bj; goto __pyx_L0;
3662:
+3663: bxj = dim_block(gx, nbx, Lx, XDIM, shift_x)
__pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_nbx); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3663, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_Lx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3663, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_XDIM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3663, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_shift_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3663, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_7 = __pyx_pf_5pimms_15mega_crank_fast_18mega_pull_parallel_dim_block(__pyx_v_dim_block, __pyx_v_gx, __pyx_t_1, __pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3663, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_bxj = __pyx_t_7; __pyx_t_7 = 0;
+3664: byj = dim_block(gy, nby, Ly, YDIM, shift_y)
__pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_nby); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3664, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_Ly); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3664, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_YDIM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3664, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_shift_y); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3664, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __pyx_pf_5pimms_15mega_crank_fast_18mega_pull_parallel_dim_block(__pyx_v_dim_block, __pyx_v_gy, __pyx_t_7, __pyx_t_4, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3664, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_byj = __pyx_t_1; __pyx_t_1 = 0;
+3665: bzj = dim_block(gz, nbz, Lz, ZDIM, shift_z)
__pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_nbz); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3665, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_Lz); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3665, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_ZDIM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3665, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_shift_z); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3665, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_7 = __pyx_pf_5pimms_15mega_crank_fast_18mega_pull_parallel_dim_block(__pyx_v_dim_block, __pyx_v_gz, __pyx_t_1, __pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3665, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_bzj = __pyx_t_7; __pyx_t_7 = 0;
+3666: block_of_bead = (bxj * nby * nbz + byj * nbz + bzj)
__pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_nby); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3666, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = PyNumber_Multiply(__pyx_v_bxj, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3666, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_nbz); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3666, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_3 = PyNumber_Multiply(__pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3666, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_nbz); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3666, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = PyNumber_Multiply(__pyx_v_byj, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3666, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = PyNumber_Add(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3666, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyNumber_Add(__pyx_t_7, __pyx_v_bzj); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3666, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_block_of_bead = __pyx_t_4; __pyx_t_4 = 0;
+3667: block_of_bead[(bxj < 0) | (byj < 0) | (bzj < 0)] = -1
__pyx_t_4 = PyObject_RichCompare(__pyx_v_bxj, __pyx_mstate_global->__pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3667, __pyx_L1_error) __pyx_t_7 = PyObject_RichCompare(__pyx_v_byj, __pyx_mstate_global->__pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3667, __pyx_L1_error) __pyx_t_3 = PyNumber_Or(__pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3667, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = PyObject_RichCompare(__pyx_v_bzj, __pyx_mstate_global->__pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3667, __pyx_L1_error) __pyx_t_4 = PyNumber_Or(__pyx_t_3, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3667, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely((PyObject_SetItem(__pyx_v_block_of_bead, __pyx_t_4, __pyx_mstate_global->__pyx_int_neg_1) < 0))) __PYX_ERR(0, 3667, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
3668:
+3669: block_of_bead[np.asarray(frozen_mask) != 0] = -1 # frozen beads -> whole chain frozen
__pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3669, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_asarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3669, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_frozen_mask, 1, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3669, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_3}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3669, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_2 = __Pyx_PyLong_NeObjC(__pyx_t_4, __pyx_mstate_global->__pyx_int_0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3669, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely((PyObject_SetItem(__pyx_v_block_of_bead, __pyx_t_2, __pyx_mstate_global->__pyx_int_neg_1) < 0))) __PYX_ERR(0, 3669, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3670: chain_block = _chain_block_assignment(block_of_bead, chain_offset, num_chains)
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_chain_block_assignment); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3670, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __pyx_memoryview_fromslice(__pyx_v_chain_offset, 1, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3670, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_num_chains); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3670, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_v_block_of_bead, __pyx_t_7, __pyx_t_1}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3670, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_v_chain_block = __pyx_t_2; __pyx_t_2 = 0;
+3671: chain_block[np.asarray(chain_length) < 3] = -1 # pull needs L >= 3
__pyx_t_3 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3671, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_asarray); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3671, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_chain_length, 1, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3671, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_1}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3671, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_t_7 = PyObject_RichCompare(__pyx_t_2, __pyx_mstate_global->__pyx_int_3, Py_LT); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3671, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely((PyObject_SetItem(__pyx_v_chain_block, __pyx_t_7, __pyx_mstate_global->__pyx_int_neg_1) < 0))) __PYX_ERR(0, 3671, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+3672: movable = np.nonzero(chain_block >= 0)[0].astype(np.int32)
__pyx_t_3 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3672, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_nonzero); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3672, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_RichCompare(__pyx_v_chain_block, __pyx_mstate_global->__pyx_int_0, Py_GE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3672, __pyx_L1_error) __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_4}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3672, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 0, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3672, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_2 = __pyx_t_9; __Pyx_INCREF(__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3672, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3672, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4}; __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3672, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } __pyx_v_movable = __pyx_t_7; __pyx_t_7 = 0;
+3673: if movable.shape[0] == 0:
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_movable, __pyx_mstate_global->__pyx_n_u_shape); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3673, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_7, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 0, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3673, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = (__Pyx_PyLong_BoolEqObjC(__pyx_t_9, __pyx_mstate_global->__pyx_int_0, 0, 0)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 3673, __pyx_L1_error) __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (__pyx_t_8) { /* … */ }
+3674: return (energy, 0)
__Pyx_XDECREF(__pyx_r); __pyx_t_9 = __Pyx_PyLong_From_long(__pyx_v_energy); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3674, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3674, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_GIVEREF(__pyx_t_9); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_9) != (0)) __PYX_ERR(0, 3674, __pyx_L1_error); __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_0); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_mstate_global->__pyx_int_0) != (0)) __PYX_ERR(0, 3674, __pyx_L1_error); __pyx_t_9 = 0; __pyx_r = __pyx_t_7; __pyx_t_7 = 0; goto __pyx_L0;
3675:
+3676: mblocks = chain_block[movable]
__pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_chain_block, __pyx_v_movable); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3676, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_v_mblocks = __pyx_t_7; __pyx_t_7 = 0;
+3677: order = np.argsort(mblocks, kind="stable")
__pyx_t_9 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3677, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_argsort); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3677, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_9); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_9, __pyx_v_mblocks}; __pyx_t_4 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3677, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_kind, __pyx_mstate_global->__pyx_n_u_stable, __pyx_t_4, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 3677, __pyx_L1_error) __pyx_t_7 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_4); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3677, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } __pyx_v_order = __pyx_t_7; __pyx_t_7 = 0;
+3678: chain_ids = movable[order].astype(np.int32)
__pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_movable, __pyx_v_order); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3678, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __pyx_t_4; __Pyx_INCREF(__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3678, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3678, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_1}; __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3678, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } __pyx_v_chain_ids = __pyx_t_7; __pyx_t_7 = 0;
+3679: sorted_blocks = mblocks[order]
__pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_mblocks, __pyx_v_order); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3679, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_v_sorted_blocks = __pyx_t_7; __pyx_t_7 = 0;
3680:
+3681: counts = np.bincount(sorted_blocks, minlength=num_blocks).astype(np.int32)
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3681, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_bincount); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3681, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3681, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_2, __pyx_v_sorted_blocks}; __pyx_t_11 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3681, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_minlength, __pyx_t_9, __pyx_t_11, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 3681, __pyx_L1_error) __pyx_t_1 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_11); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3681, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_4 = __pyx_t_1; __Pyx_INCREF(__pyx_t_4); __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3681, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3681, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_11}; __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3681, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } __pyx_v_counts = __pyx_t_7; __pyx_t_7 = 0;
+3682: starts = np.zeros(num_blocks + 1, dtype=np.int32)
__pyx_t_1 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3682, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_zeros); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3682, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = __Pyx_PyLong_From_long((__pyx_v_num_blocks + 1)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3682, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3682, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3682, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_1, __pyx_t_11}; __pyx_t_3 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3682, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_9, __pyx_t_3, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 3682, __pyx_L1_error) __pyx_t_7 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_3); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3682, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } __pyx_v_starts = __pyx_t_7; __pyx_t_7 = 0;
+3683: starts[1:] = np.cumsum(counts)
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3683, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_cumsum); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3683, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_counts}; __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3683, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } if (__Pyx_PyObject_SetSlice(__pyx_v_starts, __pyx_t_7, 1, 0, NULL, NULL, &__pyx_mstate_global->__pyx_slice[1], 1, 0, 0) < (0)) __PYX_ERR(0, 3683, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
3684:
+3685: total_movable = int(counts.sum())
__pyx_t_9 = __pyx_v_counts; __Pyx_INCREF(__pyx_t_9); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_9, NULL}; __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_sum, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3685, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } __pyx_t_9 = __Pyx_PyNumber_Int(__pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3685, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_total_movable = ((PyObject*)__pyx_t_9); __pyx_t_9 = 0;
+3686: attempts = np.maximum(
__pyx_t_3 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3686, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_maximum); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3686, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+3687: (n_steps * counts.astype(np.int64) // max(total_movable, 1)), 0).astype(np.int32)
__pyx_t_11 = __Pyx_PyLong_From_int(__pyx_v_n_steps); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3687, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = __pyx_v_counts; __Pyx_INCREF(__pyx_t_12); __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3687, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3687, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_14}; __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3687, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_t_14 = PyNumber_Multiply(__pyx_t_11, __pyx_t_2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3687, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_15 = 1; __Pyx_INCREF(__pyx_v_total_movable); __pyx_t_16 = __pyx_v_total_movable; __pyx_t_11 = __Pyx_PyLong_From_long(__pyx_t_15); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3687, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = PyObject_RichCompare(__pyx_t_11, __pyx_t_16, Py_GT); __Pyx_XGOTREF(__pyx_t_12); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3687, __pyx_L1_error) __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 3687, __pyx_L1_error) __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (__pyx_t_8) { __pyx_t_12 = __Pyx_PyLong_From_long(__pyx_t_15); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3687, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); if (__Pyx_PyInt_FromNumber(&__pyx_t_12, NULL, 0) < (0)) __PYX_ERR(0, 3687, __pyx_L1_error) __pyx_t_2 = __pyx_t_12; __pyx_t_12 = 0; } else { __Pyx_INCREF(__pyx_t_16); __pyx_t_2 = __pyx_t_16; } __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_12 = PyNumber_FloorDivide(__pyx_t_14, __pyx_t_2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3687, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_1))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_1, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_12, __pyx_mstate_global->__pyx_int_0}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3686, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_7 = __pyx_t_4; __Pyx_INCREF(__pyx_t_7); __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3687, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3687, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_12}; __pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3687, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_v_attempts = __pyx_t_9; __pyx_t_9 = 0;
3688:
+3689: bix = np.arange(num_blocks, dtype=np.int32) // (nby * nbz)
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3689, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_arange); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3689, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_12 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3689, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3689, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3689, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_4, __pyx_t_12}; __pyx_t_1 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3689, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_3, __pyx_t_1, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 3689, __pyx_L1_error) __pyx_t_9 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_1); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3689, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_t_7 = __Pyx_PyLong_From_int((__pyx_v_nby * __pyx_v_nbz)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3689, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = PyNumber_FloorDivide(__pyx_t_9, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3689, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_bix = __pyx_t_1; __pyx_t_1 = 0;
+3690: biy = (np.arange(num_blocks, dtype=np.int32) // nbz) % nby
__pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3690, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_arange); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3690, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3690, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3690, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3690, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_7, __pyx_t_9}; __pyx_t_12 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3690, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_4, __pyx_t_12, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 3690, __pyx_L1_error) __pyx_t_1 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_12); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3690, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_nbz); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3690, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_12 = PyNumber_FloorDivide(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3690, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_nby); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3690, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyNumber_Remainder(__pyx_t_12, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3690, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_biy = __pyx_t_1; __pyx_t_1 = 0;
+3691: biz = np.arange(num_blocks, dtype=np.int32) % nbz
__pyx_t_3 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3691, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_arange); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3691, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_12 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3691, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3691, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3691, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_3, __pyx_t_12}; __pyx_t_9 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3691, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_7, __pyx_t_9, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 3691, __pyx_L1_error) __pyx_t_1 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_9); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3691, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_nbz); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3691, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_9 = PyNumber_Remainder(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3691, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_biz = __pyx_t_9; __pyx_t_9 = 0;
+3692: blo_x = (bix * Lx).astype(np.int32)
__pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_Lx); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3692, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = PyNumber_Multiply(__pyx_v_bix, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3692, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_4 = __pyx_t_7; __Pyx_INCREF(__pyx_t_4); __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3692, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3692, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_12}; __pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3692, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_v_blo_x = __pyx_t_9; __pyx_t_9 = 0;
+3693: blo_y = (biy * Ly).astype(np.int32)
__pyx_t_12 = __Pyx_PyLong_From_int(__pyx_v_Ly); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3693, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_4 = PyNumber_Multiply(__pyx_v_biy, __pyx_t_12); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3693, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_7 = __pyx_t_4; __Pyx_INCREF(__pyx_t_7); __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3693, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3693, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_1}; __pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3693, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_v_blo_y = __pyx_t_9; __pyx_t_9 = 0;
+3694: blo_z = (biz * Lz).astype(np.int32)
__pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_Lz); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = PyNumber_Multiply(__pyx_v_biz, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_4 = __pyx_t_7; __Pyx_INCREF(__pyx_t_4); __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_12}; __pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_v_blo_z = __pyx_t_9; __pyx_t_9 = 0;
3695:
+3696: seeds = (np.arange(num_blocks, dtype=np.uint64) + np.uint64(passed_seed) + np.uint64(0x9E3779B9)) \
__pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3696, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_arange); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3696, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_12 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3696, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3696, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_uint64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3696, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_7, __pyx_t_12}; __pyx_t_1 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3696, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_3, __pyx_t_1, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 3696, __pyx_L1_error) __pyx_t_9 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_1); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3696, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_t_1 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3696, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_uint64); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3696, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_passed_seed); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3696, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_12))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_12); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_12); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_12, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_3}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_12, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3696, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_12 = PyNumber_Add(__pyx_t_9, __pyx_t_4); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3696, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_9 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3696, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_uint64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3696, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_1))) { __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_1); assert(__pyx_t_9); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1); __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_1, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_mstate_global->__pyx_int_2654435769}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3696, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_1 = PyNumber_Add(__pyx_t_12, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3696, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+3697: * np.uint64(0x2545F4914F6CDD1D) + np.uint64(1)
__pyx_t_12 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3697, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_uint64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3697, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_12); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_12); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_mstate_global->__pyx_int_0x2545f4914f6cdd1d}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3697, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3697, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_1 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3697, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_uint64); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3697, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_mstate_global->__pyx_int_1}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3697, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_9 = PyNumber_Add(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3697, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_seeds = __pyx_t_9; __pyx_t_9 = 0;
3698:
+3699: out_delta = np.zeros(num_blocks, dtype=np.int64)
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3699, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3699, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3699, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3699, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3699, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_1))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_1, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_4, __pyx_t_3}; __pyx_t_12 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3699, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_7, __pyx_t_12, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 3699, __pyx_L1_error) __pyx_t_9 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_12); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3699, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_v_out_delta = __pyx_t_9; __pyx_t_9 = 0;
+3700: out_accepted = np.zeros(num_blocks, dtype=np.int32)
__pyx_t_1 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3700, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_zeros); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3700, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_12 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3700, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3700, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3700, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_1, __pyx_t_12}; __pyx_t_3 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3700, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_4, __pyx_t_3, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 3700, __pyx_L1_error) __pyx_t_9 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_3); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3700, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_v_out_accepted = __pyx_t_9; __pyx_t_9 = 0;
3701:
+3702: cdef int[::1] chain_ids_mv = chain_ids
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_chain_ids, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 3702, __pyx_L1_error) __pyx_v_chain_ids_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+3703: cdef int[::1] starts_mv = starts
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_starts, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 3703, __pyx_L1_error) __pyx_v_starts_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+3704: cdef int[::1] attempts_mv = attempts
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_attempts, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 3704, __pyx_L1_error) __pyx_v_attempts_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+3705: cdef unsigned long long[::1] seeds_mv = seeds
__pyx_t_18 = __Pyx_PyObject_to_MemoryviewSlice_dc_unsigned_PY_LONG_LONG(__pyx_v_seeds, PyBUF_WRITABLE); if (unlikely(!__pyx_t_18.memview)) __PYX_ERR(0, 3705, __pyx_L1_error) __pyx_v_seeds_mv = __pyx_t_18; __pyx_t_18.memview = NULL; __pyx_t_18.data = NULL;
+3706: cdef int[::1] blo_x_mv = blo_x
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_blo_x, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 3706, __pyx_L1_error) __pyx_v_blo_x_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+3707: cdef int[::1] blo_y_mv = blo_y
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_blo_y, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 3707, __pyx_L1_error) __pyx_v_blo_y_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+3708: cdef int[::1] blo_z_mv = blo_z
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_blo_z, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 3708, __pyx_L1_error) __pyx_v_blo_z_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+3709: cdef long[::1] out_delta_mv = out_delta
__pyx_t_19 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_v_out_delta, PyBUF_WRITABLE); if (unlikely(!__pyx_t_19.memview)) __PYX_ERR(0, 3709, __pyx_L1_error) __pyx_v_out_delta_mv = __pyx_t_19; __pyx_t_19.memview = NULL; __pyx_t_19.data = NULL;
+3710: cdef int[::1] out_accepted_mv = out_accepted
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_out_accepted, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 3710, __pyx_L1_error) __pyx_v_out_accepted_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
3711:
3712: cdef int b
+3713: cdef int nthreads = num_threads if num_threads > 0 else 1
__pyx_t_8 = (__pyx_v_num_threads > 0);
if (__pyx_t_8) {
__pyx_t_6 = __pyx_v_num_threads;
} else {
__pyx_t_6 = 1;
}
__pyx_v_nthreads = __pyx_t_6;
3714:
+3715: for b in prange(num_blocks, nogil=True, num_threads=nthreads, schedule='dynamic'):
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
__pyx_t_6 = __pyx_v_num_blocks;
{
#if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
#undef likely
#undef unlikely
#define likely(x) (x)
#define unlikely(x) (x)
#endif
__pyx_t_20 = (__pyx_t_6 - 0 + 1 - 1/abs(1)) / 1;
if (__pyx_t_20 > 0)
{
#ifdef _OPENMP
#pragma omp parallel
#endif /* _OPENMP */
{
#ifdef _OPENMP
#pragma omp for firstprivate(__pyx_v_b) lastprivate(__pyx_v_b) schedule(dynamic) __pyx_t_6 = __pyx_v_num_blocks;
{
#if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
#undef likely
#undef unlikely
#define likely(x) (x)
#define unlikely(x) (x)
#endif
__pyx_t_20 = (__pyx_t_6 - 0 + 1 - 1/abs(1)) / 1;
if (__pyx_t_20 > 0)
{
#ifdef _OPENMP
#pragma omp parallel
#endif /* _OPENMP */
{
#ifdef _OPENMP
#pragma omp for firstprivate(__pyx_v_b) lastprivate(__pyx_v_b) schedule(dynamic) num_threads(__pyx_v_nthreads)
#endif /* _OPENMP */
for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_20; __pyx_t_10++){
{
__pyx_v_b = (int)(0 + 1 * __pyx_t_10);
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L6;
}
__pyx_L6:;
}
}
+3716: run_block_pull(b, chain_ids_mv, starts_mv, attempts_mv, seeds_mv,
__pyx_f_5pimms_15mega_crank_fast_run_block_pull(__pyx_v_b, __pyx_v_chain_ids_mv, __pyx_v_starts_mv, __pyx_v_attempts_mv, __pyx_v_seeds_mv, __pyx_v_chain_offset, __pyx_v_chain_length, __pyx_v_blo_x_mv, __pyx_v_blo_y_mv, __pyx_v_blo_z_mv, __pyx_v_Lx, __pyx_v_Ly, __pyx_v_Lz, __pyx_v_nbx, __pyx_v_nby, __pyx_v_nbz, __pyx_v_shift_x, __pyx_v_shift_y, __pyx_v_shift_z, __pyx_cur_scope->__pyx_v_W, __pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_angle_lookup, __pyx_v_invtemp, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_ZDIM, __pyx_v_hardwall, __pyx_v_out_delta_mv, __pyx_v_out_accepted_mv);
}
}
}
}
}
#if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
#undef likely
#undef unlikely
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
#endif
}
3717: chain_offset, chain_length,
3718: blo_x_mv, blo_y_mv, blo_z_mv,
3719: Lx, Ly, Lz, nbx, nby, nbz,
3720: shift_x, shift_y, shift_z, W,
3721: grid, type_grid, idx_to_bead,
3722: interaction_table, LR_interaction_table, SLR_interaction_table,
3723: angle_lookup, invtemp, XDIM, YDIM, ZDIM, hardwall,
3724: out_delta_mv, out_accepted_mv)
3725:
+3726: cdef long tot_d = 0
__pyx_v_tot_d = 0;
+3727: cdef int tot_a = 0
__pyx_v_tot_a = 0;
+3728: for b in range(num_blocks):
__pyx_t_20 = __pyx_v_num_blocks;
__pyx_t_10 = __pyx_t_20;
for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_10; __pyx_t_6+=1) {
__pyx_v_b = __pyx_t_6;
+3729: tot_d += out_delta_mv[b]
__pyx_t_21 = __pyx_v_b;
__pyx_v_tot_d = (__pyx_v_tot_d + (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_out_delta_mv.data) + __pyx_t_21)) ))));
+3730: tot_a += out_accepted_mv[b]
__pyx_t_21 = __pyx_v_b;
__pyx_v_tot_a = (__pyx_v_tot_a + (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_out_accepted_mv.data) + __pyx_t_21)) ))));
}
+3731: return (energy + tot_d, tot_a)
__Pyx_XDECREF(__pyx_r); __pyx_t_9 = __Pyx_PyLong_From_long((__pyx_v_energy + __pyx_v_tot_d)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3731, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_tot_a); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3731, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3731, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_9); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_9) != (0)) __PYX_ERR(0, 3731, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_7); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_7) != (0)) __PYX_ERR(0, 3731, __pyx_L1_error); __pyx_t_9 = 0; __pyx_t_7 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0;
3732:
3733:
+3734: cdef int pull_first_targets_interior_2D(NUMPY_INT_TYPE[:, :] grid,
static int __pyx_f_5pimms_15mega_crank_fast_pull_first_targets_interior_2D(__Pyx_memviewslice __pyx_v_grid, int __pyx_v_anchor_x, int __pyx_v_anchor_y, int __pyx_v_mov_x, int __pyx_v_mov_y, int __pyx_v_hardwall, int __pyx_v_XDIM, int __pyx_v_YDIM, int *__pyx_v_out_buf, int __pyx_v_blo_x_b, int __pyx_v_blo_y_b, int __pyx_v_Lx, int __pyx_v_Ly, int __pyx_v_nbx, int __pyx_v_nby, int __pyx_v_shift_x, int __pyx_v_shift_y, int __pyx_v_W) {
int __pyx_v_count;
int __pyx_v_dx;
int __pyx_v_dy;
int __pyx_v_tx;
int __pyx_v_ty;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast.pull_first_targets_interior_2D", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
return __pyx_r;
}
3735: int anchor_x, int anchor_y,
3736: int mov_x, int mov_y,
3737: int hardwall, int XDIM, int YDIM,
3738: int* out_buf,
3739: int blo_x_b, int blo_y_b,
3740: int Lx, int Ly, int nbx, int nby,
3741: int shift_x, int shift_y, int W) noexcept nogil:
+3742: cdef int count = 0
__pyx_v_count = 0;
3743: cdef int dx, dy, tx, ty
+3744: for dx in range(-1, 2):
for (__pyx_t_1 = -1; __pyx_t_1 < 2; __pyx_t_1+=1) {
__pyx_v_dx = __pyx_t_1;
+3745: for dy in range(-1, 2):
for (__pyx_t_2 = -1; __pyx_t_2 < 2; __pyx_t_2+=1) {
__pyx_v_dy = __pyx_t_2;
+3746: tx = pbc_correction(mov_x + dx, XDIM)
__pyx_v_tx = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_mov_x + __pyx_v_dx), __pyx_v_XDIM);
+3747: ty = pbc_correction(mov_y + dy, YDIM)
__pyx_v_ty = __pyx_f_5pimms_15mega_crank_fast_pbc_correction((__pyx_v_mov_y + __pyx_v_dy), __pyx_v_YDIM);
+3748: if grid[tx, ty] != 0:
__pyx_t_3 = __pyx_v_tx;
__pyx_t_4 = __pyx_v_ty;
__pyx_t_5 = -1;
if (__pyx_t_3 < 0) {
__pyx_t_3 += __pyx_v_grid.shape[0];
if (unlikely(__pyx_t_3 < 0)) __pyx_t_5 = 0;
} else if (unlikely(__pyx_t_3 >= __pyx_v_grid.shape[0])) __pyx_t_5 = 0;
if (__pyx_t_4 < 0) {
__pyx_t_4 += __pyx_v_grid.shape[1];
if (unlikely(__pyx_t_4 < 0)) __pyx_t_5 = 1;
} else if (unlikely(__pyx_t_4 >= __pyx_v_grid.shape[1])) __pyx_t_5 = 1;
if (unlikely(__pyx_t_5 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_5);
__PYX_ERR(0, 3748, __pyx_L1_error)
}
__pyx_t_6 = ((*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_grid.data + __pyx_t_3 * __pyx_v_grid.strides[0]) ) + __pyx_t_4 * __pyx_v_grid.strides[1]) ))) != 0);
if (__pyx_t_6) {
/* … */
}
+3749: continue
goto __pyx_L5_continue;
+3750: if cheby_adjacent_2D(tx, ty, mov_x, mov_y, XDIM, YDIM, hardwall) == 0:
__pyx_t_6 = (__pyx_f_5pimms_15mega_crank_fast_cheby_adjacent_2D(__pyx_v_tx, __pyx_v_ty, __pyx_v_mov_x, __pyx_v_mov_y, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_hardwall) == 0);
if (__pyx_t_6) {
/* … */
}
+3751: continue
goto __pyx_L5_continue;
+3752: if cheby_adjacent_2D(tx, ty, anchor_x, anchor_y, XDIM, YDIM, hardwall) == 0:
__pyx_t_6 = (__pyx_f_5pimms_15mega_crank_fast_cheby_adjacent_2D(__pyx_v_tx, __pyx_v_ty, __pyx_v_anchor_x, __pyx_v_anchor_y, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_hardwall) == 0);
if (__pyx_t_6) {
/* … */
}
+3753: continue
goto __pyx_L5_continue;
+3754: if _in_interior_2d(tx, ty, blo_x_b, blo_y_b, Lx, Ly, nbx, nby,
if (__pyx_t_6) {
/* … */
}
+3755: shift_x, shift_y, W, XDIM, YDIM) == 0:
__pyx_t_6 = (__pyx_f_5pimms_15mega_crank_fast__in_interior_2d(__pyx_v_tx, __pyx_v_ty, __pyx_v_blo_x_b, __pyx_v_blo_y_b, __pyx_v_Lx, __pyx_v_Ly, __pyx_v_nbx, __pyx_v_nby, __pyx_v_shift_x, __pyx_v_shift_y, __pyx_v_W, __pyx_v_XDIM, __pyx_v_YDIM) == 0);
+3756: continue
goto __pyx_L5_continue;
+3757: out_buf[2 * count] = tx
(__pyx_v_out_buf[(2 * __pyx_v_count)]) = __pyx_v_tx;
+3758: out_buf[2 * count + 1] = ty
(__pyx_v_out_buf[((2 * __pyx_v_count) + 1)]) = __pyx_v_ty;
+3759: count = count + 1
__pyx_v_count = (__pyx_v_count + 1);
__pyx_L5_continue:;
}
}
+3760: return count
__pyx_r = __pyx_v_count; goto __pyx_L0;
3761:
3762:
+3763: cdef void run_block_pull_2D(int b,
static void __pyx_f_5pimms_15mega_crank_fast_run_block_pull_2D(int __pyx_v_b, __Pyx_memviewslice __pyx_v_chain_ids, __Pyx_memviewslice __pyx_v_starts, __Pyx_memviewslice __pyx_v_attempts, __Pyx_memviewslice __pyx_v_seeds, __Pyx_memviewslice __pyx_v_chain_offset, __Pyx_memviewslice __pyx_v_chain_length, __Pyx_memviewslice __pyx_v_blo_x, __Pyx_memviewslice __pyx_v_blo_y, int __pyx_v_Lx, int __pyx_v_Ly, int __pyx_v_nbx, int __pyx_v_nby, int __pyx_v_shift_x, int __pyx_v_shift_y, int __pyx_v_W, __Pyx_memviewslice __pyx_v_grid, __Pyx_memviewslice __pyx_v_type_grid, __Pyx_memviewslice __pyx_v_idx_to_bead, __Pyx_memviewslice __pyx_v_interaction_table, __Pyx_memviewslice __pyx_v_LR_interaction_table, __Pyx_memviewslice __pyx_v_SLR_interaction_table, __Pyx_memviewslice __pyx_v_angle_lookup, float __pyx_v_invtemp, int __pyx_v_XDIM, int __pyx_v_YDIM, int __pyx_v_hardwall, __Pyx_memviewslice __pyx_v_out_delta, __Pyx_memviewslice __pyx_v_out_accepted) {
int __pyx_v_lo_blk;
int __pyx_v_hi_blk;
int __pyx_v_n_block;
unsigned PY_LONG_LONG __pyx_v_rng;
long __pyx_v_dsum;
int __pyx_v_acc;
CYTHON_UNUSED int __pyx_v_step;
int __pyx_v_pick;
int __pyx_v_c;
int __pyx_v_off;
int __pyx_v_L;
int __pyx_v_chainID;
int __pyx_v_i;
int __pyx_v_j;
int __pyx_v_k;
int __pyx_v_direction;
int __pyx_v_nF;
int __pyx_v_nR;
int __pyx_v_r;
int __pyx_v_restored;
int __pyx_v_lo;
int __pyx_v_hi;
long __pyx_v_de;
int __pyx_v_sx;
int __pyx_v_sy;
int __pyx_v_ox;
int __pyx_v_oy;
int __pyx_v_tx;
int __pyx_v_ty;
int __pyx_v_pnx;
int __pyx_v_pny;
int __pyx_v_newp[2];
int __pyx_v_tbuf[18];
int __pyx_v_bx[512];
int __pyx_v_by[512];
int __pyx_v_bxb;
int __pyx_v_byb;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
__Pyx_WriteUnraisable("pimms.mega_crank_fast.run_block_pull_2D", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__Pyx_PyGILState_Release(__pyx_gilstate_save);
__pyx_L0:;
}
3764: int[::1] chain_ids, int[::1] starts, int[::1] attempts,
3765: unsigned long long[::1] seeds,
3766: int[::1] chain_offset, int[::1] chain_length,
3767: int[::1] blo_x, int[::1] blo_y,
3768: int Lx, int Ly, int nbx, int nby,
3769: int shift_x, int shift_y, int W,
3770: NUMPY_INT_TYPE[:, :] grid, NUMPY_INT_TYPE[:, :] type_grid,
3771: NUMPY_INT_TYPE_long[:, :] idx_to_bead,
3772: NUMPY_INT_TYPE[:, :] interaction_table,
3773: NUMPY_INT_TYPE[:, :] LR_interaction_table,
3774: NUMPY_INT_TYPE[:, :] SLR_interaction_table,
3775: NUMPY_INT_TYPE[:, :, :, :, :] angle_lookup,
3776: float invtemp, int XDIM, int YDIM, int hardwall,
3777: long[::1] out_delta, int[::1] out_accepted) noexcept nogil:
3778:
+3779: cdef int lo_blk = starts[b]
__pyx_t_1 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_starts.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_starts.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 3779, __pyx_L1_error)
}
__pyx_v_lo_blk = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_starts.data) + __pyx_t_1)) )));
+3780: cdef int hi_blk = starts[b + 1]
__pyx_t_1 = (__pyx_v_b + 1);
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_starts.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_starts.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 3780, __pyx_L1_error)
}
__pyx_v_hi_blk = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_starts.data) + __pyx_t_1)) )));
+3781: cdef int n_block = hi_blk - lo_blk
__pyx_v_n_block = (__pyx_v_hi_blk - __pyx_v_lo_blk);
+3782: out_delta[b] = 0
__pyx_t_1 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_out_delta.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_out_delta.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 3782, __pyx_L1_error)
}
*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_out_delta.data) + __pyx_t_1)) )) = 0;
+3783: out_accepted[b] = 0
__pyx_t_1 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_out_accepted.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_out_accepted.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 3783, __pyx_L1_error)
}
*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_out_accepted.data) + __pyx_t_1)) )) = 0;
+3784: if n_block <= 0:
__pyx_t_3 = (__pyx_v_n_block <= 0);
if (__pyx_t_3) {
/* … */
}
+3785: return
goto __pyx_L0;
3786:
+3787: cdef unsigned long long rng = seeds[b]
__pyx_t_1 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_seeds.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_seeds.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 3787, __pyx_L1_error)
}
__pyx_v_rng = (*((unsigned PY_LONG_LONG *) ( /* dim=0 */ ((char *) (((unsigned PY_LONG_LONG *) __pyx_v_seeds.data) + __pyx_t_1)) )));
+3788: cdef long dsum = 0
__pyx_v_dsum = 0;
+3789: cdef int acc = 0
__pyx_v_acc = 0;
3790: cdef int step, pick, c, off, L, chainID, i, j, k, direction, nF, nR, r, restored, lo, hi
3791: cdef long de
3792: cdef int sx, sy, ox, oy, tx, ty, pnx, pny
3793: cdef int newp[2]
3794: cdef int tbuf[18]
3795: cdef int bx[512]
3796: cdef int by[512]
3797:
+3798: cdef int bxb = blo_x[b]
__pyx_t_1 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_blo_x.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_blo_x.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 3798, __pyx_L1_error)
}
__pyx_v_bxb = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_blo_x.data) + __pyx_t_1)) )));
+3799: cdef int byb = blo_y[b]
__pyx_t_1 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_blo_y.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_blo_y.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 3799, __pyx_L1_error)
}
__pyx_v_byb = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_blo_y.data) + __pyx_t_1)) )));
3800:
+3801: for step in range(attempts[b]):
__pyx_t_1 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_attempts.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_attempts.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 3801, __pyx_L1_error)
}
__pyx_t_2 = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_attempts.data) + __pyx_t_1)) )));
__pyx_t_4 = __pyx_t_2;
for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
__pyx_v_step = __pyx_t_5;
+3802: pick = lo_blk + <int>(rng_uniform(&rng) * n_block)
__pyx_v_pick = (__pyx_v_lo_blk + ((int)(__pyx_f_5pimms_15mega_crank_fast_rng_uniform((&__pyx_v_rng)) * __pyx_v_n_block)));
+3803: if pick >= hi_blk:
__pyx_t_3 = (__pyx_v_pick >= __pyx_v_hi_blk);
if (__pyx_t_3) {
/* … */
}
+3804: pick = hi_blk - 1
__pyx_v_pick = (__pyx_v_hi_blk - 1);
+3805: c = chain_ids[pick]
__pyx_t_1 = __pyx_v_pick;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_chain_ids.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_chain_ids.shape[0])) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3805, __pyx_L1_error)
}
__pyx_v_c = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_chain_ids.data) + __pyx_t_1)) )));
+3806: off = chain_offset[c]
__pyx_t_1 = __pyx_v_c;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_chain_offset.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_chain_offset.shape[0])) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3806, __pyx_L1_error)
}
__pyx_v_off = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_chain_offset.data) + __pyx_t_1)) )));
+3807: L = chain_length[c]
__pyx_t_1 = __pyx_v_c;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_chain_length.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_chain_length.shape[0])) __pyx_t_6 = 0;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3807, __pyx_L1_error)
}
__pyx_v_L = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_chain_length.data) + __pyx_t_1)) )));
+3808: if L < 3 or L > 512:
__pyx_t_7 = (__pyx_v_L < 3);
if (!__pyx_t_7) {
} else {
__pyx_t_3 = __pyx_t_7;
goto __pyx_L8_bool_binop_done;
}
__pyx_t_7 = (__pyx_v_L > 0x200);
__pyx_t_3 = __pyx_t_7;
__pyx_L8_bool_binop_done:;
if (__pyx_t_3) {
/* … */
}
+3809: continue
goto __pyx_L4_continue;
+3810: chainID = idx_to_bead[off, 4]
__pyx_t_1 = __pyx_v_off;
__pyx_t_8 = 4;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_8 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3810, __pyx_L1_error)
}
__pyx_v_chainID = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) )));
3811:
+3812: for j in range(L):
__pyx_t_6 = __pyx_v_L;
__pyx_t_9 = __pyx_t_6;
for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
__pyx_v_j = __pyx_t_10;
+3813: bx[j] = idx_to_bead[off + j, 5]
__pyx_t_8 = (__pyx_v_off + __pyx_v_j);
__pyx_t_1 = 5;
__pyx_t_11 = -1;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_11 = 0;
} else if (unlikely(__pyx_t_8 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_11 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_11 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_11 = 1;
if (unlikely(__pyx_t_11 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_11);
__PYX_ERR(0, 3813, __pyx_L1_error)
}
(__pyx_v_bx[__pyx_v_j]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) )));
+3814: by[j] = idx_to_bead[off + j, 6]
__pyx_t_1 = (__pyx_v_off + __pyx_v_j);
__pyx_t_8 = 6;
__pyx_t_11 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_11 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_11 = 0;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_11 = 1;
} else if (unlikely(__pyx_t_8 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_11 = 1;
if (unlikely(__pyx_t_11 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_11);
__PYX_ERR(0, 3814, __pyx_L1_error)
}
(__pyx_v_by[__pyx_v_j]) = (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) )));
}
3815:
+3816: i = 1 + rng_randint(&rng, 0, L - 3)
__pyx_v_i = (1 + __pyx_f_5pimms_15mega_crank_fast_rng_randint((&__pyx_v_rng), 0, (__pyx_v_L - 3)));
+3817: direction = rng_randint(&rng, 0, 1)
__pyx_v_direction = __pyx_f_5pimms_15mega_crank_fast_rng_randint((&__pyx_v_rng), 0, 1);
+3818: restored = 0
__pyx_v_restored = 0;
+3819: nR = 0
__pyx_v_nR = 0;
3820:
+3821: if direction == 0:
__pyx_t_3 = (__pyx_v_direction == 0);
if (__pyx_t_3) {
/* … */
goto __pyx_L12;
}
+3822: nF = pull_first_targets_interior_2D(grid, bx[i - 1], by[i - 1], bx[i], by[i],
__pyx_v_nF = __pyx_f_5pimms_15mega_crank_fast_pull_first_targets_interior_2D(__pyx_v_grid, (__pyx_v_bx[(__pyx_v_i - 1)]), (__pyx_v_by[(__pyx_v_i - 1)]), (__pyx_v_bx[__pyx_v_i]), (__pyx_v_by[__pyx_v_i]), __pyx_v_hardwall, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_tbuf, __pyx_v_bxb, __pyx_v_byb, __pyx_v_Lx, __pyx_v_Ly, __pyx_v_nbx, __pyx_v_nby, __pyx_v_shift_x, __pyx_v_shift_y, __pyx_v_W);
3823: hardwall, XDIM, YDIM, tbuf,
3824: bxb, byb, Lx, Ly, nbx, nby, shift_x, shift_y, W)
+3825: if nF == 0:
__pyx_t_3 = (__pyx_v_nF == 0);
if (__pyx_t_3) {
/* … */
}
+3826: continue
goto __pyx_L4_continue;
+3827: r = rng_randint(&rng, 0, nF - 1)
__pyx_v_r = __pyx_f_5pimms_15mega_crank_fast_rng_randint((&__pyx_v_rng), 0, (__pyx_v_nF - 1));
+3828: sx = tbuf[2 * r]; sy = tbuf[2 * r + 1]
__pyx_v_sx = (__pyx_v_tbuf[(2 * __pyx_v_r)]);
__pyx_v_sy = (__pyx_v_tbuf[((2 * __pyx_v_r) + 1)]);
+3829: de = get_energy_change_2D_c(grid, type_grid, bx[i], by[i], sx, sy,
__pyx_v_de = __pyx_f_5pimms_15mega_crank_fast_get_energy_change_2D_c(__pyx_v_grid, __pyx_v_type_grid, (__pyx_v_bx[__pyx_v_i]), (__pyx_v_by[__pyx_v_i]), __pyx_v_sx, __pyx_v_sy, (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_hardwall);
+3830: idx_to_bead[off + i, 1], interaction_table, LR_interaction_table,
__pyx_t_8 = (__pyx_v_off + __pyx_v_i);
__pyx_t_1 = 1;
__pyx_t_6 = -1;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_8 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3830, __pyx_L1_error)
}
3831: SLR_interaction_table, XDIM, YDIM, hardwall)
+3832: newp[0] = sx; newp[1] = sy
(__pyx_v_newp[0]) = __pyx_v_sx;
(__pyx_v_newp[1]) = __pyx_v_sy;
+3833: de = de + get_angle_energy_change_2D_c(off + i, idx_to_bead, newp, angle_lookup)
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_2D_c((__pyx_v_off + __pyx_v_i), __pyx_v_idx_to_bead, __pyx_v_newp, __pyx_v_angle_lookup));
+3834: _apply_bead_move_2D(grid, type_grid, idx_to_bead, off + i, bx[i], by[i], sx, sy, chainID)
__pyx_f_5pimms_15mega_crank_fast__apply_bead_move_2D(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, (__pyx_v_off + __pyx_v_i), (__pyx_v_bx[__pyx_v_i]), (__pyx_v_by[__pyx_v_i]), __pyx_v_sx, __pyx_v_sy, __pyx_v_chainID);
+3835: pnx = sx; pny = sy
__pyx_v_pnx = __pyx_v_sx;
__pyx_v_pny = __pyx_v_sy;
+3836: k = i
__pyx_v_k = __pyx_v_i;
+3837: for j in range(i + 1, L):
__pyx_t_6 = __pyx_v_L;
__pyx_t_9 = __pyx_t_6;
for (__pyx_t_10 = (__pyx_v_i + 1); __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
__pyx_v_j = __pyx_t_10;
+3838: if cheby_adjacent_2D(pnx, pny, bx[j], by[j], XDIM, YDIM, hardwall) == 1:
__pyx_t_3 = (__pyx_f_5pimms_15mega_crank_fast_cheby_adjacent_2D(__pyx_v_pnx, __pyx_v_pny, (__pyx_v_bx[__pyx_v_j]), (__pyx_v_by[__pyx_v_j]), __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_hardwall) == 1);
if (__pyx_t_3) {
/* … */
}
+3839: k = j - 1; restored = 1; break
__pyx_v_k = (__pyx_v_j - 1);
__pyx_v_restored = 1;
goto __pyx_L15_break;
+3840: ox = bx[j]; oy = by[j]
__pyx_v_ox = (__pyx_v_bx[__pyx_v_j]);
__pyx_v_oy = (__pyx_v_by[__pyx_v_j]);
+3841: tx = bx[j - 1]; ty = by[j - 1]
__pyx_v_tx = (__pyx_v_bx[(__pyx_v_j - 1)]);
__pyx_v_ty = (__pyx_v_by[(__pyx_v_j - 1)]);
+3842: de = de + get_energy_change_2D_c(grid, type_grid, ox, oy, tx, ty,
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_energy_change_2D_c(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_ox, __pyx_v_oy, __pyx_v_tx, __pyx_v_ty, (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_hardwall));
+3843: idx_to_bead[off + j, 1], interaction_table, LR_interaction_table,
__pyx_t_1 = (__pyx_v_off + __pyx_v_j);
__pyx_t_8 = 1;
__pyx_t_11 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_11 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_11 = 0;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_11 = 1;
} else if (unlikely(__pyx_t_8 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_11 = 1;
if (unlikely(__pyx_t_11 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_11);
__PYX_ERR(0, 3843, __pyx_L1_error)
}
3844: SLR_interaction_table, XDIM, YDIM, hardwall)
+3845: newp[0] = tx; newp[1] = ty
(__pyx_v_newp[0]) = __pyx_v_tx;
(__pyx_v_newp[1]) = __pyx_v_ty;
+3846: de = de + get_angle_energy_change_2D_c(off + j, idx_to_bead, newp, angle_lookup)
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_2D_c((__pyx_v_off + __pyx_v_j), __pyx_v_idx_to_bead, __pyx_v_newp, __pyx_v_angle_lookup));
+3847: _apply_bead_move_2D(grid, type_grid, idx_to_bead, off + j, ox, oy, tx, ty, chainID)
__pyx_f_5pimms_15mega_crank_fast__apply_bead_move_2D(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, (__pyx_v_off + __pyx_v_j), __pyx_v_ox, __pyx_v_oy, __pyx_v_tx, __pyx_v_ty, __pyx_v_chainID);
+3848: pnx = tx; pny = ty
__pyx_v_pnx = __pyx_v_tx;
__pyx_v_pny = __pyx_v_ty;
+3849: k = j
__pyx_v_k = __pyx_v_j;
}
__pyx_L15_break:;
+3850: lo = i; hi = k
__pyx_v_lo = __pyx_v_i;
__pyx_v_hi = __pyx_v_k;
+3851: if restored == 1:
__pyx_t_3 = (__pyx_v_restored == 1);
if (__pyx_t_3) {
/* … */
}
+3852: nR = pull_first_targets_interior_2D(grid, bx[k + 1], by[k + 1],
__pyx_v_nR = __pyx_f_5pimms_15mega_crank_fast_pull_first_targets_interior_2D(__pyx_v_grid, (__pyx_v_bx[(__pyx_v_k + 1)]), (__pyx_v_by[(__pyx_v_k + 1)]), (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_8 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_1 * __pyx_v_idx_to_bead.strides[1]) ))), (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_12 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_13 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_hardwall, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_tbuf, __pyx_v_bxb, __pyx_v_byb, __pyx_v_Lx, __pyx_v_Ly, __pyx_v_nbx, __pyx_v_nby, __pyx_v_shift_x, __pyx_v_shift_y, __pyx_v_W);
+3853: idx_to_bead[off + k, 5], idx_to_bead[off + k, 6],
__pyx_t_8 = (__pyx_v_off + __pyx_v_k);
__pyx_t_1 = 5;
__pyx_t_6 = -1;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_8 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3853, __pyx_L1_error)
}
__pyx_t_12 = (__pyx_v_off + __pyx_v_k);
__pyx_t_13 = 6;
__pyx_t_6 = -1;
if (__pyx_t_12 < 0) {
__pyx_t_12 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_12 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_12 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_13 < 0) {
__pyx_t_13 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_13 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_13 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3853, __pyx_L1_error)
}
3854: hardwall, XDIM, YDIM, tbuf,
3855: bxb, byb, Lx, Ly, nbx, nby, shift_x, shift_y, W)
3856: else:
+3857: nF = pull_first_targets_interior_2D(grid, bx[i + 1], by[i + 1], bx[i], by[i],
/*else*/ {
/* … */
__pyx_v_nF = __pyx_f_5pimms_15mega_crank_fast_pull_first_targets_interior_2D(__pyx_v_grid, (__pyx_v_bx[(__pyx_v_i + 1)]), (__pyx_v_by[(__pyx_v_i + 1)]), (__pyx_v_bx[__pyx_v_i]), (__pyx_v_by[__pyx_v_i]), __pyx_v_hardwall, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_tbuf, __pyx_v_bxb, __pyx_v_byb, __pyx_v_Lx, __pyx_v_Ly, __pyx_v_nbx, __pyx_v_nby, __pyx_v_shift_x, __pyx_v_shift_y, __pyx_v_W);
3858: hardwall, XDIM, YDIM, tbuf,
3859: bxb, byb, Lx, Ly, nbx, nby, shift_x, shift_y, W)
+3860: if nF == 0:
__pyx_t_3 = (__pyx_v_nF == 0);
if (__pyx_t_3) {
/* … */
}
+3861: continue
goto __pyx_L4_continue;
+3862: r = rng_randint(&rng, 0, nF - 1)
__pyx_v_r = __pyx_f_5pimms_15mega_crank_fast_rng_randint((&__pyx_v_rng), 0, (__pyx_v_nF - 1));
+3863: sx = tbuf[2 * r]; sy = tbuf[2 * r + 1]
__pyx_v_sx = (__pyx_v_tbuf[(2 * __pyx_v_r)]);
__pyx_v_sy = (__pyx_v_tbuf[((2 * __pyx_v_r) + 1)]);
+3864: de = get_energy_change_2D_c(grid, type_grid, bx[i], by[i], sx, sy,
__pyx_v_de = __pyx_f_5pimms_15mega_crank_fast_get_energy_change_2D_c(__pyx_v_grid, __pyx_v_type_grid, (__pyx_v_bx[__pyx_v_i]), (__pyx_v_by[__pyx_v_i]), __pyx_v_sx, __pyx_v_sy, (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_13 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_12 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_hardwall);
+3865: idx_to_bead[off + i, 1], interaction_table, LR_interaction_table,
__pyx_t_13 = (__pyx_v_off + __pyx_v_i);
__pyx_t_12 = 1;
__pyx_t_6 = -1;
if (__pyx_t_13 < 0) {
__pyx_t_13 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_13 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_13 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_12 < 0) {
__pyx_t_12 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_12 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_12 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3865, __pyx_L1_error)
}
3866: SLR_interaction_table, XDIM, YDIM, hardwall)
+3867: newp[0] = sx; newp[1] = sy
(__pyx_v_newp[0]) = __pyx_v_sx;
(__pyx_v_newp[1]) = __pyx_v_sy;
+3868: de = de + get_angle_energy_change_2D_c(off + i, idx_to_bead, newp, angle_lookup)
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_2D_c((__pyx_v_off + __pyx_v_i), __pyx_v_idx_to_bead, __pyx_v_newp, __pyx_v_angle_lookup));
+3869: _apply_bead_move_2D(grid, type_grid, idx_to_bead, off + i, bx[i], by[i], sx, sy, chainID)
__pyx_f_5pimms_15mega_crank_fast__apply_bead_move_2D(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, (__pyx_v_off + __pyx_v_i), (__pyx_v_bx[__pyx_v_i]), (__pyx_v_by[__pyx_v_i]), __pyx_v_sx, __pyx_v_sy, __pyx_v_chainID);
+3870: pnx = sx; pny = sy
__pyx_v_pnx = __pyx_v_sx;
__pyx_v_pny = __pyx_v_sy;
+3871: k = i
__pyx_v_k = __pyx_v_i;
+3872: for j in range(i - 1, -1, -1):
for (__pyx_t_6 = (__pyx_v_i - 1); __pyx_t_6 > -1; __pyx_t_6-=1) {
__pyx_v_j = __pyx_t_6;
+3873: if cheby_adjacent_2D(pnx, pny, bx[j], by[j], XDIM, YDIM, hardwall) == 1:
__pyx_t_3 = (__pyx_f_5pimms_15mega_crank_fast_cheby_adjacent_2D(__pyx_v_pnx, __pyx_v_pny, (__pyx_v_bx[__pyx_v_j]), (__pyx_v_by[__pyx_v_j]), __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_hardwall) == 1);
if (__pyx_t_3) {
/* … */
}
+3874: k = j + 1; restored = 1; break
__pyx_v_k = (__pyx_v_j + 1);
__pyx_v_restored = 1;
goto __pyx_L20_break;
+3875: ox = bx[j]; oy = by[j]
__pyx_v_ox = (__pyx_v_bx[__pyx_v_j]);
__pyx_v_oy = (__pyx_v_by[__pyx_v_j]);
+3876: tx = bx[j + 1]; ty = by[j + 1]
__pyx_v_tx = (__pyx_v_bx[(__pyx_v_j + 1)]);
__pyx_v_ty = (__pyx_v_by[(__pyx_v_j + 1)]);
+3877: de = de + get_energy_change_2D_c(grid, type_grid, ox, oy, tx, ty,
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_energy_change_2D_c(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_ox, __pyx_v_oy, __pyx_v_tx, __pyx_v_ty, (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_12 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_13 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_hardwall));
+3878: idx_to_bead[off + j, 1], interaction_table, LR_interaction_table,
__pyx_t_12 = (__pyx_v_off + __pyx_v_j);
__pyx_t_13 = 1;
__pyx_t_9 = -1;
if (__pyx_t_12 < 0) {
__pyx_t_12 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_12 < 0)) __pyx_t_9 = 0;
} else if (unlikely(__pyx_t_12 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_9 = 0;
if (__pyx_t_13 < 0) {
__pyx_t_13 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_13 < 0)) __pyx_t_9 = 1;
} else if (unlikely(__pyx_t_13 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_9 = 1;
if (unlikely(__pyx_t_9 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_9);
__PYX_ERR(0, 3878, __pyx_L1_error)
}
3879: SLR_interaction_table, XDIM, YDIM, hardwall)
+3880: newp[0] = tx; newp[1] = ty
(__pyx_v_newp[0]) = __pyx_v_tx;
(__pyx_v_newp[1]) = __pyx_v_ty;
+3881: de = de + get_angle_energy_change_2D_c(off + j, idx_to_bead, newp, angle_lookup)
__pyx_v_de = (__pyx_v_de + __pyx_f_5pimms_15mega_crank_fast_get_angle_energy_change_2D_c((__pyx_v_off + __pyx_v_j), __pyx_v_idx_to_bead, __pyx_v_newp, __pyx_v_angle_lookup));
+3882: _apply_bead_move_2D(grid, type_grid, idx_to_bead, off + j, ox, oy, tx, ty, chainID)
__pyx_f_5pimms_15mega_crank_fast__apply_bead_move_2D(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, (__pyx_v_off + __pyx_v_j), __pyx_v_ox, __pyx_v_oy, __pyx_v_tx, __pyx_v_ty, __pyx_v_chainID);
+3883: pnx = tx; pny = ty
__pyx_v_pnx = __pyx_v_tx;
__pyx_v_pny = __pyx_v_ty;
+3884: k = j
__pyx_v_k = __pyx_v_j;
}
__pyx_L20_break:;
+3885: lo = k; hi = i
__pyx_v_lo = __pyx_v_k;
__pyx_v_hi = __pyx_v_i;
+3886: if restored == 1:
__pyx_t_3 = (__pyx_v_restored == 1);
if (__pyx_t_3) {
/* … */
}
}
__pyx_L12:;
+3887: nR = pull_first_targets_interior_2D(grid, bx[k - 1], by[k - 1],
__pyx_v_nR = __pyx_f_5pimms_15mega_crank_fast_pull_first_targets_interior_2D(__pyx_v_grid, (__pyx_v_bx[(__pyx_v_k - 1)]), (__pyx_v_by[(__pyx_v_k - 1)]), (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_13 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_12 * __pyx_v_idx_to_bead.strides[1]) ))), (*((__pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_idx_to_bead.data + __pyx_t_1 * __pyx_v_idx_to_bead.strides[0]) ) + __pyx_t_8 * __pyx_v_idx_to_bead.strides[1]) ))), __pyx_v_hardwall, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_tbuf, __pyx_v_bxb, __pyx_v_byb, __pyx_v_Lx, __pyx_v_Ly, __pyx_v_nbx, __pyx_v_nby, __pyx_v_shift_x, __pyx_v_shift_y, __pyx_v_W);
+3888: idx_to_bead[off + k, 5], idx_to_bead[off + k, 6],
__pyx_t_13 = (__pyx_v_off + __pyx_v_k);
__pyx_t_12 = 5;
__pyx_t_6 = -1;
if (__pyx_t_13 < 0) {
__pyx_t_13 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_13 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_13 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_12 < 0) {
__pyx_t_12 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_12 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_12 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3888, __pyx_L1_error)
}
__pyx_t_1 = (__pyx_v_off + __pyx_v_k);
__pyx_t_8 = 6;
__pyx_t_6 = -1;
if (__pyx_t_1 < 0) {
__pyx_t_1 += __pyx_v_idx_to_bead.shape[0];
if (unlikely(__pyx_t_1 < 0)) __pyx_t_6 = 0;
} else if (unlikely(__pyx_t_1 >= __pyx_v_idx_to_bead.shape[0])) __pyx_t_6 = 0;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_idx_to_bead.shape[1];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 1;
} else if (unlikely(__pyx_t_8 >= __pyx_v_idx_to_bead.shape[1])) __pyx_t_6 = 1;
if (unlikely(__pyx_t_6 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_6);
__PYX_ERR(0, 3888, __pyx_L1_error)
}
3889: hardwall, XDIM, YDIM, tbuf,
3890: bxb, byb, Lx, Ly, nbx, nby, shift_x, shift_y, W)
3891:
+3892: if restored == 0:
__pyx_t_3 = (__pyx_v_restored == 0);
if (__pyx_t_3) {
/* … */
}
+3893: _revert_segment_2D(grid, type_grid, idx_to_bead, off, lo, hi, bx, by, chainID)
__pyx_f_5pimms_15mega_crank_fast__revert_segment_2D(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, __pyx_v_off, __pyx_v_lo, __pyx_v_hi, __pyx_v_bx, __pyx_v_by, __pyx_v_chainID);
+3894: continue
goto __pyx_L4_continue;
3895:
+3896: if accept_p_ratio(invtemp, de, nF, nR, &rng) == 1:
__pyx_t_3 = (__pyx_f_5pimms_15mega_crank_fast_accept_p_ratio(__pyx_v_invtemp, __pyx_v_de, __pyx_v_nF, __pyx_v_nR, (&__pyx_v_rng)) == 1);
if (__pyx_t_3) {
/* … */
goto __pyx_L24;
}
+3897: dsum = dsum + de
__pyx_v_dsum = (__pyx_v_dsum + __pyx_v_de);
+3898: acc = acc + 1
__pyx_v_acc = (__pyx_v_acc + 1);
3899: else:
+3900: _revert_segment_2D(grid, type_grid, idx_to_bead, off, lo, hi, bx, by, chainID)
/*else*/ {
__pyx_f_5pimms_15mega_crank_fast__revert_segment_2D(__pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, __pyx_v_off, __pyx_v_lo, __pyx_v_hi, __pyx_v_bx, __pyx_v_by, __pyx_v_chainID);
}
__pyx_L24:;
__pyx_L4_continue:;
}
3901:
+3902: out_delta[b] = dsum
__pyx_t_8 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_out_delta.shape[0];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_8 >= __pyx_v_out_delta.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 3902, __pyx_L1_error)
}
*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_out_delta.data) + __pyx_t_8)) )) = __pyx_v_dsum;
+3903: out_accepted[b] = acc
__pyx_t_8 = __pyx_v_b;
__pyx_t_2 = -1;
if (__pyx_t_8 < 0) {
__pyx_t_8 += __pyx_v_out_accepted.shape[0];
if (unlikely(__pyx_t_8 < 0)) __pyx_t_2 = 0;
} else if (unlikely(__pyx_t_8 >= __pyx_v_out_accepted.shape[0])) __pyx_t_2 = 0;
if (unlikely(__pyx_t_2 != -1)) {
__Pyx_RaiseBufferIndexErrorNogil(__pyx_t_2);
__PYX_ERR(0, 3903, __pyx_L1_error)
}
*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_out_accepted.data) + __pyx_t_8)) )) = __pyx_v_acc;
3904:
3905:
+3906: @cython.wraparound(False)
/* Python wrapper */ static PyObject *__pyx_pw_5pimms_15mega_crank_fast_29mega_pull_parallel_2D(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_5pimms_15mega_crank_fast_28mega_pull_parallel_2D, "Parallel 2D pull megamove (the 2D analogue of mega_pull_parallel)."); static PyMethodDef __pyx_mdef_5pimms_15mega_crank_fast_29mega_pull_parallel_2D = {"mega_pull_parallel_2D", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5pimms_15mega_crank_fast_29mega_pull_parallel_2D, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_5pimms_15mega_crank_fast_28mega_pull_parallel_2D}; static PyObject *__pyx_pw_5pimms_15mega_crank_fast_29mega_pull_parallel_2D(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { __Pyx_memviewslice __pyx_v_grid = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_type_grid = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_idx_to_bead = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_chain_offset = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_chain_length = { 0, 0, { 0 }, { 0 }, { 0 } }; CYTHON_UNUSED __Pyx_memviewslice __pyx_v_chain_homo = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_chain_selector = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_LR_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_SLR_interaction_table = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_angle_lookup = { 0, 0, { 0 }, { 0 }, { 0 } }; long __pyx_v_energy; float __pyx_v_invtemp; int __pyx_v_passed_seed; int __pyx_v_hardwall; CYTHON_UNUSED int __pyx_v_max_chain_len; int __pyx_v_num_threads; __Pyx_memviewslice __pyx_v_frozen_mask = { 0, 0, { 0 }, { 0 }, { 0 } }; #if !CYTHON_METH_FASTCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("mega_pull_parallel_2D (wrapper)", 0); #if !CYTHON_METH_FASTCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_grid,&__pyx_mstate_global->__pyx_n_u_type_grid,&__pyx_mstate_global->__pyx_n_u_idx_to_bead,&__pyx_mstate_global->__pyx_n_u_chain_offset,&__pyx_mstate_global->__pyx_n_u_chain_length,&__pyx_mstate_global->__pyx_n_u_chain_homo,&__pyx_mstate_global->__pyx_n_u_chain_selector,&__pyx_mstate_global->__pyx_n_u_interaction_table,&__pyx_mstate_global->__pyx_n_u_LR_interaction_table,&__pyx_mstate_global->__pyx_n_u_SLR_interaction_table,&__pyx_mstate_global->__pyx_n_u_angle_lookup,&__pyx_mstate_global->__pyx_n_u_energy,&__pyx_mstate_global->__pyx_n_u_invtemp,&__pyx_mstate_global->__pyx_n_u_passed_seed,&__pyx_mstate_global->__pyx_n_u_hardwall,&__pyx_mstate_global->__pyx_n_u_max_chain_len,&__pyx_mstate_global->__pyx_n_u_num_threads,&__pyx_mstate_global->__pyx_n_u_frozen_mask,0}; PyObject* values[18] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 3906, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 18: values[17] = __Pyx_ArgRef_FASTCALL(__pyx_args, 17); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[17])) __PYX_ERR(0, 3906, __pyx_L3_error) CYTHON_FALLTHROUGH; case 17: values[16] = __Pyx_ArgRef_FASTCALL(__pyx_args, 16); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[16])) __PYX_ERR(0, 3906, __pyx_L3_error) CYTHON_FALLTHROUGH; case 16: values[15] = __Pyx_ArgRef_FASTCALL(__pyx_args, 15); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[15])) __PYX_ERR(0, 3906, __pyx_L3_error) CYTHON_FALLTHROUGH; case 15: values[14] = __Pyx_ArgRef_FASTCALL(__pyx_args, 14); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[14])) __PYX_ERR(0, 3906, __pyx_L3_error) CYTHON_FALLTHROUGH; case 14: values[13] = __Pyx_ArgRef_FASTCALL(__pyx_args, 13); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[13])) __PYX_ERR(0, 3906, __pyx_L3_error) CYTHON_FALLTHROUGH; case 13: values[12] = __Pyx_ArgRef_FASTCALL(__pyx_args, 12); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[12])) __PYX_ERR(0, 3906, __pyx_L3_error) CYTHON_FALLTHROUGH; case 12: values[11] = __Pyx_ArgRef_FASTCALL(__pyx_args, 11); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[11])) __PYX_ERR(0, 3906, __pyx_L3_error) CYTHON_FALLTHROUGH; case 11: values[10] = __Pyx_ArgRef_FASTCALL(__pyx_args, 10); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[10])) __PYX_ERR(0, 3906, __pyx_L3_error) CYTHON_FALLTHROUGH; case 10: values[9] = __Pyx_ArgRef_FASTCALL(__pyx_args, 9); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[9])) __PYX_ERR(0, 3906, __pyx_L3_error) CYTHON_FALLTHROUGH; case 9: values[8] = __Pyx_ArgRef_FASTCALL(__pyx_args, 8); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[8])) __PYX_ERR(0, 3906, __pyx_L3_error) CYTHON_FALLTHROUGH; case 8: values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 3906, __pyx_L3_error) CYTHON_FALLTHROUGH; case 7: values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 3906, __pyx_L3_error) CYTHON_FALLTHROUGH; case 6: values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 3906, __pyx_L3_error) CYTHON_FALLTHROUGH; case 5: values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 3906, __pyx_L3_error) CYTHON_FALLTHROUGH; case 4: values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 3906, __pyx_L3_error) CYTHON_FALLTHROUGH; case 3: values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 3906, __pyx_L3_error) CYTHON_FALLTHROUGH; case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 3906, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 3906, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "mega_pull_parallel_2D", 0) < (0)) __PYX_ERR(0, 3906, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 18; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("mega_pull_parallel_2D", 1, 18, 18, i); __PYX_ERR(0, 3906, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 18)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 3906, __pyx_L3_error) values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 3906, __pyx_L3_error) values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 3906, __pyx_L3_error) values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 3906, __pyx_L3_error) values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 3906, __pyx_L3_error) values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 3906, __pyx_L3_error) values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 3906, __pyx_L3_error) values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 3906, __pyx_L3_error) values[8] = __Pyx_ArgRef_FASTCALL(__pyx_args, 8); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[8])) __PYX_ERR(0, 3906, __pyx_L3_error) values[9] = __Pyx_ArgRef_FASTCALL(__pyx_args, 9); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[9])) __PYX_ERR(0, 3906, __pyx_L3_error) values[10] = __Pyx_ArgRef_FASTCALL(__pyx_args, 10); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[10])) __PYX_ERR(0, 3906, __pyx_L3_error) values[11] = __Pyx_ArgRef_FASTCALL(__pyx_args, 11); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[11])) __PYX_ERR(0, 3906, __pyx_L3_error) values[12] = __Pyx_ArgRef_FASTCALL(__pyx_args, 12); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[12])) __PYX_ERR(0, 3906, __pyx_L3_error) values[13] = __Pyx_ArgRef_FASTCALL(__pyx_args, 13); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[13])) __PYX_ERR(0, 3906, __pyx_L3_error) values[14] = __Pyx_ArgRef_FASTCALL(__pyx_args, 14); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[14])) __PYX_ERR(0, 3906, __pyx_L3_error) values[15] = __Pyx_ArgRef_FASTCALL(__pyx_args, 15); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[15])) __PYX_ERR(0, 3906, __pyx_L3_error) values[16] = __Pyx_ArgRef_FASTCALL(__pyx_args, 16); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[16])) __PYX_ERR(0, 3906, __pyx_L3_error) values[17] = __Pyx_ArgRef_FASTCALL(__pyx_args, 17); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[17])) __PYX_ERR(0, 3906, __pyx_L3_error) } __pyx_v_grid = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_grid.memview)) __PYX_ERR(0, 3908, __pyx_L3_error) __pyx_v_type_grid = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_type_grid.memview)) __PYX_ERR(0, 3909, __pyx_L3_error) __pyx_v_idx_to_bead = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_idx_to_bead.memview)) __PYX_ERR(0, 3910, __pyx_L3_error) __pyx_v_chain_offset = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_offset.memview)) __PYX_ERR(0, 3911, __pyx_L3_error) __pyx_v_chain_length = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_length.memview)) __PYX_ERR(0, 3912, __pyx_L3_error) __pyx_v_chain_homo = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_homo.memview)) __PYX_ERR(0, 3913, __pyx_L3_error) __pyx_v_chain_selector = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_chain_selector.memview)) __PYX_ERR(0, 3914, __pyx_L3_error) __pyx_v_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[7], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interaction_table.memview)) __PYX_ERR(0, 3915, __pyx_L3_error) __pyx_v_LR_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_LR_interaction_table.memview)) __PYX_ERR(0, 3916, __pyx_L3_error) __pyx_v_SLR_interaction_table = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_SLR_interaction_table.memview)) __PYX_ERR(0, 3917, __pyx_L3_error) __pyx_v_angle_lookup = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsdsds_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_angle_lookup.memview)) __PYX_ERR(0, 3918, __pyx_L3_error) __pyx_v_energy = __Pyx_PyLong_As_long(values[11]); if (unlikely((__pyx_v_energy == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 3919, __pyx_L3_error) __pyx_v_invtemp = __Pyx_PyFloat_AsFloat(values[12]); if (unlikely((__pyx_v_invtemp == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 3920, __pyx_L3_error) __pyx_v_passed_seed = __Pyx_PyLong_As_int(values[13]); if (unlikely((__pyx_v_passed_seed == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3921, __pyx_L3_error) __pyx_v_hardwall = __Pyx_PyLong_As_int(values[14]); if (unlikely((__pyx_v_hardwall == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3922, __pyx_L3_error) __pyx_v_max_chain_len = __Pyx_PyLong_As_int(values[15]); if (unlikely((__pyx_v_max_chain_len == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3923, __pyx_L3_error) __pyx_v_num_threads = __Pyx_PyLong_As_int(values[16]); if (unlikely((__pyx_v_num_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3924, __pyx_L3_error) __pyx_v_frozen_mask = __Pyx_PyObject_to_MemoryviewSlice_dc_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE(values[17], PyBUF_WRITABLE); if (unlikely(!__pyx_v_frozen_mask.memview)) __PYX_ERR(0, 3925, __pyx_L3_error) } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("mega_pull_parallel_2D", 1, 18, 18, __pyx_nargs); __PYX_ERR(0, 3906, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __PYX_XCLEAR_MEMVIEW(&__pyx_v_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_type_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_idx_to_bead, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_offset, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_length, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_homo, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_selector, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_LR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_SLR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_angle_lookup, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_frozen_mask, 1); __Pyx_AddTraceback("pimms.mega_crank_fast.mega_pull_parallel_2D", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5pimms_15mega_crank_fast_28mega_pull_parallel_2D(__pyx_self, __pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, __pyx_v_chain_offset, __pyx_v_chain_length, __pyx_v_chain_homo, __pyx_v_chain_selector, __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_angle_lookup, __pyx_v_energy, __pyx_v_invtemp, __pyx_v_passed_seed, __pyx_v_hardwall, __pyx_v_max_chain_len, __pyx_v_num_threads, __pyx_v_frozen_mask); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __PYX_XCLEAR_MEMVIEW(&__pyx_v_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_type_grid, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_idx_to_bead, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_offset, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_length, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_homo, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_chain_selector, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_LR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_SLR_interaction_table, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_angle_lookup, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_frozen_mask, 1); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ static PyObject *__pyx_pf_5pimms_15mega_crank_fast_28mega_pull_parallel_2D(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_grid, __Pyx_memviewslice __pyx_v_type_grid, __Pyx_memviewslice __pyx_v_idx_to_bead, __Pyx_memviewslice __pyx_v_chain_offset, __Pyx_memviewslice __pyx_v_chain_length, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_chain_homo, __Pyx_memviewslice __pyx_v_chain_selector, __Pyx_memviewslice __pyx_v_interaction_table, __Pyx_memviewslice __pyx_v_LR_interaction_table, __Pyx_memviewslice __pyx_v_SLR_interaction_table, __Pyx_memviewslice __pyx_v_angle_lookup, long __pyx_v_energy, float __pyx_v_invtemp, int __pyx_v_passed_seed, int __pyx_v_hardwall, CYTHON_UNUSED int __pyx_v_max_chain_len, int __pyx_v_num_threads, __Pyx_memviewslice __pyx_v_frozen_mask) { struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_5_mega_pull_parallel_2D *__pyx_cur_scope; int __pyx_v_XDIM; int __pyx_v_YDIM; int __pyx_v_num_chains; int __pyx_v_n_steps; PyObject *__pyx_v_idx_np = NULL; int __pyx_v_R_int; int __pyx_v_cap; int __pyx_v_nbx; int __pyx_v_nby; int __pyx_v_Lx; int __pyx_v_Ly; int __pyx_v_num_blocks; PyObject *__pyx_v_rstate = NULL; int __pyx_v_shift_x; int __pyx_v_shift_y; PyObject *__pyx_v_gx = NULL; PyObject *__pyx_v_gy = NULL; PyObject *__pyx_v_dim_block = 0; PyObject *__pyx_v_bxj = NULL; PyObject *__pyx_v_byj = NULL; PyObject *__pyx_v_block_of_bead = NULL; PyObject *__pyx_v_chain_block = NULL; PyObject *__pyx_v_movable = NULL; PyObject *__pyx_v_mblocks = NULL; PyObject *__pyx_v_order = NULL; PyObject *__pyx_v_chain_ids = NULL; PyObject *__pyx_v_sorted_blocks = NULL; PyObject *__pyx_v_counts = NULL; PyObject *__pyx_v_starts = NULL; PyObject *__pyx_v_total_movable = NULL; PyObject *__pyx_v_attempts = NULL; PyObject *__pyx_v_bix = NULL; PyObject *__pyx_v_biy = NULL; PyObject *__pyx_v_blo_x = NULL; PyObject *__pyx_v_blo_y = NULL; PyObject *__pyx_v_seeds = NULL; PyObject *__pyx_v_out_delta = NULL; PyObject *__pyx_v_out_accepted = NULL; __Pyx_memviewslice __pyx_v_chain_ids_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_starts_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_attempts_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_seeds_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_blo_x_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_blo_y_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_out_delta_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_out_accepted_mv = { 0, 0, { 0 }, { 0 }, { 0 } }; int __pyx_v_b; CYTHON_UNUSED int __pyx_v_nthreads; long __pyx_v_tot_d; int __pyx_v_tot_a; PyObject *__pyx_r = NULL; __pyx_cur_scope = (struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_5_mega_pull_parallel_2D *)__pyx_tp_new_5pimms_15mega_crank_fast___pyx_scope_struct_5_mega_pull_parallel_2D(__pyx_mstate_global->__pyx_ptype_5pimms_15mega_crank_fast___pyx_scope_struct_5_mega_pull_parallel_2D, __pyx_mstate_global->__pyx_empty_tuple, NULL); if (unlikely(!__pyx_cur_scope)) { __pyx_cur_scope = ((struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_5_mega_pull_parallel_2D *)Py_None); __Pyx_INCREF(Py_None); __PYX_ERR(0, 3906, __pyx_L1_error) } else { __Pyx_GOTREF((PyObject *)__pyx_cur_scope); } /* … */ __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_5pimms_15mega_crank_fast_29mega_pull_parallel_2D, 0, __pyx_mstate_global->__pyx_n_u_mega_pull_parallel_2D, NULL, __pyx_mstate_global->__pyx_n_u_pimms_mega_crank_fast, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[20])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3906, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_mega_pull_parallel_2D, __pyx_t_4) < (0)) __PYX_ERR(0, 3906, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* … */ struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_5_mega_pull_parallel_2D { PyObject_HEAD int __pyx_v_W; int __pyx_v_num_beads; };
3907: @cython.boundscheck(False)
3908: def mega_pull_parallel_2D(NUMPY_INT_TYPE[:, :] grid,
3909: NUMPY_INT_TYPE[:, :] type_grid,
3910: NUMPY_INT_TYPE_long[:, :] idx_to_bead,
3911: int[::1] chain_offset,
3912: int[::1] chain_length,
3913: int[::1] chain_homo,
3914: int[::1] chain_selector,
3915: NUMPY_INT_TYPE[:, :] interaction_table,
3916: NUMPY_INT_TYPE[:, :] LR_interaction_table,
3917: NUMPY_INT_TYPE[:, :] SLR_interaction_table,
3918: NUMPY_INT_TYPE[:, :, :, :, :] angle_lookup,
3919: long energy,
3920: float invtemp,
3921: int passed_seed,
3922: int hardwall,
3923: int max_chain_len,
3924: int num_threads,
3925: NUMPY_INT_TYPE[::1] frozen_mask):
3926: """Parallel 2D pull megamove (the 2D analogue of mega_pull_parallel)."""
+3927: cdef int XDIM = grid.shape[0]
__pyx_v_XDIM = (__pyx_v_grid.shape[0]);
+3928: cdef int YDIM = grid.shape[1]
__pyx_v_YDIM = (__pyx_v_grid.shape[1]);
+3929: cdef int num_beads = idx_to_bead.shape[0]
__pyx_cur_scope->__pyx_v_num_beads = (__pyx_v_idx_to_bead.shape[0]);
+3930: cdef int num_chains = chain_offset.shape[0]
__pyx_v_num_chains = (__pyx_v_chain_offset.shape[0]);
+3931: cdef int n_steps = chain_selector.shape[0]
__pyx_v_n_steps = (__pyx_v_chain_selector.shape[0]);
3932:
+3933: idx_np = np.asarray(idx_to_bead)
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3933, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_asarray); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3933, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_idx_to_bead, 2, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE_long, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3933, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3933, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_idx_np = __pyx_t_1; __pyx_t_1 = 0;
+3934: cdef int R_int = 3 if np.any(idx_np[:, 1] == 1) else 1
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3934, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_any); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3934, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_idx_np, __pyx_mstate_global->__pyx_tuple[1]); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3934, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyLong_EqObjC(__pyx_t_3, __pyx_mstate_global->__pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3934, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3934, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 3934, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_8) { __pyx_t_6 = 3; } else { __pyx_t_6 = 1; } __pyx_v_R_int = __pyx_t_6;
+3935: cdef int W = R_int + 2
__pyx_cur_scope->__pyx_v_W = (__pyx_v_R_int + 2);
3936:
+3937: cdef int cap = 4
__pyx_v_cap = 4;
+3938: cdef int nbx = _choose_nb(XDIM, W, cap)
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_choose_nb); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3938, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_XDIM); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3938, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_W); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3938, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_cap); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3938, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_t_4, __pyx_t_3, __pyx_t_9}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3938, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3938, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_nbx = __pyx_t_6;
+3939: cdef int nby = _choose_nb(YDIM, W, cap)
__pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_choose_nb); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3939, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_YDIM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3939, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_W); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3939, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_cap); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3939, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[4] = {__pyx_t_7, __pyx_t_3, __pyx_t_4, __pyx_t_2}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3939, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3939, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_nby = __pyx_t_6;
+3940: cdef int Lx = XDIM // nbx
if (unlikely(__pyx_v_nbx == 0)) {
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__PYX_ERR(0, 3940, __pyx_L1_error)
}
else if (sizeof(int) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_nbx == (int)-1) && unlikely(__Pyx_UNARY_NEG_WOULD_OVERFLOW(__pyx_v_XDIM))) {
PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
__PYX_ERR(0, 3940, __pyx_L1_error)
}
__pyx_v_Lx = __Pyx_div_int(__pyx_v_XDIM, __pyx_v_nbx, 0);
+3941: cdef int Ly = YDIM // nby
if (unlikely(__pyx_v_nby == 0)) {
PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
__PYX_ERR(0, 3941, __pyx_L1_error)
}
else if (sizeof(int) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_nby == (int)-1) && unlikely(__Pyx_UNARY_NEG_WOULD_OVERFLOW(__pyx_v_YDIM))) {
PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
__PYX_ERR(0, 3941, __pyx_L1_error)
}
__pyx_v_Ly = __Pyx_div_int(__pyx_v_YDIM, __pyx_v_nby, 0);
+3942: cdef int num_blocks = nbx * nby
__pyx_v_num_blocks = (__pyx_v_nbx * __pyx_v_nby);
3943:
+3944: rstate = np.random.RandomState(passed_seed & 0x7FFFFFFF)
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3944, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_random); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3944, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_9 = __pyx_t_4; __Pyx_INCREF(__pyx_t_9); __pyx_t_2 = __Pyx_PyLong_From_long((__pyx_v_passed_seed & 0x7FFFFFFF)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3944, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_2}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_RandomState, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3944, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_rstate = __pyx_t_1; __pyx_t_1 = 0;
+3945: cdef int shift_x = int(rstate.randint(0, Lx)) if nbx > 1 else 0
__pyx_t_8 = (__pyx_v_nbx > 1);
if (__pyx_t_8) {
__pyx_t_4 = __pyx_v_rstate;
__Pyx_INCREF(__pyx_t_4);
__pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_Lx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3945, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_mstate_global->__pyx_int_0, __pyx_t_2};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_randint, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3945, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_t_2 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3945, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_10 = __Pyx_PyLong_As_int(__pyx_t_2); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3945, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_6 = __pyx_t_10;
} else {
__pyx_t_6 = 0;
}
__pyx_v_shift_x = __pyx_t_6;
+3946: cdef int shift_y = int(rstate.randint(0, Ly)) if nby > 1 else 0
__pyx_t_8 = (__pyx_v_nby > 1);
if (__pyx_t_8) {
__pyx_t_1 = __pyx_v_rstate;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_Ly); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3946, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_mstate_global->__pyx_int_0, __pyx_t_4};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_randint, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3946, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_4 = __Pyx_PyNumber_Int(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3946, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_10 = __Pyx_PyLong_As_int(__pyx_t_4); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3946, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_6 = __pyx_t_10;
} else {
__pyx_t_6 = 0;
}
__pyx_v_shift_y = __pyx_t_6;
3947:
+3948: gx = idx_np[:, 5].astype(np.int64)
__pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_idx_np, __pyx_mstate_global->__pyx_tuple[2]); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3948, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3948, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3948, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3}; __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3948, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_v_gx = __pyx_t_4; __pyx_t_4 = 0;
+3949: gy = idx_np[:, 6].astype(np.int64)
__pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_idx_np, __pyx_mstate_global->__pyx_tuple[3]); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3949, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __pyx_t_3; __Pyx_INCREF(__pyx_t_1); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3949, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3949, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_9}; __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3949, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_v_gy = __pyx_t_4; __pyx_t_4 = 0;
3950:
+3951: def dim_block(g, nb, L, DIM, shift):
/* Python wrapper */
static PyObject *__pyx_pw_5pimms_15mega_crank_fast_21mega_pull_parallel_2D_1dim_block(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_5pimms_15mega_crank_fast_21mega_pull_parallel_2D_1dim_block = {"dim_block", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5pimms_15mega_crank_fast_21mega_pull_parallel_2D_1dim_block, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5pimms_15mega_crank_fast_21mega_pull_parallel_2D_1dim_block(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_g = 0;
PyObject *__pyx_v_nb = 0;
PyObject *__pyx_v_L = 0;
PyObject *__pyx_v_DIM = 0;
PyObject *__pyx_v_shift = 0;
#if !CYTHON_METH_FASTCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("dim_block (wrapper)", 0);
#if !CYTHON_METH_FASTCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_g,&__pyx_mstate_global->__pyx_n_u_nb,&__pyx_mstate_global->__pyx_n_u_L,&__pyx_mstate_global->__pyx_n_u_DIM,&__pyx_mstate_global->__pyx_n_u_shift,0};
PyObject* values[5] = {0,0,0,0,0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 3951, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 5:
values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 3951, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 4:
values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 3951, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 3:
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 3951, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 3951, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 3951, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "dim_block", 0) < (0)) __PYX_ERR(0, 3951, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 5; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("dim_block", 1, 5, 5, i); __PYX_ERR(0, 3951, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 5)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 3951, __pyx_L3_error)
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 3951, __pyx_L3_error)
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 3951, __pyx_L3_error)
values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 3951, __pyx_L3_error)
values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 3951, __pyx_L3_error)
}
__pyx_v_g = values[0];
__pyx_v_nb = values[1];
__pyx_v_L = values[2];
__pyx_v_DIM = values[3];
__pyx_v_shift = values[4];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("dim_block", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 3951, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("pimms.mega_crank_fast.mega_pull_parallel_2D.dim_block", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_5pimms_15mega_crank_fast_21mega_pull_parallel_2D_dim_block(__pyx_self, __pyx_v_g, __pyx_v_nb, __pyx_v_L, __pyx_v_DIM, __pyx_v_shift);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_5pimms_15mega_crank_fast_21mega_pull_parallel_2D_dim_block(PyObject *__pyx_self, PyObject *__pyx_v_g, PyObject *__pyx_v_nb, PyObject *__pyx_v_L, PyObject *__pyx_v_DIM, PyObject *__pyx_v_shift) {
struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_5_mega_pull_parallel_2D *__pyx_cur_scope;
struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_5_mega_pull_parallel_2D *__pyx_outer_scope;
PyObject *__pyx_v_s = NULL;
PyObject *__pyx_v_bj = NULL;
PyObject *__pyx_v_within = NULL;
PyObject *__pyx_v_bad = NULL;
PyObject *__pyx_r = NULL;
__pyx_outer_scope = (struct __pyx_obj_5pimms_15mega_crank_fast___pyx_scope_struct_5_mega_pull_parallel_2D *) __Pyx_CyFunction_GetClosure(__pyx_self);
__pyx_cur_scope = __pyx_outer_scope;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("pimms.mega_crank_fast.mega_pull_parallel_2D.dim_block", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_s);
__Pyx_XDECREF(__pyx_v_bj);
__Pyx_XDECREF(__pyx_v_within);
__Pyx_XDECREF(__pyx_v_bad);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_5pimms_15mega_crank_fast_21mega_pull_parallel_2D_1dim_block, 0, __pyx_mstate_global->__pyx_n_u_mega_pull_parallel_2D_locals_dim, ((PyObject*)__pyx_cur_scope), __pyx_mstate_global->__pyx_n_u_pimms_mega_crank_fast, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[5])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3951, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_v_dim_block = __pyx_t_4;
__pyx_t_4 = 0;
+3952: if nb == 1:
__pyx_t_1 = (__Pyx_PyLong_BoolEqObjC(__pyx_v_nb, __pyx_mstate_global->__pyx_int_1, 1, 0)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3952, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+3953: return np.zeros(num_beads, dtype=np.int64)
__Pyx_XDECREF(__pyx_r); __pyx_t_3 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3953, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_zeros); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3953, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_num_beads); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3953, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3953, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3953, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_3, __pyx_t_4}; __pyx_t_6 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3953, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_7, __pyx_t_6, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 3953, __pyx_L1_error) __pyx_t_2 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_6); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3953, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0;
+3954: s = (g - shift) % DIM
__pyx_t_2 = PyNumber_Subtract(__pyx_v_g, __pyx_v_shift); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3954, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = PyNumber_Remainder(__pyx_t_2, __pyx_v_DIM); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3954, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_s = __pyx_t_5; __pyx_t_5 = 0;
+3955: bj = s // L
__pyx_t_5 = PyNumber_FloorDivide(__pyx_v_s, __pyx_v_L); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3955, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_v_bj = __pyx_t_5; __pyx_t_5 = 0;
+3956: within = s - bj * L
__pyx_t_5 = PyNumber_Multiply(__pyx_v_bj, __pyx_v_L); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3956, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = PyNumber_Subtract(__pyx_v_s, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3956, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_within = __pyx_t_2; __pyx_t_2 = 0;
+3957: bad = (s >= nb * L) | (within < W) | (within >= L - W)
__pyx_t_2 = PyNumber_Multiply(__pyx_v_nb, __pyx_v_L); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3957, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = PyObject_RichCompare(__pyx_v_s, __pyx_t_2, Py_GE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3957, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_W); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3957, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = PyObject_RichCompare(__pyx_v_within, __pyx_t_2, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3957, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Or(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3957, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyLong_From_int(__pyx_cur_scope->__pyx_v_W); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3957, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = PyNumber_Subtract(__pyx_v_L, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3957, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyObject_RichCompare(__pyx_v_within, __pyx_t_5, Py_GE); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3957, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyNumber_Or(__pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3957, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_bad = __pyx_t_5; __pyx_t_5 = 0;
+3958: bj = bj.copy()
__pyx_t_6 = __pyx_v_bj; __Pyx_INCREF(__pyx_t_6); __pyx_t_8 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL}; __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_copy, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3958, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } __Pyx_DECREF_SET(__pyx_v_bj, __pyx_t_5); __pyx_t_5 = 0;
+3959: bj[bad] = -1
if (unlikely((PyObject_SetItem(__pyx_v_bj, __pyx_v_bad, __pyx_mstate_global->__pyx_int_neg_1) < 0))) __PYX_ERR(0, 3959, __pyx_L1_error)
+3960: return bj
__Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_bj); __pyx_r = __pyx_v_bj; goto __pyx_L0;
3961:
+3962: bxj = dim_block(gx, nbx, Lx, XDIM, shift_x)
__pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_nbx); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3962, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_Lx); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3962, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_XDIM); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3962, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_shift_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3962, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __pyx_pf_5pimms_15mega_crank_fast_21mega_pull_parallel_2D_dim_block(__pyx_v_dim_block, __pyx_v_gx, __pyx_t_4, __pyx_t_3, __pyx_t_9, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3962, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_bxj = __pyx_t_2; __pyx_t_2 = 0;
+3963: byj = dim_block(gy, nby, Ly, YDIM, shift_y)
__pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_nby); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3963, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_Ly); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3963, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_YDIM); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3963, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_shift_y); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3963, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __pyx_pf_5pimms_15mega_crank_fast_21mega_pull_parallel_2D_dim_block(__pyx_v_dim_block, __pyx_v_gy, __pyx_t_2, __pyx_t_1, __pyx_t_9, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3963, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_byj = __pyx_t_4; __pyx_t_4 = 0;
+3964: block_of_bead = (bxj * nby + byj)
__pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_nby); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3964, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyNumber_Multiply(__pyx_v_bxj, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3964, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_v_byj); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3964, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_block_of_bead = __pyx_t_4; __pyx_t_4 = 0;
+3965: block_of_bead[(bxj < 0) | (byj < 0)] = -1
__pyx_t_4 = PyObject_RichCompare(__pyx_v_bxj, __pyx_mstate_global->__pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3965, __pyx_L1_error) __pyx_t_3 = PyObject_RichCompare(__pyx_v_byj, __pyx_mstate_global->__pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3965, __pyx_L1_error) __pyx_t_9 = PyNumber_Or(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3965, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely((PyObject_SetItem(__pyx_v_block_of_bead, __pyx_t_9, __pyx_mstate_global->__pyx_int_neg_1) < 0))) __PYX_ERR(0, 3965, __pyx_L1_error) __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
3966:
+3967: block_of_bead[np.asarray(frozen_mask) != 0] = -1 # frozen beads -> whole chain frozen
__pyx_t_3 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3967, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_asarray); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3967, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_frozen_mask, 1, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5pimms_13cython_config_NUMPY_INT_TYPE, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3967, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_1))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_1, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_4}; __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3967, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_t_1 = __Pyx_PyLong_NeObjC(__pyx_t_9, __pyx_mstate_global->__pyx_int_0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3967, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely((PyObject_SetItem(__pyx_v_block_of_bead, __pyx_t_1, __pyx_mstate_global->__pyx_int_neg_1) < 0))) __PYX_ERR(0, 3967, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3968: chain_block = _chain_block_assignment(block_of_bead, chain_offset, num_chains)
__pyx_t_9 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_chain_block_assignment); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3968, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_chain_offset, 1, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3968, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_num_chains); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3968, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_9); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[4] = {__pyx_t_9, __pyx_v_block_of_bead, __pyx_t_3, __pyx_t_2}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3968, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_chain_block = __pyx_t_1; __pyx_t_1 = 0;
+3969: chain_block[np.asarray(chain_length) < 3] = -1
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3969, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3969, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_chain_length, 1, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3969, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_2}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3969, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_mstate_global->__pyx_int_3, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3969, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely((PyObject_SetItem(__pyx_v_chain_block, __pyx_t_3, __pyx_mstate_global->__pyx_int_neg_1) < 0))) __PYX_ERR(0, 3969, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+3970: movable = np.nonzero(chain_block >= 0)[0].astype(np.int32)
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3970, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_nonzero); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3970, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_9 = PyObject_RichCompare(__pyx_v_chain_block, __pyx_mstate_global->__pyx_int_0, Py_GE); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3970, __pyx_L1_error) __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_9}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3970, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_2, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 0, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3970, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_1 = __pyx_t_7; __Pyx_INCREF(__pyx_t_1); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3970, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3970, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_9}; __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3970, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_v_movable = __pyx_t_3; __pyx_t_3 = 0;
+3971: if movable.shape[0] == 0:
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_movable, __pyx_mstate_global->__pyx_n_u_shape); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3971, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 0, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3971, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_8 = (__Pyx_PyLong_BoolEqObjC(__pyx_t_7, __pyx_mstate_global->__pyx_int_0, 0, 0)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 3971, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (__pyx_t_8) { /* … */ }
+3972: return (energy, 0)
__Pyx_XDECREF(__pyx_r); __pyx_t_7 = __Pyx_PyLong_From_long(__pyx_v_energy); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3972, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3972, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_7); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_7) != (0)) __PYX_ERR(0, 3972, __pyx_L1_error); __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_0); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_mstate_global->__pyx_int_0) != (0)) __PYX_ERR(0, 3972, __pyx_L1_error); __pyx_t_7 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0;
3973:
+3974: mblocks = chain_block[movable]
__pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_chain_block, __pyx_v_movable); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3974, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_mblocks = __pyx_t_3; __pyx_t_3 = 0;
+3975: order = np.argsort(mblocks, kind="stable")
__pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3975, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_argsort); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3975, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_1))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_1, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_7, __pyx_v_mblocks}; __pyx_t_9 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3975, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_kind, __pyx_mstate_global->__pyx_n_u_stable, __pyx_t_9, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 3975, __pyx_L1_error) __pyx_t_3 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_9); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3975, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_v_order = __pyx_t_3; __pyx_t_3 = 0;
+3976: chain_ids = movable[order].astype(np.int32)
__pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_v_movable, __pyx_v_order); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3976, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = __pyx_t_9; __Pyx_INCREF(__pyx_t_1); __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3976, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3976, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_2}; __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3976, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_v_chain_ids = __pyx_t_3; __pyx_t_3 = 0;
+3977: sorted_blocks = mblocks[order]
__pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_mblocks, __pyx_v_order); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3977, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_sorted_blocks = __pyx_t_3; __pyx_t_3 = 0;
3978:
+3979: counts = np.bincount(sorted_blocks, minlength=num_blocks).astype(np.int32)
__pyx_t_1 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3979, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_bincount); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3979, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3979, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_1, __pyx_v_sorted_blocks}; __pyx_t_11 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3979, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_minlength, __pyx_t_7, __pyx_t_11, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 3979, __pyx_L1_error) __pyx_t_2 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_11); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3979, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_t_9 = __pyx_t_2; __Pyx_INCREF(__pyx_t_9); __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3979, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3979, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_11}; __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3979, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_v_counts = __pyx_t_3; __pyx_t_3 = 0;
+3980: starts = np.zeros(num_blocks + 1, dtype=np.int32)
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3980, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_zeros); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3980, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = __Pyx_PyLong_From_long((__pyx_v_num_blocks + 1)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3980, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3980, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3980, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_2, __pyx_t_11}; __pyx_t_4 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3980, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_7, __pyx_t_4, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 3980, __pyx_L1_error) __pyx_t_3 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_4); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3980, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_v_starts = __pyx_t_3; __pyx_t_3 = 0;
+3981: starts[1:] = np.cumsum(counts)
__pyx_t_9 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3981, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_cumsum); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3981, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_9); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_v_counts}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3981, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } if (__Pyx_PyObject_SetSlice(__pyx_v_starts, __pyx_t_3, 1, 0, NULL, NULL, &__pyx_mstate_global->__pyx_slice[1], 1, 0, 0) < (0)) __PYX_ERR(0, 3981, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
3982:
+3983: total_movable = int(counts.sum())
__pyx_t_7 = __pyx_v_counts; __Pyx_INCREF(__pyx_t_7); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL}; __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_sum, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3983, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_t_7 = __Pyx_PyNumber_Int(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3983, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_total_movable = ((PyObject*)__pyx_t_7); __pyx_t_7 = 0;
+3984: attempts = np.maximum(
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3984, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_maximum); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3984, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+3985: (n_steps * counts.astype(np.int64) // max(total_movable, 1)), 0).astype(np.int32)
__pyx_t_11 = __Pyx_PyLong_From_int(__pyx_v_n_steps); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3985, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = __pyx_v_counts; __Pyx_INCREF(__pyx_t_12); __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3985, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3985, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_14}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3985, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_14 = PyNumber_Multiply(__pyx_t_11, __pyx_t_1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3985, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_15 = 1; __Pyx_INCREF(__pyx_v_total_movable); __pyx_t_16 = __pyx_v_total_movable; __pyx_t_11 = __Pyx_PyLong_From_long(__pyx_t_15); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3985, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = PyObject_RichCompare(__pyx_t_11, __pyx_t_16, Py_GT); __Pyx_XGOTREF(__pyx_t_12); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3985, __pyx_L1_error) __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 3985, __pyx_L1_error) __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (__pyx_t_8) { __pyx_t_12 = __Pyx_PyLong_From_long(__pyx_t_15); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3985, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); if (__Pyx_PyInt_FromNumber(&__pyx_t_12, NULL, 0) < (0)) __PYX_ERR(0, 3985, __pyx_L1_error) __pyx_t_1 = __pyx_t_12; __pyx_t_12 = 0; } else { __Pyx_INCREF(__pyx_t_16); __pyx_t_1 = __pyx_t_16; } __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_12 = PyNumber_FloorDivide(__pyx_t_14, __pyx_t_1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3985, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_12, __pyx_mstate_global->__pyx_int_0}; __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3984, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_t_3 = __pyx_t_9; __Pyx_INCREF(__pyx_t_3); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3985, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3985, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_12}; __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3985, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } __pyx_v_attempts = __pyx_t_7; __pyx_t_7 = 0;
3986:
+3987: bix = np.arange(num_blocks, dtype=np.int32) // nby
__pyx_t_9 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3987, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_arange); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3987, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_12 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3987, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3987, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3987, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_9); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_9, __pyx_t_12}; __pyx_t_2 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3987, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_4, __pyx_t_2, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 3987, __pyx_L1_error) __pyx_t_7 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_2); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3987, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_nby); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3987, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyNumber_FloorDivide(__pyx_t_7, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3987, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_bix = __pyx_t_2; __pyx_t_2 = 0;
+3988: biy = np.arange(num_blocks, dtype=np.int32) % nby
__pyx_t_3 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3988, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_arange); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3988, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3988, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3988, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3988, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_3, __pyx_t_7}; __pyx_t_12 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3988, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_9, __pyx_t_12, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 3988, __pyx_L1_error) __pyx_t_2 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_12); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3988, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_nby); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3988, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_12 = PyNumber_Remainder(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3988, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_biy = __pyx_t_12; __pyx_t_12 = 0;
+3989: blo_x = (bix * Lx).astype(np.int32)
__pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_Lx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3989, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_9 = PyNumber_Multiply(__pyx_v_bix, __pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3989, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = __pyx_t_9; __Pyx_INCREF(__pyx_t_4); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3989, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3989, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7}; __pyx_t_12 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3989, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); } __pyx_v_blo_x = __pyx_t_12; __pyx_t_12 = 0;
+3990: blo_y = (biy * Ly).astype(np.int32)
__pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_Ly); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3990, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = PyNumber_Multiply(__pyx_v_biy, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3990, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_9 = __pyx_t_4; __Pyx_INCREF(__pyx_t_9); __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3990, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3990, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_2}; __pyx_t_12 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3990, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); } __pyx_v_blo_y = __pyx_t_12; __pyx_t_12 = 0;
3991:
+3992: seeds = (np.arange(num_blocks, dtype=np.uint64) + np.uint64(passed_seed) + np.uint64(0x9E3779B9)) \
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3992, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_arange); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3992, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3992, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3992, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_uint64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3992, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_4, __pyx_t_2}; __pyx_t_7 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3992, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_3, __pyx_t_7, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 3992, __pyx_L1_error) __pyx_t_12 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_7); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3992, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); } __pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3992, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_uint64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3992, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_passed_seed); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3992, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_3}; __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3992, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_t_2 = PyNumber_Add(__pyx_t_12, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3992, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_12 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3992, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_uint64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3992, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_12); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_12); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_mstate_global->__pyx_int_2654435769}; __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3992, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_t_7 = PyNumber_Add(__pyx_t_2, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3992, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+3993: * np.uint64(0x2545F4914F6CDD1D) + np.uint64(1)
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3993, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_uint64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3993, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_int_0x2545f4914f6cdd1d}; __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3993, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_t_3 = PyNumber_Multiply(__pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3993, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3993, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_uint64); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3993, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_12))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_12); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_12); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_12, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_int_1}; __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_12, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3993, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __pyx_t_12 = PyNumber_Add(__pyx_t_3, __pyx_t_9); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3993, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_v_seeds = __pyx_t_12; __pyx_t_12 = 0;
3994:
+3995: out_delta = np.zeros(num_blocks, dtype=np.int64)
__pyx_t_9 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3995, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_zeros); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3995, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3995, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3995, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3995, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_9); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_9, __pyx_t_3}; __pyx_t_2 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3995, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_4, __pyx_t_2, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 3995, __pyx_L1_error) __pyx_t_12 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_2); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3995, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); } __pyx_v_out_delta = __pyx_t_12; __pyx_t_12 = 0;
+3996: out_accepted = np.zeros(num_blocks, dtype=np.int32)
__pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3996, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_zeros); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3996, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_num_blocks); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3996, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3996, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3996, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_7, __pyx_t_2}; __pyx_t_3 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3996, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_9, __pyx_t_3, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 3996, __pyx_L1_error) __pyx_t_12 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_3); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3996, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); } __pyx_v_out_accepted = __pyx_t_12; __pyx_t_12 = 0;
3997:
+3998: cdef int[::1] chain_ids_mv = chain_ids
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_chain_ids, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 3998, __pyx_L1_error) __pyx_v_chain_ids_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+3999: cdef int[::1] starts_mv = starts
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_starts, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 3999, __pyx_L1_error) __pyx_v_starts_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+4000: cdef int[::1] attempts_mv = attempts
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_attempts, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 4000, __pyx_L1_error) __pyx_v_attempts_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+4001: cdef unsigned long long[::1] seeds_mv = seeds
__pyx_t_18 = __Pyx_PyObject_to_MemoryviewSlice_dc_unsigned_PY_LONG_LONG(__pyx_v_seeds, PyBUF_WRITABLE); if (unlikely(!__pyx_t_18.memview)) __PYX_ERR(0, 4001, __pyx_L1_error) __pyx_v_seeds_mv = __pyx_t_18; __pyx_t_18.memview = NULL; __pyx_t_18.data = NULL;
+4002: cdef int[::1] blo_x_mv = blo_x
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_blo_x, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 4002, __pyx_L1_error) __pyx_v_blo_x_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+4003: cdef int[::1] blo_y_mv = blo_y
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_blo_y, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 4003, __pyx_L1_error) __pyx_v_blo_y_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
+4004: cdef long[::1] out_delta_mv = out_delta
__pyx_t_19 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_v_out_delta, PyBUF_WRITABLE); if (unlikely(!__pyx_t_19.memview)) __PYX_ERR(0, 4004, __pyx_L1_error) __pyx_v_out_delta_mv = __pyx_t_19; __pyx_t_19.memview = NULL; __pyx_t_19.data = NULL;
+4005: cdef int[::1] out_accepted_mv = out_accepted
__pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(__pyx_v_out_accepted, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 4005, __pyx_L1_error) __pyx_v_out_accepted_mv = __pyx_t_17; __pyx_t_17.memview = NULL; __pyx_t_17.data = NULL;
4006:
4007: cdef int b
+4008: cdef int nthreads = num_threads if num_threads > 0 else 1
__pyx_t_8 = (__pyx_v_num_threads > 0);
if (__pyx_t_8) {
__pyx_t_6 = __pyx_v_num_threads;
} else {
__pyx_t_6 = 1;
}
__pyx_v_nthreads = __pyx_t_6;
4009:
+4010: for b in prange(num_blocks, nogil=True, num_threads=nthreads, schedule='dynamic'):
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
__pyx_t_6 = __pyx_v_num_blocks;
{
#if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
#undef likely
#undef unlikely
#define likely(x) (x)
#define unlikely(x) (x)
#endif
__pyx_t_20 = (__pyx_t_6 - 0 + 1 - 1/abs(1)) / 1;
if (__pyx_t_20 > 0)
{
#ifdef _OPENMP
#pragma omp parallel
#endif /* _OPENMP */
{
#ifdef _OPENMP
#pragma omp for firstprivate(__pyx_v_b) lastprivate(__pyx_v_b) schedule(dynamic) __pyx_t_6 = __pyx_v_num_blocks;
{
#if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
#undef likely
#undef unlikely
#define likely(x) (x)
#define unlikely(x) (x)
#endif
__pyx_t_20 = (__pyx_t_6 - 0 + 1 - 1/abs(1)) / 1;
if (__pyx_t_20 > 0)
{
#ifdef _OPENMP
#pragma omp parallel
#endif /* _OPENMP */
{
#ifdef _OPENMP
#pragma omp for firstprivate(__pyx_v_b) lastprivate(__pyx_v_b) schedule(dynamic) num_threads(__pyx_v_nthreads)
#endif /* _OPENMP */
for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_20; __pyx_t_10++){
{
__pyx_v_b = (int)(0 + 1 * __pyx_t_10);
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L6;
}
__pyx_L6:;
}
}
+4011: run_block_pull_2D(b, chain_ids_mv, starts_mv, attempts_mv, seeds_mv,
__pyx_f_5pimms_15mega_crank_fast_run_block_pull_2D(__pyx_v_b, __pyx_v_chain_ids_mv, __pyx_v_starts_mv, __pyx_v_attempts_mv, __pyx_v_seeds_mv, __pyx_v_chain_offset, __pyx_v_chain_length, __pyx_v_blo_x_mv, __pyx_v_blo_y_mv, __pyx_v_Lx, __pyx_v_Ly, __pyx_v_nbx, __pyx_v_nby, __pyx_v_shift_x, __pyx_v_shift_y, __pyx_cur_scope->__pyx_v_W, __pyx_v_grid, __pyx_v_type_grid, __pyx_v_idx_to_bead, __pyx_v_interaction_table, __pyx_v_LR_interaction_table, __pyx_v_SLR_interaction_table, __pyx_v_angle_lookup, __pyx_v_invtemp, __pyx_v_XDIM, __pyx_v_YDIM, __pyx_v_hardwall, __pyx_v_out_delta_mv, __pyx_v_out_accepted_mv);
}
}
}
}
}
#if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
#undef likely
#undef unlikely
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
#endif
}
4012: chain_offset, chain_length,
4013: blo_x_mv, blo_y_mv,
4014: Lx, Ly, nbx, nby,
4015: shift_x, shift_y, W,
4016: grid, type_grid, idx_to_bead,
4017: interaction_table, LR_interaction_table, SLR_interaction_table,
4018: angle_lookup, invtemp, XDIM, YDIM, hardwall,
4019: out_delta_mv, out_accepted_mv)
4020:
+4021: cdef long tot_d = 0
__pyx_v_tot_d = 0;
+4022: cdef int tot_a = 0
__pyx_v_tot_a = 0;
+4023: for b in range(num_blocks):
__pyx_t_20 = __pyx_v_num_blocks;
__pyx_t_10 = __pyx_t_20;
for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_10; __pyx_t_6+=1) {
__pyx_v_b = __pyx_t_6;
+4024: tot_d += out_delta_mv[b]
__pyx_t_21 = __pyx_v_b;
__pyx_v_tot_d = (__pyx_v_tot_d + (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_out_delta_mv.data) + __pyx_t_21)) ))));
+4025: tot_a += out_accepted_mv[b]
__pyx_t_21 = __pyx_v_b;
__pyx_v_tot_a = (__pyx_v_tot_a + (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_out_accepted_mv.data) + __pyx_t_21)) ))));
}
+4026: return (energy + tot_d, tot_a)
__Pyx_XDECREF(__pyx_r); __pyx_t_12 = __Pyx_PyLong_From_long((__pyx_v_energy + __pyx_v_tot_d)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4026, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_tot_a); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4026, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4026, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_12); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_12) != (0)) __PYX_ERR(0, 4026, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_4); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4) != (0)) __PYX_ERR(0, 4026, __pyx_L1_error); __pyx_t_12 = 0; __pyx_t_4 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0;