mesa-reader 0.3.3__tar.gz → 0.3.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,42 @@
1
+ Metadata-Version: 2.1
2
+ Name: mesa_reader
3
+ Version: 0.3.5
4
+ Summary: Tools for interacting with output from MESA star and MESA binary
5
+ Home-page: http://github.com/wmwolf/py_mesa_reader
6
+ Author: William M. Wolf
7
+ Author-email: wolfwm@uwec.edu
8
+ License: MIT
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: License :: OSI Approved :: MIT License
11
+ Classifier: Operating System :: OS Independent
12
+ Requires-Python: >=3.6
13
+ Description-Content-Type: text/markdown
14
+
15
+ mesa_reader
16
+ ===========
17
+
18
+ Tools for easily accessing and manipulating data from `MESA star` and `MESA binary` in python.
19
+
20
+ ## Installation
21
+ The easiest way to install is via `pip`:
22
+
23
+ pip install mesa_reader
24
+
25
+ You can also install by cloning or downloading the repository at github.com/wmwolf/py_mesa_reader, `cd` into it and then execute
26
+
27
+ python setup.py install
28
+
29
+ or
30
+
31
+ pip install .
32
+
33
+ to install the package on your system.
34
+
35
+ ## Uninstallation
36
+ Uninstall by executing
37
+
38
+ pip uninstall mesa_reader
39
+
40
+ ## Usage
41
+ Complete documentation on the `mesa_reader` module found
42
+ [here](https://wmwolf.github.io/py_mesa_reader).
@@ -0,0 +1,28 @@
1
+ mesa_reader
2
+ ===========
3
+
4
+ Tools for easily accessing and manipulating data from `MESA star` and `MESA binary` in python.
5
+
6
+ ## Installation
7
+ The easiest way to install is via `pip`:
8
+
9
+ pip install mesa_reader
10
+
11
+ You can also install by cloning or downloading the repository at github.com/wmwolf/py_mesa_reader, `cd` into it and then execute
12
+
13
+ python setup.py install
14
+
15
+ or
16
+
17
+ pip install .
18
+
19
+ to install the package on your system.
20
+
21
+ ## Uninstallation
22
+ Uninstall by executing
23
+
24
+ pip uninstall mesa_reader
25
+
26
+ ## Usage
27
+ Complete documentation on the `mesa_reader` module found
28
+ [here](https://wmwolf.github.io/py_mesa_reader).
@@ -8,35 +8,34 @@ import numpy as np
8
8
  class ProfileError(Exception):
9
9
 
10
10
  def __init__(self, msg):
11
- Exception.__init__(self, msg)
11
+ super().__init__(self, msg)
12
12
 
13
13
 
14
14
  class HistoryError(Exception):
15
15
 
16
16
  def __init__(self, msg):
17
- Exception.__init__(self, msg)
17
+ super().__init__(self, msg)
18
18
 
19
19
 
20
20
  class ModelNumberError(Exception):
21
21
 
22
22
  def __init__(self, msg):
23
- Exception.__init__(self, msg)
23
+ super().__init__(self, msg)
24
24
 
25
25
 
26
26
  class BadPathError(Exception):
27
27
 
28
28
  def __init__(self, msg):
29
- Exception.__init__(self, msg)
29
+ super().__init__(self, msg)
30
30
 
31
31
 
32
32
  class UnknownFileTypeError(Exception):
33
33
 
34
34
  def __init__(self, msg):
35
- Exception.__init__(self, msg)
35
+ super().__init__(self, msg)
36
36
 
37
37
 
38
38
  class MesaData:
39
-
40
39
  """Structure containing data from a Mesa output file.
41
40
 
42
41
  Reads a profile or history output file from mesa. Assumes a file with
@@ -88,14 +87,25 @@ class MesaData:
88
87
 
89
88
  # For pickle support
90
89
  def __getstate__(self):
91
- return (self.file_name, self.bulk_data, self.bulk_names, self.header_data, self.header_names)
90
+ return (
91
+ self.file_name,
92
+ self.bulk_data,
93
+ self.bulk_names,
94
+ self.header_data,
95
+ self.header_names,
96
+ )
92
97
 
93
98
  # For pickle support
94
99
  def __setstate__(self, state):
95
- self.file_name, self.bulk_data, self.bulk_names, self.header_data, self.header_names = state
96
-
97
- def __init__(self, file_name=join('.', 'LOGS', 'history.data'),
98
- file_type=None):
100
+ (
101
+ self.file_name,
102
+ self.bulk_data,
103
+ self.bulk_names,
104
+ self.header_data,
105
+ self.header_names,
106
+ ) = state
107
+
108
+ def __init__(self, file_name=join(".", "LOGS", "history.data"), file_type=None):
99
109
  """Make a MesaData object from a Mesa output file.
100
110
 
101
111
  Reads a profile or history output file from mesa. Assumes a file with
@@ -163,21 +173,21 @@ class MesaData:
163
173
  # attempt auto-detection of file_type (if not supplied)
164
174
  if self.file_type is None:
165
175
  if self.file_name.endswith((".data", ".log")):
166
- self.file_type = 'log'
176
+ self.file_type = "log"
167
177
  elif self.file_name.endswith(".mod"):
168
- self.file_type = 'model'
178
+ self.file_type = "model"
169
179
  else:
170
- raise UnknownFileTypeError("Unknown file type for file {}".format(
171
- self.file_name))
180
+ raise UnknownFileTypeError(
181
+ "Unknown file type for file {}".format(self.file_name)
182
+ )
172
183
 
173
184
  # punt to reading method appropriate for each file type
174
- if self.file_type == 'model':
185
+ if self.file_type == "model":
175
186
  self.read_model_data()
176
- elif self.file_type == 'log':
187
+ elif self.file_type == "log":
177
188
  self.read_log_data()
178
189
  else:
179
- raise UnknownFileTypeError("Unknown file type {}".format(
180
- self.file_type))
190
+ raise UnknownFileTypeError("Unknown file type {}".format(self.file_type))
181
191
 
182
192
  def read_log_data(self):
183
193
  """Reads in or update data from the original log (.data or .log) file.
@@ -192,8 +202,11 @@ class MesaData:
192
202
  None
193
203
  """
194
204
  self.bulk_data = np.genfromtxt(
195
- self.file_name, skip_header=MesaData.bulk_names_line - 1,
196
- names=True, dtype=None)
205
+ self.file_name,
206
+ skip_header=MesaData.bulk_names_line - 1,
207
+ names=True,
208
+ dtype=None,
209
+ )
197
210
  self.bulk_names = self.bulk_data.dtype.names
198
211
  header_data = []
199
212
  with open(self.file_name) as f:
@@ -231,30 +244,30 @@ class MesaData:
231
244
  """
232
245
 
233
246
  def pythonize_number(num_string):
234
- """Convert fotran double [string] to python readable number [string].
247
+ """Convert fortran double [string] to python readable number [string].
235
248
 
236
249
  Converts numbers with exponential notation of D+, D-, d+, or d-
237
250
  to E+ or E- so that a python interpreter properly understands them.
238
251
  Leaves all other strings the untouched.
239
252
  """
240
- num_string = re.sub('(d|D)\+', 'E+', num_string)
241
- return re.sub('(d|D)-', 'E-', num_string)
253
+ num_string = re.sub(r"(d|D)\+", "E+", num_string)
254
+ return re.sub(r"(d|D)-", "E-", num_string)
242
255
 
243
- with open(self.file_name, 'r') as f:
256
+ with open(self.file_name, "r") as f:
244
257
  lines = f.readlines()
245
258
  # Walk through file until we get to the last blank line, saving
246
259
  # relevant data as we go.
247
- blank_line_matcher = re.compile('^\s*$')
260
+ blank_line_matcher = re.compile(r"^\s*$")
248
261
  i = 0
249
262
  found_blank_line = False
250
263
  while not found_blank_line:
251
264
  i += 1
252
- found_blank_line = (blank_line_matcher.match(lines[i]) is not None)
265
+ found_blank_line = blank_line_matcher.match(lines[i]) is not None
253
266
  # now on blank line 1, advance through one or more lines to get to
254
267
  # header data
255
268
  while found_blank_line:
256
269
  i += 1
257
- found_blank_line = (blank_line_matcher.match(lines[i]) is not None)
270
+ found_blank_line = blank_line_matcher.match(lines[i]) is not None
258
271
  # now done with blank lines and on to header data
259
272
  self.header_names = []
260
273
  self.header_data = {}
@@ -263,22 +276,23 @@ class MesaData:
263
276
  self.header_data[name] = eval(pythonize_number(val))
264
277
  self.header_names.append(name)
265
278
  i += 1
266
- found_blank_line = (blank_line_matcher.match(lines[i]) is not None)
279
+ found_blank_line = blank_line_matcher.match(lines[i]) is not None
267
280
  # now on blank line 2, advance until we get to column names
268
281
  while found_blank_line:
269
282
  i += 1
270
- found_blank_line = (blank_line_matcher.match(lines[i]) is not None)
271
- self.bulk_names = ['zone']
283
+ found_blank_line = blank_line_matcher.match(lines[i]) is not None
284
+ self.bulk_names = ["zone"]
272
285
  self.bulk_names += lines[i].split()
273
286
  i += 1
274
287
  self.bulk_data = {}
275
288
  temp_data = []
276
289
  found_blank_line = False
277
290
  while not found_blank_line:
278
- temp_data.append([eval(pythonize_number(datum)) for datum in
279
- lines[i].split()])
291
+ temp_data.append(
292
+ [eval(pythonize_number(datum)) for datum in lines[i].split()]
293
+ )
280
294
  i += 1
281
- found_blank_line = (blank_line_matcher.match(lines[i]) is not None)
295
+ found_blank_line = blank_line_matcher.match(lines[i]) is not None
282
296
  temp_data = np.array(temp_data).T
283
297
  for i in range(len(self.bulk_names)):
284
298
  self.bulk_data[self.bulk_names[i]] = temp_data[i]
@@ -352,7 +366,7 @@ class MesaData:
352
366
  if self.in_data(key):
353
367
  return self.bulk_data[key]
354
368
  elif self._log_version(key) is not None:
355
- return 10**self.bulk_data[self._log_version(key)]
369
+ return 10 ** self.bulk_data[self._log_version(key)]
356
370
  elif self._ln_version(key) is not None:
357
371
  return np.exp(self.bulk_data[self._ln_version(key)])
358
372
  elif self._exp10_version(key) is not None:
@@ -418,7 +432,7 @@ class MesaData:
418
432
  bool
419
433
  True if file is a history file, otherwise False
420
434
  """
421
- return 'model_number' in self.bulk_names
435
+ return "model_number" in self.bulk_names
422
436
 
423
437
  def in_header(self, key):
424
438
  """Determine if `key` is an available header data category.
@@ -486,7 +500,7 @@ class MesaData:
486
500
  The "logified" version of the key, if available. If unavailable,
487
501
  `None`.
488
502
  """
489
- log_prefixes = ['log_', 'log', 'lg_', 'lg']
503
+ log_prefixes = ["log_", "log", "lg_", "lg"]
490
504
  for prefix in log_prefixes:
491
505
  if self.in_data(prefix + key):
492
506
  return prefix + key
@@ -509,7 +523,7 @@ class MesaData:
509
523
  The "ln-ified" version of the key, if available. If unavailable,
510
524
  `None`.
511
525
  """
512
- log_prefixes = ['ln_', 'ln']
526
+ log_prefixes = ["ln_", "ln"]
513
527
  for prefix in log_prefixes:
514
528
  if self.in_data(prefix + key):
515
529
  return prefix + key
@@ -531,7 +545,7 @@ class MesaData:
531
545
  str or `None`
532
546
  The linear version of the key, if available. If unavailable, `None`.
533
547
  """
534
- log_matcher = re.compile('^lo?g_?(.+)')
548
+ log_matcher = re.compile(r"^lo?g_?(.+)")
535
549
  matches = log_matcher.match(key)
536
550
  if matches is not None:
537
551
  groups = matches.groups()
@@ -555,7 +569,7 @@ class MesaData:
555
569
  str or `None`
556
570
  The linear version of the key, if available. If unavailable, `None`.
557
571
  """
558
- log_matcher = re.compile('^ln_?(.+)')
572
+ log_matcher = re.compile(r"^ln_?(.+)")
559
573
  matches = log_matcher.match(key)
560
574
  if matches is not None:
561
575
  groups = matches.groups()
@@ -577,9 +591,13 @@ class MesaData:
577
591
  True if `key` can be mapped to a data type either directly or by
578
592
  exponentiating/taking logarithms of existing data types
579
593
  """
580
- return bool(self.in_data(key) or self._log_version(key) or
581
- self._ln_version(key) or self._exp_version(key) or
582
- self._exp10_version(key))
594
+ return bool(
595
+ self.in_data(key)
596
+ or self._log_version(key)
597
+ or self._ln_version(key)
598
+ or self._exp_version(key)
599
+ or self._exp10_version(key)
600
+ )
583
601
 
584
602
  def data_at_model_number(self, key, m_num):
585
603
  """Return main data at a specific model number (for history files).
@@ -636,16 +654,23 @@ class MesaData:
636
654
  data_at_model_number : returns the datum of a specific key a model no.
637
655
  """
638
656
  if not self.is_history():
639
- raise HistoryError("Can't get data at model number " +
640
- "because this isn't a history file")
641
- index = np.where(self.data('model_number') == m_num)[0]
657
+ raise HistoryError(
658
+ "Can't get data at model number " + "because this isn't a history file"
659
+ )
660
+ index = np.where(self.data("model_number") == m_num)[0]
642
661
  if len(index) > 1:
643
- raise ModelNumberError("Found more than one entry where model " +
644
- "number is " + str(m_num) + " in " +
645
- self.file_name + ". Report this.")
662
+ raise ModelNumberError(
663
+ "Found more than one entry where model "
664
+ + "number is "
665
+ + str(m_num)
666
+ + " in "
667
+ + self.file_name
668
+ + ". Report this."
669
+ )
646
670
  elif len(index) == 0:
647
- raise ModelNumberError("Couldn't find any entries with model " +
648
- "number " + str(m_num) + ".")
671
+ raise ModelNumberError(
672
+ "Couldn't find any entries with model " + "number " + str(m_num) + "."
673
+ )
649
674
  elif len(index) == 1:
650
675
  return index[0]
651
676
 
@@ -670,9 +695,9 @@ class MesaData:
670
695
  if dbg:
671
696
  print("Scrubbing history...")
672
697
  to_remove = []
673
- for i in range(len(self.data('model_number')) - 1):
674
- smallest_future = np.min(self.data('model_number')[i + 1:])
675
- if self.data('model_number')[i] >= smallest_future:
698
+ for i in range(len(self.data("model_number")) - 1):
699
+ smallest_future = np.min(self.data("model_number")[i + 1 :])
700
+ if self.data("model_number")[i] >= smallest_future:
676
701
  to_remove.append(i)
677
702
  if len(to_remove) == 0:
678
703
  if dbg:
@@ -692,7 +717,6 @@ class MesaData:
692
717
 
693
718
 
694
719
  class MesaProfileIndex:
695
-
696
720
  """Structure containing data from the profile index from MESA output.
697
721
 
698
722
  Reads in data from profile index file from MESA, allowing a mapping from
@@ -726,7 +750,7 @@ class MesaProfileIndex:
726
750
 
727
751
  index_start_line = 2
728
752
  index_end = None
729
- index_names = ['model_numbers', 'priorities', 'profile_numbers']
753
+ index_names = ["model_numbers", "priorities", "profile_numbers"]
730
754
 
731
755
  @classmethod
732
756
  def set_index_rows(cls, index_start=2, index_end=None):
@@ -739,11 +763,11 @@ class MesaProfileIndex:
739
763
  cls.index_names = name_arr
740
764
  return name_arr
741
765
 
742
- def __init__(self, file_name=join('.', 'LOGS', 'profiles.index')):
766
+ def __init__(self, file_name=join(".", "LOGS", "profiles.index")):
743
767
  self.file_name = file_name
744
768
  self.index_data = None
745
- self.model_number_string = ''
746
- self.profile_number_string = ''
769
+ self.model_number_string = ""
770
+ self.profile_number_string = ""
747
771
  self.profile_numbers = None
748
772
  self.model_numbers = None
749
773
  self.read_index()
@@ -762,13 +786,14 @@ class MesaProfileIndex:
762
786
  None
763
787
  """
764
788
  temp_index_data = np.genfromtxt(
765
- self.file_name, skip_header=MesaProfileIndex.index_start_line - 1,
766
- dtype=None)
789
+ self.file_name,
790
+ skip_header=MesaProfileIndex.index_start_line - 1,
791
+ dtype=None,
792
+ )
767
793
  self.model_number_string = MesaProfileIndex.index_names[0]
768
794
  self.profile_number_string = MesaProfileIndex.index_names[-1]
769
795
  self.index_data = temp_index_data[np.argsort(temp_index_data[:, 0])]
770
- self.index_data = dict(zip(MesaProfileIndex.index_names,
771
- temp_index_data.T))
796
+ self.index_data = dict(zip(MesaProfileIndex.index_names, temp_index_data.T))
772
797
  self.profile_numbers = self.data(self.profile_number_string)
773
798
  self.model_numbers = self.data(self.model_number_string)
774
799
 
@@ -792,8 +817,7 @@ class MesaProfileIndex:
792
817
  If input key is not a valid column header name.
793
818
  """
794
819
  if key not in self.index_names:
795
- raise KeyError("'" + str(key) + "' is not a column in " +
796
- self.file_name)
820
+ raise KeyError("'" + str(key) + "' is not a column in " + self.file_name)
797
821
  return np.array(self.index_data[key])
798
822
 
799
823
  def have_profile_with_model_number(self, model_number):
@@ -851,8 +875,9 @@ class MesaProfileIndex:
851
875
  `model_number`
852
876
  """
853
877
  if not (self.have_profile_with_model_number(model_number)):
854
- raise ProfileError("No profile with model number " +
855
- str(model_number) + ".")
878
+ raise ProfileError(
879
+ "No profile with model number " + str(model_number) + "."
880
+ )
856
881
  indices = np.where(self.data(self.model_number_string) == model_number)
857
882
  return np.take(self.data(self.profile_number_string), indices[0])[0]
858
883
 
@@ -879,10 +904,10 @@ class MesaProfileIndex:
879
904
  `profile_number`
880
905
  """
881
906
  if not (self.have_profile_with_profile_number(profile_number)):
882
- raise ProfileError("No Profile with profile number " +
883
- str(profile_number) + ".")
884
- indices = np.where(
885
- self.data(self.profile_number_string) == profile_number)
907
+ raise ProfileError(
908
+ "No Profile with profile number " + str(profile_number) + "."
909
+ )
910
+ indices = np.where(self.data(self.profile_number_string) == profile_number)
886
911
  return np.take(self.data(self.model_number_string), indices[0])[0]
887
912
 
888
913
  def __getattr__(self, method_name):
@@ -893,7 +918,6 @@ class MesaProfileIndex:
893
918
 
894
919
 
895
920
  class MesaLogDir:
896
-
897
921
  """Structure providing access to both history and profile output from MESA
898
922
 
899
923
  Provides access for accessing the history and profile data of a MESA run
@@ -963,9 +987,15 @@ class MesaLogDir:
963
987
  empty if memoization is shut off.
964
988
  """
965
989
 
966
- def __init__(self, log_path='LOGS', profile_prefix='profile',
967
- profile_suffix='data', history_file='history.data',
968
- index_file='profiles.index', memoize_profiles=True):
990
+ def __init__(
991
+ self,
992
+ log_path="LOGS",
993
+ profile_prefix="profile",
994
+ profile_suffix="data",
995
+ history_file="history.data",
996
+ index_file="profiles.index",
997
+ memoize_profiles=True,
998
+ ):
969
999
  self.log_path = log_path
970
1000
  self.profile_prefix = profile_prefix
971
1001
  self.profile_suffix = profile_suffix
@@ -974,17 +1004,17 @@ class MesaLogDir:
974
1004
 
975
1005
  # Check if log_path and files are dir/files.
976
1006
  if not os.path.isdir(self.log_path):
977
- raise BadPathError(self.log_path + ' is not a valid directory.')
1007
+ raise BadPathError(self.log_path + " is not a valid directory.")
978
1008
 
979
1009
  self.history_path = os.path.join(self.log_path, self.history_file)
980
1010
  if not os.path.isfile(self.history_path):
981
- raise BadPathError(self.history_file + ' not found in ' +
982
- self.log_path + '.')
1011
+ raise BadPathError(
1012
+ self.history_file + " not found in " + self.log_path + "."
1013
+ )
983
1014
 
984
1015
  self.index_path = os.path.join(self.log_path, self.index_file)
985
1016
  if not os.path.isfile(self.index_path):
986
- raise BadPathError(self.index_file + ' not found in ' +
987
- self.log_path + '.')
1017
+ raise BadPathError(self.index_file + " not found in " + self.log_path + ".")
988
1018
 
989
1019
  self.memoize_profiles = memoize_profiles
990
1020
 
@@ -1120,9 +1150,10 @@ class MesaLogDir:
1120
1150
  if to_use in self.profile_dict:
1121
1151
  return self.profile_dict[to_use]
1122
1152
 
1123
- file_name = join(self.log_path,
1124
- (self.profile_prefix + str(to_use) + '.' +
1125
- self.profile_suffix))
1153
+ file_name = join(
1154
+ self.log_path,
1155
+ (self.profile_prefix + str(to_use) + "." + self.profile_suffix),
1156
+ )
1126
1157
  p = MesaData(file_name)
1127
1158
  if self.memoize_profiles:
1128
1159
  self.profile_dict[to_use] = p
@@ -1178,8 +1209,7 @@ class MesaLogDir:
1178
1209
  for m_num in self.model_numbers:
1179
1210
  this_input = []
1180
1211
  for key in keys:
1181
- this_input.append(
1182
- self.history.data_at_model_number(key, m_num))
1212
+ this_input.append(self.history.data_at_model_number(key, m_num))
1183
1213
  inputs[m_num] = this_input
1184
1214
  mask = np.array([f(*inputs[m_num]) for m_num in self.model_numbers])
1185
1215
  return self.model_numbers[mask]
@@ -0,0 +1,42 @@
1
+ Metadata-Version: 2.1
2
+ Name: mesa-reader
3
+ Version: 0.3.5
4
+ Summary: Tools for interacting with output from MESA star and MESA binary
5
+ Home-page: http://github.com/wmwolf/py_mesa_reader
6
+ Author: William M. Wolf
7
+ Author-email: wolfwm@uwec.edu
8
+ License: MIT
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: License :: OSI Approved :: MIT License
11
+ Classifier: Operating System :: OS Independent
12
+ Requires-Python: >=3.6
13
+ Description-Content-Type: text/markdown
14
+
15
+ mesa_reader
16
+ ===========
17
+
18
+ Tools for easily accessing and manipulating data from `MESA star` and `MESA binary` in python.
19
+
20
+ ## Installation
21
+ The easiest way to install is via `pip`:
22
+
23
+ pip install mesa_reader
24
+
25
+ You can also install by cloning or downloading the repository at github.com/wmwolf/py_mesa_reader, `cd` into it and then execute
26
+
27
+ python setup.py install
28
+
29
+ or
30
+
31
+ pip install .
32
+
33
+ to install the package on your system.
34
+
35
+ ## Uninstallation
36
+ Uninstall by executing
37
+
38
+ pip uninstall mesa_reader
39
+
40
+ ## Usage
41
+ Complete documentation on the `mesa_reader` module found
42
+ [here](https://wmwolf.github.io/py_mesa_reader).
@@ -1,8 +1,10 @@
1
1
  from setuptools import setup
2
2
 
3
3
  setup(name='mesa_reader',
4
- version='0.3.3',
5
- description='tools for interacting with output from MESA star',
4
+ version='0.3.5',
5
+ description='Tools for interacting with output from MESA star and MESA binary',
6
+ long_description=open('README.md').read(),
7
+ long_description_content_type='text/markdown',
6
8
  url='http://github.com/wmwolf/py_mesa_reader',
7
9
  author='William M. Wolf',
8
10
  author_email='wolfwm@uwec.edu',
@@ -1,12 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: mesa_reader
3
- Version: 0.3.3
4
- Summary: tools for interacting with output from MESA star
5
- Home-page: http://github.com/wmwolf/py_mesa_reader
6
- Author: William M. Wolf
7
- Author-email: wolfwm@uwec.edu
8
- License: MIT
9
- Classifier: Programming Language :: Python :: 3
10
- Classifier: License :: OSI Approved :: MIT License
11
- Classifier: Operating System :: OS Independent
12
- Requires-Python: >=3.6
@@ -1,24 +0,0 @@
1
- py_mesa_reader
2
- ==============
3
-
4
- Tools for easily accessing and manipulating data from MESA in python.
5
-
6
- ## Installation
7
- Install by cloning or downloading the repository, `cd` into it and then execute
8
-
9
- python setup.py install
10
-
11
- or
12
-
13
- pip install .
14
-
15
- to install package on your system.
16
-
17
- ## Uninstallation
18
- Uninstall by executing
19
-
20
- pip uninstall mesa_reader
21
-
22
- ## Usage
23
- Complete documentation on the `mesa_reader` module found
24
- [here](https://wmwolf.github.io/py_mesa_reader).
@@ -1,12 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: mesa-reader
3
- Version: 0.3.3
4
- Summary: tools for interacting with output from MESA star
5
- Home-page: http://github.com/wmwolf/py_mesa_reader
6
- Author: William M. Wolf
7
- Author-email: wolfwm@uwec.edu
8
- License: MIT
9
- Classifier: Programming Language :: Python :: 3
10
- Classifier: License :: OSI Approved :: MIT License
11
- Classifier: Operating System :: OS Independent
12
- Requires-Python: >=3.6
File without changes