2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Дурацкий вопрос касательно кода
Сообщение28.09.2024, 17:38 


27/09/14
12
Доброго времени суток.
Возникла необходимость использования кода на Python, написанного примерно пол года назад, и, посвященного обработке файлов-микрофотографий, сделанных трансмиссионным электронным микроскопом, с помощью возможностей искусственного интеллекта.
Ранее для открытия файла использовалась строка:
Код:
micrograph = Micrograph('file.dm3')

Отмечу, с данной строки начинается все обработка реальных фото, выше нее только библиотеки задаются.
Сегодня мне вместо ответной фразы "Fibrils_Example.dm3 opened as a Micrograph object" было выдано:
Код:
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-30-03733b51cf35> in <cell line: 2>()
      1 #initialise micrograph object and open file
----> 2 micrograph = Micrograph('0003.dm3')

TypeError: Micrograph.__init__() takes 1 positional argument but 2 were given

Во-первых, я не понимаю в чем проблема, во-вторых, все, что удалось за день перечитать в сети не помогло ни понять, ни решить данную проблему. Может кто сталкивался или по крайней мере может помочь разобраться? Отмечу, что то же самое получается и при использования tif-файлов.

 Профиль  
                  
 
 Re: Дурацкий вопрос касательно кода
Сообщение28.09.2024, 19:17 
Заслуженный участник
Аватара пользователя


01/09/13
4694
Novichock в сообщении #1656478 писал(а):
я не понимаю в чем проблема

Ну как можно что-то подсказать, не зная откуда этот Micrograph берётся?...
Видимо, изменилась соответствующая библиотека.

 Профиль  
                  
 
 Re: Дурацкий вопрос касательно кода
Сообщение28.09.2024, 19:27 


27/09/14
12
Спасибо за Ваш ответ.
Да, библиотека называется SimpliPyTEM.
В прошлый раз была версия 1.0.10, теперь с большим трудом удалось заставить заработать только версию 1.0.0. Почему не знаю. Просто версия 1.0.10 не работает и все. Пыталась ее заставить работать через "виртуально окружение", но, во-первых, я новичок и не слишком сильно разбираюсь, во-вторых, видимо где-то накосячила. В итоге, максимальная версия, которая заработала в "виртуальном окружении" это 1.0.1 и с ней та же проблема, что описана выше.
Но, как я понимаю это должно быть не принципиально, потому, что изначально у авторов методики все работало именно на 1.0.0 версии, несколько лет назад.

 Профиль  
                  
 
 Re: Дурацкий вопрос касательно кода
Сообщение28.09.2024, 20:11 


12/07/15
3363
г. Чехов
Может вы где-то в коде заняли указатель Micrograph? Я забыл, имеет ли значение разница micrograph и Micrograph. Поосторожнее тут. Python позволяет переопределять ключевые слова типа list, set, после этого соответствующие встроенные функции не работают.
ИМХО еще: попробуйте двойные кавычки вместо одинарных.

-- 28.09.2024, 20:20 --

А так да, ошибка парадоксальная. Ведь мы видим, что передан один позиционный аргумент (как положено), а пишет, что два. У меня такое бывало много раз, забыл как именно это решалось, но явно требуется перезагрузка ядра.

-- 28.09.2024, 20:34 --

Посмотрел код на гитхабе, когда-то нельзя было имя файла передать при создании объекта Micrograph.
Попробуйте после создания объекта использовать функцию open_dm(filename) или open_mrc(filename).

-- 28.09.2024, 20:52 --

Блин, извините за блуждающие мысли)
Короче, в старых версиях библиотеки имя файла при создании объекта передавать не следует.
Просто добавьте после создания:
Используется синтаксис Python
micrograph.open_file('0003.dm3')

или более конкретно
Используется синтаксис Python
micrograph.open_dm('0003.dm3')

(разницы вообще нет)

 Профиль  
                  
 
 Re: Дурацкий вопрос касательно кода
Сообщение28.09.2024, 21:12 
Заслуженный участник
Аватара пользователя


01/09/13
4694
Mihaylo в сообщении #1656508 писал(а):
что передан один позиционный аргумент

Нет, два. Ещё self.

 Профиль  
                  
 
 Re: Дурацкий вопрос касательно кода
Сообщение28.09.2024, 21:19 


12/07/15
3363
г. Чехов
Geen в сообщении #1656522 писал(а):
Нет, два. Ещё self.

