[![PyPi](https://img.shields.io/static/v1?label=PyPi&message=1.3.0&color=informational&logo=pypi)](https://pypi.org/project/boxbeam/)
[![doi](https://img.shields.io/badge/DOI-10.5281%2Fzenodo.12795533-red.svg)](https://zenodo.org/records/12795533)
[![pipeline status](https://gitlab.com/dlr-sy/boxbeam/badges/master/pipeline.svg)]()
# BoxBeam
BoxBeam is a legacy Fortran-based beam calculation tool. It is compiled for Python using [f2py](https://numpy.org/doc/stable/f2py).
> Installation from source requires an active Fortran compiler (ifort, gfortran).
## Downloading
Use GIT to get the latest code base. From the command line, use
```
git clone https://gitlab.dlr.de/fa_sw/boxbeam boxbeam
```
If you check out the repository for the first time, you have to initialize all submodule dependencies first. Execute the following from within the repository.
```
git submodule update --init --recursive
```
To update all refererenced submodules to the latest production level, use
```
git submodule foreach --recursive 'git pull origin $(git config -f $toplevel/.gitmodules submodule.$name.branch || echo master)'
```
## Installation
BoxBeam can be installed from source using [poetry](https://python-poetry.org). If you don't have [poetry](https://python-poetry.org) installed, run
```
pip install poetry --pre --upgrade
```
to install the latest version of [poetry](https://python-poetry.org) within your python environment. Use
```
poetry update
```
to update all dependencies in the lock file or directly execute
```
poetry install
```
to install all dependencies from the lock file. Last, you should be able to import BoxBeam as a python package.
```python
import boxbeam
```
## Example
Copy and paste the following text into a new python script to verify the local installation
```python
import os, sys
import boxbeam as bbeam
from itertools import count, zip_longest
from operator import itemgetter
from collections import OrderedDict
import numpy as np
def toolInitiate(directory):
#---INITIATE BOXBEAM VARIABLES
bbeam.boxbeam.initialize()
extendedLogFile = False
newPath = directory#+'\\TestProfile.out'
#setting control parameters for BOXBEAM
bbeam.steuer.druck = extendedLogFile # extended log file
bbeam.steuer.nurqer = False
bbeam.steuer.klog = 11
bbeam.steuer.kraeft = False # calculate nodal forces (utilization for FE applications)
#---CHANGE THE NAME OF THE OUTPUT FILE TO THE ACTUAL CROSS SECTION NAME
if extendedLogFile:
for ffile, bbeamPathVar in zip(["boxbeam_results.out",
"boxbeam_test.out"],
["csinfopath",
"vbinfopath"]):
fullPathFfile = os.path.abspath(os.path.join(newPath, ffile))
# 240 is the length of the character variable reserved
# within FORTRAN to store the directory name
if len(fullPathFfile) > 240:
raise Exception("Path length of file %s to long!" % fullPathFfile)
pathList = [""] * 240
pathList[: len(fullPathFfile)] = list(fullPathFfile)
if bbeamPathVar == "csinfopath":
self.bbeam.path.csinfopath = np.array(pathList,dtype="object")
else:
self.bbeam.path.vbinfopath = np.array(pathList,dtype="object")
def toolCalculate(capCount, webCount, cellCount, yi, zi, yk0, zk0, yklk, zklk, ig1, ig2, iak, ia,
webExtensionalStiffness, webShearStiffness, webRefPlaneDist, webThickness,webDensity):
#---ASSIGN GURT DATA
bbeam.gurt.ig = capCount
#---ASSIGN GURT COORDINATES
variableList = np.zeros(bbeam.restr.maxgu-bbeam.gurt.ig).tolist()
bbeam.gurt.yi = yi + variableList
bbeam.gurt.zi = zi + variableList
#---ASSIGN GURT MATERIAL INFORMATION WITHIN BOXBEAM
bbeam.gurt.bi = np.zeros(bbeam.restr.maxgu)
bbeam.gurt.myi = np.zeros(bbeam.restr.maxgu)
#---ASSIGN BOXBEAM WAND DATA
bbeam.wand.kw = webCount
#---ASSIGN WAND COORDINATES
variableList = np.zeros(bbeam.restr.maxwa-len(yk0)).tolist()
bbeam.wand.yk0 = yk0 + variableList
bbeam.wand.yklk = yklk + variableList
bbeam.wand.zk0 = zk0 + variableList
bbeam.wand.zklk = zklk + variableList
#---ASSIGN WAND MATERIAL INFORMATION WITHIN BOXBEAM
variableList = np.zeros(bbeam.restr.maxwa-bbeam.wand.kw).tolist()
bbeam.wand.it = (5*np.ones(bbeam.wand.kw)).tolist()+variableList
bbeam.wand.bk = webExtensionalStiffness+variableList
bbeam.wand.gk = webShearStiffness+variableList
bbeam.wand.rhok = webDensity+variableList
bbeam.wand.e = webRefPlaneDist+variableList
#---ASSIGN WAND TOPOLOGY WITHIN BOXBEAM
bbeam.wand.th = webThickness+variableList
bbeam.wand.ig1 = ig1+variableList
bbeam.wand.ig2 = ig2+variableList
#---ASSIGN BOXBEAM ZELLE DATA
bbeam.zelle.az = cellCount
variableList = np.zeros(bbeam.restr.maxze-bbeam.zelle.az).tolist()
bbeam.zelle.iak = iak+variableList
iaArrayTransposed = np.zeros((bbeam.restr.maxze, bbeam.restr.maxgu))
for cellNumber in range(int(bbeam.restr.maxze)):
if cellNumber < cellCount:
iaArrayTransposed[cellNumber, :len(ia[cellNumber])] += ia[cellNumber]
bbeam.zelle.ia = iaArrayTransposed.T
#---ASSIGN BOXBEAM UNIFY LOADS
for attrName, load in zip_longest(["qqx","qqy","qqz","qmx","qmy","qmz"], reactionForces):
setattr(bbeam.spanug, attrName, load)
#---EXECUTE BOXBEAM FOR CALCULATING THE CROSS SECTION PARAMETERS
bbeam.boxbeam.getequivalentxsection()
crossSectionParamNames = ['YS','ZS','YT','ZT','YMST','ZMST','YMSTAC','ZMSTAC','BX',
'ALPHA','DYYSTE','DZZSTE','DYY','DZZ','DZY','DT','M','IYYS','IZZS','IZYS','ITT']
crossSectionParameters = {}
for param in crossSectionParamNames:
crossSectionParameters[param] = float(getattr(bbeam.quer, param.lower()))
effectiveProps = OrderedDict([
('EA',crossSectionParameters['BX'] ),
('EIxx',crossSectionParameters['DYY'] ),
('EIyy',crossSectionParameters['DZZ'] ),
('GJ',crossSectionParameters['DT'] ),
('YS',crossSectionParameters['YS'] ),
('ZS',crossSectionParameters['ZS'] ),
])
if __name__ == '__main__':
#Specify folder where output files are to be stored
runDir = os.path.join(os.getcwd(),"boxbeam")
try:
os.makedirs(runDir)
except WindowsError:
pass
#Tool specific limitations
#maxCaps = 22 #variable specifying the maximum number of caps within a BoxBeam cross section - defined in bbeam.pyd
#maxWebs = 31 #variable specifying the maximum number of walls within a BoxBeam cross section - defined in bbeam.pyd
#maxCells = 10 #variable specifying the maximum number of cells within a BoxBeam cross section - defined in bbeam.pyd
#------------------------------------------------------------------------------------------------------------------------
# Initiation of boxbeam
#------------------------------------------------------------------------------------------------------------------------
toolInitiate(runDir)
#------------------------------------------------------------------------------------------------------------------------
# Input for profile
#------------------------------------------------------------------------------------------------------------------------
calcGeometry = False # If true the material data is set in a fashion, that the geometric properties (e.g. area moments of inertia) can be calculated.
thickness1 = 1.25
thickness2 = .375
if calcGeometry:
extensionalStiffness1 = 1.*thickness1
extensionalStiffness2 = 1.*thickness2
shearStiffness1 = 1.*thickness1
shearStiffness2 = 1.*thickness2
density1 = 1.*thickness1
density2 = 1.*thickness2
bbeam.steuer.nurqer = True
#"qqx","qqy","qqz","qmx","qmy","qmz"
reactionForces = [0., 0., 0., 0., 0., 0.]
else:
extensionalStiffness1 = 7.3335e4*thickness1
extensionalStiffness2 = 3.2232e4*thickness2
shearStiffness1 = 1.7327e4*thickness1
shearStiffness2 = 2.5012e4*thickness2
density1 = 0.00158*thickness1
density2 = 0.00158*thickness2
#"qqx","qqy","qqz","qmx","qmy","qmz"
reactionForces = [0., 0., 500., 0., -62500., 0.]
#---RETRIEVING POINT LOCATIONS AND TOPOLOGY
yi,zi,yk0,zk0 = [],[],[],[]
yklk, zklk, ig1, ig2 = [],[],[],[]
iak = []
ia = []
webExtensionalStiffness = []
webShearStiffness, webRefPlaneDist = [], []
webThickness, webDensity = [],[]
capExtensionalStiffness = []
capMass = []
#definition of simple profile
capCount = 8
webCount = 9
cellCount = 2
yi = [55., 55., -225., 13., 13., 75., -75., 75.]
zi = [12., -12., 0., 18., -18., 0., 16., 16.]
yk0 = [55., 75., 55., 13., -75., -225., -75., 13., 13., 13.]
zk0 = [12., 0., -12., -18., -16., 0., 16., 18., 18., 18.]
yklk = [75., 55., 13., -75., -225., -75., 13., 55., 13., 13.]
zklk = [0., -12., -18., -16., 0., 16., 18., 12., -18., -18.]
ig1 = [1, 6, 2, 5, 8, 3, 7, 4, 4]
ig2 = [6, 2, 5, 8, 3, 7, 4, 1, 5]
iak = [5, 5]
ia = [[1, 6, 2, 5, 4], [5, 8, 3, 7, 4]]
webExtensionalStiffness = [extensionalStiffness1]*(webCount-1)+[extensionalStiffness2]
webShearStiffness = [shearStiffness1]*(webCount-1)+[shearStiffness2]
webRefPlaneDist = [thickness1/2.]*(webCount-1)+[thickness2/2.]
webThickness = [thickness1]*(webCount-1)+[thickness2]
webDensity = [density1]*(webCount-1)+[density2]
#------------------------------------------------------------------------------------------------------------------------
# Assigning variables of boxbeam
# Executing boxbeam
# Retrieving results from boxbeam
#------------------------------------------------------------------------------------------------------------------------
toolCalculate(
capCount, webCount, cellCount, yi, zi, yk0, zk0, yklk, zklk, ig1, ig2, iak, ia,
webExtensionalStiffness, webShearStiffness, webRefPlaneDist, webThickness,webDensity
)
```
## Contact
* [Marc Garbade](mailto:marc.garbade@dlr.de)
## Support
* [List of Contributors](CONTRIBUTING.md)
Raw data
{
"_id": null,
"home_page": "https://gitlab.com/dlr-sy/boxbeam",
"name": "boxbeam",
"maintainer": "Garbade, Marc",
"docs_url": null,
"requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7",
"maintainer_email": "marc.garbade@dlr.de",
"keywords": "analysis, beam, composite",
"author": "Heinecke, Falk",
"author_email": "falk.heinecke@volkswagen.de",
"download_url": null,
"platform": null,
"description": "[![PyPi](https://img.shields.io/static/v1?label=PyPi&message=1.3.0&color=informational&logo=pypi)](https://pypi.org/project/boxbeam/)\n[![doi](https://img.shields.io/badge/DOI-10.5281%2Fzenodo.12795533-red.svg)](https://zenodo.org/records/12795533)\n[![pipeline status](https://gitlab.com/dlr-sy/boxbeam/badges/master/pipeline.svg)]()\n\n# BoxBeam\nBoxBeam is a legacy Fortran-based beam calculation tool. It is compiled for Python using [f2py](https://numpy.org/doc/stable/f2py).\n> Installation from source requires an active Fortran compiler (ifort, gfortran). \n## Downloading\nUse GIT to get the latest code base. From the command line, use\n```\ngit clone https://gitlab.dlr.de/fa_sw/boxbeam boxbeam\n```\nIf you check out the repository for the first time, you have to initialize all submodule dependencies first. Execute the following from within the repository. \n```\ngit submodule update --init --recursive\n```\nTo update all refererenced submodules to the latest production level, use\n```\ngit submodule foreach --recursive 'git pull origin $(git config -f $toplevel/.gitmodules submodule.$name.branch || echo master)'\n```\n## Installation\nBoxBeam can be installed from source using [poetry](https://python-poetry.org). If you don't have [poetry](https://python-poetry.org) installed, run\n```\npip install poetry --pre --upgrade\n```\nto install the latest version of [poetry](https://python-poetry.org) within your python environment. Use\n```\npoetry update\n```\nto update all dependencies in the lock file or directly execute\n```\npoetry install\n```\nto install all dependencies from the lock file. Last, you should be able to import BoxBeam as a python package.\n```python\nimport boxbeam\n```\n## Example\nCopy and paste the following text into a new python script to verify the local installation\n```python\nimport os, sys\nimport boxbeam as bbeam\n \nfrom itertools import count, zip_longest\nfrom operator import itemgetter\nfrom collections import OrderedDict\nimport numpy as np\n\ndef toolInitiate(directory):\n #---INITIATE BOXBEAM VARIABLES\n bbeam.boxbeam.initialize()\n\n extendedLogFile = False\n newPath = directory#+'\\\\TestProfile.out'\n\n #setting control parameters for BOXBEAM\n bbeam.steuer.druck = extendedLogFile # extended log file\n bbeam.steuer.nurqer = False\n bbeam.steuer.klog = 11\n bbeam.steuer.kraeft = False # calculate nodal forces (utilization for FE applications)\n\n #---CHANGE THE NAME OF THE OUTPUT FILE TO THE ACTUAL CROSS SECTION NAME\n if extendedLogFile:\n for ffile, bbeamPathVar in zip([\"boxbeam_results.out\", \n \"boxbeam_test.out\"], \n [\"csinfopath\", \n \"vbinfopath\"]):\n\n fullPathFfile = os.path.abspath(os.path.join(newPath, ffile))\n\n # 240 is the length of the character variable reserved\n # within FORTRAN to store the directory name\n if len(fullPathFfile) > 240:\n raise Exception(\"Path length of file %s to long!\" % fullPathFfile)\n\n pathList = [\"\"] * 240\n pathList[: len(fullPathFfile)] = list(fullPathFfile)\n\n if bbeamPathVar == \"csinfopath\":\n self.bbeam.path.csinfopath = np.array(pathList,dtype=\"object\")\n else:\n self.bbeam.path.vbinfopath = np.array(pathList,dtype=\"object\")\n\ndef toolCalculate(capCount, webCount, cellCount, yi, zi, yk0, zk0, yklk, zklk, ig1, ig2, iak, ia, \n webExtensionalStiffness, webShearStiffness, webRefPlaneDist, webThickness,webDensity):\n #---ASSIGN GURT DATA\n bbeam.gurt.ig = capCount\n \n #---ASSIGN GURT COORDINATES\n variableList = np.zeros(bbeam.restr.maxgu-bbeam.gurt.ig).tolist()\n bbeam.gurt.yi = yi + variableList\n bbeam.gurt.zi = zi + variableList\n \n #---ASSIGN GURT MATERIAL INFORMATION WITHIN BOXBEAM\n bbeam.gurt.bi = np.zeros(bbeam.restr.maxgu)\n bbeam.gurt.myi = np.zeros(bbeam.restr.maxgu)\n\n #---ASSIGN BOXBEAM WAND DATA\n bbeam.wand.kw = webCount\n \n #---ASSIGN WAND COORDINATES\n variableList = np.zeros(bbeam.restr.maxwa-len(yk0)).tolist()\n bbeam.wand.yk0 = yk0 + variableList\n bbeam.wand.yklk = yklk + variableList\n bbeam.wand.zk0 = zk0 + variableList\n bbeam.wand.zklk = zklk + variableList\n \n #---ASSIGN WAND MATERIAL INFORMATION WITHIN BOXBEAM\n variableList = np.zeros(bbeam.restr.maxwa-bbeam.wand.kw).tolist()\n bbeam.wand.it = (5*np.ones(bbeam.wand.kw)).tolist()+variableList\n bbeam.wand.bk = webExtensionalStiffness+variableList\n bbeam.wand.gk = webShearStiffness+variableList\n bbeam.wand.rhok = webDensity+variableList\n bbeam.wand.e = webRefPlaneDist+variableList\n \n #---ASSIGN WAND TOPOLOGY WITHIN BOXBEAM\n bbeam.wand.th = webThickness+variableList\n bbeam.wand.ig1 = ig1+variableList\n bbeam.wand.ig2 = ig2+variableList\n\n #---ASSIGN BOXBEAM ZELLE DATA\n bbeam.zelle.az = cellCount\n variableList = np.zeros(bbeam.restr.maxze-bbeam.zelle.az).tolist()\n bbeam.zelle.iak = iak+variableList\n \n iaArrayTransposed = np.zeros((bbeam.restr.maxze, bbeam.restr.maxgu))\n for cellNumber in range(int(bbeam.restr.maxze)):\n if cellNumber < cellCount:\n iaArrayTransposed[cellNumber, :len(ia[cellNumber])] += ia[cellNumber]\n bbeam.zelle.ia = iaArrayTransposed.T\n\n #---ASSIGN BOXBEAM UNIFY LOADS\n for attrName, load in zip_longest([\"qqx\",\"qqy\",\"qqz\",\"qmx\",\"qmy\",\"qmz\"], reactionForces):\n setattr(bbeam.spanug, attrName, load)\n\n #---EXECUTE BOXBEAM FOR CALCULATING THE CROSS SECTION PARAMETERS\n bbeam.boxbeam.getequivalentxsection()\n\n crossSectionParamNames = ['YS','ZS','YT','ZT','YMST','ZMST','YMSTAC','ZMSTAC','BX',\n 'ALPHA','DYYSTE','DZZSTE','DYY','DZZ','DZY','DT','M','IYYS','IZZS','IZYS','ITT']\n\n crossSectionParameters = {}\n for param in crossSectionParamNames:\n crossSectionParameters[param] = float(getattr(bbeam.quer, param.lower()))\n\n effectiveProps = OrderedDict([\n ('EA',crossSectionParameters['BX'] ),\n ('EIxx',crossSectionParameters['DYY'] ),\n ('EIyy',crossSectionParameters['DZZ'] ),\n ('GJ',crossSectionParameters['DT'] ),\n ('YS',crossSectionParameters['YS'] ),\n ('ZS',crossSectionParameters['ZS'] ),\n ])\n\n\nif __name__ == '__main__':\n\n #Specify folder where output files are to be stored\n runDir = os.path.join(os.getcwd(),\"boxbeam\")\n try:\n os.makedirs(runDir)\n except WindowsError: \n pass\n\n #Tool specific limitations\n #maxCaps = 22 #variable specifying the maximum number of caps within a BoxBeam cross section - defined in bbeam.pyd\n #maxWebs = 31 #variable specifying the maximum number of walls within a BoxBeam cross section - defined in bbeam.pyd\n #maxCells = 10 #variable specifying the maximum number of cells within a BoxBeam cross section - defined in bbeam.pyd\n\n#------------------------------------------------------------------------------------------------------------------------\n# Initiation of boxbeam\n#------------------------------------------------------------------------------------------------------------------------\n\n toolInitiate(runDir)\n\n#------------------------------------------------------------------------------------------------------------------------\n# Input for profile\n#------------------------------------------------------------------------------------------------------------------------\n\n calcGeometry = False # If true the material data is set in a fashion, that the geometric properties (e.g. area moments of inertia) can be calculated.\n \n thickness1 = 1.25\n thickness2 = .375\n if calcGeometry:\n extensionalStiffness1 = 1.*thickness1\n extensionalStiffness2 = 1.*thickness2\n shearStiffness1 = 1.*thickness1\n shearStiffness2 = 1.*thickness2\n density1 = 1.*thickness1\n density2 = 1.*thickness2\n bbeam.steuer.nurqer = True\n\n #\"qqx\",\"qqy\",\"qqz\",\"qmx\",\"qmy\",\"qmz\"\n reactionForces = [0., 0., 0., 0., 0., 0.] \n \n else:\n extensionalStiffness1 = 7.3335e4*thickness1\n extensionalStiffness2 = 3.2232e4*thickness2\n shearStiffness1 = 1.7327e4*thickness1\n shearStiffness2 = 2.5012e4*thickness2\n density1 = 0.00158*thickness1\n density2 = 0.00158*thickness2\n\n #\"qqx\",\"qqy\",\"qqz\",\"qmx\",\"qmy\",\"qmz\"\n reactionForces = [0., 0., 500., 0., -62500., 0.] \n\n #---RETRIEVING POINT LOCATIONS AND TOPOLOGY\n yi,zi,yk0,zk0 = [],[],[],[]\n yklk, zklk, ig1, ig2 = [],[],[],[]\n iak = []\n ia = []\n \n webExtensionalStiffness = []\n webShearStiffness, webRefPlaneDist = [], []\n webThickness, webDensity = [],[]\n \n capExtensionalStiffness = []\n capMass = []\n\n #definition of simple profile\n capCount = 8 \n webCount = 9\n cellCount = 2\n \n yi = [55., 55., -225., 13., 13., 75., -75., 75.]\n zi = [12., -12., 0., 18., -18., 0., 16., 16.]\n yk0 = [55., 75., 55., 13., -75., -225., -75., 13., 13., 13.]\n zk0 = [12., 0., -12., -18., -16., 0., 16., 18., 18., 18.]\n yklk = [75., 55., 13., -75., -225., -75., 13., 55., 13., 13.] \n zklk = [0., -12., -18., -16., 0., 16., 18., 12., -18., -18.]\n\n ig1 = [1, 6, 2, 5, 8, 3, 7, 4, 4]\n ig2 = [6, 2, 5, 8, 3, 7, 4, 1, 5]\n iak = [5, 5]\n ia = [[1, 6, 2, 5, 4], [5, 8, 3, 7, 4]]\n\n webExtensionalStiffness = [extensionalStiffness1]*(webCount-1)+[extensionalStiffness2]\n webShearStiffness = [shearStiffness1]*(webCount-1)+[shearStiffness2]\n webRefPlaneDist = [thickness1/2.]*(webCount-1)+[thickness2/2.]\n webThickness = [thickness1]*(webCount-1)+[thickness2]\n webDensity = [density1]*(webCount-1)+[density2]\n\n#------------------------------------------------------------------------------------------------------------------------\n# Assigning variables of boxbeam\n# Executing boxbeam\n# Retrieving results from boxbeam\n#------------------------------------------------------------------------------------------------------------------------\n\n toolCalculate(\n capCount, webCount, cellCount, yi, zi, yk0, zk0, yklk, zklk, ig1, ig2, iak, ia, \n webExtensionalStiffness, webShearStiffness, webRefPlaneDist, webThickness,webDensity\n )\n```\n## Contact\n* [Marc Garbade](mailto:marc.garbade@dlr.de)\n## Support\n* [List of Contributors](CONTRIBUTING.md)\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Calculation of effective cross-sectional properties of composite beams",
"version": "1.3.0.post1",
"project_urls": {
"Changelog": "https://gitlab.com/dlr-sy/boxbeam/-/blob/master/CHANGELOG.md",
"Documentation": "https://gitlab.com/dlr-sy/boxbeam/-/blob/master/README.md",
"Homepage": "https://gitlab.com/dlr-sy/boxbeam",
"Repository": "https://gitlab.com/dlr-sy/boxbeam"
},
"split_keywords": [
"analysis",
" beam",
" composite"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "ec07c3f15ca40ed6b48b57f8c83854bf6a95ce999320b0d5928aec9708dc8473",
"md5": "4f4313a88b58c9aa965b5628a3fb0cc9",
"sha256": "7aecf36fb58635b15e87de15d1fe2ddd65e05f9289d83f59f2458dd47b559cc0"
},
"downloads": -1,
"filename": "boxbeam-1.3.0.post1-cp27-cp27m-win_amd64.whl",
"has_sig": false,
"md5_digest": "4f4313a88b58c9aa965b5628a3fb0cc9",
"packagetype": "bdist_wheel",
"python_version": "cp27",
"requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7",
"size": 443465,
"upload_time": "2024-07-24T18:28:17",
"upload_time_iso_8601": "2024-07-24T18:28:17.634366Z",
"url": "https://files.pythonhosted.org/packages/ec/07/c3f15ca40ed6b48b57f8c83854bf6a95ce999320b0d5928aec9708dc8473/boxbeam-1.3.0.post1-cp27-cp27m-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a88ec3558874d6e973f3038b0713dbbf2e58ae4361bb37218b131b2f14af8dfc",
"md5": "e50014a07669e147d03730e2f4a8ea9b",
"sha256": "b31b15c9af0cb9958f0b9045e4320d39511ee9fbd18115a42d3e7bbba7d8e3e4"
},
"downloads": -1,
"filename": "boxbeam-1.3.0.post1-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "e50014a07669e147d03730e2f4a8ea9b",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7",
"size": 447400,
"upload_time": "2024-07-24T18:28:19",
"upload_time_iso_8601": "2024-07-24T18:28:19.490081Z",
"url": "https://files.pythonhosted.org/packages/a8/8e/c3558874d6e973f3038b0713dbbf2e58ae4361bb37218b131b2f14af8dfc/boxbeam-1.3.0.post1-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "15125a2effd2c5e8d88cbb7a837bc05ce25c6f277742d470d8da7f5c3ba7015d",
"md5": "9ff397aa68eb90b89a39c6b4b8af582f",
"sha256": "e4d6b87bae855a65f2205c90c891adb7fe6c8e793b9aa9f9df3526568fb5a520"
},
"downloads": -1,
"filename": "boxbeam-1.3.0.post1-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "9ff397aa68eb90b89a39c6b4b8af582f",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7",
"size": 447598,
"upload_time": "2024-07-24T18:28:21",
"upload_time_iso_8601": "2024-07-24T18:28:21.103773Z",
"url": "https://files.pythonhosted.org/packages/15/12/5a2effd2c5e8d88cbb7a837bc05ce25c6f277742d470d8da7f5c3ba7015d/boxbeam-1.3.0.post1-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "eb0f5ca83a87240723775416303fdb9002b60f237c1565d23d07fa0540c5ac31",
"md5": "280b1d58b8c764a8c2b7a2f47a61b1ef",
"sha256": "d8b1ab0660e7c5949a1eda8a137a89f991f1a3905f09fd2ceaf9c7be695a9eeb"
},
"downloads": -1,
"filename": "boxbeam-1.3.0.post1-cp35-cp35m-win_amd64.whl",
"has_sig": false,
"md5_digest": "280b1d58b8c764a8c2b7a2f47a61b1ef",
"packagetype": "bdist_wheel",
"python_version": "cp35",
"requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7",
"size": 444674,
"upload_time": "2024-07-24T18:28:22",
"upload_time_iso_8601": "2024-07-24T18:28:22.761448Z",
"url": "https://files.pythonhosted.org/packages/eb/0f/5ca83a87240723775416303fdb9002b60f237c1565d23d07fa0540c5ac31/boxbeam-1.3.0.post1-cp35-cp35m-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "2b1c51a448e87d17aaae0b07514767078c5e703efd34edcee762fcb34b184aa8",
"md5": "3c84bd63f672554be460dd7892d9aa97",
"sha256": "20921acade850ed0078ad6b8ff1cf1b44c825a114f50815db773fe6a0730a58d"
},
"downloads": -1,
"filename": "boxbeam-1.3.0.post1-cp36-cp36m-win_amd64.whl",
"has_sig": false,
"md5_digest": "3c84bd63f672554be460dd7892d9aa97",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7",
"size": 446574,
"upload_time": "2024-07-24T18:28:24",
"upload_time_iso_8601": "2024-07-24T18:28:24.035276Z",
"url": "https://files.pythonhosted.org/packages/2b/1c/51a448e87d17aaae0b07514767078c5e703efd34edcee762fcb34b184aa8/boxbeam-1.3.0.post1-cp36-cp36m-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6c8d61df879efd7d9a035565b5c6e2b1d4b275d70610d86503cd47ae69112555",
"md5": "d7a9109a0ee0785ab2dda1a73219cce1",
"sha256": "468775e5150c23c070f016481261a38dd520b030dbb8935f027f4942a4039d10"
},
"downloads": -1,
"filename": "boxbeam-1.3.0.post1-cp37-cp37m-win_amd64.whl",
"has_sig": false,
"md5_digest": "d7a9109a0ee0785ab2dda1a73219cce1",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7",
"size": 447876,
"upload_time": "2024-07-24T18:28:25",
"upload_time_iso_8601": "2024-07-24T18:28:25.821757Z",
"url": "https://files.pythonhosted.org/packages/6c/8d/61df879efd7d9a035565b5c6e2b1d4b275d70610d86503cd47ae69112555/boxbeam-1.3.0.post1-cp37-cp37m-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "95e4aed5aed4982fda1b9e3eb621cfa08411ea471987280e34420d6c5cd51d29",
"md5": "e2d31911785a28bf222c412732e0bad4",
"sha256": "2f1f56dc4146fec8661fb307a1be136bce02cc3c25e5ec7e7533023a0a3d2fb4"
},
"downloads": -1,
"filename": "boxbeam-1.3.0.post1-cp38-cp38-win_amd64.whl",
"has_sig": false,
"md5_digest": "e2d31911785a28bf222c412732e0bad4",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7",
"size": 446709,
"upload_time": "2024-07-24T18:28:27",
"upload_time_iso_8601": "2024-07-24T18:28:27.754064Z",
"url": "https://files.pythonhosted.org/packages/95/e4/aed5aed4982fda1b9e3eb621cfa08411ea471987280e34420d6c5cd51d29/boxbeam-1.3.0.post1-cp38-cp38-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "3715d25d65c4fcf546390abfc9eb3d22b55e6f6d5e6f0c9fd12dfdac254edf0c",
"md5": "8312dec6209411f7fd0a87d8025d2901",
"sha256": "911d08934445adb087d77c3c83fee945091fdccf1038c087535467de34b152cd"
},
"downloads": -1,
"filename": "boxbeam-1.3.0.post1-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "8312dec6209411f7fd0a87d8025d2901",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7",
"size": 447210,
"upload_time": "2024-07-24T18:28:29",
"upload_time_iso_8601": "2024-07-24T18:28:29.378453Z",
"url": "https://files.pythonhosted.org/packages/37/15/d25d65c4fcf546390abfc9eb3d22b55e6f6d5e6f0c9fd12dfdac254edf0c/boxbeam-1.3.0.post1-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-07-24 18:28:17",
"github": false,
"gitlab": true,
"bitbucket": false,
"codeberg": false,
"gitlab_user": "dlr-sy",
"gitlab_project": "boxbeam",
"lcname": "boxbeam"
}