Да! Очень плохая подсказка, ведь тот, кто использует библиотеку в душе не ведает про self. Надо так писать:
Код:
TypeError: Micrograph.__init__() takes self-argument and 0 positional arguments but 1 were given

 Профиль  
                  
 
 Re: Дурацкий вопрос касательно кода
Сообщение28.09.2024, 21:27 


01/09/14
603
Novichock в сообщении #1656478 писал(а):
с помощью возможностей искусственного интеллекта.

Novichock, а у ИИ не спрашивали? Бесплатные уже неплохо разбираются в программировании. Ответ от o1(платный)
Цитата:
Думал на протяжении 13 секунд
Здравствуйте!

Ошибка, которую вы получаете:

```
TypeError: Micrograph.__init__() takes 1 positional argument but 2 were given
```

указывает на то, что метод `__init__` класса `Micrograph` теперь принимает только один позиционный аргумент (обычно это `self`), но при создании объекта вы передаете ему два аргумента: неявный `self` и строку с именем файла `'0003.dm3'`.

**Возможные причины и решения:**

1. **Изменения в библиотеке или классе `Micrograph`:**

- **Причина:** Если вы используете стороннюю библиотеку для работы с микрофотографиями, возможно, за прошедшие полгода она обновилась, и сигнатура метода `__init__` изменилась. Теперь загрузка файла может выполняться другим способом.

- **Решение:** Ознакомьтесь с текущей документацией библиотеки. Возможно, теперь нужно сначала создать объект `Micrograph` без аргументов, а затем вызвать метод для открытия файла. Например:

```python
micrograph = Micrograph()
micrograph.open('0003.dm3')
```

Или использовать альтернативный конструктор, если такой имеется.

2. **Конфликт имен или импорт не той версии класса:**

- **Причина:** Возможно, у вас в коде или окружении появился другой класс с именем `Micrograph`, который не соответствует тому, который вы использовали ранее.

- **Решение:**

- Проверьте, откуда импортируется класс `Micrograph`. Убедитесь, что вы импортируете правильный класс из нужного модуля.

- Например, если ранее вы использовали:

```python
from your_library import Micrograph
```

Убедитесь, что `your_library` правильно установлена и импортируется.

3. **Изменения в окружении или зависимостях:**

- **Причина:** За время, прошедшее с момента последнего запуска кода, могли обновиться зависимости, версии Python или пакетов.

- **Решение:**

- Проверьте версии всех используемых библиотек и сравните их с теми, которые были при написании кода.

- Если вы использовали виртуальное окружение, попробуйте восстановить его или создать новое с нужными версиями пакетов.

4. **Просмотр исходного кода класса `Micrograph`:**

- **Действие:** Откройте исходный код класса `Micrograph` или воспользуйтесь функцией `help(Micrograph)` в Python, чтобы увидеть текущую сигнатуру метода `__init__` и другие доступные методы.

- **Цель:** Это поможет понять, какие параметры ожидает класс и как его правильно использовать в текущей версии.

**Рекомендации для решения проблемы:**

- **Проверьте документацию:** Ознакомьтесь с официальной документацией библиотеки или модуля, из которого импортируется `Micrograph`, чтобы узнать о возможных изменениях в API.

- **Используйте актуальный способ загрузки файлов:** Если метод загрузки микрофотографий изменился, адаптируйте свой код согласно новым требованиям. Например:

```python
micrograph = Micrograph()
micrograph.load('0003.dm3')
```

Или

```python
micrograph = Micrograph.from_file('0003.dm3')
```

- **Обратитесь к предыдущей версии библиотеки:** Если обновления в библиотеке являются причиной проблемы, и вы не можете изменить код, попробуйте установить предыдущую версию библиотеки, с которой ваш код работал корректно.

```bash
pip install your_library==версия
```

- **Проверка на конфликт имен:** Убедитесь, что в вашем коде нет другого класса или функции с именем `Micrograph`, который может перекрывать нужный вам класс.

**Заключение:**

Ошибка возникает из-за несоответствия ожидаемых аргументов в конструкторе класса `Micrograph`. Вероятнее всего, это связано с изменениями в библиотеке или окружении. Рекомендую проверить документацию и актуальный способ использования класса для загрузки микрофотографий. Если у вас есть дополнительная информация о том, из какой библиотеки импортируется `Micrograph`, я могу помочь более конкретно.

 Профиль  
                  
 
 Re: Дурацкий вопрос касательно кода
Сообщение28.09.2024, 21:35 


12/07/15
3363
г. Чехов
talash
Прикольно :appl:
Правда среди угадываемых ответов нет правильного. Лично я на Гитхабе всё узнал более точно.

 Профиль  
                  
 
 Re: Дурацкий вопрос касательно кода
Сообщение28.09.2024, 21:41 


01/09/14
603
Mihaylo в сообщении #1656528 писал(а):
talash
Прикольно :appl:
Правда среди угадываемых ответов нет правильного. Лично я на Гитхабе всё узнал более точно.

Нам на работе выдали доступ к платному чат-GPT, чтобы помогал программировать)
Какой правильный ответ?

-- 28.09.2024, 20:53 --

Mihaylo в сообщении #1656508 писал(а):
micrograph.open_file('0003.dm3')

Это правильный ответ? Название функции это детали, по сути же бот правильно написал.

 Профиль  
                  
 
 Re: Дурацкий вопрос касательно кода
Сообщение28.09.2024, 22:00 
Заслуженный участник
Аватара пользователя


01/09/13
4694
talash в сообщении #1656530 писал(а):
Название функции это детали, по сути же бот правильно написал.

А сколько денег он содрал за эту банальность?

 Профиль  
                  
 
 Re: Дурацкий вопрос касательно кода
Сообщение28.09.2024, 23:14 


01/09/14
603
Geen в сообщении #1656534 писал(а):
А сколько денег он содрал за эту банальность?

Там вроде месячная подписка 25-30$.

-- 28.09.2024, 22:15 --

Банальность, если сам в теме, а если ламер, то помогает здорово.

 Профиль  
                  
 
 Re: Дурацкий вопрос касательно кода
Сообщение29.09.2024, 08:19 


15/11/15
1082
talash в сообщении #1656527 писал(а):
Ответ от o1(платный)

А что за o1(платный)?
Ответ GPT-4o мне показался вполне внятным и решение случайно угадал )):

GPT-4o писал(а):
Ошибка, которую ты видишь, означает, что ты передаёшь два аргумента в конструктор класса Micrograph, а конструктор ожидает только один аргумент (как указано в сообщении об ошибке: "1 positional argument but 2 were given").

Разбор ошибки:
    - Micrograph('0003.dm3'): Ты передаёшь строку '0003.dm3' как аргумент.
    - Ошибка говорит о том, что конструктор класса Micrograph принимает только один аргумент (обычно это ссылка на сам объект self), и ты пытаешься передать второй аргумент, который он не ожидает.

Возможные причины и решения:
1. Неправильная реализация конструктора: Возможно, конструктор класса Micrograph был объявлен так, что он не принимает никаких дополнительных аргументов, кроме стандартного аргумента self. Например, вот как может выглядеть неправильная реализация:

Код:
class Micrograph:
    def __init__(self):  # Нет параметров, кроме self
        pass

2. Использование метода для открытия файла: Возможно, вместо передачи файла в конструктор, нужно использовать отдельный метод для загрузки файла после инициализации объекта.

Код:
micrograph = Micrograph()
micrograph.open_file('0003.dm3')

3. Использование библиотеки неправильно: Если Micrograph — это класс из библиотеки, то возможно, он был задуман для работы другим способом. Проверь документацию к библиотеке или классу Micrograph, чтобы убедиться, что ты передаёшь аргументы правильно.

 Профиль  
                  
 
 Re: Дурацкий вопрос касательно кода
Сообщение29.09.2024, 09:02 


01/09/14
603
gevaraweb в сообщении #1656613 писал(а):
А что за o1(платный)?

Следующая версия после 4o. Они обе доступны только по подписке, то есть платные.

 Профиль  
                  
 
 Re: Дурацкий вопрос касательно кода
Сообщение29.09.2024, 10:17 


01/09/14
603
gevaraweb
у вас подписка на чат гпт? Значит o1-preview должен быть доступен.

 Профиль  
                  
 
 Re: Дурацкий вопрос касательно кода
Сообщение29.09.2024, 11:02 


15/11/15
1082
talash
Да, точно, есть :). Как нибудь сравню ) Я подписался на ChatGPT 4o из интереса на месяц, обошлось с посредниками в 3000 руб.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Rasool


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group